为Hexo博客的每一篇文章自动追加版权信息

这个需求比较简单,就是希望在每一篇博客的最后追加一段版权声明的文字。我们通过修改博客模板(themes)就可以方便地实现。但是通过修改模板的方式产生的版权信息还是相对独立的,不是文章正文的一部分。这段版权信息存在的主要意义就是防止自动化的工具批量转载博客文章,或许“防止”一词并不恰当,但我们之所以要将版权声明放在正文里,就是希望这些自动化的抓取工具抓取文章时能将版权信息一并抓去。

同时,我们还希望在版权信息中给出这篇文章的永久链接,这样在文章被抓取之后,还会有一个链接指向原文,这样不但可以作为原文被转载的明确证据,同时可以提高原文在搜索引擎中的PageRank。

Hexo博客系统具有良好的可扩展性,我们可以编写一个插件,来实现自动化地为每一篇文章追加版权信息。

继续阅读

Hexo Landscape主题的字体和JS库优化

Hexo博客系统的作者来自台湾,因此在这个系统中也使用了一些不符合大陆实际情况的服务,除了留言板、分享按钮等无关大雅的东西之外,直接影响网站打开速度和呈现效果的东西就是来自Google的字体和JavaScript库了,由于Google在大陆基本处于被阻断的状态,所以我们有必要对其中涉及Google服务的地方进行替换。另外,如果使用Windows系统访问,会发现页面上的字体默认为宋体,丑陋的字体也严重影响了访客浏览的体验,我们也需要对跨平台的字体呈现效果进行优化。

Hexo的Landscape主题对Google的引用主要有2个,第一是使用了在Google上托管的jQuery库,第二是使用了Google的Source Code Pro字体。在Google被封锁后,大部分网友推荐使用360的CDN,也就是useso.com的库,但我经过测试后发现360的CDN在国外的访问速度极慢。网友之所以推荐360的CDN,是因为它可以简单的直接替换Google的服务,只需要改一下域名,URL的其余部分都无需改动。而我发现提供jQuery的国内互联网厂商比比皆是,而提供Google Code Pro字体的除了360还没有找到。因此我希望能够将这两个问题分别解决,而不是用useso一替换了之。

继续阅读

为Hexo博客添加目录

Hexo博客系统的核心支持生成目录(Table of Contents),但其默认的主题Landscape并不支持目录的显示。我们只需对Landscape的主题文件稍作修改并添加一点目录的CSS就可以在文章前面显示友好的目录了。

修改Landscape主题的ejs文件

我们首先要编辑文章显示页面的模板,也就是themes/landscape/layout/_partial/article.ejs文件。为了将目录生成在正文之前,我们首先在这个文件中找到<%- post.content %>,并在这一行之前加入如下代码:

继续阅读

在为Hexo博客添加文章时自动打开编辑器

为Hexo添加博客时需要在终端输入命令hexo new post "Post title",输入之后需要手动定位到source/_posts中的相关文件,这个目录比较深,定位比较麻烦,而_posts目录下可能有上百个文件,找到刚刚添加的那个也得费点劲,如果能在键入新建文章的命令之后能自动打开刚刚新建的文件,那样就方便多了。

GitHub上也有人也提出了同样的想法,Hexo的作者给出了一个解决方法,就是在Hexo博客的根目录下的scripts目录中新建一个JavaScript脚本(如果没有scripts目录则手动创建一个),在其中捕获new事件。

继续阅读

Ultimaker Original 3D打印机DIY手记

一时兴起决定自己DIY一台3D打印机,现在网上的开源3D打印机还是不少的,基于DLP、激光的虽然高大上,但是机构精密、调试复杂,成本也比较高,所以我们基本还是考虑选一个FDM技术的。FDM技术就是将加热熔融的塑料丝从挤出嘴(喷头)中挤出,然后移动喷头来一层层地构建三维的实体。具体技术细节就不赘述了。

方案选择

既然选择了相对简单的FDM技术,在机型的选择上就一定要高大上,简陋的RepRap系列、并联臂结构的机型就不考虑了。至少应该有个外壳,看起来像个完整的产品,如果线缆横飞,机构外露,感觉就低端了很多,更像一个不成熟的实验品。目前商业化的机型当中开源的不多,大概只有Ultimaker和MakerBot两种,MakerBot只有Thing-O-Matic一款开源机型,后来就走向了闭源。而Ultimaker的大部分机型基本都是开源的,包括最初的Ultimaker Original以及比较新的Ultimaker 2.

更重要的是,Ultimaker系列3D打印机采用了更先进的机构设计,主要体现就是其远程挤出机。挤出机当中有步进电机、齿轮、轴承、弹簧、滚花螺栓等机械部件,算是一组相对较大的机构。MakerBot的设计是将挤出机背在打印头上,因此MakerBot的打印头比较笨重,因而跑不快。Ultimaker的设计是在机器的背面设计了一个远程挤出机,将打印材料通过一根鲍登管以送丝的方式送入打印头,这样就把挤出机从活动的打印头上剥离了出来,打印头也就轻便了许多,这个设计使得Ultimaker的打印头移动速度可以达到300mm/s,这是MakerBot的90mm/s望尘莫及的。因此我们就打算组装一台Ultimaker。

继续阅读

自动随机切换Hexo博客的banner图片

个人网站最重要的是什么?个性!hexo自带的landscape是个不错的主题,首先呈现在眼前的就是高度为300像素的大banner,一个精美的banner无疑会一下抓住访客的眼球,建立起对全站的第一印象。

landscape主题的banner虽然很大,但是只能是一张静态图片,略显死板。如果我们能对其稍加改造,让banner图片自动地随机切换为一些预设的图片,一定会是一件很酷的事情。下面我们就来动手实现这个设想!

继续阅读

无法更改文件打开方式的解决办法

前段时间将Cadence 16.5更新到16.6之后,之前指定过打开方式的brd、pad、dra等文件无法双击打开,试图重新指定打开方式也无效。在“打开方式”窗口中点击“浏览”按钮,定位到C:\Cadence\SPB_16.6\tools\pcb\bin\allegro.exe之后,Allegro的图标并未出现在“打开方式”的列表中。

导致这个问题的原因是我们之前添加过allegro.exe,此程序的路径变更(从SPB_16.5目录变成了SPB_16.6目录)之后,就会导致“打开方式”无法添加。解决这个问题的方法是:

继续阅读

在JavaScript中实现类似于Python的range()函数

Python中的range()函数(文档)可以生成由一个范围内的整数有序排列所构成的数组,这在很多情况下是十分方便的。而JavaScript中并没有这样一个函数,除了每次手写for循环之外,我们还可以手动实现自己的range(),提高可读性的同时实现了代码的复用。在StackOverflow上的一篇帖子中,对这个问题给出了很好的回答。整理如下:

继续阅读

如何在Allegro PCB Editor中正确地添加丝印

在Allegro PCB Editor中,很多Class和Subclass都包含了丝印层,那么要如何添加和管理丝印层,又应该如何正确地生成丝印层的光绘文件呢?我们常用的丝印层位于下列Class/Subclass当中。

Board Geometry - Silkscreen

板级的丝印层,一般用于添加板子上的说明性文字标注、版权信息、产品或公司Logo等等。

Package Geometry - Silkscreen

器件级的丝印层,用于器件本身的标注,比如标注集成电路的1号引脚、标注电解电容和二极管的极性等等。这些丝印信息一般情况下由器件封装自带,所以很少在PCB中手动修改,如果封装中的丝印信息有误,应该直接修改器件封装中的信息,这样才便于复用。

继续阅读

《Arduino实战》译者序

每个人的心中都会藏着一个关于改变世界的小小梦想,每一个敢于向这个目标迈出哪怕只是一小步的人,都是我心目中的英雄。然而有这么一些人,他们会为软件编写一些小插件,他们为操作系统订制个性的主题,他们改装键盘和鼠标,为它们添加酷炫的LED灯……他们不满足于商场买回来的成品,总觉得那些工业化生产的东西缺少一点个性和人情味,他们不妥协,他们用自己的方法在现实世界中修修补补并乐此不疲,他们有一个相同的名字——创客。创客不必是身怀绝技的科技精英,也不必是腰缠万贯的富翁,有人用多彩的十字绣装点日常的衣物,有人用璀璨的水钻制作精致的手机壳,有人在橡皮上雕刻个性的图案,将它印在书本的扉页上……他们都在对身边世界进行小小的改造,他们都是创客。只要你心怀梦想,只要你不甘平庸,只要你有想法并付诸实践,你就是创客。欢迎你加入创客的大家庭!

继续阅读