一台Sigma的板子,遥控器异常灵敏,拖了好久终于无法忍受,决定解决一下
看驱动源码,发现一个ioctl,IR_IOCSETWAITPERIOD,驱动(2.4内核)本来的默认设定是100,于是设定为1000
ioctl (fd, IR_IOSETWAITPERIOD, 1000);
问题解决,不过还是不太明白,这个period的时间单位是什么呢?毫秒?微秒?纳秒?知道的兄弟告诉一声啊
linux的ir设备
Textpattern 4.10
程序换完了,模板搞好了,消停了两天又坐不住了,于是乎。。。把textpattern从4.0.5升级到了svn的trunk版本,4.10
没什么太大的变化,不过有些插件已经不太工作了,比如 rss_admin_quikpik ,而 rss_article_edit , rss_live_archive 等插件的后台设置也不行了,后台检测也是错误警告一大堆
还是开发版本的缘故吧,而且原本textpattern的更新就比较慢,所以也不是很期待能有什么比较大的改变,其实现在的4.0.5就已经很不错了,呵呵
- 撰写页面, 高级选项里的文章标记语言部分从原来的三项增加到五项,添加了Strip Tags和Textile Lite。其他没什么大的变化,只是布局稍微改变了一下
- Section的设置部分UI有所变化,添加了parent section的设置,现在可以设置级联section了
变化不多,不知道bug多不多,用用看吧
关于标准c的select
不知道哪个哥们写得,从ir红外线设备获取数据居然轮询,搞得程序一起来CPU占用率就达到99%,哪怕什么也不做…
于是动手改成对设备的fd进行select,block至获取数据或超时
int select (int nfds, fd_set *read_fds, fd_set *write_fds, fd_set *except_fds, struct timeval *timeout)
结果发现:
- 设备一定要以block方式打开,即不能加O_NONBLOCK的mask
- fd_set在select返回时会变化,如果重新对同一个设备进行select,则需要重新调用FD_SET来加入fd到fd_set
不可能没学过的,居然一点印象都没有了…诶
其次, 后来发现select的另一个用途—sleep线程
在多线程程序里,在某个线程内调用sleep,usleep会导致整个程序的sleep,相信这个在大多数情况下都不是大家所期望的结果,那么你可以这样:
struct timeval timeout;
timeout.tv_sec = 1; /* 1s */
timeout.tv_usec = 0; /* 0 microsecond */
select (1, NULL, NULL, NULL, &timeout);
Textpattern Plugin Creator
熟悉了Wordpress的插件体制的用户,一下子转到Textpattern,对其插件系统可能会很不适应,就像我一样…
Wordpress设置了专有的插件目录,按照特定的格式编写php文件,放到插件目录并在后台激活就可以了,而Textpattern则不同
在Textpattern中,一个插件不仅要遵循某种格式,而且在发布前要经过所谓的“编译”,而安装后的插件也不是以文件形式来存放,而是放在数据库的txp_plugin表里
大致看了一下表的字段,除了版本作者等基本信息外,有三个比较有意思的字段: code, code_restore, code_md5
第一个code字段保存的是插件源代码,也是当前正在工作的版本
第二个code_restore字段保存的是插件的初始源代码,也就是安装时候的源代码,因为textpattern允许用户在后台随时修改插件代码,而修改后的代码会单独保存在code字段,不会涉及到初始的代码,这样在必要时可以做恢复
第三个code_md5字段保存的是插件md5校验码,大概是用来比较当前版本和初始安装的版本比较有没有变化吧
跑题了,回头看看plugin所谓的编译吧
翻了一下官方的插件模板,发现所谓的编译其实很简单,就是新建一个数组,在数组里填入插件的作者版本帮助和源码,然后算出md5一并保存,接着对这个数组序列化并转换成base64编码,不难猜到textpattern后台安装插件的动作了,无非是所有操作的逆操作
不过每次都修改模板并运行获得源码似乎也挺麻烦的,于是借鉴zem plugin template写了一个简单的“编译器”,顺便学习了一下Sajax,和我一样懒得可以用这个吧,呵呵
简单到简陋的东西,使用说明也免了吧,谁叫我懒呢…
迁移: Wordpress 2 Textpattern
Textpattern带了Wordpress的导入脚本,本以为一帆风顺,结果却问题多多,不得已修改了一下脚本,现总结一番
*Update: 所有修改都在 textpatter/includes/import/import_wp.php*
*1. 中文乱码*
老问题了,不过一般都可以用SET NAMES查询来解决,这次也不例外
mysql_select_db($b2db,$b2link);
$results[]= 'connected to wp database. Importing Data';
改成
mysql_select_db($b2db,$b2link);
$results[]= 'connected to wp database. Importing Data';
mysql_query ("set names 'utf8';");
*2. 打开评论*
Textpattern导入文章默认是关闭评论的,这个比较郁闷
差不多刚才那个地方,紧接着是从wordpress里取出post的查询语句
$a = mysql_query("
select
".$wpdbprefix."posts.ID as ID,
".$wpdbprefix."posts.post_date as Posted,
".$wpdbprefix."posts.post_title as Title,
".$wpdbprefix."posts.post_content as Body,
".$wpdbprefix."users.user_login as AuthorID
from ".$wpdbprefix."posts
left join ".$wpdbprefix."users on
".$wpdbprefix."users.ID = ".$wpdbprefix."posts.post_author
",$b2link) or $results[]= mysql_error();
修改查询语句,取出原来post的评论状态字段:
$a = mysql_query("
select
".$wpdbprefix."posts.ID as ID,
".$wpdbprefix."posts.post_date as Posted,
".$wpdbprefix."posts.post_title as Title,
".$wpdbprefix."posts.post_content as Body,
".$wpdbprefix."posts.comment_status as CommentStatus, /* 评论状态 */
".$wpdbprefix."users.user_login as AuthorID
from ".$wpdbprefix."posts
left join ".$wpdbprefix."users on
".$wpdbprefix."users.ID = ".$wpdbprefix."posts.post_author
",$b2link) or $results[]= mysql_error();
保存post到textpattern的查询语句也要修改:
$q = mysql_query("
insert into `".PFX."textpattern` set
Posted = '".addslashes($Posted)."',
Title = '".addslashes($textile->TextileThis($Title,1))."',
url_title = '".stripSpace($Title,1)."',
Body = '".addslashes($Body)."',
Body_html = '".addslashes($Body_html)."',
AuthorID = '".addslashes($AuthorID)."',
Category1 = '".addslashes($Category1)."',
Category2 = '".addslashes($Category2)."',
Section = '$insert_into_section',
uid='".md5(uniqid(rand(),true))."',
feed_time='".substr($Posted,0,10)."',
AnnotateInvite = '$default_comment_invite',
Status = '$insert_with_status'
",$txplink) or $results[]= mysql_error();
改成:
$q = mysql_query("
insert into `".PFX."textpattern` set
Posted = '".addslashes($Posted)."',
Title = '".addslashes($textile->TextileThis($Title,1))."',
url_title = '".stripSpace($Title,1)."',
Body = '".addslashes($Body)."',
Body_html = '".addslashes($Body_html)."',
AuthorID = '".addslashes($AuthorID)."',
Category1 = '".addslashes($Category1)."',
Category2 = '".addslashes($Category2)."',
Annotate = '".addslashes($CommentStatus == 'closed' ? 0 : 1)."',
Section = '$insert_into_section',
uid='".md5(uniqid(rand(),true))."',
feed_time='".substr($Posted,0,10)."',
AnnotateInvite = '$default_comment_invite',
Status = '$insert_with_status'
",$txplink) or $results[]= mysql_error();
*3. 永久链接*
textpattern的永久链接真是不敢恭维,居然不支持中文,如果直接导入的话,所有的文章永久链接里的中文都将丢失,当然用id方式的没关系,但是对于我等使用/year/month/day/title格式的就...为了保持无缝切换(因为之前wp的永久链接就是这个格式),对脚本再一次修改
因为所涉及的查询语句和之前打开评论的完全一样,所以简单说一下,不再重复
1) 取出链接
在刚才插入
".$wpdbprefix."posts.comment_status as CommentStatus,
的地方再插入一句
".$wpdbprefix."posts.post_name as PostName,
2) 保存链接
在刚才插入
Annotate = '".addslashes($CommentStatus == 'closed' ? 0 : 1)."',
的地方找到
url_title = '".stripSpace($Title,1)."',
修改成
url_title = '".addslashes($PostName)."',
*4. 用户显示名称*
之前用wp一直用admin用户发表文章,但是显示名称改成了自己的名字,这样导入的话所有文章的作者名字都会是原始的admin,是个小问题,不过总是看着不舒服,一道改了
找到
.$wpdbprefix."users.user_login as AuthorID
修改为
".$wpdbprefix."posts.post_name as PostName,
*5. tags丢失*
当然这个是对于wp 2.3以上用户而言
在取出post之后是一个while循环,挨个处理post,就在这里取tags吧
找到
while($b=mysql_fetch_array($a)) {
//Clean ugly wp slashes before to continue
$b = undoSlash(undoSlash($b));
在后面加入:
$tags = "";
$t = "
select t.name from
".$wpdbprefix."terms AS t,
".$wpdbprefix."term_relationships AS r,
".$wpdbprefix."posts AS p,
".$wpdbprefix."term_taxonomy as ta
where
p.id=".$b['ID']." and p.id=r.object_id and r.term_taxonomy_id=ta.term_id and ta.term_id=t.term_id and ta.taxonomy='post_tag';
";
$e = mysql_query($t, $b2link) or $results[] = mysql_error();
$tag = mysql_fetch_assoc ($e);
if ($tag) {
$tags = $tag['name'];
while ($tag=mysql_fetch_assoc ($e)) {
$tags = $tags . ',' . $tag['name'];
}
$b['tags'] = $tags;
}
tag取出来了,再作为keyword保存就很简单了,在保存post的地方,也就是在刚才插入
Annotate = '".addslashes($CommentStatus == 'closed' ? 0 : 1)."',
的地方,加入一句
Keywords = '".addslashes($tags)."',
这样就差不多了,然后转个tru_tags插件就和以前一样了
*其实2.3版本的wp已经取消了分类的数据库表,而是和tag的数据库表合并起来,所以textpattern(4.0.5)的导入脚本是不支持tags并且也不能正确导入分类的*