發表文章

目前顯示的是 2013的文章

胖子工程師辛酸史:交流與分享

上次胖子與工程師B談過後,他深思熟慮定下五年後一定要成功當上外商主管,然而他發現工作以來只專注做好公司的事,反而對業界沒有一定的了解,後來胖子讀了無瑕的程式碼(Clean Code)這本書,他想從當一個專業人士著手. 胖子看到書中說寫程式碼應該讓團隊其他人看懂,他心想工程師B應該能給他很好建議,又加上公司現在將程式碼使用Git做版本控管,因此他又約工程師B一起吃午餐...... 胖子:"工程師B,最近我們的程式碼有進行版本控管,你有看過我的程式碼嗎?" 工程師B:"恩...之前增加資料可視化時,我有看過你的程式碼." 胖子:"那你覺得我的程式碼容易讓人看得懂嗎?" 工程師B:"恩,還可以." 胖子:"其實我最近看了無瑕的程式碼,我一直覺得自己程式碼架構不太好,你覺得我程式碼最大缺點是什麼?" 工程師B:"恩....我也看過那本書,其實目前團隊程式碼的相依性太高,說實話很難維護." 胖子:"那你覺得我們對目前的程式碼進行重構如何?" 工程師B:"然而,目前另外兩個新人工程師的程式碼可讀性很低,我想短時間無法解決程式碼相依性問題." 胖子:"的確,那我們進行Code Review如何?我們先找出問題比較嚴重的地方,然後每個人都針對這部分進行重構,並且在下班前30分鐘開會時,請每個人用五分鐘解釋他做了什麼改善." 工程師B:"雖然你這個想法很好,但我不認為老闆會給我們時間做這些,而且最大問題是專案經理那邊" 胖子:"或許我們在開會時候,我們合作想辦法不要讓時間表不要那麼忙,讓我們團隊至少每一周一次進行重構,而且上次老闆也說希望提升工作效率,其實在那本書也指出雜亂的程式碼會使團隊的產能降低,因此我覺得或許應該跟老闆說重構能使團隊工作效率上升." 工程師B:"恩,我是沒問題." 與工程師B談完話以後,胖子覺得今天做了很棒的交流,雖然不知道這件事能不能成功執行,然而結對工作(pair-programming)應該能花比較少時間重構團隊的程式碼,一方面能讓團隊之前互相知道彼此的工作,另一方

壓抑的台灣:與人交流節省你的時間

圖片
圖一. 待宰羔羊的低頭族(source: Pedestrian Council of Australia's campaign ) 在上一篇 快樂的方法(3): 停下來, 看和前進 ,我利用職場生態來解釋講者 David Steindl-Rast 的概念,然而在資訊爆炸時代,人們越來越追求使用科技產品節省自己時間,然而據我觀察的結果,我對智慧型手機能增加工作效率是感到存疑的.的確,對某些人來說科技產品能讓他有效運用時間,但是對 一些人來說低頭的時候,他不知不覺可能錯失某些機會,因為他拒絕與周圍的事物進行交流,因此他在處理某些事物上感覺很沒效率. 總而言之,我接下來將描述當你不與身邊事物交流時,你可能會浪費多少時間. 有一天,我走到中華電信申辦試用無線網路服務,由於要等很多時間,因此我開始觀察我的周圍,我發現門口站著一位客服小姐等著人問問題,沙發上坐著已經取票的顧客,然而當號碼叫到其中一個顧客時,他上前詢問櫃檯小姐他的手機有點問題,結果她叫他到後面不用號碼牌的手機櫃檯去處理,因此他浪費了半個小時傻傻坐在那邊等號碼.這裡我想表達的是如果此顧客進來就問門口的客服小姐,他只要十分鐘就能解決此問題.因此 你可以回想當你到銀行,醫院, 電信..等地方,有多少事情只要使用客服就能解決的事? 或許你覺得害羞,因此你經常使用智慧型手機搜尋答案,但我認為員工應該最清楚這些事務,而且現在是顧客至上的時代,因此客服通常都需很親切對待你,如果你不清楚該公司處理流程,你主動去問客服才能節省你的時間. 還有,你觀察圖一暗示低頭族就像盲人在過馬路,甚至發生交通意外而死亡.換句話說, 當人低頭看自己手機時,他可能當下忘記自己要做的事 .最典型的例子,學生在上課時玩自己的手機,不但拒絕跟老師溝通與交流,而且也喪失最佳學習的機會.其實,我提過大學在上電子學時我都坐前面,說實話那時候上課認真聽講,因此我不用花很多時間準備考試,所以我還有閒餘時間做其他事.為什麼我會舉這個例子呢?最近我看到公司的徵才廣告,程式設計者要求真是很多,我想一般大學生真的很難做到(包括作者本人),尤其越來越多公司要求GitHub的帳號,因此我建議大學生不要沉迷於手機,請主動找幾個好友一起將你們所學到的東西寫成程式再上傳到GitHub,一方面學生比起上班族有多餘空閒時間,另一方面出去找工作有談判的籌碼.

Qt物件導向:重載函數(overloading function)

圖片
在C++,我們通常定義函數由名字(name),回傳類型(return type),參數列表(parameter list)和虛擬碼(pseudocode)所構成,而重載函數(overloading function)發生在當兩個函數以上使用相同名稱,卻有不一樣的參數列表,但是回傳類型在重載函數是不被考慮的.換句話說,C++編譯器決定使用哪個重載函數是根據傳入的引數(argument)符合哪一個參數列表來決定. 圖一.類別YTDBConnection內成員函數未使用重載 在上一篇 QSqlTableModel與QTableView連結 ,圖一顯示YTDBConnection增加 成員函數 getTable,在這裡我將getDataList和getTable改名為 getData ,然後我的主程式時呼叫相同名稱的成員函數時,在圖二的程式碼第17列(row)由於傳入的引數是字串陣列,因此呼叫getData(QStringList &d_list)將從資料庫取值存到一維字串陣列裡. 圖二.類別YTDBConnection成員函數使用重載getData 圖三.在mainwindow.cpp使用重載函數 使用重載函數的優點 主要增加程式的可讀性,例如你要實作整數和浮點數的加法時,由於只是傳入的引數不同,使用相同名稱的函數比起使用不同的函數比較不會造成 代碼混淆 . GitHub程式碼 Q tTutorial  /  QtProject :  這次的重載練習更新在QtProject,你可以看 commits 觀看程式變化

Chrome擴充套件開發:載入官方範例進行測試

圖片
在上一篇介紹 雙重畫面觀看(Dual View)功能 使用到JavaScript的技術,然而若你想要自己寫JavaScript增加到Chrome瀏覽器,你需先學會如何寫 擴充元件(Extensions) ,然後再啟用開發者模式(Developer mode)進行測試. 另一方面,你也可以利用建立Extension練習網頁程式語言(HTML, CSS, and JavaScrip).而有關Chrome擴充元件開發,今天主要教學先從官方網站下載測試範例後,Chrome載入此範例後檢視結果.  圖一.成功載入測試範例 載點 Google範例載點 主要顯示所有書籤 可搜尋,編輯你的書籤 教學影片 教程 首先, 請到 載點 然後點選「 My Bookmarks 」後,下載測試範例basic.zip並解壓縮.   圖二.下載擴充元件開發-書籤範例 接下來,請用以下的方法進入Chrome擴充元件,啟用開發者模式 「 Developer Mode 」. 在 Omnibox 輸入「 chrome://extensions/ 」 點選 後,選擇「Tools」→「Extensions」 圖三.啟用Chrome的開發者模式 接著, 請按下「 Load unpacked extension... 」,選擇測試範例basic 資料夾所在位置 ,按下「OK」鍵載入此範例. 圖四.載入測試範例 最後,如下圖所示成功載入此書籤範例.  圖五.成功載入測試範例 延伸閱讀 Chrome目錄: http://chenglearning.blogspot.tw/p/c.html

快樂的方法(3): 停下來, 看和前進

圖片
圖一.微笑的裝置藝術 (source:  postitwar.com ) 之前 有關快樂的方法的兩篇文章 是我根據Ted演講「 Want to be happy? Be grateful 」將台灣的故事結合講者 David Steindl-Rast 的概念,然而這段演講對我印象最深刻的句子是『 Stop, Look, Go 』,而中文意思就是停下來,看和前進.說實話,我經常看到身邊的人工作埋頭苦幹,他們從來不知道停下來,或許將東西做到完美是值得讚許的工作態度,然而你知道這些人可能會錯失許多成長的機會.我想用本身的經歷提醒讀者不要再錯失身邊的機會. 首先,我曾經參與大學專題做有關人臉辨識系統,那時我埋頭苦幹埋趕自己的專題進度,自己卻不思考如何向別人報告自己所做的內容,因此有一天當我向專題老師報告時,我當場在實驗室狠狠被教訓一頓,我想我永遠無法忘記老師說的話.他說:『 我知道你很認真做這個專題,然而你如果不會報告,別人如何理解你在做什麼?你做得再多,如果不會表達自己的東西,這東西就沒什麼用 .』 當時的我能理解老師的訓話,然而我從未認真去改善自己的缺點,直到我進入職場,我才發現人真的不能只會埋頭苦幹,如果自己不思考再開會如何向上司或老闆自己做了什麼,他們就無法了解自己的能力.換句話說,每一次開會都是展現你能力的機會,如果不停下你目前的工作,然後思考如何報告你做了什麼,你就喪失讓別人了解你的機會,甚至喪失升官加薪的機會. 另一方面,人其實不能一味追求成績的高低,而是與人去分享或討論的你意見.我曾經在大學的電子學常常坐前面的位置,而且喜歡敲老師的門詢問我不懂的地方,因此老師很喜歡上課找我回答問題,然而有一天我考得很低,老師仍然繼續給我些寶貴的意見,甚至鼓勵我上課回答問題,他並沒有成績差否定我的能力.換句話說,即使你表現不好,你仍然要鼓起勇氣與老闆分享你的想法,而不是只傻呼呼做上面的人交給你的工作. 若想要老闆對你改觀,你更應該不要害怕接近老闆,而是把握與老闆溝通機會去表現自己.畢竟職場不是學術界,老闆無法像老師一樣一一理解底下的員工. 最後,有時看到身邊的人常常猜測別人的想法,反而鼓不起勇氣跟別人交流,因此他常常喪失一些寶貴的機會.說實話,我經常為這些人感到可惜,因為有時我看到某些台灣東西做得比國外好,然而他們卻輸在不會宣傳自己.若你想要改變目前的工作

胖子工程師辛酸史:心態調整

上次胖子與專案經理的職場對決,雖然胖子占了上風,然而不知專案經理如何跟老闆報告,因此他被老闆叫去辦公室約談.... 老闆:"胖子,我知道你們資訊組很忙,然而我聽專案經理說你們都不想學習新東西,是嗎?" 胖子(心理OS):" ╯ ︿ ╰   我就知道老闆要跟我說這件事...." 胖子:"老闆,由於最近忙於規劃FakeLemon計畫案和接新案子,所以才沒答應專案經理的要求." 老闆:"胖子,你知道我們公司一直計畫打入中國市場,而且中國那邊有公司希望與我們合作,因此在這艱難創業時期,團隊應該一起合作提升自己,說實話等公司壯大以後,我想把你提升為主管,然而你沒有隨時精進自己的專業知識與能力,如何成功領導你的下屬?" 胖子:"老闆,我知道了!" 老闆:"這次你就跟專案經理去聽 Scrum 課程,但我希望你下次能自動自發學習新東西,不要每次拿工作多當藉口!" 胖子:"是,老闆" 走出辦公室的胖子感到很沮喪,他突然不知道自己工作目的是什麼,說實話他能理解老闆說得話,然而每天他都處理專案經理丟過來的鳥事,甚至連學新東西責任都在他身上,他突然感到壓力很大需要跟人討論. 剛好此時是中午時間,胖子不經意看到工程師B正要走出去吃飯,因此胖子小跑步到工程師B身邊... 胖子邊用期待眼神邊說:"工程師B,你一人吃飯也太寂寞,我們一起吃吧?" 工程師B看著胖子眼睛思考了一下後,說:"好吧!" 胖子(心理OS):哈~~想不到自己的眼神攻勢如此成功 ლ (^o^ ლ )   ,上次雖然成功邀請工程師B後,可是之後他仍然板著一張臉,所以自己都不敢再邀請他! 當胖子與工程師B點餐時,胖子思考如何說自己的煩惱,畢竟有關公司的話題,如果讓人誤解就不好了. 目前,胖子與工程師B面對面坐著吃飯.. 胖子:"工程師B,你覺得我很不上進嗎?你也知道公司要進入中國市場,我們資訊部是不是要自動加班?" 工程師B:"胖子,你的夢想是什麼?" 胖子 0.0   :"現在不是在討論公司方向嗎?" 工程師B搖著頭說著:&

Qt函數:QSqlTableModel與QTableView連結

圖片
在上一篇 Qt入門篇(4): 建立存取資料庫的類別 ,我主要設計資料庫管理類別,然後在主程式初始化此類別,也就是說使用物件存取資料庫.而這次我將在類別YTDBConnection中的增加成員函數『getTable』將從資料庫Taiwan撈取資料表「Taiwan_PostCode」進行篩選後,利用QTableView顯示其資料. 圖一.存取資料庫類別YTDBConnection 在這次範例,我使用 SQLiteStudio 在SQLite資料庫Taiwan新增資料表「Taiwan_PostCode」,主要紀錄郵遞區號,縣市,鄉鎮區和鄉鎮區英文,你可以到GitHub進行下載與練習. \圖二.資料庫Taiwan增加資料表「Taiwan_PostCode」 程式碼 載點 教程 首先,請先宣告 QSqlTableModel ( 資料庫專用的表單 ) ,然後選擇要從資料庫Taiwan抓取資料表,這裡以 「Taiwan_PostCode」為例. QSqlTableModel *model=new QSqlTableModel(0,db); model->setTable("Taiwan_PostCode"); 接下來,由於輸入參數字串currentText是QComboBox目前顯示的內容,這裡的範例是使用台灣縣市,因此使用篩選只取出此縣市相關資訊. model->setFilter("City_CName='"+currentText+"'"); 然後,請將輸入參數QTableView設定資料來源後,即可顯示所抓取的資料. srcTable->setModel(model); 最後,以下為執行結果. Reference: 1. QtSql 5.0: QSqlTableModel Class http://qt-project.org/doc/qt-5.0/qtsql/qsqltablemodel.html#setFilter

讓Chrome具有雙重畫面(Dual View)功能

圖片
最近在 Google Chrome Dual View [1]發現如何讓Chrome具有雙重畫面功能.其實無須安裝Extensions,你只要按一下啟動JavaScript後輸入兩個網址,他將自動把畫面一分為二. 而這樣的好處,你可以針對不同搜尋引擊進行探討和研究.這次我將針對關鍵字Chrome對yahoo和baidu進行搜尋結果的比對. 教程影片 設置教程 首先, 請將滑鼠移動到雙螢幕觀看後,在此連結上按下滑鼠左鍵後,啟動JavaScript 雙螢幕觀看   圖一.啟動「雙螢幕觀看」的功能 然後,請先 輸入左邊畫面的網址 ,這裡我以百度搜尋為例子,然後按下[ OK ]鍵. 圖二.輸入左邊畫面的網址列 接下來,請先輸入右邊畫面的網址,這裡我以yahoo搜尋為例子,然後按下[ OK ]鍵. 圖三.輸入右邊畫面的網址列 最後,成功讓Chrome畫面一分為二.   圖四.Chrome雙重顯示功能 Reference: 1. CHROME BLOG, Google Chrome Dual View     [online]:  http://www.chromeplugins.org/plugins/google-chrome-dual-view/

胖子工程師辛酸史:勇敢說不

最近團隊開始進行程式碼的 版本控管 ,然而專案經理竟然開始以程式碼的多寡來評價工作效率,胖子感到很無言,因為他寫程式時會使用UML去記錄他所建立的類別和描述類別之間的關係.雖然他曾經跟公司建議將此功能流程化,但是老闆以工作繁忙拒絕胖子的建議. 然而,胖子思考和檢討自己程式技巧,他常常為增加新功能所困擾,甚至經常加班.其實問題就出在胖子程式架構寫得不好,為了提升自己工作產能,胖子仍然堅持自己要做到這件事. 今天胖子又被專案經理叫去討論資訊組工作效率的問題... 專案經理:"胖子,你們資訊組這樣工作效率真的不行!這次你們資料可視化功能也花太多時間吧!最近業界很流行Scrum,我聽說它可以提升我們資訊組工作效率,胖子你去了解一下後提交計劃報告給我!" 胖子(心理OS):╯︿╰ 我對這個東西也不熟!突然要接也太困難了吧!而且,這也是你的工作項目.....還有我們公司連UML流程化都困難重重,Scrum會成功嗎? 胖子:"經理,很抱歉,我是很想去了解Scrum,然而我對Scrum完全是門外漢.又加上,最近不但要趕FakeLemon的計劃案,而且要接新計畫案,你也知道資訊組加班很兇,我實在找不出時間去規劃計畫案." 專案經理:"胖子,Scrum應該由有資訊組的來搞才對啊!這是你們的職責吧!" 胖子(心理OS):@_@ 我就知道你會這麼說.....幸好我有先做功課,而且我接這工作,功勞還不是你的! 胖子 0.0     :"經理,其實我聽朋友上過S crum敏捷方法實作班 ,課程說不需具備程式背景,我想你可以跟老闆報告去參加,專業的人比起我這個門外漢好吧!" 專案經理:"胖子,這是很好學習機會,你一直推脫如何成長?你這樣學習態度是會被職場淘汰!" 胖子(心理OS):= = 這對你來說,難道不是很好學習機會嗎?而且控制權掌握在你身上,我去學還不是被架空! 胖子:"經理,要不然我們跟老闆說一起報名此課程,到時候你跟大家報告計畫案,我可以幫你補充說明." 專案經理(︶︿︶): "好吧!我會跟老闆報告." 回到座位的胖子邊照鏡子邊佩服自己實在太厲害了 >﹏< ,他自認為將了專案經理一軍.雖然結果他也

Qt入門篇(4): 建立存取資料庫的類別

圖片
在上一篇 Qt入門篇(3):連結SQLITE資料庫 ,我簡單實作如何利用Qt連線到sqlite資料庫,然而我未建立資料庫管理類別,也就說此資料庫操作只能在mainwindow.cpp使用,因此為了使資料庫管理能再任意位置都能被使和更容易維護和擴充我們的程式碼,在這裡我將資料庫操作的設計成 類別 [YTDBConnection],如圖一所示.有關類別相關的解釋,請參考 Qt之物件導向:什麼類別? .類別YTDBConnection主要處理資料料庫連線並取出我們所要的資料,而此類別詳細說明如下:(這些說明我們通常定義在標頭檔YTDBConnection.h,如圖二所示) 資料成員 (data member)  db:QSqlDatabase 成員函數 (member function)  OpenDB(): 設定資料庫類型和名稱,並且開啟資料庫. CloseDB(): 關閉資料庫連線 getDataList(QStringList &d_List): 得到字串陣列的台灣城市資料 圖一.資料庫連線的類別 圖二. YTDBConnection.h-描述類別的構成 程式碼 由於此範例只是簡單實作,你可以參考Reference將類別修改成你要的,尤其在偵測作業系統的版本.  載點 類別說明 OpenDB(): 連線到範例Taiwan SQLite資料庫 圖三.成員函數 OpenDB getDataList(QStringList &d_List): 得到一維字串陣列的台灣城市資料 圖四:成員函數 getDataList Reference: 1. Creating an SQLite database in Qt http://developer.nokia.com/Community/Wiki/Creating_an_SQLite_database_in_Qt 2.Searching for data in a database in Qt http://developer.nokia.com/Community/Wiki/Searching_for_data_in_a_database_in_Qt

快樂的方法(2):感激的意義與影響力

圖片
圖一. 感激的意義( source:  photobucket ) 最近我發現大醫院的外科醫生經常從早上看到下午,這些醫生大部分都有一定的年齡和資歷,然而我越來越擔心台灣的外科,因為目前外科目前是靠這些有經驗的醫生在支撐著,然而台灣亂象讓年輕醫學生不敢當外科醫生.後來我想到之前在 你想要快樂? 開始感激吧! ,講者 David Steindl-Rast 提到, 感激能讓人們感到事情的重要性,或許能改變我們的環境,因為感激能讓你不再害怕和暴力,而且你會享受人與人之間的差異性,甚至自然而然尊敬每個人 .換句話說,如果你多一份感激或許降低年輕醫生對外科的恐懼,而且產生愉悅的工作環境.因此,我將利用我所觀察的台灣醫生故事解釋感激的概念. 首先,我們如何感激地生活?藉由經驗,開始察覺到每一個時刻是被給予的時刻,每個時刻都會給予你一個機會,也就是說, 每一個時刻都是一個禮物,而這個時刻將給予你機會和經驗 .就像台灣不健全的健保制度,雖然讓台灣人享受地便宜的醫療,然而分配不均使得外科醫生不但工作辛苦和風險高,而且賺得錢比起醫美少得多,因此目前當外科醫生是有熱情為這個工作犧牲奉獻,所以我們應該感激這些醫生犧牲和奉獻.或許你覺得這些醫生過得比自己好,然而我就遇過一個中年醫生每天巡房到半夜12點,甚至在某一天累到住到加護病房,結果一個月後繼續恢復看診,然後有人問他為何不好好休養?此醫生回答說:"沒辦法,我的病人都在等我,而且我也擔心病人的狀況." 由此可知,這些外科醫生多值得我們尊敬,雖然他們賺得錢比一般人多,然而他們也失去家庭生活和好的生活品質.我想台灣人應該瞧不起那些炒房價的商人們,而面對這些醫生請多一些感激,我想你給他們忙碌一天一些溫暖. 接下來, 請不要感激暴力(violence ),戰爭(war), 壓迫(oppression)和開發 (exploitation).還有也不要感激失去朋友(friend),異心(unfaithfulness),傷親之痛(bereavement) .說實話,有時候我覺得台灣媒體以看熱鬧的態度挖出別人不幸,從來不先了解造成事情的原因,而是先挖出這個人還有什麼有趣的新聞,因此經常模糊焦點,甚至讓台灣人不懂得感激,反正只要有什麼不滿就跟媒體爆料發洩.說實話這些與感激相違背,別人的不幸應該給予他們空間去處理,還有

Excel圖表: 繪製組合圖(Combination Chart)(上)

圖片
Combination Chart 最近,我常常使用C#寫程式自動化產生excel圖表,甚至遇到被要求用Excel畫出各式各樣的圖形,因此我也學了滿多有趣的技巧.目前我計畫先更新如何使用excel教學,接下來會進一步寫有關「用程式產生excel圖表」的教程. 很抱歉,有關Excel教程使用軟體介面是英文,一方面是工作需要開發新功能,另一面遇到問題,我能知道英文關鍵字,因此我能準確使用Google搜尋到我要的資料.換句話說,若你想實作將office自動化,我會建議使用英文介面進行開發. 還有,若對教程有任何疑問,請觀看教學影片.最後,測試範本的資料是隨意填,因此資料不具有任何統計意義. ps.本文章教學有錯字, 按「鑽」數應該為按「讚」數,我已經將GitHub範本修正 2014/8/11 增加文章   Excel圖表: 繪製組合圖(中) 作業環境 Windows 7 64bits Microsoft Office 2013 -English 練習範本 GitHub 初級版: example.xls 教學影片 教程 首先, 請到載點下載example.xls後,打開此檔案進入Excel畫面   圖一.下載範例Excel 接下來,如圖二所示,請依照藍色方框圈選你要畫的資料,然後請切換到[ INSERT ] (插入) ,選擇加入 2-D Column (2-D柱狀圖) 中的[ Clustered Column ]. 圖二.使用Excel畫2-D柱狀圖(2-D Column) 接著,請切換到[ DESIGN ] (設計) 後選擇[ Select Data ]進入Select Data Source (選擇資料來源) 介面,然後選擇[ ADD ] (加入) 加入新數列.   圖三.選擇加入新的參考資料 再接著,進入Edit Series (編輯數列) 介面後,請先依照橘色方框選擇[ Series name ] (數列名稱) ,然後在依照 藍色方框 選擇[ Series values ] (數列值), 最後按下[ OK ]鍵. 圖四.選取要加入的資料 其次,在Select Data Source (選擇資料來源) 介面顯示成功加入 按鑽數 後,按

Chrome隱私權(續):讓你Chrome預設為隱身模式

圖片
最近工作的時候,我經常發現我忘記登出我的gmail信箱,雖然那是公司配給我的電腦,然而此電腦經常不關機,或許哪一天駭客入侵資料就看光光.另一方面,我曾經看過我同事忘記登出電腦,由於我們公司很單純,所以無需在意隱私權問題.可是若你在大公司,我建議你在公司還是要注意隱私權,因為你不知道小人何時會出現,例如:之前HTC鬧得沸沸揚揚的間諜案.總而言之,若你沒打算在目前公司待很久,我建議你在公司還是要好好保護你的隱私資料,而方法很簡單直接將你公司Chrome預設為 隱身模式 (incognito mode). 隱身模式的好處只要你關掉瀏覽器自動清理你的資料,因此你無需再做登出的動作,而且你的email地址也不會外流! 有關incognito mode,在 之前的文章 做簡單介紹,有興趣的人可以看看. 設置教程 首先, 請在Chrome的圖示按下滑鼠右鍵後,請點選[ Properties ](屬性).   圖一. 進入Chrome的屬性頁面 然後,如下圖的紅色方框所示,請在Target中chrome.exe後方加入 [ --incognito ],然後按下[ Apply ] 改變設置,最後按下[ OK ]鍵完成設定. 圖二.Chrome設定隱身模式 最後,重新開啟Chrome成功進入隱身模式(incognito mode).   Reference: 1. Laurence Eckert , How To: Browse In Incognito Mode By Default     [online]:  https://www.youtube.com/watch?v=PVv6389Hmpk

胖子工程師辛酸史:事半功倍

上一次開會事件,由於專案經理感覺失了面子,為了讓老闆對他改觀,他在本周提出要將資訊部門的程式碼進行版本控管,目的是為了監視資料可視化的進度,甚至縮短此進度的時程,然而這項的改革使胖子的壓力更大! 雖然胖子上次留了心眼讓老闆同意三個禮拜完成此功能,然而最困擾的是每週的工作會議,第一次工作會議,專案經理竟然開始干涉到工程師寫程式的邏輯,經理常常以自己的邏輯去評論每周有關版本控管,甚至資疑資訊部門的工作效率,這些事情讓胖子心力交瘁. 因此,胖子開始思考如何讓專案經理知難而退,讓自己的專業領域不受侵犯,而今天是第三次工作會議,不但要讓老闆看到資料可視化的Demo,而且胖子留了心眼沒將資料可視化所增加的新功能上傳到Git. 老闆:"胖子,你們資訊部門已增加資料可視化功能嗎?" 胖子開啟投影片後回答:"老闆,這是我們程式摸擬結果!雖然我們成功增加資料可視化功能,然而根據FakeLemon的要求,我們仍然需要修正我們使用者介面." 老闆:"恩,很好!資訊部門能在時間期限內做出來,值得鼓勵!但是,有關使用者介面修正,由於我們有新計畫要接,我希望不要花太多時間在那裏,專案經理有什麼意見嗎?" 專案經理:"老闆,自從我們實施版本控管,我想此功能雛型已完成,因此我認為資訊部門每天只要花1到2小時,大概這周即可交貨!" 胖子(心理OS):"說的簡單,版本控管不等於功能完成好嗎?╯︿╰ 幸好我留了心眼,剛剛沒更新對資料可視化優化和增加新功能!" 老闆:"胖子,資訊部門這周能交貨和接新案子嗎?" 胖子:"老闆,我認為雖然這周交貨沒問題,但是接新案子有點困難,其實我們資訊部門針對資料可視化進行探討,我們認為此功能在將來的新案子應該會用到,因此我們資訊部門也在思考如何進行優化和增加新功能.工程師B,對吧?" 工程師B: "老闆,最近國外的確滿流行探討資料可視化,竟然我們現在正在做此功能,因此我認為我們應該趁這時候將此功能完善" 專案經理 ╰ ( ‵ □′ ) ╯ :"資訊部門不要找理由,我們新案子也很多,哪有時間給你們慢慢研究阿!" 老闆:"恩......雖然我很

Qt物件導向:什麼是類別?

圖片
在物件導向設計中,程式設計者通常使用類別去產生物件,因此類別主要描述你要產生的物件.換句話說,我們像畫設計圖似地去設計具有特定功能的類別,然後在程式像變數去初始化具有類別功能的變數,而此變數即稱為物件.然而請注意你可以產生多個物件,但類別只有唯一一個,就像一個設計圖可以產生許多產品. 圖一描述類別的構成,我們通常在資料成員使用定義符 private或protected 修飾,一方面是不允許類別以外成員函數去更改資料成員值,而且在衍生類別(derived class)可依據衍生類別需求對資料成員做不同的操作,因此成員函數通常使用定義符public修飾.其實這種受限處理資料成員的方法,我們通常可稱作封裝. 圖一.類別的構成(source:  IBM developerWorks ) 類別的基本定義 [1]  資料成員(data member)  成員函數(member function)  通常用來管理或操作資料的成員  處理的定義符( access specifiers)  public :  只要宣告物件,即可以直接存取資料成員  private:  只有類別的成員函數可以處理類別內的資料的成員.  衍生類別的成員函數也無權存取類別成員 protected:  無論基底類別或衍生類別,類別的成員函數都可以存取類別成員 Reference: Alan Ezust, Paul Ezust, An Introduction to Design Patterns in C++ with Qt 4, Chapter 2 UML basics: The class diagram, IBM developerWorks  [online]: http://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/

快樂的方法(1):你想要快樂? 開始感激吧!

圖片
圖一.微笑的裝置藝術(source: postitwar.com ) 我曾經有一段時間感到不快樂,甚至跟大多數人一樣自稱台灣是鬼島,使自己的朋友避之惟恐不及.說實話,一般人都不喜歡隨時會爆發的火藥庫,因為你的情緒會影響到他,他也已經夠累還要聽你抱怨,所以若要人親切或關心你,快樂是非常重要的第一步.而在Ted有一段精彩演講為"你想要快樂? 開始感激吧!", 講者 David Steindl-Rast 用淺顯易懂方式告訴你如何獲得快樂. 首先, 你覺得快樂的人真的會由衷感激嗎? 例如媒體報導某些偉大大老闆們,他們都過得很快樂,然而你覺得他們真的感激台灣員工的犧牲與奉獻嗎?說實話,我只看到台灣員工經常過勞死的新聞,卻沒看到這些公司真心感激員工的付出.因此,若你想要追尋快樂,千萬不能把這些大老闆當作追求目標,因為他們是靠踩著別人的屍體才能成功! 然而,諷刺的是現代人經常追求快樂,然而我卻經常從 那些不幸的人身上看到快樂 !有一天,我正在等客運去台北,後來有很可愛的身心障礙的朋友跟我兜售,我就只花了50元買了一包魷魚絲後,想不到他給我像向日葵般的燦爛微笑跟我說謝謝.那時我想為何區區50元能讓他那麼快樂,而我為什麼比他還不快樂呢? 其實,那些不幸的人比我們容易滿足,所以他們也經常感激身邊小事.因此,從他們身上,你會發現 不是快樂就會讓你感激,而是感激才會快樂. 就像我 上一篇 的感謝公車司機,請放下你的智慧手機,多多觀察你身邊事物,我相信你能找到讓你值得感激的地方. 說實話,台灣的新聞讓你變成只會批評的人,而這些話語只會傷到那些默默努力的人,其實造成不公平是這些人嗎?我想不是,而是政治,媒體與財團吧!連李安都說: "台灣人好,但政治、媒體不太好!" 最後,希望媒體好好去找出台灣美好的一面,不要整天報導負面新聞,當正義魔人去看別人隱私,甚至整天強調豪宅的美好(炫富),你們這樣的行為只會讓台灣人越來越不快樂.雖然我身邊的人不看台灣新聞,但我想台灣社會事件如此頻繁,我想媒體應該功不可沒!

壓抑的台灣:別忘記感謝公車司機

圖片
圖一.英國公車 有一天,我默默坐上擁擠的公車,然而當到達某一站時,司機為了讓人都能上車,因此他大叫著請乘客往後退,或許台灣人生活繁忙,幾乎沒有乘客理會司機的要求,因此司機的情緒受到影響, 此時,有一個老人家大叫要下車,司機就開了車門,然而老人家卻搞錯下車站嚷嚷的說下一站,車上充滿著雜音,而司機像是不知怎麼辦似看著後門螢幕發呆,最後老人家只好下車了! 可是,對司機的考驗並未結束,車上的乘客大罵司機欺負老人家,司機不理會惡言惡語,他默默地想把乘客一一送到家,然而不知哪個乘客每一站都按著下車鈴,我想司機或許意識到剛剛的錯,因此他每一站平靜看著後門螢幕有沒有要下車的人. 最後,我默默下了車..... 我不禁回想起在英國坐公車時,我不但一次就要花100元台幣坐公車才能到我學校,而且公車所經過道路沒有人亂停在馬路邊,而且英國司機與乘客之間不但有塑膠看板,甚至有很舒服的駕駛空間.其次,英國公車有一個很貼心設計,就是讓乘客在前面下車,因此英國人經過司機旁邊都會說聲謝謝.這些福利,讓我都 不禁佩服國外制度的健全,我想英國真的是認真思考如何讓司機與乘客都有愉快的一天!   比起英國司機,我不禁佩服台灣公車司機駕車技術,司機必須從那麼亂的街道一一把乘客送回家,而且我還只花區區15元台幣.甚至,擁擠空間使得乘客扶著他的椅背干擾他的開車,甚至要聞著乘客身上傳來刺鼻的味道~ 我不禁感謝台灣司機的犧牲,讓我能平安到家.謝謝他們的付出! 其實,我寫這故事的目的並不是要批評任何事物,而是希望大家不要只記得台灣壞的一面,批評與抱怨並不會讓台灣更好,而且這些言語只會傷到這些默默付出的人.因為,在台灣的每個人都很辛苦,而人是需要肯定與讚美,其實隨意給這些人一個笑容或謝謝,我想能給他們忙碌一天一絲溫暖. 批評與抱怨只會造成衝突的台灣社會,自我反省與感激才能讓台灣更美好 最後,我想跟那位司機說聲抱歉,袖手旁觀的我實在該好好反省,再一次感謝台灣所有公車司機的辛苦與辛勞.

胖子工程師辛酸史:獨木不成林

上次 胖子給團隊寄那封信 ,雖然老闆並沒有追究此錯誤,然而對於胖子而言,這是他第一次試著總結自己的工作寄信給老闆,而且希望這封信讓老闆有機會了解他,畢竟專案經理的資歷比胖子長,所以胖子認為不應該與專案經理硬碰硬. 今天到了公司的例行會議,結果突然告知老闆也要參加,而胖子突然想起計畫案的事,他感到有點緊張,因為他認為他的計畫案還達不到老闆的要求,因此他忐忑不安地參加會議. 老闆:"最近我看了一下你們所修程式bugs,然而FakeLemon公司希望增加資料可視化功能,若要增加此功能需要花多久時間?" 專案經理:"老闆,我想資訊部門應該兩個禮拜就完成,而且之前我們有寫類似功能,我一定親自監督是否完成." 胖子(心理OS):"囧rz...說得簡單,那個功能是套用JavaScript,而現在老闆是要用C++實作資料可視化,這根本沒那麼簡單吧!" 老闆:"恩,很好!資訊部門兩個禮拜後增加此功能沒問題吧!" 工程師B:"老闆,兩個禮拜可能有點困難,我們手中還要規劃FakeLemon的計劃案,而且我認為還要經過測試一下比較好,畢竟若出現上次那種基本錯誤,我想會有損我們公司形象!胖子,你覺得呢?" 胖子(心理OS):想不到我最大的對手會給我表現機會 ლ (^o^ ლ )! 這次我不會放過在老闆表現的機會,XD    胖子:"老闆,我也覺得這個時間太趕!這次出貨前,我想保險一點資訊部門還是要親自測試比較好. 而且FakeLemon是我們的大客戶,還有我認為應該要問清楚他們公司所要的呈現方式,其實之前FakeLemon跟我反應以後有關使用者介面能是否能跟他們先討論,因此我覺得多兩三個禮拜時間比較保險." 專案經理:"胖子,資訊部門一個月也太久,這不是讓FakeLemon覺得我們沒效率" 工程師B: "經理,還不是你們部門再匯入資料不好好確認,資訊部門才需要加長所花費時間!" 老闆:"恩,雖然你們這樣客戶著想很不錯,但是專案經理考慮也對,資訊部門能不能再縮短你們的時間" 胖子(心理OS):" ‧★ ,:*: ‧ \(  ̄ ▽  ̄ )/ ‧ :* ‧ ° ★ *

Qt函數: QComboBox使用技巧

圖片
這次例子依據 Qt入門篇(3):連結SQLITE資料庫 進行範例說明.由於主要對QComboBox的函數進行功能說明,因此這次就不上傳程式碼的GitHub,有興趣的人可以下載 Qt Sqlite 的範例後,進行以下的練習. 讓QComboBox增加提示訊息(Placeholder text)? 圖一. 增加提示訊息 如圖一所示,有一次我需要在QComboBox增加提示訊息,即告知使用者此下拉式選單主要增加什麼內容,那時我先用以下的程式碼的解決,然而它有很大缺點就是 讓使用者可任意添加QComboBox的內容 ,然而圖一的例子其實不需要使用者增加新縣市,因此若要使用者選擇你指定的內容,我不建議使用此方法. QLineEdit *placeholder=new QLineEdit; placeholder->setPlaceholderText(QStringLiteral("請選擇縣市")); ui->comboBox->setLineEdit(placeholder); 使用者在 QComboBox輸入內容,列出可能的選項? 圖二. 列出可選的項目 若要提示使用者知道可選的項目,你可以使用以下的程式碼.雖然它提供使用者類似搜尋功能,但是由於QComboBox可編輯,因此與1有相同的問題. QCompleter *com=new QCompleter(cityname); com->setCaseSensitivity(Qt::CaseSensitive); ui->comboBox->setEditable(true); ui->comboBox->setCompleter(com); 延伸閱讀: 1.  Qt入門篇(3):連結SQLITE資料 http://chenglearning.blogspot.tw/2013/11/qt3sqlite.html

電子紋身(electronic Tattoos): 考驗人的自制力

圖片
最近我對 「電子紋身(electronic Tattoos)」 很有興趣,然而我卻只專注此技術帶來的 好處 ,直到我看到Juan Enriquez在Ted演講"你的網上生活,變成永遠的紋身(Your online life, permanent as a tattoo)",讓我意識到科技雖然改善人類生活,然而科技產品也是一把雙刃劍,因此不當使用也可能成為你身上無法磨滅的記號. 圖一.嚴重錯誤的紋身記號(圖片來源: TED ) 在進入正題之前 , 讓我們重新定義的電子紋身, 那些科技產品屬於電子紋身的範圍? 若你認為 電子紋身就是郵票大小的電腦晶片 ,那你就把電子紋身想得太簡單了.由於最近大數據(Big Data),社交網路(Facebook, LinkedIn)和 擴增實境 (Augmented Reality)蓬勃發展,然而你有想過這些技術結合會造成什麼後果嗎?影片舉了一個很典型的例子,當有一個人到酒吧喝酒,然而若有人使用智慧手機辨識你的人臉,從網路上下載你社交網站的資料,你連一句話都沒有說,他可能就使用網路上的資料來判斷你這個人,甚至傷害你. Juan Enriquez利用希臘的故事教你如何正確使用社交網路,雖然影片很短,但是我想你會很多啟發,而我將利用台灣的例子來闡述他的概念.首先, 請注意你張貼的文章內容 .例如,台灣媒體將蔣友青 Facebook文章截圖成新聞稿 ,甚至去擅自臆測張貼者的想法.換句話說,這就代表即使本人刪掉貼文內容,不管多久網友還是能在網路上看到這些貼文和臆測之詞.還有,會不會有些人根據貼文內容,腦補你是什麼樣的人,因此不要留給別人欺凌和抨擊機會. 另一方面,Facebook也可以揭穿人的虛偽,例如范佐憲事件,網友根據他貼文內容整理出他的享樂行程,讓全台灣人知道他在靈堂前都是演出來.這些例子只讓我了解到社交網路是公共平台,由你決定你想分享什麼資訊,然而這些資訊將不只有台灣人能看到,而是跟你使用相同語言的人都有機會看到你所公開的內容.因此,就像Juan Enriquez所說 使用社交網站前,請思考你的本來的目的 . 接下來, 跟人交往請給彼此一些空間 ,不要根據社交網站的內容去猜忌對方的想法.我曾經遇過有人跟我抱怨老闆根據他社交網站的內容認為他沒認真工作,因為老闆不在辦公室,所以只要工作出問題

SQLiteStudio(1):免安裝SQLite資料庫管理軟體

圖片
之前在 Qt入門篇(3):連結SQLITE資料庫 ,我利用SQLiteStudio建立範例資料庫.雖然我可以直接可以寫程式建立此資料庫,然而有時難免寫程式時,我需要資料庫軟體來確認SQL語法取出來的資料是否自己所需要,尤其當團隊有奇怪的需求或加新功能時,其實善用SQL語法可以節省很多時間,畢竟自己的時間是有限,不可能一一為這些要求專門寫C++程式. 這篇我將介紹如何利用SQLiteStudio讀取在GitHub範例資料庫Taiwan , 以便於你擴充此範例資料庫. SQLiteStudio 優點  免安裝  支援多作業系統(Windows XP以上, Linux,MacOS X,Solaris and FreeBSD) 支援UTF-8語系 支援CSV匯入資料庫功能 SQLiteStudio 下載   載點1((Windows XP以上)   官網 測試環境 Windows 7 64bit  SQLiteStudio版本:sqlitestudio-2.1.4 安裝教程 首先, 請到 以下的連結 到官網,然後點選紅色方框中的 『 Download Windows binary Version 2.1.4 』此下載SQLiteStudio http://sqlitestudio.pl/ 圖一.下載 SQLiteStudio 然後,請到 以下的連結(GitHub) 點選 『 Raw 』 下載範例資料庫 Taiwan, 還有若下載檔名為[Taiwan.txt]請重新命名為Taiwan , https://github.com/QtTutorial/QtBasic/blob/master/Qt%20Sqlite/Taiwan 圖二.下載範例資料庫 Taiwan 其次,請打開sqlitestudio-2.1.4.exe後,請如圖三的紅色方框點選『 Add database 』的圖示. 圖三.增加資料庫選項 接著,在增加資料庫(Add database)介面,請在Database version選擇 『 SQLite 3 』 , 然後點選紅色方框 圖四.匯入資料庫的設定 再接著,在選擇檔案[Select file]介面,請到範例