页面

2013年5月20日星期一

SSH speedup

作为每天 ssh 到服务器的码农,以下 ssh 设置真是实用啊。


# http://blogs.perl.org/users/smylers/2011/08/ssh-productivity-tips.html

# If the network disappears your connection will hang, but if it then re-appears with 3 minutes it will resume working
TCPKeepAlive no
ServerAliveInterval 60
ServerAliveCountMax 3

# avoid not used GSSAPI authentication to faster up connection
GSSAPIAuthentication no

# share ssh session
ControlMaster auto
ControlPath /tmp/ssh_mux_%h_%p_%r

# keep alive for 2h
ControlPersist 2h

# scp on remote
ForwardAgent yes

详见:
http://blogs.perl.org/users/smylers/2011/08/ssh-productivity-tips.html

上个文章 comments 里的一个连接:
http://diogomelo.net/blog/10/ssh-tricks

[Quick-Tip: Reusing OpenSSH connections to the same host](https://revsys.com/writings/quicktips/ssh-faster-connections.html)

2013年5月13日星期一

Emacs ROCKKKKKK!!!

今天找一个方法实现 Emacs 里面的自动保存,发现了 http://emacsredux.com/ 这个专门针对 Emacs 的技巧 Blog,是 Prelude 作者撰写的,找到了 N 个想要已久的功能。 最后在浏览 Prelude 介绍的时候,发现了 Ace Jump 这个让我瞬间内牛满面的插件,键盘党也可以快速跳转光标了,而且不是在 VIM 里!对 VIM 的 f 键早已经羡慕妒忌狠很久了,现在可以了了这心了。

还有 imenu...  爽翻了。

2013年3月7日星期四

Ubuntu 12.10 一点优化Unity的小技巧

Ubuntu 的桌面使用了 Unity,因此可以通过 Win+数字 这样的快捷键来切换窗口。使用过程中会不小心的就按到 Win 键,这个时候弹出 Dash,经常卡住。在网上搜索了一下想禁用这个 Dash,没有什么结果,估计是没有办法的。不过找到一个可以加速这个 Dash Board 显示的技巧,安装 compiz config,设置 unity 的 Dash Blur 为 Static Blur,甚至 No Blur 就好了。原文连接如下:

http://askubuntu.com/questions/137091/how-to-disable-icon-fetching-in-dashboards-search-increasing-performance-idea

2012年12月29日星期六

MySQL 的坑

对MySQL一直没有什么研究,基础知识不甚,今天总算遇到个坑搞了2个小时。


现象:
新增加了一个简单的表,外键指向另外一个表的 id。增加 row 的时候,总是提示
1452, 'Cannot add or update a child row: a foreign key constraint fails

折腾了半天,Google 出来的都不太有用,找不到原因。最后偶然发现了一丝线索。起因是我更换了操作系统,升级了 MySQL 的版本。新版本是 5.5 默认新建的表是 Innodb 引擎的,而我原来的库都是用 MyISAM的,所以出问题了,详细见如下连接:

http://stackoverflow.com/questions/3890205/why-foreign-key-constraint-fails-when-foreign-key-exists

最后,必须说   mysql-workbench  这东西 5.2 版本挺好用啊,没用过 phpmyadmin 的人超级喜欢这个。

2012年11月19日星期一

Ubuntu 上使用 Evernote

由于 Evernote 非常蛋疼的觉得 Linux 用户没啥值得支持的,盈利第一,所以一直以来在 Ubuntu 下都是使用 web 方式,基本上除了偶尔查点笔记外,没有使用的欲望。

之前尝试一个第三方的客户端 Everpad (github),在 Ubuntu 11.10 下我没成功跑起来,放弃。尝试过 wine,感觉有点渣。然后,今天尝试了 nixnote,目前看来还算满意。

安装过程中遇到点问题,记录一下。

 sudo dpkg -i /home/too/Downloads/nixnote-1.4_i386.deb

dpkg: dependency problems prevent configuration of nixnote:
 nixnote depends on libssl0.9.8; however:
  Package libssl0.9.8 is not installed.

其实系统已经是有了libssl 1.0.0版本的。Google 了一下:
Nixnote 1.3 dependency not satisfiable libssl(>=0.9.8)
1.3 dependency not satisfiable libssl(>=0.9.8)

其中第二链接提到了把 deb 包解压后,修改 control 文件里的 dependency,然后重新用  dpkg-deb -b build-directory 来打包。修改成 1.0.0 就可以了。

Ubuntu 12.10 可以通过 ppa 安装。 如下:
http://www.ubuntubuzz.com/2011/10/how-to-install-evernotenixnote-in.html
For ubuntu user, Nixnote also available to install via PPA, do following on terminal :
  • $ sudo add-apt-repository ppa:vincent-c/nevernote
  • $ sudo apt-get update
  • $ sudo apt-get install nixnote

2012年6月21日星期四

nginx 的 uwsgi http page cache 清除

uwsgi 搭配 nginx 使用,在nginx里面配置了缓存的话,后台代码更新后,页面没有在 uwsgi 重新生成,此时需要清除 nginx 的缓存。(不知道是不是重启 nginx 服务也可以)

检查 nginx conf 配置文件,查找 uwsgi_cache_path 或者 proxy cache 的路径,比如是/dev/shm/,那么执行如下命令可以找到对应被cache 的url的文件:
sudo grep -lr 'http://url_some/' /dev/shm/*

执行 rm 删除该文件即可。当然也可以删除cache 的所有文件:
find /path/to/your/cache -type f -delete

nginx 较新的版本有个module 也可以做这个事情, 叫 purge cache 之类的,需要 Google 一下。

2012年5月8日星期二

Django ImageField 上传 jpeg 出错处理

使用 ImageField 之后,上传图片报错

Upload a valid image. The file you uploaded was either not an image or a corrupted image.

查看文档,检查PIL已经装好,MEDIA_ROOT 也设置了,似乎没有什么遗留了。直接Google出错信息,发现是PIL需要JPEG的支持。

Ubuntu 下安装操作如下:
先要反安装 PIL
  • sudo pip uninstall PIL
  • sudo apt-get install libjpeg8.dev
安装回 PIL
  • sudo pip install PIL
一般就能解决问题了。但是由于使用了Virtualenv,需要在安装PIL的时候指出lib的路径,具体操作如下:
  • pip uninstall PIL
  • sudo apt-get install libjpeg8.dev
  • virtualenv ~/Dev/python-virtualenv/project-name
  • workon project-name
  • (project-name) cd ~/Dev/python-virtualenv/project-name/
  • (project-name) ln -s /usr/lib/x86_64-linux-gnu/libz.so ./lib/
  • (project-name) ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so ./lib/
  • (project-name) ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so ./lib/
  • pip install PIL
注意:i386路径为 /usr/lib/i386-linux-gnu/
参考链接:

2012年4月9日星期一

关于Python for循环的一点小贴士

看到 @pycoders 上的一个文章Counting, without counting, in Python: Brandon Rhodes

其实简单一点想,任何时候都用xrange就对了。不要太钻牛角尖的话。

学到了一个简单的测试某段代码运行时间的方法:最后的结果,代表的意思应该是运行了100次,最好的3次平均时间。一开始我还一头雾水,这个for循环不是1000000次的么,怎么只有100次,然后给我3次最好的啥意思啊。后来猜测了一下,然后看了下文档验证了我的猜测。同时,1 ms = 1000 us = 1000,000 ns,具体可以看wiki

$ python -m timeit \
> -s 'from itertools import repeat' \
> 'for x in repeat(None, 1000000): pass'

100 loops, best of 3: 16.8 msec per loop

2011年12月30日星期五

virtualenv 使用笔记

virtualenv 是一个建立虚拟Python环境的工具(详见后面的参考)。使用起来很方便。以下是使用我这两天的使用笔记:
安装:(详细步骤可查阅后面的参考链接[1])
sudo apt-get install python-setuptools python-dev build-essential
sudo easy_install pip
sudo pip install virtualenv
第一步是为了安装easy_install, 然后通过easy_install 安装pip(一个类似easy_install的Python包安装工具,配合virtualenv使用效果好)。然后通过pip安装virtualenv
使用:
安装好后直接执行
virtualenv env_dir
source env_dir/bin/activate
就完成环境目录建立,并激活该环境了。最新的1.7版本默认是不使用系统原有的包(等于 --no-site-packages)。
激活环境后,安装的包都会限制在这个环境里(应该就是env_dir目录里),执行deactive 会离开这个环境。
比如安装Yolk (一个列出Python包信息的工具):
如果激活了环境的话,直接执行
pip install yolk
没激活可以用 pip 的 -E 安装包到指定环境
pip install -E env_dir yolk
执行  yolk -l  将可以列出环境下安装的所有包。
移除环境直接删除该目录应该就可以了。
Tips:
推荐安装virtualenvwrapper工具,可以快捷的建立环境和转换环境(还有其他功能),具体见参考[2]
sudo pip install virtualenvwrapper
指定pip的缓存目录,不用每次安装包都去下载:
.bashrc 里加上 PIP_DOWNLOAD_CACHE 环境变量,如
export PIP_DOWNLOAD_CACHE=~/.pip/download_cache

对于 sudo,cache 的 env 设置需要 sudo  visudo, 增加如下
Defaults        env_keep += "PIP_DOWNLOAD_CACHE"
可以 man sudoers 查看具体帮助。


问题:
  1. 使用过程中,遇到了一个问题,新建的环境总是使用了系统原有的包,加上 --no-site-packages 也不行。换个机器又没问题。
    Update: 似乎是因为我没有在新的环境中安装yolk的原因,所以查看包的时候调用到的是系统原有的yolk。
  2. e... 能建个Python 3 虚拟环境么? 似乎不需要,直接安装Python 3就可以并存。
参考:
virtualenv是Python开发常用的工具之一,它可以帮助开发者建立一个独立的虚拟的环境,开发者可以将自己需要用的python package装入到这个虚拟环境中,这样就和系统全局的其他package隔离了,不会影响系统的package布局,要使用这些安装在虚拟环境中的模块,只需要activate进行该环境就OK了,不activate的话就不能使用那些在虚拟环境中的模块,就像从没安装过一样
via Python开发工具virtualenv的使用 - [Python]
[1] Notes on using pip and virtualenv with Django « SaltyCrane Blog
[2] Virtualenv and pip Basics | Jontourage
[3] virtualenv中文文档

2007年5月28日星期一

关于shell的历史命令使用

看了 懒惰的程序员: bash history 谈论的bash历史命令使用和一些环境设置,我也说一些我的心得。我主要是使用AIX 上面的ksh多一点,然后在学习AIX 的时候,很多文章推荐环境变量里 set -o vi,就是打开使用vi作为命令行的编辑器。这个大部分shell应该都支持的。

打开这个功能后,history里面的命令都会置于一个随时可以打开的文件一样。在命令提示符下按下Esc健后就进入VI 模式了。打 / 就可以进行搜索,hjkl控制上下左右,寻找到你使用的命令后,使用vi的常用编辑命令进行编辑,非常方便快捷,一切如同在VI里面一样。

我个人觉得很实用,不知道大家有没有用过,或者有其他更便捷的方法。另外我发现这个设置的一个不便之处就是,在bash里会在使用箭头健的时候会有点小问题,我记不起来是怎么了,反正觉得和箭头键有点小冲突的样子。不过如果使用了vi的话,hjkl就可以代替箭头了。

还有在AIX的使用学习中,学会另外一个快速重复命令的设置,一个别名 alias r='fc -e -' ,在AIX 的 ksh 是默认有这个 r 命令的。它的作用就是,重复最后一次输入的命令。后面加参数的话,就重复以参数开头的最近一条命令。从这里看出这个命令还是一定风险的。下面是举例,从例子里就可以看出这个命令的好处。
比如,你在shell里分别输入了
#ls
#ls -al
#df
三个命令(一次一个,这里省略了结果输出)。
此时在#下面打r,将重复 df这个命令。打r ls(r后面一个空格),重复的就是ls -al这个命令。没有任何确认和提示,直接执行。所以很方便,也很有风险。特别是重复rm这样的命令的时候,万一的在/ 目录下重复了rm -rf *,那只有哭了....

2005年11月29日星期二

典型的IBM小型机系统项目安装记录

最近在进行一个项目,是组建一个数据库服务器。

硬件部分:用到的机器是2台IBM的p5 550服务器和DS4300(FAStT600),还有2个光纤交换机H08,是非常简单和实用的一个搭配。 通过一个HMC 7310 C04管理,没有配显卡和显示器。因为550上面只有5个槽位,2个FC卡,2个网卡,1个8口异步适配器(作串口心跳必需),插满了就只有把显卡给省略掉了。

软件部分:550上面安装的是AIX5.2操作系统,HACMP5.2,ORACLE 9i。

整个过程大概安排是这样
  1. 服务器和机柜的固定和安放,
  2. AIX的安装,
  3. HACMP的配置,
  4. ORACLE的安装,建库,运行。
其中比较麻烦的是服务器上架后HMC竟然是坏的,打开电源后一点反映都没有,保修IBM,需要一周才能发来新的HMC,只有通过串口来进行操作系统的安装。