Articles by leegorous

Phantomjs截图里的中文乱码问题

Phantomjs截图里的中文乱码问题

使用 Phantomjs 对网页进行截图,在本地运行都是好好的,但是一到服务器,首先遇到部署问题,然后是中文乱码问题,遇到中文字符就渲染成下划线 “_”。(其实不仅仅是中文,韩文什么的也是渲染不出来)。 这个问题应该不难,应该是因为服务器没有安装中文字体导致的。但难题是 alpine linux 的中文字体不太好找。网上搜了一圈,在这个 How can I use Chinese in Alpine headless chrome? 问答里找到点线索。 主要有以下两种写法(使用 Docker 进行部署的): RUN echo @edge http://nl.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories && apk add wqy-zenhei@edge 还有这种: RUN apk add wqy-zenhei…

Continue reading

Phantomjs部署到docker服务器

基础环境是 alpine-node:6,要把 Phantomjs 部署到该服务器上,发现直接在 package.json 里加上 phantomjs-prebuilt 的依赖是不能运行的。 网络搜了一轮,发现是 Phantomjs 在 alpine linux 上是有问题的,找到这个 issue,尝试把下面这段加到 Dockerfile 里: RUN apk update && apk add –no-cache fontconfig curl curl-dev && \ mkdir -p /usr/share && \ cd /usr/share \…

Continue reading

很好的 C语言入门教程(中文)

豆瓣上备受好评的 《Linux C 编程一站式学习》 网上几大书店都无货了,淘宝有,但是贵,然后竟然在 Github 上找到它的在线版本 http://akaedu.github.io/book/,真心要点赞啊。 这个书还有个新版本,叫《一站式学习 C 编程》,也是无货的。具体内容我没有比较过,但是基础知识应该是差不多的。新版书名中把 Linux 去掉了,也是可以理解的,毕竟 C 不局限于 Linux,特别是现在多种平台,还有逐步升温的各式嵌入式设备,在可以 预见的未来 C 语言还将继续扛大旗。 这样看趋势还不明显,不过相信很快大家都会感受到的了。

如何生成唯一且不可预测的 ID

通常数据库可以生成唯一的 ID,最多的就是数字序列,也有像 MongoDB 这样产生组合序列的,不过这种形式的 ID 由于是序列,是可以预测的。如果想得到不可预测且唯一的 ID,方法还是有的。 下面主要以 Node.js 的环境为例。 Node-uuid Github 上有个 node-uuid 项目,它可以快速地生成符合 RFC4122 规范 version 1 或者 version 4 的 UUID。 安装,既可以通过 npm install node-uuid ,也可以在 package.json 中定义。使用方式: var uuid = require('node-uuid');…

Continue reading

如何在命令行中使用 proxy

国内的网络形势你懂的,要翻墙,无法是 VPN 或者 proxy。我个人还是用 proxy 比较多,浏览器里装个插件就能自动适应。但是那只是针对浏览器,命令行也很常用,遇墙就会卡着不动了。 有一个软件可以帮助你在 Command Line 里使用 proxy,叫 ProxyChains-NG (new generation) 在 Mac 上安装超简单(只要你机器上装好了 brew) brew install proxychains-ng ==> Downloading https://downloads.sourceforge.net/project/proxychains-ng/proxychains-4.7.tar.bz2 ######################################################################## 100.0% ==> ./configure –prefix=/usr/local/Cellar/proxychains-ng/4.7 –sysconfdir=/usr/local/Cellar/proxychains-ng/4.7/etc ==> make ==> make install…

Continue reading

Javascript void(0)

常有人疑惑一个看上去很简单的问题,<a href=”javascript:void(0)”>some button</a> 里面的 void(0) 是什么意思?又或者不明白为什么好像很多人要这么写而不是其它更加简洁的写法,比如 <a href=”#”>some button</a> href=”javascript:void(0)” 实际上是为了在 link 被点击的时候,返回一个空值,告诉浏览器什么都不用做。因为浏览器会把当前页面里的内容替换为返回的结果。(这个效果反而让我感到奇怪,因为真的很少这么用) 而 href=”#” 看上去简洁,但是它其实有个默认的行为,会把页面重新定位到页面顶部,这就是为什么页面会跳一下的一个原因。因为更多的情况,点击后页面保持在原位才是我们想要的结果。使用 # 甚至可能出现一些更加奇葩的问题。 除了这个,还有没有其它更加简洁的写法呢?会不会是 <a href=””>some button</a> 呢?这个点击后会刷新当前页面,显然不符合要求。应该是 <a href=”javascript:;”>some button</a> ,什么都不执行。但有时过分简洁也容易造成“不清晰”的印象从而引起不必要争拗。如果从代码可读性考虑,也为了团队内沟通少点分歧,我会建议使用 href=”javascript:void(0)”。 void 操作符最原始就是用来“制造” undefined ,特别是某段代码只需要其副作用(side effect)又不希望有返回值产生。void 本身没有副作用,也没有正作用(返回值是空),但却能包含一切,犹如黑洞一般神秘。 ==…

Continue reading

在苏宁买东西

在亲身经历过之后,才能感受到苏宁的购物体验是有多么的支离破碎。 作为一名普通消费者,贪便宜才是理性的体现,团购就很对胃口,所以就团购了一把。某大件电器,限购 3台。好吧,我下个单要两台。一切都很顺利,除了必须得绑定一下手机!我最讨厌绑定手机了,不过为了便宜,绑了一个。支付的时候选择了在线支付,如果没有什么特别理由或者提醒说这里最好别这么做的话,一般都会是在线支付。 问题开始来了,网银有金额限制。要跟超过70家银行合作快捷支付,可能真的没有那么多精力来为网银交易限额做个提示吧。好吧,我能理解给个提示真的工作量超大,那么先看看有没有什么办法可以改支付方式。没有!-_-! 退而求其次,先取消这个单,然后下个新单改为到门店支付。 然后,下不了单!打电话给客服,答复是,即使取消了订单,资格还是占着的,建议我用其它账号重新下单。这个逻辑本身就很有问题。谁设计的系统,取消了订单还占着资格?不知道是系统的 bug 还是设计的时候就没考虑周全。 新建一个用户,找了另外一个手机号绑定(连续两次干最讨厌的事,忍耐力是不是很好?),下单,支付方式为门店支付。 ===== 华丽的分割线 – 场景瞬间切换至苏宁门店 ===== 收银台的工作人员说没找到我的单号!? 再次致电客服,说了一堆类似于我能明白你的意思的话,确认了团购的是不能在门店支付的,最后给出的解决办法是找门店导购员重新下单,改为货到付款。 团购的不能在门店支付?毫无提示。害我白跑一趟了。从这个点上可以隐约感觉到,苏宁其实不是一个整体,里面山头林立。 导购员不知道是没听明白我想要的方案还是怎么回事,一阵忙碌,跑来跑去,说是门店里做不了那个价格,要打报告,让我等。30分钟过去了,导购员回来说方案有了,可以做,就是步骤有点复杂。 先要搞张门店的会员卡,以较高的价格先买一台,然后得到返卷,买第二台的时候用返卷抵扣,最终价钱一样。操作起来也很复杂很费时间,来来回回打单,额外搞张会员卡,付款也要付两次。 中间我故意客气一点,表现得情绪稳定,但无意中导购员一句,“不麻烦,我也有提成的”,很真情流露的一句话,让我深深的感觉到 “服务是苏宁唯一的产品,顾客满意是苏宁服务的终极目标” 全是狗屁。 我相信绝对是有可以让顾客满意的办法,不过前提是得站在顾客的角度去思考。 整个过程有多处细节都可以避免最终的悲剧,包括:在选择网上支付的时候,给出足够清晰的提示网银限额,是否有其它方式来突破这个限额;在选择门店支付的时候,给出足够的提示,团购是不能在门店支付的,或者允许团购在门店支付;允许客户修改订单的支付方式;订单取消之后,对于有限购的项目归还占用的资格;门店线下的下单操作应该兼容线上的操作方式,不用那么迂回曲折的办法来实现和网上价格同步。 线上账户对于用户来说是个重要的入口,那么轻易地建议顾客再开一个账户或者使用他人账户的行为是不可取的。引导顾客使用正常流程,确保正常流程的可用性是评价一个系统成熟度的重要考量。 门店导购员的服务也显得很生硬,让客人等待超过半小时,商品不会推介,一杯水也没有。还有让人好奇的是比较热衷于劝顾客开会员卡,对其他顾客声称能做得比网上更低价。

这个 Frozen 不太冷

传说这是一部本来打算在 2000年上演的动画片,回炉了13年之后,再来个破茧而出。还好它选择的是一个很经典的主题,突破束缚,突破自己。经典的主题就该配经典的效果,那些冰雪魔法、那座屹立峰巅的冰晶宫殿,还穿插一些经典的梗,比如那根胡萝卜。 有些人可能期待王子或者哪个卖冰的来英雄救美一下,结果被震住了。男主角都只不过是陪伴一下,不显得那么寂寞空虚冷而已。 因为女王内心的不安,造成全城冰雪覆盖,以为自己迁一下都,躲起来就没事,但只要还要有人牵挂,想落得个耳根清净是不可能的。有些事情是早面对的好,方针一错,会错过好多时间,而且纠正起来特别麻烦,比如需要冰镇一下妹妹。 看到有很多讨论主题曲 《Let It Go》,不过我倒没有太多印象,可能因为整个电影里面都很迪士尼地在很多环节开唱,虽然比直接说对白要带感很多,不过也会冲淡了主题曲的感觉。对比起埃及王子的主题曲,这个就略为逊色。 总体来说,片子还是老少咸宜,值得重播的。