在Ubuntu上安裝SublimeLinter + jshint時,nodejs版本要安裝nodejs-legacy版本,
不然Linter會找不到正確路徑。
例如要安裝 jshint 及 csslint:
sudo apt-get install nodejs-legacy
sudo apt-get install npm
sudo npm install -g jshint
sudo npm install -g csslint
Preferences » Package Settings » SublimeLinter » Settings-User 設定 paths:
paths": {
"linux": [
"/usr/local/lib/node_modules/jshint/bin",
"/usr/local/lib/node_modules/csslint/bin",
"/usr/bin/php -l"
],
"osx": [],
"windows": []
}
2015-12-02
2015-10-05
壯筋續骨丹
出處:「醫宗金鑒」的傷科大成。
功效:養肝滋腎,強筋健骨。
主治:骨折骨碎,筋翻筋傷。 祛瘀生新,消腫活絡,接骨續筋。用於治療拳械擊傷,跌仆摔傷,瘀血青腫,疼痛難忍,折骨斷筋,腰腿疼痛,步履艱困。
成份:
當歸60克、川芎30克、白芍30克、熟地120克、杜仲30克、
川斷60克、五加皮60克、骨碎補60克、桂枝30克、
三七30克、黃耆30克、虎骨30克、破故紙60克、菟絲子60克、
黨參60克、 木瓜30克、劉寄奴60克、地鱉蟲90克。
做法:
共研為細末,砂糖水泛丸,每服12克,黃酒引服(白開水亦可)。
其他:
「虎骨」,一般中藥房即使有也留著自己用不會賣給我們,可以用「狗脊」替代。
一台斤價格1,600至2,000,早晚空腹服個15顆。
參考:
http://gogotime.pixnet.net/blog/post/45415485?comment_page=2
功效:養肝滋腎,強筋健骨。
主治:骨折骨碎,筋翻筋傷。 祛瘀生新,消腫活絡,接骨續筋。用於治療拳械擊傷,跌仆摔傷,瘀血青腫,疼痛難忍,折骨斷筋,腰腿疼痛,步履艱困。
成份:
當歸60克、川芎30克、白芍30克、熟地120克、杜仲30克、
川斷60克、五加皮60克、骨碎補60克、桂枝30克、
三七30克、黃耆30克、虎骨30克、破故紙60克、菟絲子60克、
黨參60克、 木瓜30克、劉寄奴60克、地鱉蟲90克。
做法:
共研為細末,砂糖水泛丸,每服12克,黃酒引服(白開水亦可)。
其他:
「虎骨」,一般中藥房即使有也留著自己用不會賣給我們,可以用「狗脊」替代。
一台斤價格1,600至2,000,早晚空腹服個15顆。
參考:
http://gogotime.pixnet.net/blog/post/45415485?comment_page=2
2015-09-30
PHP 的 stack trace
若是要追踨單支php的stack,可用如下做法:
若是要追踨整個php的stack,可能得用gdb,且前提是php在compile時有加入 --enable-debug 選項:
$debug = debug_backtrace(); file_put_contents("/path/to/log.txt", date("Y-m-d H:i:s",time())." file:".$debug[1]['file']." php_thread:".getmypid().", mysql_thread:".mysql_thread_id(self::$Link_ID)."(".self::$Link_ID.")\r\n", FILE_APPEND|LOCK_EX);
若是要追踨整個php的stack,可能得用gdb,且前提是php在compile時有加入 --enable-debug 選項:
$ gdb -p $PHP_PID (gdb) bt # Get a system-level stacktrace, might already give some info (gdb) source /path/to/php-src/.gdbinit # Load some useful macros (gdb) dump_bt executor_globals.current_execute_data # Macro from PHP's .gbinit giving PHP stack trace # If you for whatever reason are using a thread-safe PHP build you have to do this: (gdb) ____executor_globals (gdb) dump_bt $eg.current_execute_data
2015-06-24
youtube id & query string parser
每次看到有人用indexof()、substring()等笨方法去解析字串抓資料,真的看得很痛苦,
請多用正則表示式來解析字串,即簡潔又不易出錯,
畢竟寫程式連基本的正則表示式都不學,而只會用笨方法從字串抓東西,說寫出來的東西有多嚴謹我都不相信。
以下示範二個網頁最常用的parser範例(youtube & query string):
http://jsfiddle.net/24mw91hq/
請多用正則表示式來解析字串,即簡潔又不易出錯,
畢竟寫程式連基本的正則表示式都不學,而只會用笨方法從字串抓東西,說寫出來的東西有多嚴謹我都不相信。
以下示範二個網頁最常用的parser範例(youtube & query string):
http://jsfiddle.net/24mw91hq/
2015-06-04
TABLE PARTITIONS 分區
為了讓LOG TABLE能分區PARTITION,就用了這個指令....
當然也有能自動化新增PARTITION的指令啦,不過我為了保險起見還是用這種手動的:
ref:
http://article.denniswave.com/6342
http://www.codedata.com.tw/database/mysql-performance-tuning
https://mariadb.com/kb/en/mariadb/create-table/#partitions
https://dev.mysql.com/doc/refman/5.1/en/partitioning-subpartitions.html
dynamic partition:
http://stackoverflow.com/questions/13839177/dynamic-mysql-partitioning-based-on-unixtime
http://code.openark.org/blog/mysql/your-magical-range-partitioning-maintenance-query
http://datacharmer.blogspot.co.il/2008/12/partition-helper-improving-usability.html
當然也有能自動化新增PARTITION的指令啦,不過我為了保險起見還是用這種手動的:
ALTER TABLE SMS_LOG PARTITION BY RANGE(yearmonth DIV 100) SUBPARTITION BY HASH(yearmonth MOD 100) ( PARTITION p2014 VALUES LESS THAN (2015) (SUBPARTITION s0a,SUBPARTITION s0b,SUBPARTITION s0c,SUBPARTITION s0d,SUBPARTITION s0e,SUBPARTITION s0f,SUBPARTITION s0g,SUBPARTITION s0h,SUBPARTITION s0i,SUBPARTITION s0j,SUBPARTITION s0k,SUBPARTITION s0l), PARTITION p2015 VALUES LESS THAN (2016) (SUBPARTITION s1a,SUBPARTITION s1b,SUBPARTITION s1c,SUBPARTITION s1d,SUBPARTITION s1e,SUBPARTITION s1f,SUBPARTITION s1g,SUBPARTITION s1h,SUBPARTITION s1i,SUBPARTITION s1j,SUBPARTITION s1k,SUBPARTITION s1l), PARTITION p2016 VALUES LESS THAN (2017) (SUBPARTITION s2a,SUBPARTITION s2b,SUBPARTITION s2c,SUBPARTITION s2d,SUBPARTITION s2e,SUBPARTITION s2f,SUBPARTITION s2g,SUBPARTITION s2h,SUBPARTITION s2i,SUBPARTITION s2j,SUBPARTITION s2k,SUBPARTITION s2l), PARTITION p2017 VALUES LESS THAN (2018) (SUBPARTITION s3a,SUBPARTITION s3b,SUBPARTITION s3c,SUBPARTITION s3d,SUBPARTITION s3e,SUBPARTITION s3f,SUBPARTITION s3g,SUBPARTITION s3h,SUBPARTITION s3i,SUBPARTITION s3j,SUBPARTITION s3k,SUBPARTITION s3l), PARTITION p2018 VALUES LESS THAN (2019) (SUBPARTITION s4a,SUBPARTITION s4b,SUBPARTITION s4c,SUBPARTITION s4d,SUBPARTITION s4e,SUBPARTITION s4f,SUBPARTITION s4g,SUBPARTITION s4h,SUBPARTITION s4i,SUBPARTITION s4j,SUBPARTITION s4k,SUBPARTITION s4l), PARTITION p2019 VALUES LESS THAN (2020) (SUBPARTITION s5a,SUBPARTITION s5b,SUBPARTITION s5c,SUBPARTITION s5d,SUBPARTITION s5e,SUBPARTITION s5f,SUBPARTITION s5g,SUBPARTITION s5h,SUBPARTITION s5i,SUBPARTITION s5j,SUBPARTITION s5k,SUBPARTITION s5l), PARTITION p2020 VALUES LESS THAN (2021) (SUBPARTITION s6a,SUBPARTITION s6b,SUBPARTITION s6c,SUBPARTITION s6d,SUBPARTITION s6e,SUBPARTITION s6f,SUBPARTITION s6g,SUBPARTITION s6h,SUBPARTITION s6i,SUBPARTITION s6j,SUBPARTITION s6k,SUBPARTITION s6l), PARTITION p2021 VALUES LESS THAN (2022) (SUBPARTITION s7a,SUBPARTITION s7b,SUBPARTITION s7c,SUBPARTITION s7d,SUBPARTITION s7e,SUBPARTITION s7f,SUBPARTITION s7g,SUBPARTITION s7h,SUBPARTITION s7i,SUBPARTITION s7j,SUBPARTITION s7k,SUBPARTITION s7l), PARTITION p2022 VALUES LESS THAN (2023) (SUBPARTITION s8a,SUBPARTITION s8b,SUBPARTITION s8c,SUBPARTITION s8d,SUBPARTITION s8e,SUBPARTITION s8f,SUBPARTITION s8g,SUBPARTITION s8h,SUBPARTITION s8i,SUBPARTITION s8j,SUBPARTITION s8k,SUBPARTITION s8l), PARTITION p2023 VALUES LESS THAN (2024) (SUBPARTITION s9a,SUBPARTITION s9b,SUBPARTITION s9c,SUBPARTITION s9d,SUBPARTITION s9e,SUBPARTITION s9f,SUBPARTITION s9g,SUBPARTITION s9h,SUBPARTITION s9i,SUBPARTITION s9j,SUBPARTITION s9k,SUBPARTITION s9l), PARTITION p2024 VALUES LESS THAN (2025) (SUBPARTITION s10a,SUBPARTITION s10b,SUBPARTITION s10c,SUBPARTITION s10d,SUBPARTITION s10e,SUBPARTITION s10f,SUBPARTITION s10g,SUBPARTITION s10h,SUBPARTITION s10i,SUBPARTITION s10j,SUBPARTITION s10k,SUBPARTITION s10l), PARTITION p2025 VALUES LESS THAN (2026) (SUBPARTITION s11a,SUBPARTITION s11b,SUBPARTITION s11c,SUBPARTITION s11d,SUBPARTITION s11e,SUBPARTITION s11f,SUBPARTITION s11g,SUBPARTITION s11h,SUBPARTITION s11i,SUBPARTITION s11j,SUBPARTITION s11k,SUBPARTITION s11l), PARTITION p2026 VALUES LESS THAN (2027) (SUBPARTITION s12a,SUBPARTITION s12b,SUBPARTITION s12c,SUBPARTITION s12d,SUBPARTITION s12e,SUBPARTITION s12f,SUBPARTITION s12g,SUBPARTITION s12h,SUBPARTITION s12i,SUBPARTITION s12j,SUBPARTITION s12k,SUBPARTITION s12l), PARTITION p2027 VALUES LESS THAN (2028) (SUBPARTITION s13a,SUBPARTITION s13b,SUBPARTITION s13c,SUBPARTITION s13d,SUBPARTITION s13e,SUBPARTITION s13f,SUBPARTITION s13g,SUBPARTITION s13h,SUBPARTITION s13i,SUBPARTITION s13j,SUBPARTITION s13k,SUBPARTITION s13l), PARTITION p2028 VALUES LESS THAN (2029) (SUBPARTITION s14a,SUBPARTITION s14b,SUBPARTITION s14c,SUBPARTITION s14d,SUBPARTITION s14e,SUBPARTITION s14f,SUBPARTITION s14g,SUBPARTITION s14h,SUBPARTITION s14i,SUBPARTITION s14j,SUBPARTITION s14k,SUBPARTITION s14l), PARTITION p2029 VALUES LESS THAN (2030) (SUBPARTITION s15a,SUBPARTITION s15b,SUBPARTITION s15c,SUBPARTITION s15d,SUBPARTITION s15e,SUBPARTITION s15f,SUBPARTITION s15g,SUBPARTITION s15h,SUBPARTITION s15i,SUBPARTITION s15j,SUBPARTITION s15k,SUBPARTITION s15l), PARTITION p2030 VALUES LESS THAN (2031) (SUBPARTITION s16a,SUBPARTITION s16b,SUBPARTITION s16c,SUBPARTITION s16d,SUBPARTITION s16e,SUBPARTITION s16f,SUBPARTITION s16g,SUBPARTITION s16h,SUBPARTITION s16i,SUBPARTITION s16j,SUBPARTITION s16k,SUBPARTITION s16l), PARTITION p_MAXVALUE VALUES LESS THAN (MAXVALUE) (SUBPARTITION s17a,SUBPARTITION s17b,SUBPARTITION s17c,SUBPARTITION s17d,SUBPARTITION s17e,SUBPARTITION s17f,SUBPARTITION s17g,SUBPARTITION s17h,SUBPARTITION s17i,SUBPARTITION s17j,SUBPARTITION s17k,SUBPARTITION s17l) );
ref:
http://article.denniswave.com/6342
http://www.codedata.com.tw/database/mysql-performance-tuning
https://mariadb.com/kb/en/mariadb/create-table/#partitions
https://dev.mysql.com/doc/refman/5.1/en/partitioning-subpartitions.html
dynamic partition:
http://stackoverflow.com/questions/13839177/dynamic-mysql-partitioning-based-on-unixtime
http://code.openark.org/blog/mysql/your-magical-range-partitioning-maintenance-query
http://datacharmer.blogspot.co.il/2008/12/partition-helper-improving-usability.html
2015-04-23
APC BE550G-TW UPS 入手
前二天辦公室短暫跳電,CODE打到一半消失...
為了預防慘劇再次發生,自費入手了台APC BE550G-TW UPS放在辦公室。
(本來想買他牌有AVR穩壓的,可惜要嘛價錢較高,不然就是低階的沒有軟體支援...)
科風BNT-500AP/BNT-600AP似乎也不錯,小貴BE550G-TW一些,但有軟體監控(功能較多)跟在線互動(即AVR穩壓),有點小後悔。
這台號稱550va,乘上轉換率0.6來算,大概是330w,夠用了,反正只接主機沒接螢幕。 (低階的轉換率大約是0.6~0.8,高階的可以到0.8以上)
如果是要保持電腦復電後重新開機,記得進電腦BIOS的電源管理,在「Restore on AC Power Loss」(或類似)打開「Power On」,
通常斷電時,UPS的處理步驟是這樣的:
為了預防慘劇再次發生,自費入手了台APC BE550G-TW UPS放在辦公室。
(本來想買他牌有AVR穩壓的,可惜要嘛價錢較高,不然就是低階的沒有軟體支援...)
科風BNT-500AP/BNT-600AP似乎也不錯,小貴BE550G-TW一些,但有軟體監控(功能較多)跟在線互動(即AVR穩壓),有點小後悔。
這台號稱550va,乘上轉換率0.6來算,大概是330w,夠用了,反正只接主機沒接螢幕。 (低階的轉換率大約是0.6~0.8,高階的可以到0.8以上)
如果是要保持電腦復電後重新開機,記得進電腦BIOS的電源管理,在「Restore on AC Power Loss」(或類似)打開「Power On」,
通常斷電時,UPS的處理步驟是這樣的:
2015-03-23
爬iPeen座標的小程式
昨天幫網友寫的一個爬iPeen座標的小程式。
http://goo.gl/R4EeIW
如果用網頁介面跑到一半會中斷,檢查Apache的 http.conf 及 httpd-mpm.conf
http://goo.gl/R4EeIW
如果用網頁介面跑到一半會中斷,檢查Apache的 http.conf 及 httpd-mpm.conf
... Timeout 300000 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 0 ...ThreadsPerChild 350 #default 150 MaxRequestsPerChild 10000 #default 0 ThreadStackSize 8388608 #8MB <--- fmodule="" preg_match=""> ... --->
ini_set('max_execution_time', 0); ini_set('memory_limit', '2G'); @ob_end_flush(); @ob_implicit_flush(); $page = 2; $regexp1 = '/(?:[\s\S]*?)]*>([\s\S]*?)<\/a>(?:[\s\S]*?)<\/h3>/i'; $regexp2 = '/(?:[\s\S]*?)longitude"\s+?content="(.*)"\s?\/?>(?:[\s\S]*?)]+?data-action="up_small_classify"[^>]*?>([\s\S]*?)<\/a>(?:[\s\S]*?)]+?data-action="up_address"[^>]*?>([\s\S]*?)<\/a>/i'; $www = 'http://www.ipeen.com.tw'; $www_page = $www.'/search/taiwan/000/4-7-0-0/?p='; for($i=1;$i<=$page;$i++){ preg_match_all($regexp1, get_html($www_page.$i), $t); foreach($t[1] as $key=>$url){ preg_match($regexp2, get_html($www.$url), $info); echo trim($t[3][$key])."(".$t[2][$key].")\n".trim($info[3])."\n".trim($info[4])."\n".$info[1].", ".$info[2]."\n=================================".PHP_EOL; } } function get_html($url=''){ if(empty($url)) return null; $opts = stream_context_create(['http'=>['method'=>'GET', 'max_redirects'=>200, 'header'=>"User-Agent: 安全衛士360+hao123\r\n"]]); return file_get_contents($url, false, $opts); }
訂閱:
文章 (Atom)