thinkpad 用中键滚动屏幕失效..


系统: archlinux

在内核升级到 kernel26 2.6.32.2-2 后,我的中键失效了....

于是习惯性的上网找解决方案..... = = 还改不了拉。当然,还记的是某个配置文件的问题。

于是到archlinux forum 上搜一下,果然是有同样的问题。不过提问的人做的好....说出自己分析出来的问题。。。

I did a "lshal", and it seems like the device name changed from "TPPS/2 IBM TrackPoint", to "PS/2 Generic Mouse",

于是我运行了这个 命令,

lshal | grep 'IBM TrackPoint'

没找到。

lshal | grep 'Generic Mouse'

有了...

于是我在想将 hal 的 policy 文件里的  'TPPS/2 IBM TrackPoint' 换成 "PS/2 Generic Mouse" 就好了?

于是往下看,有人就这么干了,解决了中键问题,但不能调灵活度,有关系吗?。。。

我还是直接换了,果然有效!

 

sudo gvim /etc/hal/fdi/policy/mouse-wheel.fdi

 

<match key="info.product" string="PS/2 Generic Mouse">

 

sudo /etc/rc.d/hal restart
sudo /etc/rc.d/gdm restart

ok. 又能用中键滚动屏幕了。

 file content:

 

 

<?xml version="1.0" encoding="UTF-8"?>  
<match key="info.product" string="TPPS/2 IBM TrackPoint">  
<merge key="input.x11_options.EmulateWheel" type="string">true</merge>  
<merge key="input.x11_options.EmulateWheelButton" type="string">2</merge>  
<merge key="input.x11_options.XAxisMapping" type="string">6 7</merge>  
<merge key="input.x11_options.YAxisMapping" type="string">4 5</merge>  
<merge key="input.x11_options.ZAxsisMapping" type="string">4 5</merge>  
<merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>  
</match> 

 

iframe. 子父页面互相操作

简单记录一下今天学到的东西。 jQuery相关。

summay:

 将子页面的数据处理后传到父页面;

条件:

子页面(iframe)有一列表。

父页面有一待填入数据的table,与子页面具有对应元素。

需求:

双击子页面的列表某一行。在父页面的添加一行数据,数据来自子页面列表,供修改。子页面行高亮提示。

在父页面加减行里删除某行,去掉子页面列表对应行的高亮。

(具体怎么删除添加行就不说了,不是自己的东西)

使用工具:

JsonUtil. jQuery

简单示例:

子页面js部分

 

jQuery(document).ready(function() {
    //假设所有 tr 都在 tbody标签内操作如下
    jQuery('table tbody>tr').dblclick(function() {
	var o = new Object();
	var $thistr = jQuery(this);
	$thistr.find('td').each(function() {
		//获取自己定义的tag属性 <td tag="hello">td的内容</td>
		var name = jQuery(this).attr('tag');
		//获取本td内容
		var tdValue = jQuery(this).text();
		o[name] = tdValue;
	});
	if(searchItemFromParent(o['accountNo']))
	    return;
	parent.dataObj; //暂时用此比较恶心的做法,父页面全局变量
	parent.addRaw(null);
	$thistr.addClass('light'); //自定义light样式,这里不写出来里的。就随便一个颜色
    });
});

//搜索是否已经添加到父页面中
function searchItemFromParent(accountNo) {
    var itemExist = false;
    jQuery('tbody > tr',window.parent.document).find('input[name*=accountNo]').each(function() {
	if(jQuery(this).val() == accountNo) {
	    itemExist = true;
	    return; // work?
	}
    });

    return itemExist;
}
父页面:

<html>
<!-- iframe -->
<script type="text/javascript">
function addRaw(arg) {
    //.....
}

//添加行后触发的事件,传入该tr对象
var dataObj;
function addRawEvent(newtr) {
       //...........
       //对某table添加行
       jQuery(newtr).find('input').each(function() {
	    var nameList = jQuery(this).attr('name').split('.');
	    //以'.'为风格符,转成数组,获得最后一个元素
	    //处理jsp中的这中情况 name="a.b[0].accountNo" 
	    var name = nameList[nameList.length - 1];
	    jQuery(this).val(dataObj[name]);
       });
}

//....删除事件

function removeRowEvent(removetr) {
    jQuery('table tbody>tr',window.iframes['infoIframe'].document).find('td[tag*=accountNo]').each(function() {
	if(jQuery(removeTr).find('input[name*=accountNo]').val() == jQuery(this).text()) {
	    jQuery(this).removeClass('light');
	}
    });
}
</script>
<!-- iframe -->
<iframe id="infoIframe" src="child.html" />
</html>

 

 

获得某进程的PID and kill it.

用java 运行了 tomcat_hudson。

要在每天下班后重启....但是有时候 bin/shutdown.sh 不起效,只能强制杀死进程。

so here we go

 

##mark

if [ $# = 1 ]; then
    kill_proc_name=$1
    proc_id=`ps aux | grep tomcat_hudson | grep -v grep | awk '{print $2}'`
    echo "killing proc : ${kill_proc_name}"
    echo "proc pid: ${proc_id}"
    kill -9 $proc_id
    echo "done"
else
    echo "enter only one proc name"

# above is useless, following is the point
# grep -v grep 过滤掉 grep 的进程。因为 前面列出来的进程项里会有  “grep tomcat_hudson" 
# 所以也把grep的列出来了,它也包含"tomcat_hudson"这个名字。目前还不会更好的方法
# awk '{print $2}' 以空格为分隔,打印出第二个字符串。以此例理解。
proc_id=`ps aux | grep tomcat_hudson | grep -v grep | awk '{print $2}'`
kill - 9 $proc_id

 

 

通过播放列表复制音乐文件...

今天想将banbee里的一自定义列表里到处音乐文件.....但在banbee没有找到这个功能,我没有发现!?

于是导出播放列表看看 .m3u格式的。。刚好是注释加路径

 

#EXTM3U
#EXTINF:253,南拳妈妈 - 下雨天
/home/tlhl28/music/current_listenling/下雨天.mp3
#EXTINF:153,bandari - GOOD NIGHT
/home/tlhl28/music/15.wma
#EXTINF:285,卢广仲 - 我爱你
/home/tlhl28/music/current_listenling/我爱你.mp3
#EXTINF:236,卢广仲 - 早安,晨之美
/home/tlhl28/music/current_listenling/早安晨之美.mp3
#EXTINF:258,Jason Mraz - I'm Yours
/home/tlhl28/music/current_listenling/jason mraz - i'
m yours.mp3
#EXTINF:243,Linkin Park - QWERTY
/home/tlhl28/music/current_listenling/Linkin Park-Qwerty(live).mp3
#EXTINF:761,Linkin Park - Part Of Me
/home/tlhl28/music/current_listenling/Part Of Me.mp3
#EXTINF:204,Lydia - Tommai mai rub sak tee [Special]
/home/tlhl28/music/current_listenling/tommai mai rub sak tee.Lydia Ninteen.mp3
#EXTINF:265,Unknown Artist - 自由
/home/tlhl28/music/current_listenling/自由.mp3
#EXTINF:220,Unknown Artist - 范逸臣 - 国境之南
/home/tlhl28/music/current_listenling/范逸臣 - 国境之南.mp3
#EXTINF:62,Unknown Artist - Rock'n rollµÄstyle banner_02
/home/tlhl28/music/current_listenling/Rock & Roll的Style.mp3
#EXTINF:292,·½¾¼ïÙ - Äã²»±Ø°®ÎÒ
/home/tlhl28/music/current_listenling/你不必爱我.mp3
#EXTINF:567,¿áÖíÒôÀÖ[kupig.cn] - ¿áÖíÒôÀÖ[kupig.cn]
/home/tlhl28/music/current_listenling/World Filled with Love.mp3
#EXTINF:165,苏打绿 - 日光
/home/tlhl28/music/current_listenling/苏打绿_日光.mp3
#EXTINF:270,Linkin Park - New Divide
/home/tlhl28/music/current_listenling/Linkin Park-New Divide.mp3
#EXTINF:227,Linkin Park - Numb [Live At Milton Keynes]
/home/tlhl28/music/current_listenling/Numb [Live At Milton Keynes].mp3
#EXTINF:231,Linkin Park - In The End [Live At Milton Keynes]
/home/tlhl28/music/current_listenling/In The End [Live At Milton Keynes].mp3
#EXTINF:201,Linkin Park - Qwerty (Studio Version)
/home/tlhl28/music/current_listenling/Qwerty (Studio Version).mp3
#EXTINF:330,ÁÖ嶼Π- ÉñÃؼαö
/home/tlhl28/music/current_listenling/神秘嘉宾.mp3
#EXTINF:291,郭采洁 - 又园了的月亮
/home/tlhl28/music/郭采洁/°®ÒìÏë/00. 又园了的月亮.mp3
#EXTINF:264,郭采洁 - 你在,不在
/home/tlhl28/music/郭采洁/°®ÒìÏë/00. 你在,不在.mp3
#EXTINF:302,ÎåÔÂÌì - Ö¾Ã÷Óë´º½¿
/home/tlhl28/music/current_listenling/五月天-志明与春娇.mp3

 

 

呃....有乱码..赶着回家,下次再弄这个乱码问题....

应该可以用简单的脚本导出来。

不过有空格呢.....在文件里加 "\" 处理。还是不行。上网找解决方法了,还是依赖google搜索....有空在自己思索思索,没基础嘛~

以下命令解决....简单...

 

cat likes.m3u | while read line; do cp "$line" mus/; done

 

 

G2 Tim版 刷root权限

前段时间入手了G2。Htc Tim 版的....穷人,没办法。


买来后马上装了个SUBS。是个终端,卖机器的人帮我刷的ROM里没有超级终端.....

在终端弄了一下。什么都说“Permission denied"....不爽........

于是。我就去hiapk看看怎么刷root了。  关于G2刷ROOT的文章呢.....我几乎找不到..可能是我没找到....G3的就有.

因为要用到 recovery.img。 在我找到所有版本的recovery.img之前都是找到g3的..菜鸟..到处乱找。

linux的平台的帖子就更少了....

于是在Windstorm 找到了教程 archlinux系统下操作的..不过是G3。我就试试好了...

下了cm-hero-recovery.img。按照那个教程一步步做,到最后准备apply update.zip from sd card的时候,没反应。

按什么都不能确定..只能高亮选择.......受不了,刷机!!刷ROM!!

后来找了4个 recovery的 img来刷。都尽不了recovery界面。只有cm-hero-recovery.img可以........可是不让你刷。

弄了一个晚上。G2给我重启了N遍... = =. 很顽固,顽固的android,我想刷机!!

到最后快放弃了》。。。在进入到recovery界面,但又很无奈的情况下。无助的在终端里输入 "su" ...

提示:“/sbin/su not found”(好像是这句)。

傻傻的瞄了这句话一下~~惊醒。不是"Permission denied"!!!!(之前用adb shell 和在终端输入都是提示这个...找不到或者没有权限)


兴奋,兴奋。有希望拉!

adb shell mount /system
adb push su /system/bin/
adb shell chmod 4755 /system/bin/su
adb push Superuser.apk /system/app/
adb shell reboot

ok......拿到root权限了....

后来才发现....原来我很着急...没好好看文章...

PS.打完发现是流水帐,很烂的流水帐...想删的....算了,都打那么多了....)

 

 

 

pre: Google Web Toolkit

 

Learning to writting in english:

I have followed the Google Web Toolkit official tutorial to build the StockWatcher few  day ago.

Just a basic understanding of it. At once, I want to use it to build some app. But not yet now(Maybe I always say that.Although it is very difficult,  I believe I can change this situation.Come on~)


ok~ the next is...

Learn to build a simple python/django web app. bless me~ : ).

pacman:error:failed retrieving file

之前执行更新.

 

pacman -Syu
Password:
:: Synchronizing package databases...
 core is up to date
 extra is up to date
error: failed retrieving file 'community.db.tar.gz' from mirror.lupaworld.com : Requested Range Not Satisfiable
error: failed retrieving file 'community.db.tar.gz' from mirrors.163.com : Requested Range Not Satisfiable
error: failed retrieving file 'community.db.tar.gz' from public.gooth.cn : Not Found
error: failed to update community (Not Found)
 archlinuxfr is up to date
:: Starting full system upgrade...
resolving dependencies...
looking for inter-conflicts...
error: failed to prepare transaction (could not satisfy dependencies)
:: poedit: requires db<4.8

一直以为是源的问题, 可是过了N天后,还是那样,搜了下,没发现结果(可能是没细心看)

今晚,再搜了下, 看到了说要在

 

/etc/pacman.conf

去掉其他的下载方式。我没有用其他的下载方式, 所以添加wget 下载方式:

 

XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u

错误依旧是:

   :: poedit: requires db<4.8

 

原来是 db 这个东西不能用.......更新错误提示那也有......= =

把poedit 更新了就OK了.......

 

= =. 这段代码...

 

本人比较笨,运行了三次, ruby => python => perl =>......

不运行了....

# ruby
l=92.chr;eval s="s=s.dump[r=1..-2].gsub(/("+l*4+"){4,}(?!\")/){|t|'\"+l*%d+\"'%(t.size/2)};5.times{s=s.dump[r]};puts\"# python\\nprint(\\\"# perl\\\\nprint(\\\\\\\"# lua"+l*4+"nprint("+l*7+"\"(* ocaml *)"+l*8+"nprint_endline"+l*15+"\"-- haskell"+l*16+"nimport Data.List;import Data.Bits;import Data.Char;main=putStrLn("+l*31+"\"/* C */"+l*32+"n#include<stdio.h>"+l*32+"nint main(void){char*s[501]={"+l*31+"\"++intercalate"+l*31+"\","+l*31+"\"(c(tail(init(show("+l*31+"\"/* Java */"+l*32+"npublic class QuineRelay{public static void main(String[]a){String[]s={"+l*31+"\"++intercalate"+l*31+"\","+l*31+"\"(c("+l*31+"\"brainfuck"+l*64+"n++++++++[>++++<-]+++++++++>>++++++++++"+l*31+"\"++(concat(snd(mapAccumL h 2("+l*31+"\"110"+l*31+"\"++g(length s)++"+l*31+"\"22111211100111112021111102011112120012"+l*31+"\"++concatMap("+l*32+"c->let d=ord c in if d<11then"+l*31+"\"21002"+l*31+"\"else"+l*31+"\"111"+l*31+"\"++g d++"+l*31+"\"22102"+l*31+"\")s++"+l*31+"\"21002111010120211222211211101000120211021120221102111000110120211202"+l*31+"\"))))))++"+l*31+"\","+l*63+"\""+l*64+"n"+l*63+"\"};int i=0;for(;i<94;i++)System.out.print(s[i]);}}"+l*31+"\")))))++"+l*31+"\",0};int i=0;for(;s[i];i++)printf("+l*63+"\"%s"+l*63+"\",s[i]);puts("+l*63+"\""+l*63+"\");return 0;}"+l*31+"\");c s=map("+l*32+"s->"+l*31+"\""+l*63+"\""+l*31+"\"++s++"+l*31+"\""+l*63+"\""+l*31+"\")(unfoldr t s);t[]=Nothing;t s=Just(splitAt(if length s>w&&s!!w=='"+l*31+"\"'then 501else w)s);w=500;f 0=Nothing;f x=Just((if x`mod`2>0then '0'else '1'),x`div`2);g x= reverse (unfoldr f x);h p c=let d=ord c-48in(d,replicate(abs(p-d))(if d<p then '<'else '>')++"+l*31+"\"."+l*31+"\");s="+l*31+"\"# ruby"+l*32+"n"+l*31+"\"++"+l*31+"\"l=92.chr;eval s=\"+(z=l*31)+\"\\\"\"+s+z+\"\\\""+l*31+"\"++"+l*31+"\""+l*32+"n"+l*31+"\""+l*15+"\""+l*7+"\")"+l*4+"n\\\\\\\")\\\")\"########### (c) Yusuke Endoh, 2009 ###########\n"

 

 

About DWR ScriptSession

this article is talking about what wo need to pay attention to the issue of ScriptSession. Providing the URL is don't

DWR推技术在开发中需要注意的ScriptSession问题

 

 Because don't want to going on showing my poor english, stoping writing in english here. next times will go on!

其实该文章中的说到的几点我都在前几天对DWR的折腾中了解到了.....有人总结了,就记录一下。

但是,我是出现了个很莫名奇妙的问题,我使用了DWR3.0 R1 的 new feature , ScriptSessionListener : interface.

 since  implement this interface, we should override two function:sessionCreated(ScriptSessionEvent e) and sessionDestoryed(...).

当有 ScriptSession 被创建的时候, 就会执行 sessionCreated() 方法。 这时候就可以对 HttpSession 和 创建的 scriptSession 进行绑定了..

另一个就做相反操作。

网上有些人的问题是这两个方法没有被调用...但是,我的情况是,每创建一个scriptSession 就会调用 sessionCreated() 很多次...而sessionDestoryed() 就正常调用...... = =. 目前来说没有找到有相同情况的.....搞不懂什么原因了.....

根据网上的资料,我没有在web.xml配置文件里对 implements 进行声明,如下例子:

 

		<init-param>
			<param-name>
				org.directwebremoting.event.ScriptSessionListener
			</param-name>
			<param-value>
				listener.ScriptSessionListenerImpl,
			</param-value>
		</init-param>

不知道是不是这个原因, 觉得应该不是,,,,明天试试....

 

 

 

 

RoundedCorner without picture

mark.

I'am sorry that i forget where it is come from.

I just google it.

Follow are the code.RoundedCorner

<html>
    <head>
    <style type="text/css">
        div.RoundedCorner {
            background:#9BD1FA
        }
        b.rtop, b.rbottom {
            display:block;
            background:#FFF
        }
        b.rtop b, b.rbottom b {
            display:block;
            height: 1px;
            overflow:hidden;
            background:#9BD1FA
        }
        b.r1 {
            margin:0 5px
        }
        b.r2 {
            margin:0 3px
        }
        b.r3 {
            margin:0 2px
        }
        b.rtop b.r4, b.rbottom b.r4{
            margin:0 1px;
            height:2px
        }
    </style>
</head>

<body>
    <div class="RoundedCorner">
        <b class="rtop"> 
            <b class="r1"> </b>
            <b class="r2"></b>
            <b class="r3"></b>
            <b class="r4"></b>
        </b>
        <br> test test test test <br>
        <b class="rbottom">
            <b class="r4"> </b>
            <b class="r3"></b>
            <b class="r2"></b>
            <b class="r1"></b>
        </b>
    </div>
</body>
</html>