2012年11月30日 星期五

清查反媒體壟斷學生名單?或關心學生?

這是今天在新聞媒體看到的,究竟事情的真相是什麼,我真的很想知道。

延伸閱讀:

再談「專項備案」

2007 年時,我整理了一篇 "大陸的網友架設部落格原來還要申請「專項備案」呀!" 的文章,最近在網路上爬文時,突然發現一些有趣的狀況,所以決定再來談談「專項備案」這東西。

2010 年 7 月間,中华人民共和国中央人民政府的網站上發出了一篇 "国发〔2010〕21号" 的文件,指出了 "国务院关于第五批取消和下放管理层级行政审批项目的决定",其中在 "工业和信息化部" 一項裡取消了 "互联网电子公告服务专项审批(备案)"。

在 "国务院取消BBS专项备案:10年审批终到头" 這篇文章裡也對国务院取消「專項備案」作了補充。

對此,大陸的網友們應該會感覺到非常開心吧!

不過,事情真的有那麼美好嗎?我刻意再只爬了 2012 年的文,其實似乎不是這樣呀!

下面這是發表在 2012 年 11 月 12 日的文章,發文者在標題寫著 "[备案咨询]博客备案未通过竟因需要“论坛专项备案”"。看來,這位網友在兩個星期前想使用 Wordpress 架設了一個博客 (部落格),但卻因「專項備案」而無法成立。

2012 年 11 月 23 日被網友張貼出來的 "北京电信通网站备案注意事项" 這個文章依舊說明了:

《互联网电子公告服务管理规定》中要求,开办电子公告服务须办理专项备案,未经批准不得开办BBS、博客、社区论坛、分类信息等网站内容。

那麼,究竟現在大陸的網友架設網站、論壇、部落格這些東西要不要經過有關單位「備案」的動作呢?來看看 "个人网站论坛备案到底还要不要备案" 這篇文章怎麼說。

任何一個法治國家,若架設個人網站討論色情、毒品等犯法情事,這是不被允許的。不過,請注意,在一些大陸的網友討論「專項備案」的文章裡,並不見得會很明確將「政治」這個需要「審查」的內容寫出來。那麼,究竟在大陸架設網站討論政治議題可行嗎?

另外,在 "網站備案從註銷到重新審核通過全過程" 這篇文章,大家也可以看到一個很有趣的過程。不過就維護個部落格呀!怎麼連部落格都有「黑戶」這東西呀!

最後,再來一貼最近的文章,在 2012 年 11 月 5 日被網友發佈出來的 "四川通管局重启论坛专项备案 年底未办理将关站" 這篇。

2010 年由国务院發佈說取消的「專項備案」,在 2012 年的 11 月,中国电信的四川分公司又重啟了耶!那又意味著什麼呢?

2012年9月4日 星期二

Using 'ccache' to build Android

在 android.com 的網站上有段說明在編譯 Android 可以使用 CCACHE 來加快編譯的速度,很好奇究竟可以影響多少,於是我便按說明試了試。

首先,依 "Downloading the Source Tree" 及 "Getting Android-x86 source code" 的說明下載了 Ice Cream Sandwich (Android 4.0) 的 X86 版本程式碼。

接著先試著在使用 CCACHE 時編譯。執行下面這個指令進行第一次編譯:

time make iso_img -j2 2>&1 | tee logs/`date +%y%m%d-%H%M%S` 

耐心等待它編譯完成後,看了看 time 指令的回應,約使用了 305 分鐘。嗯…看來那台機器只能拿來玩玩了,真要改東改西的話,大概會很悶吧!

real    304m11.544s
user    561m15.453s
sys     28m19.942s 

OK,接著執行 m clobber 將所有編譯的產物全部清除,然後再執行同一個指令編譯一次。這回所花的時間明顯減少了許多:

real    103m54.481s
user    168m58.174s
sys     16m45.295s 

果然,CCACHE 是可以大量減少編譯時間的。這篇只是簡單看看 CCACHE 的效果,所以前後兩次編譯並沒有修改任何一行程式碼,至於如果有修改了程式碼,這篇文章的效果僅供參考唷!哈!

延伸閱讀:

2012年8月2日 星期四

SyntaxHighlighter 3.0.83 的設定

2009 年設定使用 SyntaxHighlighter 時,我選擇了 2.0.320 這個版本,然後就一直這麼用到最近,只是偶爾會覺得它載入頁面有點慢。這兩天發現 SyntaxHighlighter 早在 2010 年改版成 3.0.83 版,爬了爬文又反覆測試之後,終於將 SyntaxHighlighter 3.0.83 設定完成。

然後,我又將從 2009 年開始到現在的文章全部翻看一遍,只有幾篇用了 SyntaxHighlighter 耶!

噗~~~ 我還以為會有很多篇呢?這幾篇剛好讓我拿來測試 SyntaxHighlighter 的設定。

以下也記錄改成 SyntaxHighlighter 3.0.83 時,在部落格版面的範本裡添加的內容:

<link href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" rel="stylesheet" type="text/css"></link>
<link href="http://alexgorbatchev.com/pub/sh/current/styles/shCoreDefault.css" rel="stylesheet" type="text/css"></link>
<link href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css" id="shTheme" rel="stylesheet" type="text/css"></link>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushAS3.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDiff.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJavaFX.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPlain.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPowerShell.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushScala.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js" type="text/javascript"></script>
<style>
.highlightsetting {
    overflow-x: auto !important; /*修正下邊滾動條之 BUG*/
    overflow-y: hidden !important; /*修正右側滾動條之 BUG*/
    border: 1px solid #2187BB; /*加入程式碼邊框*/
}
.highlightsetting .line.alt1 {
    background-color: #EEE !important; /*这个表示奇数行颜色*/
}
.highlightsetting .line.alt2 {
    background-color: white !important; /*这个表示偶数行颜色*/
}
</style>
<script type="text/javascript">
    SyntaxHighlighter.config.bloggerMode = true;
    SyntaxHighlighter.defaults["class-name"]="highlightsetting"; // 自定義 CSS 設置
    SyntaxHighlighter.defaults["auto-links"]=false; // 超連結設定顯示為文字
    SyntaxHighlighter.config.space=" "; // 消除 Chrome 複製時的 BUG 空白
    SyntaxHighlighter.config.stripBrs=false; // 略過 Blogger 之 br 標籤
    SyntaxHighlighter.all();
</script>

2012年8月1日 星期三

Linux 的 time 指令

Linux 有個很有意思的 time 指令,可以用來查看另一個指令的執行時間,例如執行 time helloworld 會顯示 helloworld 這支程式的執行時間。

time 指令的返回值包含「實際時間 (real time)」、「用戶態 CPU 時間 (user CPU time)」及「核心態 CPU 時間 (system CPU time)」。其中,

  • real time 表示後面所接的指令或程式從開始執行到結束終止所需要的時間。簡單講,當一個程式開始執行瞬間看一下手錶記下時間,當程式結束終止瞬間再看一次手錶,兩次的時間差就是 real time。
  • user CPU time 表示程式在 user mode 所佔用的 CPU 時間總和。多核心的 CPU 或多顆 CPU 計算時,則必須將每一個核心或每一顆 CPU 的時間加總起來。
  • system CPU time 表示程式在 kernel mode 所佔用的 CPU 時間總和。

所以,以下的想法就不一定成立:

一:real time = user CPU time + system CPU time

這裡舉一個比較極端的例子,假設我執行 time sleep 10 這個命令,time 會返回給我的訊息如下:

real    0m10.003s
user    0m0.004s
sys     0m0.000s 

因為動作是「睡 (sleep)」10 秒,從 sleep 指令下達到它結束終止共經過 10 秒,所以 real time 的值是 10 秒。但,sleep 指令在 user mode 及 kernel mode 都沒有佔用 CPU,所以 user CPU time 和 system CPU time 基本上都是「零」。

二:real time > user CPU time + system CPU time

這個式子若是在單核心、單顆的 CPU 上,通常有成立的可能。

但,在多核心或多顆 CPU 的環境,卻往往可能出現 user CPU time + system CPU time > real time 的狀況。甚至我們在編譯大量的程式時,經常執行 time make -j2time make -j4 的指令,往往得到的 user CPU time 值都可能大過 real time 值。

延伸閱讀:

2012年7月31日 星期二

使用 VMware / Android-X86 取代 Android SDK 裡的模擬器

在 "試玩 X86 版本的 Android 4.0.4 (Ice Cream Sandwich branch)" 及 "在 VMware Player 試玩 Android 4.0 幾點筆記" 兩篇文章裡,Android 4.0 在 VMware Player 跑起來了,這要好好感謝網路上許多開發者前輩們的辛苦努力,筆者在 VMware Player 跑 Android 這件事上,花最多時間的大概只是下載程式碼和編譯這兩點吧!

接下來,來看看如何將 Eclipse 裡寫好的 Android 程式安裝到 VMware Player 裡的 Android 4.0 吧!既然網路已經設定妥當了,當然直接想到的就是透過 TCP/IP 來使用 ADB 了。翻一下之前寫的 "How to Use ADB over TCP/IP?" 這篇文章,只要設定 service.adb.tcp.port 這個變數也就搞定了。

確認 service.adb.tcp.port 這個變數設定成 5555 後,重新啟用 adbd,然後在 Windows 端開啟一個 DOS 視窗,執行 adb connect 192.168.245.130 就可以連接裝置了。其中 192.168.245.130 是 VMware Player 裡的 Android 4.0 獲取的 IP 位址。

在 DOS 視窗裡連接裝置後,自然在 Eclipse 也可以藉由 DDMS 使用這個 Android 裝置了。而且,這麼一來比直接開啟 Android SDK 裡的模擬器要快多了。

另外一個不用開啟 DOS 視窗執行 adb connect 指令的方法,就是直接在 Eclipse / ADT 裡,將 DDMS 的設定中指定 ADBHOST 的值,這樣可以跳過上面 DOS 視窗那個步驟,使用上更方便一點點。