自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 问答 (2)
  • 收藏
  • 关注

原创 将博客搬至 Github

[url]http://winteryoung.github.io[/url]

2015-07-16 09:35:27 168

原创 JParsec中如何在parser规则里引用lexer规则

Java 的 Parser combinator 中最有名应该是 JParsec 了。随着 Java 8 的发布,我们也可以用 lambda 表达式来写规则了。刚开始的时候我以为它跟 C# 下面的 Sprache 会比较像,API 应该很容易。结果我错了。Sprache 的思想跟《Monadic Parser Combinators》这篇论文里的提到的设计方法如出一辙,是不区分 lexer 和 p...

2015-07-15 15:06:41 509

原创 Java 类路径扫描

Java 中缺乏内建的类路径扫描机制。但是这个机制对于做框架的人来说很常用。下面的工具类从类路径下面的文件或者 JAR 路径中扫描包,可以实现我们需要的功能。实现是基于 Spring 3.1.11.RELEASE 版的 PathMatchingResourcePatternResolver 修改的。去掉了原版中 ANT * 号匹配的功能。依赖 Google Guava, Apache Common...

2015-07-15 15:02:26 515

原创 TimSort 中的核心过程

TimSort 是 Python 中 list.sort 的默认实现。Java 7 也将非原始类型列表的排序实现替换成了 TimSort。网上关于 TimSort 是什么,性能特点分析的文章不少,但是介绍它的具体实现步骤的文章很少。这里有一篇:[url=http://www.drmaciver.com/2010/01/understanding-timsort-1adaptive-merg...

2011-09-11 20:19:46 230

原创 模拟实现一个 Ruby 的 TCO

今天搜了一下,发现 ruby 只有一部分 VM 实现支持 TCO(Tail Call Optimization)。下面的代码模拟实现了一下,有点 clojure 的感觉了~~[code="ruby"]class Recur attr :args def initialize(*args) @args = args endenddef def_recu...

2011-05-15 00:24:35 128

原创 解决Ruby脚本在Windows命令行乱码

如果把 ruby 当脚本使用,在 windows 命令行下面输出中文可能会乱码。这句话可以解决问题:[code="ruby"]STDOUT.set_encoding Encoding.locale_charmap[/code]

2011-05-08 16:08:51 270

原创 Java 下面如何模拟友元

Java 没有像 C++ 一样的友元。但是友元我认为是非常有用的。尤其是在设计 API 的时候,参见《Practical API Design》。友元可以帮助实现“clueless programming”(即无需考虑过多繁琐的细节就可以编程)。但是也容易被滥用。无论如何,我希望这个选择是在语言使用者手里。《Practical API Design》里提到了一种 Accessor 模式,可...

2011-02-16 02:13:31 390

原创 nVidia 显卡播放视频垂直同步问题

我的笔记本的显卡是 nVidia GeForce GT 320M。用 gnome-mplayer 播放视频的时候垂直不同步,会发生画面撕扯现象(Totem 更不用说了)。驱动用的是 Ubuntu 推荐安装的 proprietary driver。在 [url=http://ubuntuforums.org/showthread.php?t=872130]Ubuntu forums[/url] 发现...

2011-01-22 20:58:18 999

原创 完全由不变体写出来的 Register Machine Simulator

SICP 第二版 5.2 节提到的 Register Machine Simulator 我用 Clojure 重写了一遍,完全不用 mutable states。每执行一条指令都可以打出当时机器的状态,甚至可以把这些状态保存起来。这就是 Clojure 牛逼的地方……程序里的模型跟书上不太一样,为了方便对时间的管理(也就是为了用不变体搞定原本需要可变体搞定的事)。Machine 只包含寄...

2010-11-19 09:41:32 145

原创 在 Clojure 中处理异常

Update: As of Clojure 1.3, Clojure standardized the exception handling mechanism. Refer to [url=https://github.com/mmcgrana/clj-stacktrace]clj-stacktrace[/url]for the details.Clojure 中虽然使用了 Java...

2010-11-18 23:54:53 239

原创 Named arguments in Clojure

Clojure doesn't provide direct support for named arguments, which are supported under some popular dynamic languages like Ruby, Python. The following Python code was exerpted from `The Joy of Clojure'...

2010-11-18 23:54:01 117

原创 快速排序

看了《The Joy of Clojure》的快速排序,觉得比较丑,而且不通用。所以自己又写了一个。不过有一个比不上书里面的。书里面的支持 lazy-seq,而下面这个不支持。可能正是因为要支持 lazy-seq 所以书里面的那个才会那么繁琐吧……[code="clojure"](defn- split-by [pred coll] [(filter pred coll) (remo...

2010-11-18 23:51:53 91

原创 封闭空间

《Structure and Interpretation of Computer Programs》中提到,“The ability to create pairs whose elements are pairs is the essence of list structure's importance as a representational tool. We refer to this ...

2010-11-18 23:47:52 461

原创 求对数

下面是求以 1.12 为底,2.7 的对数。本方法极其低效,仅仅标记一下以备以后参考。[code="clojure"](ns t (:require [clojure.contrib.generic.math-functions :as math]))(defn abs [x] (if (< x 0) (* -1 x) x))(defn close-enough...

2010-11-18 23:46:21 193

原创 Stream in Clojure

[code="clojure"](define fibs (stream-cons 0 (stream-cons 1 (stream-add (stream-cdr fibs) fibs))))[/code]The code above is an excerpt from [i]SICP[/i] that generates an infinite Fi...

2010-11-18 23:40:24 124

getters 与回调

《Growing Object-Oriented Software, Guided by Tests》中说,过多的 getters 意味着你暴露了过多的内部细节。这种细节包括内部的数据结构、内部的对象图。作者的团队主张“No Getters”。当然这是很极端的主张。这种主张有两个比较出名,而且充满争议的名字“[url=http://c2.com/cgi/wiki?TellDontAsk]Tell,...

2010-03-13 11:47:05 121

原创 如何保证 Entity 的状态

DDD 的经典 Cargo 1.1 示例中,domain.experiment 包下的 ValueObject 接口定义了一个 copy() 方法。我认为并无用处。有的资料说防止外部修改。这个在 Java 下说不通。Java 没有指针的概念,所以不会有 C/C++ 下的指向指针的指针。也就是说,把 ValueObject 的引用暴露出去,客户代码无法修改这个引用指向的地址。又因为 ValueObj...

2010-02-22 00:57:35 182

精巧的状态机实现片段

[code="java"]public enum SniperState { JOINING { @Override public SniperState whenAuctionClosed() { return LOST; } }, BIDDING { @Override public SniperState whenAuctionClosed() { ...

2010-02-21 22:47:15 146

原创 Inspiration from Clojure

http://www.infoq.com/presentations/Value-Identity-State-Rich-HickeyThis presentation shows on what basis did Rich Hickey design the language Clojure which is similar to LISP but run on the JVM pla...

2010-02-08 18:46:33 135

原创 找到锁表的人

在公司解决 Oracle 锁表问题时查到的资料:[code="sql"] select a.object_name, l.session_id, l.oracle_username, l.os_user_name, s.machine, s.sid, s.sql_address,...

2010-01-14 12:50:31 117

原创 动态分类计数器

昨天的工作遇到一个需求:要求根据用户 ID(Long 型)记录他的访问某个页面的次数。并且在所有用户的累积计数达到某个值后输出、清空并重新计数。这个记数有个特点,某些用户的访问次数会异乎寻常地多。因为这个记录只是在高访问量的时候做,所以对程序的并发度要求比较高。我们知道,高访问量下数字型对象的装箱拆箱会极大影响效率;在高并发下,锁竞争也会极大影响效率。对于装箱拆箱的问题,我们可以在...

2010-01-10 00:30:33 119

原创 Java 中文排序

在网上找到的最简单实用的方法:java.text.Collator用法:[code="java"]Comparator comp = Collator.getInstance(Locale.CHINA);[/code]

2010-01-06 19:55:31 98

原创 Ubuntu 9.04 下 evince 中文乱码问题解决方案汇总

Ubuntu 9.04 自带的 evince 看中文是乱码。下面的解决方案是我从网上搜集汇总而来。应该能解决大多数中文 PDF 的乱码问题。如果您还能补全,欢迎留言。1. 安装 xpdf 简体语言包[code="java"]sudo apt-get install xpdf-chinese-simplifiedsudo apt-get install xpdf-chinese-...

2009-09-22 22:00:55 120

多层类结构的对象相等性

在 [i]Effective Java[/i] 中,Joshua Bloch 提到,如果一个可实例化的类定义了 equals 方法。另有一个子类继承它,也定义了额外一些属性,并且 equals 方法中需要使用这些新定义的属性进行相等性判断。那么就不可能保证 equals 语义的正确。相信看过 [i]Effective Java[/i] 的人当年读到这里时都会觉得丧气。就好像完美的世界突然有...

2009-09-14 22:59:28 130

[Groovy] this 语义的陷阱

groovy 中 this 的语义有问题。下面的代码会报异常,说 secret2 方法找不到:[code="java"]new Sub().doSomething()class Parent { def doSomething() { secret().secret2() } private def secret() { println "secret...

2009-07-30 21:46:18 463

原创 Maven 中直接依赖怎样影响间接依赖

相信学 Maven 的都看过 Maven 的官网文档的 [i]Introduction to Dependency Mechanism[/i]。在介绍直接依赖怎样影响间接依赖时,它给出了一个表格:[table]||compile|provided|runtime|test||compile|compile|-|runtime|-||provided|provided|provide...

2009-07-05 21:03:39 599

FutureTask.isDone() 的返回问题

FutureTask.isDone() 方法在 cancel(boolean) 方法被调用后会立即返回 true。这在很多情况下不会是我们想要的。我们可能需要确保 FutureTask 所代表的后台线程已经执行完毕了再做一些事情。比如须要做一些资源清理、解锁等等。关于这一点,Sun Forum 里有一个[url=http://forums.sun.com/thread.jspa?threa...

2009-05-30 06:41:42 4042

获取文本控件的输出流

在 Swing 中,文本控件没有输出流!所谓的文本控件这里指派生自 JTextComponent 的控件,如 JTextField、JTextArea。但是,有时我们会有需要提取文本控件的输出流。通过向这个流写入文本,对应的文本控件上就会显示出来。比如,我们想把异常链给打印到控件上。Exception.printStackTrace() 方法只能接受 PrintStream 或 PrintWrit...

2009-04-22 23:08:46 137

两个 JavaScript 面向对象的方法

[b][size=large]准备工作[/size][/b]为了演示或者您试验,请先准备好下面的 HTML 模板。[code="html"]body, body * { font: 10pt Arial;}.tbl { border-style: solid; border-width: 1px; width: 500px; tabl...

2008-10-02 07:06:20 124

firstChild 把我玩了

加班两三个小时,就是因为被一个 DWR 的函数给玩了。dwr.util.removeAllRows(ele, options) 这个函数可以把 ele 元素下的所有子元素删除,但允许你添加例外。我试图把一个 下的一行保留下来。[code="html"] a a a a [/code]用这样的 JavaScr...

2008-07-31 23:23:42 175

在JNI中调用本地带结构体参数的函数

说起JNI,《The Java Native Interface -- Programmer's Guide and Specification》我认为是挺好的入门教程。浅显易懂,而且也附有参考。对很多问题和陷阱也进行了讲解和提示。可以在 Sun 的官网上免费下载到这本书,下载地址:http://java.sun.com/docs/books/jni/download/jni.pdf。但是...

2008-07-27 16:28:00 738

写程序这种劳动能创造价值吗?

刚才浏览问答频道的生活栏的时候看到这样一个问题,写程序这种劳动能创造价值吗?我觉得有位仁兄的看法挺实在,[quote]2008-05-09 王贵伟 (初级程序员)首先可以肯定的告诉你,写程序这种劳动创造现代化的世界,很有价值。靠写程序至少可以养家。世界的每个角落现在都能找的到计算机程序的存在。我们程序员就是coding worker ,和建筑工人一样,没有什么区别,他们买力气建...

2008-06-16 13:19:38 227

方便的文件树遍历

我经常会遇到进行批量文件修改的情况。Windows 脚本我十分不精通,以前都是靠现写一个 C# 程序。遇到 Ruby 后,我十分喜欢它语法上的灵活性。(虽然我认为太灵活不一定好)而且它还是一种脚本语言,很方便。考虑到我所遇到的情况,我想写一个类来支持对文件名(文件夹名)或全路径名进行正则表达式匹配。同时也支持反向过滤。即,保留那些没有匹配上的文件或文件夹。举一个例子。比如用备份工具备份“我...

2008-06-16 12:15:31 194

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除