软件开发

开发一个 Linux 调试器(五):源码和信号

开发一个 Linux 调试器(五):源码和信号

在这一部分,我们将进入实践,实现一些我们调试器后面会使用的 DWARF 原语。我们也会利用这个机会,使我们的调试器可以在命中一个断点时打印出当前的源码上下文。
学习用 Python 编程时要避免的 3 个错误

学习用 Python 编程时要避免的 3 个错误

为了让初学 Python 的程序员避免犯同样的错误,以下列出了我学习 Python 时犯的三种错误。这些错误要么是我长期以来经常犯的,要么是造成了需要几个小时解决的麻烦。
一篇缺失的 TypeScript 介绍

一篇缺失的 TypeScript 介绍

本文的主旨是为了介绍我们是如何看待 TypeScript 的以及它在加强 JavaScript 开发中所起的作用。 我们也将尽可能地给出那些类型和编译方面的那些时髦词汇的准确定义。
Neo4j 图数据库基础

Neo4j 图数据库基础

对于海量的各种非结构化信息来说,图数据库已经成为帮助收集、管理和搜索大量数据的技术。在本文中,我将向你展示图数据库的基础知识,帮助你快速了解概念模型。
使用 Apex 和 Compose MongoDB 开发 serverless

使用 Apex 和 Compose MongoDB 开发 serverless

和大多数事物一样,Apex 和 Lambda 并不是在所有场景下都完美。 但是,在你的工具箱中增加一个完全不需要你来管理底层建设的工具完全没有坏处。
开发一个 Linux 调试器(三):寄存器和内存

开发一个 Linux 调试器(三):寄存器和内存

上一篇博文中我们给调试器添加了一个简单的地址断点。这次,我们将添加读写寄存器和内存的功能,这将使我们能够使用我们的程序计数器、观察状态和改变程序的行为。
使用 Go 一年的体验

使用 Go 一年的体验

在使用 Go 一年之后,我们想要分享我们将一个小小的实验变成处理百万日志的生产服务器的一些想法和经验。
开发一个 Linux 调试器(一):准备环境

开发一个 Linux 调试器(一):准备环境

尽管调试器已经得到了广泛的使用,却并没有太多的资源告诉你它们的工作原理以及如何开发,尤其是和其它那些比如编译器等工具链技术相比而言。
机器学习的新捷径:通过 SYCL 在 GPU 上加速 C++

机器学习的新捷径:通过 SYCL 在 GPU 上加速 C++

不幸的是,对于日常程序员,OpenCL 的学习曲线陡峭;一个简单的 Hello World 程序可能就需要上百行晦涩难懂的代码。因此,为了减轻这种痛苦,Khronos 组织已经开发了一个称为 SYCL 的新标准,这是一个在 OpenCL 之上的 C++ 抽象层。
掌握 Git 之美

掌握 Git 之美

使用 7 条简单的 Git 命令开始你的软件开发之旅
使用 Python 开始你的机器学习之旅

使用 Python 开始你的机器学习之旅

从无人驾驶汽车到股市预测,再到在线学习,机器学习通过预测来进行自我提高的方法几乎被用在了每一个领域。由于机器学习的实际运用,目前它已经成为就业市场上最有需求的技能之一。
调试器工作原理(二):断点

调试器工作原理(二):断点

我将会演示如何在调试器中实现断点。断点是调试的两大利器之一,另一个是可以在被调试进程的内存中检查变量值。
Go 语言日志指南

Go 语言日志指南

你是如何使用 Golang 日志监控你的应用程序的呢?Golang 没有异常,只有错误。因此你的第一印象可能就是开发 Golang 日志策略并不是一件简单的事情。不支持异常事实上并不是什么问题,异常在很多编程语言中已经失去了其异常性:它们过于被滥用以至于它们的作用都被忽视了。
GitLab 工作流概览

GitLab 工作流概览

GitLab 是一个基于 git 的仓库管理程序,也是一个方便软件开发的强大完整应用。 GitLab 拥有一个“用户新人友好”的界面,通过图形界面和命令行界面,使你的工作更加具有效率。GitLab 不仅仅对开发者是一个有用的工具,它甚至可以被集成到你的整个团队中,使得每一个人获得一个独自唯一的平台。
调试器工作原理(一):基础篇

调试器工作原理(一):基础篇

我将为大家展示 Linux 中调试器的主要构成模块 - ptrace 系统调用。这篇文章所有代码都是基于 32 位 Ubuntu 操作系统。值得注意的是,尽管这些代码是平台相关的,将它们移植到其它平台应该并不困难。
深入解析面向数据的哈希表性能

深入解析面向数据的哈希表性能

最近几年中,面向数据的设计已经受到了很多的关注 —— 一种强调内存中数据布局的编程风格,包括如何访问以及将会引发多少的 cache 缺失。由于在内存读取操作中缺失所占的数量级要大于命中的数量级,所以缺失的数量通常是优化的关键标准。这不仅仅关乎那些对性能有要求的 code-data 结构设计的软件,由于缺乏对内存效益的重视而成为软件运行缓慢、膨胀的一个很大因素。
使用 AWS 的 GO SDK 获取区域与终端节点信息

使用 AWS 的 GO SDK 获取区域与终端节点信息

最新发布的 GO 的 SDK v1.6.0 版本,加入了获取区域与终端节点信息的功能。它可以很方便地列出区域、服务和终端节点的相关信息。可以通过 github.com/aws/aws-sdk-go/aws/endpoints 包使用这些功能。
Go 语言编译期断言

Go 语言编译期断言

这篇文章是关于一个鲜为人知的让 Go 在编译期断言的方法。你可能不会使用它,但是了解一下也很有趣。
浅述内核中“挂起到空闲”的实现

浅述内核中“挂起到空闲”的实现

它主要通过软件实现。一般平台的挂起过程包括冻结用户空间并将外围设备调至低耗电模式。但是,系统并不是直接关闭和热插拔掉 CPU,而是静静地强制将 CPU 进入空闲(idle)状态。
使用 Elizabeth 为应用生成随机样本数据

使用 Elizabeth 为应用生成随机样本数据

Elizabeth 以 21 个不同本地化信息提供了 18 种数据提供器,可用于生成随机信息(LCTT 译注:不仅是随机数),包括姓名和个人特征、地址、文本数据、交通信息、网络和 Internet 社交媒体数据、数字等等。
一个使用 asyncio 协程的网络爬虫(一)

一个使用 asyncio 协程的网络爬虫(一)

首先,我们会实现一个事件循环并用这个事件循环和回调来勾画出一只网络爬虫。它很有效,但是当把它扩展成更复杂的问题时,就会导致无法管理的混乱代码。
如何用 R 语言的 Shiny 库编写 web 程序

如何用 R 语言的 Shiny 库编写 web 程序

Shiny 是一个来自 RStudio 的工具包,它让创建 web 程序变得更容易。它能从 R 控制台轻松安装,只需要一行,就可以加载好最新的稳定版本来使用。
在 Linux 中如何使用 gdb 调试 C 程序

在 Linux 中如何使用 gdb 调试 C 程序

GDB - 可以帮你更轻松地调试代码 bug 以及其它问题。在这篇文章中,我们将讨论一下 GDB 调试器的基础知识,包括它提供的一些有用的功能/选项。
安卓平台上的依赖注入(一)

安卓平台上的依赖注入(一)

第一种情况是我们在构造器里创建了依赖对象,但在第二种情况下,它作为参数被传递给构造器,这就是我们所说的依赖注入(dependency injection)。
Webpack 2 入门

Webpack 2 入门

简单来说,Webpack 是一个 JavaScript 模块打包器。然而,自从它发布以来,它发展成为了你所有的前端代码的管理工具(或许是有意的,或许是社区的意愿)。
雾里看花之 Python Asyncio

雾里看花之 Python Asyncio

从试用的经历来看,该模块比我预想的复杂许多,我现在可以非常肯定地说,我不知道该如何恰当地使用 asyncio。
用数据科学搭建一个实时推荐引擎

用数据科学搭建一个实时推荐引擎

实时推荐引擎是 Neo4j 中最广泛的用途之一,也是使它如此强大并且容易使用的原因之一。为了探索这个东西,我将通过使用示例数据集来阐述如何将统计学方法并入这些引擎中。
不常见但是很有用的 GCC 命令行选项(二)

不常见但是很有用的 GCC 命令行选项(二)

开发者们通常用来生成警告的 -Wall 选项,并不包括一些特殊的警告。如果你不了解这些特殊警告,并且不知道如何生成它们,不用担心,我将在这篇文章中详细讲解关于它们所有的细节。
不常见但是很有用的 gcc 命令行选项(一)

不常见但是很有用的 gcc 命令行选项(一)

你知道,你可以让 gcc 保存每个编译阶段的输出吗?你知道用于生成警告的 -Wall 选项,它并不会包含一些特殊的警告吗?gcc 的很多命令行选项都不会经常用到,但是它们在某些特定的情况下会变得非常有用,例如,当你在调试代码的时候。
JavaScript 小模块的开销

JavaScript 小模块的开销

一个大的 JavaScript 包比一百个小 JavaScript 模块要快。尽管这是事实,我依旧希望我们社区能最终发现我们所处的困境————提倡小模块的原则对开发者有利,但是对用户不利。同时希望能优化我们的工具,使得我们可以对两方面都有利。