2013年12月28日 星期六

重啟分享

本來想要在開始新工作中間,把一些在前一分工作以及中間在家自修時的心得分享。誰知道新工作要作的事情很多,加上一些有的沒有的雜事,只能勉強把學習篇的部分打完。教學的部分,等到之後有時間再補上了。因為新工作帶來的挑戰,也讓我重新思考自己的學習和教別人的態度是否合適,要經過一段時間的沉澱、驗證它的正確性之後再來作分享,會說得比較具體一些。

2013年10月12日 星期六

談程式學習…初學與教學 — 學習篇(三)

(發現自己習慣的分段寫法,好像不適合 blogger 的顯示,試式改變排版試試。)

底下分享自己經歷過,或是看過一些新手常進入的誤區…

誤區一︰程式只不是寫給「現在的自己」看的…

在指導新人的時候,偶而會聽到「這個程式能跑就好,你不要管我用什麼變數、函數名稱」的回應。如果今天只是一個用來展示,未來將會重寫的程式,換言之就是用完即丢的程式,的確沒有必要要求這些。但是在撰寫程式的過程中,修改、擴充既有的程式,實際上佔絕大多數的時間。既使是常常接外包,作新案子的公司也一樣,總是希望能夠留下一些重複功能的程式片斷,能夠作為函數庫引用,或至少好讓人剪剪貼貼。

面對別人或是幾個月前自己寫程式碼是無法迴避的問題,所以程式碼的可讀性,必要註解的撰寫是重要的。並不是要求剛入門就必須要寫出多優良的程式,而是「替未來看這段程式的人著想的心」,必須一開始養成。否則工作之中除了抱怨別人的程式碼很亂很糟之餘,也在不斷產出「傷害別人的程式」,不論是腦細胞,還是感情。

怎麼寫出優良的程式,這是需要許多經驗累積才能學會的。雖然有這類的專書,但是沒有經歷過那些讓人不愉快的經驗,那些原則很難被讀到心裡。常常思考,這段程式在幾週後的自己,能不能看得懂,慢慢的改進,才能寫出更好的程式。

2013年8月2日 星期五

安裝 Lenovo 的 System Update 程式

最近還原了公司在使用的兩台 Lenovo ThinkPad,系統是 Windows 8。讓我見識到既使是同一個型號,同一組回復媒體所還原的電腦,也能夠有各種不同奇奇怪怪的問題。其一個就是安裝 Lenovo 的 System Update 這套更新系統驅動程式的軟體。自從完成回復後,一升級這套軟體的版本後,問題就發生了。

先是說找不到一個叫作 ConfigService.exe 的檔案,就想說到官網下載程式重新安裝一次,將缺少的檔案重新寫到硬碟裡,安裝時要求先移除之前的版本,同意後卻在將出前安裝歡迎畫面的地方,跳出 Windows Installer 的參數說明視窗,讓人覺得莫名奇妙。a

呼叫 Windows Installer 軟體安裝既使是要帶參數,絕大多數時候都是被寫進安裝程式中,像這樣跳出參數說明,但又沒有讓我輸人參數模式。問題的狀況也不是什麼錯誤代碼,或是一個能夠識別問題的關鍵字可以讓我到 Google 上查詢。只能用無法安裝作為條件去找。

中間查到要先去檢查、刪除 System Update(SUService)的系統服務(由 Lenovo 提供),應該是前一次移除後沒有重開始,因此就留在系統的東西。照作之後問題依然沒有解決。查了幾篇和這個問題接近的討論串,最後都沒有看到成功的解決方式。發生的時間由 2008 年前到現在的自己都遇到。

就在快要放棄,考慮是不是要再重新回復一次的時候,讓我看到對岸這篇文章,試了裡面的參數,在命令列工具中加入參數後,居然就很順利的安裝起來了。雖然仍然不知道到底是什麼原因造成這個問題,但是手上的工作不少,就不多細想,先能夠更新驅動程式再說。

將其中最關鍵的一句話記下來,免得原始網頁不見,就不知道該怎麼辦了。
「systemupdate314-2008-5-15.exe -s -a /s /v"/qn"」

PS. 猜想可能和 Windows 8 系統的某個地方出錯有關係,因為不能順利安裝的除了 System Update 程式,也包含小紅傘防毒,卡了我一天之後只好去找另一套免費的防毒軟體。也許有機會再試試加上這些參數。

Windows 8 在我心中的評價又再低了一些…

2013年7月30日 星期二

MySQL 查詢轉小寫設定

在之之前學習 Drupal 作為網站開發架構的時候,已經習慣了它使用底線(_)來分隔資料表名字的各個單字,一直以來對於全小寫的資料表命名法已經習以為常,只覺得不過是一種風格,並不會認為有什麼特別的原因。 直到最近將外包的網站案子放到 Linux 環境下,被整過之後的才明白,相信未來還是可能遇到這個問題,作個筆記備查。

問題在於 mysql 不分大小寫的特性,還沒來得及深入研究是不是和資料庫的校對設定有關,至少平常常用的「utf8_general_ci」,本身就是表示的不分大小寫(ci)。所以既使在取資料表名字的時候混用大小寫,使用 mysqldump 匯出的時候,仍然會通通被轉換成小寫。

而資料表中的欄位,根據自己觀察,在匯出的時候大小寫是被保留下來的,所以問題主要不會發生在這裡,而是在會被改成全小寫的資料表名稱。因為 MySQL 要依靠程式傳給它的名稱去找到對應的檔案,讀取資料。在 SQL 語法被寫在程式碼中,如果是以原始的資料表名稱(分大小寫)的方式撰寫,而 MySQL 卻已經將之轉換為全小寫,就會有所差異。

如果是在 Windows 這種不分大小寫的作業系統,不會出現什麼問題,因為任何大小寫的方式,通通代表同樣的檔案。但是對於 UNIX Like 的系統,則會產生「找不到資料表」的錯誤。如果不修改程式碼,想要解決這個問題的話,就需要在設定檔中(my.cnf)「[mysqld]」的部分加上…
lower_case_table_names=1

表示所有的查詢都要強制轉換成小寫後才執行。

PS. 印象中, ci = character ignore,詞性有沒有用對不清楚,但確定是這兩個單字,表示忽略大小寫差異。

2013年7月3日 星期三

談程式學習…初學與教學 — 學習篇(二)

每次學習一種新的程式語言,都會讓我有「回到新手」的感覺。
工作上「需要早點應用新技術」的壓力,促使我嘗試用其它語言學到的知識,來解釋新的語言,
就結果而論,還滿不錯的,除了加快學習,上手的速度,也能夠對原來的知識有新的了解。
底下分享一些我學習程式的觀點。

練拳不練功,到老一場空… 那程式的基本功是什麼?


前文提到,理解是學習程式的真理。但是新手常面臨到的問題,卻是看似遠無止境的東西需要理解。
就事實而言,程式語言是一種集體創作的產物,所以總是有新的東西出現,可能是一個研究成果,或是一個框架想法。
因此對於新手,甚至是還沒有入門的人而言,我建議先嘗試去解釋基本規則背後用意,能夠講得出來,就表示有一定的理解。
不用太擔心解譯錯誤,當發現自己的解釋有誤,就去修正,這樣會慢慢的接近正確的想法。。
也許在剛開始的時候,不得不混雜著一些死背東西,當解釋的比例越來越多,需要死背的東西也相對減少。

2013年7月1日 星期一

談程式學習…初學與教學 — 學習篇(一)

緣起…學程式也好幾個年頭,有感程式領域之廣,讓人能夠同時體會老手與新手的感覺。
心中的一些想法,想要訴諸文字,希望分享給在程式路上的舊雨新知。
也期望能夠帶給人一些不一樣的想法,也歡迎批評,指教。

先簡單介紹一下自己…
  • 不是生在程式之家,也不是相關科系畢業,學習程式是前半段,只有電腦書而沒有別人討論。
  • 學習程式的資質並不高,常對人說「光一個 Class 的概念,就花了我一年的時間才了解」。
  • 對於自己經歷過一點命令列時代感到幸運,對於下指令,以及之後學習其它作業系統有很大的幫助。
  • 玩遊戲的功力很差,所以常用修改軟體,誤打誤撞讓我明白了記憶、變數的使用。
  • 程式功力不曾進入「高手」的領域,一直在數種不同的程式語言間打轉,被不同平台、框架玩了許多年。
  • 在某種語言前,會是完全的新手,但是在另一種語言前,經驗足夠讓我指導新人、完成專案。
  • 除非是常在講的專有名詞,否則完全記不起來,徹底表現出「看過即忘」的特質。

2013年1月13日 星期日

悲劇導演

記得相聲段子裡頭有這麼一段,說中國人愛比較,尤其愛比慘,當慘到一種境界就不再是「慘」,而是「美」了。人們會說︰「要不是當年怎麼怎麼,我就不會怎樣怎樣。」要先描繪出那個時代的慘,再說明自己的無奈與苦處,至於狀況最後有沒有變好,並不是比較的重點,重點是「我比較慘」。

生活不全然悲劇,所以不總是有「比慘」的素材可以用,因此有人就開始「創造」屬於自己的悲劇。有些人只是自怨,有些人則是想著要把身邊的人也拖進悲劇中。書上說這種人喜歡沉浸在這種悲觀的環境和情緒中,藉此來加強自己的存在感。

自己曾經的日子中,也有過一段覺得自己人生黑白的日子,慢慢走出之後再看看其它人,卻依然不能夠理解那種自找罪受的行為,到底有什麼魔力讓人沉迷在其中。明明幾個簡單改變能夠解決的問題,更願意蒙上自己的眼睛,下錯誤的決定來讓問題擴大。我猜是為了創造出自己心的希望的那一種悲劇吧!