2011年10月23日 星期日

[Slides] PHP之惡, Flask (Python)之優

滿主觀的, 不過可姒參考

http://zakx.de/phprant-en.pdf

2011年10月20日 星期四

Google earth在Debian squeeze 32bit 中文出不來

Google附的Qt4函式庫的問題,改用系統內建的就好了。

先把Google附的砍掉

Google附的Qt4lib裝在 /opt/google/earth/free/目錄下, 有四個檔:
libQtCore.so.4, libQtGui.so.4, libQtNetwork.so.4, libQtWebKit.so.4
全砍掉, 然後再改 /opt/google/earth/free/googleearth
找到以下這行:
LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ./googleearth-bin “$@”
再之前加上這行
export LD_PRELOAD=/usr/lib/libfreeimage.so.3
就好了。

(註: 要安裝sudo aptitude install libfreeimage3)

via: http://blog.slps.tp.edu.tw/00086/?p=275

2011年10月14日 星期五

[Python] PyPI實在太常連不到了

pip 0.8.1之後:
pip install --use-mirrors $PACKAGE

舊版pip (Debian 6用的是0.7.2)
pip install -i http://d.pypi.python.org/simple $PACKAGE

或是把mirror資料寫在"~/.pip/pip.conf"裡
[global]
index-url = http://d.pypi.python.org/simple


via: http://jacobian.org/writing/when-pypi-goes-down/

2011年10月11日 星期二

showoff.io @ Debian6

照官網的操作裝了showoff-io
$ gem install showoff-io
$ show 3000
會找不到show這個執行檔

$gem contents showoff-io
列出
...
/var/lib/gems/1.8/gems/showoff-io-0.3.1/bin/show # 就是他了

2011年10月6日 星期四

錯誤 "sudo: sorry, you must have a tty to run sudo"

在Ubuntu10還是11用fabric做sudo指令時, 會出現
sudo: sorry, you must have a tty to run sudo
把以下注解掉就可以了(讓sudo可以不用tty, 在背景跑):
Defaults requiretty

但是為什麼Debian6不會有這個問題

2011年10月4日 星期二

Apache ab - benchmarking工具


-c concurrency 同時連線數
-n requests 次數
-t timelimit 測試時間(秒數)
-k HTTP Keep Alive (時間不長的話差別不大)


ex:
ab -c 20 -t 30
http://httpd.apache.org/docs/2.0/programs/ab.html

drupal emacs mode

http://drupal.org/node/59868

PHP Xdebug安裝

PHP好用的debug和profiling工具: Xdebug
$ git clone git://github.com/derickr/xdebug.git
$ cd xdebug
$ phpize
$ ./configure
$ make
$ cp modules/xdebug.so /to/wherever/you/want/it

php.ini加上
zend_extension="/wherever/you/put/it/xdebug.so"
重啟apache2, 如果phpinfo頁有出現Xdebug的字就成功了!

Django的Template的if判斷不能用除數或餘數

我的版面需要ul tag裡有4個li tag,PHP裡常用if i % 4 == 0之類的來判斷,Django裡可以用divisibleby的判斷(回傳True/False),
或是要用可以用cycle來決定輪流出現的tag。

{% if forloop.counter0|divisibleby:4 %}
<ul>
{% endif %}
<li>...<li>
{% if forloop.counter|divisibleby:4 or forloop.last %}
</ul>
{% endif %}

Linux處理硬碟壞軌工具

檢查壞軌


(v: verbose, s:show progress )
badblocks -vs /dev/sdb
加“-n” 測試非破壞性寫入
badblocks -nvs /dev/sdb

預先偵測


ATA 硬碟都有支援 S.M.A.R.T. (Self-Monitoring, Analysis, and Reporting Technology)
安裝smartmontools, 用smartctl來看
smartctl --attributes /dev/sdb
如果以下幾組數字不為0時就要注意了:
Reallocated Sectors Count/Reallocations event count,/Current Pending Sector Count/Uncorrectable Sector Count

備分


dd if=/dev/sdb of=sdb.img
要更安全用dcfldd,會檢杳hash
壞軌無法用dd時就用dd_rescue,可以跳過壞掉的資料

更深入請看: Linux 上處理壞軌硬碟的兩三事

php.ini 安全性設定

PHPサイバーテロの技法―攻撃と防御の実際看來的,推薦設定值。

開發環境



















設定名稱預設值php.inihtaccessscript中修改
expose_phpOn-xx
error_reporting2039error_reporting=E_ALLphp_value error_reporting2047error_reporting(E_ALL);
display_errorsOn---
log_errorsOff---
allow_url_openOnallow_url_fopen=Offxx
register_globalsOff--x
session.use_cookieOn---
session.use_only_cookiesOffsession.use_only_cookies=Onphp_flag session.use_only_cookies Onini_set('session.use_only_cookies', 1);
session.use_trans_sidOff---
session.auto_startOff---



正式環境



















設定名稱預設值php.inihtaccessscript中修改
expose_phpOnexpose_php=Offxx
error_reporting2039---
display_errorsOndisplay_errors=Offphp_flag display_errors Offini_set('display_errors', 0);
log_errorsOfflog_errors=Onphp_flag log_errors Onini_set('log_errors', 1);
allow_url_fopenOnallow_url_fopen=Offxx
register_globalsOff--x
session.use_cookiesOn---
session.use_only_cookiesOffsession.use_only_cookies=Onphp_flag session.use_only_cookies Onini_set('session.use_only_cookies', 1)
session.use_trans_sidOff---
session.auto_startOff---



  • - : 不用改變

  • x : 無法改變

CSV格式

逗號分隔欄位, 換行符號("\n")是下一筆
* 有逗號, 空格, 換行的字串用雙引號包起來: "foo, bar"
* 顯示1個雙引號要用2個雙引號, 如 "12'30"""-->12'30"
* 如要顯示數字前的0, 就要用="007"來表示

IE下載docx會變zip檔

因為apache不認得,
可以改httpd.conf
或.htaccess加上
AddType application/vnd.openxmlformats .docx .pptx .xlsx .odp

Python的dict用某一key排序

有個dict有title和date二個key, 要指定用date來排序:
>>> list = []
>>> list.append({'title':'abc','date':1})
>>> list.append({'title':'def','date':2})
>>> list.append({'title':'ghi','date':0})
>>> print sorted(list, key=lambda x: x['date'])
[{'title': 'ghi', 'date': 0}, {'title': 'abc', 'date': 1}, {'title': 'def', 'date': 2}]
>>> print sorted(list, key=lambda x: x['date'], reverse=True)
[{'title': 'def', 'date': 2}, {'title': 'abc', 'date': 1}, {'title': 'ghi', 'date': 0}]

Emacs設定預設開啟瀏覽器

預設是firefox,在init.el裡加上, 就變Opera了。
; default browser
(setq browse-url-browser-function (quote browse-url-generic))
(setq browse-url-generic-program "opera")

Munin系統監控

使用RRDTool, 設置簡單, port: 4949

apt-get install munin
apt-get install munin munin-node
/etc/init.d/munin-node restart



設定檔: /etc/munin/munin.conf

預設只給localhost連, 外部連會出現403 Forbidden 的錯:
/etc/munin/apache.conf

把Allow from 127.0.0.1 ::1 改成Allow from all
重啟apache就好了

加密碼要設定apache.conf的htpasswd路徑
AuthUserFile /var/www/.htpasswd

產生認證密碼
htpasswd -c /var/www/.htpasswd admin

把Adobe Flash player in Debian6, Opera

從adobe下載的libflashplayer.so放到/usr/lib/opera/plugins

debian安裝php-apc

- aptitude install php5-dev
- aptitude install php-pear
- pecl install APC
有錯, 缺pcre.h
要找出pcre.h是裝那個package才會有的
所以apt-file search -x "/pcre.h$" (找不到apt-file, 再裝apt-file, 然後apt-file update)
apt-file search會列出三個
kannel-dev: /usr/include/kannel/gwlib/pcre.h
libajax6-dev: /usr/include/ajax/pcre.h
libpcre3-dev: /usr/include/pcre.h
應該是libpcre3-dev, 所以裝了他
- 改 /etc/php5/apache2/conf.d/apc.ini (原本沒有, 要新增)
寫入extension=apc.so
- 把/usr/share/php/apc.php複製到自己的public_html
- 重開apache2

scp時出現"PRNG is not seeded lost connection"

在2host的debian 6裡出現的,
還沒研究怎麼發生的, 暫時先改權限解決
sudo chmod 744/dev/urandom

Django quick start


via: http://www.flickr.com/photos/jcroft/432038560/sizes/o/in/photostream/

1. Get Django
https://www.djangoproject.com/download/

2. install
tar xzvf Django-1.3.1.tar.gz
cd Django-1.3.1
sudo python setup.py install

3. verify
>>> import django
>>> print django.get_version()
1.3 # 成功!

Linux console打字發出beep聲

如果只是在X11 Window裡發出聲音
xset b off
就不叫了