開發者應該都知道編程界有一頭大象,代表的形象。那麼你們知道為什麼要用大象作為PHP的吉祥物嗎?
「大象」是怎麼誕生的?
1998年,我決定開始學習PHP語言。作為一個圖形設計師,我想學習如何用動態語言為自己做一個個人網站。在我學習的過程當中,我發覺到這門語言和其應用的強大本領。自然地,我開始畫關於PHP的畫了。所以,我創造了第一頭「大象」,用圖片來說明PHP的強大…
1999年我第一幅」大象」的畫
畫這張圖片只是...
閱讀全文
文件分片
函數
1
2
3
4
5
6
7
8
9
10
private int writeSplits(org.apache.hadoop.mapreduce.JobContext job,
Path jobSubmitDir) throws IOException,
InterruptedException, ClassNotFoundException {
JobConf jConf = (JobConf)job.getConfiguration();
int maps;
if (jConf.getUseNewMapper()) {
maps = writeNewSplits(job, jobSubmitDir);
} else {
maps = writeOldSpli...
閱讀全文
整體流程
簡單的代碼就可以運行一個作業
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Create a new JobConf
JobConf job = new JobConf(new Configuration(), MyJob.class);
// Specify various job-specific parameters
job.setJobName("myjob");
job.setInputPath(new Path("in"));
job.setOutputPath(new Path("out"));
job.setMapperClass(MyJob.MyMapper.class);
job.setReducerClass(My...
閱讀全文
本文假設了解 boost::function 相關用法
首先需要包含的頭文件為 boost/function.hpp
裡面內容比較簡單
1
2
3
4
5
6
7
8
9
10
11
# if BOOST_FUNCTION_MAX_ARGS >= 0
# include <boost/function/function0.hpp>
# endif
# if BOOST_FUNCTION_MAX_ARGS >= 1
# include <boost/function/function1.hpp>
# endif
# if BOOST_FUNCTION_MAX_ARGS >= 2
# include <boos...
閱讀全文
boost 中包含了許多奇技淫巧的代碼,這裡分析宏的自身迭代
以這樣的宏代碼調用
1
BOOST_PP_ENUM_PARAMS(4, typename T)
它的宏展開為
1
typename T0 , typename T1 , typename T2 , typename T3
這在boost中被多用於簡化代碼量 比如 boos::function 中
下面來分析這類宏的具體實現
宏1:
1
#define BOOST_PP_ENUM_PARAMS(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_PARAMS_M, pa...
閱讀全文
模板函數的重載遵循SFINAE原則(substitution-failure-is-not-an-error):當一個模板函數的返回值或參數類型無效的時候,該實例不會參與重載解析,也不會導致編譯錯誤。
所以常用 is_same enable_if 等
is_same 表示兩個類型是否相同 一般來說代碼是這樣實現的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// stl 實現 4.1.2
template<typename _Tp, _Tp __v>
struct integral_constant {
static const ...
閱讀全文
Octopress 是一個靜態博客系統,在我的 VPS 上搭建了這個 Blog 後,每一次寫新的日誌就需要在本機生成靜態頁面再通過 rsync 同步到伺服器,這是個繁瑣的過程,主要在於本機上也要安裝 ruby 環境和 Octopress。如果在其他受限的環境下就只能存儲編寫的 markdown 文件,存儲待以後發布或者 ssh 到 VPS 上發布,這是個比較噁心的過程。
Git 是一個分散式版本控制工具,如果 Blog 存儲在 git 伺服器上,那麼就將版本和存儲結合在一...
閱讀全文
一般情況下,程序出現 segmentation fault,可以有多種方法 debug,利用 log 能找出程序 90% 以上的 bug,剩下的簡單一點可以採取二分法注釋掉代碼或者祭起 gdb 這個大殺器。但是有的時候,gbd 給出的 crash 上下文其實並不是真正發生問題的第一現場,在多線程程序設計中,這種情景會讓 bug 的追查陷入誤區。
介紹一個內存 debug 的工具, electric-fence。 我手頭的版本是 2.1.13。
electric-fence 的原理是重寫 malloc(3) 和 ...
閱讀全文
討論模板的顯式實例化之前,先弄清楚什麼是模板的實例化。
模板的實例化 : 指的是用具體的類型替代了模板參數的一個過程。這個過程的產物是一個模板的實例。
另外,只要在代碼中正確使用模板,編譯器會自動引發一個模板的實例化過程,這叫做隱式的(implicit)實例化。
例如:
1
2
3
4
5
6
7
8
9
10
11
#include<string>
#include<map>
template<class T>
void Foo(T t) {
}
int ...
閱讀全文