specter的简单使用
为什么要使用 specter
为了说明为什么要推荐大家使用 specter,先举个实际用到的例子🌰
(def db {:custom {:choices {:current-id "1002"
:datas [{:category_id "1002"
:sample [{:id "4"
:name "不需要试穿"
:default_flag "1"}
{:id "5"
:name "半成品试穿"
:default_flag "0"}]}]}}})
进入阅读→
json和edn的在线转化工具
(require '[reagent.core :as r])
(require '[cljs.reader :as reader])
json格式化
将不规范的json(key不用引号引起来)的形式转化为规范化形式
进入阅读→理解Clojure的LazySeq
懒
"懒"是clojure的重要特性, 简洁表达意图的同时可以避免付出性能代价.
而且我们可以借助它实现无限序列, 做到按需求值.
进入阅读→函数编程的一个小例子
问题
下面的map, 只保留每个key的数组中, 对应的:required下的数组为true的元素:
(def x {:title ["名称" "编码" "排序" "最小值" "最大值" "图片"]
:show-in-list [true true true true false false]
:key [:part_name :part_code :show_order :min_size :max_size :part_image]
:input-type [:txt :txt :num :num :num :img]
:value [nil nil nil nil nil nil]
:required [true true false false false false]})
进入阅读→
emacs的clj/cljs环境(持续更新)
模式
为了让emacs更好用, 需要进行些扩展, 包括emacs的package和外部命令
我们在Purcell 配置的基础上进行扩展:
需要增加的扩展, 都可以用M-x package-install在线安装
- undo-tree
- clj-refactor
- page-break-lines
- cnfonts
excel导出和下载demo
本篇demo常用的excel导出功能的服务端生成文件,以及前端下载
后端给response写入stream。
前端用<a>标签模拟点击下载,是clojurescript和javascript交互的一个实例场景。
后端生成文件
使用的第三方库:dk.ative/docjure,创建一个excel还是很简单的。 贴个db查询后对数据处理,并利用该库生成一个excel的代码。(使用模板导出的情况后面再补)。
进入阅读→websocket前后端通信
服务端
服务端配置websocket相对来说挺简单,因为我们项目当初new的时候没有加websocket,现在是参考luminusweb websocket往里增加关键代码
- 创建ws-route 创建如下route,并跟普通http api route一样加入handler序列中。
emacs上使用px转换vw插件
因为emacs缺少一个插件已经影响了前端同学对emacs的兴趣了,这有点尴尬,其实emacs很强大的。 对标vs code的px2vw插件,实现了一个简易的相似功能的emacs插件。 需求被大神知道后重写了一个可以支持对选中区域转换的,使用方式如下。
配置
在~/emcas.d/lisp/自件一个名为px2vw.el文件,将以下代码复制进去,保存。
Macro第一部分-入门
Macro介绍
Lisp语言的一个特性是code is data,Macro是这一特性的终极体现,它允许程序员简洁方便的扩展自己的语言,是一种meta-programming的技巧。

程序员的最大噩梦
这是很早之前在Quora(美国的知乎)上看到的文章,被我收藏到Pocket,应该是15年的一篇文章,原文已经打不开了。
翻译了一下,算是对1024迟到的庆祝。
我受雇于一个心理学家来修复一个有‘奇怪输出’的程序,这个程序是心理学家以前的一个研究生写的。该程序读入一个数据文件,输出50个问题,然后根据这50个问题的答案给出一个评分。程序运行在大学机房的一台3B2工作站上。程序跑起来后,在切换问题的时候确实有些奇怪的文字闪来闪去,让人心烦。貌似个简单bug,我们决定先花点时间定位问题(按小时付费),再确定一个最终的费用。
进入阅读→