prism

2011-12-31

django-pipeline

一個簡單,好用的 django plugin


https://github.com/cyberdelia/django-pipeline

用途,用來產生,壓縮處理, css ,javascript 或是圖片,也可以自動處理 version (也有支援 git 喔) 可以搭配的工具很多,SAAS,LESS,或是 Coffee Script 都 OK,有沒有開始傻笑了 ;-)


Compressors

YUI Compressor compressor (這個是預設的)

Closure Compiler compressor

UglifyJS compressor

JSMin compressor

CSSTidy compressor

Write your own compressor class

Compilers

Coffee Script compiler

LESS compiler

SASS compiler

Stylus compiler

Write your own compiler class


拜託,要用時,還是看一下文件,及 source code

 文件 http://django-pipeline.readthedocs.org/en/latest/index.html

 EXAMPLE: 我先假設,用的是

Django 1.3.1
settings.py INSTALLED_APPS 有 'django.contrib.staticfiles',把 'pipeline',也加到 INSTALLED_APPS 裡

yuicompressor-2.4.7.jar 我放到 project 資料夾的 pkgs 目錄下面

在 Debian 上面有安裝 openjdk-7-jdk

PIPELINE_JS 的部份,依此類推

settings.py 部份
PROJECT_ROOT = BASE_DIR = os.path.abspath(os.path.dirname(__file__))

INSTALLED_APPS = (
                  'pipeline', # 這個要有,當然還有其他你要的
)

# django-pipeline 
PIPELINE_YUI_BINARY = 'java -jar ' + os.path.join(PROJECT_ROOT, 'pkgs/yuicompressor-2.4.7.jar')
PIPELINE_VERSION = True
PIPELINE_CSS = {
    'main': {
        'source_filenames': (
          'css/style.css', # 後面可以加很多
        ),
        'output_filename': 'css/pipeline_r?.css',
        'extra_context': {
            'media': 'screen,projection',
        },
    },
    # other CSS groups goes here
}

我的 base.html 裡的部份
......
{% load compressed %}
......
.....
{% compressed_css 'main' %}
.....
...
..

覺的不合用,看更多 Django asset-managers
http://djangopackages.com/grids/g/asset-managers/

[政黑]新年希望台灣更好


覺得上一篇,應該 fork 一篇,比較有禮貌一點

新年希望

1. 這個國家不要分公保,勞保,農保,漁保,就一種人就好了,大家都週休二日,退休所得替代率都一樣,孩子上大專以上,學雜費都可以像是公務人員的子女一樣減免

2. 福利政策,不要分天龍國,和外縣市不同 (例如:殘障福利,祝你好孕,等....)

3. 不要在搞什麼奢侈稅,新的把戲,就房屋稅實價課稅,例如:市價兩百萬的房屋,稅率假如是千分之一,應繳房屋稅 2000000 x 0.001 = 2000 元,那 兩億的房子,200000000 x 0.001 = 200000 元,政府這一點作不到,不是劫貧濟富是什麼

4. 網路,可不可以不管誰當選,都可以直追南韓,目前 台灣 37 名 ,南韓第 1 名 http://netindex.com/upload/allcountries/

5. 公務機關,什麼時候可以停止那一種,每年預算花光光的作為

6. ETC 這種吃像這麼噁心,官商相愛的現象,什麼時候停止,擺明違法,當初設計不良,紅外線槓微波,最後說賠錢作的老闆得標後,現在也要換成微波系統了,這不是裝孝為嗎?交通部給什麼寬限期

7. 政府可不可以停止詐騙集團化
   
    政府詐騙集團化的具體作為

     a. 以前,勞保,包含健康保險,另立名目,增加全年健保,保障不加,保費加倍

     b. 原本實施老人年金後,發現財政會透支,所以改成國保,只要你沒有繳錢國家 (勞保等等) 就強制要繳交國民保護費,只要成年,一定繳錢,管你失業,還是生病

     c. 健報一代,不如一代,政客獻金,醫師,藥廠要的一個子都不能少, 自費項目越來越多,繳的保費越來越高

      d. 說一句,國人平均壽命變高,所以退休延長由 60 歲改為 65 歲退休

8 .... 待續


[政黑]執業二十五年律師,踢爆司法黑幕

執業二十五年律師 踢爆司法黑幕 
台灣司法真不是普通的黑,看了,好友的官司,還有,已故很久三舅的勞保官司 

法院裡是恐龍的地盤,不是一般人可以去的,那裡的進步可以說是和社會脫節得很嚴重

說一下,三舅的例子好了,這大概是 7,8 年前的事了(官司通常要打很多年,這樣法官才有事情作,律師也有錢拿)

1. 三舅,先是失業一段時間後,勞保自動失效(我國的勞保,是保有工作的勞工,只要沒了工作, 勞保局會自動把你踢出去,所有的保障都自動消失)

2. 後來三舅找了新工作,一家小公司,幫忙送貨

3. 一次工作中,心肌梗塞,造成促死

4. 請領勞保死亡給付

5. 勞保局,不給付,說是,你已經退保,超過4 個月,還是六個月,就不可領了,新工作的老闆,沒有幫他續保 (哪有人保了二,三十年沒有領退休金,自己退保的)

6. 這一種情形,必須要你以前有心臟病史,才可以給付(就是說,生前要常看病,所有的科都要掛過)

7. 三舅,就這樣,保了二,三十年勞保,一毛錢也沒有拿,平常身體不舒服,也不常看病,都是止痛藥吃一下,就繼續工作,有三個唸大學的孩子要栽培

8. 這一個官司,當然還是勞保局贏 (幹有沒有天理壓)

所以法院只是浪費生命也是剝奪生命的地方真是一點也不為過

新年新希望

1. 這個國家不要分公保,勞保,農保,漁保,就一種人就好了,大家都週休二日,退休所得替代率都一樣,孩子上大專以上,學雜費減免 ( 不然誰要生小孩)

2. 不要再搞甚麼奢侈稅,就房屋稅實價課稅這麼難嗎?( 我外縣市的公寓,房屋稅,繳的比新北市的透天還高,是那招,這一個政府還說暫時不考慮實價課稅,什麼時候報假的價格變對的,現在大家都做兩套帳才正常)

3. 網路,可不可以不管誰當選,都可以直追南韓,目前 台灣 37 名 ,南韓第 1 名 http://netindex.com/upload/allcountries/

4. 哈哈,最後,我的 VPS 經銷服務,快要開張了,希望可以順利

ps: Happy New Year

2011-12-28

It's all Text

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()

2011-12-14

最近流行小而美

此篇算是感恩文 (我知道感恩節過很久了)

Bottle

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 的前輩,可以這樣無私的和大家分享,不求回報,讓想法可以自由的世界的每一個角落激盪出更多的火花,讓我也可以撿拾前輩的一點點牙慧,增加一點點自己的力量,讓日子過得更美好,由衷的感恩

2011-12-13

又當小白了

上一篇,才說,uWSGI 見鬼了

追根究底,就是程式裡沒有鬼,只有 bug

自己的系統裡,有很白目的區塊,用到 from xxx import *

這一行造成了兩的檔案互相參照,複寫了部份模組

所以還一下 uWSGI 清白,黑鍋和小白,就是自己

2011-12-05

見鬼了 uWSGI


非常誇張,裝 uWSGI 遇到鬼打牆的情形,native Debian 可以, XEN VM 下面也可以,就其中一個 OpenVZ 的 Debian 裝不起來,老是跟我說 sys.path 有問題 Desktop Debian testing 和 XEN 裡面的 VM,都沒有問題 啟動的指令用 daemontools 來控制
#!/bin/bash
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()"
PS: 只好先用獨角馬 gunicorn