分类目录归档:Try

KBT Pure Pro 键盘

KBT Pure Pro 键盘

身为程序员,键盘也算是吃饭的家伙之一吧……

虽然不烧这个东西,也没有深入的去了解过,但是用惯了之后,基本上就不想用别的键盘了。基本的青红黑茶轴都曾经买过,最后还是特别中意红轴。买过和用过的键盘大致有Noppoo Choc pro 104Keycool 87/84,还有Poker 2,摸过同事朋友的雷蛇Cherry,还有Race2Filco什么的只在卖场里试过,实在太贵了,再往上的HHKB那就更不用说了……_(:3 」∠ )_

细细一想,还是接着试试国产的好了。

对于60%的键盘,个人一直是觉得是很想入手的一个键盘,原因就是因为小啊……而且上下班可以随时携带(大多数情况下可能没有这个需求……),而且Esc是那么靠近主键盘区域。考虑到自己还没到不需要用方向键的水平,然后就入了一把带有方向键的Pure Pro。

开箱

(没有开灯结果拍出来的新键盘和已经用了半年一样……)

盒子包装还是很简单,60%和Pure Pro表明了大小和身份……

外包装

买的还是红轴,习惯了红轴,基本上就不想碰其他的轴了,青轴震天动地的声音确实不适合在办公室用。PBT的键帽用了之后只会脏不会油……

外包装2

盒子的内表面真是……

外包装3

拿出所有的东西,只送了一个绿色的回车键帽。提起这个就觉得很郁闷,这键盘的键帽和Keycool等键盘的键帽不是通用的键帽,整体偏高,空格键的宽度更是有点猎奇……

说明书、本体、USB连接线,大概就是这些。

配件清单

看到这么小巧的键盘,郁闷稍减。

回车键上那个KB中间的小图标貌似是一只松鼠。

回车

这个键盘的Win/Command键的大小实在令人发指,不过还好,这键盘几乎全键盘都能编程,后面我把Ctrl和Command键互换了一下,上面的坚果图案倒是很有趣。

cmd

这款键盘默认的灯上得键帽没有透光口,于是乎只能通过键帽投射出来(快要亮瞎了,敢不敢做成暗一点的)……

cmd

最后来一张和Keycool 87的对比,真是小了一大圈。

cmd

关于编程

编程的过程网上各种教程,附带的说明书也有说明,简单说起来步骤就是:

比如Command/Win键和左Ctrl互换步骤就是:

最后用Fn + 右Shift启用编程后模式,那么就可以开始用上编程后的键位了。

启用编程模式时,在做第三步时,按键都是表示原值,和编程后的值无关。

想要恢复出厂设置就按着Fn + R等到右Fn闪9次即可。

其他

  1. 这个键盘的右shift太小,Vim输入:wq这样的命令可能会输错
  2. 这个键盘的`需要用Fn + Esc才能输入……(_(:3 」∠ )_写SQL的时候怎么办……)
  3. 同样地,BackSpace也略小……(手指太粗……可是Del键为毛这么大啊……)
  4. 有方向键!这个可真是太赞了
  5. 能编程,解决了部分按键不方便用的问题
  6. 键帽不算通用……
  7. Esc位置很赞

好了,说了这么多,该去练习了。

mac工具使用方法收集

最近入了mac,用上了心仪已久的retina屏幕,用上了mou等优秀的工具,这里打算记录一下自己使用mac过程中遇到的问题。

终端不能保存密码

终端这东西每天干活都得用,win下用着xshell,mac下自带的终端就很赞,然而ssh登陆跳板机的密码相当之长,完全无法记忆,需要使用其他工具。

简单的办法就是使用expect自动填写登陆密码完成跳板机的登陆:

这个文件我命名为relay.exp。

为了方便使用这个命令,可以在~/.zshrc中做个别名:

在进行source ~/.zshrc操作之后,使用quickrelay就能起到免输入密码登陆的效果了。

如何找到当前使用的JDK的路径

Mac OS X的JDK路径位置可以通过 /usr/libexec/java_home 来找到,这一点在需要知道当前JDK路径的时候很方便

通过树莓派局域网中共享影片和文件的尝试

[旧日志恢复……]

前些日子入了一台新小米盒子,性能上感觉还是比较一般,反应速度不是特别的快,但是勉强足够,对于1080P的片子有一些解码比笔记本顺畅多了。感觉好处在于终于可以回来之后不开电脑直接躺床上看剧了,而且作为粗粮手机用户,还能用到一些和手机交互的功能。其他东西就不多说了。

但是问题在于,每次更新硬盘内容还是超级麻烦的,要从电脑上拷进下好的电影到硬盘,然后又通过OTG线插到盒子上。手头上有一个树莓派,想了一下这货跑的不就是debian的一个变种吗,想起以前别人共享文件的办法,决定试试看安个samba上去试试,配好了做个网络位置映射,直接把迅雷什么的下载目录设定成映射的位置。配置的过程可以参考这篇文章。另外,为了能够挂载外接的硬盘,需要一个有源Hub。有了有源Hub,Pi也不需要电源线了,直接从USB就能供电。

刚配好之后做了个映射

 

 


Rasp-NAS
 

随便传了一个文件,100KB/S左右的速度,当场看傻了。自己照着网上广为流传的方法做了一下修改,主要是对缓存大小和异步读取/写入的块大小做了修改

 

 

这样做之后速度有了比较大的提升,然而峰值也仅仅是4MB/s的写入速度,大多数时候只有1~3MB/S的写入速度。而且传输的时候树莓派变得特别的卡,top一下发现:

top

感觉应该是因为挂载的硬盘是NTFS格式,拖慢了Pi的速度,使用ext3可能会好点。总体而言,Pi的性能应该是不够吧。

限制于这样的速度,这样的传输能力只能用来看720P的影片,打开一个稍微高码率的1080P影片,整个播放过程简直就是灾难。而且这个速度完全不适合用来传文件,目前手头上的极路由貌似是150M的传输速率,按理说10MB/S的速度还是能支持的,但是树莓派成了整个传输过程的瓶颈。

总而言之,要是让树莓派做NAS的想法在我这里还是不够实际,解决的办法看来最好还是买一个NAS或者试试带Atom和1000M网卡的板子了,好在后者价格还算便宜。

为树莓派添加动态域名解析

[旧日志恢复……]

如果要在公司或者其他地方访问家中的树莓派,在自己有闲置域名的情况下如果能通过域名访问那么是再方便不过了。

由于在家使用一般都是ADSL,拥有固定IP基本是很困难的一件事情,动态域名解析就成了唯一的选择。提供动态域名解析的之前有花生壳,但是使用花生壳的服务个人感觉整个过程并不是特别友好,在树莓派上的配置文件个人觉得还是比较不方便的。相比之下 DNSPod 的真是让人省心了很多,它所提供的API调用十分方便,通过API可以进行创建域名记录、修改域名记录等操作,并且官方提供了Python脚本,只需要简单的配置就能实现动态域名解析的效果。插一句,DNSPod提供的API真是让这项需求变得简单了许多。

虽然已经有了官方的脚本,我自己简单的进行了一些小小的改造,代码可以在我的 Github 上。这里主要修改的是配置方式和获取外网IP的方法。在这里我是用的是ip138提供的获取外网IP的方法:

 

 

通过请求此页面之后,可以通过文本解析得到此页面中包含的树莓派的外网IP地址,之后写入DNSPod上建立的记录之中。使用此脚本的方法请参加我的 Github 页面上的说明。

需要值得注意的是,在自己的家用路由器上是需要开启DMZ主机设置才能通过外网对树莓派进行访问的。此外,北京电信通的ADSL不管使用哪一种方式,都没法通过外网访问,这个还需要进一步的了解原因。

Mediawiki 登录操作

Mediawiki是一个广泛使用的wiki系统之一。

整个wiki的搭建过程十分的简便,几乎是各种下一步的傻瓜安装方式。安装时在有Memcached的机器的前提下,强烈建议配置上Memcached,在配与不配Memcached这个选项上,配置了Memcached之后速度会有明显的提升。

在使用wiki的过程中,可能我们需要对外公开wiki的内容,但是不能让未授权用户编辑的情况,这时候就需要使用认证。在官方网站上有很多的认证插件可以选择,不过有时需要加入自己使用的wiki系统的一些特性的时候(比如用公司的统一登录接口),插件就不一定适用了,需要自己编写插件。

基本信息

下面是Mediawiki默认的user表表结构,在下文中对于表字段的操作依据都来源于下方:

插件编写

关于插件的编写,可以首先看看官网上对于认证插件的说明,自己尝试编写了两种登录的方式,一种是通过继承 AuthPlugin 类并重写 authenticate 方法实现,另一种是编写 UserLoadFromSession 的对应处理方法处理利用现有的Cookie进行登录的方法。第一种方法个人觉得适合使用同一登录的情况下使用,第二种方法适合wiki与提供认证的服务处于同域的情况下使用,实现同步登录。

重写 authenticate 方法

首先我们要做的就是继承 AuthPlugin 类,并且将标记认证对象的全局变量 $wgAuth 设定为一个这一类型的对象。

参见 AuthPlugin 类中 authenticate 方法的定义:

需要实现的就是一个传入用户名密码并在验证之后返回结果的方法。用户在wiki点击登录动作发送来的用户名密码将会在这个方法中得到认证,利用使用公司邮箱密码登录,利用统一的LDAP登录接口获取数据,判断是否登录成功。

对于登录成功的,应当返回 true,登录不成功的,应当返回 false

但是,在使用外部确认的登录方式的情况下,仍然需要在wiki数据库中的 WIKI_TABLE_PREFIX_user 表中建立用户(WIKI_TABLE_PREFIX_ 表示是),在认证通过之后,需要构建一个 User 类的对象,并且将表示当前登录用户的全局变量 $wgUser 设定为生成的User类对象。例如登录成功之后返回用户的用户名,假设用户名是唯一的情况下,可以在数据库中检索出相关的数据,构建用户对象。

启用这一方式进行登录验证还需要在wiki代码根目录下的 LocalSettings.php 文件中引入这一文件(根据实际位置决定)。

如果是想要将wiki通过iframe形式加入其它页面的,记得还需要在 LocalSettings.php 中设定

Mediawiki默认是不允许wiki被iframe加载的。

用如下代码大致可以表示整个方法的实现:

编写 UserLoadFromSession 的对应处理方法

在请求数据的过程中, 通过注册到 $hooks 中的方法,可以进行进行验证($hooks 参见官方说明,是Mediawiki中可以让用户自定义方法在特定情况下使用的机制),对于这个方法,名称可以任意取,但是参数必须为:

即传入一个 User 类的对象和一个标记用户是否已登录的布尔值,其中布尔值用于确定用户登录状态。

此方法的返回值,官方文档建议一直返回 true (即In any case, return true)。

对于判定用户是否登录,在同域的情况下,自己尝试的思路是检查Cookie中是否带有指定的字段信息,例如token值以及用户名,将其与数据库中的数据进行比对,通过则构建一个用户对象并将其赋值给 $wgUser 全局变量。

可以在上述类中添加如下代码完成功能:

这里需要注意token是应当有超时的,我的处理方式是在user表中增加如下一个字段来记录超时的时间戳:

通过在取回token的同时取回超时时间戳,并与当前时间戳做对比,若当前时间戳小于超时,则认定未过期。

如果需要实现同步登录状态,那么在还需要在主要的登录环境中在退出时,取消用户登录状态,例如将token字段置空,这样可以标记用户已经退出。同时也要对直接从wiki登录的用户做处理,可以针对 UserLogout 这个hook编写一个处理方法,名称任意,在这一处理方法中将token字段置空。在这里需要在代码中注册 UserLoadFromSession 以及 UserLogout 对应的处理方法:

可以考虑使用Redis或者Memcached缓存token等信息,并且设定上数据超时,能减少数据库访问并且相应速度更快。