自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

追寻真理之美

——此人一贯挖坑不填

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

原创 Java 程序的命令行解释器

我这些年来做过太多类似的工作,随着程序开发的进展,命令行参数的规则越来越复杂,于是简单的几个赋值操作迅速变成了一大堆逻辑分支。需要深度的控制help行为,这个解释器还暴露了几个与帮助文档有关的中间方法,包括帮助格式的模板字符串。这个工具已经初步满足了我的需要,在未来,也。在这个过程中,我需要通过命令行参数给这个 java 程序传递一些参数。但是总的来说,这个设计不需要再有大的改动,如果真的遇到在结构上不能满足我的需求,也许我会。许我会加入一些便利的工具方法,类似。

2023-12-18 15:40:11 821

原创 个人版 AI 辅助系统的尝试

"The Old Dwarf Forged A New Toy In His Mountain Workshop"

2023-12-17 01:26:22 986

原创 为 Java 编写的 Try 和 Tuple 类型

Java 设计了一套久经考验的异常处理机制,为开发高质量的程序提供了可靠保障。但是随着现在软件日趋复杂,特别是异步编程的发展,语法级的异常处理机制已经不足使用。我模仿 Scala 的 Try 类型,为 Java 编写了一组 Try 和 Tuple 方法,用于简化复杂应用逻辑中的异常管理和数据传递。根据最新的 Java 21 和目前仍在广泛使用的 Java 8,分别在 jaskell-rocks 和 jaskell-java8 工具库中实现。

2023-12-03 14:28:57 1005

原创 CSDN 个性化推荐系统的设计和演进

CSDN 的个性化推荐系统,是从既有的推荐项目中剥离出来的一个子项目,这个项目随后移交到了我们AI组。在近一年的时间内,我们对这个项目进行了多次改进和重构。

2023-06-24 18:00:31 2161 3

原创 广州2023 Qcon回顾

每一期 QCon ,总有一些吸引人的内容,比如这一届的人工智能专场,就异常的火爆。则对 JS 生态的编程语言的历史脉络做了总结和梳理,作为第一个以个人身份进入 Javascript 委员会的中国大陆程序员,贺老师的分享有非常高的价值。近十年来,我以出品人或讲师的身份参加过多次 QCon 的编程语言专栏,这已经成为我职业生涯的重要“彩蛋”。》是我非常喜欢的环节,这里面有很多实际的工程经验分享,我也有多次不同语言互嵌入的项目经历,这个 Topic 可以说深得我心。这次的专栏,前端技术仍然是重要而活跃的元素,

2023-06-10 18:01:23 1127

原创 随机、优先与权重(续)

Python 版本的 Croupier

2023-04-01 14:26:40 637 2

原创 随机、优先与权重——非平均概率的选择工具

除了汇编语言这样的另类,常规的编程语言几乎都提供了按平均概率生成整数或者浮点数的标准库。这也是应用开发中非常基本的功能。不过,有时候我们需要一些关于随机性的更复杂的功能。

2023-03-31 00:54:20 2973 16

原创 Java 的 Jsonpath 库

介绍一个 Java 项目用的 Jsonpath 库。

2023-03-19 17:55:17 2065

原创 2022 年回顾

赶在春节来临前,对2022年做一个回顾。

2023-01-20 22:36:12 1212

原创 Parsec 的 Map 和 FlatMap

在 FP 的视角,map 和 flatMap 是比 Parsec 组合子更基础的概念。它们是任何 Monad 都应该支持的东西。对于 Haskell 原版,我们实际上是针对 parsec 算子的计算结果 `Either[Left, Right]` 做 map 和 flatMap,所以 Parsec 本身并不需要额外考虑这种问题。

2022-12-08 18:06:41 527

原创 《数据可视化基础》读后感

这本书分门别类的介绍了各种主要的图表类型和对应的适用场景,给出了各种好和不好的设计示范

2022-12-05 22:02:08 326

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

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

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

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

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

2022-11-16 19:20:53 5219 36

原创 《通向实在之路》

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

2022-11-13 21:18:46 543

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

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

2022-09-14 23:29:41 467

原创 Apache Commons Bridge For Scala

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

2022-08-29 00:56:54 473

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

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

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

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

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

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

原创 PostgreSQL 问对

关于 PostgreSQL 的一些讨论

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

原创 MySQL 问对

关于MySQL的一些讨论

2022-06-03 12:26:18 13233 7

原创 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 1088 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 792

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

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

2022-04-05 12:01:27 847

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

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

2022-04-02 01:02:10 5562 22

原创 JDK 选择

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

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

原创 工作随笔一则

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

2022-01-05 21:13:51 786

原创 PyParsec 的 Result 类型

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

2021-11-03 15:49:04 167

原创 PyParsec 升级至 0.7.3

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

2021-10-31 21:19:10 349 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 247

原创 不等连接的小应用

不等连接的小应用有时候我面试程序员,会问一个问题:一个关系型数据库中的表,它的主键是自增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 233 2

原创 PostgreSQL JSONB的匹配和交集

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

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

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

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

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

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

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

2021-08-29 21:37:31 340

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

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

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

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

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

2021-08-19 15:12:35 4158 25

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

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 10165 1

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

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

2012-09-29 16:57:20 10815 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 23002 13

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

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

2012-08-25 23:18:15 7762 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 6244

空空如也

空空如也

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

TA关注的人

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