Life Since 1985

Happy Hacking

早起刷牙,篡改小曲一首

小小姑娘,早上起床,发现短信还没回。她不想回,她不想回,她就想跟你说拜拜。

小小男孩,发条短信,不是想要挽回谁。你们谈天,你们说地,跟我有个屁关系。

PS:奶奶的,我也会写词了。。。。

笑府一则

一家父子僮仆专说大话,每每以朝廷名色自呼。一日,友人来望,其父出外,遇其长子,曰:“父王驾出了。”问及令堂,次子又云:“娘娘在后花园饮宴。”友见 说话僭分,含怒而去。途遇其父,乃述其子之言告之。父曰:“是谁说的?”仆在后云:“这是太子与庶子说的。”其友愈恼,扭仆便打。其父忙劝曰:“卿家不 恼。看寡人面上。”

血管迸断了打个结活着我就只爱她

来自诗人廖伟棠的推荐。廖师推荐宋雨喆歌词多首,我喜欢其中《我爱的人心里美》:“我唱的歌是心上的话/唱不唱由不得自个家/钢刀子拿来头砍下/不死就这么个唱法/我爱的人心里美/爱不爱由不得自个家/血管迸断了打个结/活着我就只爱她。”

Gambas八股介绍

我是在ubuntu mailling list看到Gambas的,不过不太了解这个是什么,所以就google了一下,发现原来是一个开源的basic解决方案,为了避免我珍贵的记忆缺失,所以将网上的一些介绍贴在这里,权当做个八股介绍吧。

迄今为止,windows下最常用的basic开发环境是 Microsoft 的 Visual Basic 集成开发环境。Linux 的使用范围已经延伸到了桌面环境。Gambas是linux下开源的BASIC语言集成开发环境,基于类似java的虚拟机和解释程序。类似VB的控件,GAMBAS可以使用组件库来扩展功能,gambas降低了在linux下开发软件的门槛。   

和VB的比较 http://www.gambas.it/DifferenzeDaVB.html   

官方中文介绍和帮助 http://gambasdoc.org/help?zh&v3

官方网址 http://gambas.sourceforge.net/en/main.html

记录几本关于linux开发的书籍

这是基本在"Linux Application Development"(Linux应用程序开发)中提到的基本书,有关于c语言的,也有关于linux下面高级编程的。特此记录在这里,以提醒自己时常翻阅。

(1)"The C Programming Language" 第二版 1988

(2)"Practical C Programming" 1993

(3)"Programming with  GNU Software" 1997

(4)"Advanced Programming in the UNIX Environment" 1992

(5)"UNIX Network Programming" 2004

(6)"A Practical Guide to Red Hat Linux 8" 2002

(7)"Linux in a Nutshell" 2003

(8)"Linux Device Drivers" 2003

GO语言环境设置

对于GO语言我也是今天闲着没事装上玩玩,按照GO语言官方文档的安装方法大体都能够安装上,不过有很多细节上面说的不是很清楚,而且有很多地方有可能在当前GO的版本上已经有所更改,所以特地写出来以供大家一起研究。

首先介绍一下我的环境:Ubuntu amd64

1.Go语言需要设置四个环境变量:

GOROOT:一般设置为$HOME/go,这个是GO安装包的根目录,一般的安装文件都下载在这里。

GOARCH:这个标识出系统的架构,即为386、amd64或是arm

GOOS:这个标识出操作系统类型,即为linux、freeBSD、darwin等等

GOBIN:一般设置为$HOME/bin,指明GO编译后安装的二进制目录。这个在官方的文档中写的是可选,但是在真正的安装过程中发现是必须要设置的,不知道是否是因为系统、架构的原因有所不同。

2.编译.bashrc,在里面设置好环境变量:

export GOROOT=$HOME/go  
export GOARCH=amd64  
export GOOS=linux  
export GOBIN=$HOME/bin
export PATH=${PATH}:$HOME/bin  

设置好之后可以通过以下命令查看是否设置成功

env | grep '^GO'

3.安装一些必要的工具

(1)安装Mercurial版本管理系统

sudo apt-get install mercurial

(2)安装GCC、C标准库、Bison分析器、 以及make、awk和ed等开发工具

sudo apt-get install bison gcc libc6-dev ed gawk make

4.下载GO的源文件

hg clone -r release https://go.googlecode.com/hg/ $GOROOT

通过以下命令对GO进行编译

cd $GOROOT/src
./all.bash

如果编译成功会在终端中显示如下信息

--- cd ../test
N known bugs; 0 unexpected bugs

基本上到现在为止GO语言环境已经编译并设置好了。

 

python新式类的继承方式

最近在读《python学习手册》,发现python新式类的继承方式很有意思,而且据说在python3.0里面所有的类都将变成新式类,在此让同是跟我一样在Python2.x入门的人尝个鲜。

在python的普通中类中,继承的模式是深度优先的,也就是说对于一个对象的搜索遵循从左至右、从下到上的原则,而这从下到上的原则又优于从左至右。发觉语言上的描述十分晦涩,举个例子吧。

# -*- coding:utf-8 -*-
class A():
    """
    作为所有类的基类
    """
    value = 1
    
    def __init__(self, ):
        """
        """
        
class B(A):
    """
    D的基类,继承自A
    """
    
    def __init__(self, ):
        """
        """

class C(A):
    """
    D的基类,继承自A
    并且将基类中的变量值修改
    """
    value = 3
    
    def __init__(self, ):
        """
        """
        
class D(B, C):
    """
    """
    
    def __init__(self, ):
        """
        """
        
x = D()
print x.value

对于以上的代码输出的结果将是1。

因为对于经典类来说,在类D中调用对象value,首先要查找类D中是否有value,如果没有则按顺序查找B->A->C。它是一种广度优先的查找方式,所以首先会在基类A中查找到对象value,然后输出1。

以下是新式类的例子:

# -*- coding:utf-8 -*-
class A(object):
    """
    作为所有类的基类
    """
    value = 1
    
    def __init__(self, ):
        """
        """
        
class B(A):
    """
    D的基类,继承自A
    """
    
    def __init__(self, ):
        """
        """

class C(A):
    """
    D的基类,继承自A
    并且将基类中的变量值修改
    """
    value = 3
    
    def __init__(self, ):
        """
        """
        
class D(B, C):
    """
    """
    
    def __init__(self, ):
        """
        """
        
x = D()
print x.value

对于这个例子输出的结果将是3。

因为基类A继承于object,而所有继承于object的类都将是新式类。对于新式类来说,在类D中调用对象value,它首先查找的依然是类D。如果没有查找到的话,他会依次查找B->C->A。在我看来,它是一种按层查找的原则,会在较低层查找对象,如果没有的话再到较高层查找。所以对于这个例子来说,value在类C中被查找到,所以它的值将会是3。

这种继承方式的查找还是挺有意思的,我本人是比较喜欢新式类的继承方式,因为毕竟如果在继承类中有对于基类中对象的修改,那么这种修改应该是有意义的,而经典类的继承方式就有可能因为基类顺序的问题将这种有意义的修改屏蔽掉,所以还是新式类会比较好一些。而对于python语言的发展来说,python3.0以后所有的类继承方式都将是新式类的继承,也就说所有的类都将是新式类,所以这种继承方式也是我们有必要去掌握的。

linux下乱码的解决

本来是想解决一下FLASH乱码的我问题,但是通过这种方法可以解决绝大多数的在linux系统下产生的乱码问题。其实这个方法就是将默认的字体删除,让linux使用不会产生问题的中文字体。这个问题用一下两条命令就能解决。

sudo cp /etc/fonts/conf.d/49-sansserif.conf /etc/fonts/conf.d/49-sansserif.conf.bak

这一条是进行备份,如果执行第二条命令后并没有解决乱码问题可以通过将文件名去掉.bak来还原。

sudo rm /etc/fonts/conf.d/49-sansserif.conf

这条命令是删除这个字体。

执行完后然后刷新网页,一般都会解决乱码的问题。

PS:不是原创,从google大神中找到的,不过命令下的注释使我写的,希望会对大家有所帮助。这个方法不是仅仅如原文所说只能解决flash乱码的问题,因为改变的不仅仅是flash中的字体,改变的是os的字体。所以经过我的测试对于pdf产生的乱码也能够很好的解决。

ps:很惊奇这个方法的通用性,在刚刚接触linux的时候就是使用这种方法,到了现在依然可以用。

It's so coooooool!!! 交换你的caps-lock和ctrl

在emacs中ctrl确实难按了一些 最近看到一篇文章就是教怎样将caps-lock和ctrl映射交换的,看了一下觉得很有道理就按照他的方法换了。It's so cool!!!

1.windows系统下:

要想在windows中实现这个互换,需要修改注册表。从开始菜单中选择“运行”,输入regedit。在左边的树状视图中,找到: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout 点击 KeyboardLayout 项,使之获得焦点。再从“编辑”菜单中选择新建一个二进制值,命名为 "Scancode Map",它的类型应该显示为 REG_BINARY。 然后选择这个新建的"Scancode Map"值项,用“编辑”菜单中选择修改二进制值,在二进制编辑对话框中,输入下列数据:

0000: 00 00 00 00 00 00 00 00

0008: 03 00 00 00 3A 00 1D 00

0010: 1D 00 3A 00 00 00 00 00

2.linux系统中: 在linux的X-Window中,可以使用xmodmap工具。在你的主目录新建一个名字为.xmodmap的文件,如果已经存在则只需修改。向该文件加入下列内容:

!
! Swap Caps_Lock and Control_L
!
remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L

保存,再向你的 /etc/rc.local 文件加入一行:

xmodmap ~/.xmodmap 2>/dev/null

3.在Mac OS X(Panther或Jaguar)中,你得安装一个修改过的键盘驱动,这说来有些吓人,但是很有效。

这儿有个关于驱动的讨论: http://www.macosxhints.com/article.php?story=20031102032521826 如果你用的不是Mac笔记本,好像有一个XML文件可以编辑来实现,可以参考这儿: http://www.eecs.wsu.edu/%7Eschneidj/mac-os-x-10.3.html#swap

下面的URL有一条关于在其它系统上实现的信息: http://www.manicai.net/comp/swap-caps-ctrl.html

ps:这是我以前博客的一篇文章,已经有点过时了,在linux中修改.xmodmap的方法交换caps lock和ctrl是通用的,不过对于gnome来说现在有着更为简单的方法,gnome中的键盘选项直接就支持交换ctrl键盘的位置。

linux下eclipse的安装和配置

eclipse是我们常用的一个ide环境,虽然我一般是在emacs下写东西,但是有些大型工程或者要和别人协同合作的时候eclipse却是常用的标准,所以有时也会用到eclipse。

eclipse在linux下面的设置很容易,基本上下载下来解压缩后就能用了,但是想要系统“认识”这个软件那么对他进行一些必要的配置还是必须的。

具体步骤如下:

1.首先下载eclipse(废话)

2.将eclipse解压缩到/opt下面

3.在/usr/bin下面创建一个启动脚本

sudo gedit /usr/bin/eclipse

脚本内容如下:

#!/bin/sh
export ECLIPSE_HOME=/opt/eclipse
$ECLIPSE_HOME/eclipse $*

4.让脚本具有执行的权限

sudo chmod +x /usr/bin/eclipse

#到现在为止其实你已经可以在终端中直接输入eclipse运行了,不过有些盆友还是比较喜喜欢用桌面启动器(也就是快捷方式)或者菜单去运行eclipse,所以下面再加上创建启动器和菜单项的方法。不过桌面和面板上启动器是在太简单了,我只说明一下添加菜单启动器的过程。

首先在/usr/share/applications目录里新建一个eclipse.desktop启动器进行编辑。

sudo gedit /usr/share/applications/eclipse.desktop

在文件中添加如下内容:

[Desktop Entry]
Encoding=UTF-8
Name=Eclipse Platform
Comment=Eclipse IDE
Exec=eclipse
Icon=/opt/eclipse/icon.xpm
Terminal=false
StartupNotify=true
Type=Application
Categories=Application;Development;

好了,这样就搞定了,尽情享受eclipse吧!(也有可能是折磨-_-!)

ps:测试环境为ubuntu10.04,eclipse helios