Shou's origin

Source of everything

誡之二

凌,則隱
長,則同
驕而與人者
共聞之

host 曰:即有大樂者,與悲治之。

誡之一

分離,融合
形影不離
恥辱,榮耀

注視卻無視
偉大卻無名
萬能卻不為

他是你的 host,你的聖人
那你呢?

翻譯:逆向狀態,又:惰性之力

原文 「Backwards State, or: The Power of Laziness」由 Antoine Latter 發佈於其個人Blogger上。特別地,對 Philip Wadler 及其著作的 The Essence of Functional Programming表示至高感謝。

近期我參加了一個關於 Haskell 中自動微分(Automatic Differentiaion)的討論,因為之我拜讀了 Jerzy Karczmarczuk 的論文「Lazy Time Reversal, and Automatic Differentiation」。這篇論文進一步引用了 Philip Wadler 的 The Essence of Functional Programming 來介紹逆向(Backward) State Monad,我覺得非常有趣,在此向大家講一下這種技術。

在此我期待讀者各位對 Haskell 的 State Monad 已有所了解,其實簡單來說 State Monad 就是一個函數,從上一個狀態映射到結果以及下一個狀態。

逆向 State Monad 和 State Monad 的區別就在於它和 State Monad 執行的順序恰好相反,也就是說,逆向 Monad 是從一個最終狀態執行到其最初狀態並產生一系列值的。

深淵

站在深淵面前
驅使自己踏前一步
恐懼充滿我的內心
所以我捂著雙眼

我不斷跌落,跌落
以至於甚至當我想起抬頭
向上看一眼時
已經沒有任何光亮了

沒有朋友,沒有敵人,沒有人
我感到恐懼,而又熱愛著她
我熱愛這黑暗
我熱愛這未知的周圍

翻譯:Haskell 怎麼實現惰性求值

原文由 Heinrich Apfelmus 發表於 Hackhands,標題:How Lazy Evaluatoin Works in Haskell。

Lambda 醬想遲些再去打掃房間~

惰性求值是 Haskell 用得最廣泛的代碼執行方法,通過之我們的程序可以寫得更簡單,更模塊化,不過惰性求值帶來的一個問題是不那麼直觀內存佔用,對新手來講這往往是個坑。譬如說,下面這個看起來很正常的表達式跑起來將會佔用上 G 的內存空間:

1
foldl (+) 0 [1..10^8]

在這個教程裡,我想解釋一下惰性求值的實現原理,並講清楚 Haskell 的惰性求值在時間和空間上的佔用情況。我會先講一些關於圖規約(Graph Reduction)基礎,然後討論一下關於嚴格(Strict)的左褶疊(Left Fold),用於幫助理解內存空間洩漏問題並解決之。

惰性求值相關的主題在很多教科書裡都有涉及,譬如 Simon Thompson 的《Haskell – The Craft of Functional Programming》一書,但是線上版本似乎不太容易找。但願這篇教程能夠起到些幫助作用吧。

惰性求值是一個需要權衡的語言特性。一方面,它能使代碼更模塊化。(很遺憾,這次我沒有時間演示這個作用。)另一方面,它使得我們無法完全理解在任一程序中求值的過程 – 它的確比你想像要難一些。在本文末尾,我會提供一些對付這種情況的方法。我們開始吧!

Function Calling Syntax

We use programming languages to indicate a process of actions/computations. Therefore programming languages tends to be more procedual. In other words, they are used to indicate how a thing is done.

Just as the role of verbs in a nature language sentence, an action is the most essential part of ‘doing a task’ in programming language. Of course the syntax of a programming language could be complex. I’d be here to discuss only the simplest cases of function calling among different programming languages.

翻譯:如何幸福起來

原文由 lukeprog 發表於 LessWrong。 關於注釋和引用,請參見原文。

有一天一個同事對我說:「盧克,你應該是我見過的最幸福的人了!你怎麼做到每時每刻都這麼開心的?」

他可能只是在誇張修辭,不過我還是回答了很長。曾經的大部分人生是不令我開心的,我甚至好幾次考慮過自殺。然後我花了兩年研究幸福科學。而現在,幸福是我的自然狀態。我甚至都不記得甚麼時候我有達 20 分鐘以上的不開心過。

這類改變並非人人都會有,甚至大部份人都不會有(beware of other-optimizing),但不妨一試!

我們都希望開心些,而且變得開心對其他事情也有好處。譬如說,開心有利於人的身心健康,能提高創造力,還能使你更好地做決定。(畢竟當一個人不開心時很難做到理性思考。)所以呢,本篇作為如何系列的一部分,讓我們回過頭來審視一下幸福科學

Linux 下 GFW 的 DNS 投毒解決方案

這篇日誌紀錄我在 Gentoo Linux 下配置 DNS Crypt + DNSmasq 的過程。

方案

DNSCrypt 是 OpenDNS 推出的一個用來加密 DNS 請求的代理,我用這個來繞開 GFW 的檢查。dnsmasq 是一款的 DNS 服務器,我主要用其提供 DNS 緩存的功能。

我將用 dnsmasq 設置本地的 DNS 服務器,然後配置 dnsmasq 從 dnscrypt 獲得結果並返回給請求者。而 dnscrypt 會把來自 dnsmasq 的請求加密丟到 opendns 的服務器,然後把解析結果返回回來。

那麼 dnsmasq 將偵聽 53 端口,而 dnscrypt 的端口隨意,只要和 dnsmasq 裡的配置匹配就可以了。我隨便用了 1053 作為 dnscrypt 的端口。

最後,把系統的 DNS 服務器設置為本機就可以了。

A Brief Journal About Learning Coq

This article is completely an informal journal about my learning process on Coq. It is just created as my whim prompted. Please don’t academically refer any part of it as studying material to learn Coq.

Pre

I first heard of Coq in my admiring mathematician, @txyyss’s tweets. At the time I saw him talked that he’s glad and immersed in re-proving all the theorems he had learned. He also said, as deepening in Coq, he found a boost on other related academic aspects. Driven by curiosity, I went to know about what a heck Coq is. Then I saw it describe itself as a ‘Proof Assistant’. I felt something uneven about it. Looking through all the programming languages I had learned, even those as logically abstract as Prolog, were not capable to do a proof.

夢魘

晚上,我在墳地挖土,點上火炬。
頭頂的火光把周圍照得通明。

我抓著幻想中的水平懸絲,
在各式燒給他們的物件中跳躍。

到白天,這裡卻成了一座鬼城。
四處盡是餐館酒店,一片繁華。