2015-09-07

使用Selenium自動化操作瀏覽器




Selenium是一套可自動程式化操作瀏覽器的工具套件,詳略。因為種種原因,個人需要一個登入網頁系統的自動化程式;以下是Selenuim實作在IE(Internet Explore)、Firefox瀏覽器上的簡易實作

[個人環境]
  • JDK 1.8.60
  • selenium-2.47.1
  • Eclipse Luna
  • IE 9

[步驟教學]
  1. Selenuim官網有很多種程式語言供下載,考量未來執行環境我使用Java,下載.jar,然後使用Eclipse建立專案,詳情略。
  2. 下載InternetExplorerDriver或GeckoDriver,請放在本機的磁碟目錄,這是用來幫你開啟IE瀏覽器的驅動器。
  3. 主要代碼如下
  4.        
        // Prepare IE driver
        WebDriver driver = null;
        DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
        System.setProperty("webdriver.ie.driver", "D:/IEDriverServer.exe");
        driver = new InternetExplorerDriver(capabilities);
        
        /* Prepare Firefox driver
        DesiredCapabilities capabilities = DesiredCapabilities.firefox();
        System.setProperty("webdriver.gecko.driver", "C:\\Users\\Sean\\Downloads\\geckodriver.exe");
        driver = new FirefoxDriver(capabilities);
        */
    
        // Automation
        driver.get("${Your URL}");
        driver.findElement(By.id("account")).sendKeys("${Your Account}");
        driver.findElement(By.id("password")).sendKeys("${Your Password}");
        driver.findElement(By.xpath("${Your xPath}"));
        driver.click();
     
    
  5. 點選執行

2015-08-13

之所以能成為賈伯斯(Steve Jobs) | 陪你讀冊 | 皮克斯動畫的管理心法



    今天在這裡介紹一本管理書籍,是由皮克斯(Pixar)動畫的創辦人卡特默爾(Ed Catmull)經由超過40年匯集的管理經驗,也許大家會狐疑,市面上有這麼多的管理教科書,為什麼又要特別花時間來讀他(台灣銷售量似乎也不好),就讓我們脫離東方奴才式管理的思考來看看這件事情吧。
    一切,我們先從賈伯斯(Steve Jobs)來說...

沉潛的背後

   賈伯斯(Steve Jobs),應該是現代少數無人不知曉的人物,因為他成功讓Apple Inc.打造 智慧型手機 iPhone,這項跨時代產品,不僅讓消費者為之瘋狂,更讓某些企業也想跟隨腳步打造"所謂產品"這檔事,東施效顰之事屢見不顯。

    個人一直很欣賞幾個企業家,賈伯斯是其中之一,Walter Isaacson的賈伯斯傳(Steve Jobs)個人中英文版都有入手,中文版至少從頭到尾看了三次以上,甚至連Audio都被我搞到手...

    另外一本號稱是蘋果公司授權的成為賈伯斯(Becoming Steve Jobs)最近個人也已拜讀,要說這兩本書最大的差異是成為賈伯斯(Becoming Steve Jobs)由數十年來與他很親密的財經記者撰寫,其中增添許多賈伯斯不為人知(起碼在我看了這麼多網路文章、訪談)的個人小故事,例如他為何要接受到史丹佛大學進行他這一輩子唯一的畢業生演講(後來被譽為少數經典演說之一),在入場前他與全家人一家五口的小故事;還有賈伯斯並非一個殘酷的暴君,他與同事、合作夥伴間的親密互動相處。

    以上只是前言,我們要思考的是,賈伯斯因為人為廣知的火爆個性,加上自己太年輕並不具備管理一間大型企業能力,而在1985年被自己一手創辦的Apple逐出;卻在11年後的1997年回到Apple,然後不過13年的時間就把Apple推向世界最有價值的企業,詳見下圖。

圖片來源:https://vktailormade.files.wordpress.com

    所以我們要思考這樣的轉變,或是為何Apple可以達到這樣的成功,是怎麼來的?

十年磨一劍

2015-07-16

無聊工程師的科學分析時間:為什麼頂尖運動員們總是有這麼多桃色緋聞

圖片來源:千人斬,最後的江湖(電影)

以下內容採科學數據分析來探討為什麼頂尖運動員們總是有這麼多桃色緋聞,可能包含18禁內容,請已成年者再繼續閱讀。

2015-07-11

只要十招,讓您經營高效的軟體研發團隊



1. 縱向思維分工,打破既有分工模式
    引言提到,我們團隊基本上就是一個人要做十個人的事情,所以如何分工就是一件最重要的事情,因為我知道如果以原本的工作型態進行分工,肯定無法承接;所以我自己在腦中沙盤推演很久,並將要接手的系統範圍做了領域的縱向切割,然後再分工出去。
    換言之,我讓每個團隊成員都具備full stack的研發任務與能力,雖然都是剛進公司的新人,不要緊,可以培養,我全力協助建立他們所需要的domain knowhow與技術能力。怎麼培養,後面文章會慢慢提到。

2. 信賴團隊,訂立明確任務
    充分信賴團隊,這句話會說的人很多,但真的做得到的主管很少;另外最重要的是,你要讓整個團隊清楚目標,但往往連主管自己也搞不清楚。
    再者,我真心認為公司的高階主管挑人進來的眼光都很厲害,某些因緣際會我接觸過許多公司的工程師,能進敝公司的人比較起來素質都相當優秀、上進心十足,都是佼佼者。
    既然我有一群佼佼者團隊,更應該善用大家的力量。

3. 個別成員,一次只給單一目標,絕不多頭馬車
    這招讓團隊成功突破許多限制跟細節
    身為一個主管在執行專案,最怕的就是進度不如預期,很抱歉,個人剛好承受壓力的極限異於常人,我把團隊中高手放在一個最無法預期進度(因為難度極高)的功能研發中,但我不給他任何的進度壓力,我這麼跟他說:"這個功能很重要、我也知道困難度很高,但我要的就是一個general solution,我不要你為了求快、求進度而做半吊子的成果就放到系統裡,你放手去做,有任何需要幫忙的盡管提出來我可以跟你一起解問題,剩下的責任我來扛"
    執行過程,當然會遇到不少問題,不管是技術上或是方向要怎麼走,我會仔細從頭到尾把問題、過程、可能解法都聽過一次才發表自己的想法,並且要求成員能有自己的意見跟想法,充分相信你的好手!
    用了好幾次,屢試不爽!成員暨獲得成就感,系統也有了大突破。 

4. 何其幸運,我自己也擁有一個能力超強、當責的好主管
    十年寒窗無人問其實很辛苦,剛好自己也相當幸運,碰到一群好主管(不然也不可能這麼快就讓我當責帶團隊),我們的溝通很頻繁、也很順暢,下情能上達,而且他完全能觀察到我帶團隊用的方法以及建立的文化氛圍,幾乎不用任何解釋他就能理解我的想法

2015-07-08

Nagios 納管監控主機設定方式


Nagios安裝完成後,必須把設備(ex: Host)進行納管才能進行監控,以下簡介設定方式。

  • 安裝環境:CentOS 6.4 64bits
  • Nagios版本:nagios-4.1.0rc1

Step 1. 把要納管的設備加進 /usr/local/nagios/etc/nagios.cfg 中,Linux、Windows系列建議分開放。以下圖為例,個人的Nagios納管了3台Linux Server(包含自己localhost) + 5台Windows Server。

Step 2. 於 /usr/local/nagios/etc/objects 資料夾對應 Step 1. 新增設定檔,以 windows template為範例,主要有三個部分要修改:

2015-06-11

Nagios告警信設定方式



    以下介紹Nagios在監控環境主機發生問題的時候,發送告警Email的設定方式。

  • 安裝環境:CentOS 6.4 64bits
  • Nagios版本:nagios-4.1.0rc1
  • Nagios Plugin:nagios-plugins-2.0.3
  • Linux Clent:ncpa-1.8.1-1.el6.x86_64
  • Windows Client:NSCP-0.4.3.143-x64
    根據網路上很多資訊指出,nagios安裝在Linux上只要另外安裝mailx再透過postfix的方式就可以發送,但小弟怎麼試都不成功的情況,只好直接從nagios的notification definition下手,該檔路徑在 /usr/local/nagios/etc/objects/commands.cfg,當然這是小弟的個人路徑,請視客倌您的安裝路徑自行修正。
    

# 'notify-host-by-email' command definition
define command{
        command_name    notify-host-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
        }

2015-06-04

小確幸物語 之一

一陣沉睡 半夢半醒 
略見一縷陽光 輕灑
翻身 繼續盜夢 回到第三層

背酸 潛浮到第二層
眼縫 幸福還在身邊 沒醒 
再換個角度 掉落

時針 搖擺了幾下
好動的幸福 跑來跑去 跳上跳下
賢慧的幸福 曬完衣服 
但 還不想醒 因為 還不夠餓

週末 陽光 慵懶 徘徊 微妙 幸福

如何在北京辦理一年多簽

想在北京辦理一年多簽
很簡單,也很便宜
台灣旅行社代辦要價3k..真的是坑那些不懂人的錢
以下是最簡單的流程

===準備資料===
1.一張2吋照片
2.100 RMB
3.旅館開給你的居住證明
注意事項:
  a.必須在退房前就去辦理,否則機關人員無法在網路上
  查到相關資料
  b.給附印本即可,但要用A4印

===地點===
北京出入境管理局
(地鐵雍和宮站下車,出口B,然後順著馬路走約1km方可到達)

接下來就是當場填寫表格,然後抽號碼牌去繳交證件
最後到櫃檯繳費,工作日七日,扣掉假日大概是十天後可以拿到~

報告完畢!!

2015-05-19

SCRUM的迷思



    軟件工程一直是個很有趣的領域,相關工程論從早期的CMMI、到近年流行(其實也不是近幾年,在台灣已經有聽到2005年就開始執行的專案)的敏捷(AGILE)開發,由於CMMI繁瑣的文件要求、瀑布式開發都讓人直覺認為執行一個專案最起碼要數月、半年、好幾年的時間,所以應運而生敏捷開發這個名詞,相關最著名的方法論為SCRUM,不小心這個方法個人帶的團隊有執行過;以下來探討一下人們對敏捷開發的迷思
 
    再次強調,敏捷式開發不是軟工方法,敏捷只是一種心理狀態的描述、一種工作環境的意念,如果公司文化沒有敏捷的意圖或是想法存在,導入任何方法都沒有用。

    那SCRUM又是什麼,假如敏捷開發是個數學的應用問題,那SCRUM就是一套或許可以解決問題的公式,SCRUM只是一套方法、一種作業方式、一種運作模式、一種流程,SCRUM不是萬靈丹、SCRUM不是萬靈丹、SCRUM不是萬靈丹,因為很重要,所以要講三次。

迷思一:有了SCRUM就不用寫文件
    一言以蔽之:SCRUM是利用大量的溝通、許多的定期會議取代文件撰寫,所以在時程上並不會大量減少耗費人時,因為這是一種挖東牆補西牆的概念。但好處是因為溝通頻率高,各角色間的思考誤解會有效減少,避免各說各話。
    CMMI最令人詬病的就是那一拖拉庫的文件,從肥滋滋的客戶拿著需求來找你開始,一直到開發完成、測試完成,全部都是一連串的交付文件,包含每個月研發團隊開的會也要記錄,所以CMMI常常被罵到臭頭的都是這件事情。但用了SCRUM之後,難道就真的可以避開這些阿雜的事情嗎?
    CMMI設定的SA、SD、PG、Tester便缺少了文字依循,所以SCRUM放入了幾項元素:會議(快速、經常性的)、User Story。
    因應軟體開發這種腦力高度集中的產業,資訊需要快速交流、有效溝通,SCRUM的模型裡面針對溝通部分導入大量的會議,包含Daily standing meeting、Sprint retrospective meeting、DEMO meeting...
    所有的SCRUM教科書都說Daily standing meeting是一種每天要所有團隊成員以站立的方式開一個10 - 15分鐘的會,那這個會要幹什麼,一言以蔽之就是要資訊通透,會議中要求每個人只要說明前一天做了什麼、今天要做什麼、遇到什麼問題需要協助...

你真的以為會議都會在15分鐘內就結束嗎?

    除非你真是個非常有經驗Scrum Master相當會掌握會議僅度 or 技術能力很強可以理解每個成員想要表達的事情,一個理想的Daily standing meeting執行上其實不簡單,提供個人經驗分享
    此外Retrospective meeting一定要把會議討論的重點跟調整方向記錄下來,口說無憑、時過境遷,很多事情不寫下來或是當下沒有決議,進度檢討流於空談。這種會議文件也不需要長篇大論,基本上就是一張A4就綽綽有餘,紀載會議時間、與會人員、決議事項、待辦事項(包含人、事、時)即可。

迷思二:SCRUM可以節省開發時程

2015-03-20

北京紫禁城半日完程攻略

紫禁城一嶼

話說國共抗戰,國民黨退敗到台灣,
做了一件還不錯的大事,
就是把紫禁城裡的奇珍異寶都運送到了台灣
讓現在大陸人只能乖乖就範飛越台灣海峽到台灣故宮
但唯一搬不走的,就是那偌大宏偉的建築物

小時候唸地理常常講,大陸地大物博,物產豐富,
但自己的腳在沒有真的踏進這塊路地之前
我真的一直都抱著很懷疑的心態,
你們這些教科書編譯者應該都是在豪洨吧
一直來到了北京,我完全能體會什麼叫做"地大物博"了

所以想要半日逛完紫禁城(故宮)
老實說我會覺得有點難度,建議是可以花上一整天的時間
慢慢欣賞,風景可以細細拾蹈拾蹈,
以下是我建議的攻略

===購票消費===
1.長的像學生,或是看起來比較幼齒的,大膽的買學生票吧
跟全票差了三倍~
2.北京氣候乾燥,水分補給很重要,"進了宮"基本上要買水或食物
都很困難,就跟還珠格格想逃出來的難度差不多
所以麻煩先行購買,除非你很凱,可以被坑

===導覽===

北京街頭鬥牛全攻略

很幸運我住的小區就有個籃球場
而且距離不到20M(大心)

不過北京打籃球的人比想像中的還多
連故宮門外都有四五個球場!!
在北京打籃球其實跟台灣差異滿大的
大概可以從幾個面向來進行分析:

===場地===
1.北京風沙大,而且氣候乾燥,不管你的球顆粒再多,
想要有室內球場的手感相當難
2.很少有籃網的球框
3.高度標準,而且雙底線的距離明顯比台灣長

===技巧===
1.北京跳的高的人很少,可以幾乎說是沒有
所以他們卡位很扎實,比較嫩的人就會說這是比較髒
但我只說是卡位扎實,光靠卡位就能搶籃板
不過因為他們跳躍力普遍不佳,所以衝搶籃板變的很容易^^
2.回歸到氣候,因為風沙大,
他們出手的弧線也普遍偏低,但都很準,個個都是阿伯級的準度
3.運球很爛,沒有什麼護球,也看不到美式的cross over
4.上籃跟籃下進球率超高,應該都有75%,
在這邊籃下投不進壓力會很大,很丟臉...

===規則===
1.台灣三對三鬥牛洗球都在罰球線,他們則是要出三分線
但其實也沒有洗球的動作,反正就是球出了三分就開始算分
2.如果球是在底線出的球,要在底線發球
3.十分為一局,play隊數多的話則為五分

===隱藏規則===

2014-12-27

軟體開發真的沒有銀彈嗎?淺談世界級軟體開源社群運作


圖片來源:One Piece

無人不知的軟體神書人月神話:軟體專案管理之道(The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition)其中一個章節提到人月神話這個迷思,簡單解釋,以工程學來說,今天我用50個人建一間房子需要100天,那工程上因為可以拆解工作,所以理論值(大量的平均數來看)可以用500個人在10天內建一間房子;這就是一種人月工時結構的估算。

很可惜,軟體並不是工程。軟體開發是一個很殘酷用智商高低決定勝負的領域,以開著同一款車,一個頂尖的賽車手頂多就比普通會開車的人快個2-3倍,但軟體頂尖程序員跟普通程序員可以差到百倍(the measure indicators should be include quality, scalability and stability)。

但今天透過網路無遠弗界的集結,開始有著一絲可以打破人月神話的運作機制存在,這個機制就是開發者社群(Community)。一個好的開放原始碼社群透過制度、標準、流程、規範有效集結世界各地志同道合的夥伴以OpenStack開源社群為參考說明。

開源社群運作基礎流程:
  1. 先有個code base,最小可能就只有幾千、幾萬行程式碼,然後由一個或兩個單位維護研發,eg:NASA, Rackspace。
  2. source被open,並且License Agreement被擴張為Apache License,簡單的說就是拿到這個授權的程式碼,你可以無償的使用他,拿來改、賣都沒關係,隨便你搞,但前提是組織不負後續責任。通常這時候就會開始吸引到市場的鯊魚。
  3. 忘了說,一定要有個源碼版控系統。
  4. 社群建立,會開始進行幾件事情:
    • 建置官方網站,繪製個吉祥物mascot感覺比較沒這麼枯燥乏味。
    • 釋放Release Note(說明這個版本主要完成哪些功能)、發佈各種進程的版本(alpha, beta, candidate, stable, )、發布版本、定出版號、
    • 針對社群貢獻者(contributors)會給幾條較有法律性的規範CLA(Contributors License Agreement)

2014-12-26

2014末 - 自我技術成長的省思

最近悠悠轉轉某開源社群一段時間,鑽研其中一個主題,過程大概就是系統安裝、trace code、把架構搞清楚、拉哩拉雜用了一堆元件、再把python又複習了一下,腦袋中累積了不少東西,想把東西寫出來做個分享,表示自己好像獲得一項成就(?),結果寫到一半,突然發現...

我現在不過是把社群上的英文文件翻成中文而已啊...
我現在不過是把社群上的英文文件翻成中文而已啊...
我現在不過是把社群上的英文文件翻成中文而已啊...

嚴重發現自己沒有貢獻(哪有人自己當穿新衣的國王,還同時扮演那個指著國王說沒有穿新衣的那個小孩),不過就這樣一個move就得到一個反省思考的機會。

台灣的軟體實力長久以來,跟硬體、晶圓代工廠那些還可以跟世界搶單一較高下的技術來比,根本就是一塊如同殘障的領域。沒辦法,台灣一個小島才多少人,最強的都跑去當醫生、律師,再來是電機,然後才...好了,這種涉及到人身攻擊的議題到此為止。

關於軟體開源社群,在台灣能有"實質貢獻"的機會並不多;觀察幾年下來,台灣軟體產業界的毛病仍舊停滯不前
  1. 拿了國外寫好的開源專案,稍微改個UI、換個LOGO就說是新技術;這點其實很tricky,到底是拿既有開源專案去忽悠上面說開發了新技術,然後上面決策層級(擁有資源)的人很開心,就開始大肆做宣揚、媒體推廣的人但不去思考這到底算不算是一個真正能讓產業升級的關鍵技術。兩邊還真不知道誰對誰錯,也許這是一個共犯結構、上下交相賊,下面想辦法透過最短途徑讓長官開心,長官也有了新的題材讓大長官更開心,你開心、我開心、大家開心,開心之餘又有錢領何樂而不為,反正題材願景的泡泡只要不戳破就沒問題。
  2. 不斷的做Me2