Chen Yangjian's Blog

Carpe diem - Seize the day

党的政策亚克西

| Comments

写博客这么长时间,都快忘了博客的宗旨是歌颂党的政策,党的政策亚克西。今天看到一群农民兄弟运用科学技术为建党XX周年献礼,很激动,特此分享。

最近这段时间,帝国主义思潮纷纷自危,称《娱乐至死》。大意虽然 《1984》 越看越不可能,《2012》也就唬唬小朋友,但是《美丽新世界》却越来越成为可能。我们伟大的党借他山之石以攻玉,认为帝国主义虽亡我之心不死,但其言可鉴,颇有几分道理。于是便往《1984》这边修修,提醒一下沉迷在网络、酒精、甚至韩剧中的中国人民,老大哥在看着你,你今天所看到的,到明天可能就并不存在了。

所以,在看到南京工厂爆炸松花江漂的不再是松花蛋、大连变油田甚至生完儿子可以变成没屁眼等各种与 youtube、facebook、twitter 的存在一样十分可疑的新闻时,请务必睁大您的双眼,doublethink 一下,党的政策亚克西。

关门,放专家

| Comments

又一则:

据说大地震前有三个明显征兆:1.井水异常;2.牲畜反应异常;3. 专家出来辟谣。但是细心的人指出,第二条和第三条重复了。

台球赛

| Comments

周末参加了公司组织的台球比赛,15球抢黑八。实力不够,得从预选赛打起。因为本来也就是从毕业之后才开始接触,所以对自己期望很低,争取先赢一场。预选赛分了许多组,每个组都有7、8个人。彼此之间先互K,然后看战绩陆续淘汰,三局两胜。连输两局的直接出局,小组第一的直接出线,小组第二与其他小组的第二争出线权。我延续着周四驾驶考试的紧张,手紧得很,直接 1:2 先输一场。后来比较走运,连赢了四场。输给小组第一之后,与别组的家伙决胜,赢了。

次日决赛圈的比赛,预选出线的加上报送的,总共24人,分八个小组决出16强。我们小组三轮比赛结束三个 2:0,套了个圈。只好加赛,一局决胜。侥幸赢掉先前输的家伙,又拿下另一个对手之后,不小心小组第一进入 16 强,木哈哈哈。之后是淘汰赛。我碰上坐我对面的同事。丫是个运动全能,公司的乒乓球冠军。这次是 5局3胜,我 1:3 输掉。

8 强的选手跟前一天的预选赛参赛者确实不是一个层次的。大局观、技巧、准星都很吓人。除了自由球和局势明朗之后,我很少安排线路,一般能赢下来都需要仰仗自身运气或者对手给的机会。差距很大。

杯具的是,您的程序太过令人叹为观止,人家都还没有准备好……

| Comments

“Unfortunately, Windows was not prepared for a program as awesome as this…”

我的本家,Raymond Chen,是个颇有名气的微软程序员,写过一本书,有个著名的博客。有个客户问他如何将他们公司做的一个 Vista Side Widget 永久置顶,无视用户的偏好。Raymond 便回应以文首这段话。

另加一个极品客户:

客户:我想要用户一访问这个网页,就打印出我们的目录。

我:打印到屏幕上?

客户:不,从他们的打印机里真的打印出来。

我:呃…… 如果用户点了打印按钮,或者点了文件菜单->打印,我们可以让它这么做。我们甚至可以一打开网页就弹出窗口问是否要打印,用 JavaScript。但是那样会让有些用户觉得讨厌。

客户:不,我不要那样——我只要一访问网页就打印出来,不用询问他们。

我:恐怕我做不到。

客户:为什么?

我:因为互联网不是这样的。如果网站可以逼你的打印机打印东西,那每个人的网站都会这么做。你上网的时候,不想每个网络上的陌生人都可以用你的打印机吧?

客户:我不管别的网站。我只要你把我的网站弄成我要的那样。

via

碰上这种人,只能喃喃自语,“拜托!正常点……” 然后默默走开吧。

夏日炎炎正好眠

| Comments

“Sometimes you want something so bad it slips away from you” – Kobe.

科比对自己在总决赛第七场的表现的评价也是对我今天早晨科目二考试的真实写照。我紧张得像根木头,平时不会犯的错误都冒出来,加上一个死穴,直接挂掉。

晚上七点多在玉古路上行走,不走运被偷儿盯上,在我身后拉开了我的包包拉链。掏了半天,我碰巧一回头,结果一个照面。反应过来之后,傻乎乎地跟他对峙,瞪着他,不敢打架。那偷儿异族面孔,被我发现后也不跑,看着我,嘴里碎碎念:“干嘛?干嘛?” 我没想过要抓住他,有冲动想打架,但是又怕他有刀或者帮手,转身走掉,边走边回头看着他,隔了五米丫还看着我。我气愤不过,冲他比中指,丫冲上来,我也迎上去,瞪他。最后还是转身走掉了。

走掉之后才想起检查损失…… 钱包什么的都还在,幸好幸好 -_-b。走到新桥门不甘心,又打电话报警。警察叔叔对偷儿倒是谙熟,只问我有没有抓住贼。我心说现在社会化大分工,我的职业方向里头没有抓贼这一项啊。最终电话那头了解了相貌、身高、地点等情况,也就不了了之,之后管这一块的派出所有人打来电话,问我有没有跟着偷儿。这时候我已经走远了。

忘记是港产片还是湾湾片,有个睿智老头说,不管你现在是在人生的高峰或者低估,都要顾形象,给人神清气爽的感觉,晦气不会找上你。前年与今日,我的精气神都十足萎顿。以前是身体状况,现在是名落孙山。两番遭贼,便觉天下再无宁土。只盼望诸位顺遂,莫着了道儿。

从我五月初一个人开始居住之后,上周新家终于来了第一波客人,我的小舅一家。他们看完世博,顺道来杭州打野怪,并在我家补补血。星期天午后到,休息了一会,便一同去西湖周边玩。到汽车西站之后,打车去到杨公堤,一路从曲院风荷经孤山公园走到保俶路。

Flex 里头的 HTML 问题

| Comments

更准确点说是 <Font> 标签的 font-size 属性。在 HTML 中,font-size 的取值范围是 1-7,木有单位。而在 Flash 的 HTML 解析器里头,font-size 是跟 flash 其他地方一样的单位,即像素。

今天在应用 Flex 3.5 自带的 RichTextField 的时候就碰到了问题,报表生成出来,在 PDF 里头要大上许多。Google 一番,已有一个猥琐解

人肉把 font-size=”10” 改成 style=”font-size:10px” 就可以了。Java demo 如下:

value = value.replaceAll("SIZE=\"([0-9]{1,2})\"", "style=\"font-size:$1px\"");

Stevey Yegge’s Back

| Comments

停博一年余,Stevey Yegge 回来了。他的博客以泼油漆为主,最著名的应该是喷 Java 走面向对象的极端,叫做《Execution in the Kingdom of Nouns》。

他是个软件开发者、博客写手,先后在 Amazon 与 Google 供职。他实现了 Google 的服务端 JavaScript 的 rails web 框架。为 Emacs 写了个 javascript-mode

他的博客:

  • Amazon blog: http://sites.google.com/site/steveyegge2/blog-rants
  • Google blog: http://steve-yegge.blogspot.com/

摘自那篇 Java rant:

For the lack of a nail,
    throw new HorseshoeNailNotFoundException("no nails!");

For the lack of a horseshoe,
    EquestrianDoctor.getLocalInstance().getHorseDispatcher().shoot();

For the lack of a horse,
    RidersGuild.getRiderNotificationSubscriberList().getBroadcaster().run(
      new BroadcastMessage(StableFactory.getNullHorseInstance()));

For the lack of a rider,
    MessageDeliverySubsystem.getLogger().logDeliveryFailure(
      MessageFactory.getAbstractMessageInstance(
        new MessageMedium(MessageType.VERBAL),
        new MessageTransport(MessageTransportType.MOUNTED_RIDER),
        new MessageSessionDestination(BattleManager.getRoutingInfo(
                                        BattleLocation.NEAREST))),
      MessageFailureReasonCode.UNKNOWN_RIDER_FAILURE);

For the lack of a message,
    ((BattleNotificationSender)
      BattleResourceMediator.getMediatorInstance().getResource(
        BattleParticipant.PROXY_PARTICIPANT,
        BattleResource.BATTLE_NOTIFICATION_SENDER)).sendNotification(
          ((BattleNotificationBuilder)
            (BattleResourceMediator.getMediatorInstance().getResource(
            BattleOrganizer.getBattleParticipant(Battle.Participant.GOOD_GUYS),
            BattleResource.BATTLE_NOTIFICATION_BUILDER))).buildNotification(
              BattleOrganizer.getBattleState(BattleResult.BATTLE_LOST),
              BattleManager.getChainOfCommand().getCommandChainNotifier()));

For the lack of a battle,
    try {
        synchronized(BattleInformationRouterLock.getLockInstance()) {
          BattleInformationRouterLock.getLockInstance().wait();
        }
    } catch (InterruptedException ix) {
      if (BattleSessionManager.getBattleStatus(
           BattleResource.getLocalizedBattleResource(Locale.getDefault()),
           BattleContext.createContext(
             Kingdom.getMasterBattleCoordinatorInstance(
               new TweedleBeetlePuddlePaddleBattle()).populate(
                 RegionManager.getArmpitProvince(Armpit.LEFTMOST)))) ==
          BattleStatus.LOST) {
        if (LOGGER.isLoggable(Level.TOTALLY_SCREWED)) {
          LOGGER.logScrewage(BattleLogger.createBattleLogMessage(
            BattleStatusFormatter.format(BattleStatus.LOST_WAR,
                                         Locale.getDefault())));
        }
      }
    }

For the lack of a war,
    new ServiceExecutionJoinPoint(
      DistributedQueryAnalyzer.forwardQueryResult(
        NotificationSchemaManager.getAbstractSchemaMapper(
          new PublishSubscribeNotificationSchema()).getSchemaProxy().
            executePublishSubscribeQueryPlan(
              NotificationSchema.ALERT,
              new NotificationSchemaPriority(SchemaPriority.MAX_PRIORITY),
              new PublisherMessage(MessageFactory.getAbstractMessage(
                MessageType.WRITTEN,
                new MessageTransport(MessageTransportType.WOUNDED_SURVIVOR),
                new MessageSessionDestination(
                  DestinationManager.getNullDestinationForQueryPlan()))),
              DistributedWarMachine.getPartyRoleManager().getRegisteredParties(
                PartyRoleManager.PARTY_KING ||
                PartyRoleManager.PARTY_GENERAL ||
                PartyRoleManager.PARTY_AMBASSADOR)).getQueryResult(),
        PriorityMessageDispatcher.getPriorityDispatchInstance())).
      waitForService();

All for the lack of a horseshoe nail.

少了一根马掌钉之 Java 版。

  • 少了一个铁钉,丢了一个马掌,
  • 少了一个马掌,丢了一匹战马,
  • 丢了一匹战马,败了一场战役,
  • 败了一场战役,失了一个国家,
  • 所有的损失都是因为少了一个马掌钉。

1776 年的美国人讲英语也是英国腔不?

| Comments

via

答案很有意思。

1776 年的美国人讲英语跟当时的英国人没多少区别,这个我们预想的是一致的。只是有意思的是,当代的美式英语与英式英语对比起来,其实美式英语更贴近 1776 年的英国腔。在 1776 年后的两百多年时间里,英式英语比美式英语变化要多得多。

就好象高中的时候语文老师告诉我,其实温州话用来读唐朝的古诗更合适更押韵一样,我的下巴掉到了地上。

如今的英国腔,指的是不列颠的标准英语,BBC 英语。绝大部分的美式英语是发 r 音的(Rhotic),而标准英国腔是不发的(non-rhotic),(比如说 hard)。1776 年的时候,英美都是发 r 音的。后来英国的某些非主流贵族,觉得不发 r 音很潮,就流行开了。

ActionScript Graphics 画虚线、点线、双线

| Comments

即 dashed、dotted、和 double,姑且这么翻译。

虚线、点线的做法差不多的,只是一个是小线头,一个是点。Graphics 对象里头木有现成的类似 dot(), dashLineTo() 之类的函数。于是得人肉通过 n 个 lineTo() 来实现。一开始没注意该函数接受的坐标参数类型是 Number,还很体贴地为它特地四舍五入(Math.round())。结果出来的线像无数只幼虫,歪七扭八,很猥琐地组成了一条虚线。改正之后,lineTo() 就和谐了,默认是打开 pixel hinting 的。

双线的实现办法比较猥琐,先按原宽度画出一条线,再在中间补上一条白的。估计以后要支持背景色、透明背景什么的话,还得再改。暂且不管。

水边的阿狄丽娜

| Comments

一直处在瞎忙的状态,每天 2 个小时的交通时间扣去后,生活质量下降好多。吉他也有一阵没一阵地练,已经练到独奏曲子弹不动该弹唱了。说唱歌我的朋友都知道,跑调忘词笑场一应俱全。

录了最近练得比较多的《水边的阿狄丽娜》,有部分小节速度太快,弹得很不熟,将就听吧。

听了这个版本的阿狄丽娜之后,我十分后悔发上来了。