阿里巴巴-淘宝-新制造-高级技术专家,PostgreSQL、Clojure、FreeBSD等技术爱好者
暂时未有相关通用技术能力~
阿里云技能认证
详细说明# 前言 与人类社会的历史相比,计算机的历史非常短暂,上世纪五、六十年代都能称为远古时期了。但计算机的历史又很神奇,早期的思想往往都很超前、很先进。比如EJB技术虽然是1998年提出的,但它的设计很超前,诸如微服务等后面出现的技术都或多或少借鉴了它的思想。通过了解计算机技术的发展历史,往往能从中找到很多有创意的想法,能帮我们解决当下的问题。所以,今天想来掰扯一下Emacs和Vim这两款经久不
本文是我之前写的文章——《你试过这样写C程序吗》——的第二版,并把文章名改成更贴切的“从重复到重用”。
今天午休期间刷微信,看到云和恩墨的盖总转了一条朋友圈,说杨长老在Oracle中用SQL解海盗分金问题(原文《无往不利:用SQL解海盗分金的利益最大化问题》,看完之后手痒,决定试试在PostgreSQL中解决该问题。
在PostgreSQL中实现MySQL的on update current_timestamp功能
经过几夜奋战,我做出一个“不艰难”的决定:正式把博客迁移到 http://redraiment.com! http://redraiment.com 托管在 Github上,你也可以通过 http://redraiment.github.com 来访问。如果你也有兴趣搭建这样一个站点,可以简单地 Fork 一下 https://github.com/redraiment/redraiment.
注:本文代码使用 JavaScript。 一些同学对递归的理解还停留在“是一种求阶乘比循环低效的方法”。但其实递归和循环处理的问题是不同。拿“遍历数组”这个问题来说:循环适合同一维度(单层长度不限)上的遍历,而递归则适合跨维度(层数不限)的遍历。 比如遍历以下一维数组: var a1 = [1]; var a2 = [1, 2]; var a3 = [1, 2, 3]; 虽然它们长度不一,但循
摘要 分支语句是所有编程语言的基本元素,比如Java语言中的if else和switch语句,它们提供一种能力允许程序根据一些条件动态地选择执行某些代码块。这种动态性给程序带来了很多的灵活性! 正因为if else如此方便如此灵活,很多代码中它都会被滥用,就像下面这样让人崩溃的、嵌套的、成堆的分支语句: if (context.equals("tutorial-room")) { if
利用微信的公众平台接口,我开发了一款“开窗”小游戏。玩过文曲星的同学对这款小游戏不会陌生。 除了实现游戏本身的逻辑,我还加入了“入门级”、“初级”、“中级”、“高级”等不同的游戏难度。每个难度等级就是一个独立的房间,拥有独立的擂主(用最少步数完成目标)。如果你坐上擂主之位,就能向房间里所有的玩家发一句擂主宣言! 为了让大家快速上手,游戏还提供了额外的“教程”房间,一步一步教你所有规则
今天早上醒来在 Hacker News 上发布了 EDBC 的信息,没想到一下子被顶到首页上去了!大家都去围观一下,嘿嘿~ http://news.ycombinator.com/item?id=4967432
今天更新了之前的 Emacs-CGI,把其中的数据库连接模块拎出来,作为一的独立的项目:EDBC(Emacs-Lisp Database Connectivity)。项目地址:https://github.com/redraiment/edbc 文档地址:https://github.com/redraiment/edbc/wiki 现在通过抽象,edbc.el 就是定义了一个框架,规范了 e
我最近一直在“叫嚷”中文计算器 ,最早发布的是网页版的,纯JS实现;半个月前又发布了微博版的;今天实现了微信版! 通过扫描下面的二维码,或者搜索用户名 calc-cn,或者在“查找微信公众帐号”中搜索“中文计算器” 来添加!
@中文计算器 还有童鞋记得我之前发布的“中文计算器”不? 经过几天的忙活,我终于用php重写了这个中文计算器,并发布了“微博版”! 所谓的微博版其实就是我开通了一个叫“中文计算器”的微博帐号,只要你发一条包含表达式的微博,同时 @中文计算器,它就能自动帮你计算!如下图所示。 目前“微博版中文计算器”只支持“加、减、乘、除、除以”五种运算,但数值支持无限精度整数和十六位小数~如果你感
刚刚做了升级,支持输出“中文简写”,“中文大写”,“金额”以及“阿拉伯数字” 四种格式。 http://chinesecalculator.sinaapp.com/
太阳能手电筒 昨天参加完OSC源创会之后,和几个同事一起在肯德基啃鸡腿。期间聊起我前天开发的“中文计算器”,同事的想法和网上的评论差不多,觉得这是一个无聊的作品,没什么现实意义。顺着这个话题,又聊到什么是最没用的发明? 同事说当初看《国产凌凌漆》的时候,达文西发现的那个“太阳能手电筒”是他看来最没用的!手电筒本来就是在黑暗的地方用来照明的,而他的发明只能在有光的地方才亮,在黑暗的地方就“绝对不
计算器程序相信很多人都写过。不过通常都是基于阿拉伯数字的,比如输入 1+2+3,返回 6。 我刚刚实现了一个纯汉语中文的计算器,即输入 一加二加三,返回“六”。 程序是用 JS 实现的,大家可以玩玩~^_^ http://chinesecalculator.sinaapp.com/
又到周五晚上自由时间,^_^。今天看了一下 Node.js。 服务器端 JS 情缘 在校期间我学会了JavaScript和Java,当时我就在考虑JS有没有类似JSP一样的服务器端程序,名字应该是JSSP(JavaScript Server Page),可以在 HTML 中嵌入 JS。Google了一圈发现IIS支持用JScript代替VBScript做ASP开发,另外SourceForge上
最新进展:Emacs-cgi 加入对存取 Cookie 和 Session 的支持,以及页面之间跳转(redirect和forward)。项目地址:https://github.com/redraiment/emacs-cgi。下面以一个登入页面作为示例: 首先是首页:如果用户为登入,显示输入框提示用户输入用户名;否则输出欢迎词。 #!/usr/local/bin/elisp (requir
Emacs Lisp 作为编程语言也是非常强大的。尤其 Emacs 作为一款编辑器,自带了很多处理文本的函数,用起来很方便。 我一直希望用 Emacs Lisp 作为服务端脚本语言来开发 Web 程序。在网上搜索了很久,还真有人做过类似的事情:http://www.emacswiki.org/emacs/cgi.el。但他封装的还不够彻底,用起来还是挺麻烦,于是自己动手写了一个。目前支持:
提起服务器端 JavaScript,很多人第一反应都是 Node.js。其实 Java 6 开始包含 Script Engine,其中就自带了一个“阉割版”的 Mozilla Rhino - 纯 Java 实现的 JavaScript 解释器。 使用 jrunscript 就能启动这个解释器。使用 Rhino 的好处是你能使用 JavaScript 语言做开发,但又能使用现成的浩瀚的 Java
都是寂寞惹得祸...网络故障已经四天了,强烈谴责华数网通这种低效率的行为(好吧,谴责有个屁用)。 实在无聊,于是写了一个猜数字游戏:随机生成一个[0, 99]之间的整数,如果猜得小了就显示 Too small,大了显示 Too big,否则显示 You are right。作为添头,前面会以英文序数词输出 The first time, The second time... (setf *ra
我在之前的文章《Lisp 匿名递归函数》中提及 Emacs Lisp、Scheme 和 Common Lisp 中默认都没提供定义可递归的 lambda 函数的方法。并在文章里提供了我自己实现的 Emacs Lisp 版本和 Common Lisp 版本。 在那之后,我学习了 Clojure,发现 Clojure 中的 fn 在定义 lambda 函数的同时还允许给它取一个临时的名字,这样就能
码农的业余休闲活动就是去学习一门冷门的语言或者研究一项非主流的技术。BrainFuck 是一门小巧的编程语言,顾名思义,阅读这门语言的代码就像在强奸你的大脑一样。事实证明开发它的解释器比读懂它的 Hello World 要快。 BrainFuck只有八条指令: 指令 含义 等价的C代码 > 指针加一 ++ptr; < 指针减一
刚开始学编程的时候,是不是对搭建环境感觉非常棘手?比如从零开始搭建个 PHP Web 开发环境,要下载 Apache 服务器、PHP,然后安装、配置……经过这么一大堆的无关工作,你可能只是想验证一下教程上的 echo "Hello World"; 能不能工作。 这种时候,如果能有个网站可以在线执行代码:我们只要打开浏览器,进入网页,敲入要执行的代码,点击执行按钮就看到执行结果。那是一件多畅快的
p { font-size: 16px; } 《Designing command-line interfaces》 原文地址:http://www.antoarts.com/designing-command-line-interfaces/ 正文 虽然已存在大量关于图形用户界面(GUIs)设计的文章,可是介绍命令行界面(CLIs)设计的却很少。本文尝试介绍几个关于CLI设计最重要的
主流的 Lisp 实现(CLISP、Guile、Emacs Lisp 等)中默认都没提供定义匿名的递归函数的方法。上 Google 搜索了一下,看到不少人也都在抱怨。不过 Lisp 一个特色就是你可以自己动手添加需要的语言特性!于是我就尝试着自己写一个宏来实现这个功能。 用 Lisp recursive lambda 做关键词搜索,找到老外一篇 08 年的文章,里面提到一种用两个 Lambda
前几天 @刘鑫-MarchLiu 在微博上发布了一个给给文本加引号的插件:http://weibo.com/1729408273/eDcC8e8w6aD。不过用起来有点小问题: 两头都只能插入一个字符,因此不能用于添加 XML 标签; 光标控制上有个 bug,每次执行后光标会往左移动一个字符。 我自己刚刚也实现了一下,不过我的实现灵活性比较差(前后的符号必须由用户手工输入,不能以参数形式传
据大家所知,有没有这样一种脚本语言:专门用于编辑文本信息? 我现在是比较习惯 Emacs 的快捷键,而且最近使用的键盘按方向键不太方便,所以很希望所使用的软件都能用 Emacs 的快捷键来操作。 一开始,我使用 XKeymacs (日本人开发的一款小工具),它能把 Windows 下所有应用程序的快捷键都转换成 Emacs 的。不过这个软件不太稳定,和 mitty 等软件配合得也不好;可配
几天前分享了一段 JavaScript 版的《整数金额大写转换 》,不过只能处理整数的。 刚刚做了一个改进,可以处理两位小数(角和分)和负数(欠款)。 function digit_uppercase(n) { var fraction = ['角', '分']; var digit = [ '零', '壹', '贰', '叁', '肆',
全局 XML 对象 E4X-capable JavaScript 引擎在全局对象上放了一个新的属性。XML 对象有许多属性允许你定制解析和序列化 E4X。XML 元素从他们创建开始就记住 XML 对象的设置。 扩展 XML.prototype XML.prototype 和 XMLList.prototype(XMLList.prototype 实际上就是 XML.prototype)不
E4X 与 命令空间 通常情况下,XML 文档包含来自多种命令空间的元素。你可以通过声明为你的 E4X 对象设置默认的命名空间。 default xml namespace = "http://www.w3.org/1999/xhtml"; 通过重复的声明,你可以随时更改相同范围内 E4X 的命名空间。 default xml namespace = "http://www.w3.
访问后代节点 很多时候,你感兴趣的节点往往不是 XML 根节点的子节点,而是嵌套在多层下的后代节点。你可以使用 .. 操作符访问任意深度的节点,或者使用 descendants 性质。例如: var element = <pets> <dogs> <fido color="red"/>
访问 XML 子节点 JavaScript 对象通常使用 . 或 [] 来设置性质。 var a = {}; a.foo = 1; a["bar"] = 2; 在 E4X 中,点(.)和中括号([])操作符用来访问 E4X 元素的子节点。 var element1 = <foo> <bar/>
基本语法 如果启用了 E4X,基本的 XML 元素就是有效的语法。例如: var element = <foo/> 在开启了 E4X 的浏览器里完全有效。 变量的声明也不局限于单个元素,并且和 JavaScript 一样可以扩多行。 var element2 = <foo> <bar/>
原文地址:https://developer.mozilla.org/en/E4X_Tutorial 概述 本教程指导你掌握 E4X(EcmaScript for XML)的基本语法。使用 E4X,程序员可用更熟悉的 JavaScript 编程语法来操作 XML 文档。 主题 入门 访问 XML 子节点 后代和筛选器 命名空间 全局
前几天用网银给朋友转账,在金额一栏中输入阿拉伯数字,右边会立即显示出相应的汉语数字大写。感觉挺有意思,就到网上搜索一下现成代码(没怎么仔细找),找到一段 Java 的和一段 C# 的。不过感觉它们的实现都很繁琐,或者说不够优雅。最重要的是功能上有缺陷,比如 100 被翻译成“壹佰零拾零”,在汉语中我们习惯说“壹佰元整”。所以,就考虑自己动手写一个小程序。 我现在也有点思维定势了:一提起处理文
关于键盘 昨天订了一台 Happy Hacking Keyboard 白版英文配列,今天早上收到。梦寐以求的键盘终于到手了,花了我不少米。不过我也是带键盘上班一族了,哈哈。 回来后想得瑟一下,让同学们猜它多少钱,第一个同学试探着问:“70 元?”第二个同学更狠,说:“50 元!超过 50 元你绝对被宰了!”好吧,那我真是彻头彻尾地被“宰”得体无完肤了,这键盘花了我 2K 块,它长得
cd 增强版 zsh 的 cd 有个很吸引我的特性:比如你在 ~/data/foo/horrible/dir/names 目录下,需要切换到 ~/data/bar/horrible/dir/names,只需执行: % pwd ~/data/foo/horrible/dir/names % cd foo bar % pwd ~/data/bar/horrible/dir/name
我在《Linux下用nc实现 DuplexPipe 》中提到,Win 版的 netcat 无法实现 DuplexPipe 的功能。 其实 Cygwin 版的 netcat 也是如此。Cygwin 用的是 netcat 原生的 1.10 版本(项目地址是: http://nc110.sourceforge.net/),该版本没提供 -c 选项。因为我最近在做的项目需要一个这样的工具来
AutoHotKey 真是一个好玩的工具!短短几行代码就是先了“窗口置顶”、“窗口透明”等功能,之前我还特意为此装了好几个小工具,现在都可以卸掉了。闲来无事,就把 Quick Start 翻译了一下,我没有逐字逐句地翻译,有时候我嫌原文罗嗦就用自己的话概括地描述了一下。 原文地址:http://www.autohotkey.com/docs/Tutorial.htm 教程目录 创建脚
祝大家: 新 年 快 乐 兔 年 好 运
关于 Pig Pig 是一款文件格式化工具,它可以将“金山词霸”生词本软件导出的格式混乱的文件整理成网页格式,方便大家打印。更多内容可以参考以前的文章《和 Pig 一起学英语》 。 Pig 距离上一次更新有快两年的时间了,期间发生了很多事。其中一个原因是我后来对自己电脑上的软件进行了正版化清理:诸如 Visual Basic 6.0 精简版、VMWare 等盗版软件都被我卸载了,而
背景 最近的工作里,涉及到不少目录之间的批量操作(产品的部署、文件夹之间的同步等等)。工作的环境是 Win XP,没有自带诸如 Linux 下 find 这样方便的工具。当然,我在我自己的环境里安装了 Cygwin,但我不能要求其他同事仅仅为了使用这个命令而也装一个 Cygwin。而且,find 是用通配符去匹配文件名,我一直幻想着用正则表达式来匹配文件名/目录,所以我趁周末
谁说博客也要像论文一样结构清晰、有条理?! 软件卸载 昨天整理自己的本本,卸载了 VMware 7.0 + 深度XP,MS Office 2007 以及 Visual Basic 6.0。我承认这些都是盗版软件,不过剩下的应用程序都是自由软件(freeware)或免费软件(freeware),这下我的计算机“干净”了。闲来无事,我就细数了一下当初装这些软件的原因: VMware + X
上班以后就一直没搭理毕设的事情,结果可想而知,这两天连日的熬夜,上班都在打哈欠,呵呵。 不过,现在也是越来越能体会那句话:“编码其实很快,主要是设计慢。”这次毕设,设计比编码还不仅仅是慢一点!我从去年年底开始思考,直到上周才算正式敲定,编码倒是只花了两天(途中还抽空陪学弟学妹们玩了一下ACM选拔)就基本上搞定,这几天主要是完善完善,让系统更稳定。 简单介绍一下我的毕设:这次的目标是设计并开
昨天和前天我参加了小学、初中、高中同学会。自毕业以来,小学和初中同学还是第一次相聚,大家都很开心。我也是头一回喝这么多酒,晚上沿着S型曲线回家。 今早起来为自己泡了一杯蜂蜜解酒,并习惯性地打开Google Reader看看订阅的新闻。博客更新的也不少,同学们都发表日志畅谈新年感言。在这弱冠之年不免多愁善感,一些同学抱怨现在春节没有节日气氛、感叹对过年不再有小时候的期盼,还有同学说过年要被逼吃
明确需求 扩展的功能在前文《眼不见为净——过滤人人网分享的chrome扩展》中已做了介绍:把人人网中一些带有“不分享就如何如何”等诅咒信息的标题给屏蔽掉,眼不见为净!描述得更详细些就是: 过滤功能只在人人网域名(http://*.renren.com/*)下启用; 只有访问人人网时,扩展的图标才显示; 好友的分享信息会出现在很多地方(如好友主页、新鲜事、分享主页等),这些都要过滤;
nc 是一把网络的瑞士军刀,我以前在介绍 DuplexPipe 时也提到过,如果你没接触过它,可以先参看一下《DuplexPipe二三事(二)》。再来简单地介绍一下 DuplexPipe,顾名思义,它是一个“双向管道”。在 shell 中,我们通过“|”使用匿名管道,让前一条命令的输出作为后一条命令的输入;双向管道即在此基础上在加上“后一条命令的输入作为前一条命令的输入”。这是最初开发它的原因
原文发表于CSDN博客:http://blog.csdn.net/redraiment/archive/2010/01/10/5171510.aspx 由蒋涛老大建议转到大本营来和大家分享^_^,多谢大家支持! 不久前,我应邀去和学弟学妹们(非本专业大一)聊天,他们让我简单地介绍一下什么是编程,以及C语言中指针和数组的关系。于是我做了一个PPT,并在每班邀请一男一女两位同学来现场表
今天闲逛Linux宝库,看到论坛里有人在讨论如何用 shell 脚本来处理 C 语言注释,发帖时间是 08-10-23(以前怎么都没注意到,失败...),但问题好像并没被解决。正好这两天玩 sed & awk,来小试一下身手。 C语句注释 本文讨论的是 C99 标准,它支持单行注释(“// ...”)和块注释(“/*...*/”),并且当单行注释以“/”结尾时也可以跨多行。测试代码
看完sed部分之后 花了几个晚上看完后面 awk 部分。awk 不同于 sed,它是一门模式匹配的程序设计语言。学习 sed 和 awk 时,正则表达式可能是一大障碍。但事有凑巧,去年我暑假我一个人出去散心时,顺带看完了《精通正则表达式(第三版)》,另外我还掌握一些 Bash、Perl 等脚步编程的经验,因此很快就能适应 awk 的风格。 写到此处,我突然联系到《倚天屠龙记》中的张无忌,他