每一個可以努力的日子,都是一份厚禮。
編程
Code is Poetry.
curl_exec和wget執行太慢,IPv6惹的禍
2012 6月 18th
今天在使用 php 的 curl 函數時,發現需要等待大概 5 秒才能得到結果,實在是太慢了。而同樣一個 url 使用瀏覽器訪問,則立刻可以獲得頁面。後來又發現,即使不用 php,使用 Linux 下的原生命令 wget 去獲取網頁,也很慢。這真是太奇怪了,看上去不是程序的原因,而是網絡設置的問題了。
Microsoft AJAX Translation WordPress Plugin
2012 3月 2nd
The Microsoft AJAX Translation WordPress plugin offers a “Translate” button that allows readers to translate your blog’s posts into a specified language with a quick, light ajax call to the Microsoft Translator API.
Why Microsoft AJAX Translation?
As of December 1, 2011, Google Translate API v1 is no longer available; it was officially deprecated due to the substantial economic burden. Google Translate API v2 is now available as a paid service only, and the number of requests your application can make per day is limited.
This is dramatic news. All of those “free” programs that hitchhiked on Google Translate are history. A lot of wordpress plugins that depended on the free Google Translation Engine also not work any more.
Fortunately, Microsoft still provide a free translation API for programmer. That’s why I decide to develop this plugin, which uses Microsoft Translator API. It is a surprisingly adequate substitute for Google Translate.
MVC之患上肥胖症的Controller
2012 1月 11th
來這邊負責做的一個項目,用了一個叫做 Yii Framework 的 MVC 框架,剛開始的時候自以為結構很穩健(當然,是相對於現有的爛系統來講)。但是隨着對業務邏輯理解的深入,我開始意識到問題的嚴重,我錯誤地理解了 MVC 中的 Controller,想當然地根據以往的經驗,把所有的業務邏輯都放在 Controller 的 action 中去實現,於是,每一個 Controller 的代碼都上千行,越來越臃腫。
最終導致我下定決心對這兩個月工作進行重構的,是一個對外開放 API 接口的需求。按照現在的架構,代碼基本無法復用,我需要把很多功能再重複寫一遍,這實在是無法接受的。面向對象編程不僅僅是課本上的名詞啊!真正開始實踐才發現要有面向對象意識,有全局觀,是多麼難得的一件事情。
【暴走漫畫】坑爹的UTF8和UTF-8網頁編碼
2012 1月 2nd
一、遇到的問題
曾經被字符集間複雜的轉換搞怕了,正好新項目要求國際化,需要能夠顯示多種語言,於是一開始就規定統統使用 UTF-8 編碼。
- 所有代碼文件使用 UTF-8 編碼存盤
- MySQL數據庫所有表,所有字段設置 Collation (中文翻譯為“整理”?)屬性為 “utf8_general_ci”
- 所有頁面輸出
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
即便是這樣,PHP 從數據庫中讀取內容,顯示到網頁上,還是出現了亂碼,英文沒問題,中文統統都是?問號。這樣也行?艱苦卓絕的 debug 開始了……
Python寫爬蟲——抓取網頁並解析HTML
2011 6月 10th
CUHK 上學期有門課叫做 Semantic Web,課程 project 是要搜集整個系裡面的教授信息,輸入到一個系統里,能夠完成諸如“如果選了A教授的課,因時間衝突,B教授的哪些課不能選”、“和A教授實驗室相鄰的實驗室都是哪些教授的”這一類的查詢。這就是所謂的“語義網”了啊。。。然而最坑爹的是,所有這些信息,老師並沒有給一個文檔或者數據庫,全要靠自己去系主頁上搜集。唯一的想法是寫個爬蟲,令人悲哀的是,所有做這個 project 的同學,都是純人肉手工完成,看得我只想扶牆。。。
從網頁中抓取特定信息,我覺得這是一個普遍性的問題,以後經常會遇到。幸虧那個 project 只是需要我們系的所有教授的信息,大家人工也就算了。如果需要抓取的信息是海量的,舉個栗子,把淘寶上所有的商品目錄抓下來,那豈不是要吐血而亡?我決定好好把爬蟲研究一下。 更多 >
計算圓周率Approximating Pi – Map Reduce Program
2011 4月 11th
MapReduce主要應用於大規模數據處理,特別是在搜索引擎中各種鏈接的訪問統計,進而影響到頁面關鍵詞排名等等。今天這個例子卻是講的利用MapReduce來對圓周率Pi進行近似計算。考慮下面這張圖:
我們知道,正方形的面積 As = (2r)2 也就是 4r2. 內嵌圓形的面積 Ac = pi * r2. 於是 更多 >
C/C++反序輸出字符串總結
2011 3月 21st
2年前去T公司面試,面試官給了我一張紙一支筆,說寫個程序吧,輸入一個字符串然後反序輸出。我問輸入輸出是用函數參數呢還是系統I/O,面試官說隨你便,寫完了說說各有什麼優缺點吧。當時我大三,沒有參加過ACM沒有實驗室經歷除了課程設計也沒寫過什麼程序,完全小白。當然至今也仍然是菜鳥一隻,不堪回首啊。
方法一:據說有庫函數strrev()啊 更多 >
學習MapReduce分布式程序設計方法
2011 2月 9th
MapReduce是Google提出的一個編程框架,用於大規模海量數據處理,其主要思想就是分治(divide and conquer)。我們希望程序有並行處理能力,於是就可以使用多台機器同時處理加快速度。
然而,怎樣分派任務給不同的計算機?如果任務單元的數量大於可執行任務的計算機的數量怎麼辦?計算需要使用到一些中間結果怎樣處理?如果某些計算機在處理任務時中途死掉了呢?怎樣才能知道任務已經處理完畢?問題主要來自於任務處理節點的交流(比如狀態信息),以及對共享資源(數據)的訪問。要解決這些棘手的問題,我們需要有一套完整的同步機制:同步鎖信號量、條件變量(等待、通告、廣播)等等。
現有的一些編程模型有共享內存(pthread)、消息傳遞(MPI)等,架構的設計模式有主從式(Master-Slaves)、生產者消費者流式(Producer-consumer flows)等。Map Reduce結合了函數式編程語言的思想,使用key-value對作為輸入和輸出。開發者只需要實現map(key, value)和reduce(key, value)兩個功能。map()會產生中間結果作為輸出,而這正是reduce()的輸入。中間結果經過reduce()產生最終結果。類似以下模型:
map (in_key, in_value) ->
(out_key, intermediate_value) listreduce (out_key, intermediate_value list) ->
out_value list
具體的原理可以參看Google發表的關於MapReduce的論文。從應用開發的角度,本站的MapReduce分類下有一些python示例,可以作為初步入門學習。最簡單的方法就是利用管道來進行代碼測試,例如: 更多 >
反向索引Inverted Index – Map Reduce Program
2011 1月 4th
Inverted Index (反向索引)是搜索引擎需要做的一件經常性工作。在Google提出Map Reduce分布式編程框架中,這是一件很容易完成的事情。下面就是一個python寫的示例。 更多 >
單詞統計Word Count – Map Reduce Program
2011 1月 4th
在學習Map Reduce方法時,Word Count(單詞統計)程序是最基礎的入門訓練。不同的寫法會有不同的執行效率,下面是用python寫的一個示例。 更多 >