页面

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中文文档