Author: xnnyygn

  • 车站的田园与现代

    我一直觉得这是个神奇的车站,车站前面是现代的水泥路,但是背后是乡下那种田园风。 前面

  • 老家的油菜花

    上周末在老家拍的。看着这些油菜花不禁让我想起了小时候在油菜花从中捉迷藏的场景。 从上面看 从下面往上看

  • [scala]50行实现web表单验证器

    思路是这样,每个表单实现Validatable特质。这个特质要求实现返回一个属性名到验证器列表的映射。 表单验证器执行时首先获取表单所有的属性(除去class),然后遍历这个映射,运行字段对应的验证器变成响应的验证错误(如果有的话),否则最后是个空集合。 FormValidatorRunner(代码最下方)是测试类,执行结果是 Map(name -> List(ValidateError(default.notBlank,List()))) 代码如下:

  • 时间管理实践小记

    最近重新读了《时间管理-给系统管理员》,虽然我不是系统管理员,但是里面的内容对我来说并不是不适用,而且在尝试应用之后感觉自己的时间掌控力立马上升了一个阶层。下面就讲讲我阅读和实践中的想法。 在重读之前,个人尝试了很多个人时间任务管理的方式,比如在学N2的时候,早起半小时学习;工作中并发比较大时,按照完成时间长度优先完成时间短的,使得一天做的事情最多;手机上的AnyToDo等。感觉不管哪个缺少点什么,面对新来的任务,长期的计划没有一个比较好的处理方案。现在看来,原先的方式对当天任务的处理还行,但是对几天的,时间跨度更长的计划就难以承受了。

  • GetBeanProperties via Scala

    一个简单的用Scala写的获取bean属性的例子。核心方法是Introspector#getBean(Class)。 import java.beans.Introspector object GetBeanProperties { class Person(id: Long, name: String) { def getId = id def getName = name } def main(args: Array[String]): Unit = { println(GetBeanProperties(null)) println(GetBeanProperties(new Person(1L, “xnnyygn”))) } def apply[T](bean: T): Map[String, Any] = Option(bean) match { case None => Map[String, Any]() case _ => doApply(bean) } private def doApply[T](bean: T):…

  • 迟到的2013春节小兔子

    2013-spring-bunny, a photo by gxnnyygn on Flickr. 大概两月的某个下雪天做的。那时博客还没部署起来,所以暂时放手机里了。现在把照片拿出来贴到博客上也算是对今天的春节的小小回忆吧。

  • 领取N2证书和之后

    今天上午终于拿到了传说中的日本语能力考试二级(N2)证书。回想这一年半来,边工作边学习,好是辛苦。不过也籍此保持学习心态,留给现在的英语学习一个好的开端。不过,证书对我最大的意义可能在于是给过去断断续续的日语学习一个肯定。 拿到之后,首先记下自己的考试之后的经历,给其他要考试的人一个参考。 我考的是2012年12月的N2,大概次年2月就可以网上查询成绩。什么时候可以查,可以定期检查日本语能力考试报名网站。查分界面需要填写自己的证件号和准考证号。 如果查到的结果是通过,记得检查自己的准考证是否还在,之后领取证书时有用。如果不在了,赶快重新打印一份。

  • returnvalue & xwrapper

    introduction 背景是WebService,具体实现是XFire。由于某种原因XFire的Fault无法使用,导致只能使用返回值表示成功与错误的情况。举例如下: // return type class IntWrapper { boolean success; String message; int value; } // client IntWrapper wrapper; if(wrapper == null) throw new NullPointException(“wrapper is null”); if(!wrapper.success) throw new Exception(wrapper.message); return wrapper.value; 实际实现时,发现服务有很多方法,每个方法有各自的返回类型,有部分重复。其次是服务端每个方法都必须try catch,把错误转化为返回值。第三是客户端代码也有重复,每次都要检查是否为null和是否成功。 为了减少重复代码,提供如下方案:

  • compile install mysql 5.6.10 and optimize for low memory VPS on debian 6

    compile # download mysql-5.6.10 from https://dev.mysql.com/downloads/mysql/ tar zxf mysql-5.6.10 cd mysql-5.6.10 # set default charset to utf8 cmake -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci # install to /usr/local/mysql make && make install initialize database # create user mysql and change owner of /usr/local/mysql to mysql groupadd mysql useradd mysql -g mysql chown -R mysql:mysql /usr/local/mysql # still in mysql-5.6.10…

  • 5k5购机记

    配置列表 CPU Intel i5 3470 ¥1288 Motherboard GIGABYTE ga-h77-ds3h(rev 1.1) ¥679 Memory Kingston 4G 1600MHz ¥159 Graphic Card Sapphire HD 6770 1G ¥699 Wireless Card TP-LINK TL-WN851N 300M ¥154 Power Seasonic SII2-520W ¥439 Case Cooler Master RC-550-KKN1 ¥459 Monitor Dell U2312HM ¥1377 Hard Disk Seagate ST500DM002 SATA3 500G ¥345 No mouse, keyboard, dvd-rw 选配 选择台式机的原因一个是笔记本比较贵而且屏幕相对小,一体机总觉得差那么一点,另一个原因是去年就想配一台电脑,但是感觉没啥特别强烈的需求暂时放下了。…