解决一个JCC编译构建问题

2 Comments

首先是环境:


iusr-mbp:~ iusr$ uname -a
Darwin iusr-mbp 10.7.0 Darwin Kernel Version 10.7.0: Sat Jan 29 15:17:16 PST 2011; root:xnu-1504.9.37~1/RELEASE_I386 i386

iusr-mbp:~ iusr$ python -V
Python 2.7

JCC是最新的pylucene-3.1.0-1里面的那份儿。

起因是想做个小东西,预计要用到Lucene。别看我不怎么用它,可我还真嫌java干起来太麻烦…虽然做这个也想为了方便工作时用,可也算业余时间折腾吧,实在懒得一本正经地Java。所以选择了PyLucene,自然,以前也没接触过。

按照http://lucene.apache.org/pylucene/jcc/documentation/install.html上的说明,看起来不难,可惜,果不其然,到了我这里就出问题了,诶。

出问题时的输出:


iusr-mbp:jcc iusr$ python setup.py build
running build
running build_py
writing /private/tmp/pylucene-3.1.0-1/jcc/jcc/config.py
copying jcc/config.py -> build/lib.macosx-10.5-fat3-2.7/jcc
copying jcc/classes/org/apache/jcc/PythonVM.class -> build/lib.macosx-10.5-fat3-2.7/jcc/classes/org/apache/jcc
copying jcc/classes/org/apache/jcc/PythonException.class -> build/lib.macosx-10.5-fat3-2.7/jcc/classes/org/apache/jcc
running build_ext
building 'jcc' extension
gcc-4.0 -fno-strict-aliasing -fno-common -dynamic -arch i386 -arch ppc -arch x86_64 -g -O2 -DNDEBUG -g -O3 -dynamiclib -D_jcc_lib -DJCC_VER="2.8" -I/System/Library/Frameworks/JavaVM.framework/Headers -I_jcc -Ijcc/sources -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c jcc/sources/jcc.cpp -o build/temp.macosx-10.5-fat3-2.7/jcc/sources/jcc.o -DPYTHON -fno-strict-aliasing -Wno-write-strings
/usr/libexec/gcc/powerpc-apple-darwin10/4.0.1/as: assembler (/usr/bin/../libexec/gcc/darwin/ppc/as or /usr/bin/../local/libexec/gcc/darwin/ppc/as) for architecture ppc not installed
Installed assemblers are:
/usr/bin/../libexec/gcc/darwin/x86_64/as for architecture x86_64
/usr/bin/../libexec/gcc/darwin/i386/as for architecture i386
lipo: can't open input file: /var/folders/Gy/Gyqx+dxCGlGc5LULCWn6Zk+++TI/-Tmp-//ccr6jC50.out (No such file or directory)
error: command 'gcc-4.0' failed with exit status 1

也不知道是不是因为XCode刚更新过,给PPC的as明明是在 /usr/libexec/gcc/powerpc-apple-darwin10/4.0.1/as ,好吧,ln -s 一下到/usr/local/libexec/gcc/darwin/ppc/as 下面。结果还是不行…换了个错误:


iusr-mbp:jcc iusr$ python setup.py build
running build
running build_py
writing /private/tmp/pylucene-3.1.0-1/jcc/jcc/config.py
copying jcc/config.py -> build/lib.macosx-10.5-fat3-2.7/jcc
copying jcc/classes/org/apache/jcc/PythonVM.class -> build/lib.macosx-10.5-fat3-2.7/jcc/classes/org/apache/jcc
copying jcc/classes/org/apache/jcc/PythonException.class -> build/lib.macosx-10.5-fat3-2.7/jcc/classes/org/apache/jcc
running build_ext
building 'jcc' extension
gcc-4.0 -fno-strict-aliasing -fno-common -dynamic -arch i386 -arch ppc -arch x86_64 -g -O2 -DNDEBUG -g -O3 -dynamiclib -D_jcc_lib -DJCC_VER="2.8" -I/System/Library/Frameworks/JavaVM.framework/Headers -I_jcc -Ijcc/sources -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c jcc/sources/jcc.cpp -o build/temp.macosx-10.5-fat3-2.7/jcc/sources/jcc.o -DPYTHON -fno-strict-aliasing -Wno-write-strings
/usr/bin/../local/libexec/gcc/darwin/ppc/as: can't fork a new process to execute: /usr/bin/../local/libexec/gcc/darwin/ppc/as (Resource temporarily unavailable)
lipo: can't open input file: /var/folders/Gy/Gyqx+dxCGlGc5LULCWn6Zk+++TI/-Tmp-//ccNXEZps.out (No such file or directory)
error: command 'gcc-4.0' failed with exit status 1

郁闷了。折腾来折腾去都不行,直接cp过去给PPC的as也是不行,而且,真想不通为啥去为PPC编译,反正只是本地自己用。然后只好用python -v setup.py build 看了下输出,查到了编译前要调到distutils.unixcompiler.py,于是看了看源代码,看到有个_darwin_compiler_fixup方法很是可疑——敢情,这方法是会考虑ARCHFLAGS这个环境变量的——是啊!当初折腾编译、make时要折腾的若干叉叉叉FLAGS环境变量之一啊!看来后来一直都是被各种自动化工具养得白痴了,看来生命还是在于折腾。

于是乎,


iusr-mbp:jcc iusr$ export ARCHFLAGS="-arch x86_64 -arch i386"

x86_64和i386怎么都够我用了~然后再python setup.py build以及python setup.py install,成功。这一来就不用考虑诸如Xapian这样的东西了,长的跟“下片儿”似的。

P.S.,distutils.unixcompiler._darwin_compiler_fixup前面的一段注释挺好玩,as usual。

QCon Beijing 2011 Day 1

7 Comments

继续。对今天的讲座多少有些失望,同去的同事们也这么说。也算说明一个问题:别以为站在台上的就都是无比牛气的。我看着失望还无所谓,一牛人同事也觉得今天的session比较失望,那就是问题了。

今天的选择:

09:00
10:00
百度离线集群整合之道
(幻灯片下载)
讲师:吴波
大宴会厅(设同声传译)
11:10
13:00
“稳定压倒一切”——银行应用中的稳定性考量(幻灯片下载)
讲师:周伟然
大宴会厅
14:20
淘宝前台系统优化实践 (幻灯片下载)

讲师:蒋江伟

大宴会厅

15:50
在云中操控Netflix
(幻灯片下载)
讲师:Adrian Crockcroft
第六会议室(同声传译)
17:10
网游服务器性能优化

(幻灯片下载)

讲师:谢廷宝

第一会议室

想去而没法去的是:淘宝网线上线下性能跟踪体系和容量规划(幻灯片下载) ,讲师:吴毓雄基于Spring 3.1的现代组件设计(幻灯片下载),讲师:Juergen Hoeller艺龙旅行网架构案例分享(幻灯片下载),讲师:贾志峰企业级软件的组件化和动态化开发实践(幻灯片下载) ,讲师:池建强

今天的内容感觉没啥意思,所以也不想太多点评了,诶。

  1. 2011年的企业级Java和超越:从JavaEE 6到云计算:本来人家名字是Jürgen Höller,结果被替成了Juergen Hoeller,怪不得一直没认出来这是谁是干啥的呢(呃,我承认没仔细看QCon的讲师介绍材料)。直到幻灯片一开始,看到了名字,才想起来,SpringSource的。这个session整体来说,比昨天Oracle的Chuk Munn的演讲要“亲切”得多。都是讨论Java EE和云计算,Oracle一副一家独大不容置疑的样子,发明出来那一堆乱七八糟的东西(虽然Chuk Munn强调过那些小发明只是目前的状态,以后完全可能改变),而这位出身SpringSource的大叔对各种业界已经在用的云计算平台起码表示一种承认和尊重,虽然也没忘了给Spring框架做广告。总的来说是对现有很多和话题相关的技术的一个不错的覆盖和介绍。哦,让我比较高兴的是老大预料太依靠状态的范式应该会逐渐减少直至消失,至于JSF这种强烈依赖状态的东西八成就要消失——但愿,一直觉得JSF麻烦得要命,IDE支持又比不了ASP.NET,真白搭。
    值得一说的是幻灯片里特别提到了新的ForkJoinPool,也就是执行fork-join风格任务的线程池。这应该是Java 7会装备的特性,看上去是并发的map/filter & reduce,诶,Java总算也有这么个东西了。不过就像java.util.concurrent第一次引入一样,不涉及任何语言变化,纯粹是为了提升开发效率。不知道新的ParallelArray类能不能解决好诸如locality的问题——诶,跟神人习得的词汇,现趸现卖了 :D
    还提了一个问题:假如在服务的低谷时段,在线用户数量比CPU核心数量还少得时候,应用该怎么办?噻,我从来没想过这个问题,总之服务器是不会因为买卖儿不好就想不开自尽的吧。
  2. 百度离线集群整合之道:这个算是今天觉得比较不错的一个session。内容讲的是BVC——Baidu Volunteer Computing——这一系统,试图利用现有服务器的剩余计算能力为其他应用服务。Volunteer Computing不是啥新鲜事物了,我也是SETI@home和BOINC项目的N多年的资深计算节点老板了。BVC挺有想法的,不过不怎么明白的是怎么会有那么多剩余资源,多到需要建这么一个系统来统一管理?没规划好么?会后和公司的牛人讨论这个话题,还是觉得,涉及到分布式解决方案的设计的时候,明显感觉很多系统有同质化的趋势,听多了就没什么惊喜了。也没办法,就那些算法和范式。
  3. 基于云计算架构构建Netflix:见到了Adrian Crockcroft,所以很激动来着,然后发现这个session基本是Amazon的云计算产品展示会… 好在下午的内容没让人失望。此处省略好几百字。
  4. “稳定压倒一切”——银行应用中的稳定性考量:呃,这个吧,听上去还是以前企业应用的那些东西呃,顺便说了说ESB和SOA神马的。整体来说没什么感觉。
  5. 淘宝前台系统优化实践:说实话抱着很大希望来听的!结果好像此前台非彼前台啊。想必淘宝整体架构太庞大了,所以前台就是他们的web页面服务,不是折腾浏览器这头儿的东西。总的来说,这个session是多半场Java培训,至少我表示没有压力啊没有压力。后面的性能对比部分里的经验分享算是比较多的,不过很多背景、配置、步骤什么的都没有说,我觉着这些都不提,直接上来就做对比,有点儿不太严谨。至少,列一下JVM参数,做没做适当的预热,etc.,都要介绍一下吧,结果是都没有说。感觉做这个session的淘宝的小朋友可能是个比较嫩的孩纸 :D 换做JavaEye上的某些资深牛人来做,应该会很严谨的吧。
    幻灯片刚讲到前几张执行时间对比的饼图里,我眼还算比较尖,看到了Velocity的身影,所以在微博上感慨淘宝还算有眼光。Velocity我自己因为实习的关系接触得比较早,也还算比较深刻,喜欢它的简单,所以当时火爆的FreeMarker我根本一点都看不进去。我想淘宝的Java团队之所以能顺利地把Velocity的模板引擎从解释性改造为编译性,Velocity本身的简单应该也有些好处的吧——不过说这个编译化改动做了2、3个月,有点儿吓人呢,回来研究一下以现在的可用工具能用多久改造完毕。不太喜欢JSP。
  6. 在云中操控Netflix:这次Adrian Crockcroft总是讲到了些经验分享的东西。一上来还是些Amazon WS的产品展示… 然后逐渐有了些和开发相关的经验分享,比如很多anti-patterns,还有一些比较详细的中间层的设计——感觉这一点有些想东家的企业产品线里的设计和实现:由专门的team以库的方式提供这个封装好的中间层,然后底层服务是轻易不会被允许直接访问的。
    Netflix服务器的部署和升级,都是用一些自动化工具去完成,用版本控制工具管理的,而且基本没有针对机器上老版本服务器应用的升级,而是直接创建新的AWS节点部署新版本的应用,逐渐使其上线,测试OK以后直接把运行老版本的节点摘下线,最终完全销毁——比较灵活和经济的方法,而且借助了AWS的一些API,也减轻了很多重复的人力劳动,避免因为重复导致人为失误。这个幻灯片一定要再看一次,里面有不少Java开发方面的内容。
  7. 网游服务器性能优化:这个还是因为公司牛人想听这个我才后来改变主意的。感觉讲师应该有很多想要和大家分享的,不过一是时间不够,二是…有些优化和问题听上去有些…弱了… 演讲做的还是很真诚的,容量很大,不过也许我真该按原计划去池建强的业级软件的组件化和动态化开发实践,毕竟这是今天“设计优良的架构”系列的主持人啊!

今天主要的感受就是对大部分sessions比较失望,而且似乎其他来参加QCon的人也是这样的感觉,很多人频繁地来回穿梭,我就当作是在找好session听吧。一个session讲好了能让人坐下听完不走,真是不易。很多做技术出身的人都缺乏这个能力。有时我会觉得听讲座的人不该坐下后听5分钟就觉得无聊走人,也许后面的很精彩呢;另一方面也觉得做讲演的人开篇5分钟没法吸引到别人的话,水平还真的有待提高,毕竟一共就只有1个小时而已,大家都不想耽误不想花冤枉钱来听些讲的不太好的内容。

明天最后一天了,感觉大会故意安排了几个不错的来压轴吧,诶。下次中国再有QCon的话就要斟酌一下了,都是这样的session的话真不如去JavaONE了。

QCon Beijing 2011 Day 0

No Comments

标题显得很NB吧?哇哈哈…

难得这次东家能应允让我这么个打杂的来参加这么高端的集会啊,感谢感谢。

结果今天的选择是:

09:00

支撑Facebook消息处理的HBase存储系统 (幻灯片下载)

讲师:Nicolas Spiegelberg

大宴会厅(设同声传译)

10:00

Java EE 7平台:走进云计算 (幻灯片下载)

讲师:Lee Chuk Munn

地点:大宴会厅(设同声传译)

13:00

Web开发的新势力——服务端JavaScript开发(幻灯片下载)

讲师:廖恺

第七会议室

14:20

MongoDB开发应用实践(幻灯片下载)

讲师:潘凡

第一会议室

15:50

Remote Object、SOA和REST(幻灯片下载)

讲师:徐昊

第七会议室

17:10

淘宝商品库优化实践解析(幻灯片下载)

讲师:余锋

大宴会厅

 

其实还有几个很想去的但是因为安排没办法只好放弃掉:为速度而生——百姓网如何优化网速 (幻灯片下载),讲师:潘晓良QQ邮箱存储平台(幻灯片下载),讲师:胡戊构建高性能的微博系统——再谈新浪微博架构(幻灯片下载),讲师:杨卫华BeansDB的设计与实现(幻灯片下载),讲师:刘洪清一种基于服务器,集群存储和虚拟机的实现(幻灯片下载),讲师:王劲凯。Gavin King折腾了下他session的安排也比较让人不爽。

简单出于个人主观评论一下今天参加的内容:

  1. 支撑Facebook消息处理的HBase存储系统:太in-a-nutshell了,一看幻灯风格就能估计出来大概是要照本宣科了。很多事情去HBase老家和Facebook的haystack什么的地方看看就大概知道了;私以为不用太诧异于Facebook不用自己发明的Cassandara;同声传译很扯,后面不知道是不是有人把传译的耳机放了很大的音量,搞的我基本上是左耳英语右耳隐约地听中文,左耳是男声右耳隐约地听女声,真ft。私以为这种级别的演讲混外企的应该不用别人给翻译才对,旁边几个XXX公司的员工人手一个传译终端,诶,还没活明白呢。
  2. Java EE 7平台:走进云计算:这就是一个纯粹的传统商业公司能看到的云计算了。不想多说什么。module-info.java、jmod什么的真是弱爆了…新浪微博的#QCon#话题里也都有人说为什么不直接纳了OSGi什么的。没办法,看着jigsaw吧。我觉着无论基于Maven还是OSGi,基本都能自己搭一个出来了。JEE 7,掺和进来云计算,诶,不定整出来一个多复杂的规范了;有本地代码依赖的就找msi、deb、rpm,太扯了,用source tarball的可以去死了么?Oracle要自己提供一些apt、yum源神马的来定义这些deb、rpm之间的依赖不?
  3. Web开发的新势力——服务端JavaScript开发:光看标题就知道Node.js肯定占绝大部分份额了。整体来说比较充实,但是还是介绍性质的居多,真共享性质的内容偏少。没办法,这东西兴起也没多久,现在基本还不算太成熟的东西,虽然npm都出来了。后来碰见了@qinyf小朋友,也说了说寥恺,因为他以前也在饭否和海内团队呆过一段时间。这老大给我的第一印象就是绝对的脑子快反应也快,好像确实是这样,说话连珠炮一样很是痛快。我本身对Node.js这个东西也很感兴趣,真稍微突破些皮毛搞过javascript的人应该都多多少少觉得这个语言有些可把玩的地方,愿意用它干点什么。最后被广告了cnodejs.org ,回来逛逛。
  4. MongoDB开发应用实践:这个一上来以为也会是很水的介绍性质的session,结果真是比较出乎我的意料,看到了很多真实案例,感觉比较痛快,经验之谈真的是很宝贵。演讲的潘凡不紧不慢地聊着以往的经验,听起来也挺有意思的。幻灯片值得以后借鉴一下,至少很多教训知道了可以少走些弯路吧。等这个session开始的时候在场外被@qinyf小朋友当场揪了出来,我嘞个去,我还以为我一直是站在暗处的只有我认识他他不会认识我的。总上各种SNS真的很容易暴露自己啊。然后这个session是和@qinyf还有@hill两位年轻有为型牛人听的,噻,小激动了一把,都不会坐着了。期间@qinyf不动声色地考察了我对一些技术名词、项目名字的了解程度。我忐忑了。好像还称赞我算是我这个年纪的人群里面比较刻苦学习的,擦,顿时有种半截入了土的感觉。
  5. Remote Object、SOA和REST:最大的感触就是专业讲师/咨询师就是不一样啊,连续一个小时,期间几秒钟都没有停嘴啊真的。不过有些观点在我看来有些主观。最起码,简单是好事没错,不过也并不见得说一个东西复杂了就一定不好的,比如SOA。没错,WS-*、WSS-*家族太不讲求计划生育了,协议规范跟OO类型爆炸一样,我以前曾经打了一大摞协议文档只为了了解一个很简单的和T-Mobile Germany的系统对接的任务,但是实际上T-Mobile Germany也算是SOA实施比较成功的范例了,小公司上SOA实在是找死,但是很大规模的有很多员工很多需要彼此协调的部门的公司里,SOA为各个部门之间的自治和业务设计师/架构师的统一设计提供了一个可行的架构,否则还真的难以协调起那么多个部门的已经存在了的服务资源。而且,CORBA臃肿收场,EJB2臃肿收场,SOAP、Web Service、SOA臃肿收场,说不定哪天REST也是一个下场,反正看看各种为了REST而REST的应用和人们我觉得就心里没底。另外语义和ATOM(以及APP/AtomPub),我还是觉得有些摇摆不定,不知道它们以后究竟会不会得到广泛的应用。
  6. 淘宝商品库优化实践解析:某神人建议我去听的,我就不抱怨这神人太揠苗助长了 :D 这个session涉及到的领域是我一直超级感兴趣的,不过无奈实际经验和知识实在欠缺得不少。之前也遇到过很多相关的文章和话题神马的,神人都和我念叨过,我也顺藤摸瓜看了些资料,知道些皮毛不过内里显然还是不明。收获是那一大堆各种参数…sysctl的,mysql的,innodb的,天,当时场上闪光灯此起彼伏的估计也都是想记下来那些参数的吧?不知道QCon每次都会发布这些幻灯片么?此外描述的一些方法论也还不错。照例,下载幻灯片留作参考。这个我不评论了,等那神人逐个地点批吧,哇哈哈!

睡~明天第一个session就是JEE 6和云计算(之于强扭的瓜、强迫的幸福),我主观上都有些不安了…

[浅读openjdk7] 1. 构建openjdk7 @Mac

6 Comments

我这么寻思啊,在各种伟大的Linux这种对开发人员这么友好的OS们里面,一切构建方面的问题都是纸老虎。也因为目前手里没方便的Linux机器(其实公司里有一台,外加跑着blog的VPS,就是嫌麻烦…),所以怎么在Linux上面折腾build openjdk7就不废话了,应该比起openjdk6来说不会复杂太多的吧,参考 [浅读openjdk6] 1. 构建openjdk6 。在Windows上嘛,谁乐意折腾谁折腾去吧…反正build完了debug时也不是很爽。

其实今时今日Mac用户也算赶上好时候了,因为Oracle和Apple关于OpenJDK项目合作的事情似乎进行还不错,所以Oracle这边厢似乎也投入了不少,最明显的,NND终于看到像样的官方指导了!—— Mac OS X Port。这么一来build完全不构成任何问题了,ALLOW_DOWNLOADS=true 了以后连一些依赖项都会被自动下载了…

但是,我还是碰见了一个问题:那是编译corba子项目下自动生成的代码的时候,因为文件编码的问题会失败——就这么一个问题,也在 OpenJDK for Mac OS X 这篇日本语blog里描述并解决了,而且还被人在 Mac OS X Port 这篇wiki上主动留了下链接…就是那个通过设置环境变量 _JAVA_OPTIONS=-Dfile.encoding=ASCII 搞定的那部分。至于这位 dolduke 提到的其他几个问题我反正还没遇到。

感慨现在命真好的同时也确实没神马成就感了。

P.S.,春天晚上还是比较冷啊,build一下openjdk有助于取暖。

[浅读openjdk7] 0. 获取openjdk7源代码

1 Comment

呃,我自己都觉得很惭愧… 距离那篇 [浅读openjdk6] 0. 获取openjdk6源代码 过去了要2年了吧,期间总算不出意外地没有怎么继续那个系列。草稿箱里累积了大概5篇,顺着main函数开始的一些理解,结果还是没能坚持下来,哪天都删掉好了…

最近身边一个小朋友也开始看openjdk6了,加上网上某些著名人士年前也都零零散散地开始看代码并且发布了些blog,各种奋发图强人士让我感觉真是情何以堪。想了想,不行我也继续看吧,只不过目标换到了openjdk7,不是为了别人看6我看7显得多牛逼,而是对project coin那些小改动比较感兴趣。

结果,因为现在换了MacBook Pro了,不再频繁用Linux,照着自己以前在Linux下的方法做果然没能成功(呃,简直是一定的吧,尤其我也不是MacPorts用户),上网搜了搜,发现一篇 Build OpenJDK Java 1.7.0 on Mac OS X 10.5,已经装过MacPorts的权当参考吧,其实和Linux下差不多了。不过我不老喜欢MacPorts那样的东西,原先也许会喜欢吧,原汁原味的感觉,但是到了要决定是不是真要搞到自己机器上来的那一霎那,就觉得它太过臃肿了,转去用Homebrew了,虽然我也不是ruby用户…

继续搜,然后发现,好像年初的时候openjdk在BSD port的基础之上有了专门的mac os x port项目,见 http://mail.openjdk.java.net/pipermail/macosx-port-dev/2011-January/000007.html ,Apple员工发的,也算是Oracle宣称的和Apple合作提高OpenJDK在Mac机器上的覆盖面吧——这点来说Oracle至少及格了,借用开源的openjdk和Apple这样的商业公司达成了某些协议,阻止乔不死大爷试图在Mac上扼杀Java的企图。

所以现在如果在Mac OS X上想要拿到openjdk7的代码,需要clone专门的那个mac os x port项目的代码库:


hg clone http://hg.openjdk.java.net/macosx-port/macosx-port
cd macosx-port
chmod a+x get_source.sh
./get_source.sh

这样这个脚本会自动去clone位于macosx-port项目下的corba,jaxp,jaxws,langtools,jdk和hotspot这些子项目,和标准的其他平台上的openjdk7是一样的。看脚本的代码应该是不再需要mercurial的forest那个插件了,不过里面也写到了fclone分支,不知道到底什么动机,所以为求保险,建议还是安装forest插件,但是最开始的老版的forest插件已经不维护了,更新的在 http://hg.akoha.org/hgforest/,github上也看到过一个fork,说是提供了一些bug fix,不过我没试过。对于Linux和Windows来说,hg fclone依旧,顶层库的URL为http://hg.openjdk.java.net/jdk7/jdk7/

此外,Mac上XCode据说也要安装,最低要3.2.x。不知道对于拿代码来说是不是必需的,不过后期做build肯定是必备无疑。

最后,以./get_source.sh运行输出结尾。


iusr-mbp:macosx-port iusr$ ./get_source.sh
# Repos:  corba jaxp jaxws langtools jdk hotspot
Starting on corba
Starting on jaxp
Starting on jaxws
Starting on langtools
Starting on jdk
Starting on hotspo
t# hg clone http://hg.openjdk.java.net/macosx-port/macosx-port/corba corba
requesting all changes
adding changesets
adding manifests
adding file changes
added 333 changesets with 3221 changes to 1379 files
updating to branch default
1357 files updated, 0 files merged, 0 files removed, 0 files unresolved
# exit code 0
# hg clone http://hg.openjdk.java.net/macosx-port/macosx-port/jaxp jaxp
requesting all changes
adding changesets
adding manifests
adding file changes
added 252 changesets with 2188 changes to 1984 files
updating to branch default
18 files updated, 0 files merged, 0 files removed, 0 files unresolved
# exit code 0
# hg clone http://hg.openjdk.java.net/macosx-port/macosx-port/jaxws jaxws
requesting all changes
adding changesets
adding manifests
adding file changes
added 242 changesets with 6427 changes to 3002 files
updating to branch default
18 files updated, 0 files merged, 0 files removed, 0 files unresolved
# exit code 0
# hg clone http://hg.openjdk.java.net/macosx-port/macosx-port/langtools langtools
requesting all changes
adding changesets
adding manifests
adding file changes
added 945 changesets with 12323 changes to 4546 files
updating to branch default
4225 files updated, 0 files merged, 0 files removed, 0 files unresolved
# exit code 0
# hg clone http://hg.openjdk.java.net/macosx-port/macosx-port/hotspot hotspot
requesting all changes
adding changesets
adding manifests
adding file changes
added 2287 changesets with 20293 changes to 4202 files
updating to branch default
3903 files updated, 0 files merged, 0 files removed, 0 files unresolved
# exit code 0
# hg clone http://hg.openjdk.java.net/macosx-port/macosx-port/jdk jdk
requesting all changes
adding changesets
adding manifests
adding file changes
added 3767 changesets with 54877 changes to 20574 files
updating to branch default
19580 files updated, 0 files merged, 0 files removed, 0 files unresolved
# exit code 0
# Repos:  . ./corba ./hotspot ./jaxp ./jaxws ./jdk ./langtools
Starting on .
Starting on ./corba
Starting on ./hotspot
Starting on ./jaxp
Starting on ./jaxws
Starting on ./jdk
Starting on ./langtools
# cd . && hg pull -u
pulling from http://hg.openjdk.java.net/macosx-port/macosx-port
searching for changes
no changes found
# exit code 0
# cd ./hotspot && hg pull -u
pulling from http://hg.openjdk.java.net/macosx-port/macosx-port/hotspot
searching for changes
no changes found
# exit code 0
# cd ./corba && hg pull -u
pulling from http://hg.openjdk.java.net/macosx-port/macosx-port/corba
searching for changes
no changes found
# exit code 0
# cd ./langtools && hg pull -u
pulling from http://hg.openjdk.java.net/macosx-port/macosx-port/langtools
searching for changes
no changes found
# exit code 0
# cd ./jaxws && hg pull -u
pulling from http://hg.openjdk.java.net/macosx-port/macosx-port/jaxws
searching for changes
no changes found
# exit code 0
# cd ./jaxp && hg pull -u
pulling from http://hg.openjdk.java.net/macosx-port/macosx-port/jaxp
searching for changes
no changes found
# exit code 0
# cd ./jdk && hg pull -u
pulling from http://hg.openjdk.java.net/macosx-port/macosx-port/jdk
searching for changes
no changes found
# exit code 0

No Comments

早上做了个梦。挺科幻的吧。

好像2012以后的事情了——当然这么说不是为了说时间,而是说2012真的发生了。梦里也没有什么2012的现场,只不过大家都知道发生了,也结束了。

然后人们都在一个人造的世界里生存。这个世界每隔一段时间都会自我整理修复,整个世界自动分裂成一堆平行相邻的零件,然后每个部分都有自己的一份备份,哪部分里出现损坏了,世界整理的时候备份就会补上,然后坏了的那部分会经历一段自我修复的时间。

世界整理的时候,人们被放在一个不知道什么交通工具的里面,看着整个世界在眼前一部分一部分地分开、交替、更迭。

我看着一个种着树的很蓝天白云的部分和它的备份交替,上面受损的建筑物在自己修复着,那片世界上面的蓝天以很快的速度移动着,备份上的蓝天也是很快地跟上,很头晕。有个似乎熟人的人不小心掉到了正在被替代的部分,我见他在蓝天里旋转着飘浮着,古希腊雕塑一样的脸上满是惊恐。我记得我对他喊道,不要担心,下一次整理的时候就好了。

不知道为什么做这么一个梦。只不过似乎很久没有好好做梦了。

有这么一种行为

4 Comments

唤作“镀金”。

最近看那篇《哪儿来那么多牛人…》招来了点儿评论,想起以前面试的经历。确实不少人似乎就是跳到个诸如Oracle之类的超大型公司去镀个金而已。

省省吧,神马年代了都,名牌大学的海归都不好使了。踏实下来做点儿实际的事儿,能力锻炼出来了去哪儿都不在话下,这回头被工资吸引过来让我这样一个名不见经传的小公司里的小破工程师面试完后鄙视了,图个什么啊。

我差不多早在IBM、微软做校园招聘的时候就看透了,这些公司的中国分舵都跟国外的是两码事,实际上就约等于一个中国公司。

不是为了镀金去的不用对号入座,我负不起这个责 :D

解决django runserver发送静态文件的一个配置问题

4 Comments

首先,不管常识也好,django自己的文档也罢,用应用服务器发送静态资源文件一直就不是什么好办法,尤其用python、java这种东西做的应用服务器,几乎没什么可能达到apache、lighttpdcherokeenginx之流的性能——当然有人说nginx是web应用平台,换而言之,应用服务器,这个我也没话说。

有关配置django通过runserver方式启动的开发测试用服务器处理用来发送静态文件的文档在:http://docs.djangoproject.com/en/1.2/howto/static-files/ ,也是警告了无数次这样做不好,只限于开发目的。

近来和几个同学做个练手的小东西,基本上就我还算知道一些web方面的事儿,大伙都是传统软件开发行业出身,nginx这种看起来很geeky的东西,八成下意识都觉得离远点儿好(这也是当初为啥我看了一阵子cherokee,毕竟管理UI太Q太省心了…),所以和哥儿几个白话了会儿选型,就有人问,诶,能让django直接管HTTP服务嘛?想想也可以理解,nginx那东西,win下还不知道啥德行了,反正我没碰过,出什么问题真耽误人家时间啊。遂折腾了一下,照文档配的,也很简单,可最后静态资源怎么都是找不到,怎么看配置都没问题的啊…

后来问题解决了,其实可能也就是个比较不常见的配置问题,原因是我把admin和site的media目录配成同一个了…当初就是觉得一是省事,二是看了看admin里的js和css,有一些东西很有重用的价值。没想到给后来埋下这么个麻烦。

怎么改配置文件都没法解决问题,直接看代码吧。

调用流程是:

manage.py -> django.core.management.execute_manager()
-> django.core.management.ManagementUtility.execute()
-> django.core.management.commands.runserver.Command.handle()
-> django.core.servers.basehttp.run()
-> django.core.servers.basehttp.WSGIRequestHandler.handle()
-> django.core.servers.basehttp.ServerHandler.run()
-> django.core.servers.basehttp.AdminMediaHandler.()

让我最开始很迷惑的就是runserver.Command里面直接诡异地传了AdminMediaHandler去后续处理请求,刚开始看代码的时候总觉得是不是哪里看错了,让个这么霸道的名字唬住了。后来一通traceback.print_stack()才敢确信,配好的django.views.static.serve()根本就没调到。

因为,AdminMediaHandler()中有这么一段判断:

if self.media_url.startswith('http://') or self.media_url.startswith('https://') \
or not environ['PATH_INFO'].startswith(self.media_url):
return self.application(environ, start_response)

因为配置里的ADMIN_MEDIA_PREFIX和MEDIA_URL都是/media/,就会导致这个条件判断为False无法进到application(),which会辗转进入后面的django.views.static.serve(),而是在admin应用的media里寻找文件,最后因为找不到返回HTTP 404。

解决方法嘛,也没啥太好的方法,不值得因为这么个破事儿去hack配置文件,把开发环境和部署环境搞的差异很大,所以就把admin用到的静态文件挪了挪窝 :D

至于为啥要打开admin嘛…我就是觉得admin挺好玩的…

读过《三体Ⅲ:死神永生》

No Comments

三体Ⅲ:死神永生等了一年多,刘慈欣总算写完了这第三部;又在卓越排了18天的队——12月8号付款,27号送到,终于拿到了书——虽然跟很多人一样觉得装订得怎么这么像盗版书;然后在昨天,也就是12月30号,看完了整本书,512页。大概我只有看这种不务正业的书才能达到这种速度了。

不做过多的评论,豆瓣的条目上面有不少评论和回复。我天生闷葫芦一个,东西都憋在心里倒不出来。

只有一点,是我重复过无数次的,那就是我实在是不太情愿读很多人文相关的东西(而且以下内容多少有些剧透)。

人文的东西,从高中开始——我觉得高中是我从懵懂开始清醒一些的发端——稀稀拉拉地也读过不少,震撼有余,受教有余,然而更多的时候是觉得一种无奈,觉得整个人类和社会就像摆脱不了螺旋上升——如果真有任何上升的话——这么一个模式一样。之所以会螺旋着,是因为即便有那么多振聋发聩的言论也好,作品也好,人无论作为个体还是作为整体看来,都是不可救药地重复、重复、再重复,只不过——如果还是承认有上升的话——每次这样的重复都或多或少会比上一次提升一些,同时也站在了上一次提升的基础之上,所以看起来似乎前途还挺光明的。

打个比方,说到个体,有多少人奔三以后——甚至更早——会逐渐意识到父母以前的嘱咐唠叨其实有很多都很有道理?说到整体,经济危机——全球的也好,区域的也好——这是第几次了?

回到这书上来,程心似乎真是很成心,每每面临重大决定的时候总是情感战胜一切——几乎所有人看完这书都会说程心只不过替人类整体(结合这本书就得说“太阳系人类”)唱个唯一的一票并宣布个结果而已,错不在她,换一个被太阳系人类认同的人来做那些决定也是大同小异,实质上不过还是群体选择而已,云云。书里也写了,我们知道应该怎么样,也知道不该怎么样,但就是做不到——多么矫情,是不是让你想到某些言情小说里,那些唧唧歪歪的男女,或哭天抹泪或嘶声咆哮地说,“我做不到!我就是做不到!”?

也有很多人反问,假如程心不那么选择,结果就一定会不一样了么?假如她第一时间启动了广播,吓跑了三体人,太阳系就一定不会跌入二维了?假如她支持维德去继续开发曲率光速飞船,他们就一定能发现光幕/慢雾从而一定躲过打击么?这我不知道,我还跳不出三维呢,只不过她这么做的结果,书里已经明明白白地写了,在书的世界里,这些就是事实:从整个人类延续的意义上说,程心的决定确实都够失败的,换句话说,照自己情感喜好做决定有时是很危险的。

又比如有关道德,这个人们没事儿就掏出来的舆论核武。也许作为个体,一个人会选择背叛啊,黑暗啊之类的做法,苟且一下,来换来最大的利益,但是把一帮人扔在那儿,每天安安生生舒舒服服地过日子,衣来伸手饭来张口,好像太阳系地球人在拥有了威慑三体人的能力的时候一样,没事儿的时候问他们一句,你们觉得有朝一日你们会不会背叛啊,会不会黑暗啊?他们肯定一个个儿板起脸回答你说,放屁!那还是人吗?!所以他们可以审判“青铜时代”号上面的人,说他们谋杀、反人类;所以他们在生活最舒适的时候,觉得和三体人已经和解了,罗辑这样苦大仇深的持剑人可以不必了——甚至面目可憎——的时候,选择了程心这个所有持剑人候选人中最柔弱的一位;所以他们在所有的引力波天线被三体人秒杀了以后被全部圈到澳大利亚生存的时候,为了生存可以不择手段,极权,死刑,政教合一;所以他们在听到打击传言的时候可以不顾其他人还在周围就自顾自启动自家飞船的聚变发动机,任由发动机的尾焰一瞬间杀死很多人;所以他们在太阳系跌入二维的时候,看到程心的飞船已经可以做曲率驱动的光速飞行来逃脱的时候,还招呼着要撞毁它,谁都别活。

何等装逼,却又何等无能。

我不知道刘慈欣到底对人类是个什么看法,这应该是个很复杂的问题,没人能下什么定论。也许正因为这个问题的复杂性,或许为了突出这个问题的复杂性,在描写了这么多件人类作为一个群体所做的逼事儿之后,最后的最后,还能让程心和关一帆因为责任心而去冒险响应那帮不知道谁提出的回归运动,从舒舒服服(?)的小宇宙返回了生死未卜的大宇宙——看,这就是人类精英,即使所有宇宙里也许就剩他们两个人类个体了,这俩人还是能出这么个决定。我真不知道这是好还是坏。

除了感觉书里的人类很事儿逼很让我压抑以外,我总算还能领略到一些不错的地方,也许只有很少的人会觉得不错。想想有些上了年纪的人们,回想半个世纪前的那场大运动,还会觉得很浪漫。是啊,他们不在斗争漩涡的正中心,他们不会体会血雨腥风下的巨变,而是那样被指挥棒拨到或近或远的地方,和同样热血澎湃精力过剩的同龄人一起,燃烧着无悔的青春,做着自己认为无比正确的事情,并从中得到了坚实的友情和爱情,事后回想起来,在那全国性的波澜壮阔中,自己也许确实找到了属于自己的那份浪漫吧。而程心的经历,以及其他几个公元纪人的经历,也是很类似的吧。他们总是在人类面临转折点的时候现身,与所有的人同进退,而当一切重大选择都已被决定的时候去冬眠,这让他们的一生总是那么波澜壮阔,与全人类的命运一起跌宕起伏着。也许这样,到了晚年,或者没那么走运,到了需要面对一个结束的时候,他们回想起自己的一生,也确实会觉得多少有那么些浪漫吧——这浪漫当然与什么男男女女无关。至少我这么觉得,也这么梦想。虽然说时代成就了无数的个人,无数的个人也造就了时代,但是我总不想等自己到了老年,回想起年轻的时候,鼻子里总要隐约闻到那样的铜臭。

在左岸看到的《佛祖在一号线》读书笔记

2 Comments

地址在:http://www.zreading.cn/archives/2096.html,《佛祖在一号线》读书笔记。推荐,both 这篇笔记 and 这本书。

本想直接来个全文转载,一来因为实在没什么可以让我评论的,二来觉得很有感觉,请来装饰一下这个无所谓有无的blog也好。不过总觉得全文转载让人不那么舒服。

《佛祖在一号线》这本书我也读了,直接导致我聒噪了一篇无厘头的blog感慨了一下。现在看来,就像这篇读书笔记里面提到的那个比喻那样:

正如豆瓣上dancing dust评论她和刘瑜的那样:她就像住我楼上的邻居,level比我高一层,但我俩的房型一样,她的脚步声响起的时候,我知道她走在哪个区域。好像我此番的感觉也是这样。

照着这个比喻,那么我顶多是住1楼的一位,每天只能是运气特别好的时候看到人家出入时走路的样子而已。我都能想象自己那小老头小老太太一样的神态。

Older Entries Newer Entries