分享一個前幾天幫忙排除問題的趣事,事後看覺得再明顯不過,發生當時卻讓人困惑了一下。前幾天要下班時,發現同事還在奮戰,所以就過去湊一下熱鬧。原來是他正在為某個平台建立 cross-compile 環境時碰到麻煩。
這裡說明一下,我們團隊的「cross-compile 環境」其實就是一個個 chroot,預先裝好了目標平台的 cross-toolchain、程式庫,並設定好環境變數。通常這些 cross-compile 都是由熟悉 Linux 環境的人事先打包好,新加入者只要按照產品型號下載對應的編譯環境,就可以立即上手建置專案。當硬體廠商更新驅動程式、或者程式庫 推出安全性修正時,負責的同事必須要更新編譯環境,有時候重大的調整會需要整個砍掉重頭建起。
novus 發表在 痞客邦 留言(0) 人氣(853)
前幾天有網友回覆 四則運算解析器 那篇,回頭瞄了一下舊程式碼剛好讓我得到了一個靈感,所以寫了這篇「函數解析器」。
我過去曾用 C++03 實作過一些小型語言的編譯器、直譯器,使用都是比較傳統的方法,也就是設計一個 AST 節點的基礎類別,再特化出各種不同類型的 AST 節點。這個寫法非常的囉唆,許多程式碼都是為了滿足靜態型別語言的規範,而不是實現真正的功能,相較之下 python、javascript 之類的語言可以用精簡許多的程式碼完成同樣的事情。
novus 發表在 痞客邦 留言(1) 人氣(337)
上星期 Kickass Torrents 的負責人 Artem Vaulin 被逮捕,而 Kickass Torrents 伺服器隨後被關閉。
Vaulin 是在 iTunes 上消費,然後使用相同 IP 登入 KAT 臉書帳號而被美國有關單位鎖定,蘋果隨後也高度配合調查,提供了 Vaulin 的個人資料,包含登入的 IP 紀錄與個人郵件訊息等等。
novus 發表在 痞客邦 留言(0) 人氣(161)
在排序固定長度的小陣列時,那些 big-O 優異的演算法往往討不到便宜,而且還很容易因為多餘的操作而拖慢速度。Sorting Network 就是為了排序固定長度的小陣列而發明的。Sorting Network 是一組事先規劃好的比較、交換操作,只要按照固定步驟操作就能將資料排序。
若一個 Sorting Network 滿足某些條件,就可以將操作步驟平行化或者實作成平行排序硬體,這是這類演算法最大的優勢,不過這不是本文的重點。即使在沒有平行化的情況下,Sorting Network 作為循序執行的排序法效能通常也不錯,至少可以狂電 Bubble、Insertion sort,而且所有的動作都是固定的,可以輕易寫成一連串無迴圈的 if-swap 串,這在「big-O不代表一切」的小資料世界裡具有實作優勢。
novus 發表在 痞客邦 留言(0) 人氣(399)
知道今天是什麼日子嗎?
今天是 ENIAC 發表 70 週年。發表於 1946 年 2 月 14 的 ENIAC 是世界上第一部可程式化而且 Turing complete 的通用型電子計算機。
novus 發表在 痞客邦 留言(0) 人氣(206)
在《胡適之先生晚年談話錄》裡,胡適在 1960 年 4 月 10 日說:
前幾天,高平子的孫兒來,他引張載的「為天地立心,為生民立命,為往聖繼絕學,為萬世開太平」四句空洞的話。我問他:「怎麼叫『為天地立心』?你解釋給我聽。」我對他說:「你的祖父是學天文的,你不應該再引這些不可解的話。」
如果胡適今日還在,會說些什麼呢?
novus 發表在 痞客邦 留言(2) 人氣(606)
前陣子和一位朋友聊到「現金流遊戲」,於是我查了一下,發現這是《富爸爸,窮爸爸》的相關產品。記得念大學時一位室友書櫃上有《富爸爸,窮爸爸》這本書,就借來翻了翻。看完之後不覺得有什麼特別的地方,所以沒有關注後續的系列著作,也不清楚作者生平。這裡必須說明,當時我對投資理財已經相當有興趣,不僅閱讀相關書籍,甚至在現實生活中認識了一位有點富爸爸味道的老師,但《富爸爸,窮爸爸》就是難以引起我的興趣。
我發現羅伯特.清崎的生平比起他的著作更精彩,於是整理了一下這兩週找到的資訊,寫成了本文。
novus 發表在 痞客邦 留言(5) 人氣(21,197)
資料來源: http://drops.wooyun.org/news/8864
對岸有網友發現從某些非官方管道下載的 XCode 編譯器,會在編譯出來的 APP 中植入特殊的可執行碼。目前值入的可執行碼無害,只是會蒐集一些資訊回報給託管在 Amazon 的伺服器。但這可能只是試水溫的作品,未來很有可能會出現更強的應用。
目前被感染的 XCode 編譯器似乎是來自迅雷、百度等個人網路硬碟。按原文描述,散播該後門的人混跡於開發者社群當中,只要有機會就向人提供他自己網路硬碟上的「鏡像下載點」。例如當 XCode 官方發布新版本時,他也會好心的公告給社群中的人,並且提供下載位址。又或者有人詢問如何建立開發環境時,他也會藉機提供下載位置。
讓我覺得頗為驚訝的是,已知有若干大公司出品的 App 也中招,難道這些大公司的開發團隊或協力廠商不去官網下載 toolchain,反而使用陌生私人網路硬碟的二進制檔?
有一位網友提到一個耐人尋味的現象:「还是不能相信迅雷,我是把官网上的下载URL复制到迅雷里下载的,还是中招了。」如果這是真的,那麼對岸的網路硬碟服務就不是普通的恐怖。
我對 XCode 的 toolchain 完全不了解,不過看起來它是透過替換基礎程式庫的方式感染目標程式,這個方法相對簡單很多,影響層面也比較低。我的意思是,不至於像 Ken Thompson 示範的那樣在編譯階段改寫 AST,可以再傳染給用這個編譯器建置的編譯器。
以我比較熟悉的 GCC 來說,類似的做法大概是抽換靜態連結的 libgcc 或 crt。我以前做過類似的事,不過目的只是在於產出極小的二進制檔。技術不算難,難的是誘使其他人用你的 toolchain。現實中的 Linux distro 大都有固定的套件庫,或許 MinGW 比較有機會。
比較早的 GCC 做 AST 層次的改寫比較麻煩,近期的 GCC 已經支援 plugin,我想應該會簡單很多。
novus 發表在 痞客邦 留言(0) 人氣(362)
差不多每隔一段時間,就會出現智力超群的天才兒童報導,這些報導通常只是丟給讀者一個意義不明確的 IQ 值,而沒有詮釋數值的意義。甚至會為了娛樂目的,任意拉幾個名人進來比較,最常見的大概是愛因斯坦,來自英國的報導大概會再加上史帝芬霍金。
愛因斯坦並沒有留存智力測驗的紀錄,事實上我們根本不知道愛因斯坦是否曾做過任何智力測驗。 根據 愛因斯坦官網 記載:「As far as we known today, Albert Einstein has never done any IQ test. Thus his IQ is unknown!」
稍微想一下就知道這是很合理的,因為在愛因斯坦年輕的時候,智力測驗的方法仍處於發展初期,既不成熟也沒有被廣泛使用。等到智力測驗方法足夠可靠時,愛因斯坦也已經到了沒必要關心這些瑣事的人生階段。給個參考時間點,愛因斯坦在 1905 年發表狹義相對論,同一年 Alfred Binet 發表了世界最早的智力測驗,測驗對象是兒童,而 Cattell 智力量表的開發者 Raymond Cattell 則在當年出生。
novus 發表在 痞客邦 留言(2) 人氣(8,660)
https://youtu.be/m1Asbi4APb0
好像是翻外篇,頗有英國古裝喜劇的感覺
novus 發表在 痞客邦 留言(0) 人氣(71)