跟我一起写shell补全脚本(Zsh篇)

2015-07-16
阅读 6 分钟
16.4k
绝大部分日常使用Linux和OS X的程序员都会选择zsh作为自己的shell环境,毕竟对比于bash,zsh的便利性/可玩性要胜出很多,同时它又能兼容bash大多数的语法。不过相对而言,zsh补全脚本要比bash补全脚本要难写。zsh提供了非常多的补全的API,而且这些API功能有不少重叠的地方,掌握起来并不容易。不像bash,你只需记住三个...

跟我一起写shell补全脚本(Bash篇)

2015-07-07
阅读 6 分钟
12.8k
在上一篇里我们定下了给pandoc写补全脚本的计划: 支持主选项(General options) 支持子选项(Reader options/General writer options) 支持给选项提供参数值来源。比如在敲pandoc -f之后,能够补全FORMAT的内容。 支持主选项 先列出实现了第一阶段目标的程序: {代码...} 运行程序的方式: {代码...} 现在我来解释下...

跟我一起写shell补全脚本(开篇)

2015-07-07
阅读 1 分钟
5.1k
shell里面补全的影子无处不在,输入命令的时候可以有补全,敲打选项的时候可以有补全,选择文件的时候可以有补全。有些shell甚至支持通过补全来切换版本控制的分支。由于shell里面可以运行的程序千差万别,shell一般不会内置针特定对某个工具的补全功能。与之相对的,shell提供了一些补全用的API,交由用户编写对应的补...

货比三家:C++ 中的 task based 并发

2015-04-24
阅读 3 分钟
12.2k
上一篇文章中讲到, 我打算写一篇文章,聊聊async、packaged_task和promise的区别。所以现在我就来填坑了。 TL;DR async:提供最高层次的抽象。如果你不需要控制线程的运行时机,就选这个。 packaged_task:抽象层次比async低。如果你需要控制线程的运行时机,且线程执行的结果即目标结果时,选这个。 promise:抽象层次...

从 pthread 转换到 std::thread

2015-04-07
阅读 8 分钟
30.5k
以前一直都是用pthread的API写C++的多线程程序。虽然很早之前就听说,从C++11开始,标准库里已经包含了对线程的支持,不过一直没有拿来用,最近刚好有空,借着pthread的经验学习下std::thread的用法。

玩转Bash变量

2015-02-05
阅读 4 分钟
29k
PS : 注意本文讨论的是Bash,而不一定是/bin/sh所链接的那个shell。这里出现的所有代码片段,默认在顶上都添加了#!/bin/bash。

find -exec 与 find | xargs 的差别

2015-01-06
阅读 3 分钟
10.3k
返回的结果是,整个家目录的总大小,而不是预期的每个文件的大小。之后换用了find -maxdepth 1 -exec du -sh {} \;就能得出每个文件的大小。

gtest快速上手

2014-12-31
阅读 5 分钟
17.8k
因为最近在写的一些C++代码,需要给它写单元测试,所以就得去找一个C++的测试框架。正好之前实验室的同学有推荐过gtest,所以就不纠结了,直接去gtest的项目主页看。

MongoDB, no SQL injection?

2014-12-16
阅读 3 分钟
6.1k
有人的地方就有江湖,有DB的地方就有injection。SQL数据库如此,No SQL数据库亦是如此。考虑到No SQL数据库用的不是SQL,这里使用SQL injection是否有点不太恰当?不过总不能说是No SQL injection吧XD。

关于网站加速的35条法则(来自Yahoo)

2014-11-16
阅读 6 分钟
4.4k
原文见此:[链接] 注意,不是翻译,只是谈谈本人的读后感。 另外注意,该文比较旧,大概是2010年的产物,所以里面会有些跟不上时代的内容。 1. 减少HTTP请求 一个典型的http请求报文大概是这样的: {代码...} 虽然也就几行文字,但是考虑到http协议里,对同一个域名同时发出的请求是受限的[1],如果请求太多,说不定它们...

C/C++ - 压榨结构体的空间

2014-11-02
阅读 3 分钟
4k
先给几个数据: {代码...} 好,那么问题来了, {代码...} 输出的结果是多少? 这个问题对于写过C/C++的人来说,有点侮辱智商……好吧,不逗你玩了,直接进入正题。 输出的结果肯定不会是29(2 * 4 + 1 + 3 * 4 + 8)啦。都是Data structure alignment惹的祸。 Data structure alignment是个复杂的概念,简单来说,就是因为CP...

当我谈vim映射时,我谈些什么

2014-09-13
阅读 3 分钟
5.6k
映射功能是当下各大编辑器的标配,如果你想要熟悉所用的编辑器,必然不能缺少对它的映射机制的学习。对于vim亦是如此。 这里说到的映射功能,指的是编辑器会捕获用户的输入,并且按照事先的设置来执行某些动作。 基础 在vim里面自定义一个映射,格式如下: {代码...} 如: {代码...} maptype表示映射的类型,分为两大类...

第一次身处黑客入侵的事故现场

2014-07-04
阅读 3 分钟
5.7k
昨天下午我正在图书馆刷书复习,突然接到同学的电话。同学是学校某个机构的助理。他告诉我他办公室有台Linux服务器出了问题,总是把带宽占满。情况紧急,办公室老师让他赶紧联系认识的同学,看看能不能帮忙处理下。 本来我是拒绝的……因为我虽然日常都使用Linux,但是从来没弄过服务器。把Linux当做主力桌面环境和把Linux...

[翻译]Play框架1.2.7版本教程(12) - 国际化和本地化

2014-06-27
阅读 6 分钟
3.9k
完成了博客引擎后,我们来考虑额外的一件事:Web应用的国际化和语言的本地化。虽然我们可以一开始就做这件事,但是最好还是先完成该应用的单一语言版本,然后再添加其他语言的支持。

[翻译]Play框架1.2.7版本教程(11) - 部署应用

2014-06-27
阅读 2 分钟
5.5k
Play允许你给每个框架安装包指定不同的ID,来用同一个application.conf管理不同的配置。让我们假设应用将部署在server01上。

[翻译]Play框架1.2.7版本教程(10) - 完成应用测试

2014-06-26
阅读 5 分钟
4.9k
当然我们已经完成了测试所有模型层的功能。所以博客引擎的核心功能已经被测试过了。但是一个Web应用并不只有模型层。我们需要确保Web交互界面是否完好。这需要测试引擎的控制层。但是我们甚至需要测试UI界面,比如我们的Javascript代码。

[翻译]Play框架1.2.7版本教程(9) - 自定义编辑区域

2014-06-26
阅读 6 分钟
3.4k
在前一章,我们给yabe创建了一个关于面板,并准备了“我的文章”的部分。每个作者可以在这个部分看到他们发布过的文章,以及进行编辑或者创建新的文章。

[翻译]Play框架1.2.7版本教程(8) - 添加验证

2014-06-25
阅读 7 分钟
5.2k
添加验证 既然我们有一个管理面板,自然需要进行验证。幸运的是,Play已经提供了一个叫做Secure的模块来帮助我们。 启动Secure模块 在yabe/conf/application.conf启动Secure模块,然后重启应用。 {代码...} 在重启后,Play应该提示说模块已被加载。 Secure模块提供一系列默认的路由。要导入这些路由,在/yabe/conf/route...

[翻译]Play框架1.2.7版本教程(7) - 通过CRUD来实现一个基本的管理面板

2014-06-22
阅读 8 分钟
7.4k
通过CRUD来实现一个基本的管理面板 目前,我们还没法使用博客的UI来写新的文章,或修改评论。Play提供了一个即开即用的CRUD模块,可以快速生成一个基本的管理面板。 启动CRUD模块 一个Play应用可以由几个模块组装起来。这使得你可以在不同应用间重用组件或分割一个大应用到几个小的。 CRUD模块是一个通用的应用,可以对...

[翻译]Play框架1.2.7版本教程(6) - 对添加标签的支持

2014-06-21
阅读 6 分钟
4.1k
对添加标签的支持 随着博客的文章越来越多,找到要找的文章越来越难。如果能够添加标签,那就能更好地分类文章了。 Tag模型 我们将给博客的模型们添加新成员。对Tag类的定义是非常简单的: {代码...} 因为有时想要在需要时才创建标签,我们写多一个findOrCreateByName(String name)工厂方法。把它加到Tag类: {代码...} ...

[翻译]Play框架1.2.7版本教程(5) - 设置验证码

2014-06-21
阅读 4 分钟
5.8k
因为Play是一个全栈式框架,我们试图在框架内部内置了Web应用通常所需的东西;其中就包括生成验证码。我们可以使用play.libs.Images来简单地生成验证码,然后通过HTTP响应返回它。

[翻译]Play框架1.2.7版本教程(4) - 浏览和提交评论

2014-06-15
阅读 6 分钟
6.4k
浏览和提交评论 博客主页现在已经完成,接下来要完成博客正文页面。整个页面将展示当前文章的所有评论,还包括一个用于提交新的评论的表单。 创建'show' action 要显示文章内容,我们需要在Application控制器添加新的action。就叫它show(): {代码...} 如你所见,整个action简明扼要。我们接受一个id参数作为Long类型Jav...

[翻译]Play框架1.2.7版本教程(3) - 建立第一个页面

2014-06-14
阅读 9 分钟
4.9k
事实上,在开始编写第一个页面之前,我们还有一件事要做。编写一个缺乏数据的Web应用是乏味的。你甚至不能测试正在做的事情。但因为我们还没完成编辑页面,所以不能发布新的文章作为测试。

[翻译]Play框架1.2.7版本教程(2) - 数据模型的首次迭代

2014-06-14
阅读 10 分钟
9.7k
模型层是一个Play应用的核心(对于其他Web框架也同样成立)。它是一个对应用操作的资源的领域特定的表示。因为我们想要创建一个博客引擎,模型层就包括User,Post和Comment(用户,博文和评论)。

[翻译]Play框架1.2.7版本教程(1)

2014-06-11
阅读 6 分钟
12.8k
在这个教程中,你将通过从头到尾开发一个真正的Web应用来学习Play框架,在这个应用中,我们将尝试用上你将在真实项目中需要的每样技术,同时介绍Play应用开发的最佳实践。

什么样的contributions会被Github计算在内?

2014-05-26
阅读 2 分钟
12.2k
在热衷于在Github上刷contributions的人(比如我)看来,每周看着contributions涨涨涨,看着Contributions Calendar越来越绿意盎然,心里一股幸福感油然而生。

Why All My MPI Process has the rank 0?

2014-04-28
阅读 2 分钟
8.2k
MPI全称是message passing interface,即信息传递接口。它提供让相关进程之间进行通信,同步等操作的API,可以说是并行计算居家出游必备的基础库。

man攻略 read,write,post

2014-03-20
阅读 2 分钟
4.3k
可能有人已经注意到,讲UNIX的书,在提到某些命令或系统调用时,总会在其后添加一个数字序号。 这个序号表示的是这个命令(或调用)在UNIX系统手册的第几部分。