起因
正则表达式初次被我重视归咎于百合仙子,当时以为‘他’是美女,当然美女在群里出的题目都大家都相当重视去解决,估计当时有很多兄弟被他忽悠过。不过到现在来看,这种忽悠是值得的,终归最后是拓宽了知识面,同时认识了一群志趣相投的业内人士。
只所以今天重拾正则这个话题,原因是昨天有同事提到一次面试题,遇到此题。
题目
原文:如何匹配一个数字,范围在(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开头的数字, 先做记录,以后再做完整。
想要录制 Linux 桌面?Byzanz 是一个不错的选择。Byzanz 简单小巧,容易使用,既能录制 Gif 动画,又可录制 Ogv 视频。
安装 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,感兴趣的同学可自行尝试。
实现功能
使用poll池方法监测event3
,event5
和对从FB_DEVICE
获得的图像数据进行jpeg压缩,压缩图像由之前的2700k缩小为89k,压缩比显而易见(30倍)。
效果图
抓图实现
从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>
背景
前段时间在做代码合并的时候,不得不采取手工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 xvf
将11.tar
文件带路径解压 仓库外的新目录,然后与另一个仓库进行目录比较,最后在beyondcmp
中做手工merge
后记
其实这种操作本来可以避免,但是目前由于android的版本太多,多文件比对操作无法避免,上面的做法,简单明了,能很快的将修改文件列出比较,相对与文件逐一寻找比对要方便,时间上也节省不少。
awesome config 3.5
由于时间原因,前几天将升级后awesome 3.5回退到3.4.但总感觉不爽,所以昨天终于
忍不住又折腾了一下,把所有的控件都整安逸.还是有点点收获.先上张图
awesome 3.5修正了2个 3.4上一直存在的两个问题
- term不能最大化的bug
- 对非焦点窗口透明话支持(之前桌面切换会导致无法获得焦点
自己的配置文件已经上传到github上,有兴趣的同学可以下载来看看.欢迎指正
链接地址: 点击前往