Technology

什麼是演算法(Algorithm)

讀CS朋友告訴我,計算機科學/資訊工程有三本必修的秘笈,一般人是不會碰到的,碰到都不會翻開,大概是易筋經、葵花寶典和九陰真經吧。
那是CLRS,CSAPP和SICP。CLRS即1990年出版的演算法導論Introduction to Algorithms;CSAPP即深入理解計算機系統,在2003年才出版Computer Systems: A Programmer’s Perspective;早於1979年出版的SICP(計算機程序的構造和解釋), Structure and Interpretation of Computer Programs在網上有詳細的免費版本,但CS同鞋都不會選擇,因為那是近四十年前的著作啦(https://mitpress.mit.edu/sicp/)

CLRS代表了四位演算法的泰斗,包括Thomas H. Cormen, Charles E. Leiserson, Ronald Rivest, Clifford Stein. CLRS由四人last name合併得來,1990年初出版叫CLR。

Thomas H. Cormen寫的Introduction to Algorithms,對於門外漢,是相當深的著作,需要一定的數學基礎。
建議看之前,看一下BBC製作的節目,”The secret rules of modern living:Algorithms”。那麼Algorithm究竟是什麼呢?
據Thomas Cormen所說,演算法是一個定義清楚明確的計算過程,它可以輸入一些數值,從而輸出一些結果,而這個計算的步驟,就是演算法。Thomas Cormen提出了三個重要概念,非常重要,第一個是這個計算過程的法則,必定有有限的,它不能無限運作。第2個是精確,“specification must provide a precise description”;第3個是「有效」Efficiency的。這個有機會再用例子說明。

另外要介紹一下麻省的MIT 6.006(Fall 2011)課程,那是2011年的課程,介紹了什麼是sorting,頂點之類的數學概念,非常有趣,我第一次看的時候,花了近一個小時加速去看,我在想,的究竟看了些什麼!!?然後花了非常長的時間才明白一點點,學習斜坡是非常陡峭的。

用Laravel認識前端與後端,極速煉成程序猿 part 2

這篇文章是為Laravel 5.4 From Scratch注腳的。上回提到Laravel的著名教學網站laracasts。他們現在已經推出了收費計劃,但筆者認為未有購買的必要。Laravel 5 Fundamentals系列已經足夠新手讀者學習一段。

因為現在Laravel 5 還在不斷推陳出新,所以Laravel 5 Fundamentals影片中的畫面會有些許不同,但整體上的操作十分穩定。Laracasts推出了新系列的教程:Laravel from scratch 2017但建議遇上任何問題,先看看舊版Laravel 5 Fundamentals,舊版的解譯比較細緻。

第1話Meet Composer是介紹Laravel安裝前期的需要軟體,包括Composer。
第2話Basic Routing and Views是解譯處理分頁的應用。
第3話Laravel Valet is Your Best Friend
仍然是安裝在電腦的路徑教學、如何運行伺服器,是該作者的使用習慣
第4話Database Setup and Sequel Pro
是使用mysql的方法和Mac版的數據處理的軟體Sequel Pro
第5話Pass Data to Your Views
第6話Working With the Query Builder

IT前景淺談: 用Laravel認識前端與後端,極速煉成程序猿 Part 1


今天要介紹如何速成為程序猿/IT狗。

輕輕一提IT產業的重要性,為何做IT仍有前景。與其是前景,不如說你不會IT有多大影響。21世紀產業數碼Digital化,這是人盡皆知的事實,但所謂大勢所趨的經濟轉型,其實踏入2010年代後,商業數碼化才日見明顯,千禧年代商業社會仍停留在預視階段,當時的IT應用有限只是商業輔助性質,只有一些IT商品,實際上IT未能取代職位,沒有企業足夠數碼化。但2010年代起,IT在商業應用才算medium rare三成熟,漸漸成為核心競爭力。時至今日,一些高管竟然仍然認為,保持傳統的商業模式(Business Model, BM),不把資訊科技(IT)納入其BM可以一如既往般營運,甚至一些高管會大放厥詞告訴你,只要一個簡單的Landing page作宣傳,在某些Media投放「多媒體廣告」,就足夠Digital化,IT不值得花費太多、太深入云云。這個可以告訴您,這些高管完全忽略了IT產能,那些高管已是日暮西山等待被退休的,但打從心底忽視IT的高管,我想大有人在。IT化的企業與傳統企業早已拉開了一段遠遠的距離。在營銷(Marketing)和管理(Management)等重要範疇具有戰略意義。沒有IT,甚至沒有Branding和宣傳,ROI?沒有IT,門都沒有,更不需說那些如日本豐田汽車等的企業甚至把生產鏈和生產技術都IT化,制霸日本天下的故事。簡單一個例子:2016年與微軟爭相收購Linkedin的Salesforce就是商業IT化的婊婊子姣姣者,它的公司業務是代理企業的生產管理,由宣傳、訂單、銷售、客戶紀錄以至統計。Saleforce甚至是2016年全美國最高薪公司的第21位,比微軟還要高出1位(Glassdoor, 2016)。總年薪酬中位數是143,750美元,基礎薪水中位數:120,000美元。算上花紅,平均員工月薪是一萬美元。這門協助公司做生意的雲端技術,竟然將一個1999年才成立的公司追上1975年成立的微軟。可見企業IT化的產能和需求有多高。

好了,你可以說兩個都是IT公司,難以比較。那麼拿The New York Times《 紐約時報》和英國The Times《泰晤士報》IT化比較好了。英國《泰晤士報》,由1997年平均日銷82萬,跌至2010年50萬,2014年更跌至40萬份;衛報(guardian)由1997年的43萬份跌至2014年18萬份。英國報業由2000到2014年14年間,銷量足足下跌42.84%(The Media Briefing,  2014)。至於美國的《 紐約時報》,2011年推出了「咪表付費牆(Metered Paywall)」開始了網上訂閱的銷售模式,讀者可以翻閱百多年來絕大多數的archive舊聞。2014年,紐約時報的持有人Arthur Ochs Sulzberger Jr.發現其競爭對手《華盛頓郵報》(The Washington Post)設立了數碼化的戰略目標後,終於意識到《紐時》的落後,委任了兒子編撰一份詳細的《創新報告》。繼任人Arthur Gregg Sulzberger用了半年時間寫成一份長達96頁的報告,花了一年時間落成全面的數碼化。在2014-2015的年間,《紐時》提升了28%的線上流量,流動裝置(mobile+tablet)提升了50%,2015年的訂閱數首次超越其廣告收入(數位時代, 2017端傳媒,2017)。2015年,紐約時報有150萬用戶,NYTimes.com訂閱收益為2億美元(數位時代, 2017)。2017年,紐約時報錄得250萬訂閱用戶註冊量,在美國2017大選淨增長量10%,訂閱收益佔總收入近60%。後來英國《泰晤士報》也抄考了這個商業模式,然而甫推出付費牆,即失去90%讀者,不過2016年即獲得6千萬美元收益(數位時代, 2016)。2016年2月,英國《獨立報》(independent)棄守實體報章,取消了印刷版,僅僅透過營運線上。同年英國《衛報》亦因持續虧損,宣佈裁員250人。由此可見,現今營運產能取決於商業模式IT化程度。再宏觀神州大地,2016年阿里研究院報告,全中國有超過1300多個淘寶村,135個淘寶鎮,製造了84萬就業機會,其交易量就接近六萬億人民幣,這是單單依賴淘寶、支付寶的營業額,未計騰訊微訊和其他網店。

雖然很多人對於IT前景十分憂慮,猶其MNC經年裁減IT員工。2017年3月,外界盛傳匯豐會裁減IT部門120人,3月26日那一天,報導指出匯豐在印度裁減了600人。其後香港匯豐銀行120人收到解僱信,全是IT部門,儘管匯豐香港拒絕承認大量裁員,「至於你信不信,反正我是信了」。「據聞」因為這些員工大部分不是直接受僱於匯豐,而是與外判IT公司的合約,例如Accenture這些環球諮詢公司。這是很多MNC一貫手法,可以集中業務,節省開支,甚至是一些上市公司的財技,外判和借將能集中業務,減少的資源不會影響財務報告,左手交右手,貌似增加額外花費和旗下公司業績,成本和稅項理論上也可以減少。但那些間接解僱,卻是實體性的解僱,匯豐沒有裁員卻有一批銀行IT佬被layoff了。可是香港對IT專才的需求極高,很多MNC都難覓人才,猶其CTO級數的專才、數據管理。大企業只能向外地、中國吸納專才。中國內地對大數據的發展已經十分成熟,香港可以說是尚在等待起步的階段,所以很多IT公司高管都歡迎匯豐把這些專才「放生」。當然,匯豐裁減IT,與其員工高薪酬和福利不無關係,這都間接反照IT需求和前景。

(more…)

軟體概念MVC模式與SPA單頁應用淺談

現在的網頁技術發展愈來愈抽象化,大概是還原基本步。由最初能夠做到便足夠,到現在我們還會思考效能和擴展性。
MVC模式一在早在1979年代已提出的概念,用於軟體設計及運作。它就如一種三權分立的模式,大家互不統屬,從而獲得最佳效能。MVC代表了「模型」(Model)、「視圖」(View)和「控制器」(Controller)。這個理論是這樣運作的,網民一旦開啓網頁(或軟體),這時網民其實是發出一個請求,網站伺服器(或軟體)裏的「控制器」(Controller)便會傳達資訊給「模型」(Model),模型會更新資訊給「視圖」(View)。在這零點零零幾秒之間,View便會更新畫面,讓用家瀏覽。整個運算過程,由Controller在Model之間完成,前者被用家選擇和控制,後者則作為協調和規範的角色。

由於最初的網頁設計,例如一頁index.php或JSP當中,裏面包含HTML和一些運算式,這樣不太有利數式分工。HTML是一些基本表現式,但PHP等OOP程式涉及運算邏輯,兩者分離可以減少各自負擔,對於擴展和維修有很大幫助。此外Model還能分擔重覆的部分,讓View重覆使用,能夠減少重覆語句。

SPA是指「單頁應用程式」(Single-page Application)。意思是一個程序之中,以一個頁面處理大部分工作,減少網頁重新載入的部分,換句話說能減少網頁傳輸負擔從而加快瀏覽速度。SPA能夠以javascript完成,現在大多使用API和Ajax和JQuery等技術達到SPA效果。angularjs是由Google維護的一種框架技術,內裏包含了Ajax的技術,可惜速度和第一版的設計被人垢病,現在angularjs已出版了第2版,幾乎重寫了整套框架語法,其陡削的學習曲線亦令不少程序猿卻步。

數據管理101之Data Analysis基礎概念(上)——Entity Relationship Diagram(ERD)與Relational Database Management System(RDBMS)

數據管理的應用需要數據分析員處理和釐清邏輯關係。這裏要介紹一種概念技術和其作者——美籍華裔的陳品山(Peter P.S Chen)。

所謂數據只是一種的紀錄和資料,在未被處理的情況下,它只是一堆文字或檔案。在商業世界裏,數據可以說是一本天書,它能為目標導向的商業組織作出指導,當然前提是數據能被有效收集、統計和分析(這裏是三個完全不同而又缺一不可的步驟)。但在電腦應用範疇裏,我們是以如何分析呢?我們明白電腦應用其實依賴以數學式的邏輯作為語言基礎。那麼數據管理或數據分析,實際上的操作是根據什麼呢?現在的商業機構,會聘用數據分析員(Data analyst)處理數據,那個系統叫數據庫或資料庫,或者稱為「資料庫管理系統(Database management system, DBMS)」。除了電腦科學(Computer Science)外,這些分析員所學習的是「數據模型」(Data Model)理論,例如層次模型(Hierarchical model)、網狀(Network model)、關聯模型(Relational model)、鑽型(Dimensional model)和ER模型,ER模型即ERD。

Entity-Relationship Diagram(ERD)

Entity-Relationship Diagram(ERD)是一種著名的數據模式理論,現在大多軟體開發都會應用這個數據開發模式概念。運用Entity-Relationship Diagram(ERD),能夠視覺化數據個體(Entity)和它們之間的關係(Relationship)及其屬性(Attributes),用來規劃數據結構。換句話說,這個理論有助將現實世界的抽象資訊轉換為數據,讓分析員能夠量化及統計。ERD的視覺化邏輯亦有利數據分析員檢視、統計和管理。在規劃數據管理上,會將不同類型的數據分類,我們叫作邏輯設計(Logical design);在實踐和製作數據庫/資料庫上,稱為物理數據庫設計(Physical database design)。

ERD,我們可譯為「實體關係模組」。在1976年3月,台灣國立台灣大學電機工程學系畢業的陳品山,在ACM Transactions on Database Systems上發表了《The Entity-Relationship Model–Toward a Unified View of Data》一文。由於大眾廣泛使用實體聯繫模型,而這篇文章已成為計算機科學38篇被廣泛引用的論文中之一。他已被譽為全球最具軟體開發技術的16位科學家之一。早在1968年,IBM的推出一種產品IMS(Information Management System, IMS),它使用的是層次模型,一種樹型結構的數據模式。1970年,Edgar Frank Codd提出關聯式資料庫(Relational model),藉助於集合代數(Set)等數學概念來建立數據之間的關係。Edgar F.Codd在IBM工作期間提出的「科德十二定律」(Codd’s 12 rules)來建立數據模型的理論,它是ERD概念的先驅。後來更有EERD(Enhanced Enitity Relatioship Diagram)是ERD的進階加強版,加入其他進階術語。

ERD基本分為三大基本部分,實體(Entity)、屬性(Attribute)、關係(Relationship)。長方形代表實體(Entity)、橢圓形代表屬性(Attribute)、菱形代表關係(Relationship)。例如部門和僱員都是一個實體;它們的關係是部門包括員工。

但是考慮到它們關係並不平等(僱員不會包含一個部門),因此我們需要另外兩組符號標示兩者關係。 (more…)

Build a Blog with Laravel 101

Laravel is an open-source PHP web framework created by Taylor Otwell and intended for the development of web applications following the model–view–controller (MVC) architectural pattern. The very first version was created in 2011. Back in those days, there were already several frameworks among the industry.

Some of the features of Laravel are a modular packaging system with a dedicated dependency manager, different ways for accessing relational databases, utilities that aid in application deployment and maintenance, and its orientation toward syntactic sugar. (more…)

the easiest hack, sql injection

最簡單的駭客方式——SQL植入

一次我在半島冰室用膳,在旁邊的客人,一個介乎脫髮的中青年對著三五位男女同事哈哈大笑道,「聽聞SQL被喻為掃地呀姐都能夠識寫既語言。」我初時想,程式員究竟有多輕視SQL?後來發現自己的想法都有點兒政治不正確(political incorrect)。只能說,他對 SQL 的讚美與他對掃地職業的尊重相稱。或許SQL對掃地姐姐來說十分容易上手,或是寫SQL的人都很腳踏實地「down to earth」,願意落手落腳(get hands dirty)。言歸正傳,所謂的SQL即是代表Structured Query Language。幾乎無程式員把SQL之為程式的語言,它就像是上網時候用來Search搜尋的格式,用來查詢數據庫的數據。就像上google 搜尋 “site:luke.hk Luke”,你只會屬到特定網址的資料一樣,是一種格式。
(more…)

macOS利用Terminal終端機內建伺服器——網頁編寫101

今次要介紹在蘋果電腦裏建立伺服器和網頁。這個教學快則需時5分鐘,如果你能順著完成,能夠證明你的智商絕不低於70,前提是你懂得基本中文和英文字母。如果你一早懂得建立伺服器,恐怕你不會讀到這裏。想了解程式詳情請參考基本的網頁程式簡介,WCMS101 – 網頁內容管理系統建設教學(上)。當完成本篇後,你會懂得什麼是「localhost」,再完成(上篇)和(下篇),你可以完全建立一個屬於自己的網站了而不需假手於人。那是以往價值數萬港元的架設技術,我的天。我們要需要一部蘋果電腦macOS和五分鐘時間。例如Mac mini,macbook等等。注意:其他產品如iphone、ipad、Apple watch、Apple pencil是不能夠做到的,所以麻瓜們請不要拿Apple pencil研究五分鐘。

在這個實踐裏,將介紹到一些Terminal一些基本用法,例如一些術語cd和ls的意思和作用,以及一些程序員的習慣,例如以“//”標示注腳。事不宜遲,寫一個內建的初階網頁十分容易,首先要了解什麼是網頁Website,在人類史上第一個使用Website的人是Tim Berners-Lee,相信大家都很清楚,那麼可以馬上開始。(開始計時)

Step 1:如何找到Terminal終端機

1.在桌面按launchpad:
2.找Terminal:
可以在螢幕最上的Search輸入Terminal,便可找到

Terminal是MacOS(Macintosh operating systems)裏的應用程式。它是透過指令(command line)執行功能。它的功能包括查看、管理檔案。就像是沒有介面的的Finder和Windows檔案總管(File Explorer)。這類程式還有其他稱呼:cmd, prompt, console 或是 terminal(終端機)。

Step 2:初階使用Terminal終端機

1.打開Terminal,它是一個由上至下看,由左至右讀的視窗。以下是第一次使用Terminal的範例:

Last login: Tue Feb 21 15:06:44 on ttys004

它顯示Last login(最後登錄):Tue(星期二) 21(日子) 15:06:44(小時:分:秒) on ttys001(終端機術語)。
2.

Luke:~ luke.hk$ 

Luke是你台電腦名稱, luke.hk是你登入帳戶的名稱。$後面是輸入指令(command line)的位置。
3.直面輸入以下文字,按[輸入]。

cd ~

cd(change directory)意思是轉移路徑,~意思是當前用戶home directory。
4.直接輸入以下文字,按[輸入]。ls意思是「列表」(List),Terminal會列出當前目錄所有檔案

ls

此時你會看見
Desktop、Download、Documents等等,它們是桌面、下載和文件的檔案夾
4.輸入cd Download/,可以去到「下載」

cd Download/

5.輸入ls,可以顯示「下載」夾下的檔案。

ls

6.cd ..是跳到前個的目錄,例子如下

cd ..

7.再次輸入ls,可以顯示再到Desktop桌面、Download下載、Documents文件等等的檔案夾

ls

方便小貼士:當你輸入cd Des後,按[tab],它會自動幫你填寫好Desktop,例如你當下有那個資料夾的話

cd Desktop

(more…)

WCMS101 – 網頁內容管理系統建設教學(上)

內容管理系統(Content-Management-System, CMS)目的是用於管理和處理數碼檔案,包括文字和圖片,亦用於群組軟體開發(Collaborative Software)。這些程式最初都是軟體software或內聯網Intranet的形式建立在操作系統(Operating System, OS)之上,大多用Java寫成。但是在千禧年後,隨著各種開源語言如Perl(1989), Python (1994), Php(1996), Ruby(1995)和互聯網硬件配套逐漸成熟,各種免費的開源內容系統應運而生,CMS變得更便利,能夠輕易地建立在一般主機之上,並在互聯網上公開使用。
(more…)

Back
Copy link
Add to
Email
Facebook
Whatsapp
Gmail
More
Save
Like
Cancel