Thrift 学习笔记 (1)

Thrift 是 Facebook 开发的一个二进制通信协议,现在托管在 Apache 基金会。它使用一种自定义的接口描述语言描述使用的数据结构和接口,通过编译可以生成各种语言的接口,如 c++,python,php 等。由于支持生成多种语言,Thrift 可以作为多种语言之间的通信接口,更详细的介绍见参考资料 [1]。

这里使用的 Thrift版本是 0.8.0。

一个简单的echo server

首先编写对应的数据结构和接口描述文件:

namespace cpp Test

service EchoServer {
    string echo(1: string msg);
}

使用下面的命令生成对应的 c++ 接口文件:

thrift --gen cpp echoapi.thrift

默认会生成一个“gen-cpp”的文件夹,里面包含下列文件:

echoapi_constants.cpp echoapi_constants.h echoapi_types.cpp echoapi_types.h EchoServer.cpp 

阅读全文…

sicp 笔记 (7)

第三章习题 3.21 – 3.37 的解答。

E-3.21: 因为 queue 只记录队头指针和队尾指针,而打印 front-ptr 的时候把整个队列都打印出来了,打印 rear-ptr 只打印最后一个元素。最后有一组“(# #)”应该是 map 的返回值。

(load "../examples/3.3.2-representing-queues.scm")

(define (print-queue q)
  (define (iter current end)
    (if (eq? current end)
      (map display (list (car current) "\n"))
      (begin (map display (list 

阅读全文…

C++11 中的 lambda 函数

c++ 标准库里有一个函数 sort(),可以对容器的元素进行排序。它的函数原型是(参考资料 [1]):

template <class RandomAccessIterator>
void sort (RandomAccessIterator first, RandomAccessIterator last);

template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

其中第三个参数是一个比较函数,它接收两个容器中的两个元素,返回比较结果。如果没有第三个参数,默认按元素的升序排列。

例如,我们要将一个整型数组降序排列:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

static bool compare_int(int 

阅读全文…

git 使用笔记 (2)

合并指定文件

假设 master 中有文件 a 和 b,在分支 br1 中对 a 和 b 都进行了修改并且已经提交,如果只想把在 br1 中对 a 的修改合并到 master 中,执行命令:

git co master
git co br1 a

即先切换到要修改的分支(例如这里的 master),然后执行命令:

git co [分支名称] [要合并的文件1] [要合并的文件2] ...

分支的删除

假设有一个中心仓库 git-repos,有分支 master 和 br1;两个工作目录 …

阅读全文…

sicp 笔记 (5)

第二章习题 2.73 – 2.97 的解答。

E-2.73:

(a) 因为 number 和 variable 使用的是 scheme 提供的原子类型,并不是自定义的类型。

(b)

(define (install-deriv-package)

  (define (deriv-sum expression var)
    (make-sum ((get 'deriv (operator expression)) (addend expression) var)
              ((get 'deriv (operator expression)) (augend expression) var)))

  (define (deriv-product expression var)
    

阅读全文…

debian 硬盘安装 linuxmint

debian7 出来后马上试用了一下,gnome3 不出意外地令人失望。本来想换 xfce 的,忽然想起 linuxmint 搞的 mate 和 cinnamon,其中 mate 是基于 gnome2 改的,而 cinnamon 基于 gnome3。本着与时俱进的原则,网上搜了下 cinnamon 发现挺好看的,而且发展了有一段时间了(最重要是这个,谁都不想一个软件用了两天作者就说不干了)。在 kvm 上试用了一下 linuxmint 打包的 debian cinnamon 201303 版,越用越爽,果断连论文都不改了,先换了系统再说。

官网的 iso 是 dvd 的,而我只有一张 cdrw,很不幸地光驱又抽风了,于是想用硬盘安装。用 google 搜“linuxmint 硬盘安装”,第一条结果是参考资料 [1],但是试了几次都出错了,说什么“getpwuid_r(): failed due to …

阅读全文…

bash 实现目录遍历

脚本的最初原型是当年用 fvwm 的时候为了山寨一个生成家目录下的树形结构菜单写的一个广度优先遍历;后来在把文件系统从 ext3 转到 ext4 的时候重新分区,把文件备份到 windows 上,结果还原回来的时候权限都乱了,于是把 queue 整理了一下写成一个单独的脚本用来改权限;后来还实现了一个深度优先遍历的版本。今天把这两个函数都整理一下。一般来说简单的操作用 find + 各种工具就行了,除非是对遍历顺序有要求或操作比较复杂。

#!/bin/bash

# http://ouonline.net/

IFS=$(echo -en "\n\b") # in case of space(s) in dentry name

# -------------------------------------------------------------------------- #

function dfs()
{
    #if [ $# -ne 2 ]; 

阅读全文…