星期六, 9月 03, 2016

[書]7個習慣教出優秀的孩子

與成功有約:高效能人士的七個習慣
  • 習慣一:主動積極
  • 習慣二:以終為始
    先設定目標、做好計畫。
  • 習慣三:要事第一
  • 習慣四:雙贏思維
  • 習慣五:知彼解已
  • 習慣六:統合綜效
    看重別人的長處,並努力向他們學習。團隊合作可以創造出比個人努力更婕的結果
  • 習慣七:不斷更新

七個習慣如何養成

七個習慣父母、老師、企業要什麼
習慣一至三(獨立)
主動積極
以終為始
要事第一
  • 目標設定
  • 規劃
  • 時間管理
  • 組織
主動自發
責任感
願景
誠信
習慣四至六(互賴)
雙贏思維
知彼解已
統合綜效
  • 衝突管理
  • 聆聽(同理心)
  • 表達能力
  • 問題解決
  • 心胸開放
  • 團隊合作
  • 尊重
  • 道德/進退應對
  • 誠實
  • 重視多元
習慣七(全人)
不斷更新
(照顧自己的身、腦、心、靈)
  • 身體強健
  • 社交能力
  • 腦力
  • 有趣

  • 情緒穩定度
  • 貢獻/意義
  • 學習動機






習慣低效能文化高效能文化How
1被動消極:喜歡找藉口,把錯誤歸咎於別人或制度,情緒不、習慣將注意力放在自己控制圈之外的事、等待別人來告訴自己該做什麼。主動積極:主動任事、勇於承擔、掌控自己的情緒、專注於自己可以控制的事情、不等別人開口就主動把事情做好。
共享式領導:每個人都是領導人,領導責任


2茫無目標:同仁缺乏願景與使命、沒有共同的目標,計畫隨時改變。以終為始:同仁共同追求有意義的願景、擁有明確的企業性目標及策略,每個人也有清晰的個人目標。
設定個人目標/部門目標,讓同仁自己學習定目標

3回應所有緊急事務:同仁持續回應各種危機。沒有時間規劃或培養人才、缺乏紀律。要事第一:專注於重要的事、勇於對於無緊要的事情說「不」。大家撥出時間做計畫、花時間在準備及預防的工作。排優先
4贏輸思維:同仁只想「我贏你輸」或乾脆雙輸,互信不足。大家爭搶資源、因為擔心別人超越自己而不分享經驗與做法。雙贏思維:同仁擁有雙贏思維、值得信賴,隨時在「勇氣」與「體諒」之間尋求平衡、想方設法讓同仁都受益。企業鼓勵合作及經驗分享。
5先求解己:大家不肯彼此聆聽,也覺得自己不被了解。同仁無視的感受,也不敢分享自己的感受及意見先求知彼:在提出解決方案之前,會先仔細了解問題。大家充分發揮同理心、不隨意評斷別人、可以自在表達自己的想法
6單打獨鬥:大家自掃門前雪或拉幫結派 ,訒為自己的想法永遠比別人好、不喜歡跟想法不同的人在一起。統合綜效:同事之間努力發掘彼此的想法、珍視多元思維、謙虛,大家喜歡團隊合作、創意無限、不怕跳出框架思考。把注意力放在別人的優點身上,就會發現對方的缺點似乎不見了
7保持駑鈍:同仁的專業技能過時,生活不平衡、忽視人際關係,而且有時彼此根本不熟悉、生活缺乏意義。不斷更新:大家一起不斷精進、努力與時俱進、活力充沛、享受家庭般的感覺。士氣高昂。

每個人都是天才。但如果你根據爬樹的能力來評斷一條魚,它將終其一生認定自己是個笨蛋。 愛因斯坦

變革行動為何失敗

關鍵在於找到「過少」或「過多」的平衡點

過少過多
缺乏非變不可的理由及目的目的、目標脫離現實
利害關係人不願改變變動太頻繁、花招太多
缺少強而有力的高層太依賴強勢的高層
請人上車的時間及功夫做得不足浪費太多時間於求得全體共識
缺乏策略策略過度瑣碎、賦權不足
步調太慢 - 熱情及動能流失推行步調太快,大家吃不消
合作不足 - 各唱各的調太強調合作,壓抑個人動能
對成果未給予足夠的認可及獎勵太早宣揚成果、誇張成效
當責及回饋不足追蹤考核過多,流於細節管理






星期四, 8月 18, 2016

Install PHP ImageMagick

下載
  • http://www.imagemagick.org/download/ //ex. ImageMagick-6.9.1-1.tar.gz 
  • http://pecl.php.net/get/imagick-3.1.2.tgz
  • http://prdownloads.sourceforge.net/optipng/optipng-0.7.5.tar.gz?download
  • http://www.lcdf.org/gifsicle/gifsicle-1.87.tar.gz
  • http://jpegclub.org/jpegcrop.tar.gz
  1. 將檔案放至/tmp/安裝
    /tmp/
  2. 安裝optipng-0.7.5.tar.gz(3th party)
    tar -zxvf optipng-0.7.5.tar.gz
    cd optipng-0.7.5
    ./configure
    make && make install
  3. 安裝gifsicle-1.87.tar.gz(3th party)
    tar -zxvf gifsicle-1.87.tar.gz
    cd gifsicle-1.87
    ./configure
    make && make install
  4. 安裝jpegcrop.tar.gz(若第6點imagick安裝失敗才需要安裝此步驟)
    tar -zxvf jpegcrop.tar.gz
    cd jpegcrop/jpeg-9a
    ./configure
    make libdir=/usr/lib64
    make libdir=/usr/lib64 install
  5. yum安裝相關lib
    yum install libjpeg libjpeg-devel libpng libpng-devel libtiff libtiff-devel
  6. 安裝ImageMagick-6.9.1- 1.tar.gz
    tar -zxvf ImageMagick-6.9.1- 1.tar.gz
    cd ImageMagick-6.9.1- 1
    ./configure --prefix=/usr/local/imagemagick --with-bzlib=yes --with-fontconfig=yes --with-freetype=yes --with-gslib=yes --with-gvc=yes --with-jpeg=yes --with-jp2=yes --with-png=yes --with-tiff=yes
    若出現「undefined reference to `jpeg_default_qtables'」
    表示第4步沒裝好,再重安裝試試

    make && make install
  7. 安裝imagick-3.1.2.tgz
    pecl install imagick-3.1.2.tgz

    安裝過程中請輸入:/usr/local/imagemagick
  8. 安裝完成後檢查/usr/lib64/php/modules是否有imagick.so
    ls /usr/lib64/php/modules/ | grep imagick.so
  9. 新增/etc/php.d/imagick.ini,內容如下:
    ; Enable imagick extension module

    extension=imagick.so
    確認extension=imagick.so是否有於/etc/php.ini定義過,若有請移除。
  10. 重新啟動
    service httpd restart
  11. 確認JPG, JPEG, PNG, PNG00, PNG24, PNG32, PNG48, PNG64,PNG8格式是否存在
    php -i | grep "ImageMagick supported formats"
    php -m | grep imagick
Thanks for the hard work~  Demo


星期四, 6月 02, 2016

[Coding Style] Train Wrecks

啥系Train Wrecks
字面上來看就是”火車事故” 或 “火車殘骸”
Train Wrecks

這裡是用來比喻以下的程式碥
滿常看到程式寫成這樣
這樣的程式很難理解,因為有4個objects需理解(ctxt+3個getXxx)
而這裡有三層,短短一行就得讀很久

那該怎麼寫呢

1.Split
閱讀者可以直接看到Class Type會比較容易閱讀些
不過也不是很好

2.寫成屬性呢
比function好一些,畢竟function還有logic,而property就單純些
不過會expose internal structure
所以也不是很建議

3.Hybrids
省略…看標題應該就懂了…

4.Hiding Structure
最好的方式,就是不要讓人想,所以細節直接包起來最快
直接在ctxt寫個function,不用看細節(這招真好,不虧是Uncle Bob)
p.s. 這裡小小的跳過一段,程式最終的用意是要取file path,再寫file,所以直接回給OutputStream


總結
過去就一直覺得Train Wrecks的寫法很難閱讀
幸好被大師指正,有理由可以不這樣寫了

Reference
唔... 我忘了...

星期四, 4月 14, 2016

第一次 的引導經驗

預先準備


  • 題目:開發流程自省會議
  • 目標:讓不同開發Team瞭解彼此的開發流程
  • 設定:每個人都有發言,對話有堆壘
  • ORID的問題內容
    • O
      • 開發過程有有什麼會議
      • 參與的角色
      • 會議時間
      • 有什麼產出
      • 會議用途、目標
    • R
      • 對於各種會議的感受
    • I
      • 為何感到XX,能具體說明嗎
      • 遭遇到什麼問題
      • 有什麼方法可以克服
    • D
      • 下次發生,會有什麼做法

成果


  • 大家有聽到不同的聲音
  • 對話也有堆疊,感覺不錯

好的地方


  • 連貫性的題目
  • 原本以為容易回答,反造成大家會等待說出該項目的成員持續回答後續問題
  • O的題目是要讓大家開口,當下有發現,趕緊換問法"有誰能說出更多xxx"
  • 讓每個人發言
  • 有1,2位也許因主管在而沒開口,除了直接指定外,最後請每個人分享心得,算有讓對方願意開口說
  • 改掉主持人式風格
    • 儘量以"大家覺得","誰能夠說明"或"還有人要補充",取代指名

改善


  • 聚焦與發散
  • 原寫下幾個提出的會議想聚焦,卻反而讓大家圍繞到白板上的題目
  • 也許是題目本身就太大

星期六, 3月 26, 2016

JavaScript Convention

JavaScript不應該四散在html裡
至少應寫成獨立的js

  1. html較小,能較快的呈現
  2. 雖然需另一個request取js,不過該js可被cache


三種類型的js檔
1. 3rd-party js
a. jQuery
2. Component.js
a. Untity.js
b. 自行開發
3. Local.js

原則上禁止寫js在html裡,不過某些例外還是方便簡單
1.寫在html tag裡比較方便

1. Close Window


2. Back to Previous Page


2.local.js 只有一小段
如果只有幾行… 就算了啦… ( 20行內)

Reference
Top 10 JavaScript Snippets for Common Tasks

不要挑最便宜的產品,要挑品質好一點的產品


購買東西時,通常會拿最便宜的就好,例如:捲筒廁紙
原本想說這東西不就拿來擦屁屁的,哪會有什麼差
本來沒注意,但有次去高檔餐廳上廁所
隨意撕就延著切線完美的撕下
但家裡的,每次撕都會殘留下一小段沒撕完整
這才發現怎麼差這麼多

「最低價」導向會造成惡性循環

挑最便宜的產品等於鼓勵廠商追求低成本
當然成本能低是好事,好一點廠商自我改善,降低營運成本,讓售價可以比市面更便宜
但就會有廠商會偷工減料,或是用差的原物料
更沒良心的就是用傷身的手法使成本更低(用化學藥劑等)

有良心的廠商成本比別人高,沒有獲利而倒閉
最後留下一群黑心廠商,繼續拚低價,更嘗試更可怕的手法

你們亞洲人命不值錢

上次聽在汽車製造業的朋友提到汽車安全係數問題
板金要厚,安全係數才會高,但相對會耗油
他們實在做不出安全係數高,又不耗油的汽車

因此找來日本某汽車 大廠的顧問,詢問究竟如何打造安全係數高又省油的車
顧問回答:「板金薄一點,就省油啦,安全係數低沒關係,反正你們亞洲人命不值錢」
朋友當下聽到有點生氣,怎麼這麼說話,但顧問繼續說:
「這是你們自己選擇的,你們只在意耗油,不在乎安全」

我是不知道朋友的反應,但自己是滿汗顏
因為我也會挑省油的,而這正是我們逼廠商要走的方向
是我們自己選擇的...

這東西太便宜了,是不是有問題呀...

公司附近有A, B兩間小吃店,兩間都有相同的一道湯-「蕃茄蔬菜湯」
A的價格較貴,料較少,湯頭也淡,且沒冷氣
而B的價格較便宜,料也多,且湯頭也好喝,還有冷氣!
請問你會挑哪一間的湯?

當然是B呀,CP較對高,而且有冷氣
但... 反過來想想... B的材料是不是有問題呀
那有每樣好的呀...

後來A沒營業了,雖然不知道跟生意有沒有關係
但總覺得怪怪的,我也不太敢跟B買湯喝

「品質」導向才能形成正向循環

最近有體會到,挑商品應注意「品質」
用品質好一點,是為了讓好的廠商留在市面上
這裡是說挑品質好一點,不是挑貴的
也許品質好一點會貴一些,但重點是讓好的廠商可以存活下來
而且這會是一個好的正向循環




星期日, 3月 20, 2016

JavaScript Convention - 全域變數篇

為Application建立一個全域物件
所有變數、函數都放置於底下
/* 最上層進入點 */
//全域物件
var APP = {};
 
 
//模組物件容器
APP.modules = {};
 
/* 各模組進入點 */
//ex. 商品詳細頁
APP.modules.productDetail = {};


加上防禦性
/* 最上層進入點 */
//全域物件
var APP = {};
 
//模組物件容器
APP.modules = {};
 
/* 各模組進入點 */
//ex. 商品詳細頁
var APP = APP || {};
APP.modules.productDetail = {};

證人初體驗

最近因朋友遇到些問題,被傳去當證人
雖然覺得照實回答即可,不過過程中對方律師會挖洞給你
造成自己前後回答的矛盾,我方的律師就說那故意設定的
事後想想真有感覺是中對方的圈套

寫一篇當心得,也好提醒自己要改進的地方

心得一:別緊張,放輕鬆
一緊張腦子一片空白,自己都不知道自己在說什麼

心得二:事前準備
事情經過如何,先想過,回答就很順口

心得三:不用加油添醋
有時為了強調會加點東西,但反而越講越不清楚,更造成自己前後矛盾
這次就是中這個計,對我方有利的點,就說了幾個,對方律師就刻意說"只"有這樣而已
很自然地多說了幾點,說出了對方期望我跳進去的洞,就提出證據說並沒有這一點

事實是什麼就是什麼,不用加油添醋

最後還是要再強調一次 --- 別緊張,放輕鬆!!!
事後再看對方提的證據,根本就跟我說的沒關係
是自己緊張到壓力大,就自亂陣腳了

在很多有衝突會議上也是,有時被嗆了幾句
壓力大到眼前一片黑,什麼東西也想不到
但事後回想到好方法回擊,但已經晚了幾個小時

技巧
最近看一本書「邏輯贏話術」學了幾個不錯的技巧
辯論前,有以下正面的想法(依情境不同),就能有效積極面對

  • 辯論
    • 我是來練習改進我的辯論技巧
    • 我會達成這一切
    • 不入虎穴、焉得虎子
    • 放棄奮鬥就等於失敗
  • 演溝(面對大眾)
    • 我要表現出自己最好的實力
    • 我很棒
    • 我很懷疑,這些聽眾是否真能聽得我的報告




星期一, 12月 21, 2015

Java Web Services and Security 課堂筆記



  • 過去有PRC, RMI, COMBO,不過都過時了
  • Base64會做Binary大1/3倍,300KB=>400KB
  • XML定義
    • Well-Formed XML
      • 有PI
      • 唯一root
      • 對應的tag
      • 大小寫有分
    • Validated XML(Valid XML)
      • DTD
      • XML Schema
  • 歷史
    • XML已式微,但有其功能
      • 交換資料可驗證
        • ex, 潤年 2015-02-29(不需AP判斷)
    • SOAP也式微,但
      • 電子簽章等
      • 自己寫也可以... 所以有點雞肋
  • 名詞
    • AP Server
      • Web Container
      • EJB Container
      • 實做Jave EE製定的規格
    • Tomcat只有web container及實做一點點Java EE的規格
  • 名詞
    • REpresentational Service
      • 可output各式的format, json, xml, csv, ...
  • Convention
    • db命名單數 tb_member
    • RESTFul複數 members
  • JSON定義
    • [ { a: 1 } ] , 不合法(但可用),最上層要加{ }
    • [ ]的Security Issue
    • javascript會呼叫array construction,而js允許亡寫array的constructor,駭客可透過此攻擊系統
    • 修改方法:利用{ }包起來





星期一, 12月 14, 2015

加強json_encode的xss 防禦

由於常把資料從db拉出來,再整個json_encode丟給前端
因此要一個個filter還挺累的
如果可以直接對encode過的string filter最好了~

幸好json_encode有好用的參數
完整參數如下
json_encode($value, JSON_HEX_QUOT|JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS);
PHP官網有完整範例,以下截錄
$a = array('',"'bar'",'"baz"','&blong&', "\xc3\xa9");

echo "Normal: ",  json_encode($a), "\n";
echo "Tags: ",    json_encode($a, JSON_HEX_TAG), "\n";
echo "Apos: ",    json_encode($a, JSON_HEX_APOS), "\n";
echo "Quot: ",    json_encode($a, JSON_HEX_QUOT), "\n";
echo "Amp: ",     json_encode($a, JSON_HEX_AMP), "\n";
echo "Unicode: ", json_encode($a, JSON_UNESCAPED_UNICODE), "\n";
echo "All: ",     json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE), "\n\n";

Normal: ["","'bar'","\"baz\"","&blong&","\u00e9"]
Tags: ["\u003Cfoo\u003E","'bar'","\"baz\"","&blong&","\u00e9"]
Apos: ["","\u0027bar\u0027","\"baz\"","&blong&","\u00e9"]
Quot: ["","'bar'","\u0022baz\u0022","&blong&","\u00e9"]
Amp: ["","'bar'","\"baz\"","\u0026blong\u0026","\u00e9"]
Unicode: ["","'bar'","\"baz\"","&blong&","e"]
All: ["\u003Cfoo\u003E","\u0027bar\u0027","\u0022baz\u0022","\u0026blong\u0026","e"]
Reference
Example #2 A json_encode() example showing some options in use

星期五, 10月 23, 2015

擴充Phalcon的filter過濾 xss 攻擊


其實直接用htmlentities or htmlspecialchars就可以了
不過因為一些問題,所以得加上一些參數
見這篇 到底要用htmlenties 還是htmlspecialchars

如果各自使用htmlentities 又容易漏參數
於是想寫個helper類的來幫助

後來想想,幹脆直接擴充phalcon的filter,再透過di統一取得
如此一來就能規範大家用相同的設定也挺不錯的

service.php的設定
$di->setShared("filter", function(
    $filter = new \Phalcon\Filter();
    // Using an anonymous function
    $filter->add('xss', function ($value) {
        $flags = ENT_QUOTES;
        $encoding = "UTF-8";
        $doubleEncode = false;
        return htmlspecialchars($value, $flags, $encoding, $doubleEncode);
    });
    return $filter
));

使用方法
$filter = $di->get("filter");          //取得filter
 
//統一透過filter,寫法能夠一致
$filter->sanitize($value, "xss");      //自寫的,用specialchars
$filter->sanitize($value, "string");   //用htmlentities,不建議用
$filter->sanitize($value, "int");
$filter->sanitize($value, "email");

星期三, 10月 21, 2015

到底要用htmlenties 還是htmlspecialchars

基本上... 要看情況,但先寫通用的結論,就是用htmlspecialchars()
但是!!!! 要加幾個參數,完整如下
htmlspecialchars("i'm 魚乾'", ENT_QUOTES, "UTF-8", false)

先說明後面三個parameters,再說明為何不用htmlentities

  • param 2: $flags = ENT_QUOTES
    避免SQL Injection,所以一律對單引號做轉換
  • param 3: $encoding = "UTF-8",
    encoding一定要加,免得被不同版本的PHP影響
    5.4 預設"UTF-8"
    5.6 是吃default_charset設定
  • param 4: $double_encode = false
    避免重覆encode, ex: &的&會重覆encode


為何不用htmlentities

因為特殊字元會有亂碼問題
htmlentities遇到認不出文字,會轉成亂碼or特殊字
echo htmlentities('魚乾') . PHP_EOL;                 //é­▒ä¹¾ ö
echo htmlspecialchars('魚乾 ö'). PHP_EOL;            //魚乾 ö

//雖然可以decode還原,但如果直接看DB資料時總怪怪的

中文字加上固定的encoding就ok了,但有些字還是會被encode
echo htmlentities('魚乾 ö') . PHP_EOL;                    //é­▒ä¹¾ ö
echo htmlentities('魚乾 ö',ENT_QUOTES,"UTF-8") . PHP_EOL; //魚乾 ö 為會轉為  ö
echo htmlspecialchars('魚乾 ö'). PHP_EOL;                 //魚乾 ö

結論:
內容並不是我們想轉換的特殊字,所以遇到特殊字就不要理,這是htmlspecialchars的理念
那何時適用htmlentities?
就... 你要encode特殊字的時候....
何時會需要... 存的media不支援特殊字時...吧...




星期二, 9月 01, 2015

DevOps conf 2015 (9/1)

*因為沒有提供投影片,所以抄的零零落落

開場
  • 搶先一步的IT競爭力
    • 南非Standard Bank加快發佈軟體2000倍
    • 反之,若是競爭對手的速度快2000倍
  • 實例Standard Bank
    • 除了Dev與Ops Team外,更應用在流程面
      • 新服務申請新的Server,層層的人工簽核
    • 由於改變流程,因此花時間讓高層瞭解
      • 熟悉用詞
      • 導入衝擊
    • 建立文化
      • 將Dev, Ops於同一辦公室工作
      • 宣言服裝(ChopChop)
Conquer CI Server - 樂天 直井和久
  • 因無人專職維運CI Server,同仁也不太會用,所以效能低落
    • 專職維運CI Server
  • Project Metrics
    • 指標太多,訂出要衡量什麼,才能取捨
    • Show progress easily
    • observer the transition
  • Reduce exchange between Dev & Ops team
    • 許多環境設定waste time on communication
    • 透過CHEF, Docker
      • Developer可自行測試
      • Operation直接放設定檔
    • 調整CI Alert mail
      • 寫看的懂,留useful的資訊
      • you don't need to measure everything. only useful information
      • 逐步設定其他的metric
  • how we nurture member
    • share knowledge face-to-face weekly.
  • Conclusion
    • Find/measure/review Project Metrics to consolidate ... 忘了
    • Use useful information for communication
  • 相關軟體
    • Cobertura
    • Jacoco

Enterprise DevOps - Michael Ducy

  • Cultural and Professional movement
    • Book: The Phoenix Project
  • Increasing the flow of work through the IT system
  • DevOps are CALMS
    • Culture (learning, improvement, failure and betterment)
    • Automation (work flow)
    • Lean 
    • Measurement (看的到,才知道要改善什麼)
    • Sharing 
  • "... software is eating the world" Marc Anderson
  • Lean
    • 每次上版要花多少時間在process
      • it's a waste
  • 30 Day Challenges (DevOps Dojo)
    • Time boxed Project
    • Give origination a chance to experiment
    • Eliminate old process to prove new 
    • Eliminate waste
  • Culture 無法被管理
    • 是有最底層的membr形成
    • Managers are no longer a manager
      • "the team i support"
    • The Coaching kata

Yahoo 持續交付 - 應百怡
  • CD如何保持Speed & Quality
    • Speed
      • Eliminate human involvement
      • Small batch
        • Easy to identity issue
          • Check & revise
    • Quality
      • Build the  right thing
        • Small batch
        • Build the thing right
          • Lots test
  • No human allowed
  • Yahoo CEO
    • NO CD, NO LAUNCH, NO FOOLING
  • 5 Stage
雲端OS Team落實CI - 雙子星執行長 符儒嘉
  • Biz -> Dev -> Test -> Ops -> Market
    • Dev過程有Agile
    • Test有CD
    • Ops有 infrastructure as code
  • Branching Methodology
    • feature 
    • release integration
    • release candidate
Whoscall - 葉秉哲
  • get a little better every single day
  • 要monitoring什麼
    • 從Risk management出發(risk有機會的意思)
      • CPU Usage, 不busy的可調整
    • Application 
      • Metric
        • availible
        • response time
        • error
      • Service
        • pingdom => slack
        • Crashlytics => slack
          • 分析crash report
    • DB
      • Metric
        • R/W lock
        • Size
        • Load
        • Speed
      • Service
        • MongoDB Cloud Manager
    • Poor Performance
      • Metric
        • instance metrics
        • application metrics
        • resource
    • Malfunction
      • log分析
        • fluentd->elesticsearch
        • 較複雜的用BigQuery
      • New Realic
        • 看stack trace
        • 各段執行時間
      • Java Metrics
        • 程式自己定metric,不用再刻前後執行執行時間
      • sentry
        • slack
        • hook在app裡

      • Service
        • 統一的fluentD 格式 
          • fluentD
            • ruby實作,部份用c,效能較好
          • logstash
            • java實作,需jvm,效能較差 (講師:java魔人不要罵我)
        • 普羅米修期
          • 多維度,時間序列



星期四, 8月 13, 2015

Linux排程重覆執行問題

有時排程未跑完,下一個週期的排程又被啟動
雖然自己有想法解這問題,不過這應該一堆神人遇過,一定有厲害的解法
請教了google大神,果然出現超強解法
只要改crontab的指令就好,連程式都不用改

* * * * *  sh '/home/fish/test.sh'  #原寫法
* * * * *  flock -xn /tmp/test.lock -c '/home/fish/test.sh' #flock寫法

注意事項
  1. test.lock 會自動產生,不用理,放在/tmp可避免權限問題
  2. 利用flock,得確定執行角色有test.sh的執行權限

超簡單又不用改程式,爽~~~~~~~~~~~

more~

以上的寫法是當重覆執行時,新的排程就直接放棄不執行
但如果是要執行,但可等個幾分鐘怎麼做哩
只要改參數即可
#等60秒後,再執行(要拿掉n,加上w)
* * * * *  flock -x /tmp/test.lock -w 60 -c '/home/fish/test.sh' 


星期三, 8月 05, 2015

Jira, Confluence Chart Plugin中文亂碼

JVM 內建字型不足所導致

1.install missing Chinese fonts

  • cjkuni-ukai-fonts (楷體)
  • cjkuni-uming-fonts (明體)
  • cjkuni-fonts-common
  • cjkuni-fonts-ghostscript
  • wqy-zenhei-fonts (文泉驛,黑體)
  • wqy-zenhei-fonts-common


2.copy to jvm
mkdir /opt/atlassian/confluence/jre/lib/fonts/fallback
cp /usr/share/fonts/cjkuni-ukai/ukai.ttc /opt/atlassian/confluence/jre/lib/fonts/fallback
cp /usr/share/fonts/cjkuni-uming/uming.ttc /opt/atlassian/confluence/jre/lib/fonts/fallback
cp /usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc /opt/atlassian/confluence/jre/lib/fonts/fallback

p.s. 不知道cjkuni-fonts-common, cjkuni-fonts-ghostscript, wqy-zenhei-fonts-common在哪... 等待有緣人指點一下

3. restart Jira, Confluence

Reference



星期一, 7月 20, 2015

列出排序後的圖檔

說明:
每個分類會有對應的圖檔,原本利用id當檔名存
但因介接系統只認檔名,所在在相同檔名下,更換圖檔內容不會觸發介接系統更新圖
因此利用filename加timestamp來觸發(跟css, js加上?v=xxx同義)

做法:
資料夾下會有多個圖檔,而圖檔的filename會夾timestamp,
在不靠其他persistent data的做法下(記在db or file),就直接sort timestamp當最新的圖檔


  1. 取得所有jpg圖
  2. $files = glob("/path/to/directory/*.jpg");
    --
    Array
    (
        [0] => /path/to/directory/1.jpg
        [1] => /path/to/directory/2.jpg
        [2] => /path/to/directory/3.jpg
    )
    
  3. 加上其他圖檔格式(靠GLOB_BRACE)
    $images = glob("files/*.{jpg,gif,png}", GLOB_BRACE);
    
  4. 還有大小寫問題 >_<
    $images = glob("files/*.{[jJ][pP][gG],[gG][iI][fF],[pP][nN][gG]}", GLOB_BRACE);
    


  5. 排序部份靠php,完整的寫法如下(如果還要其他圖檔格式,就自己加囉)
    $images = glob("files/*.{[jJ][pP][gG],[gG][iI][fF],[pP][nN][gG]}", GLOB_BRACE);
    $sorted = rsort($images); //由大到小
    


Reference
Using PHP's glob() function to find files in a directory

星期四, 6月 18, 2015

Scrum是提早給feedback,但講好的需求,就是要上線啊

看到好多單位都能研究新的技術,並提出相關的應用
心裡在想為何別人能持續在技術有進步

公司最近有個顧問要離開
提到「這幾個月他工作滿開心的,因為沒有人assign工作給他,所以有時間鑽研他有興趣的議題」

也讓我回想到去年底時,因健況出了問題,在家專心養病
沒有時程壓力,便有時間大量閱讀某技術的相關資料
今年回來時,也帶顉同事使用該技術

後來在David Ko的Blog看到這張圖
要 Output 還是要 Outcome

讓我回想,回到工作崗位後,疲於趕user的feature,一直在拚output
如果省下時間只做有價值的產品
我想整個team都會有更多時間在打混開發更有價值的東西,以及技術研究上 XD

local server拿ISO當yum repo server

Linux Server在內網,被限禁無法對外連
因此要yum install時,都得自己找rpm
而公司又會鎖ftp,因此找rpm都很難找

最近要裝新東西,實在被搞煩了
看一下有好東西,可以直接拿ISO檔當yum repository
Step1. mount iso
Creating a Local Yum Repository Using an ISO Image
Step2. setup yum server
Setting up a Local Yum Server Using an ISO Image

還滿容易的~
現在下yum install就自己裝好了
好感動,差點哭出來...


p.s. yum install可能還會出現以下錯誤
GPG key retrieval failed: [Errno 14] Could not open/read file:///etc/pki/rpm-gpg/RPM-GPG-KEY
只要加上--nogpgcheck即可
[root]#yum install --nogpgcheck {packagename}

星期六, 6月 06, 2015

Kanban Board應放哪裡

因團隊是在會議室內,理所當然放會議室裡
daily meeting,討論issue等,也都在會議室內

由於自主管理,主管也不太曉得我們在做什麼
反正沒出什麼包,就放給我們自己玩
只不過都關在房間裡,有天反問我,不曉得team在做什麼
這實在很難解釋...

後來有個團隊沒有會議室,只好將看板貼在放走廊上
嘿~ 這還不錯,因旁人都看的到,感覺有在做事
所以也把看板搬出來了

幾天後主管就說感覺工作氣氛不一樣
每個team比較活絡有互動~

有時還是得表現給別人看(誤)

提早得到feedback,但調整也得花時間呀~ user老大

最近開始run scrum
每回合產出的項目,也讓user實際操作體驗
在正式上線前得到不少feedback及調整需求
感覺挺不錯的~

西嘎西!!! (日語:但是)
「需求要調整,原定的功能也得在原定時程完成,也就是上線的時程不變」
我咧...
開發單位:不是有說好需求要排優先,那優先權較低的可以拿掉呀
需求單位:所有的需求都已經砍過了,沒有辦法法再砍了,一定要全上...

怪不得的有團隊明明開發差不多了
卻說上線前幾天才能給user測試
私底下問,才得知user就不會有時間改需求
把球丟回給user...

這叫「上有需求變更,下有裝死對策」