2018-03-21 - 开始之前,说一下本文中的 代码 和 视频 可以在我的 GitHub 上找到。 那么,让我们开始吧!如果你糊涂了,我建议你在单独的选项卡中打开下面的视频。 Python 的 Hello World 和字符串操作视频 开始 (先决条件) 首先在你的操作系统上安装 Anaconda (Python)...
2018-03-20 - 我喜欢 Vue。当我在 2016 年第一次接触它时,也许那时我已经对 JavaScript 框架感到疲劳了,因为我已经具有Backbone、Angular、React 等框架的经验,没有太多的热情去尝试一个新的框架。直到我在 Hacker News 上读到一份评论,其描述 Vue 是类似于新 jQuery...
2018-03-20 - 虽然有些人认为区块链是一个早晚会出现问题的解决方案,但是毫无疑问,这个创新技术是一个计算机技术上的奇迹。那么,究竟什么是区块链呢? 区块链 以比特币或其它加密货币按时间顺序公开地记录交易的数字账本。 更通俗的说,它是一个公开的数据库,新的数据...
2018-03-19 - 开源社区的人们正在致力于一个 Linux 内核的新项目,它可以让内核更安全。命名为 Linux 内核运行时防护(LKRG),它是一个在 Linux 内核执行运行时完整性检查的可加载内核模块(LKM)。 它的用途是检测对 Linux 内核的已知的或未知的安全漏洞利用企图,以及...
2018-03-16 - 本文中我们会详细介绍大内存页,让你能够回答:Linux 中的大内存页是什么?在 RHEL6、RHEL7、Ubuntu 等 Linux 中,如何启用/禁用大内存页?如何查看大内存页的当前值? 首先让我们从大内存页的基础知识开始讲起。 Linux 中的大内存页是个什么玩意? 大内存页...
2018-02-28 - 假设现在的上下文(注:context,计算机术语,此处意为业务情景)是这样的:一个 zip 文件被上传到一个Web 服务中,然后 Python 需要解压这个 zip 文件然后分析和处理其中的每个文件。这个特殊的应用查看每个文件各自的名称和大小,并和已经上传到 AWS S3 上...
2018-02-20 - 读者对象 理解 udev 背后的基本概念,学习如何写简单的规则。 要求 root 权限 难度 中等 约定 # - 要求给定的命令使用 root 权限或者直接以一个 root 用户或者使用 sudo 命令去运行。 $ - 要求给定的命令以一个普通的非特权用户运行。 介绍 在 GNU/Linux 系...
2018-02-09 - 便宜的物联网板的普及意味着它不仅会控制应用程序,还会控制整个软件平台。那么,如何构建一个针对特定用途的交叉编译应用程序的自定义发行版呢?正如 Michael J. Hammel 在这里解释的那样,它并不像你想象的那么难。 为什么要定制? 以前,许多嵌入式项目都...
2018-02-02 - 我写了一个 hello world 小脚本。我如何能调试运行在 Linux 或者类 UNIX 的系统上的 bash shell 脚本呢? 这是 Linux/Unix 系统管理员或新用户最常问的问题。shell 脚本调试可能是一项繁琐的工作(不容易阅读)。调试 shell 脚本有多种方法。 您需要传递 -x...
2018-01-27 - 调试 C 程序,曾让我很困扰。然而当我之前在写我的操作系统时,我有很多的 Bug 需要调试。我很幸运的使用上了 qemu 模拟器,它允许我将调试器附加到我的操作系统。这个调试器就是 gdb。 我得解释一下,你可以使用 gdb 先做一些小事情,因为我发现初学它的时...
2018-01-24 - 这个非常棒的 ftrace 并不是个新的工具!它大约在 Linux 的 2.6 内核版本中就有了,时间大约是在 2008 年。 这一篇 是我用谷歌能找到的最早的文档。因此,如果你是一个调试系统的老手,可能早就已经使用它了! 我知道,ftrace 已经存在了大约 2.5 年了(注:...
2018-01-19 - 本文是关于 fork 和 exec 是如何在 Unix 上工作的。你或许已经知道,也有人还不知道。几年前当我了解到这些时,我惊叹不已。 我们要做的是启动一个进程。我们已经在博客上讨论了很多关于系统调用的问题,每当你启动一个进程或者打开一个文件,这都是一个系统...
2018-01-01 - 正则表达式(简写为 regex 或者 regexp)基本上是定义一种搜索模式的字符串,可以被用来执行搜索或者搜索并替换操作,也可以被用来验证像密码策略等条件。 正则表达式是一个我们可利用的非常强大的工具,并且使用正则表达式的优点是它能在几乎所有计算机语言...
2018-01-01 - 搜索代码库是开发者每天都要做的事情。从修改 bug 到学习新代码,或者查看如何调用某个 API,能快速在代码库中导航的能力都是一大助力。幸运的是,我们有专门的工具来搜索代码。 pss 就是其中一个工具,让我们来看看如何安装和使用它吧。 什么是 pss? pss...
2017-12-28 - 在每一个程序员、项目管理员、团队领导的一生中,这都会至少发生一次。原来的程序员早已离职去度假了,给你留下了一坨几百万行屎一样的、勉强支撑公司运行的代码和(如果有的话)跟代码驴头不对马嘴的文档。 你的任务:带领团队摆脱这个混乱的局面。 当你的...
2017-12-11 - 所谓子字符串就是出现在其它字符串内的字符串。 比如 3382 就是 this is a 3382 test 的子字符串。 我们有多种方法可以从中把数字或指定部分字符串抽取出来。 本文会向你展示在 bash shell 中如何获取或者说查找出子字符串。 在 Bash 中抽取子字符串 其语法...
2017-12-09 - groff 是大多数 Unix 系统上所提供的流行的文本格式化工具 nroff/troff 的 GNU 版本。它一般用于编写手册页,即命令、编程接口等的在线文档。在本文中,我们将给你展示如何使用 groff 编写你自己的 man 手册页。 在 Unix 系统上最初有两个文本处理系统:trof...
2017-12-02 - 介绍 kprobes 是一种内核功能,它允许通过在执行(或模拟)断点指令之前和之后,设置调用开发者提供例程的任意断点来检测内核。可参见 kprobes 文档 获取更多信息。基本的 kprobes 功能可使用 CONFIG_KPROBEES 来选择。在 arm64 的 v4.8 内核发行版中, kpro...
2017-11-20 - Python 是一个非常流行的编程语言,它可以用于创建桌面应用程序、3D 图形、视频游戏、甚至是网站。它是非常好的首选编程语言,因为它易于学习,不像一些复杂的语言,比如,C、 C++、 或 Java。 即使如此, Python 依然也是强大且健壮的,足以创建高级的应用...
2017-11-04 - 对于在Linux上开发.Net Core的程序员来说, 似乎都缺少一个好的IDE. Windows上有Visual Studio, Mac上有Visual Studio for Mac, 难道Linux只有Visual Studio Code了吗? Linux上有两个最好的编辑器: VIM和Emacs, 哪个更好不是这一篇的主题, 这一篇的主题是如何...
2017-10-30 - 距离安迪鲁宾和他的团队着手开发一个希望颠覆传统手机操作模式的操作系统已经过去 12 年了,这套系统有可能让手机或者智能机给消费者以及软件开发人员带来全新的体验。之前的智能机仅限于收发短信和查看电子邮件(当然还可以打电话),给用户和开发者带来很...
2017-10-23 - 引言:你知道 NASA 顶级程序员如何编写关键任务代码么?为了确保代码更清楚、更安全、且更容易理解,NASA 的喷气推进实验室制定了 10 条编码规则。 NASA 的开发者是编程界最有挑战性的工作之一。他们编写代码并将开发安全的关键任务应用程序作为其主要关注点...
2017-10-14 - 在多进程对同一个文件进行读写访问时,为了保证数据的完整性,有事需要对文件进行锁定。可以通过fcntl()函数对文件进行锁定和解锁。 1. fcntl 1.1.功能描述:根据文件描述词来操作文件的特性。 1.2.用法: int fcntl(int fd, int cmd); int fcntl(int fd, in...
2017-10-13 - 我们终于来到这个系列的最后一篇文章!这一次,我将对调试中的一些更高级的概念进行高层的概述:远程调试、共享库支持、表达式计算和多线程支持。这些想法实现起来比较复杂,所以我不会详细说明如何做,但是如果你有问题的话,我很乐意回答有关这些概念的问...
2017-10-07 - 工具对开发人员来说至关重要。工具可以让一个开发人员的日常工作更高效,并且只需要关注最重要的事情。对于开发人员来讲,寻找更好的替代工具往往比坚持使用熟悉单身过时的工具更困难。 在这篇文章中,我们将列出你在日常工作中能够使用的新的开发工具。很多...
2017-10-07 - 变量是偷偷摸摸的。有时,它们会很高兴地呆在寄存器中,但是一转头就会跑到堆栈中。为了优化,编译器可能会完全将它们从窗口中抛出。无论变量在内存中的如何移动,我们都需要一些方法在调试器中跟踪和操作它们。这篇文章将会教你如何处理调试器中的变量,并...
2017-10-06 - 最近在处理文件的时候,遇到文件内容存在大量重复项的情况,很显然需要文件内容去重。因为使用的是Python,本来想要找找Python文件内容去重的方法,但是看到的基本利用Set或者List等方法(还没来得及逐一验证)。后来,找到一个利用Shell脚本写的文件内容去...
2017-10-05 - 有时你需要知道的最重要的信息是什么,你当前的程序状态是如何到达那里的。有一个 backtrace 命令,它给你提供了程序当前的函数调用链。这篇文章将向你展示如何在 x86_64 上实现堆栈展开以生成这样的回溯。 系列索引 这些链接将会随着其他帖子的发布而上线。...
2017-10-01 - 之前写代码,要向程序中传参数,程序中使用argv[1]、argv[2] 实际linux中的命令使用-r -l -i 等等,比如tcpdump,守护进程dhcp,顿时感觉自己脸好红,low到家了。 在linux下有一个函数叫getopt就可以写成-r -l -i 的形式,下面是一个使用openssl通信的程序,...
2017-10-01 - 本文的目的是帮助您完成向 Node.js 核心文件贡献代码的第一个提交! 向 Node.js 贡献代码的方式有很多种。可以参与某个工作组(网站或者联机诊断工作组等)的工作,可以在 Nodeschools 开设课程提供 Node.js 的教学, 让那些有着同样困惑的人可以向你学习。...
2017-09-28 - 定律-或称法则,可以指导我们并让我们在同伴的错误中学习。这篇文章中,我将介绍我每次设计或实现软件时出现在我脑海的五大定律。其中有些和开发有关,有些和系统组织有关。它们可以帮助你成为合格的软件工程师。 墨菲定律 凡是可能出错,就一定出错。 这条...
2017-09-23 - 在内存地址上设置断点虽然不错,但它并没有提供最方便用户的工具。我们希望能够在源代码行和函数入口地址上设置断点,以便我们可以在与代码相同的抽象级别中进行调试。 这篇文章将会添加源码级断点到我们的调试器中。通过所有我们已经支持的功能,这要比起最...
2017-09-17 - 今天我在 libcurl 内部又做了一个小改动(https://github.com/curl/curl/commit/cbae73e1dd95946597ea74ccb580c30f78e3fa73),使其做更少的 malloc。这一次,泛型链表函数被转换成更少的 malloc (这才是链表函数应有的方式,真的)。 研究 malloc 几周前我开...
2017-09-16 - 前两天总结一下邮箱格式的正则表达式,写了一个脚本来判断输入的邮箱地址是否符合邮箱的格式。在网上找资料的时候,发现基本都是用Python和Java来做爬虫,当然Python的居多。本着学习的心态,既然得到了邮箱地址有效性的判断,那就顺便用脚本写一个抓取网页...
2017-09-12 - Python 是一门更注重可读性和效率的语言,尤其是相较于 Java,PHP 以及 C++ 这样的语言,它的这两个优势让其在开发者中大受欢迎。 诚然,它有点老了,但仍是80后啊 至少没有 Cobol 或者 Fortran 那么老。而且,如果还能派上用场的话,为啥要折腾着改变它呢 (...
2017-09-08 - system的原理其实就是调用fork创建子进程去执行shell命令,然后返回最后一条shell命令的状态值。linux下man system可以看到返回值说明: 1.如果返回值等于-1就是system函数执行失败,准确的说是fork创建子进程失败。 2.shell执行最后一条语句的状态值放在返...
2017-09-08 - 在并行计算中经常需要调用scalapack(并行化的lapack)函数库里面的函数进行编程,这里简单介绍在C语言如何调用scalapck中的矩阵向量乘的函数。 注意:scalapack中的函数是用fortran写的,矩阵是按列进行存储的。 scalapack的链接需要用到blas,因此确保本机上...
2017-09-08 - 如果你的运维团队在使用 Docker 和 Kubernetes,那么建议开发上采用相同或相似的技术。这将减少不兼容性和可移植性问题的数量,并使每个人都会认识到应用程序容器是开发和运维团队的共同责任。 这篇文章介绍了 Kubernetes 在开发模式中的用法,它的灵感来自...
2017-09-07 - 看来strcpy的实现确实是太low了,腾讯的笔试字符串知识点考察就变了。 Linux下不区分大小写的字符串比较函数原型: int strncasecmp(const char *s1, const char *s2, register size_t n); 返回值: 如果相等返回0 如果s1s2,返回正整数 如果s1s2,返回负整...
2017-09-06 - 我第一次听说树莓派时,并没有对它产生任何兴趣,因为对我来说这并不是一款新产品。在更早之前,我玩过 arm11 的开发板(S3C6410 系列),虽然和树莓派还是有区别的,比如体积更大、没有 HDMI 接口、自带触摸屏、价钱比树莓派稍贵等等,但我当时认为没有本质...