关于正则表达式 2013-05-29

起因

正则表达式初次被我重视归咎于百合仙子,当时以为‘他’是美女,当然美女在群里出的题目都大家都相当重视去解决,估计当时有很多兄弟被他忽悠过。不过到现在来看,这种忽悠是值得的,终归最后是拓宽了知识面,同时认识了一群志趣相投的业内人士。

只所以今天重拾正则这个话题,原因是昨天有同事提到一次面试题,遇到此题。

题目

原文:如何匹配一个数字,范围在(1-65555)不可以使用分组|

分析

匹配数字,正则对应的元字符是\d,单词的开始结束\b,这样就有了雏形

`\b\d\d\d\d\d\b`

但是此时是配置5位任意数,对于1、2、3、4位数就无法匹配,解决的方法是加入限定符重复零次或一次,即

`\b\d?\d?\d?\d?\d?\b`

这样就可以匹配0-99999的数,要进一步对该值进行限制,就需要加入零宽度断言(?<!exp)最后的结果就是

`\b[1-6]?\d?(?<!6[6-9])\d?(?<!65[6-9])\d?(?<!655[6-9])\d?(?<!6555[6-9])\b`

结果

`\b[1-6]?\d?(?<!6[^1-5])\d?(?<!65[6-9])\d?(?<!655[6-9])\d?(?<!6555[6-9])\b`

这个结果还不是很完美,它包含了0开头的数字, 先做记录,以后再做完整。

「转」使用 Byzanz 录制 Gif 动画或 Ogv 视频 2013-04-08

想要录制 Linux 桌面?Byzanz 是一个不错的选择。Byzanz 简单小巧,容易使用,既能录制 Gif 动画,又可录制 Ogv 视频。

Byzanz

安装 Byzanz

可执行下列指令来安装 Byzanz,注意需要 root 权限:

aptitude install byzanz # Debian/Ubuntu
yum install byzanz # Fedora
emerge -av byzanz # Gentoo/Funtoo
pacman -S byzanz #Archlinux

Arch Linux 用户可在 AUR 中找到 Byzanz。如果你不能在自己所用的 Linux 发行版包仓库中找到 Byzanz,那么可以获取其源代码,自行编译。

Byzanz 用法

以本文的 byzanz-demo.gif 为例,你可以通过如下命令来完成录制过程:

yzanz-record -d 40 -x 0 -y 0 -w 400 -h 320 byzanz-demo.gif

其中:

  • -d 40 为录制的时长为 40 秒
  • -x 0 录制区域的横坐标
  • -y 0 录制区域的纵坐标,记住:屏幕右上角为原点(0,0)
  • -w 400 录制区域的宽度
  • -h 320 录制区域的高度
  • byzanz-demo.gif 保存的文件名

BTW: Byzanz 还带有一个 GNOME panel applet,感兴趣的同学可自行尝试。

Android keyevent抓图,使用jpeg565对数据压缩 2013-03-07

实现功能

使用poll池方法监测event3event5和对从FB_DEVICE获得的图像数据进行jpeg压缩,压缩图像由之前的2700k缩小为89k,压缩比显而易见(30倍)。

效果图

Android ScreenShot

抓图实现

FB_DEVICE "/dev/graphics/fb0"获得图像的原始数据,色彩数据分为头和rgba数据,在函数jpgscreencapture里case 16:中我对原始数据进行了处理,将rgba8888的数据转换为rgb565的数据,最后用generateJPEG对数据进行jpeg compress,具体的可以见capturejpg.c代码 * 这里要注意的一点是在读取fbvar.xres值必须为2^5=16的倍数,不够的要补足,也就是如下代码:

if((fb_var.xres&0x1F)==0)
  fb->w = fb_var.xres;
else
  fb->w =((fb_var.xres>>5)+1)<<5;

这样可以避免在抓图时出现像素移位,该问题在fb0的图像像素宽不是16的倍数时出现。

capture_jpg.c

/*=============================================================================
#     FileName: capture_jpg.c
#         Desc: capture jgp screenshoot 
#       Author: Lee Meng
#        Email: leaveboy@gmail.com
#     HomePage: http://leaveboy.is-programmer.com/
#      Version: 0.0.1
#   LastChange: 2013-01-15 09:33:23
#      History:
=============================================================================*/
#include <string.h>  
#include <stdlib.h>

如何带路径复制文件 2013-02-19

背景

前段时间在做代码合并的时候,不得不采取手工merge,由于涉及的文件很多,单个beyondcmp着实抗不住,就想着用命令一次性搞定。

分析

beyondcmp多文件比较需要路径一致,因此如果要做这样的修改,就需要将目前修改的文件放到对应的目录下。

思路

起初的想法是先截取每个文件所在的目录全路径,然后通过cp的方式复制过去,但这样感觉太过复杂,可能还需要写一个小脚本,有点过了。最后就想到之前用tar的带路径压缩解压,至于参数列表可以通过xargs-I参数来解决,这样就可以解决文件路径创建的问题。

做法

使用git diff --name-only可以将当前仓库做的修改文件列出来
使用tar cvf将文件带路径压缩
最终的命令就是

git diff --name-only | xargs -I @ tar cvf 11.tar  @

或者

git status --short | awk '{print $2}' | xargs -I @ tar cvf 11.tar  @ 

前者只列出修改的文件,后者包含了新加的文件--未添加到仓库中
使用tar xvf11.tar文件带路径解压 仓库外的新目录,然后与另一个仓库进行目录比较,最后在beyondcmp中做手工merge

后记

其实这种操作本来可以避免,但是目前由于android的版本太多,多文件比对操作无法避免,上面的做法,简单明了,能很快的将修改文件列出比较,相对与文件逐一寻找比对要方便,时间上也节省不少。

archlinux awsome3.5 config 2013-01-09

awesome config 3.5

由于时间原因,前几天将升级后awesome 3.5回退到3.4.但总感觉不爽,所以昨天终于 忍不住又折腾了一下,把所有的控件都整安逸.还是有点点收获.先上张图

awesome screenshot
awesome 3.5修正了2个 3.4上一直存在的两个问题

  • term不能最大化的bug
  • 对非焦点窗口透明话支持(之前桌面切换会导致无法获得焦点

自己的配置文件已经上传到github上,有兴趣的同学可以下载来看看.欢迎指正

链接地址: 点击前往