- 過去有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月 21, 2015
Java Web Services and Security 課堂筆記
星期一, 12月 14, 2015
加強json_encode的xss 防禦
由於常把資料從db拉出來,再整個json_encode丟給前端
因此要一個個filter還挺累的
如果可以直接對encode過的string filter最好了~
幸好json_encode有好用的參數
完整參數如下
PHP官網有完整範例,以下截錄
Reference
Example #2 A json_encode() example showing some options in use
因此要一個個filter還挺累的
如果可以直接對encode過的string filter最好了~
幸好json_encode有好用的參數
完整參數如下
json_encode($value, JSON_HEX_QUOT|JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS);
$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"]
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
htmlentities遇到認不出文字,會轉成亂碼or特殊字
中文字加上固定的encoding就ok了,但有些字還是會被encode
結論:
內容並不是我們想轉換的特殊字,所以遇到特殊字就不要理,這是htmlspecialchars的理念
那何時適用htmlentities?
就... 你要encode特殊字的時候....
何時會需要... 存的media不支援特殊字時...吧...
但是!!!! 要加幾個參數,完整如下
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的指令就好,連程式都不用改
注意事項
超簡單又不用改程式,爽~~~~~~~~~~~
more~
以上的寫法是當重覆執行時,新的排程就直接放棄不執行
但如果是要執行,但可等個幾分鐘怎麼做哩
只要改參數即可
雖然自己有想法解這問題,不過這應該一堆神人遇過,一定有厲害的解法
請教了google大神,果然出現超強解法
只要改crontab的指令就好,連程式都不用改
* * * * * sh '/home/fish/test.sh' #原寫法 * * * * * flock -xn /tmp/test.lock -c '/home/fish/test.sh' #flock寫法
注意事項
- test.lock 會自動產生,不用理,放在/tmp可避免權限問題
- 利用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
2.copy to jvm
p.s. 不知道cjkuni-fonts-common, cjkuni-fonts-ghostscript, wqy-zenhei-fonts-common在哪... 等待有緣人指點一下
3. restart Jira, Confluence
Reference
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
- https://confluence.atlassian.com/plugins/servlet/remotepageview?pageId=224396642
- 安裝 CentOS / RHEL 6 預設的繁體中文字型套件
星期一, 7月 20, 2015
列出排序後的圖檔
說明:
每個分類會有對應的圖檔,原本利用id當檔名存
但因介接系統只認檔名,所在在相同檔名下,更換圖檔內容不會觸發介接系統更新圖
因此利用filename加timestamp來觸發(跟css, js加上?v=xxx同義)
做法:
資料夾下會有多個圖檔,而圖檔的filename會夾timestamp,
在不靠其他persistent data的做法下(記在db or file),就直接sort timestamp當最新的圖檔
Reference
Using PHP's glob() function to find files in a directory
每個分類會有對應的圖檔,原本利用id當檔名存
但因介接系統只認檔名,所在在相同檔名下,更換圖檔內容不會觸發介接系統更新圖
因此利用filename加timestamp來觸發(跟css, js加上?v=xxx同義)
做法:
資料夾下會有多個圖檔,而圖檔的filename會夾timestamp,
在不靠其他persistent data的做法下(記在db or file),就直接sort timestamp當最新的圖檔
- 取得所有jpg圖
- 加上其他圖檔格式(靠GLOB_BRACE)
$images = glob("files/*.{jpg,gif,png}", GLOB_BRACE);
- 還有大小寫問題 >_<
$images = glob("files/*.{[jJ][pP][gG],[gG][iI][fF],[pP][nN][gG]}", GLOB_BRACE);
- 排序部份靠php,完整的寫法如下(如果還要其他圖檔格式,就自己加囉)
$images = glob("files/*.{[jJ][pP][gG],[gG][iI][fF],[pP][nN][gG]}", GLOB_BRACE); $sorted = rsort($images); //由大到小
$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 )
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
心裡在想為何別人能持續在技術有進步
公司最近有個顧問要離開
提到「這幾個月他工作滿開心的,因為沒有人assign工作給他,所以有時間鑽研他有興趣的議題」
也讓我回想到去年底時,因健況出了問題,在家專心養病
沒有時程壓力,便有時間大量閱讀某技術的相關資料
今年回來時,也帶顉同事使用該技術
後來在David Ko的Blog看到這張圖
要 Output 還是要 Outcome
讓我回想,回到工作崗位後,疲於趕user的feature,一直在拚output
如果省下時間只做有價值的產品
我想整個team都會有更多時間在
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}
因此要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比較活絡有互動~
有時還是得表現給別人看(誤)
daily meeting,討論issue等,也都在會議室內
由於自主管理,主管也不太曉得我們在做什麼
反正沒出什麼包,就放給我們自己玩
只不過都關在房間裡,有天反問我,不曉得team在做什麼
這實在很難解釋...
後來有個團隊沒有會議室,只好將看板貼在放走廊上
嘿~ 這還不錯,因旁人都看的到,感覺有在做事
所以也把看板搬出來了
幾天後主管就說感覺工作氣氛不一樣
每個team比較活絡有互動~
有時還是得表現給別人看(誤)
提早得到feedback,但調整也得花時間呀~ user老大
最近開始run scrum
每回合產出的項目,也讓user實際操作體驗
在正式上線前得到不少feedback及調整需求
感覺挺不錯的~
西嘎西!!! (日語:但是)
「需求要調整,原定的功能也得在原定時程完成,也就是上線的時程不變」
我咧...
開發單位:不是有說好需求要排優先,那優先權較低的可以拿掉呀
需求單位:所有的需求都已經砍過了,沒有辦法法再砍了,一定要全上...
怪不得的有團隊明明開發差不多了
卻說上線前幾天才能給user測試
私底下問,才得知user就不會有時間改需求
把球丟回給user...
這叫「上有需求變更,下有裝死對策」
每回合產出的項目,也讓user實際操作體驗
在正式上線前得到不少feedback及調整需求
感覺挺不錯的~
西嘎西!!! (日語:但是)
「需求要調整,原定的功能也得在原定時程完成,也就是上線的時程不變」
我咧...
開發單位:不是有說好需求要排優先,那優先權較低的可以拿掉呀
需求單位:所有的需求都已經砍過了,沒有辦法法再砍了,一定要全上...
怪不得的有團隊明明開發差不多了
卻說上線前幾天才能給user測試
私底下問,才得知user就不會有時間改需求
把球丟回給user...
這叫「上有需求變更,下有裝死對策」
星期二, 3月 24, 2015
排程與apache建立共用folder
由於透過排程建立image資料夾丟圖片
而後台(人工)作業也會透過apache建立資料夾丟圖片
但權限不同(owner不同),造成無法丟入圖檔
最麻煩的是Server被禁止無法在php裡執行chmod
想了幾個做法
- 透過localhost/shell啟動apache/[cron-user]建立folder (failed)
原本想用排程透過curl呼叫"建立folder"的PHP (owner 為apache)
但因為一樣是建立自己的帳號,反而是自己無權限丟檔 o_Q - 排程執行固定執行Shell (work around)
可以,但因為要改對方建立的folder,所以得要有root權限,不太好的解法 - 透過apache執行排程 (solution)
原本想建立apache user來寫排程,但Admin不同意
後來看到可以sudo為apache來寫排程,這樣一來都是owner都是apache~ YA~
sudo -u apache crontab -e
星期日, 3月 08, 2015
PHP到底有沒有DB Connection Pooling
一直沒搞懂到底PHP有沒有Connection Pooling...
看了Persistent connections,又有人說不要用
沒事就被打個槍,還是好好研究一下
先簡單的來說有什麼做法(linux下)
另外就不用再用PDO做persistent,因為會被cache住,不會還給ODBC.
Reference
Connections and Connection management
ODBC Connection pooling
看了Persistent connections,又有人說不要用
沒事就被打個槍,還是好好研究一下
先簡單的來說有什麼做法(linux下)
- PHP的MSSQL extension
- 就是常見的pconnect,不建議
- PHP的PDO extension
- 做法
- 將connection cache下來,當其他的php script request,再重覆使用
寫法如下
<?php $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array( PDO::ATTR_PERSISTENT => true ));
實驗結果PDO可以的ATTR_PERSISTENT ,還可關掉ODBC的pooling
- 討論
- PHP官網指出,如果有ODBC做pooling的話,就用ODBC做,因為可讓同process其他的模組使用
- ODBC Connection Pooling(unixODBC)
- 做法
- 存在Web Server裡,供給Web Server Process使用
- 前提是使用的ODBC driver及library要有支援
- PDO_ODBC及unixODBC v2.0後都有支援Connection Pool
- 另外利用ODBC的還有以下,但各自有沒有再實作pooling沒研究
- Microsoft ODBC
- Easysoft ODBC
- freeTDS
- 做法:利用linux process管理connection
- 怪可怕的,如果process掛了,那connection就GG了
- 而且只接受TDS 4.2, 也不接受ntext
Summary
看起來利用ODBC比較做是比較建議的做法另外就不用再用PDO做persistent,因為會被cache住,不會還給ODBC.
- 使用Pooling注意事項
勿改變connection 狀態,例如改default db,造成使用同組db帳密的request會讀取錯誤
Reference
Connections and Connection management
ODBC Connection pooling
星期一, 3月 02, 2015
Code Review項目
一直覺得Code Review滿重要的
高效代碼審查:來自前質疑者的9個建議有提到Code Review有助於以下
文章還有提到些具體的做法
我也要加入Working Agreement
Reference: 高效代碼審查:來自前質疑者的9個建議
高效代碼審查:來自前質疑者的9個建議有提到Code Review有助於以下
- 抓bug
- 保證代碼的可讀性,可維護性
- 在團隊中散播代碼的知識
- 讓新人適應團隊的工作方式
- 讓大家接觸不同的思路
文章還有提到些具體的做法
我也要加入Working Agreement
- 每次的pull request都要求所有team member做code review
- 條列check item
- 這項還滿不錯的,至少每個人會習慣必要的項目
自己寫code時也會注意
Reference: 高效代碼審查:來自前質疑者的9個建議
禁止root遠端ssh登入 linux
新架了Linux Server,沒想到才幾天而已
就發現root在2小時內,就有7000多次的登入失敗記錄
太可怕了... 趕快加個限制
禁止root遠端ssh登入 linux
vi /etc/ssh/sshd_config -- PermitRootLogin no -- /etc/init.d/sshd restart
Reference:
Security Tip: Disable Root SSH Login on Linux
星期二, 2月 17, 2015
API Response Format
對API的response沒有設定標準格式
每次寫API就在想,網路上看到這版本還不錯
再小調整一下,符合自己需要的
統一這個版本了
Reference
Sentiment Analysis Endpoint
每次寫API就在想,網路上看到這版本還不錯
再小調整一下,符合自己需要的
統一這個版本了
{ success: <boolean>, error : { /* Only included if success is false. */ code: (customize error code) msg: (for message) }, response: {} /* Only included if success is true */ }
Reference
Sentiment Analysis Endpoint
星期四, 1月 08, 2015
導Agile可以,但品質要顧好
前陣子學Agile,懂了點皮毛,正在公司導Agile
最近主管回覆:「導Agile可以,但品質要顧好」
聽起來很不合agile的邏輯,想了好久
因此對Agile會有些品質的誤解
在 Henrik Kniberg 的 文章 What is Scrum? 裡有張圖還不錯
應該就能知道Agile是Rough, adaptive plan
而不是No plan的開發
最近主管回覆:「導Agile可以,但品質要顧好」
聽起來很不合agile的邏輯,想了好久
Agile是Rough, adaptive plan,不是No plan...
我在想主管應該是以為Agile是No Design, No Plan在開發因此對Agile會有些品質的誤解
在 Henrik Kniberg 的 文章 What is Scrum? 裡有張圖還不錯
應該就能知道Agile是Rough, adaptive plan
而不是No plan的開發
品質應該更好... 顧吧
對主管的話特別有反應是因為....
Agile把feature size切小,不敢說小就簡單
但至少開發, Tester對該週期開發的feature掌握度高
但至少開發, Tester對該週期開發的feature掌握度高
即使出搥了,也能快速的找出問題修正
公司有個team
每個月上20多個features,要上線時都要搞半夜上線
一有問題,就得從這堆features找bug
我實在很佩服,問他們不會壓力很大嗎
還說不會哩... 真是神人....
每個release短一點,features少一點
如果改成每週上5個features,我想相對大家會容易應付些
雖然每週上線壓力有點大,不過總比一個月上20多個feature好一些
雖然每週上線壓力有點大,不過總比一個月上20多個feature好一些
而且如同agile說的,也許剩餘的feature會因些feedback有所調整或消失...
訂閱:
文章 (Atom)