2014年8月22日

Linux Meld 比较工具,升级后怎么设置字符编码

Meld 升级到 3.11 版本后,原来设置语言文字编码的选项消失了。
没有了编码检测设置,在比较文件时常会遇到 "无法提取文件 文件不是使用 ['utf8'] 进行编码的" 或者 "Could not read file, file is not in encodings: ['utf8']"。
参考这里:Meld 3.11.0 and encoding
in meld 1.8.4 I had the option "Encoding". Here I used "utf8 latin1".
In meld 3.11.0 there is no "Encoding" options. It seems to use only utf8.
By comparing some of my files I get the error message:"Could not read file"
--------------------
There is no UI for it. You can set the encodings that will be tried in
Meld's 'detect-encodings' gsettings key.
按网上的回答就是:界面设置编码的地方没有了,配置里面仍然有效。

解决办法:
1、 用命令查看当前设置的编码
      gsettings  get  org.gnome.meld  detect-encodings
2、 用命令设置支持哪些字符集编码检测
      gsettings  set  org.gnome.meld  detect-encodings  "['utf8','cp936','latin1']"

2011年1月13日

挖掘 type 命令

今天测试个脚本,居然发现 ifconfig 命令会找不到,呖。。。。开发无止境,测试无止境!!

修改了一下,用 type 命令重新定位一下,判断系统中 ifconfig 命令的位置,代码如下:
IFCONF="/sbin/ifconfig"
[ ! -x "/sbin/ifconfig" ] &&
IFCONF=`type ifconfig | awk '{print $3}'`

接着又发现新问题了,type 的返回信息很“丰富”啊。。。
启动 bash 以后运行 type ifconfig 返回 ifconfig is /sbin/ifconfig
运行一次 ifconfig 后再运行 type ifconfig 返回 ifconfig is hashed (/sbin/ifconfig)

查看一下帮助,看看有没有什么参数可以用,type --help,
type: usage: type [-afptP] name [name ...]
不过,只有bash才支持这些参数;非POSIX的东西,不敢多用。

为了保证可靠性,修改代码:
IFCONF="/sbin/ifconfig"
[ ! -x "/sbin/ifconfig" ] &&
IFCONF=`type ifconfig | awk '{print $NF}' | sed 's/(\|)//g'`

当然,仍然不放心。。因为 type 有时候还会有这样的输出格式:
(bash) type type --> type is a shell builtin
(ksh) type type --> type is an alias for 'whence -v'

如果某人在环境变量里面 alias ifconfig='ifconifg -a' 了,这个脚本会报错吗?
好象不会,有兴趣可以研究一下。。。。。

2010年6月11日

QEMU入门

1、QEMU是最简陋、最快速的虚拟机工具,一条命令就能开始工作:
qemu -hda /dev/zero
当然,这条命令什么都干不了,只是告诉你网络启动失败,硬盘驱动、软驱、光驱也都无法启动。

2、来试试光盘引导:
qemu -cdrom ubuntu-10.04-server-i386.iso
可以启动ubuntu光盘了,当然你也可以试试windows安装光盘的ISO文件,也能装,不过你得先指定一个硬盘。

3、装个系统试试

3.1、先建个虚拟盘
qemu-img create -f qcow2 linux.img 1G
1G只是个容量上限,你写10G也没关系,不会占用你太多的空间,用多少算多少

3.2开始启动安装程序
qemu -hda linux.img -cdrom ubuntu-10.04-server-i386.iso -m 512M -boot d
参数依次是 硬盘、光盘、内存、引导位置

装一半过过瘾就行了,别真的装了。知道为什么?
QEMU性能不如vmware和virtualbox,真要用估计没多少人会选qemu
搞开发玩玩可以,真真上生产还是不大方便

4、开始玩了,凑点装备准备上路
需要的装备:
  • qemu 有Linux/Windows版的,不过你得在Linux下玩,不然后面就玩不下去了
  • kernel 需要一个内核文件,硬盘里或者网上随便找一个,凑合着能用就行。如果你已经在Linux下面了,/boot/下面就有。再或者,Linux安装盘上一般也能找到,拷下来就能用。
  • busybox 基本上每个Linux系统里面都已经有了,或者去下载一个 http://www.busybox.net/downloads/binaries/ busybox-i686 就不错
后面还需要的东西:
  • Linux内核 http://www.kernel.org/pub/linux/kernel/v2.6/
  • 内核编译环境 准备编个自已的内核

2009年12月4日

一些好记又实用的免费DNS服务器

以前总是记本省电信的DNS,问题是出了省这些DNS往往无法访问
外加上国内DNS污染非常严重,后来就不敢用国内DNS了,直接用OpenDNS

OpenDNS : 208.67.222.222 208.67.220.220 还是比较好用的

年初买了个G1,发现G1用的DNS是非常好记啊,速度也快
4.2.2.1
4.2.2.2
4.2.2.3
4.2.2.4
4.2.2.5
在 twitter 上还听到过一个DNS ,长得比较可爱
4.3.2.1

刚刚 google 又出了免费 DNS 服务

8.8.8.8
8.8.4.4

基本上,同学们可以不必再用电信的垃圾DNS了。

2009年8月13日

|G1| 让一个无线网卡即当AP又当STA

公司用WIFI上网,只给笔记本分配了一个MAC地址,G1来了没法上网。

想了一个办法,把笔记本虚拟成一个AP,这样需要笔记本的无线网卡需拟成两块无线网卡:一个作STA客户端与公司的WIFI连接,另一个模拟AP供G1连接

用madwifi,已经能把原先的一个 ath0 设备变成 ath0/ath1 ,AP也出来了,可是网络很不稳定,时断时续,还需要找问题继续改进。。。

/etc/init.d/NetworkManager stop
modprobe -r ath_pci ath_rate_sample ath_hal wlan_scan_sta wlan_wep wlan_tkip wlan_xauth wlan_scan_ap wlan
modprobe ath_pci autocreate=none

wlanconfig ath create wlandev wifi0 wlanmode sta nosbeacon
wlanconfig ath create wlandev wifi0 wlanmode ap

ifconfig ath0 up
iwconfig ath0 essid myspace
iwpriv ath0 mode 3
dhclient ath0

ifconfig ath1 192.168.31.1/24
ifconfig ath1 up
iwconfig ath1 essid Android
/etc/init.d/dhcp3-server

2009年5月4日

|Script|在控制台使用 cd 命令时,用拼音自动补全中文路径

在控制台使用 cd 命令时,用拼音自动补全中文路径

实验目录如下:
biff@lenovo:/domain/WorkSpace$ ls
SVN培训 全球眼 浙江建行 浙江农信

使用: (输完后按 TAB 键自动补全)
cd S <tab> 进入[SVN培训]
cd q <tab> 进入[全球眼]
cd z <tab> 自动补全[浙江]
cd zj <tab><tab> 提示[浙江建行 浙江农信]备选
cd 浙江j <tab> 进入[浙江建行]
cd zjj <tab> 进入[浙江建行]
cd zj1 <tab> 进入[浙江建行]
cd zj2 <tab> 进入[浙江农信]

配置:
找到 /etc/bash_completion 中 _file_dir() 函数,将
COMPREPLY=( "${COMPREPLY[@]}" "${toks[@]}" )
改成 ( 其中chsdir为本脚的名字,注意指定路径和赋执行权限 )
chs=($(chsdir "x$1" "$cur"))
COMPREPLY=( "${COMPREPLY[@]}" "${toks[@]}" "${chs[@]}" )
( 这是最简单的,但也是最不安全的。还有其它的方法,比如将这段函数粘到$HOME/.bashrc文件中,在引用/etc/bash_completion之后再覆盖性的定义一遍。或者另起一个文件保存这段脚本,然后在.bashrc中用 . $HOME/bin/myscript.sh 导入一遍。注意小点点。)
( 上面的修改只对 cd 命令生效,如果其它地方也需要补全,比如vim,还要用相同的方法处理 _filedir_xspec() 函数 )

问题:
1、多音字无法解决,比如[浙江建行]要输入[zjjx];
2、可以用数字序号定位,但是现在序号有乱序问题,思考中...
有问题邮件联系!

祝Linux之行一路顺风!

版本更新在: https://groups.google.com/group/binsos/browse_thread/thread/1951b77a2cf4bfab

---------------------------------
google talk
shaozx@gmail.com
---------------------------------

2009年5月2日

时间和书

今天是五六年来第一次去电脑城买光盘,与其等上三四天时间从电骡上下载,不如打个车今天就把光盘买回来。

这就是时间的价值,我也是最近一年多才意识到有些时候时间比金钱重要。当然,这是有前提条件的,就是在有一定的经济基础之后。

大家可能也有这个毛病:每天泡在淘宝上看一款U盘,或者一部手机,连续关注了两三个月还是下不了决心买下来。
半年前,我想买个U盘,连续三四周的时间都在网上逛,比较性价比,比较哪个卖家信用高而且价格便宜。突然有一天,我想通了,一口气买了三个,两个4GB、一个8GB,一起花费了200块钱。该有的都有了,以后就再没去关心U盘的事情了。
为了这200块钱真的不值得每天花一个多小时逛淘宝。

还有就是买书。

回想起来,差不多有十年没买过书了,因为不管找什么资料,网上都能找到。
但是还是应该买书回来看,特别的一本好书。“书非借不能读”,这是非常有道理的,不是每个人都能坚持把一本300页的PDF电子书从头看到尾,而买的纸质书就不一样了。

买书看,还有另外一个理由。一般网上找到的资料都是片段性的,比如装个Apache,或者学个新语言Python之类的,去网上找资料都会搜索某个针对性的问题,或是找快速入门参考,而很少能系统全面的学习。我指的是找“资料”,不是找“书”。如是上网找书的朋友,估计又遇到前面说到的问题,有很多人电脑里面存着大把的电子书,却没有一本书看完过。

书是朋友,时间是财富。

2009年4月29日

|EasyScripts|用GMail从控制台发送邮件的脚本


有时候需要备份些东西到邮箱,能够让脚本定时自动运行当然是最好!
抽时间用python写了这么个脚本,使用python-libgmail库 ( sudo apt-get install python-libgmail )

发送邮件的代码都是现成的调用,主要是在易用性上做了些优化:

1、发送一句话,不需要正文,比如给邮件列表发个“求助。。。。。(如题)”之类的:
    msend -t  list@domain.com  -s "求助,图形界面进不了,哈哈”

2、发个文件到自已的邮箱,一般用 -f "file1;file2;file3;dir2;dir3" ,发懒的时候不写 -f 也能用
    msend -t my@gmail.com -f readme.txt
    msend -t my@gmail.com  *.txt

3、发个文件或目录到某个邮箱,需要ZIP一下,(当然2和3可以混用)
    msend -t friend@domain.com  -z  ./pics/

基本上:
1、目标邮箱和主题必须写上;
2、如果有文件附件,可以不指定主题,脚本会把文件数当主题名(gmail的title里会显示正文的)
3、程序会自动判断文件和目录,如果是目录就会遍历
4、不管是文件还是目录,如果前缀指定了-z,就压缩后发送
5、没有前缀的参数一律当文件名

如果有需要,可以下载玩玩,运行msend不带参数就有用法,应该很明白了。

(还有什么稀奇古怪的想法?欢迎提出来!)


    Usage:
        msend -t user@domain.com -s title
        msend -t user@domain.com {-s title | -f file | -z file}

    Full command:
        msend --to=user@domain.com --subject=title [--msg=body] [--files="file1;dir2"] [--zip="file1;dir2"]

    Example: ( edit ~/.msend for default sender account )
        msend -t user@domain.com -s "just a test"
        msend -t user@domain.com -s "send all pic" -f ./mypics/
        msend -t user@domain.com -s "send files as zip" -z ./mytext/
        msend -t user@domain.com -s "send both" -f mytext -z mytext


附件下载和更新在: https://groups.google.com/group/binsos/browse_thread/thread/1362719b1a34cd9b

2009年4月9日

Linux下有线和无线网络共存时优先使用无线网

用Linux下的NetworkManager 0.70(网络管理器小程序)遇到个问题:无线网络和有线网络同时启用时,系统默认优先使用有线网络--即默认路由使用的是有线网络的。
写了一个脚本解决这个问题,无线网卡和有线网卡同时启用时,优先使用无线路由器的网关。
代码如下:
------------------------------------
#!/bin/bash
# /etc/dhcp3/dhclient-exit-hooks.d/wireless-gw
# /etc/network/if-up.d/wireless-gw

WIRELESS=`iwconfig 2>/dev/null| awk 'NR==1 {print $1}'`
[ -z "$WIRELESS" ] && exit 0

gw=`ip addr show dev $WIRELESS | grep "inet " | awk 'NR==1 {print $2}'`
[ `echo $gw | awk -F. '{print NF}'` -ne 4 ] && exit 0

gw=`echo $gw | awk -F. '{printf("%s.%s.%s.1",$1,$2,$3)}'`

while [ `ip route | grep ^default | wc -l` -gt 0 ]
do
ip route delete default
done
ip route add default via $gw

#echo nameserver $gw > /etc/resolv.conf
echo nameserver 8.8.8.8 > /etc/resolv.conf
echo nameserver 208.67.222.222 >> /etc/resolv.conf

------------------------------------
脚本先取到无线网络设备名,依照设备名取到IP地址,然后假设无线路由地址是该IP段的第一个IP号,即xxx.xxx.xxx.1(通常无线AP都这样用的,暂时没有其它更好的办法),最后删除错误的默认路由,将无线网络的网关当作默认路由。
最后一句是修正DNS,如果DNS工作正常,可以去掉。
写好后放到/etc/network/if-up.d/ 和 /etc/dhcp3/dhclient-exit-hooks.d/下,命名为wireless-gw,赋执行权限。
(Ubuntu8.10下使用正常,其它发行版安放目录可能会有差异)

难道ubuntu里面就没有考虑这个问题?很奇怪!

2009年1月14日

用python修改gnome网络代理

在家里用无线网络,不需要设置代理;在公司用局域网,需要指定代理才能上网。每次在两个地方换来换去都要手工切换代理。本来就是非常机械化的动作,干嘛不用程序自动解决呢?

今天试了一下写一个python的程序去修改代理设置,但是发现一个奇怪的问题:
用 gnome-network-preferences 修改代理地址和代理端口后 gconf-editor 中可以看到 /system/http_proxy/ 里面的值会发生变化,包括 host,port,use_http_proxy。修改以后 GNOME 全局的代理配置都会发生变化。
但是,用 gconf-editor 修改这些值以后,gnome-network-preferences 的配置项不会变化,GNOME 全局的代理配置也没有变化,修改不生效。

很奇怪啊。。。。。

上网查了一下,有人将这一情况作为BUG提交了。需要修改的地方是 /system/proxy/mode 。

https://bugs.launchpad.net/ubuntu/+source/gconf/+bug/290995
https://bugs.launchpad.net/ubuntu/+source/gnome-control-center/+bug/271108

在 gnome-network-preferences 里面启用和禁用代理服务器后,/system/http_proxy/use_http_proxy 和 /system/proxy/mode 两个地方都被修改。可能其中一个值是历史遗留的吧。

2008年12月25日

rhythmbox 歌词滚动的插件

一直找不到rhythmbox的歌词显示插件,抽空整了一个

基于网上原有的 ttplyrics 0.4 版本,参考 python-osd 和 musicapplet 的代码,凑出来的
我对python不熟,有需要的将就着用吧,期待python熟手进行优化

文件解包到 $HOME/.gnome2/rhythmbox/plugins/ttplyrics
biff@lenovo:~/.gnome2/rhythmbox/plugins/ttplyrics$ ls -l
总用量 36
-rw-r--r-- 1 biff biff 8370 2008-12-24 20:05 dbus_pyosd.py
-rw-r--r-- 1 biff biff 3473 2007-08-20 23:23 ttpClient.py
-rw-r--r-- 1 biff biff 14509 2008-12-24 20:16 ttplyrics.py
-rw-r--r-- 1 biff biff 333 2007-08-20 23:23 ttplyrics.rb-plugin

启动rhythmbox后,ttplyrics会取到歌词,歌词在 $HOME/.lyrics目录下,dbus_pyosd.py 会将歌词显到屏幕上。

可以单独运行 dbus_pyosd.py ,运行后 rhythmbox被自动启动,控制台有调试信息

附件和问题解决在这里下载
https://groups.google.com/group/binsos

--
---------------------------------
google talk
shaozx@gmail.com
---------------------------------

Linux下远程登录的脚本

Linux下面没有象NetTerm或SecureCRT之类好用的登录管理工具,管理一大堆服务器地址和记住这些口令是件令人头痛的事情。
这是我自已用的一个自动登录脚本,支持SSH和TELNET。
分两个文件,to和to.hosts。
to 的用法是 to 跟主机名,如 to myserver,然后脚本就会自动在to.hosts文件里面找有没有定义这个主机,如果有,就取出主机地址、用户名、密码进行登录。
to.hosts文件可以定义多个主机,定义格式如下:
[demo1]
host=192.168.235.1
name=john
pass=john123
type=telnet
code=gb2312

[demo2]
host=192.168.1.77
name=hap
pass=hap
type=ssh

demo1/demo2是代号,如 to demo1 就会自动用telnet登录192.168.235.1主机。
host/name/pass是主机地址、登录用户名、口令
type可以是ssh或telnet,指定登录类型
code用来指定远端编码,如果你本地是终端用的UTF8,而远端是GB码,登过去后就会显示乱码,这时候可以指定自动进行编码转换

需要安装 python-pexpect 支持。
sudo apt-get install python-pexpect
将to文件放到PATH路径去,配置一个主机

biff@lenovo:~/bin$ to dxpt
dxpt@158.222.2.11's password:
短信平台11:/home/dxpt>
##################################################
# auto login success, have a lot of fun ... #
##################################################
ssh://dxpt@158.222.2.11
短信平台11:/home/dxpt>

---------------------------------------------
附件在这里下载
https://groups.google.com/group/binsos/browse_thread/thread/29fcf78c5c3236ee
如果你用上了,或有什么问题,请邮件联系我!
--
---------------------------------
google talk
shaozx@gmail.com
---------------------------------

2008年9月15日

国内IT仍然是一片原始生态

今天看了Android开发竞赛的新闻,对这些中小型规模公司的运作存在一些想法,如果这样的公司在国内会是怎么样的呢?
从技术上讲,现在国内能够进行软件创新的人还不多,市面上能揽到的程序员质量都一般,招聘市场上有句话说:牛人都是靠介绍,不去招聘市场的。可以这么形容:国内这些牛人都如繁星点缀,还没有形成一个真正的人才集市。
从经济水平来讲,普通程序员的工资水平仍然停留在养家糊口的阶段,项目策划能力和对抗项目风险的能力不够。
从社会环境来说,政策和市场环境有一定的改善,但是行业竞争和模仿仍然不利于小公司的生存。

2008年4月1日

Wikipedai 与 Blogspot 在中国解封

Moses 写道 :
"今天,除了中文 Wikipedia 以外的所有 Wikimedia 项目和 Blogspot 已经可以在中国访问。 包括 Wikipedia 在内的 Wikimedia 各个项目,连同 Blogspot 上的大多数 Blog,此前已经在中国被封锁很多年。今日的突然解封,可能只是一個愚人节玩笑?"

转自 http://internet.solidot.org

2007年11月27日

只需 $299 就能拥有一套3D桌面系统

今天在国外的一个网站上看到 LINUX PC 的宣传

只要 299 美元!!你就能拥有一套3D桌面系统

1、从广告策划来讲,对消费者屏蔽了专业术语(其实很多人并不知道 LINUX 的)

2、从计算机来讲,大家都知道 XP 是没有 3D 桌面的,于是心理上给消费者一个"比 xp 更好"的感觉

宣传很到位,很经典!

2007年10月23日

Intel 声卡不能用 ALSA驱动

新买的T61用的Intel声卡,用Mplayer时只能用 OSS驱动,改成 ALSA 就报找不到声卡

今天偶然的切到另外一个新用户环境下面去,发现居然可以用ALSA,估计是老的环境变量设置引起ALSA的设置不对。

受了好几周的罪,今天终于解决了:
biff@lenovo:~$ asoundconf list
Names of available sound cards:
Intel
biff@lenovo:~$ asoundconf set-default-card Intel
biff@lenovo:~$
然后就OK了

(并不象网上所说的不能用ALSA驱动,也有可能是网上的资料有些老了)

2007年9月23日

用LINUX当桌面的4个理由

有时候想想为什么非要坚持着用LINUX当桌面,其实真的不如WINDOWS好用!

可能有这样几个理由:

1、因为LINUX上体现的都是最前沿的技术,作为一个搞技术的人,就是应该在最前沿的试验基地工作,这样才能跟上最新的技术发展,比如Ruby、Python、VM等等

2、很多方面,微软的技术比LINUX更先进,必竞资金更雄厚、人才储备更非富,但是,微软的特点是将技术的复杂性掩盖,所以,到了用户手上的东西都是傻瓜式的,这对学习技术是不利的

3、微软的垄断地位导致竖敌过多,与其一颗树上吊死,还不如脚踏两条船;虽然LINUX可能更短命,但是可能踩死它的人在技术上与其有相似性,比如FreeBSD、OpenSolaris,技术跨度相比WINDOWS要小

4、虽然LINUX成为主流桌面仍然希望渺茫,但是,既然WINDOWS是傻瓜式的操作系统,等到LINUX跨台了再回过头学WINDOWS也不迟,吃着碗里看着锅里,两头都不耽误

当然,这些都是针对技术人员的,所以,非技术人员是没有理由优先选用LINUX的!

2007年9月8日

Google 离死亡还有多远?

本来 Google 用得好好的,好几年了没想过搬家

但是最近,情况真个儿的变了,Google 瞌睡了!!

先是 Google Talk 伤了心
一直不出 Linux 的语音版
群聊功能一拖再拖
其实 GFans 真的是非常强大的
我们都有信心将 Google 的产品支持到底
但是 GT 真的不如 QQ 好
想传个文件还真挺困难
所以门前冷清,也拉不到几个朋友过来凑数

你说说,啥时候咱 LINUX 上也能用上聊天室,用上语音视频?
当然,还有那把截屏的剪刀,眼馋啊



过了些时候,Google又出了输入法
咱等啊,等啊
就没声音了
咱是用五笔的,五笔是没指望了
咱是用 Linux 的,Linux 是没指望了

搜狗拼音咱没指望,可咱指望过你呀,
你不是支持 Linux 好多年了吗,还喊着要回报社区
群组里那么多人提五笔,渴望出个Linux版本,你咋就低调处理了呢



这段时间 QMail 不是闹得凶嘛
咱不用,也不能不去占个坑啊
又去瞧了瞧
嘿,QQ上的哥们那个活得快活
聊天那个多姿多彩
QMail?嗨,咱哥们都不瞧在眼里
人家把 QMail 就当个补充
腾讯有QQ占着桌面,邮件眨吧眨吧就出来了
哪像咱 Gmail 老是"请稍候"
不是开口闭口本地化吗,
咱是笨人,不明白都本地化了些啥


依我说,Gmail 真的得赶紧修理了
速度慢就不说了
那个该死的联系簿早该升升级了
功能简单得让人没法用
虽然邮件线索和集成搜索是有点新意
那也是好多年前的事了,现在别人早学去了



再说咱开的那个 blogspot 吧
咱给自己取个名字叫"二进制生存"
这回可好,名字起的不吉利,完全活不下去了
天天琢磨着代理呀网关呀

这事其实不怪你,咱不也挺赞赏你这点傲骨
后来feedburner的事不是也没人说你什么
可是最近人家要搞和谐,你干嘛也跟着凑热闹呢
该咋干咋干,该是怎么样就是怎么样
怎么为了一点点商业利益就又没骨气了呢


调过头,去 sohu 开了个博客
咳,这都是些啥玩艺,花里胡哨的
小张同志就不是搞技术的料,
你的东西嘛
就留给十七八岁小年青发唠叨用吧
还没得意上两天
赶上 Yahoo 邮箱打广告了
捡回来四五年没怎么用的帐号一看
人家 Yahoo 重振旗鼓,博客邮件相册该有的都有
东西嘛,做得还是有模有样,是个做门户的样子
虽然人家是副鬼子嘴脸,可也没得罪咱
东西能用就咱将用着呗


停在 Yahoo 里转悠转悠
发现人家的访问速度还是要快好多
还有,相册也精致些
咱中国人不就爱个小巧玲珑,整洁美观
哪像Picsas里面一个像册封面有巴掌大
反正 Picsas 是真的不好用
速度慢不说吧,
想把照片归归类什么的
管理起来还真的有点困难


这骂人骂上了就停不下来,可是骂多了就没意思了
还剩点什么?
PageCreater 不好用,从一开始就没有好用过
NoteBook ,貌似用的人不多,Google也没在上面多花心思
iGoogle 本来想拿来当首页,可搜索框没有趋势提示,也是个半调子
Groups 还行,不过本来就是旧瓶装新酒,也好久没升级过了
Docs 前景光明,多抽点时间在国内大力推广吧,酒香也怕巷子深
Calendar ,不整合到桌面就没前途,人家 QQ 已经先行一步了
BrowerSync 完全是扯淡,把我的收藏夹搞得乱七八糟,再不敢用 了
Analytics 很好,很强大!但是我从来没想过用它来分析广告
还有 adsence,咱没用,可一门心思用它搛钱的人没一个老实的

看明白没有
Google是干什么的,它就是一广告公司
Google在干什么,它专注广告推销
Google关心谁,它曾经关注技术

等到哪天Google忘了它是靠技术 No.1 起家的
等到哪天Google技术不再是 No.1 了

等到Google不关照我们这些搞技术的 GFans 了
那时我们也会厌烦天底下所有搞广告推销的

其实我们本来就讨厌广告
此一时,彼一时,谁知道 Google 什么时候倒闭!


为了防止被口水淹死,多补充一句
我也是 GFans
但是今天主要是批斗Google,大家就不要把矛头指向我了
年中多总结,年底才能有个好收成
好话放到年底再说吧
希望不要到了年底表彰变成了悼文!


--------------------------
??? 哪位兄台帮我放到 cnbeta 上去晒晒,看看能收多少口水! ???
--------------------------

2007年9月1日

在 Linux 上使用 Ipmsg 的事项



本文介绍g2ipmsg的安装使用注意事项,包括无法编译安装、显示乱码、安装后无声音、无法传送中文文件名、接收中文文件名乱码等


1、版本选择 --使用2007版的 g2ipmsg。
这是 2007 新开发的 ip messenger ( www.ipmsg.org ),基于 GTK 库,可以单独执行或作为 Applet 放在面板上使用,功能比以前的 JAVA 和 X 版本的完善和稳定--JAVA版不支持文件收发,旧版本好象都不支持接收目录。
如果急用,建议可以先试试用 Wine 跑 win 版本的 ipmsg,但是也不支持接收和发送目录

下面说一下g2ipmsg安装的注意事项

2、解决乱码
下载g2ipmsg解包后找到 g2ipmsg-0.9.1/src/code.c
将文件顶部的宏定义改成
#define IPMSG_INTERNAL_CODE "UTF-8"
#define IPMSG_PROTO_CODE "CP936"
然后重新编译


3、运行 ./configure 不通过
执行 ./configure --prefix=/usr --sysconfdir=/etc --enable-systray
如果不带 --enable-systray ,就不会生成 applet

可以在 make 的时候看一下你的系统差些什么,参照着补全
只要所有组件都齐全,不会有什么问题
需要注意的是:GST是 GStreamer 的 dev 开发包,如果不装也可以编译通过,但是运行的时候新消息没有声音提示
另外网上还有其它的一些报错,比如 gcc 未安装、gettext未安装等,可以依据报出来的错到 google 上搜一下


4、安装后面板的 applet 清单里找不到 g2ipmsg
造成这种情况的可能性很多,可以试一下重启 面板 ( pkill gnome-panel;gnome-panel& )再看看
还可以试一下将 /usr/bin/g2ipmsg 和 /usr/bin/g2ipmsg_applet 拷贝到 /usr/local/bin 下面去(ubuntu )
应该来说Deb安装都不会出现这样的问题,尽量用Deb包安装就没问题,但是网上有些Deb包安装后是日文码的,显示界面里面的中文人名全是乱码,还有些是声音的问题没有解决
可以试着先装Deb包,然后将 make 好的 g2ipmsg 和 g2ipmsg_applet 拷贝过去覆盖


5、无法发送中文文件
因为 g2ipmsg 用 GTK 库写的,如果你的文件名编码是 GB 的,发送时文件名会是乱码,对方就会收到一个空消息,
在发送前将文件名换成 utf-8 的就没有问题了 ( convmv -f gb2312 -t utf8 --notest 测试文档.txt ),可以查阅一下 convmv 的相关用法,如果需要将整个目录里所有文件名换成 utf8 ,用 -r 就行了
还有,如果文件夹名是GB编码的,那么文件夹里面的文件不论是什么编码都无法传送,


6、接收的文件乱码
接收到的文件名总是以 UTF-8 编码的,因为文件管理器 ( Nautilus ) 可以正常显示UTF和 GB 编码的文件名,即始 不同编码的文件名放在一个目录下面,也会显示得很好,但是在终端里看会看到部分文件名正常,另外一些是乱码,这时候也需要用 convmv 将文件名转换一下


7 、新消息没有声音
看一下选项里的声音钩上没有,如果无法选中,参考第3步 configure 中的 GST 部分

2007年8月31日

穿透HTTP代理用 python-xmpp 给 google talk 发消息

python-xmpp 实现了 jabber 的大部分协议,能够用 python 发 jabber 消息
因为 google talk 本身就是基于 jabber 协议扩展的,所以也能给 google talk 发消息


早期的 python-xmpp 不支持 SSL 认证登录,所以只能登到一些非SSL认证的服务器,如 Jabber.org ,再给 google talk 的用户发消息,新版本已经解决这个问题。我现在使用的版本里 auth.py 是 v 1.35 2006/01/18 19:26:43
auth的参数是(节点,密码)
j_CLIENT.auth('shaozx','password')
第一次写的时候传入了 user@gmail.com 导致程序报错,后来跟踪调试,找到了第 143行,
它的本意是通过 user@gmail.com 截断得到 gmail.com,然后 DNS 解晰得到实际服务器 talk.l.google.com,
最后组合得到 user@talk.l.google.com,可是程序里几个变量都叫 server ,把自已也搞糊了!
140 if "DIGEST-MD5" in mecs:
141 node=Node('auth',attrs={'xmlns':NS_SASL,'mechanism':'DIGEST-MD5'})
142 elif "PLAIN" in mecs:
143 sasl_data='%s\x00%s\x00%s'%(self.username+'@'+self._owner.Server,self.username,se lf.password)
144 node=Node('auth',attrs={'xmlns':NS_SASL,'mechanism':'PLAIN'},payload=[base64.enco destring(sasl_data)])
145 else:
146 self.startsasl='failure'
147 self.DEBUG('I can only use DIGEST-MD5 and PLAIN mecanisms.','error')
148 return



我现在使用的python-xmpp里带的 transport .py 版本是 transports.py,v 1.28 2006/01/26 13:09:35
我修改屏蔽了第 182 行,否则使用代理服务器的时候总是报错,无法认证成功,还没想明白为什么
172 def send(self,raw_data):
173 """ Writes raw outgoing data. Blocks until done.
174 If supplied data is unicode string, encodes it to utf-8 before send."""
175 if type(raw_data)==type(u''): raw_data = raw_data.encode('utf-8')
176 elif type(raw_data)<>type(''): raw_data = ustr(raw_data).encode('utf-8')
177 try:
178 self._send(raw_data)
179 # Avoid printing messages that are empty keepalive packets.
180 if raw_data.strip():
181 self.DEBUG(raw_data,'sent')
182 #self._owner.Dispatcher.Event('', DATA_SENT, raw_data)
183 except:
184 self.DEBUG("Socket error while sending data",'error')
185 self._owner.disconnected()


如果是直接连接互联网,connect的写法如下:
j_CLIENT.connect()
中间如果有代理服务器,connect的写法如下:
j_CLIENT.connect(proxy={'host':'192.168.1.254','port':8080,'user':'guest','password':'cisco'})
注意 port 变量是整型,用程序代码生成proxy的时候格外要注意,不然会报错
可以参考 python-xmpp 的API文档


如果从命令行或其它地方传入文本,还需要注意编码转换
msg = unicode(msg,'gb18030').encode('utf8')
然后再发送出去
j_CLIENT.send(xmpp.Message('接收者',msg))


sendInitPresence(50)是置发送者状态为“在线”,置发送者状态后接收方会多弹出一个“XXX上线”的消息,我遇到过Palm上的一个jabber客户端,登录成功后就置了一个 0 ,然后死活发不出去消息,晕倒!


自带的程序原型 xsend.py 简化如下:
#!/usr/bin/python
# -*- coding: utf8 -*-
import xmpp

j_CLIENT=xmpp.Client('gmail.com',debug=[])
j_CLIENT.connect(proxy={'host':'192.168.1.254','port':8080,'user':'guest','password':'cisco'})
#j_CLIENT.connect()
j_CLIENT.auth('shaozx','password')
#j_CLIENT.sendInitPresence(50)
j_CLIENT.send(xmpp.Message('shaozx@gmail.com','test'))


写python的东西感觉架着滑翔机,
对老手来说是一种享受,而新手战战兢兢如履薄冰
最后祝你好运!