https://addons.mozilla.org/zh-tw/firefox/addon/its-all-text/
這一個是一直愛用的 firefox 元件 也是目前在 Chrome 上面,我一直找不到的替代品
最近流行用靜態網頁的方式,來 host 部落格網站,要得就是簡單,還有就是,可以自由自在的編輯
不需要在網頁的 text area 裡編輯,這一 firefox 外掛就是解決這一個問題用的,可以用你超高效的 VIM 打開你的 textarea ,自由自在的編輯 也是目前偶爾回來用用 firefox 的原因之一 :-)
uWSGI –vhost
用 uWSGI 來啟動 wsgi 的服務,除了傳統的方式,還可以一次管理多個 wsgi 的服務
還有另外一種作法 Emperor 可以對特定資料夾裡所有的設定檔,個別管理,更適合作 PASS 服務的人, http://projects.unbit.it/uwsgi/wiki/Emperor
我的需求沒有這麼大,只是一起跑多個 wsgi ,省一些記憶體,就可以了
用 daemontools 來啟動,這裡面的 buffer-size 有要吃外部的 post back 要加大,不然,預設的實在是太小,最重要的是預設值 PayPal
IPN callback 吃不下,收到錢還不知道,夠重要了吧
#!/bin/bash
# default buffer-size is 4k 4096
exec setuidgid yourname uwsgi –buffer-size 32768 -s 127.0.0.1:3031 -p 3 -M –vhost
以在 Debian 上面的 nginx 裡面的設定範例
server {
listen 80;
server_name yourcoolsite.com;
location /static {
alias /yourstatic/folder/;
}
location / {
include uwsgi_params;
#uwsgi_pass unix:/tmp/digez.sock;
uwsgi_param UWSGI_PYTHONPATH /home/yourname;
uwsgi_param UWSGI_CHDIR /home/yourname/yourcoolsite;
uwsgi_param UWSGI_ENV DJANGO_SETTINGS_MODULE=yourcoolsite.settings;
uwsgi_param UWSGI_MODULE application;
uwsgi_pass 127.0.0.1:3031;
}
放在 /home/yourname/yourcoolsite/ 的 wsgi application.py script 範例
sys.path.append 那兩行,在 Django 1.4 以下,也就是 1.3.1 (含) 以下,都要加,比較不會有路徑的問題
Django 目前的 Dev(或是 trunk 或是 github 上面 master) 開發版,已經改變 project 的路徑,所以不用再加了
# coding: utf-8
import sys
import os
sys.path.append(os.path.abspath(os.path.dirname(file)))
sys.path.append(’..’)
os.environ[‘DJANGO_SETTINGS_MODULE’] = ‘settings’
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
最近流行小而美
此篇算是感恩文 (我知道感恩節過很久了)
Bottle
現在時代不同,講求的是敏捷開發,一個人,當多個用,產生多個 thread 在不同專案,共用同一個大腦,開發人員進步的很快,工具也相當的進步,對函式庫的了解熟悉後,進行拆解
依照專案類型的不同,合併成最佳的組合,感覺,現在寫軟體,花一大堆的時間,看別人的函式庫,或是原始碼,要越高的彈性,及效能,就必須由越底層來切入
想想懶惰真是進步的原動力,這些工具,都是為了解決新問題與挑戰,想想身處在這個時代還蠻幸福的,有這麼多的東西可以玩
真不敢想,再過 10 年以後,軟體開發的進步,不知道可以到達什麼樣的境界,現在不管是 WEB 或是 Mobile 的應用都有長足的進步,想想10 年前的手機,在看看現在手裡的 iPhone 或是 Andriod 手機的運算能力,不可同日而語
自己比較熟的 Web 應用開發
CSS 工具有 SAAS 不過我喜歡 LESS
microjs 的一大堆 javascript 工具,還是自己來包 javascript 的工具
ender.js,還是用 coffee script 當成 Ruby 和 Python 合體來快速開發,我自己是只能算是 javascript 的幼幼班學生,所以只能用些基礎的
常用的 Web Framework,順便附一下,benchmark ,我知道,這一點都不科學,也不切實際,算是一個紀錄
硬體,都是同一台機器 Intel(R) Celeron(R) CPU E3400 @ 2.60GHz (真可憐用 Celeron), JVM 有暖身了
Node v0.6.1 (我知道他不是 framework,只是可以解決一樣的問題)# Hello World benchmark
# all python framework under nginx 1.1.8 uwsgi 0.9.9.3, python2.6.7
# playframework under production mode java -version Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
# node -version v0.6.1
# ab -c 100 -n 1000 TO_TEST_URL
# bottle 0.11.dev
uwsgi –socket 127.0.0.1:3030 –module terry –processes 4
# ~1550 Requests/second
# flask 0.8
uwsgi –socket 127.0.0.1:3030 –module fsk –callable app –processes 4
# OR
uwsgi –socket 127.0.0.1:3030 –module fsk:app –processes 4
# ~1100 Requests/second
# django 1.3.1
# return HttpResponse(“Hello World”)
uwsgi –socket 127.0.0.1:3030 –pp .. –env DJANGO_SETTINGS_MODULE=hello.settings -w “django.core.handlers.wsgi:WSGIHandler()” –processes 4
# ~910 Requests/second
# playframework 1.2.4
# renderText(“Hello World”)
# ~1700 Requests/second
# node 0.6.1
#var http = require(‘http’);
#http.createServer(function (req, res) {
# res.writeHead(200, {‘Content-Type’: ’text/plain’});
# res.end(‘Hello World’);
#}).listen(1337, “127.0.0.1”);
#console.log(‘Server running at http://127.0.0.1:1337/’);
#
# ~2500 Requests/second
#
連結(順序無關喜好,不同的地方,不同的規劃,自己看著辦,Hello World 只是起點,大家的終點不一樣)
Bottle
Flask
Django
PlayFramework
Node.js
PS: 最重要是,由衷的感謝這麼多 Open Source 的前輩,可以這樣無私的和大家分享,不求回報,讓想法可以自由的世界的每一個角落激盪出更多的火花,讓我也可以撿拾前輩的一點點牙慧,增加一點點自己的力量,讓日子過得更美好,由衷的感恩
又當小白了
上一篇,才說,uWSGI 見鬼了
追根究底,就是程式裡沒有鬼,只有 bug
自己的系統裡,有很白目的區塊,用到 from xxx import *
這一行造成了兩的檔案互相參照,複寫了部份模組
所以還一下 uWSGI 清白,黑鍋和小白,就是自己
見鬼了 uWSGI
非常誇張,裝 uWSGI 遇到鬼打牆的情形,native Debian 可以, XEN VM 下面也可以,就其中一個 OpenVZ 的 Debian 裝不起來,老是跟我說 sys.path 有問題 Desktop Debian testing 和 XEN 裡面的 VM,都沒有問題 啟動的指令用 daemontools 來控制
#!/bin/bashPS: 只好先用獨角馬 gunicorn
cd /home/terry/webapp
exec setuidgid terry uwsgi -s 127.0.0.1:3031 -p 2 –pp .. –env DJANGO_SETTINGS_MODULE=webapp.settings -w “django.core.handlers.wsgi:WSGIHandler()"
城鄉差距
10 月底時到台南參加二表哥的婚禮,看到活動廣場的公廁
真是有個性,不知道,這樣的公廁在台北市,要花多少錢來整理
一石四鳥 at playframework
最近有專案,用 Java 的函式庫,及工具,偶然機會下發現, Play FrameWork 還蠻受歡迎的,所以不免當個好奇寶寶,邊看文件,及 source code ,試作一些東西,並且評估,專案進行的可能性
還蠻歡樂,真的還蠻好玩的,簡單,清晰,讓我對 Java 刮目相看,以前,看看同事的 xml 設定檔,我就昏了,這個工具,還包的蠻乾淨的,試了一下,一個簡單的 Application 居然 Java source code 用這麼少 (害我以為這一定是假的 Java framework)
話說,一石四鳥是為什麼呢? 寫程式,往往會為了快,沒有好好的由底層的角度看自己的成果,Play 可以用 Java ( OO programming )開發,也可以用 Scala (體驗 functional programming ),更可以由底層的 source code 學學,別人 Java 及 Scala 的技巧
A web app in 10 minutes using Play framework from zenexity on Vimeo.
Debian 下的中文輸入
桌機用 Debian testing 好些年了,一直都沒有什麼問題,最近一些 GTK3 , gnome-terminal 3.0.1 的更新, scim 掛了,一直都是把頭放到沙裡的方式面對他,把 gnome-terminal 綁在 2.30 ,今天想說來試試看,有沒有其他的輸入法,可以在 GTK3 下面用,還真的沒有好用的中文輸入法耶,ibus 不太會用,搞不懂,為什麼我新開一個 tab 他就自動切成中文輸入模式,scim 只能在舊的 gnome-terminal 裡用,gcin 看不太出來有維護的樣子,真要深深地吸一口氣,都已經 2011 年了,怎麼這麼基礎的東西,在 Linux 上面還是這樣,看來,這種吃力不討好的東西,又沒有實質商業利益的東西,都沒有人要碰,感嘆壓
Customize Django Admin actions
雖然,大大說這是一個 Design decision
也說行為不會改變
https://code.djangoproject.com/ticket/10768
http://stackoverflow.com/questions/4500924/django-admin-action-without-selecting-objects
有些時候,想簡單的整合在一起,還是要找一些洞來繞
https://github.com/django/django/blob/master/django/contrib/admin/options.py#L856
純筆記
http://ftp.tw.debian.org/ 不穩定
一直都是用這一個 mirror 站, http://ftp.tw.debian.org/ 偶爾連不上
加油,這可是掛了人家的名號