2014年6月30日 星期一

ImportError: No module named gearman

# pip install gearman

Gearman 使用 MySQL 作爲 job queue

* 工作在執行完後會從資料庫刪除


安裝編譯相關套件:
# apt-get build-dep gearman-job-server
# apt-get install gperf libmysqlclient-dev libmysqld-dev

下載 Gearman :
https://launchpad.net/gearmand

$ wget https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz
$ tar zxf gearmand-1.1.12.tar.gz
$ cd gearmand-1.1.12
$ ./configure --prefix=/opt/gearman
   ...
   ...
   ...
   * CPP Flags:                  -fvisibility=hidden
   * LIBS:                    
   * LDFLAGS Flags:           
   * Assertions enabled:        no
   * Debug enabled:             no
   * Warnings as failure:       no
   * Building with libsqlite3   yes
   * Building with libdrizzle   yes
   * Building with libmemcached yes
   * Building with libpq        yes
   * Building with tokyocabinet no
   * Building with libmysql     yes
   * SSL enabled:               no
   * cyassl found:              no
   * openssl found:             yes
   * make -j:                   2
   * VCS checkout:              no
   * sphinx-build:              :
$ make
# make install


新增資料庫:
CREATE DATABASE gearman;
CREATE TABLE gearman_queue ( 
    unique_key VARCHAR(255),
    function_name VARCHAR(255),
    priority INT,
    data LONGBLOB,
    when_to_run BIGINT,
    unique key (unique_key, function_name)
);

 
啓動:
# /opt/gearman/sbin/gearmand --log-file=/var/log/gearmand.log --queue-type=MySQL --mysql-host=127.0.0.1 --mysql-user=gearman --mysql-password=gearman --mysql-db=gearman --mysql-table=gearman_queue --mysql-port=3306 





References :
【CentOS】Gearman のジョブを MySQL に保存する - pospomeのプログラミング日記
生活在別處 : Gearman 安装及常见问题

舊:
Using Persistent Storage with Gearman | LornaJane

2014年6月28日 星期六

SNMP 概念

管理者 Manager (Server)
代理者 Agent (Client)


SNMP Version :
1, 2c, 3
3 : 確保 community 間通訊均爲加密
 
 
SNMP Community :
類似密碼
預設 "public" community 具有 read-only 功能
預設 "private" community 具有 read-write 以及讀取某些限制性數值的功能


管理者以 snmpget, snmpwalk 向代理者要求值
管理者以 snmpset 向代理者傳送值
代理者以 snmptrap 向管理者 snmptrapd 主動傳送值 (如:電池電量低訊息)

2014年6月25日 星期三

dynamic generate select options

$.each(citys, function(index, value) {
        var option = $('




References :
javascript - JQuery create new select option - Stack Overflow

jQuery foreach example

var arr = [ "one", "two", "three", "four", "five" ];
jQuery.each(arr, function(index, value) {
       console.log(this);
       return (this != "three"); // will stop running after "three"
});




References :
5 jQuery.each() Function Examples

HTML select 元件事件

select 有三種事件:click, blur, change

$(function()
    $('#some_id').on('change', function() {
        alert( this.value ); // or $(this).val()
    });
});




References :
jQuery get value of select onChange - Stack Overflow

mysql auto set timestamp on create and update

ALTER TABLE mytable
ADD lastmodified TIMESTAMP 
    DEFAULT CURRENT_TIMESTAMP 
    ON UPDATE CURRENT_TIMESTAMP;
 
 
 
 
References : 
php - How to get ID of the last updated row in MySQL? - Stack Overflow

javascript get object properties

function getAllProperties(obj) {
        var properties = '';
        for (property in obj) {
                properties += '\n' + property;
        }
        return properties;                                                                               
}

console.log( getAllProperties(MyObject) );

2014年6月24日 星期二

OpenLDAP replication

slurpd - 獨立的程式,監控 master ldap 的更動並記錄在 log,然後對 slave 做相同動作 (新版本 slapd 已不包含 slurpd)
 
syncrepl - 介於 ldap 核心與資料庫中間,當對 master 資料庫寫入資料時,同時寫入到 slave

mysql-proxy 0.8.1 測試

# apt-get install mysql-proxy

$ mysql-proxy -V
mysql-proxy 0.8.1
  chassis: mysql-proxy 0.8.1
  glib2: 2.30.2
  libevent: 2.0.21-stable
  LUA: Lua 5.1.4
    package.path: /usr/lib/mysql-proxy/lua/?.lua
    package.cpath: /usr/lib/mysql-proxy/lua/?.so
-- modules
  admin: 0.8.1
  proxy: 0.8.1
$ mkdir mysql-proxy

$ cd mysql-proxy

$ wget https://raw.githubusercontent.com/cwarden/mysql-proxy/master/examples/tutorial-query-time.lua

$ vi mysql-proxy.cnf
[mysql-proxy]                                                                                            
daemon = false
pid-file = /tmp/mysql-proxy.pid
log-file = /tmp/mysql-proxy.log
log-level = debug
admin-username = 1
admin-password = 1
admin-lua-script = /usr/share/mysql-proxy/admin.lua
proxy-address = 0.0.0.0:3307
proxy-backend-addresses = 192.168.24.204:3306
proxy-lua-script = /home/yan/mysql-proxy/tutorial-query-time.lua
$ chmod 660 mysql-proxy.cnf

$ mysql-proxy --defaults-file=mysql-proxy.cnf



References :
mysql-proxy命令参数(二) | 哈巴狗

2014年6月23日 星期一

Python LDAP authentication





References :
Emmerling's Mind: LDAP Login Authentication Using Python LDAP
python-ldap sample code

OpenLDAP in Docker

OpenLDAP :

https://github.com/nickstenning/docker-slapd
# docker run \
-e LDAP_DOMAIN=example.com \
-e LDAP_ROOTPASS=admin \
-d slapd
Login DN:
cn=admin,dc=example,dc=com
Password:
admin

phpLDAPadmin :

https://github.com/osixia/docker-phpLDAPadmin

# docker run -p 80:80 \
-e LDAP_HOST=192.168.1.254 \
-e LDAP_LOGIN_DN=dc=example,dc=com \
-e LDAP_LOGIN_DN=cn=admin,dc=example,dc=com \
-d phpldapadmin

使用 phpLDAPadmin 匯入 ldif
https://raw.githubusercontent.com/projecthydra-labs/hydra-ldap/master/hydra-ldap-example.ldif

fatal error: sasl.h: No such file or directory.

# apt-get install libsasl2-dev

2014年6月20日 星期五

[發想] 智慧型冰箱

2014/06/20

現代飲食情況:
容易浪費食材、吃進較多不營養食品

硬體:

  • 平板電腦
  • 外掛吸架
  • Webcam
  • Microphone


軟體:

  • 界面爲可愛風格 (舒服生活,從用餐環境做起)
  • 以 Webcam 探測有人時,自動喚醒與人互動
  • 以 Microphone 輸入冰進冰箱的食品


功能:
食物保存期限 (避免浪費):
依據存入冰箱的食材,判斷到期期限,在保鮮期限、過期時間前發出通知
健康 (營養均衡):
依據存入冰箱的食材,判斷每天或一周攝取的營養是否均衡
環保 (自動調節):
依據冰箱內的感測器,調整風量、溫度,並在空間過滿時提出告示
食譜 (下廚樂趣):
依據存入冰箱的食材,或多買一樣食材,可提示建議之食譜 (可與線上食譜網站合作)
當季食材 (吃當季最好):
具有提示當季盛產食材的功能,並顯示全國平均售價

服務整合:

  • 作爲在地小農與消費者的中介商,在冰箱提出建議食材後,消費者可依據對服務商的信任,透過網路服務購買食材,也促進小農在地食材的通路

2014年6月10日 星期二

SQLAlchemy return insert id

user = db.session.execute(Users.__table__.insert(data))
db.session.commit()
print user.lastrowid

2014年6月9日 星期一

Python set globals variable in module

import my_module
my_module.do_something_with_my_globals(globals())
print globals()

def do_something_with_my_globals(glob): # glob is simply a dict.
    glob["foo"] = "bar"




References :
ython: How to make a cross-module variable? - Stack Overflow

2014年6月4日 星期三

Linux 設定時區

Ubuntu: dpkg-reconfigure tzdata
Redhat: redhat-config-date
CentOS/Fedora: system-config-date
FreeBSD/Slackware: tzselect




References :
3 Ways to Change the Timezone in Linux - wikiHow

Grub2 config file

No /boot/grub/menu.lst. It has been replaced by /boot/grub/grub.cfg.




References :
Grub2 - Community Help Wiki

2014年6月3日 星期二

Linux list all hidden file

$ ls -ld .??*
?? -->  去掉 . 、..




References :
Bash Shell: Display All Hidden Dot Files In a Directory

nose.selector: INFO: test/test_foo.py is executable; skipped

搜尋測試檔案 
$ nosetests -vv --collect-only test/
nose.config: INFO: Ignoring files matching ['^\\.', '^_', '^setup\\.py$']
nose.selector: INFO: test/test_foo.py is executable; skipped


強制執行測試
$ nosetests --exe -v test

--exe Look for tests in python modules that are executable. Normal behavior is to exclude executable modules, since they may not be import-safe [NOSE_INCLUDE_EXE]




References :
python - Run all Tests in Directory Using Nose - Stack Overflow
Why Django nose test need --exe? - Stack Overflow

make: `test' is up to date.

To force rebuild on these kind of not-file-related targets, you should make them phony as follows:
$ vi Makefile
.PHONY: all test clean




References :
makefile - Why does make think the target is up to date? - Stack Overflow