Ruby下使用SWIG封装libcurl

2010年9月2日 没有评论

本文通过在ruby下使用SWIG封装libcurl来简要描述如何通过SWIG来扩展ruby。
关于SWIG的入门使用可参见 使用SWIG扩展ruby性能

关于SWIG:
SWIG全称为 Simplified Wrapper and Interface Generator,通过swig可以方便快捷的使用c/c++扩展php, ruby等语言以提高性能或满足其它用途。

关于libcurl:
libcurl是一个著名的http/ftp库,通过libcurl可能轻松通过http/ftp协议访问网络。

流程:

相关文件:
SWIG的封装文件 curl.i

%module curl
%{
#include <curl/curl.h>
%}

/* type definations */
typedef int CURLoption;
typedef int CURLcode;

/* import constants */
%constant int CURL_GLOBAL_ALL = CURL_GLOBAL_ALL;
%constant int CURLOPT_URL = CURLOPT_URL;

/* import functions */
int curl_global_init(long flags);
void curl_global_cleanup();

CURL* curl_easy_init();
void curl_easy_cleanup(CURL* curl);
CURLcode curl_easy_setopt(CURL* curl, CURLoption opt, int v);
CURLcode curl_easy_setopt(CURL* curl, CURLoption opt, const char* v);
CURLcode curl_easy_perform(CURL* curl);

ruby的extconf.rb文件

require 'mkmf'
%w{stdc++ curl}.each do|lib|
	$libs = append_library $libs, lib
end
create_makefile 'curl'

编译build.sh:

#通过curl.i生成封装后的cpp源码
swig -c++ -ruby curl.i &&

#通过extconf.rb生成Makefile
ruby extconf.rb &&

#通过Makefile生成目标扩展
make

测式文件ruby_test.rb

#!/usr/bin/env ruby
require 'curl'
include Curl

url = ARGV[0] || 'http://www.google.com'

p curl_global_init(CURL_GLOBAL_ALL)
p curl =  curl_easy_init()
p curl_easy_setopt(curl, CURLOPT_URL, url)
p curl_easy_perform(curl)
p curl_easy_cleanup(curl)
p curl_global_cleanup()

本文相关的完整源码可在github下载: http://github.com/JiangMiao/ruby_swig_curl_demo
git clone git://github.com/JiangMiao/ruby_swig_curl_demo.git

相关链接:
libcurl
SWIG

分类: 3 ruby/c++ 标签:

Dvorak键盘布局使用总结

2010年8月28日 2 条评论

什么是Dvorak键盘布局:
德沃夏克键盘(Dvorak Keyboard)是键盘排列方式,由奥古斯特·德沃夏克和威廉·迪利在1930年代期间设计,是主流的键盘排列快蹄键盘(QWERTY)的对手。
德沃夏克和Dealey研究过字母的出现频率和手的生理之后,依以下的宗旨来建立这个排列:
以使用英语为设计出发观点
能让双手交互输入
为了达至最高速度和效率,最常用的字母和二合字母应最易输入——它们应该在中排,食指放在的地方。
最少用的字母应在最难碰到的下排
右手应打得更多字,因为大部分的人都是右撇子
使用连着的手指打二合字母比不相连的更难。
输入应由边缘循序渐进地移到中心
– 摘自 wikipedia

Dvorak适用性:
适用人群
1、经常打英文
2、希望打字手感流畅
3,希望提高打字速度

不适用人群
1、经常使用公共电脑,或在网吧打电脑
大多数电脑的布局为qwert,如果你是dvorak,必然是寸步难行。
2、经常玩游戏
大多数游戏的键盘是针对qwert,如果是dvorak,游戏必需要有键位设置,如果是Programmer Dvorak,在魔兽争霸等游戏中甚至无法进行编队,必需换其它布局,总言之是非常不便的。

学习使用经历:
Programmer Dvorak 是目前我正在使用的键盘布局。非程序员可以使用普通的Dvorak布局。Programmer Dvorak布局如图:

对于一个新的键盘布局,以我用Dvorak为例
最为痛苦的莫过于最初二天,每打一个字母都是考验, (17WPM)
三天后可以通过思考键位开始盲打 (26WPM)
一周后部份常用字母,特别是中间排开始条件反射。 (39WPM)
1个月后告别手指束缚感, (52WPM)
1个半月后遗忘qwert,全键位条件反射,正式告别原布局。(65WPM)
5个月后达到qwert时代巅峰,(415 CPM 74WPM)
6个月后超越过去,进入新纪元。(427 CPM 77WPM)

学新布局最关键的还是持之以衡和毅力,其实学习所有新事物皆是如此。

dvorak的安装:
ubuntu下,非常方便,在系统 > 首选项 > 布局 设置
windows下,为避免中文输入法dvorak键盘布局失效
只需把system32/kbddv.dll 改名为kbdus.dll 重启后即能完成全系统的键位dvorak化。

分类: dvorak 标签:

手动编译最新chromium(10-06-08更新)

2010年6月8日 2 条评论

创建: 2010-5-6
修订: 2010-6-8
1、安装依赖
apt-get install libfreetype6-dev libcairo2-dev libdbus-1-dev libbz2-dev libjpeg62-dev libpam0g-dev libexpat-dev libbz2-dev mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev libxss-dev libnspr4-dev libnspr4-0d libasound2-dev libgconf2-dev libglib2.0-dev libgtk2.0-dev libnss3-dev pkg-config gperf flex bison g++-multilib g++ perl python

2、下载 depot_tools
chromium$ svn co http://src.chromium.org/svn/trunk/tools/depot_tools

3、选择何适的版本
chromium有一个buildbot监控着各个revision的编译与测试的状态
具体见: http://build.chromium.org/buildbot/waterfall/console

4、创建.gclient
.gclient 关系到提取源码,有多种形式
svn仓库: http://src.chromium.org/viewvc/chrome/

以下是几个例子
a. 从trunk
chromium$ depot_tools/gclient config http://src.chromium.org/svn/trunk/src

b. 从releases
chromium$ depot_tools/gclient config http://src.chromium.org/svn/releases/5.0.375.76

c.从trunk,并仅提取通过编译与单元测试的版本
chromium$ depot_tools/gclient config http://src.chromium.org/svn/trunk/src http://build.chromium.org/buildbot/continuous/linux/LATEST/REVISION

修改.gclient
“custom_deps” : {
},

“custom_deps” : {
“src/third_party/WebKit/LayoutTests”: None,
},
不提取LayoutTests代码。

5、同步源码
chromium$ depot_tools/gclient sync

若提取的是trunk,且未指定safesync_url
可以提取某个指定版本
chromium$ depot_tools/gclient sync –revision [版本号]
如 depot_tools/gclient sync –revision 49151 提取版本49151

6、make
chromium/src$ make -j[CPU数] BUILDTYPE=Release chrome

四核 make -j4 BUILDTYPE=Release chrome
双核 make -j2 BUILDTYPE=Release chrome

7、完成
生成的chrome在src/out/Release/chrome

相关链接:
LinuxBuildInstructions
Chromium how to get code

分类: chromium 标签:

chromium 6.0.416.0 (48256) 性能报告

2010年6月4日 没有评论

不久前5-26日,把chromium升至 6.0.416.0 (48256),chromium速度在我的机子上peacekeeper首次破6000,达到了6019,强啊。
回顾chromium在我机器上的表现,
从 2009-9-17 的 4.0.211.0 (Ubuntu build 26265)的3260
到 2010-3-27 的 5.0.364.0 (42796) 的 5150
再到 2010-5-26 的 6.0.416.0 (48256) 的 6019
真是速度无极限啊!!

分类: chromium 标签:

Debian下配置mrtg

2010年6月4日 没有评论

目标:配置mrtg并每5分钟更新一次mrtg到/var/www/mrtg

1、安装snmpd, mrtg

apt-get install snmpd mrtg

mrtg是基于snmp通信,snmpd必不可少

2、配置snmpd
修改 /etc/snmp/snmpd.conf

com2sec paranoid   default         public
#com2sec readonly  default         public
#com2sec readwrite default         private

#       sec.name  source          community
#com2sec paranoid  default         public
com2sec readonly  127.0.0.1         public
#com2sec readwrite default         private

创建一个source为本机,名为public的只读通信

重启snmpd
/etc/init.d/snmpd restart

3、检测snmpd是否工作并显示当前网络的interface

snmpwalk -v 1 -c public localhost 1.3.6.1.2.1.2.2.1.2

后面一串1.3.6.1.2.1.2.2.1.2为snmp通信的oid,意为ifDescr

如我的interface描述输出

IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.3 = STRING: venet0

有2个可监控的interface,1为localhost,3为virtual net

4、编写mrtg.cfg
虽说可以mrtg.cfg由cfgmaker生成,但手写mrtg.cfg可以更好的理解mrtg
理论上mrtg.cfg可以在任何位置,这里为/etc/mrtg.cfg,因为debian在/etc/cron.d/mrtg已为mrtg添加了周期为5分钟的cron

#工作目录,也就是mrtg生成的图表等在的目录
WorkDir: /var/www/mrtg

#通用配置
#Title前缀
Title[^]: Traffic Analysis for
#以bit为单位,图表内的数据居右显示
Options[_]: bits, growright

#标题
Title[wan]: wan
#最大字节,比如10Mbps,那么MaxBytes为 10/8=1.25M=1250000
MaxBytes[wan]: 1250000
#监控目标 interface 3
Target[wan]: 3:public@127.0.0.1

5、更新mrtg数据
env LANG=C mrtg /etc/mrtg.cfg
生成的网页在/var/www/mrtg。通过对http访问该目录即可。

6、添加至crontab
若/etc/cron.d 中无mrtg那么可通过crontab -e添加一个cron
*/5 * * * env LANG=C /usr/bin/mrtg /etc/mrtg.cfg 2>&1 | tee -a /var/log/mrtg/mrtg.log

7、相关链接
mrtg配置文档
snmp oid描述

分类: ubuntu/debian, 系统管理 标签:

用回了ubuntu 9.04…

2010年5月6日 没有评论

ubuntu 10.04 用的有点不太顺手,比如nautilus的按钮模式的切换按钮取消(可通过gconf-editor修改,或 Ctrl+L && ESC 切换),新的声卡控制(没搞定)等等。便用回了9.04,主要声卡控制模式与音质的问题,当然多数是本人的问题。这类问题只要花精力配置,基本上都是可以解决的,因为如声卡kernel,alsa固定剩下的只有配置了,只是本人不愿意花精力去折腾了,也许是9.04下的工作环境太惬意了,也许是老了。不过在downgrade中大遇挫折,最后不得不重装了系统。

分类: ubuntu/debian 标签:

ubuntu升至10.04 试用手记

2010年5月1日 没有评论

昨天Ubuntu 10.04 LTS Stable 版发布。 最吸引我的还是 LTS 3个字母,这是一个新的里程碑,有什么道理不用呢。平时出个软件少说也要等上1个月再用,这次难得当次小白猴(比小白鼠好那么一点)。

先说说本人现在服役的版本 Ubuntu 9.04
从09年4月使用至今,一直非常稳定,以至于对 9.10 也不感冒。一些常用的软件也特别手动编译与精简,如内核,chromium,以保证性能最大化。
启动速度 54 秒(手机秒表计算,从grub menu按回车起至硬盘声音完全停止,中间包括了运行了vbox,lighttpd,pgsql,mysql,samba等服务),听说 10.04 在起动上大大优化,将会是多少呢。
chromium Peacekeeper 5400~5500

9.04似乎不能通过update-manager升,要先到9.10 才能升 1.04,随手动修改了apt源从 jaunty 到 lucid 强制升级,不清楚这样升可不可,google下,有网友说要先至 9.10 再 10.04,但光到 9.10 就要下 1.6G,干脆直接跳升。只要驱动不冲突,应该没啥大碍。

修改源的jaunty至lucid后,apt-get update
apt-get dist-upgrade
1736 upgraded, 420 newly installed, 46 to remove and 1 not upgraded.
Need to get 2105MB of archives.
After this operation, 1675MB of additional disk space will be used.
有点狠。要下3小时。
下完后又花了1小时安装。
重启后显卡出错,还好下了10.4最新的ati驱动。安装之,再重启,一切OK

主观体验:
1、画面(中)
首先是启动画面变化,Ubuntu下4个圆点而不是原先的长条。
缺点:但会莫名弹出fglrx,alsa等文字信息,十分不雅,应该是显卡驱动原因。
其次图标的变的更华丽。

2、音量控制(差)
右上脚的音量控制变成,和声音有关的控制,本人只用alsa而不用pulseaudio,把pulseaudio卸载后,连控制面板的声音都无法打开了。

3、速度(好)
速度感觉是快了不少,但启动并没感觉快多少,可能是我的最小化内核本来就很快。

4、中文化(好)
scim的提示变成了宋体,虽然我早就习惯雅黑,达到是非雅黑的不爽程度,但这的确在中文化上面是一进步,照顾了大部份宋体爱好者。

5、文件浏览器(中)
速度上有所提升,但我最喜欢的按钮式导航不见踪影。只剩下文字地址非常不爽。

6、多余的键盘布局选择(差)
本人用的是Dvorak布局,每次进系统都要删除不知哪来的USA布局。

7、软件管理(中)
查询速度上有大幅提升。分类也更加详细。但安装不再提示包的依赖等信息,所以不敢用了,隐藏太多细节会使ubuntu显的自说自话,也是windows中我最反感的,但这也标志着ubuntu越来越平民化。其次原本很有参考价值的星级评价也消失了,很不方便。

综上:在10.04速度上有不错的提升,

启动时间:50s
Chromium: 5540分

分类: ubuntu/debian, 闲聊 标签:

linux命令行下的ctrl+r

2010年4月16日 6 条评论

linux命令行的history是一个熟知但不常用的命令,原因是要查某个命令的编号需要输入 history|grep xxx ,又因为!?xxx,!xxx 属于运行即执行也不方便,ctrl+r则方便多了。

ctrl+r
用途:反向搜索执行过的命令。(reverse-i-search)

若对于现有history
611 ruby foo.rb
612 ruby bar.rb
613 ruby fo.rb
614 ruby ba.rb
615 …

700 …

在不知道序号的情况下,若要运行ruby foo.rb。
1、ctrl+r
2、foo

1、ctrl+r
2、fo
3、ctrl+r (继续反向搜索)
只需要寥寥几键。当然若仅是上几个命令还是[上]键更有效率。

分类: ubuntu/debian, 系统管理 标签:

键盘布局 Dvorak 毕业,已完全代替qwerty。

2010年4月13日 4 条评论

布局 Programmer Dvorak 经过7天,休息3周,再7天的使用,英文平均速度已达到50wpm,五笔大约20字左右。vim键位也已适应,一切都顺利。其实只要做到想到字母就想到键位,一切就到了可接受范围,没有压抑的束缚感,人的适应性超过我的想象。从今天起正式和qwerty说Bye Bye~

附速度历程:http://www.jiangmiao.org/blog/589.html
— 4.21 —
已经忘了qwerty键了,第一反应已是Dvorak

分类: dvorak, 闲聊 标签:

Chromium 5 惊人的性能提升

2010年3月27日 2 条评论

今天把许久未升级的Chromium从 09年9月的 4.0.256.0 (32792) 升级到了 5.0.364.0 (42796)
peacekeeper分数 由原来的36xx 一跃至5150,我惊呆了。

CPU: AMD Phenom(tm) 9650 Quad-Core Processor
内存: 4G
显卡:集成显卡HD3300
操作系统: Ubuntu 9.04

—-04.27—-
今天升至 5.0.388.0 (45607) 后 分数升至 5500 分 了….

分类: chromium 标签: