Cheng Guangnan

目录

上海地铁X光检查

地铁入口有大量非密闭区域,是无法防止危险物品故意进入的。其次,安检执行也无法达到充分检查到每一个旅客,漏网可能性很大。

这个制度,效率很低,保障性也不高。

把 footer 放下来

很多网站页面太短,footer 都浮在半空中。其实可以很简单的把他们都推倒到窗口底部。

HTML

<div id="push"></div>
  
<footer>
  ...
</footer>

CoffeScript

$(document).ready ->
  push = (footer = 'footer') ->
    footer = $(footer).show()
    orginal_height = $('#push').height()
    adjust = $(window).height() - footer.position().top - footer.outerHeight(true)
    $('#push').height(orginal_height + adjust)

  $(window).on "ready load resize", -> push()

Git

我不用 Github, 而是自己 host。

其实很简单的。用法如下

ssh git@hostname 'git init --bare project_name.git'

然后在本地

git remote add origin git@hostname:project_name.git

我一般用 develop branch。于是:

git co -b develop
git push origin develop -u

就可以了。

现代家庭标配

每个家庭都应该有一台洗碗机。很遗憾中国家庭洗碗机的拥有量不到5%。

脑力劳动与升糖指数

我来科普一点小知识,不能不吃糖,据说大脑只能从糖分中获取能量。但是要吃低升糖指数的,否则要血糖紊乱得糖尿病。

也就是要吃粗粮,燕麦,玉米,小米什么的。

像馒头,白面包都属于高升糖指数的。蜂蜜可乐什么的就更不用说了……

Linux pipe 一分为二

语法为 cat ... | tee >(one) >(two)

例子,对于 urls 里的每一行,同时用 curl 和 curl –user-agent ‘Mobile’ 去请求。

cat urls \
  | tee \
    >(parallel --load 8 -j 8 -q curl -H "Cache-Control:max-age=0" \
      -s -w %{url_effective}:%{http_code}:%{time_total}'\n' -o /dev/null) \
    >(parallel --load 8 -j 8 -q curl -H "Cache-Control:max-age=0" --user-agent "Mobile" \
      -s -w %{url_effective}:%{http_code}:%{time_total}'\n' -o /dev/null)

Rails 里的 test log

在 test case 里,用 Rails.logger 记录的是写到 log/test.log 文件的。用 puts, warn 是打到运行 rake test 的 console 里的。

给 icon 字体减肥

如果你使用了 web font icons, 里面肯定有很多其实你并不需要的,这时候可以用这个 icomoon.io 重新生成字体文件,只选你需要的图标,缩小文件体积。

推荐一个 Mac 下做笔记的应用 Notational Velocity

Notational Velocity 体现了『无形』的设计理念,有一种触及人心的操作体验。如果你像我一样觉得 EverNote,OneNote 徒有虚名。那么 NV 很可能合你心意。

简单介绍部分功能:

一键弹出 比如我定义的F12来唤起这个程序。无论我在干嘛,只要一按F12。就可以了。

全键盘操作 比如想划掉一条,用 Command + Y 就可以了。

Just typing 不需要创建文档,搜索文档,不需要,直接输入!

作者也是个低调务实的人。这里有个 2011 年对他的采访。

http://suratlozowick.com/blog/2011/12/notational-velocity-developer-zachary-schneirov-interview/

scrollIntoView 滚到鼻子底下来

scrollIntoView 只是把内容滚动到 view 里就不管了。用户还要扫描全页面才能找到。

比较自然的方法是把内容滚动到 click 的这一点上。

 $('a[href^="#"]').click(function(e) {
    e.preventDefault();
  
    clickTop = e.clientY;
    var href = $(this).attr('href');
  
    $('html, body').animate({
      scrollTop: $(href).offset().top - clickTop + 20 // 20px margin
    }, 500);
  
 });

bcat 把内容 cat 到浏览器

Ryan Tomayko 的 bcat

用 SSH 把远程端口转到本地来

ssh -N -L 11211:localhost:11211 hostname

其中第一个端口你想要的本地端口号。

Rails.cache 里 race_condition_ttl 的用法

race_condition_ttl 的文档可以看这里

我来说个实际操作上的用法。如果你的方法本身耗时比较久,即便使用 race_condition_ttl 还是会让(过期后)第一个请求等很久。怎么办呢?解决的方法就是,不要设置过期时间 expires_in ,让缓存永不过期。

同时,当请求带有某个特定参数时,使用 force: true 来强制更新。你可以另外调用脚本,来发起这些强制更新的请求,等待的永远是你。这样用户永远是从快快的缓存里拿数据。

Mac 下管理 LaunchAgents 后台程序

有个叫 lunchy 的 rubygem。

安装以后可以用以下的命令来启动 memcached。

lunchy stop memcached

没错,它带字符匹配,只要 plist 文件名带有 memcached,比如 homebrew.mxcl.memcached.plist,也能被识别出来。比起系统自带的 launchctl 真是方便多了。

Parallel 并行计算

这个脚本可以批量请求一堆 URL。如果本机负载超过 10,还会停下来歇会儿。

time cat urls \
  | parallel --load 10 -q \
    curl -s -q -w %{url_effective}:%{http_code}:%{time_total}'\n' {}  -o /dev/null \
  | tee curl_log

HTTP 缓存

HTTP 缓存有两处逻辑。一是判断时间是否过期,二是验证缓存是否与上游一致。

过期之后,才去验证。验证的时候顺便会获取新的过期时间。

无论是浏览器,还是 rack-cache 这样的 proxy cache。都遵守这样的规范。

response headers

控制过期使用 Cache-Control

Cache-Control 是 HTTP 1.1 新方法。功能更强更灵活。Expires 是 HTTP 1.0 的标准,现在没什么用了。两者同时出现时以 Cache-Control 为准。

在 Ruby on Rails 里,使用 expires_in 方法来控制 Cache-Control。

控制校验使用 ETag

Ruby on Rails 里默认的 etag 是全页面 hash。是的不错的默认值。 但是如果你的页面里有 csrf_meta_tags 这样的随机内容,则每次都会生成新的 etag,失去了它的意义。

这时可以考虑去掉 csrf_meta_tags。或者使用 fresh_when 来自定义 etag 的生成。

request headers

浏览器发出请求的时候也可以带些指令,例如 Cache-Control: no-cache 就是一什么缓存都不要(一般 shift + refresh 会携带)。

Cache-Control: max-age=0 就是说『我刚刚过期』。

可以用 curl -H "Cache-Control:max-age=0" ... 来让 rack-cache 去 rails 验证一下内容有没有更新。

单词 to, blue 的地道发音

其实 to, blue 的元音和单词 you, view 是一样的。这些词都是完美押韵的。也就是说重音元音以及其之后的声音完全一致。

我开始简直难以相信这么多年都没觉察出念的不对。经过 native speaker 确认,这些单词的发音(押韵部分)确实是一致的。

还有更多,还有 do, brew, who, new, undo 等等。可以看看 所有和 you 押韵的词

高分辨率扫描仪。150 PPI 和 300 PPI 的区别。

100%看是没区别的。但是一般电脑屏幕都比纸张大,而且阅读距离不同,100%在电脑上看看感觉会很小。放大到全屏看,比例为200%,300%。这时还是 300 PPI 的显示效果更好,有放大镜的效果。

洗碗机历险记

最初是看见知乎网友pansz的介绍,打消了我对洗碗机的疑虑。决定购入洗碗机!

我买的洗碗机是西门子 SK23E800TI。可以放在台子上的。之前也考虑过松下的,可是看了评论说太小,餐具都要换小号,作罢。

海尔的也考虑过。可是只有超大款。而且都的比西门子还贵一千多。

美的的没有考虑。就是外观的问题。

水件

西门子使用的是六分龙头。如果家里没有六分龙头的。一定要提前上淘宝买一个。关键词是 “6分 洗衣机 龙头”。没错,洗衣机,洗碗机都是一样的龙头。我推荐九牧的。西门子上门安装自带的龙头最低要75元一个,一模一样的淘宝上30元包邮。

我早有准备他要黑我 75 元。结果给我安装的师傅还要说 75 的没带。只有 120 元的和160元的。让我要不然等明天。黑上加黑?!没问题。我。不。着。急。我!等!你!还要我签单?我才不给你签单!

还没有测地线呢。好在我以前测过。师傅你明天也不用来啦!我自己装!

其实家里有四分龙头的。又拆出一个四分转六分的件。当天就把水管接好了。

水件转接重要的内丝外丝要分清楚。其实四转六和六转四是一样的。还有内丝外丝形容的是水件本身,不是它要匹配的对象。这里我开始也没理解透。

自来水硬度

本地市政自来水中的钙镁离子为 250mg/L。洗碗机说明书上是德国单位。

是我去这个网址转换了一下。就是德国的35度。硬水!

放软水盐。大概放了有一碗那么多。开机不闪盐灯了。那应该是好了。

怎么在洗碗机上设置硬度又让我绞尽脑汁。我看了中英文说明书都没看明白。请看相关知乎问答

软水盐和光亮剂

加盐,加光亮剂的目的是去水渍。

然后是光亮剂。说明书上没说,不过琢磨了一下应该是一次加满储存在机器里的。不用每次都加。

然后在机器上摸索出一个说明书上没有的功能。应该是控制每次自动投放光亮剂的多少。

洗碗经历

洗的很干净。但是因为网篮的结构。放不了几个汤盘(深口盘子)。其实支持大深汤盘非常好容易,剪去几个钢丝,让间距大一些就是了。不知道为什么设计那么多浅盘子的位置?

金钱成本

主要耗材是洗碗粉,电费。成本大约是1元一次。

软水盐很便宜。买中盐的就行。洗亮剂也不贵。不加也可以。这个是为了去水渍。

这里有建议用小苏打的。待我日后试试。

后记

十分满意。以后有机会装一个大的。现在这个洗碗什么倒是够了。可是现在连锅都希望用它洗就空间不够了。

后记 2

喝咖啡的玻璃杯有时洗不干净。不知道为什么。