Author: xnnyygn

  • svn switch and git svn

    本文之前就想写,但是当时对svn switch不是非常了解,而且没有解决多分支开发的问题。 到今天为止,靠着强大的git把多分支开发的问题基本解决了,就上来把这一段时间内的解决过程和最终的方案说一下,希望对仍旧被svn“蹂躏”的各位有用。 首先说下多分支开发的问题。在svn下多分支开发唯一的方法是把代码checkout到不同目录中。svn switch并不能承担分支切换的功能。svn switch从它的功能来说是让一个工作副本中包含来自多个库的内容。我能想到的典型场景是“分支”合并到主干上时,当前的主干副本来需要来自其他库,即开发完成的分支的内容。其他可能是一些“异常情况”,反正不要被switch这个单词骗了…… 那么svn是否有别的命令支持分支切换么?我个人没有查到。其实从我这一段时间的research,我对svn进一步的认识是:svn没有分支的概念。得出这个结论的过程可能比较长,而且有比较多的个人标准,这里就不展开了。重点是如何解决多分支版本开发问题。

  • google calendar使用小记

    使用google calendar有一段时间了,当初是看中了重复的事件(event)这个功能。现在经同事指点,又学到了一点新东西。另外自己对事件和任务(task)有了进一步的理解。 日历分类 你可以建立多个日历,比如按照类别的。分成多个日历之后,你可以选择性地显示日历,比如只显示个人的(personal),只显示工作的(working)。其次,你还可以选择性的和他人共享日历,把你的日程分享给其他人看。 说到日历共享,个人认为团队共享某个工作用的日历可能比填写日报更好一些。 事件和任务 google calendar中项目分事件和任务两种,任务理论上不等同于全天事件。任务应该可以被拆解成一个或多个事件。换句话说,你给自己设定某个任务,需要分派到哪天做什么。比如今天我要完成这篇文档,我设置了“[blog]google calendar使用小记”任务,过期时间设定为5月1日。晚上整理时分配今天几点写博客。 当然,个人的任务可能时间要求并不是很高,但是可以尝试这么去做。

  • vim recording小试

    大家是否有这种经验,“不知道为什么按出recording状态,按ESC貌似无法直接退掉”的情况,个人已经有过好几次了。 与其出来烦人还不如了解它,昨天我就花了点时间学习recording。怎么说,还是有点用的。 首先说明的是recording是怎么按出来的:命令模式下按q。假如你想按退出的:q,右手有点慢的话就有可能出现recording。顺便说一句,q:出来的是command history,command history状态下:q或者enter都可以退出。 那么recording是干啥的?简单来说就是命令序列,加快工作效率的。基本使用是q开启录制,接着选择寄存器,比如1,2,a之类的。之后的到第一个q为止的命令都会加入序列中。录制完成之后@1(1这里为寄存器的名字,你也可以选择其他寄存器)就可以重复寄存器中的命令序列。举个简单的例子: 1. 你需要复制1. 20行,除了Vyo20p(选中行复制,进入下一行,粘帖20次)之外,你可以q1Vyopq录制命令序列,20@1执行20次。 这个例子可能还不能体现recording的好处,接下来举第二个例子,注释10行代码

  • linux命令使用小记1

    bash的快捷键 现在碰到的服务器上的用户的默认shell都是bash,所以主要讲下bash的一些快捷键。 删除整行命令:Ctrl + u,对不回显的密码输入同样有效 向前删除单个单词:Ctrl + w,在vim里面同样有效 运行最近一条命令:!! 就是两个感叹号,个人是从sbt(scala下的一个构建工具)里面学来的 搜索最近的命令;Ctrl + r,输入关键字,比如你最近输入了vim /path/to/file,那么Ctrl + r,再输入vim,那么就可以显示出这条命令,回车就直接执行了 在搜索最近的命令的基础上,!vim 可以执行最近这条vim的命名。这个用在什么地方最好呢?如果你最近tail了某个文件,输入!tail就可以直接执行tail了,不用输入文件名 清屏命令:Ctrl + l,效果和clear一样 上一条命令和下一条命令:Ctrl + p,Ctrl + n,个人不是很喜欢用上下键,因为要移动右手,而且有些键盘需要按FN才有上下,比如hhkb-pro,不过这个仁者见仁,智者见智 暂停屏幕输出:Ctrl + s,恢复屏幕输入Ctrl + q,这个用来干嘛呢?类似tail时scroll lock 更多bash快捷键,请google

  • IE与P3P

    首先说下背景。IE下第三方cookie默认是被禁用的,假如你通过iframe引入别的网站的页面并且想要设置cookie的话,默认IE会阻止,导致某些网站的逻辑无法执行下去。 解决这个问题的一种方法是使用P3P。简单来说就是iframe对应的网站在返回的响应中包含一个名字为P3P,值为CP=开头的响应头。具体值网上有很多,但也有说IE只检查是否CP=开头。 但是问题到此没有结束,个人在尝试使用P3P的时候遇到了问题。

  • [scala]基于resourcebundle的messagesource

    之前写了一篇模拟spring的messagesource实现,后来了解到spring使用的是resourcebundle,于是稍微了解resourcebundle之后改进了实现,可能比以前简化很多。 import java.util.Locale import java.util.ResourceBundle import java.util.MissingResourceException import java.text.MessageFormat trait MessageSource { def getMessage( code: String, locale: Locale, args: Array[Any] = Array[Any]()): Option[String] } class ResourceBundleMessageSource(codeBase: String) extends MessageSource { def getMessage(code: String, locale: Locale, args: Array[Any]) = { val bundle = ResourceBundle.getBundle(codeBase, locale) getString(bundle, code).map(new MessageFormat(_).format(args)) } private def getString(bundle: ResourceBundle, key: String): Option[String]…

  • 使用synergy在多台电脑之间共享鼠标和键盘

    synergy是一个简单的在多台电脑之间共享鼠标和键盘的方案,官方网站在这里。 对我来说,synergy的主要特性如下: 跨平台,linux/windows/mac下均可使用 鼠标和键盘共享 剪贴板共享 我的实际应用方案是 server: ubuntu 12.04(64) client: windows 7(64)

  • [个人时间管理]线程饥饿与动态任务管理

    虽然主标题有点像开发上的内容,但实际上不是那样的,讨论程序开发上的内容的目的是为了解决个人时间管理上的“动态任务管理”。 首先说下“动态任务管理”是什么。当你早上制定了一天的计划并付诸实施的话,很有可能遇到干扰或者未曾预期的新任务。处理这些干扰或者任务的过程我个人称为“动态任务管理”。不用说,动态任务管理是个人时间管理很重要的一项内容,如果你处理不好的话,会使得你早些安排的任务一团糟。

  • [scala]spring messagesource的功能模仿实现

    原理 遍历目录下messages*.properties文件 从文件名中取出locale,比如messages_en_US.properties中en和US分别为语言名和国家名 解析properties文件的k=v键值对,有等号,k和v不为空的情况下构造一个Map,k其实为messageCode, v为messageFormat 最后是根据locale和messageCode查询messageFormat 由于scala有强大的option,flatMap等方法,spring的messageSource的defaultMessage作为调用者的可选项,即Option.getOrElse,参照代码最下方的示例 测试结果 Some(Hello, XnnYygn!) Some(Hello, XnnYygn!!!) Some(你好,XnnYygn!) default message

  • [java]内存缓存和weakreference

    背景 Java中直接给变量赋值(原始类型和null除外)时是强引用 假设简单的内存缓存使用ConcurrentHashMap 问题 虽然使用内存缓存可以方便的加速程序,但是存在不知道条目何时失效的问题。不管是放入时遍历还是去除时判断甚至守护线程,实际上都是在做类似GC的事情。 另一种方案 Java提供了java.lang.ref包,其中有weakreference等类。这些类提供了一种不用模仿GC但是可以提示GC的解决方案。 比如softreference,假如你在内存缓存中放置的是softreference的话,程序在内存不足的情况,会把一些softreference回收掉,这样的话,至少不会发生OutOfMemory的异常。 而weakreference,在GC执行时会被回收,如果对象比较复杂的话,GC多次执行后才会被回收。另外,有一个类叫做WeakHashMap,基于WeakReference,如果你愿意,你可以用WeakHashMap作为内存缓存的非线程安全的实现。 如果你对java.lang.ref包中其他的类有兴趣,建议阅读javadoc或者google一下相关文章。 建议 建议内存缓存至少使用softreference或者weakreference。 理论上WeakHashMap也可以用,但是就像HashMap并不是用来做缓存的一样,WeakHashMap并不是设计来作为缓存的。所以,最好多了解一些缓存实现并使用,比如jcache/ehcache/oscache etc。