自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

追寻真理之美

——此人一贯挖坑不填

  • 博客(174)
  • 收藏
  • 关注

原创 《微型LISP解释器的构造与实现》中Parsec 算子的类型错误

感谢 Aaron ,在 《微型 LISP 解释器的构造与实现》一书中的一些错误,我对这一类错误发生的原因做一个简单的介绍。

2022-11-27 20:45:59 808 3

原创 博客质量分计算(三)——发布 version 4

新算法的重点是使归一化后的分数曲线不那么陡峭。我们在归一化算法中,引入了加权求和的指标数目,使其先约束在一个有限范围内,使得未来加入的新因子,也可以自动的产生平滑的分布。

2022-11-16 19:20:53 76

原创 《通向实在之路》

近一段时间,我的各个开源项目都没有什么提交。在这段时间,我读完了《通向实在之路——宇宙法则的完全指南》。

2022-11-13 21:18:46 77

原创 (Apache) Commons Lang3 Bridge For Scala 0.0.1 发布

就在今天,我发布了 Apache Commons Lang Bridge 的第一个版本

2022-09-14 23:29:41 343

原创 Apache Commons Bridge For Scala

通过一些 Scala 的高级技巧,我们得到了一个非常完美的 Apache Commons Lang3 StringUilts 封装,它足够健壮,完全基于 Options,同时又将对 null 值的支持完整的暴露给原始的 String 类型。在获得与原版 Java 库一致的功能的前提下,提供更符合 Scala 风格的实现。...

2022-08-29 00:56:54 368

原创 《微型Lisp解释器的构造与解释》的写作风格

今天看到有读者抱怨我那本书是把源代码打印出来卖。这个感受我能理解,但是其实这个写作风格是反复尝试的结果,而不是偷懒。书里附带的源码,有很多是用 Scala 来注解 Java 。例如昨天我的好友问我Java版 Env 类型的 get 方法为何用了一个 try catch,这个其实在下一页的 Scala 版本中就是非常干净的。Java 的实现,只是为了尽可能接近 Scala 的 Try[T] ,这里更接近是一个getOrElse而不是错误处理。这种不同语言的对比,在我开发和写作的过程中,带来了很多启

2022-06-18 10:38:48 245 1

原创 关于《微型 Lisp 解释器的构造与实现》

《微型 Lisp 解释器的构造与实现》已经正式出版销售。这本书,是我这几年业余时间学习和探索的一个总结,书中介绍了 Parsec 组合子在 Java 和 Scala 项目中的用法和实现原理。

2022-06-14 17:02:50 1252 6

原创 PostgreSQL 问对

关于 PostgreSQL 的一些讨论

2022-06-03 12:32:23 135 1

原创 MySQL 问对

关于MySQL的一些讨论

2022-06-03 12:26:18 3793 2

原创 Double Not Exists——SQL语言的一个经典问题

关系型数据库中,有一个经常出现的模式,就是集合A和集合B,通过一个关系集R,组成多对多的关系。举个例子,我们有学生表create table student( id serial primary key, name text)课程表create table course( id serial primary key, name text);可以建立一个选课表create table take_course ( id serial p

2022-05-27 00:38:43 924 3

原创 SBT 项目的跨版本编译

近期的工作中,需要在 Spark 任务中做一些字符串处理。但比较尴尬的是,过去的 Jaskell Core,我一直是以 2.13 为目标开发的,而现在 Spark的各种发布版,普遍使用的是 2.11 和 2.12 。再专门为 2.11 和 2.12 编写独立的项目,就非常不经济了,这个时候,要把 Jaskell 变成跨版本项目。SBT 通过 cross version 设置支持跨版本。我们首先设定 supportScalaVersions :lazy val scala213 = "2.13.

2022-05-15 19:01:05 493

原创 JSON Schema 支持复合规则一例

我经历过 XML+SOAP 的时代,曾经写过很多 xml document + xslt 的代码,也为自己的 emacs 写过一些 xml 的扩展。对于大部分模型简单,变化快速的业务来说,json 的出现是一种进步,json 更简单,更适合阅读,可以很自然的适配常用编程语言的内置机制。相对于各种json 库的性能优化之争,json 的结构校验就比较少被关注了。但是对于应用业务,其实校验是非常重要的。我过去经历过的几个项目,基于不同的技术栈和演进路线,采用的 json schema 校验工具也各不相.

2022-04-05 12:01:27 646

原创 博客质量分计算(二)

前一篇文章(博客质量分计算(一)_ccat的博客-CSDN博客),我们重点讨论了标题质量分,标题质量分的计算相对来说更简单,也更容易深入,但是标题的质量显然不能决定一篇文章的质量,对于文章内容的质量平局,我们也做了一些尝试。博文质量评估博文内容评估仍然是一个比较难定量的问题,一篇博文,可能可以命中很多“高阶”的词汇,但仍然是一篇很差的文章,甚至可能是不符合自然语言的词语堆砌,仅仅是符合词法语法的机器判定。而一篇好的入门文章,可能仅仅包含某个领域的一些基本概念。但是我们仍然可以通过一些手段,评估一..

2022-04-02 01:02:10 2792 17

原创 JDK 选择

我接触Java很早,读大学的时候,那时候互联网还很不发达,整个产业甚至整个世界都和现在大不一样。大概是在1999年,我的朋友给我寄来了一套 visual age 个人版。这个个人版 IDE限制很多,例如不能创建超过98个类。我当时是个 Delphi 爱好者,这个开发工具给我带来了很多非常新鲜的体验,例如它的交互设计和事件绑定,和我习惯的 Delphi、VB完全不一样,和当年基于 MFC 的VC也非常不一样。但是毕业之后,我先是成为了一个 Delphi 程序员,后来在 2003年开始转向 c sharp,p

2022-02-20 23:32:31 446 6

原创 工作随笔一则

对于一个需要较长时间持续工作的计算程序,可再入的能力应该排在非常优先的地位。可再入,也就是如果中断程序,可以从上一次的位置开始继续工作。如果能做到这一点,说明你的程序有持久化保存状态的能力。 可以打断,处理必要的问题后继续 梳理出了一个可以描述工作进度的信息模型 在中断再入的基础上,往往可以很容易升级为安全健壮的并行机制 可再入往往代表这个工作可以分解成多个同构的子任务,那么对子任务程序单元的优化,可以获得几何级数的回报 有可能从中抽象出对一类工作都有效的程序机制,从而整体的提升工作效率.

2022-01-05 21:13:51 713

原创 PyParsec 的 Result 类型

如何获知函数执行是否成功,以及它的返回值?不同的语言和技术体系,给出的策略是不同的。Java 的方案比较简单,抛异常表示错误,执行成功的话 return。很多 C 技术栈,比如 windows api,采用的是以整数返回值表示是否发生错误,和错误代码的方式,函数执行结果则放在一个函数参数中,这个参数通常定义为某一个struct的二阶指针。Go 语言推荐的方式是让函数返回两个参数,即总是 `err, result` 形式,调用函数的代码通过判断 err 是否为 nil 来判断是否发生了错误。在函数式编

2021-11-03 15:49:04 106

原创 PyParsec 升级至 0.7.3

PyParsec 是 Python 3 的 parsec 移植。这个项目原本是一个非常微型的练手作品,是有一次 archmmit 会场里,我和老友赖勇浩聊天的时候,随手写出来的。因为 Python 是动态类型语言,很多 Haskell 里基于静态类型构建的类型约束也就失去了作用——当然,另一方面说,动态语言项目,很多静态语言的技术要点也不用考虑。后面有很长一段时间,我都没太去想这个项目,对于我来说,验证了 python 可以作类似的东西,也就达成了目的。但是近期我加入到 csdn 的 ai 团队,有一些开

2021-10-31 21:19:10 234 1

原创 Jaskell 的一次大升级

最近的工作经常要写 parser,也就有了改进的目标,这几天对 Jaskell Core 做了一个大版本升级,主要是将内置组合子作为扩展,一次打包封装为 typeclasses 。例如,以前这样定义的 parser: "Brackets" should "test brackets pairs" in { val state = State("[hello]"); val parser = Between( ch('['), ch(']'),

2021-10-16 13:54:57 190

原创 不等连接的小应用

不等连接的小应用有时候我面试程序员,会问一个问题:一个关系型数据库中的表,它的主键是自增id,我删掉了一行,这一行不在开头和末尾。其它信息未知的情况下,能否用一条查询找到被删掉的id?这里其实有一个很简单的解法:select l.id+1 from data as l left join data as r on l.id+1 = r.id where r.id is null;它的思路是利用自增数列的特性,用简单的数值计算构造出两个错位的数列,然后找出缺失的位置。当然,这里面还包含了末尾

2021-09-13 15:16:59 157 2

原创 PostgreSQL JSONB的匹配和交集

PostgreSQL 自从支持 JSONB 到现在,已经有十余年,这十多年来,社区为 JSONB 提供了很多强大的功能。就我个人而言,其实最常用的还是匹配操作@>。把JSON数据看作一个抽象语法树(AST)的话,这个操作符判断右参数是不是左参数的子图。这里本来应该有个图示, 但是周末的时候临时有个数据集在处理,所以没有时间去找合适的工具了。简单举几个例子,下面这个例子得到true,这应该很好理解:select '{"a": 1, "b": 2, "c": 3}'::jsonb @...

2021-09-11 23:11:14 1037 1

原创 博客反抄袭工作的一些思考和尝试

近日开始着手反抄袭工作,做了一些思考和尝试。现状与动机目前看,比较明显,容易判定的抄袭行为,主要包括: 直接完整复制,虽然容易被识破,但是因为成本低,甚至有些抄袭者使用 爬虫进行大量搬运。 洗稿,主要是打乱句子和段落顺序,使其看起来是另一篇正常的文章,但 是其实是比较简单的改头换面,句子仍然都是抄袭而来。 洗稿,但是更为深入,对句子也做了大量修改,这种洗稿较难识别,甚至 与一些正常的讨论、笔记等文章有一定的模糊地带,但是这种方式工作量 大,多⻅于社会新闻、时评热稿等高价

2021-09-03 11:34:33 851 5

原创 剧本工坊(二)——项目准备和启动

项目初始化数据库数据库使用 PostgreSQL。其实我认真的考虑了要不要用 SQLite或者 H2,只要手工管理配置,SQLite 可以提供一些非常好的功能,比如不需要预先安装一个数据库服务器,甚至可以每一本剧本一个数据库文件。这更符合桌面软件的使用习惯。但是简单的搜索了一下相关资源,Slick支持最完善的,仍然是PostgreSQL。当然,我们也有很多数据库访问工具可以用于Play framework,但是作为一个教学项目,我们还是从最常规的开始。这里不需要过于纠结安装方式,尽量采用最简

2021-08-29 21:37:31 237

原创 剧本工坊(一)——每一段旅程都有开始

近几年的博客(主要是《现代化的Java》系列)主要放在了知乎专栏。前几天,我加入了 CSDN 的 NLP 团队,也准备在 CSDN 博客发布一些文章。这些年来,我习惯在下班后用一些跟工作无关的技术做学习和研究,有些技术在后来的工作中也有了实用机会,但是通常并不以“有用”为目的。这一次,我会演示如何基于 Scala/Java 技术栈编写一个用于剧本撰写的Web网站。剧本剧本是一种很特殊的文体,它有相对固定的结构。剧本形式相对简单,对于基本形式的剧本来说,可以不考虑多媒体支持,只需要带有简单结

2021-08-20 00:21:44 331 1

原创 博客质量分计算(一)

新的启程上周我正式加入了 CSDN 的 NLP 团队。感谢组织给了这样一个机会,可以和志同道合的同事一起做喜欢的事情。在数理统计专业毕业21年后 ,开始进入 AI 方向,大概也可以算是人生的一种螺旋上升吧。博客标题质量评估我的第一个开发任务,是内容质量分。这里的质量,并不是严格遵循主观上的内容质量,而仅仅是一个排序依据,可以说是推荐系统的一部分,我们旨在于基于统计算法而非人工干涉,尽可能在统计上将更优质的内容推荐给用户。这个结果通常并不能保证对每个读者都是最好的,只能尽可能的向这个目标去接

2021-08-19 15:12:35 1513 16

翻译 旧译重贴:如何阅读数学

This article is part of the book Rediscovering Mathematics, which is due out in early 2011. - Rediscovering Mathematics: Patriot LedgerHow to Read Mathematics 如何阅读数学Mathematics is “a language that can

2013-01-06 16:57:01 9520 1

原创 正确的答案都是错误的

正确的答案都是错误的从业逾12年,我找过工作,写过简历,经历过很多企业的面试;也招聘过, 面试过,收过简历,做过面试官。有成功的经验,也有失败的经历。 然而有学生和朋友问题我写简历和面试的技巧时,我只能说,没有技巧。我们在网上或书店,都会见到很多“攻略”、“秘籍”,教你记忆各种急智问题的回答方式。 从“你如何看待加班”这样比较正常问题,到“井盖为什么是圆的”这种比较文艺的问题, 以及“面试官和你妈

2012-09-29 16:57:20 10464 1

原创 手工构建 Mac OS APP (一)

手工构建 Mac OS APP (一)Table of Contents手工建立 Mac OS APP?main 函数中的故事最简结构app 程序的简单结构做点事情略进一步带主菜单的 app状态栏菜单手工调试再进一步?Aout Me手工建立 Mac OS APP?Mac OS App 开发并不复杂,XCode 提供了很好的开发环境。但是离开XCode呢?对于个人开发者,其实 XCode 是一个非常

2012-09-27 20:27:23 22643 13

原创 《编程ING》——打开神秘魔法世界的大门

从 2000 年毕业,我做这行已经超过十二年了。最初接触计算机程序,还是 DOS 下的 QBASIC ,那已经离现在有接近二十年了。最初,我只是会照猫画虎,按照老师的程序抄个素数数列,或者打印个三角形什么的。初步理解程序的结构和意义,要等到读大学以后了。那个时候在老师的鼓励下,自己买书学习 Delphi ,才开始慢慢了解一些程序语言的知识。能够自己设计和开发出有点用途的程序,则要等到工作以后,在实

2012-08-25 23:18:15 7687 2

原创 jquery 团队的 javascript 测试工具 qunit

今天写了点 Javascript 的小东西,想做个测试,google了一下,看到 jquery 团队使用的测试工具 qunit (http://docs.jquery.com/QUnit) 。有一篇中文文章 http://www.cnblogs.com/nuaalfm/archive/2010/02/26/1674235.html 介绍了这个工具,我尝试了一下,文中的示例已经略有陈旧,跟最新的 q

2012-06-20 20:13:41 6196

原创 用python发送put请求

做了一个服务,上传数据时接受put请求,查了一下,客户端代码用Python来写的话非常简单,跟Post基本一致。这里是一个用PUT上传文件数据的例子:import urllib2opener = urllib2.build_opener(urllib2.HTTPHandler)with open("/storage/pic/logo.png") as f: data=f

2012-04-22 11:30:07 23097

原创 beanstalkd 监听阻塞问题

如果使用 beanstalkd 的 tubes,需要注意的是(官方文档有提及),use影响put时使用的信道,而watch和ingore影响监听时的信道。客户端必须监听不少于一个的信道。默认情况下connection已经监听了default信道,至少监听一个其它tubes后,才可以ignore这个默认的tubes。如果没有显式的 ignore("default"),就容易在 reserve 的

2012-04-16 02:54:15 5983

原创 lvm 空间缩减操作

前几天学会了给lvm动态扩容,有次遇到缩容操作,也照方抓药,却惨遭失败。还好是开发机,默默重装。问题在哪里呢?搜索了一些资料,在国外的一些社区提到:扩容时,先 lvextend 再 resize2fs ,缩减时先 resize2fs 再 lvreduce。具体操作了一下,按这里的步骤,可以让lvm2+ext2正确缩减:http://www.microhowto.info/howto/r

2012-04-15 22:42:47 7847 3

原创 在debian环境中设置celery自动启动

项目中用到celery,但是将它官网中提供的init.d和 default脚本部署到相关目录以后,一直不能自动启动。在stackoverflow上查到一个简单的方法,即执行update-rc.d celeryd defaultsdebian就会自已管理它的启动(需要先部署 celer 项目 contrib 目录下的自动化脚本到相关目录下)。原始出处:

2012-04-14 15:37:08 5646

原创 MyISAM 升级到 InnoDB

迁移服务器后,发现还有一批表是 MyISAM 引擎,写了一个脚本,把它们全升级到了 InnoDB。在线地址: https://github.com/xiachufang/BlackCookbook/blob/master/python/sa/My2InnoDB.py源码:#!/usr/bin/env python#coding:utf8#将mysql数据库中所有的 myisam 表

2012-04-10 23:24:39 5247

原创 debian xen-tools 虚拟机的时区管理

debian testing 的 xen-tools 创建的虚拟机,默认是utc时间,但是时区选择有问题。对于中国的东八区用户,最简单的处理方法是:cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime这个操作最好在虚拟机创建后尽早完成。如果已经部署了一些应用,可能产生的数据已经有错误,类似mysql等服务,需要重启才能生效。

2012-03-28 16:34:45 5826 3

原创 寄宿于LVM存储的xen虚拟机扩容

新主机中划分成一个xen虚拟机集群,全部部署在 lvm 存储上。昨天拖数据的时候发现文件服务器的空间规划比较紧张。于是准备给它扩容。网上查了很多中文文档,不知道是因为太旧还是什么原因,没有一个靠谱的,操作复杂而且不安全。最终在一篇英文文章中找到了一个办法,极其简单,并且验证确实可行。我用来管理虚拟机的是debian的xen-tools,它自动的给基于lvm卷的xen虚拟机分配两个卷,一

2012-03-27 19:48:48 5699

原创 选择 PosgreSQL 的十个理由,和几个 MySQL 胜出的特性

一、 PostgreSQL 的稳定性极强,的确,MySQL 有多种引擎,也确实 Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,但是,很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的……PG数据库15分钟被闪断四次的前DBA毫无压力的含笑而过。二、任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的

2012-03-01 12:15:52 20192 14

原创 《Ruby 元编程》——十年来读到的最好的编程技术书籍

远超预期的惊喜在出行前的一天拿到这本书,翻了几页,感觉不错,心里很有些纠结。要出远门的原因,衣物和工作设备之外的东西要尽量精简。 书籍方面反复挑拣,正在读和很想读的几本书,也都只好先放下,最后带上了这本新书和一本工作用书。在飞机上拿起这本书后,一边读,一边用笔勾划记录,三小时的班程,一气读完了半本。 然后在大巴、城铁和地铁上,一直到放下行李,阅读到半夜,翻到附录C结束,才满足的放下。

2012-02-18 11:02:57 29520 12

原创 JSON-framework 与 JSONKit的初步评估

JSON-Framework 和 JSONKit 都是Objective C 平台上比较常用的 JSON 数据访问工具。我经手过的项目中,这两个组件都用过。在JSONKit的主页上可以看到,JSONKit 的性能远优于JSON-Framework(即SBJSON),而使用上JSONKit也非常简单,这也得到了包括我在内的大多数同行的欢迎。但是在使用功能上,到底这两个工具有什么差异呢?我昨天索性

2012-01-17 20:24:33 13343

原创 我的教师生涯

在我十几年的职业生涯中,曾经在一家北大青鸟培训中心做过半年多的教师。 虽然对同行称我"刘老师",我有过一个开玩笑的解释, 但是其实这段经历才是这个称呼的由来。作为程序员,不是总有机会上讲台,所以一直想给自已做个总结。但是我实在太懒。居然四年以后才动手。有亲友曾经说我适合当老师,因为讲起话来滔滔不绝,又精通各路掌故。自已当初去求职,也有过类似的动机, 觉得终于可以施展身手。确实,讲到某段内容

2012-01-07 02:43:59 13111 36

空空如也

空空如也

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

TA关注的人

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