联邦宇宙历险记

关于联邦宇宙和分布式服务的一些神论

2022/12/27
阅读更多

Xenoblade 3 玩后感(剧透)

今晚都到我家喝酒去吧~~

2022/8/22
阅读更多

关于一些学术软件的八卦

难个屁啊~~

2022/3/23
阅读更多

记一件有意义的事

I may be paranoid, but not an android.

2021/10/27
阅读更多

组装键盘记

键盘侠怎么能没有闪闪发光的键盘呢?

2020/7/23
阅读更多

Raspberry Pi 2 模拟 Switch 手柄

⬆️⬆️⬇️⬇️⬅️⬅️➡️➡️🅰️🅱️🅰️🅱️

2020/4/25
阅读更多

装 Mac 虚拟机

我王老五活了这大半辈子,我从来没见过这么难装的虚拟机⋯⋯

2019/2/13
阅读更多

拔智齿记

我要吃肉!

2018/12/14
阅读更多

UHD/4K is the future

By that I mean it is not the present. BTW do you know that UHD and 4K are differnt things?

2018/8/10
阅读更多

IBDesignable is not enough

A trigger-happy Stack Overflow guru was trigger-happy.

2018/8/1
阅读更多

「军训是服兵役的一种基本形式」

这事儿,它不能大声儿说~~

2018/4/4
阅读更多

对于现在各种文档系统的吐槽

二十一世纪是生物的世纪(咦这到底和本文有什么关系⋯⋯)

2018/1/15
阅读更多

中英混排规范

强迫症又犯了。

2017/6/2
阅读更多

Molecule visualization with Blender

Remember those fancy molecule renders on Nature and Science? Yeah, those are overrated.

2016/4/22
阅读更多

Meow video streaming with Raspberry Pi

Me setting up a video streaming server on Raspberry Pi.

2016/4/9
阅读更多

炸辣椒油

如何正确地炸出一碗伟光正的辣椒油

2016/4/4
阅读更多

做一个黑色的东东就这么难吗?

这样的问题可以同时引发听众和主讲人的思考,还能引出段子。

2015/7/7
阅读更多

论洁癖

强迫症患者表示又要吐槽了……

2014/7/11
阅读更多

Impact of cache prefetching

I am not always interested in the low-level nonsense. But when I am, I write a blog post about it.

2014/7/10
阅读更多

贴呀贴呀贴标签

轻轻地贴在小盆友的后面,大家不要告诉他……

2013/10/30
阅读更多

炖牛肉

Darksair 告诉你如何炖牛肉才能惊天地泣鬼神。

2013/4/21
阅读更多

五支钢笔

主要是一个败家成果展示贴。

2013/2/22
阅读更多

Another Statically Generated Blog

I wrote my own static blog generator.

2013/1/13
阅读更多

Wallpaper in a Encrypted Volume

Me solving a stupid problem, and a book gets recommended.

2012/7/26
阅读更多

Sony NEX-7 Review

Me messing with my new camera.

2012/4/26
阅读更多

A Statically Generated Blog

I moved from Wordpress to Hyde. Here are some remarks.

2012/4/5
阅读更多

BCM4331 Native Driver for Linux

There is now a native driver for BCM4331 wireless card for Linux, and I wrote some pkgbuilds.

2011/10/3
阅读更多

Reference Managment & Freedesktop

Me day-dreaming about a perfect reference manager.

2011/8/29
阅读更多

New Macbook Pro

Me messing with my new Macbook Pro!

2011/8/10
阅读更多

Ath9k as AP in Arch Linux

How to setup Atheros AR5008 wireless network adapter with Ath9k driver to work as an AP.

2011/6/11
阅读更多

Transfer to VPS

Finally I pulled the trigger and bought a VPS plan.

2011/5/27
阅读更多

DWM2 Breeding Searcher

<p>写了一个用来查看 Dragon Warrior: Monsters 1/2 (勇者斗恶龙怪物篇)孵化数据的 web 程序。可以查询某种怪物可以用什么孵出来,也可以查询某种怪物可以用来孵什么~~ 比如要查询 KingSlime,可以进入<a href="http://darksair.org/breed/KingSlime/">这里</a>。所有的怪物都是交叉引用的,查起来非常爽~~</p> <p>写这个程序主要是体力活。首先写个程序把<a href="http://www.gamefaqs.com/gbc/197155-dragon-warrior-monsters/faqs/6849">这篇文章</a> Breeding 一节的文本 parse 一下,存在一个字典里,剩下的就是 <a href="http://www.djangoproject.com/" title="Go to Django homepage">Django</a> 了。</p>

2010/10/20
阅读更多

今日十大

<p>今天小百合十大的前三条是这样的:</p> <p><a href="http://darksair.org/blog/wp-content/uploads/2010/07/shot.png"><img class="aligncenter size-medium wp-image-252" title="Top ten" src="http://darksair.org/blog/wp-content/uploads/2010/07/shot-300x74.png" alt="shot" width="300" height="74" /></a></p> <p>第二条的内容是这样的:</p> <p><a href="http://darksair.org/blog/wp-content/uploads/2010/07/shot_.png"><img class="aligncenter size-medium wp-image-255" title="Top ten no.2" src="http://darksair.org/blog/wp-content/uploads/2010/07/shot_-300x189.png" alt="Top ten no.2" width="300" height="189" /></a></p>

2010/7/23
阅读更多

RPN Calculator for iPhone

<p>从拿到 iPhone 的第一天起,我就在不断地寻找好用的 RPN 计算器。我的要求是</p> <ol> <li>类似 Emacs Calc 的进栈出栈方式</li> <li>无限大的堆栈</li> <li>要牛逼</li> </ol> <p><img class="size-full wp-image-233 alignright" title="iPhone RPN Icon" src="http://darksair.org/blog/wp-content/uploads/2010/06/calc-icon.png" alt="iPhone RPN Icon" width="77" height="88" /></p> <p>我一直使用的都是一个 HP i41CX 模拟器。它基本符合第一条,但是不符合第二条:它的堆栈只有四层,而且最顶层还就是你正在输入的这个。不过它非常非常得符合第三条,看看这个计算器的像板砖一样的手册就知道了。这个计算器也有一些不便,它实在是太复杂了。比如他默认的键盘配置上没有切换弧度和角度的键。键绑定是可以设的,但是我一直没有搞明白怎么设...  同样因为这个原因,我一直不知道怎么算双曲三角函数。其他的 RPN 计算器要不就是操作方式诡异,要不就是功能太少。所以昨天我终于决定自己写一个计算器。</p> <p>奋斗了两天以后把四则运算都搞定了... -_-  在 iPhone 上开发程序还是很方便的,和在 Mac 上差不多,熟练了以后写界面用不了太多的时间,而且 Interface Builder 做 prototyping 也非常得爽。我的时间主要都浪费在用 <code>UITableView</code> 显示一个堆栈上。<code>UITableView</code> 就是一个和菜单差不多的可选择的列表,几乎每一个 iPhone 程序里都能看到。但是这个东西必须要有一个符合某种特定协议的数据源...  我曾经一度都想自己用 label 和 <code>UIScrollView</code> 实现一个这种列表了...  不过最后搞定以后发现这个东西还是挺爽的,并且附赠动画效果~~</p> <p>在 iPhone 上开发程序需要花 $99 买一个许可证。... ... ...... 噢,不对,说错了,是苹果声称你需要买一个,实际上你不需要。免费开发程序的代价就是开发出来的程序只能在 jailbreak 过的 iPhone 上运行。当然这其实没什么,因为<a title="iPhone vs. stone" href="http://www.eatliver.com/img/2008/3509.jpg">各种迹象表明</a>,没有 jailbreak 过的 iPhone 的使用价值其实就和一个板砖差不多。默认情况下,如果你没买这个许可证,Xcode 是不会让你把程序往 iPhone 上传的,只能在模拟器里运行。要想在 iPhone 里运行,</p> <ol> <li>当然要先 jailbreak</li> <li>照着 <a href="http://iphonedevwiki.net/index.php/Xcode#Compiling">Compiling 一节</a>做</li> <li><a href="http://iphonedevwiki.net/index.php/Xcode#Replacing_codesign_with_ldid">Replacing codesign with `ldid`</a>,这一节貌似没什么用,我从来没有成功的运行过 `ldid`,不过我还是做了。</li> <li>给 iPhone 装 AppSync 补丁。很多 Cydia 源里都有,比如 hackulo.us 源。</li> <li>编译时使用自己生成的那个许可证。</li> </ol> <p>关于调试,在开始使用 Linux 之后,我就再也没有使用过任何调试器,只使用 <code>printf</code>(及各种语言里的等效的函数)。Objective-c 里是有 <code>printf</code>的,但是比较方便的做法是使用 <code>NSLog()</code>。运行的时候在 Xcode 里选择 Run -&gt; Console,可以看到输出。顺便提一下,Objective-c 的标准库还是很牛逼的,嗯,<code>NSString</code>, <code>NSNumber</code>, <code>NSArray</code>, ...</p>

2010/6/27
阅读更多

Typescripts Rearranged

<p>今天好好看了一下 ConTeXt 的新文档 <a href="http://context.aanhet.net/svn/contextman/context-reference/en/co-fonts.pdf">co-fonts</a>,然后把平时常用的字体都写成 typescript 放到 <code>texmf-local</code> 里。这样以后写作业就不会出现字体定义比文档内容还长的情况了-_-...</p> <p>首先定义几个 feature sets</p> <pre><code>:::TeX \definefontfeature[latin-smallcaps][smallcaps][script=latn] \definefontfeature [fancy] [language=dflt, script=latn, method=node, pnum=yes, onum=no, kern=yes, liga=yes, dlig=no, zero=no, tlig=yes, trep=yes, protrusion=quality, expansion=quality, mapping=tex-text] </code></pre> <p>然后定义单个字体的 typescript</p> <pre><code>:::TeX \starttypescript[myCaslon] \definefontsynonym[proserif][name:ACaslonPro-Regular] \definefontsynonym[proserifit][name:ACaslonPro-Italic] \definefontsynonym[proserifbf][name:ACaslonPro-Bold] \definefontsynonym[proserifbi][name:ACaslonPro-BoldItalic] \definefontsynonym[Serif][proserif][features=fancy] \definefontsynonym[SerifItalic][proserifit][features=fancy] \definefontsynonym[SerifBold][proserifbf][features=fancy] \definefontsynonym[SerifBoldItalic][proserifbi][features=fancy] \definefontsynonym[SerifCaps][Serif][features=latin-smallcaps] \stoptypescript \starttypescript[myPalatino] \definefontsynonym[palarm][name:PalatinoLTStd-Roman] \definefontsynonym[palait][name:PalatinoLTStd-Italic] \definefontsynonym[palabf][name:PalatinoLTStd-Bold] \definefontsynonym[palabi][name:PalatinoLTStd-BoldItalic] \definefontsynonym[Serif][palarm][features=fancy] \definefontsynonym[SerifItalic][palait][features=fancy] \definefontsynonym[SerifBold][palabf][features=fancy] \definefontsynonym[SerifBoldItalic][palabi][features=fancy] \definefontsynonym[SerifCaps][Serif][features=latin-smallcaps] \stoptypescript \starttypescript[myOptima] \definefontsynonym[prosans][name:OptimaLTStd] \definefontsynonym[prosansit][name:OptimaLTStd-Italic] \definefontsynonym[prosansbf][name:OptimaLTStd-Bold] \definefontsynonym[prosansbi][name:OptimaLTStd-BoldItalic] \definefontsynonym[Sans][prosans][features=fancy] \definefontsynonym[SansItalic][prosansit][features=fancy] \definefontsynonym[SansBold][prosansbf][features=fancy] \definefontsynonym[SansBoldItalic][prosansbi][features=fancy] \definefontsynonym[SansCaps][Sans][features=latin-smallcaps] \stoptypescript \starttypescript[myFutura] \definefontsynonym[prosans][name:FuturaStd-Medium] \definefontsynonym[prosansit][name:FuturaStd-MediumOblique] \definefontsynonym[prosansbf][name:FuturaStd-Bold] \definefontsynonym[prosansbi][name:FuturaStd-BoldOblique] \definefontsynonym[Sans][prosans][features=fancy] \definefontsynonym[SansItalic][prosansit][features=fancy] \definefontsynonym[SansBold][prosansbf][features=fancy] \definefontsynonym[SansBoldItalic][prosansbi][features=fancy] \definefontsynonym[SansCaps][Sans][features=latin-smallcaps] \stoptypescript \starttypescript[myMyriad] \definefontsynonym[prosans][name:MyriadPro-Regular] \definefontsynonym[prosansit][name:MyriadPro-It] \definefontsynonym[prosansbf][name:MyriadPro-Bold] \definefontsynonym[prosansbi][name:MyriadPro-BoldIt] \definefontsynonym[Sans][prosans][features=fancy] \definefontsynonym[SansItalic][prosansit][features=fancy] \definefontsynonym[SansBold][prosansbf][features=fancy] \definefontsynonym[SansBoldItalic][prosansbi][features=fancy] % No smallcaps % \definefontsynonym[SansCaps][Sans][features=latin-smallcaps] \stoptypescript \starttypescript[myMonaco] \definefontsynonym[promono][name:Monaco_Linux] \definefontsynonym[Mono][promono][features=default] \stoptypescript </code></pre> <p>把 <a href="http://wiki.contextgarden.net/ConTeXt_Minimals">ConTeXt Minimals</a> 自带的 px-math 也定义一个</p> <pre><code>:::TeX % The internal px-math \starttypescript[myPxMath] \loadfontgoodies[px-math] \definefontsynonym[MathRoman][pxmath@px-math] \stoptypescript </code></pre> <p>最后写几个常用组合</p> <pre><code>:::TeX \starttypescript[PalatinoOptima] \usetypescript[myPalatino] \usetypescript[myOptima] \usetypescript[myMonaco] \usetypescript[myPxMath] \definetypeface[PalatinoOptima][rm][serif][myPalatino][default] \definetypeface[PalatinoOptima][ss][sans][myOptima][default] \definetypeface[PalatinoOptima][tt][mono][myMonaco][default][rscale=0.8] \definetypeface[PalatinoOptima][mm][math][myPxMath][default] \stoptypescript \starttypescript[PalatinoMyriad] \usetypescript[myPalatino] \usetypescript[myMyriad] \usetypescript[myMonaco] \usetypescript[myPxMath] \definetypeface[PalatinoMyriad][rm][serif][myPalatino][default] \definetypeface[PalatinoMyriad][ss][sans][myMyriad][default] \definetypeface[PalatinoMyriad][tt][mono][myMonaco][default][rscale=0.8] \definetypeface[PalatinoMyriad][mm][math][myPxMath][default] \stoptypescript \starttypescript[CaslonMyriad] \usetypescript[myCaslon] \usetypescript[myMyriad] \usetypescript[myMonaco] \usetypescript[myPxMath] \definetypeface[CaslonMyriad][rm][serif][myCaslon][default] \definetypeface[CaslonMyriad][ss][sans][myMyriad][default] \definetypeface[CaslonMyriad][tt][mono][myMonaco][default][rscale=0.8] \stoptypescript </code></pre> <p>把这些写成一个文件扔到 <code>textmf-local/tex/context/base</code> 里,然后 <code>luatools --generate; context --make</code>。测试:</p> <pre><code>:::TeX \input type-mine \usetypescript[PalatinoOptima] \setupbodyfont[PalatinoOptima, roman, 12pt] \setuppapersize[B5][B5] \setupinterlinespace[line=1.4em] \starttext Serif test 1234567890. {\ss Sans test}. {\tt Typewriter test.} {\it Serif test 1234567890. {\ss Sans test}.} {\bf Serif test 1234567890. {\ss Sans test}.} $M_{ath} \times t^{est} = 1234567890.$ \placeformula \startformula \widetilde{G}(\vec k, \omega) = \int_{-\infty}^{+\infty} e^{i(\vec k\cdot \vec x - \omega t)} G(\vec x, t)\, {\rm d}^3 \vec x\, {\rm d}t \stopformula \stoptext </code></pre> <p>效果如图</p> <table style="text-align: center; width: 100%;"> <tr> <td><a href="http://img532.imageshack.us/img532/8115/palatino.png" title="Palatino + Optima"><img src="http://img99.imageshack.us/img99/9029/palatinothumb.png" alt="Palatino + Optima" /></a></td> <td><a href="http://img121.imageshack.us/img121/3751/caslon.png" title="Caslon + Myriad"><img src="http://img132.imageshack.us/img132/2117/caslonthumb.png" alt="Caslon + Myriad" /></a></td> </tr> <tr><td>Palatino</td><td>Caslon</td></tr> </table>

2010/5/13
阅读更多

Code Hilighting in ConTeXt

Me fixing a bug in ConTeXt t-vim.

2010/4/2
阅读更多

春节

<p>把房间整理了一下,准备过节。<a title="Read full post" href="http://darksair.org/car/?p=263">【全文】</a></p>

2010/2/16
阅读更多

关于 Photoshop

<p>这几天我给一个同学看我的照片,他听说我用了 PS 以后大喊:“You ruined your photos man!  Don't do it!”</p> <p>本来我想以中学作文的形式来写这个东西的。写了一半发现没必要,因为有些东西太显然了。所以我决定这么写:</p> <ol> <li>摄影是一种艺术,我的目标是艺术(有没有达到是另一回事哈)</li> <li>艺术是用来让人(别人)深思的</li> <li>制作艺术的过程不能让人(别人)深思</li> <li>艺术品的艺术价值与制作过程无关,只与内容有关</li> </ol> <p>另外</p> <ol> <li>暗房和 PS 都是 post-processing</li> <li>胶片机和 DC 都是照相机</li> <li>刻活字和 Fontforge 都是字体设计</li> <li>排活字和 TeX 都是排版</li> <li>用笔写和用计算机写都是写作</li> <li>手算和 Mathematica 算都是计算</li> <li>乱摸和在网上使用挑逗性言论都是性骚扰</li> <li>还用再举例么?</li> </ol> <p class="ImgWrapper"><img alt="Four" src="/blog/static/img/2009/four.jpg"></p> <p>最后</p> <p>老子就是要 PS,老子就是要狂 PS,老子的 PS 水平巨高,老子能把照片 PS 得巨贱,怎么着吧你~~?</p>

2009/12/14
阅读更多

听 Muse 新砖有感

<p>我一直认为我不听流行不是因为我高雅,而是因为流行实在过于低俗。我几乎不听非主流摇滚就是我不高雅的最好佐证。<a title="Link to full text in C.A.R." href="http://darksair.org/car/?p=224">[... full text]</a></p>

2009/11/22
阅读更多

D40 Test

<p>Just bought a Nikon D40 DSLR.  Since today I had an exam, I just did one test to it: night shooting in my very dim room.</p> <p class="ImgWrapper"><img alt="My room" src="/blog/static/img/2009/d40-test.jpg"></p> <p>Shot with the lens in package, under 18mm, aperture-priority, f/3.5, 1/6s, ISO1600.  And white-balanced in Photoshop, because I only have two light bubbles that emit yellow white lights.   A portion of the 100% image is <a href="/blog/static/img/2009/d40-test-crop.jpg">here</a>.  I'm more than satisfied with this photo because</p> <ol> <li>My room is very dim, very very dim.</li> <li>This was shot under ISO1600, which means D40’s high ISO is awesome.</li> <li>I can hold this camera steadily enough.</li> </ol>

2009/11/14
阅读更多

IPhone Jailbreak

<p>正在 Dev-team 忙着整 3.1 jailbreak 的时候,惊闻某大牛已经搞出了 3.1 和 3.1.2 都能用的 jailbreak,<a title="Blackra1n" href="http://www.blackra1n.com">Blackra1n</a>。遂装,成功。然后第一件事就是装了个 MobileTerminal 和 OpenSSH,呵呵。不过 jailbreak 了以后还是不能运行自己写的代码,有两个问题:</p> <ol> <li>Xcode 只能编译在 simulator 运行的代码,编译 iPhone 上运行的代码还需要 sign。</li> <li>IPhone 还是需要检查 SHA1 hash。</li> </ol> <p>第一个问题很好解决,编辑文件 <code>/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/SDKSettings.plist</code>,把 <code>CODE_SIGNING_REQUIRED</code> 下面的 <code>YES</code> 改成 <code>NO</code>,然后在 Xcode 里设置项目的 certificate identity 为不需要签名。第二个问题比较麻烦。Cydia 的网站里提到可以在 iPhone 里运行一条命令 sysctl -w security.mac.proc_enforce=0 \ security.mac.vnode_enforce=0 就搞定了。我这里执行以后的确可以运行没有签名的程序了,但是副作用是一旦重启 SpringBoard 就连不上 wifi。不过这个倒是不麻烦,把这两个值都恢复成原来的就行了。其实最好的解决办法是 self-signing。但是我用 <code>codesign</code> 老是出错... 嗯。不废话了,上 pp~~</p> <p style="text-align: center;"><a href="http://www.pict.com/view/1751335/0/jailbreak"><img class=" aligncenter" title="IPhone Jailbreak" src="http://img2.pict.com/09/bc/23/1751329/0/jailbreakthumb.png" alt="IPhone Jailbreak" width="460" height="220" /></a></p>

2009/10/12
阅读更多

误人子弟记

<p>今天上完电动力学课,我去某指定地点答疑。进去时已经有三个小孩在了。其中两个在激烈讨论(这两个好像都比我大...),还有一个闷头做题。然后我自我介绍说我是 lab TA。过了一会儿,那个闷头做题的过来问一道很弱智的电磁学问题。我想我虽然不是电磁学的 TA,但是应付一下也是没问题的,于是就看题目。题目是这样的</p> <blockquote> <p>两个电荷都是 \(-q\) 相距 10cm。求空间中总电场为零的点。</p> </blockquote> <p>于是我就很认真的告诉那个小孩,设两电荷之间的一点,距其中一个电荷为 \(r\)。这点的总电场为两个电荷的电场之和 $$\displaystyle E = \frac{-q}{4\pi\epsilon_0}\left[\frac{1}{r^2} + \frac{1}{(10 - r)^2}\right]$$ $$E=0$$ 也就是 \(r^2 + (10 - r)^2 = 0\), 鉴于这是两个平方之和,所以 \(r = 10 - r = 0\), 所以这道题出错了。</p> <p>下午上数理的时候才反应过来,下课后想去找该小孩,未遂。</p> <p>郑重告诫各位,刚上完电动量子广相或场论之后不宜思考。思考必死。</p>

2009/9/12
阅读更多

New Theme, with No Change

<p>Not exactly... There are some visible changes. I rewrote the theme of this blog using HTML 5 and CSS 3. Everything seems fine. But can someone please tell me why the following video does not work? (At least not in my Firefox 3.5.)</p> <video src="http://darksair.org/img/shit.ogg" controls>Your browser does not support the `video` element.</video> <p><ins datetime="2009-08-24T19:17:57+00:00">I tested this theme on Chrome under Windoze, and the video was normal. I don't know what is wrong with my Firefox because it can play many other videos without problem.</ins></p>

2009/8/24
阅读更多

美国初印象

亲自见证资本主义的腐朽

2009/8/9
阅读更多

关于高考加分

<p>刚才吃饭的时候被迫看了 CCAV 的一个辩论节目,主题是要不要取消高考加分。辩论在热烈友好的气氛中进行,在场猴子中一群认为应该取消高考加分,另一群认为不应该取消高考加分,大家各抒己见,畅所欲言。辩论取得了建设性成果,与会猴子一致同意,要么取消高考加分,要么不取消高考加分。</p> <p>支持不取消高考加分的猴子们大多认为,我国很穷,教育资源有限,分配不均匀,所以对于少数猴种比如金丝猴和猕猴就应该加分。支持取消高考加分的猴子们大多认为,那个... 嗯,我忘了他们的论据了。</p> <p>我是支持取消高考加分的。原因很简单:加分是一种不公。加分是一种特权,特权和歧视是一对矛盾,马克思爷爷曾经说过,矛盾的两方面互相依赖,缺一不可,所以给特定的猴群加分必然意味着对这些猴子的歧视。对于少数猴种来说,这一点是很明显的。我特别喜欢女权运动,所以我不喜欢女士优先,因为这根本就是对女性的歧视。有些猴说了,那特长生和三好优干加分呢,谁歧视丫了?答:是啊,本来就没猴歧视丫,加个毛分啊??有些猴子又说了,特长生他们多辛苦啊,整天要 xxxx, yyyy, 还要 zzzz。答:他们愿意,你管的着么?有特长猴说了,你看我会弹钢琴,多牛逼阿,应该遭到无情地奖励。答:老子还会 TeX 呢,怎么上头没猴奖励老子啊?有些猴子使用例证法说,发达国家也有加分,比如米国就有越战老兵优先录取。答:战死了还授予烈士呢,给你也授一个?老兵为了国家身心受到了巨大的创伤,所以才有特权,特长生受啥巨大创伤了?另外,作为一个中国猴,我们每只猴的心灵都受到了巨大创伤,所以每只猴都加分好了。</p> <p>所以,这事咋办呢?其实道理是很简单的,高考是一坨屎,我党拥有的大学们是一坨坨屎,我们是一只只的屎壳郎。</p>

2009/7/19
阅读更多

香格里拉:云与山的彼端

<div><object style="width:480px;height:340px" ><param name="movie" value="http://static.issuu.com/webembed/viewers/style1/v1/IssuuViewer.swf?mode=embed&amp;layout=http%3A%2F%2Fskin.issuu.com%2Fv%2Fcolor%2Flayout.xml&amp;backgroundColor=2e3735&amp;showFlipBtn=true&amp;documentId=090712170111-41383350f752419f93dbc4b2dd87b732&amp;docName=shangrila-20090713&amp;username=Corsair&amp;loadingInfoText=Shangri-La%3A%20%E4%BA%91%E4%B8%8E%E5%B1%B1%E7%9A%84%E5%BD%BC%E7%AB%AF%20(2009-07-13)&amp;et=1247419113124&amp;er=38" /><param name="allowfullscreen" value="true"/><param name="menu" value="false"/><embed src="http://static.issuu.com/webembed/viewers/style1/v1/IssuuViewer.swf" type="application/x-shockwave-flash" allowfullscreen="true" menu="false" style="width:480px;height:340px" flashvars="mode=embed&amp;layout=http%3A%2F%2Fskin.issuu.com%2Fv%2Fcolor%2Flayout.xml&amp;backgroundColor=2e3735&amp;showFlipBtn=true&amp;documentId=090712170111-41383350f752419f93dbc4b2dd87b732&amp;docName=shangrila-20090713&amp;username=Corsair&amp;loadingInfoText=Shangri-La%3A%20%E4%BA%91%E4%B8%8E%E5%B1%B1%E7%9A%84%E5%BD%BC%E7%AB%AF%20(2009-07-13)&amp;et=1247419113124&amp;er=38" /></object></div>

2009/7/13
阅读更多

ConTeXt MKIV

<p>订阅了 ConTeXt 的邮件列表,看的手痒的不行了,下了一个 ConTeXt minimal。这个东西安装极其的方便,<a href="http://wiki.contextgarden.net/ConTeXt_Minimals">这里有详细流程</a>。唯一的不爽是安装以后是一个独立的 TeX 发行版,不能和现有的TeX tree 合并起来。我试过把安装好的目录拷到 <code>~/.texmf</code> 里,然后设环境变量,但是 LuaTeX 老是说找不到 script,很郁闷...</p> <p style="text-align: left;">现在的 ConTeXt 和一年前已经大不一样。对中英混排已经有了一定的支持。我从<a href="http://bbs.ctex.org/viewthread.php?tid=45064&amp;extra=page%3D1">这里</a>抄了一份测试文档,稍微改了一下,编译出来效果还是很不错的。</p> <p><a href="http://www.pict.com/view/489587/0/shot"><img class="aligncenter" src="http://img2.pict.com/a0/1e/4f/cd41d917a1b5f85dc94a211cf5/G6Oab/mkivthumb.png" alt="PDF Shot" /></a></p> <p>注意原文档编译出来是不行的,ConTeXt 不会在中文之间断行。必须要在文件里加入 \setscript[hanzi] 才行。另外 MKIV 的内存占用及其恐怖,编译这个文档用了 148M 的内存。</p>

2009/5/13
阅读更多

关于 IBM developerWorks 里的文章

<p>经常看 <a href="http://www.ibm.com/developerworks/">IBM developerWorks</a> 里关于 Linux 和 UNIX 的文章,不过大部分都看不懂。我一直以为是因为我太搓了,对 Linux 还不够了解。但是今天看到<a href="http://www.ibm.com/developerworks/aix/library/au-gnu_screen/">这篇文章</a>以后,我觉得作者们应该承担一部分责任。</p> <p>对于 Screen 这个东西,我是比较了解的,也经常在 SSH 的远程 shell 里用,所以我完全没期望看这篇文章的时候会遇到任何困难。但是,我看到文章里的<a href="http://www.ibm.com/developerworks/aix/library/au-gnu_screen/Figure_2.gif">第二个图</a>的时候就愣住了。当然后来我反应过来了,然后对这个图极端的无语。首先,一般的地球人在看这种图的时候大多会从上至下的看。于是先看到一个很诡异的 Window A。WTF is "Window A"?? 如果读者很乖的看了图上面的文字介绍的话,会知道 window A 是一个 shell,再往下看,这个 shell 和一个叫做 Screen session 的云“连着”。很好,再往下,Screen session 和 Remote login “连着”,然后 Remote login 通过 SSH 和 Local login “连着”(原来老子在最底下!)。所以这个图很简单,就是四个连成一条链的东西。鉴于地球人都知道 Remote login 和 Local login 是通过网络连接的,一般的逻辑会自然的推出 Screen session 是一片网络云,window A 在云的另一边的某台主机上,于是恍然大悟:screen 的作用就是通过 Remote login 来管理在更 remote 的主机上的 window(很乖的人前来补充:也就是 shell)。</p> <p>看懂这个以后,下面的事就顺理成章了。图 3 这个垃圾图和上面的图一模一样,不知道什么意思。图 4 说明 Screen 还可以透过网络云连接多台主机!太强大了!图 5 说明连接多台主机以后可以把 remote login 断掉,而 screen session 和他的 window 们还连着!太和谐了!</p> <p>...</p> <p>如何改进?很简单,把图都删了!用文字说明。如果一个地方不需要图,就别随便画个小猫小狗来充数。如果硬要画小猫小狗的话,起码也应该把 screen session 画在 remote login 的里面吧??然后把 windows 画在 screen session 的里面。这才像话。 </p>

2009/4/30
阅读更多

Charisma 更新

<p>我的 blog 发布程序 <a href="http://code.google.com/p/charismaa/">Charisma</a> 更新了。</p> <ul> <li>可以在配置里设置多个 blog,在程序中选择使用</li> <li>Tag 支持</li> </ul> <p>我平时的需求基本都满足了,下一步可能是加上删除 post 功能。</p>

2009/4/29
阅读更多

写了一个 WP 发布程序 aka. 我把自己侮辱了

<p>在试用 <a href="http://ljcharm.sourceforge.net/">Charm</a> 未遂的情况下,我决定写自己的 blog 发布程序。看了一下 <a href="http://www.xmlrpc.com/">XML-RPC</a> 的资料,发现 Python 对 XML-RPC 的包装极好,深得我心,于是简单的把 <a href="http://codex.wordpress.org/XML-RPC_wp">WP 的 API</a> 包装了一下,开始想界面怎么写。Charm 使用了风格比较古老的菜单界面,我不是很喜欢。写起来比较简单的非交互式命令行参数界面好像也不是很合适,想来想去决定写一个类似 <a href="http://www.mutt.org/">Mutt</a> 的界面。</p> <p>我以前从来没有用过 ncurse。看了一点 Python 的 curse 模块文档以后我发现我丫就是一个 curse/terminal 白痴,但我发扬了我党“一不怕苦,二不怕死”的大无畏精神,找到了一个从文档上看很强大的库 <a href="http://excess.org/urwid/">Urwid</a>,开始写界面,结果写的痛不欲生,生不如死,flag 和全局变量满天飞... 总算把发布功能写完了。</p> <p>以下是我写之前对程序的预期:</p> <ol> <li>实现 WP XML-RPC 的全部功能</li> <li>类似 Mutt 的界面</li> <li>从配置文件里读取全部键绑定</li> <li>配置文件里实现多 blog 配置</li> </ol> <p>以下是已经实现的功能:</p> <ol> <li>实现列出 post 和发布新 post 功能</li> <li>类似 Mutt 0.0.1 的界面(估计值)</li> <li>硬编码全部键绑定</li> <li>硬编码 API URI, 用户名和密码</li> </ol> <p>... 最后套用 Mutt 作者的话:All blog publishing programs suck. This one just sucks the <em>most</em>!</p> <p>Edit: 这是在 Charisma 里编辑的。 </p>

2009/4/17
阅读更多

CSS Selectors

Me learning the nine types of CSS selectors.

2009/4/4
阅读更多

Google 发布 Fallout 3 版搜索界面

<p>Google 已经发布了用于 Pipboy 3000 的搜索界面。用户可以在 Fallout 3 按 TAB 调出 pipboy,然后按下波浪键 (~) 调出控制台,输入 google 回车,便可以在 Fallout 3 中使用 Google 搜索。Google 的产品经理 <span>Doug Garland 同学说 pipboy 的搜索界面极大的方便了同学们的游戏过程,Google 以后还将发布类似的产品(比如 The Sims 3 中的搜索界面)。</span></p> <p style="text-align: center;"><span><a href="http://darksair.org/gallery/d/3027-1/google.png"><img class="aligncenter" src="http://img2.pict.com/20/8a/df/87d98db4642215ee7cc7e7f3a8/wOg31/google.png" alt="" width="400" height="300" /></a> </span>

2009/4/1
阅读更多

YAFV

<p>早就想写一个地球人能用的字体查看器了。现存的字体查看器都存在一个问题,就是只能查看系统已经识别的字体,或者只能查看某个字体文件,所以对于我这种看到好字体就两眼发直且配字体可以配一整天综合症患者来说,系统里要备有两套字体查看器。</p> <p>But worry no more~~  新一代轻量级字体查看器 <a href="http://github.com/Corsair/yafv/tree/master">YAFV</a> 已经诞生。功能:</p> <ol> <li>列出系统中的字体名,并查看</li> <li>查看指定的字体文件</li> <li>查看指定的字体名</li> </ol> <p><span style="text-decoration: line-through;">Todo: 查看一票字体文件,像在 feh 里一样切换。</span></p> <p>EDIT: 查看一票字体文件的功能已经实现,但是有一个严重问题:如果要查看的字体已经被安装到了系统里,会按照系统中的 style 顺序查看,而不是命令行参数中的顺序。这是因为 Qt 只能以 family name 来调用字体。我得看看 Kfontview 是怎么调用字体的...</p> <p>EDIT2: 最新更新:已经可以正常的查看系统中已安装的字体文件。在 Google Code 建立了<a href="http://code.google.com/p/yafv/">项目</a>。</p> <p><img class="aligncenter" title="YAFV" src="http://img2.pict.com/7d/63/21/8354d8ab94204a7343a0ee0d39/y8sWP/shot.png" alt="" width="450" height="350" /></p>

2009/3/27
阅读更多

可怜的孩子

<p>某人要动手术了...  起因是某人某天乐呵呵的买了一个二手自行车,在学校里美滋滋的骑。突然,前方出现一个地球人,某人一时间忘了应该刹车,为了保护忠厚老实的地球人民,某人毅然把身体向旁边一歪~~  于是韧带断了...</p> <p>衷心祝愿某人手术顺利,早日康复~~  顺便早日拿 offer~</p>

2009/3/17
阅读更多

WSU 面试

<p>定的是北京时间今天 0:00。到 10:00 的时候开始紧张。材料都准备好了,问答写了 4 大张,到网上打了会儿 Quake Live,延迟的实在太厉害,被人虐了...  11:10 不行了,开始听音乐,被某人和朋友鼓励了,然后渐渐的感觉好多了。最后一首是 Pink Floyd 的 Time。</p> <p>到 0:00,电话准时响了。Tom Johnson 同学的声音和我在网上录像里听到的一样。上来我先 hello,然后他自我介绍说自己是 WSU 物理系技术总监 (-_-),我说 Hello Mr. Johnson.  This is Mingyang Sun, an appliance of your physics Ph.D program.  然后他楞了一下,估计是第一次听到 Mingyang 这么诡异的发音,然后说我是受物理系 xxxx committee 的委托,问你几个问题。我说 Ya, sure.  Go ahead. (一紧张连 please 都忘了... 囧),然后他就开始问了。</p> <p><em>What is your interests of study?</em></p> <p>Condensed matter, nonlinear physics, complex system, that kinda stuff.</p> <p><em>What do you plan to research in the future?</em></p> <p>和我的兴趣一样,Condensed matter, nonlinear physics, complex system, that kinda stuff.  然后我又想怎么两个问题答案一样呢... 于是又加了一句 If that's what you mean。然后他又问了一遍,于是我又答了一遍...</p> <p>然后是一段很尴尬的时间,我说完了,等着他继续,他不说了... 僵持了一下,然后继续问</p> <p><em>Do you have any experience in teaching?</em></p> <p>我问他在小组讨论的时候发言算么?其实我没有什么小组讨论的经历,但不知为什么问出来了 -_- 他说算啊,于是我就很满足的说我大一的时候对全班同学做过光学史的介绍。加入 NJU LUG 以后做过几次关于 Emacs 和 TeX 的讲座,然后我充满期望的说这些东西你可能听说过吧?</p> <p>然后他就笑了一下,说我不怎么懂 Linux,那个东西太难了(我很想插一句 It's actually very simple,然后显摆一下,不过他没给我机会...)。这里有些同学懂。但我是系里的 technical supervisor,基本什么都知道一点。然后我也笑了一下,说 You know, I'm a big fan of it.  然后他接着问</p> <p><em>Do you have any interest on a specific group in the department?</em></p> <p>这个我也准备了,就说 Yes.  That would be Dr. AAA 和 Dr. BBB 的组,他们的主题和我的兴趣很符合,you know, the nonlinear and condensed matter stuff.  If I'm admitted.  I would like to work with them.</p> <p>他说其实没有也没关系。你们第一年的时候会有一次,所有的组都过来显摆一下,让你们选择。所以你不用现在选定。然后不知道为什么我说 Ah...  You know, for me it's pretty much decided.  然后忽然想起来可以把这个引到我的论文上,于是说因为我的毕业论文是关于非整数维空间中的磁性系统的,基本就是 condensed matter 和 complex system 的问题,so... (但是这时我居然忘了说我的论文发表了!!)他说 ok,然后继续问我有没有什么问题。</p> <p>我说当然有啊,你们哪里天气如何,is it too cold in winter?</p> <p>他反问我什么是 <em>too</em> cold?  我说就是零下吧。他说偶尔会有,但是他已经很久没遇到了。然后他开始兴奋,说他是从 California/Canada(我没听清是哪个-_-)来的,很喜欢这里,这里的气候很爽,冬天不冷,夏天不是很热,而且夏天非常的漂亮。我说 Wow, that's so great.</p> <p>然后我问 Can you tell me how the committee thinks of my profile(又没注意礼节-_-)?  What's the chance that I will be admitted?  他说 sorry,我不是 committee 的成员,我只是面试你,然后写个报告给他们看。他们下次会讨论的。又说他们希望招收各种不同属性的学生(和我们游戏里招宝宝一个样...),你的兴趣是我从来没见过的。然后我接着问什么时候有结果,他说不知道...  我比较失望,随便说了一句 You know, if I'm admitted, I will definitely come.  You are my first choice.  然后他马上说 you know what, 我会把这个信息写进我的报告,这是他们希望看到的。然后我想起我的论文了,说还有一个信息你们可能想知道,我的论文 xxxx xxxx xxxxx is accepted by JMMM, Journal of magnetism and magnetic material,那人貌似不知道这个期刊,说 well, 你可以写个 email 给我,我说 Ya, I'll do that.</p> <p>然后他好像临时想起来这个问题,问 <em>Why do you choose WSU?</em></p> <p>我说因为你们对 novel state of matter 很下功夫,这很对我的兴趣,而且 WSU is one of the best in the US.  So, why not?  他说很好。</p> <p>然后就随便客套了一下就 88 了。</p> <p>总得来说还凑合吧。表达的还算清楚,他貌似基本能听明白,我也能听明白他说的。但是很不爽的一点是我一紧张没有注意礼节,而且貌似说的还是太快了...</p>

2009/3/3
阅读更多

Plot with Python

Me learning Matplotlib.

2009/2/22
阅读更多

Fight Against Spam

<p>看来有必要装一个反垃圾插件了。现在每天会收到 100+ 个垃圾 comments,我原来是把这些 comments 里的链接的域名部分加到 spam 列表里,后来发现每过几个小时这些 spam 就会换里面的链接... 又发现这些 spam 里都包含 comment[0-9],于是把 “comment” 加到 moderation list 里,很管用,但是每天又有那么多需要手动从 moderation list 移到垃圾箱里了...</p> <p>Google 了一下,找到几个比较有意思的反垃圾插件:</p> <ol> <li><a href="http://lordchaos.dominatus.net/wordpress-plugin-challenge">Challenge</a>: 给写评论的人出一道题,打对才显示评论</li> <li><a href="http://priyadi.net/archives/2005/10/07/wpbayes-naive-bayesian-comment-spam-filter-for-wordpress/">WPBayes</a>: 这个比较强悍,使用了贝页斯过滤器...</li> <li><a href="http://blog.taragana.com/index.php/archive/word-press-1-5-plugin-referer-bouncer/">Referrer Bouncer</a>: Er... 不知道这个是什么原理。</li> </ol> <p>后面两个貌似都许久不更新了。还有一个 <a href="http://wordpress.org/extend/plugins/wp-spam-hitman/">wp-spam-hitman</a>,可以搞正则表达式匹配,应该很有用。暂时决定先试试 Challenge。</p> <p>更新:装了一个 <a href="http://playground.ebiene.de/1137/antispam-bee-wordpress-plugin/">Antispam Bee</a>,效果不错。又装了一个 <a href="http://www.pancak.es/plugins/is-human/">is-human()</a>,可以在评论页放一个随机问题,正在想问题中...</p>

2009/2/21
阅读更多

学车第一天

<p>严格来讲不能叫第一天,不过是第一次开车。那个教练很强悍,为了鼓励我帮他推荐学生,态度极好,教的也很好。把两天的课程都学了,起步、停车、转弯、穿桩、直角弯、坡起、8 字弯、100 米加减挡,在路上以四档横冲直撞...  不过很简单,坡起我第一次就起来了。直角弯和 8 字弯一次也没上路沿,哈哈哈哈哈^^</p> <p>BTW, WP 升级到 2.7.1 以后 K2 主题乱掉了,这是一个<a title="To WP support page" href="http://wordpress.org/support/topic/242515">在 K2 用户中普遍发生的问题</a>。我一度试图找到一个可以达到我这个主题的 PP 程度 10% 的 WP 暗色主题,未遂。后来重新 svn 了一个 K2,解决了。</p>

2009/2/13
阅读更多

Fallout 3

<p>玩了几天 Fallout 3,给我留下了极其深刻的印象。</p> <p>首先,游戏在视觉上极其的强悍。这个游戏刻画了世界核战争以后的 Washington D.C.,基本满屏幕都是破败的黄色(又称屎黄色)。但是这并没有影响画面的牛逼性。在开放场景中,D.C. 的外观表现的美轮美奂,叹为观止;室内场景中规中矩,但气氛绝对是有的。昼夜循环和天气变化都很完美,不过很傻逼的一点是夜里人物投影的方向不和月亮的方向相反 -_-...  另外游戏的 HDR 优化的很好,打开以后速度只有 3fps 左右的下降。</p> <p style="text-align: center;"><a href="http://darksair.org/gallery/v/shots/games/fallout3/Fallout3+2009-01-28+11-33-52-85.png.html"><img class="alignnone" title="Fallout 3" src="http://darksair.org/gallery/d/1690-2/Fallout3+2009-01-28+11-33-52-85.png" alt="" width="150" height="150" /></a> <a href="http://darksair.org/gallery/v/shots/games/fallout3/Fallout3+2009-01-28+00-33-35-48.png.html"><img class="alignnone" title="Fallout 3" src="http://darksair.org/gallery/d/1663-2/Fallout3+2009-01-28+00-33-35-48.png" alt="" width="150" height="150" /></a> <a href="http://darksair.org/gallery/v/shots/games/fallout3/Fallout3+2009-01-27+20-15-55-46.png.html"><img class="alignnone" title="Fallout 3" src="http://darksair.org/gallery/d/1579-2/Fallout3+2009-01-27+20-15-55-46.png" alt="" width="150" height="150" /></a></p> <p>但是这个游戏的亮点不在图像,而在系统。Fallout 3 给我的最强大震撼在于虽然游戏的背景是科幻的,但是情节和环境设计的非常真实,令人信服。这个游戏非常的自由。当你从 Vault 101 出来以后,你可以在 Capital Wasteland 上到处乱走。如果你强悍到一下走到了 <acronym title="Galaxy News Radio">GNR</acronym> Station,你甚至可以跳过整个 Megaton。在 Megaton 里有一个未爆炸的核弹,你可以放任不管,也可以把核弹 deactivate 了,也可以躲到安全的地方直接引爆核弹,把 Megaton 从地图上抹掉。但是不管你怎么做,你都要为自己的行为负责,而且这个责任的影响往往非常深远。如果你引爆了核弹,你就会被很多人视为坏人,并且短期内找不到安全的地方存放外面捡来的破烂;如果你 deactivate 了核弹,村里的大部分人会对你很好,甚至 GNR 的 DJ Three Dog 也会对你刮目相看,但是一些极端分子就会开始盯上你。另外,在你下这个决定之前,可以找到一个西装革履的人,他会让你引爆这个核弹然后给你一些报酬。然后再次和 Megaton 的 sheriff(相当于镇长和警卫)对话的时候会多出一个选项来告发这个人。在你告发他以后,sheriff 会去找他,让他去坐牢,然后在 sheriff 转身的时候,这个人会掏出枪来把 sheriff 毙了,然后这个重要的 NPC 就会永远从游戏里消失。再比如,在游戏中,暴力往往不是解决问题的唯一途径。如果你需要找一个房子住,你可以在 Megaton 随便找一个房子,把里面的居民都杀了,把房子据为己有,也可以在外面端掉一个 raider 窝点,使用那里的设备,还可以 deactivate Megaton 里的核弹,然后 sheriff 同学会给你一个空房子的钥匙。再比如,你在 20:00 左右的时候访问 Rivet City Market,那些店主就会告诉你要关门了,让你快点搞定。如果你夜里在那里转悠的话,那些店主就会开始怀疑你,甚至直接跟你火拼。再比如,由于我扮演的是一个超级善良的人,某天早上我从 Megaton 的家里出来时,一个居民走过来送给我一个蛋糕... 再比如,游戏里的每一个尸体都会永久的存在下去,你甚至可以使用尸体来作为可靠的储物柜。</p> <p style="text-align: center;"><a href="http://darksair.org/gallery/v/shots/games/fallout3/Fallout3+2009-01-27+21-05-47-40.png.html"><img class="alignnone" title="The Nuke Bomb" src="http://darksair.org/gallery/d/1612-2/Fallout3+2009-01-27+21-05-47-40.png" alt="" width="150" height="150" /></a> <a href="http://darksair.org/gallery/v/shots/games/fallout3/Fallout3+2009-01-27+20-24-42-64.png.html"><img class="alignnone" title="Fallout 3" src="http://darksair.org/gallery/d/1588-2/Fallout3+2009-01-27+20-24-42-64.png" alt="" width="150" height="150" /></a> <a href="http://darksair.org/gallery/v/shots/games/fallout3/Fallout3+2009-01-27+21-20-53-12.png.html"><img class="alignnone" title="Fallout 3" src="http://darksair.org/gallery/d/1627-2/Fallout3+2009-01-27+21-20-53-12.png" alt="" width="150" height="150" /></a></p> <p>游戏里也有一些非常搞笑的东西,比如在 Vault 101 里有一道题,大意是“在 Vault 101 里,是谁给了我们干净的水、食物,是谁给了我们生命?”,四个选项都是“Overseer”-_-...  还有很多人的对话。</p> <p style="text-align: center;"><a href="http://darksair.org/gallery/v/shots/games/fallout3/Fallout3+2009-01-27+17-11-14-78.png.html"><img class="alignnone" title="Fallout 3" src="http://darksair.org/gallery/d/1562-2/Fallout3+2009-01-27+17-11-14-78.png" alt="" width="150" height="150" /> <a href="http://darksair.org/gallery/v/shots/games/fallout3/Fallout3+2009-01-27+16-35-49-14.png.html"><img class="alignnone" title="Fallout 3" src="http://darksair.org/gallery/d/1547-2/Fallout3+2009-01-27+16-35-49-14.png" alt="" width="150" height="150" /> <a href="http://darksair.org/gallery/v/shots/games/fallout3/Fallout3+2009-01-27+17-06-09-92.png.html"><img class="alignnone" title="Fallout 3" src="http://darksair.org/gallery/d/1553-2/Fallout3+2009-01-27+17-06-09-92.png" alt="" width="150" height="150" /></a></a> </a> 继续发掘中...

2009/1/29
阅读更多

主题,和 LaTeX 插件

<p>给 K2 主题做了一个主题 Deviant,颜色模仿第二版 <a href="http://deviantart.com">DeviantART</a>,并且做了一个自认为很强大的标题图片,哈哈 ^^</p> <p>顺便给这个 blog 装了个 LaTeX 插件,测试一下:</p> <p>$$!\displaystyle\textrm{\LaTeX} = A !\int_0^\infty !!! \epsilon_0 \sin \frac{\omega t}{\beta x} \,\mathrm{d}x$$</p> <p>$$(a+b)^2 = a^2 + b^2 + 2ab$$</p>

2009/1/25
阅读更多

What's the Deal?

<p>总算把空间搞起来了。HostMonster 自带 Python 2.3 和 2.6,但是 2.6 的库不全,起码没有 <code>select</code> 库,2.3 是全的,很诡异。过几天装个 Django 试试。自己编译 Python 2.6 未遂,编译了一个 Emacs23 和 Htop。另外还搞了个相册,<a href="http://gallery.menalto.com/">Gallery</a> 的,很好很强大,在 community 的插件库里有个可以在 Google Maps 上标明照相地点的插件,以后可能会有用,但是这个相册缺乏对照片进行批量操作的能力。</p> <p>下面还有很多事要做:</p> <ol> <li>装 Django,把我的 Django 程序都放上来</li> <li>把我的 wiki 搬过来。</li> </ol> <p>今天去考交规了,89 分,太郁闷了... :-( 过了春节继续...</p> <pre><code>:::C /* It's a GeShi test */ #include &lt;stdio.h&gt; int main() { printf("Hello world!\n"); return 0; } </code></pre>

2009/1/17
阅读更多

生成 ASCII Arts 的程序

<p>做个广告先:我的 wiki 搬家且更新了,重新设计了 CSS。新地址在<a href="http://corsairdoom.freehostia.com/wiki/">这里</a>。</p> <p class="centered"><img src="http://img267.imageshack.us/img267/3048/webih6.png" alt="My Wiki" /></p> <p>写了一个<a href="http://code.google.com/p/latrine/">生成 ASCII arts 的程序</a>,效果如下。</p> <pre><code>__ __ _ \ \ / / ___ _ _ ___ _ _ __ | |__ \ V / / _ \| || | (_-&lt;| || |/ _|| / / |_| \___/ \_,_| /__/ \_,_|\__||_\_\ </code></pre> <p>这个程序支持读取 <a href="http://www.figlet.org/">FIGlet</a> 的字体,并且支持两种 kerning style: 不 kern 和 fitting。展示如下:</p> <table> <tr> <td> <pre> _____ _ __ |_ _| ___ | '_ \ | | / _ \ | | | | | | | __/ |_| |_| |_| \___| </pre> </td> <td> <pre> _____ _ __ |_ _| ___ | '_ \ | | / _ \ | | | | | | | __/ |_| |_| |_| \___| </pre> </td> </tr> <tr> <td>No kerneling</td> <td>Fitting</td> </tr> </table> <p>字体在 figlet 网站下载。顺便展示几个~~</p> <pre><code> \_/ _ _ _ | | | (_) |_| _&gt; |_| (_ |&lt; o .oooooo..o oooo .o. d8P' `Y8 `888 888 Y88bo. oooo oooo .ooooo. 888 oooo 888 `"Y8888o. `888 `888 d88' `"Y8 888 .8P' Y8P `"Y88b 888 888 888 888888. `8' oo .d8P 888 888 888 .o8 888 `88b. .o. 8""88888P' `V88V"V8P' `Y8bod8P' o888o o888o Y8P _____ ______ _ __ __ / ___/ ___ ___ /_ __/ ___ | |/_/ / /_ / /__ / _ \ / _ \ / / / -_) _&gt; &lt; / __/ \___/ \___//_//_//_/ \__/ /_/|_| \__/ </code></pre> <p>嘿嘿 :-D</p>

2008/11/6
阅读更多

在 Emacs 里以 root 权限运行程序

<p>囧阿,一直用 Emacs 的 <code>dictionary.el</code> 作字典,但是启动 <code>dictd</code> 的时候都要跑到终端里去,因为要 <code>sudo</code>。今天下决心解决这个问题。到 <a href="http://www.emacswiki.org/">emacswiki</a> 里看了一圈,到 IRC 里问了一圈,把 Tramp, <code>shell-mode</code> 和 <code>intcmd-mod</code> 的 sudo 问题都解决了,但还是搞不定 <code>shell-command</code> 的 sudo。看来这个函数运行的时候完全没有办法接受用户的输入作为 stdin。最后翻到 Tramp 的手册,发现以 root 权限运行 <code>shell-command</code> 需要先 <kbd>C-x C-f /sudo::</kbd>,把当前目录变为 <code>/sudo::/root</code>,然后再 <kbd>M-!</kbd> 运行 <code>shell-command</code>... 太囧了...</p>

2008/9/23
阅读更多

买书去了

<p>本来是陪我弟买 PHP 相关书籍的,结果我也忍不住买了三本。</p> <p>第一本是 N. Gregory Mankiw 写的 <em>Principles of Microeconomics</em>,一本普通的微观经济学著作,不说了。</p> <p>第二本是漫画《找死的兔子》,以前在网上看到过一些,这次发现有卖的,顺手就买了。</p> <p>第三本是孙荣恒的《趣味随机问题》。这本书看名字显然是一本科普读物,但是我翻看来第一节赫然是讲集合和可测性的,而且所有的定义都像教科书一样严密的给出,所有的定理都有详细证明,每个例子都给出详细的推导,而不像某些自诩为教科书的书那样充满了“显然,xxxx”和“经证明,可得xxx”,遂买下。这书的内容虽不高深,但对我这样没有正经学过数学的人来说,也合适了。</p>

2008/8/25
阅读更多

Suffix Tree

<p>在<a href="http://blog.csdn.net/g9yuayon/">负暄琐话</a>里看到<a href="http://blog.csdn.net/g9yuayon/archive/2008/06/21/2574781.aspx">关于 suffix tree 的帖子</a>,感觉很牛逼,于是用 scheme 实现了一个,写了一个多小时。唉,以我现在的水平,用 scheme 写点东西还是很费劲的... 话说用 suffix tree 可以在线性时间内实现很多字符串匹配和查找的功能,无边强大~</p> <!--more--> <p>(define (gen-suffix x) ; x is a list (if (null? (cdr x)) (list x) (cons x (gen-suffix (cdr x)))))</p> <p>(define (compare-two stringcons) ;stringcons is a cons ;; anyone is empty? (if (or (null? (car stringcons)) (null? (cdr stringcons))) '() ; one of them is empty (if (equal? (car (car stringcons)) ; none of them is empty (car (cdr stringcons))) (cons (car (car stringcons)) (compare-two (cons (cdr (car stringcons)) (cdr (cdr stringcons))))) '() )))</p> <p>(define (next-to-common stringcons common) (if (null? common) (cons (if (null? (car stringcons)) '() (car (car stringcons))) (if (null? (cdr stringcons)) '() (car (cdr stringcons)))) (next-to-common (cons (cdr (car stringcons)) (cdr (cdr stringcons))) (cdr common))))</p> <p>(define (make-tri index node childs) (cons index (cons node childs)))</p> <p>(define (node tri) (car (cdr tri))) (define (index tri) (car tri)) (define (childs tri) (cdr (cdr tri))) (define (find-index char kids) (if (null? kids) '() (if (equal? char (index (car kids))) (car kids) (find-index char (cdr kids)))))</p> <p>(define (replace-by-index idx kids newkid) (if (null? kids) '() (if (equal? (index (car kids)) idx) (cons newkid (cdr kids)) (cons (car kids) (replace-by-index idx (cdr kids) newkid)))))</p> <p>(define (insert-string string tri) ;; tri: (list index node child1 chind2 ...) (let* ((common (compare-two (cons string (node tri)))) (nextchar (next-to-common (cons string (node tri)) common))) (if (equal? common (node tri)) (if (null? (find-index (car nextchar) (childs tri))) (make-tri (index tri) (node tri) (cons (make-tri (car nextchar) string '()) (childs tri))) (make-tri (index tri) (node tri) (replace-by-index (car nextchar) (childs tri) (insert-string string (find-index (car nextchar) (childs tri)))))) (make-tri (index tri) common (list (make-tri (cdr nextchar) (node tri) (childs tri)) (make-tri (car nextchar) string '()))))))</p> <p>(define (insert-string-list strlist tri) (if (null? strlist) tri (insert-string (car strlist) (insert-string-list (cdr strlist) tri))))</p> <p>(define (gen-suffix-tree string) (insert-string-list (gen-suffix string) (make-tri '() '() '()))) 运行一下: &gt; (gen-suffix-tree (string-&gt;list "bananas$")) (() () (#\b (#\b #\a #\n #\a #\n #\a #\s #\$)) (#\n (#\n #\a) (#\s (#\n #\a #\s #\$)) (#\n (#\n #\a #\n #\a #\s #\$))) (#\a (#\a) (#\s (#\a #\s #\$)) (#\n (#\a #\n #\a) (#\s (#\a #\n #\a #\s #\$)) (#\n (#\a #\n #\a #\n #\a #\s #\$)))) (#\s (#\s #\$)) (#\$ (#\$))) 很乱很正确~~</p> <p>一些链接:</p> <ul> <li><a href="http://en.wikipedia.org/wiki/Suffix_tree">Suffix tree @ wikipedia</a></li> <li><a href="http://video.google.co.uk/videoplay?docid=3849716474680225865&amp;q=suffix+tree&amp;total=5&amp;start=0&amp;num=10&amp;so=0&amp;type=search&amp;plindex=0">讲解生成方法的视频</a>,在 mac os 里用一个未知软件做的</li> <li><a href="http://www.cs.mcgill.ca/~cs251/OldCourses/1997/topic7/">Tries 和 suffix trees</a></li> </ul>

2008/6/23
阅读更多

Glenn Gould

<p>Gould 是个争议性人物,他的钢琴演奏受到无数人的唾骂,也受到无数人的赞美。我今天听了他的 Mozart piano sonata no.12,感觉是:这应该才是 Mozart 爷爷想说的。</p> <p>下面是一个 Gould 弹 Mozart 的视频。传说他在音乐会上也是这样弹的...</p> <object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/M6Zc7P6NsZ8&amp;hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/M6Zc7P6NsZ8&amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object> <p>下面有个 comment 也表达了我的想法:</p> <blockquote> <p>Glenn is such a phenomenom to me, he plays exact, and precise, evey note is exactly equal in value, yet, there is passion and love for the music, if anybody else played like this, it would be almost mechanical, robotic, gould has mastered something i dont think many others will come close to.</p> </blockquote>

2008/3/28
阅读更多

Phun

<p><a href="http://www.acc.umu.se/~emilk/">Phun</a> 是一个 “2D physics sandbox”,是 Umeå 大学一个硕士生的毕业作品,使用了 C++ + boost + OpenGL + GLEW + SDL。这个东西最强悍的地方在于可以用鼠标画一个任意形状的物体参与计算。以下是官方的介绍视频:</p> <object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/0H5g9VS0ENM"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/0H5g9VS0ENM" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object> <p>以下两个是我做的~~ :-p <ul><li><a href="http://youtube.com/watch?v=KnlZQmtWyeM">4WD (2WD...)</a></li> <li><a href="http://youtube.com/watch?v=zCztgiQAglw">不 incredible 的 incredible machine</a></li> </ul></p> <p>这个东西目前还未开源,不过作者说以后会开的~~</p>

2008/3/11
阅读更多

冰岛语 KDE

<p><a href="http://www.kde.org/">KDE</a> 新出的 <a href="http://www.kde.org/announcements/announce-4.0.2.php">4.0.2 版</a>的 <a href="http://www.kde.org/announcements/changelogs/changelog4_0_1to4_0_2.php">changelog</a> 的最后有 <blockquote>Icelandic has been added to KDE translations.</blockquote></p> <p>难道这就是传说中的只有几千人用的冰岛语??:-D</p>

2008/3/6
阅读更多

SSH in The Matrix

<p>这几天重新看 The Matrix,发现在第二部的后面,Trinity crack 进电力系统的网络,准备关闭备用系统的时候,她用的居然是 <abbr title="Secure SHell">SSH</abbr>?!看<a href="http://img341.imageshack.us/img341/3230/sshhb3.png" rel="lightbox">截图</a>。</p> <p>从这个截图里还可以推测出他们 crack 的过程: </p> <ol> <li>使用 <a href="http://insecure.org/nmap/">nmap</a> 对主机 10.2.2.2 进行端口扫描,看到 SSH 端口开着。虽然这个命令行没有给出,不过可以想象大概为这个样子: # nmap -sT 10.2.2.2</li> <li>使用 `sshnuke` 更改 10.2.2.2 的 root 密码。不用试了,你的机器里没有这个程序</li> <li>以 root 登录 10.2.2.2</li> </ol> <p>另外,我发现两个证据说明这是一个苹果机网络(起码都运行着苹果的操作系统)。一个是那个输入密码的对话框,窗口装饰很像是古老的 Mac OS,另一个是 nmap 的扫描过程。大家注意这行字: </p> <blockquote>The 1539 port scanned but not shown below are in state: closed</blockquote> <p>1539 端口貌似是一种叫作 Mac-net 的服务的端口...</p> <p>补充(2008-03-06):`sshnuke` 的输出里有一句 <blockquote>Attempting to exploit SSHv1 CRC32 ... successful.</blockquote> 也许使用 SSHv1 协议正是服务器这么轻易就被攻破的原因~~。所以在此提醒大家:<em>一定要使用 v2 协议!</em>^_^</p>

2007/12/30
阅读更多

Computer Generated Hologram

<p><acronym title="Computer Generated Hologram">CGH</acronym>,计算机生成全息,就是可以把入射光的相位信息保存下来的东西。目前网上介绍这个东西的文章大多以论文(而且都是要钱的...)的形式出现,不利于我等民间人士访问。正好这几天由于学习上的需要写了一个二维 CGH 的程序。大家都知道光学的全息就是让物光通过一组透镜产生傅立叶变换,然后用一束参考光干涉来记录,所以在 CGH 里只要对物做傅立叶变换,然后记录变换结果就行了。具体步骤如下: <ol> <li>把物做成图片</li> <li>对图片做 FFT,生成一组复数</li> <li>把复数编码成图片并保存</li> </ol> 要还原时只需要从生成的图片里导出频域信息,并做 FFT 逆变换。</p> <p><a href="http://www.box.net/lite/ngjd4qfeck"><img src="http://www.box.net/lite/image/ngjd4qfeck.png" border="0"></a></p> <p>我这个程序比较弱智,我自己写了一个读写 bmp 文件的类,只能操作 windows 格式的 24 bit bmp,编码用了类似 Lohmann 的,用开孔的位置表示相位,孔的深浅表示幅度。用法为 holo -i &lt;inputfile&gt; [-o &lt;outputfile&gt;] [-w &lt;site width&gt;] [-h &lt;site height&gt;] [-d &lt;hole width&gt;] [-r] 其中 `site width` 是每个孔能活动的宽度,`site height` 是孔的高度,`hole width` 是孔的宽度,`site width - hole width` 决定了相位的精度,而幅度的精度永远是 8 bit。</p>

2007/11/19
阅读更多

id Tech5

<p><img src="http://corsair.scinese.com/files/2007/10/id-tech5.png" alt="id Tech5 Logo" class="alignright" /><p>上个月的 QuakeCon 上,id 发布了使用 id Tech5 引擎制作的 <em>Rage</em> 的一段 demo,传说这是用 id Tech5 引擎实际渲染出来的。从这个 demo 里,我们可以大概看出新引擎的一些特性:</p></p> <ol> <li>真实的景深效果,只有镜头焦点附近的东西是清晰的,其它东西按照离焦点的远近呈现不同半径的模糊。按照 John Carmack 的一贯作风,我怀疑离焦点的远近被简化成 z 轴坐标~~</li> <li>真实的阴影。Doom3 引擎的阴影已经很好了,就缺少模糊的边缘。很多其他游戏里有边缘模糊的阴影,一般来说这可能是两种情况: <ul> <li>阴影是 buffer shadow,精度不够所以模糊了</li> <li>先搞一个精确的阴影,然后对阴影整体模糊</li> </ul> 前面一种显然是错误的,后面一种则是对真实阴影的“零阶近似”。为什么?看看<a href="http://img371.imageshack.us/img371/5134/tempck7.png" rel="lightbox" title="Real shadow from an area light">这张图</a>就知道了,这是我用 <a href="http://www.blender.org/">Blender</a> 渲染的。看到了么?真实的阴影在离物体近的地方是比较锐利的,离物体越远越模糊。而 id Tech5 似乎已经实现了真实阴影的“一阶近似”(也许是更高阶)。注意下面第三张截图的左边,人物肩膀上的盔甲在衣服上投下的阴影。</li> <li>开放的户外场景,改进的 MegaTexture。</li> <li>更先进的 shader。从截图上看,不仅是金属,其他各种材质在 id Tech5 里都有异常真实的表现,不像 Doom3 里只有金属... 那个人脸的特写,就像照片一样...</li> <li>HDR。这个是 Doom3 的一大缺憾...</li> </ol> <p><img src="http://img223.imageshack.us/img223/2682/shot0001wn7.jpg" alt="John Carmack" class="alignright" /></p> <p>改写一段 <em>Man in Black</em> 的台词作为结尾吧:</p> <p>After Quake, everybody <em>knew</em> that the world was 3D. After Quake II, everybody <em>knew</em> that lights could be colorful. After Quake III, everybody <em>knew</em> that a texture could be mapped onto a cylinder. After Doom3, everybody <em>knew</em> that without light, the world would be all black. Today, we <em>know</em> that shadows are fuzzy. Imagine what we <em>will know</em>, tomorrow.</p> <div class="center"><a href="http://img223.imageshack.us/my.php?image=shot0007ij8.jpg" target="_blank"><img src="http://img223.imageshack.us/img223/5497/shot0007ij8.th.jpg"></a> <a href="http://img223.imageshack.us/my.php?image=shot0006qv6.jpg" target="_blank"><img src="http://img223.imageshack.us/img223/7012/shot0006qv6.th.jpg"></a> <a href="http://img223.imageshack.us/my.php?image=shot0005vb4.jpg" target="_blank"><img src="http://img223.imageshack.us/img223/5175/shot0005vb4.th.jpg"></a> <a href="http://img223.imageshack.us/my.php?image=shot0004ua5.jpg" target="_blank"><img src="http://img223.imageshack.us/img223/7856/shot0004ua5.th.jpg"></a> <a href="http://img223.imageshack.us/my.php?image=shot0003bw1.jpg" target="_blank"><img src="http://img223.imageshack.us/img223/6671/shot0003bw1.th.jpg"></a></div>

2007/10/6
阅读更多

Ligatures in Firefox

<p>在写完<a href="http://corsair.scinese.com/2007/10/multi-column/">上一篇关于 CSS3 分栏的 post</a> 以后,我查看分栏的效果,突然发现底下英文那一段中的 <em>figure</em> 比较诡异,放大以后发现 Firefox 居然支持字体中的 <a href="http://en.wikipedia.org/wiki/Typographical_ligature" title="Link to Wikipedia entry">ligatures</a>~~</p> <p>关于 ligatures,简单的说就是把某些字母组合搞成一个字母,这样看起来更好看(一般来说是更紧凑)。还有三点补充: <ol> <li>Ligatures 很神奇</li> <li>Windows 下的程序基本都不能识别 ligatures,除非是 Safari 3 和 Adobe 这样自己写字体引擎的</li> <li>X 的 Freetype 2 在 patch 之后支持 ligatures。</li> </ol> 看截图,是在 Firefox 里放大到 4 倍的结果,字体是 Adobe 的 Gill Sans Std: </p> <table class="center" width="100%"> <tr> <td><img src="http://img54.imageshack.us/img54/6324/connectbk5.png" alt="Ligatures in Firefox" /></td> <td><img src="http://img389.imageshack.us/img389/1717/normalida7.png" alt="Normal i" /></td> </tr> <tr> <td>连在一起的 f 和 i</td><td>普通的 i</td> </tr> </table>

2007/10/3
阅读更多

Multi-column

<p>CSS3 中增添了对分栏排版的支持,这个我很早就知道了,但是今天才发现 Firefox 和 Safari 3 已经实现了这个东西,真是惊天地泣鬼神... 测试一下~~</p> <p><strong>中文的:</strong></p> <div class="col2"> 从那以后,他的预感就不太灵了。那一天,乌苏娜在狱里探望他的时候,他经过长久思考得出结论,这一次,死神很可能不会马上来临,因为死神的来临取决于刽子手的意志,他被自己的脓疮弄得很苦,整夜都没睡着。黎明前不久,走廊上响起了脚步声。“他们来啦,”奥雷连诺自言自语地说,他不知为什么突然想起了霍&sdot;阿&sdot;布恩蒂亚;就在这一片刻,在黎明前的晦暗里,霍&sdot;阿&sdot;布恩蒂亚蜷缩在粟树下面的板凳上,大概也想到了他。奥雷连诺上校心里既没有留恋,也没有恐惧,只有深沉的恼怒,因他想到,由于这种过早的死亡,他看不到自己来不及完成的一切事情如何完成了……牢门打开,一个士兵拿着一杯咖啡走了进来。第二天,也在这个时刻,奥雷连诺上校腋下照旧痛得难受的时候,同样的情况又重复了一遍。星期四,他把乌苏娜带来的蜜饯分给了卫兵们,穿上了他觉得太紧的干净衣服和漆皮鞋。到了星期五,他们仍然没有枪毙他。</div> <p><br /></p> <p><strong>英文的:</strong></p> <div class="col2"> A small figure gallops across the windswept ice slope. The bundled rider is mounted on a large gray snow lizard, a Tauntaun. Curving plumes of snow rise from beneath the speeding paws of the two-legged beast. The rider gallops up a slope and reins his lizard to a stop. Pulling off his protective goggles, Luke Skywalker notices something in the sky. He takes a pair of electrobinoculars from his utility belt and through them sees smoke rising from where the probe robot has crashed. The wind whips at Luke's fur-lined cap and he activates a comlink transmitter. His Tauntaun shifts and moans nervously beneath him.</div>

2007/10/3
阅读更多

TeXPNG GUI

<p>这是<a href="http://corsairdoom.blogspot.com/2007/04/texpngpy.html">以前写的 texpng 程序</a>的图形界面版,我把以前的 texpng.py 改写了一下(这是好听的说法,其实是剪切粘贴了一下),把转换过程抽象了一下,方便在图形界面里调用。和 texpng.py 一样,这个东西需要一个正常的 LaTeX 系统、dvipng 和 Imagemagick,除此之外,图形库使用了 wxpython。用法就不废话了,GUI 啊同志们... 最后,那三个图标是 oslo 图标集中的,版权属于原作者。</p> <ul> <li><a href="http://img219.imageshack.us/img219/4006/shotye2.png">截图</a></li> <li>下载</li> </ul> <p>对了,过几天大家可能会看到一个更牛逼的转换 TeX 的程序,不过不是在我这里~~ :-p</p> <p>最后的最后,说点感想~~</p> <ol> <li>在 Linux 下写程序太方便了,感觉 Linux 就是写程序用的~~。这两天狂用了 Mac OS X 之后,隆重宣布:宇宙里最好用的 PC 操作系统是配置好的 Linux~~</li> <li>现在写个图形界面太方便了!这个小破程序是我三个小时攒的...</li> <li>还没想好...</li> </ol> <p>PS:这个程序在运行的的时候会覆盖当前目录下的 <code>temp.png</code> 文件(如果有的话),退出的时候把这个文件删除。</p>

2007/9/30
阅读更多

MacTeX

Me setting up a LaTeX system on Mac.

2007/9/27
阅读更多

Mozilla @ Mac OS X

<p>可能是由于安在 x86 上的缘故,Safari 不太稳定,一打开某些中文网页就崩溃... 真不知道为啥在中国大家都不遵守 <abbr title="HyperText Markup Language">HTML</abbr> 4 和 <abbr title="eXtensible HyperText Markup Language">XHTML</abbr> 1.0 呢~~~ 于是还是用 Firefox... 但是 Firefox 似乎对 OS X 的 Type1 字体有强烈的不满,不是显示一堆火星文就是显示成脚标/上标状... 搞得我看中文像看公式一样... 后来听说还有个 Camino,也是 Mozilla 的,会好一点,赶快安上,发现确实好一点,基本没有火星文,公式也比较少... 看截图:</p> <table width="100%" class="center"> <tr> <td><img src="http://img217.imageshack.us/img217/6946/zhfirefoxtl3.png" alt="Firefox 截图" /></td> <td><img src="http://img166.imageshack.us/img166/6148/zhcaminoph4.png" alt="Camino 截图" /></td> </tr> <td>Firefox</td><td>Camino</td> </tr> </table> <p>我想出现这种鸟事是因为 Mozilla 们为了跨平台,搞了自己的字体引擎,不肯使用各操作系统自带的 API,但是对 Type1 支持又不好,不能正确读取字体中的某些信息,于是就出现了火星文和公式...</p>

2007/9/26
阅读更多

OS X: 配置完了,小研究一下

<p>Google 了无数次,也找到了一些安装显卡驱动的方法,但在我的机器上就是不管用... 所以到现在还没有硬件加速,这个本来没什么,少一些特效而已,但是发现 OS X 里播放视频是需要硬件加速的...</p> <p>大概研究了一下 OS X 下的程序,标准的 OS X 程序都是一个名字以 <code>.app</code> 结尾的文件夹,里边一般只有一个文件夹叫 <code>Contents</code>,这个程序的一切都在这个文件夹里,包括图标,配置(有些比较底层的会在 <code>/Library</code> 和 <code>/System</code> 里面放配制)语言文件等等。比较爽的是,OS X 和它里面的程序都是极端脚本化的,不仅配置一律是 xml,而且控件的摆放(!),图片的位置,dock 图标,甚至部分逻辑都是 xml,对于我们这些喜欢没事瞎改的人来说,这样的系统基本上就是天堂了~~。举个简单的例子,无论在什么操作系统里,只要有一个图形界面的文件管理器,你在里面新建一个目录的时候都有一个默认的目录名,比如在 Windows 里叫“新建文件夹”,这是被硬编码的,没有源代码的人改不了;在 OS X 里叫 <em>untitled name</em>,这个可以在 <code>/System/Library/CoreServices/Contents/Resources/English.lproj</code> 中修改,这个 <code>.lproj</code> 是一个语言文件,会被其他的 xml 调用。貌似现在达到这种境界的基本上就只有 wxWindow 了(用 xml 来摆控件)。</p> <p>OS X 里面是有 python 的,不过是 2.3 版,严重不爽,于是装了一个 2.5(装好以后还要手动做符号连接...),开始考虑有什么程序可以写~~。想了半天,决定写一个批量删除语言文件的东西,把机器里的那些非人类语言都删掉,可以节省数百 MB 的硬盘~~,代码(用法看开头的注释):</p> <pre><code>:::Python #!/usr/bin/env python # # Usage: # kill-lang.py app_list # # eg: kill-lang.py mail.app aquamacs.app # ls -1 | awk '{print "\""$0"\""}' | xargs kill-lang.py import os import sys import re import shutil ReservedLang = ["English", "zh_CN"] if len(sys.argv) == 1: usage() sys.exit(1) def usage(): print(' '.join(["Usage:", sys.argv[0], "application_names (with \".app\")"])) return def handleRmError(function, path, excinfo): sys.stderr.write(''.join(["Error deleting ", path, ", err:\n", str(excinfo), "\n"])) def killLang(app): # Get the path where language files are located. AppResource = '/'.join([app, "Contents", "Resources"]) if not os.path.isdir(AppResource): sys.stderr.write("This program dose not have a standard app structure.\n") sys.exit(2) AppSubs = os.listdir(AppResource) Langs = [] for Sub in AppSubs: if re.match(".*\.lproj$", Sub) != None: Langs.append(Sub) FullLangs = ['/'.join([AppResource, Lang]) for Lang in Langs] for i in range(len(FullLangs)): if not Langs[i][:-6] in ReservedLang: print("".join(["Deleting ", Langs[i], "..."])) shutil.rmtree(FullLangs[i], False, handleRmError) return 0 def main(): for App in sys.argv[1:]: App = os.path.abspath(App) print App + ':' if not os.path.isdir(App) or len(App) - App.rfind(".app") != 4: print "Not an app, skipped" continue killLang(App) return 0 sys.exit(main()) </code></pre>

2007/9/21
阅读更多

Mac OS X

I just installed a Hackintosh! Mac is awesome!

2007/9/19
阅读更多

Pac 自动代理配置

<p>今天在网上乱逛,不小心看到一个自动代理配置脚本(就是传说中的 pac 文件),发现语法怎么就和 Java 那么像呢~~?Google 一番之后发现其实 pac 就是一个 Javascript 函数,名叫 <code>FindProxyForURL</code>。它接收两个参数,<code>url</code> 和 <code>host</code>,都是字符串。<code>url</code> 是浏览器将要进入的地址,<code>host</code> 就是地址中 <code>://</code> 和第一个 <code>/</code> 之间的部分。返回值为一个字符串,有三种情况:</p> <ul> <li>直接连接,不经过代理,返回 <code>"DIRECT"</code></li> <li>经过代理,返回 <code>"PROXY</code> <em>host:port</em><code>"</code></li> <li>经过 socks 服务器,返回 <code>"SOCKS</code> <em>host:port</em><code>"</code></li> </ul> <p>有了这些规则,我们就可以随意加入逻辑,一劳永逸地解决是否使用代理,何时使用代理,使用什么代理等一系列重大问题。比如,我要对 blogspot 使用 72.14.219.190,其他某些倒霉的地址使用 Tor,剩下的碌碌无为的地址不使用代理,就可以用下面这个 pac。</p> <pre><code>:::Javascript function FindProxyForURL(url, host) { url = url.toLowerCase(); host = host.toLowerCase(); if(dnsDomainIs(host, ".blogspot.com")) return "PROXY 72.14.219.190:80"; if(dnsDomainIs(host, ".wikipedia.org") || dnsDomainIs(host, ".technorati.com") ) return "SOCKS 127.0.0.1:9050"; return "DIRECT"; } </code></pre> <p>Reference: <a href="http://wp.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html#dnsDomainIs">http://wp.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html#dnsDomainIs</a>。Netscape 真是有长者风范啊~~</p>

2007/9/13
阅读更多

Eragon

<p>昨晚看了电影 Eragon,中文好像翻成《龙骑士》。从那个 Eragon 背对摄像机面向日落的镜头开始,我就是像看笑话一样的看完的,因为它和 Star Wars 实在是太像了。</p> <p>比如上面那个镜头就几乎和 Star Wars 里 Luke Skywalker 在 Tatooin 面对两个太阳的日落的镜头一模一样,而且 Eragon 和 Luke 的装束也长得差不多,并且他们都是由叔叔养大的。公主都是一开始被坏蛋抓去的,然后被不成熟的主角救出。以下是主要角色的对应:</p> <table summary="This table shows corresponding relations between charactars from Star Wars and Eragon." align="center" class="centered"> <thead> <tr> <td><cite>Eragon</cite></td> <td><cite>Star Wars</cite></td> </tr> </thead> <tbody> <tr> <td>Eragon</td> <td>Luke Skywalker</td> </tr> <tr> <td>教 Eragon 技能的那个很帅的老头</td> <td>Obi-wan</td> </tr> <tr> <td>公主</td> <td>Princess Leia</td> </tr> <tr> <td>帅老头的仇人的儿子</td> <td>Han Solo</td> </tr> <tr> <td>King</td> <td>Palpatin (Darth Sidous)</td> </tr> <tr> <td>King 的牛逼部下</td> <td>Darth Vader</td> </tr> <tr> <td>公主那边的军队</td> <td>The Rebellion</td> </tr> <tr> <td>King 的军队</td> <td>Storm Troopers</td> </tr> </tbody> </table> <p>其它相似之处就不列举了,这个电影基本上就是 Star Wars 的缩减傻逼奇幻版。另外有些镜头的运用和背景音乐与 The Lord of The Rings 十分相似。</p> <p>Eragon 里最让我不满的一点就是为什么要把龙的想法用地球话表示出来,而且还是一个性感的女声,听到这个声音就让我想到了 Disney 前几年的动画片《恐龙》...</p>

2007/8/15
阅读更多

随机生成句子的程序和 Emacs 排名的降低

<p>写了一个用来搞笑的 python 程序,可以随机地按照一定的语法生成句子。若干时间前写过一个功能差不多的程序,但是比较傻逼。</p> <p>这个程序使用了 <a href="http://en.wikipedia.org/wiki/Recursive_transition_network">recursive transition networks</a> 来表示一些简单的语法,目前可以递归地生成主语从句和宾语从句,并组合成完整的句子。看一些例子:</p> <ul> <li>The fool which reluctantly rocks unwillingly eats a book.</li> <li>The silly man that is silly unwillingly kicks a book which finally pisses.</li> <li>A book reluctantly eats a bug that is red.</li> <li>A man unwillingly sucks.</li> <li>The piece of shit that happily runs reluctantly kicks a bug.</li> </ul> <p>:-p 词表里本来还有一个 fucking 的,考虑到这里的都是文化人,删了。代码在最后。</p> <p>另外,Vincent 在 <a href="http://gnuvince.net/?p=407">The slow downfall of Emacs</a> 里写道 Emacs 在编辑器中的 popularity 排名正在降低。在几年前,编辑器的 top two 永远是 Vi/Vim 和 Emacs,但是现在 Emacs 竟然落在了 GEdit 和 Kite 之后(这帮傻逼都是怎么想的?!),到底是为什么?Vincent 在最后写道:“Why is that? Not pretty enough? Too powerful for the simple needs of the new users that Ubuntu brought to the Linux world?”</p> <!--more--> <p><span class="comment">#!/usr/bin/env python </span><span class="keyword">import</span> random</p> <p><span class="variable-name">END</span> = <span class="string">"end"</span> <span class="variable-name">TITLE</span> = -1</p> <p><span class="variable-name">Noun</span> = [<span class="string">"bug"</span>, <span class="string">"book"</span>, <span class="string">"piece of shit"</span>, <span class="string">"man"</span>, <span class="string">"iPod"</span>, <span class="string">"ass"</span>, <span class="string">"fool"</span>] <span class="variable-name">Be</span> = [<span class="string">"is"</span>] <span class="variable-name">Vi</span> = [<span class="string">"sucks"</span>, <span class="string">"rocks"</span>, <span class="string">"runs"</span>, <span class="string">"flies"</span>, <span class="string">"pisses"</span>] <span class="variable-name">Vt</span> = [<span class="string">"eats"</span>, <span class="string">"reads"</span>, <span class="string">"laughs at"</span>, <span class="string">"bites"</span>, <span class="string">"kicks"</span>] <span class="variable-name">Adj</span> = [<span class="string">"red"</span>, <span class="string">"passing"</span>, <span class="string">"shitty"</span>, <span class="string">"dying"</span>, <span class="string">"silly"</span>] <span class="variable-name">Adv</span> = [<span class="string">"finally"</span>, <span class="string">"reluctantly"</span>, <span class="string">"happily"</span>, <span class="string">"unwillingly"</span>] <span class="variable-name">Trans</span> = [<span class="string">"that"</span>, <span class="string">"which"</span>] <span class="variable-name">Artical</span> = [<span class="string">"the"</span>, <span class="string">"a"</span>]</p> <p><span class="variable-name">MainPart</span> = {TITLE: <span class="string">"Main part"</span>, 1: [(Adv, 4), (Be, 3)], 2: [(2, END)], 3: [(Adj, END)], 4: [(Vi, END), (Vt, 2)]} <span class="variable-name">NounClause</span> = {TITLE: <span class="string">"Noun clause"</span>, 1: [(Artical, 2)], 2: [(Noun, 3), (Adj, 2)], 3:[(Trans, 4)], 4: [(MainPart, END)]} <span class="variable-name">Subject</span> = {TITLE: <span class="string">"Subject"</span>, 1: [(Artical, 2), (NounClause, END)], 2: [(Noun, END)]} <span class="variable-name">Object</span> = Subject <span class="variable-name">Sentence</span> = {TITLE: <span class="string">"Sentence"</span>, 1: [(Subject, 2)], 2:[(MainPart, END)]} <span class="variable-name">EleList</span> = [Sentence, Subject, Object, NounClause, MainPart]</p> <p><span class="keyword">def</span> <span class="function-name">genSentence</span>(tree): random.seed() Sent = <span class="string">""</span> Index = 1 <span class="keyword">if</span> type(tree) == type({}): <span class="keyword">while</span> Index != END: Node = random.choice(tree[Index]) After = genSentence(Node[0]) <span class="keyword">if</span> After != <span class="keyword">None</span>: Sent = <span class="string">' '</span>.join([Sent, After]) Index = Node[1] <span class="keyword">elif</span> type(tree) == type(<span class="string">""</span>): <span class="keyword">return</span> tree <span class="keyword">elif</span> type(tree) == type([]): <span class="keyword">return</span> random.choice(tree) <span class="keyword">elif</span> type(tree) == type(1): <span class="keyword">while</span> Index != END: Node = random.choice(EleList[tree][Index]) After = genSentence(Node[0]) <span class="keyword">if</span> After != <span class="keyword">None</span>: Sent = <span class="string">' '</span>.join([Sent, After]) Index = Node[1] <span class="keyword">elif</span> tree == <span class="keyword">None</span>: <span class="keyword">return</span> <span class="keyword">else</span>: <span class="keyword">print</span> <span class="string">"Error: invalid type of tree in genSentence()."</span> <span class="keyword">return</span> <span class="string">' '</span>.join(Sent.split())</p> <p><span class="keyword">def</span> <span class="function-name">main</span>(): <span class="keyword">print</span> genSentence(Sentence).capitalize() + <span class="string">'.'</span> <span class="keyword">return</span></p> <p><span class="keyword">if</span> <strong>name</strong> == <span class="string">"<strong>main</strong>"</span>: main()</p>

2007/8/6
阅读更多

Youtube Video URL Extractor in Python

<p>看到了 Cheng Meng 的那个 <a href="http://cmsir.scinese.com/2007/07/27/youtube-video-downloader-in-ruby/">Youtube downloader</a>,由于对 Ruby 的无知,一点也看不懂,所以就参考 <a href="http://www.catonmat.net/blog/downloading-youtube-videos-with-gawk/">DownloadYoutube video with GAWK</a> 用 python 自己写了一个。与 Cheng Meng 那个不同,我这个只负责把视频文件 url 打印出来。用法是 <kbd>youtube-url.py</kbd> <em>video-id</em> 所以要下载 id为 `qNKtKm3SXvs` 的视频,可以用这个命令</p> <p>wget -O video.flv <code>youtube-url.py qNKtKm3SXvs</code></p> <p>youtube-url.py 的代码:</p> <!--more--> <p><span class="comment-delimiter">#</span><span class="comment">!/usr/bin/env python </span><span class="comment-delimiter"># </span><span class="comment">Time-stamp: &lt;corsair 2007-07-28 16:16:38&gt; </span> <span class="comment-delimiter"># </span><span class="comment">Corsair &lt;<a href="mailto:chris.corsair&#64;gmail.com">chris.corsair&#64;gmail.com</a>&gt; </span><span class="comment-delimiter"># </span><span class="comment">Usage: youtube-url video-id </span> <span class="keyword">import</span> sys <span class="keyword">import</span> urllib2 <span class="keyword">import</span> getopt</p> <p><span class="keyword">def</span> <span class="function-name">main</span>(): <span class="comment"># Options parsing, fake for now. </span> <span class="keyword">try</span>: Options, Args = getopt.gnu_getopt(sys.argv[1:], <span class="string">""</span>, []) <span class="keyword">except</span> getopt.GetoptError: <span class="comment"># print help information and exit: </span> <span class="keyword">pass</span></p> <pre><code>&lt;span class="keyword"&gt;if&lt;/span&gt; len(sys.argv) == 1: &lt;span class="keyword"&gt;print&lt;/span&gt; &lt;span class="string"&gt;"Pleas specify a video-id."&lt;/span&gt; sys.exit(1) VideoID = sys.argv[1] WatchPage = urllib2.urlopen( &lt;span class="string"&gt;""&lt;/span&gt;.join([&lt;span class="string"&gt;"http://youtube.com/watch?v="&lt;/span&gt;, VideoID])) HtmlLine = &lt;span class="string"&gt;""&lt;/span&gt; &lt;span class="keyword"&gt;while&lt;/span&gt; HtmlLine.find(&lt;span class="string"&gt;"SWFObject"&lt;/span&gt;) == -1: HtmlLine = WatchPage.readline() UrlOriginal = HtmlLine[HtmlLine.find(&lt;span class="string"&gt;"BASE_YT_URL"&lt;/span&gt;)+12:] UrlOriginal = &lt;span class="string"&gt;'?'&lt;/span&gt;.join([&lt;span class="string"&gt;"http://www.youtube.com/get_video"&lt;/span&gt;, UrlOriginal[:UrlOriginal.find(&lt;span class="string"&gt;'\"'&lt;/span&gt;)]. partition(&lt;span class="string"&gt;'&amp;amp;'&lt;/span&gt;)[2]]) &lt;span class="comment"&gt;# Redirect </code></pre> <p></span> RedirectOpener = urllib2.build_opener( urllib2.HTTPRedirectHandler) Request = urllib2.Request(UrlOriginal) UrlReal = RedirectOpener.open(Request).url <span class="keyword">print</span> UrlReal</p> <p><span class="keyword">if</span> <strong>name</strong> == <span class="string">"<strong>main</strong>"</span>: main()</p>

2007/7/28
阅读更多

NetHack

<p><a href="www.nethack.org">NetHack</a> 头一次达到了 Dungeon of Doom 的第七层。在这层里找到了 Oracle of Delphi,还第一次碰见了 fire ants,截图一张~~~</p> <div style="text-align:center;"><a href="http://img406.imageshack.us/img406/4035/nethackqv5.png" rel="lightbox" title="NetHack screenshot"><img alt="thumbnail" src="http://img406.imageshack.us/img406/4035/nethackqv5.png" width="300" /></a></div> <p>光标所在的那个 <code>@</code> 就是我~~,两个 <code>f</code> 是我的两只宠物,红色的 <code>a</code> 就是 fire ants,那四个蓝色的 <code>{</code> 的中间是 Oracle 的位置,但是墙挡住了,看不见。</p> <p>以前玩的时候一般都是找不到吃的饿死了,要不然就是吃了个 goblin 的尸体毒死了,在要不然就是做了什么奇怪的事挂掉了(比如不小心走到一个陷阱上,头上掉下来一块石头...)</p>

2007/7/25
阅读更多

Wordpress 中的代码加亮

<p>一个在 <a href="http://www.wordpress.org/">Wordpress</a> 中使代码加亮的办法,需要激活 <a href="http://www.channel-ai.com/blog/plugins/myCSS/">MyCSS</a> 插件,并且保证 <a href="http://zeo.unic.net.my/notes/lightbox2-for-wordpress/">WP Lightbox 2</a> 插件是禁用的。</p> <p>写一段程序代码(我是写的 C++),尽量包含最多的语法元素,然后把代码给 htmlize 了(可以用 Emacs 的 `htmlize.el` 或者 Vim),这里有一个要求,就是生成的 html 必须是 CSS 与 `&lt;pre&gt;` 分开的,CSS 在 `&lt;head&gt;` 里, `&lt;pre&gt;` 在 `&lt;body&gt;` 中,然后把 CSS copy 到 MyCSS 里。</p> <p>以后贴代码的时候,只要用同样的方法生成 html,然后把那个 `&lt;pre&gt;` 贴到 post 里就行了。还有一点需要注意,MyCSS 会生成一个 `my.css` 放在 blog 的 `&lt;head&gt;` 里,位置是比较靠前的,在我这里比 Coolcode 和 SyntaxHighlighter 都要考前,所以 `my.css` 里的内容可能会被覆盖掉。</p> <p>测试:</p> <p><span class="comment-delimiter">;; </span><span class="comment">=============== Unfill-buffer ===============&gt; </span>(<span class="keyword">defun</span> <span class="function-name">unfill-buffer</span> () <span class="doc">"Unfill current buffer."</span> (interactive <span class="string">""</span>) (setq m (point-marker)) (beginning-of-buffer) (<span class="keyword">while</span> (re-search-forward <span class="string">"</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">(</span></span><span class="string">[</span><span class="string"><span class="negation-char">^</span></span><span class="string"> ]+</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">)</span></span><span class="string"> * *</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">(</span></span><span class="string">[</span><span class="string"><span class="negation-char">^</span></span><span class="string"> ]</span><span class="string"><span class="regexp-grouping-backslash">\\</span></span><span class="string"><span class="regexp-grouping-construct">)</span></span><span class="string">"</span> nil t) (replace-match <span class="string">"\\1\\2"</span>)) (set-marker m 0 (current-buffer)))</p> <!--more--> <p>顺便把我的 CSS 贴在这里,是 Emacs 的 htmlize 生成的,我做了一些改动:</p> <p>.comment { /<em> font-lock-comment-face </em>/ color: #b22222; font-style: italic; } .comment-delimiter { /<em> font-lock-comment-delimiter-face </em>/ color: #b22222; } .constant { /<em> font-lock-constant-face </em>/ color: #5f9ea0; } .function-name { /<em> font-lock-function-name-face </em>/ color: #0000ff; } .keyword { /<em> font-lock-keyword-face </em>/ color: #a020f0; font-weight: bold; } .preprocessor { /<em> font-lock-preprocessor-face </em>/ color: #5f9ea0; } .string { /<em> font-lock-string-face </em>/ color: #ab7e7e; } .type { /<em> font-lock-type-face </em>/ color: #228b22; } .variable-name { /<em> font-lock-variable-name-face </em>/ color: #b8860b; }</p>

2007/7/23
阅读更多

C++ 类模板和多文件编译

<p>才知道原来在多文件编译时 c++ 类模板的声明和定义一定包含在同一个文件里。</p> <p>以前写 Game of Life 的时候写了一个动态二维数组的模板,当时的文件是这样包含的:</p> <p><span class="comment-delimiter">// </span><span class="comment">matrix.hpp </span> <span class="keyword">template</span>&lt;<span class="keyword">class</span> <span class="type">T</span>&gt; <span class="keyword">class</span> <span class="type">TMatrix</span> { <span class="comment-delimiter">// </span><span class="comment">Declarations... </span>};</p> <p><span class="preprocessor">#include</span> <span class="string">"matrix.cpp"</span> <span class="comment-delimiter">// </span><span class="comment">Definitions</span></p> <p>今天又用到了这个类,看这个文件包含不爽,改成了常规的</p> <p>// matrix.hpp</p> <p>template&lt;class T&gt; class TMatrix { // Declarations... };</p> <p>// matrix.cpp</p> <h1>include "matrix.cpp"</h1> <p>... // Definitions</p> <p>然后在主程序里引用了一个成员函数</p> <p>// main.cpp</p> <h1>include "matrix.hpp"</h1> <p>int main() { TMatrix&lt;int&gt; Matrix; Matrix.row(); return 0; }</p> <p>编译:<kbd>g++ -g main.cpp matrix.cpp</kbd></p> <p>呜呼!出错了!说 `TMatrix&lt;int&gt;::row()` 只是声明了,没有定义。把 matrix 里的文件包含改成原来那个样子,然后只编译 `main.cpp` 就没问题了。百思不得其解,后来在 CSDN 上找到了<a href="http://topic.csdn.net/t/20050311/20/3844359.html">这个</a>。理论上,只要在模板声明前加上 `export` 关键字,然后用常规的多文件编译方法就可以,但是目前大部分编译器都不支持这个关键字。`g++` 说“目前尚未实现,忽略”,真够直接的...</p>

2007/7/20
阅读更多

Unfill-buffer

<p>写了个简单的 <abbr title="emacs-lisp">elisp</abbr> 函数 unfill-buffer,用来去掉当前 buffer 的所有单独的换行。</p> <p>[coolcode lang="lisp" download="unfill-buffer.el"] (defun unfill-buffer () "Unfill current buffer." (interactive "") (setq m (point-marker)) (beginning-of-buffer) (while (re-search-forward "\([^ ]+\) * *\([^ ]\)" nil t) (replace-match "\1\2")) (set-marker m 0 (current-buffer))) [/coolcode]</p>

2007/7/20
阅读更多

菩提树

<p>末日的不死菩提树... 说到菩提树,我们大脑中第一个想到的是什么?是“菩提本无树,明镜亦非台”,还是那种某某科某某属的多年生植物?</p> <p>我第一个想到的是舒伯特的那首艺术歌曲《菩提树》,在这个艺术人都梳小辫的时代,不知道还有没有人听艺术歌曲(其实我也不听,只是凑巧有这首歌)。我住的地方的楼下不远有个卖乐器的,我在那里见过两个店主,一个比较矮,梳小辫,另一个又矮又胖,一副暴发户的模样。这个人压制了我进去摸摸吉他的欲望。</p> <p>菩提树是一种寿命很长的树。中国原本是没有菩提树的,当年释迦牟尼来到中国时,顺便走私了过来,于是中国就有了这种宁静的树。假如宇宙的质量大于临界质量,希望宇宙毁灭的时候,菩提树可以代替时空而存在。</p>

2007/7/19
阅读更多

Hello world!

<p>突然发现 <code>Wordpress</code> 会很贱地保留源文件中的换行,这是否意味着我将不能用 Emacs 写 blog?</p> <p><a href="http://tn3-2.deviantart.com/fs7/300W/i/2005/268/7/7/DoorWay_by_CryingDoom.jpg">Test image.</a></p> <pre><code>:::C++ #include "stdio.h" int main() { printf("Hello world!\n"); return 0; } </code></pre> <p>$$\int_0^\infty \frac{1}{x}\textrm{d}x$$</p>

2007/7/19
阅读更多