修改三星Galaxy Note2 N7108(移动TD版)的下拉菜单顺序

换上了二胖,一切都好,就是下拉快速设置菜单顺序总是不顺手,系统没有提供调整顺序的功能,于是上网寻找方法,除了更换第三方的应用,就是寥寥无几的几个说可以修改SystemUI.apk里面的res\layout\quickpanel_quick_settings,可是到手的二胖的SystemUI里面根本没有这个文件,于是漫漫寻找。。。终于发现原来改到了res\values\arrays.xml里面了,更简单,直接修改<string-array name="QuickSettingButtonAttribute">章节的顺序即可!

SystemUI.apk
是需要反编译,修改文件后,再重新编译、签名的,具体方法可以Google搜索,教程大把,只把要点记录一下:

1
、安装jdkapktool

2、反编译准备
安装库文件,两个文件来自手机
/system/framework目录下,这里其实只用到了第一个
apktool.bat if framework-res.apk
apktool.bat if twframework-res.apk

库文件会被apktool缓存到类似C:\Users\XXX\apktool\framework\1.apk目录下,反编译不同版本的文件时,记得要先清除

3、反编译SystemUI.apk
这个文件在手机/system/app目录下
apktool.bat d SystemUI.apk

4、修改arrays.xml
在反编译出现的目录SystemUI\res\values\中,根据自己的喜好调整顺序即可,这是我的,头5个是在第一页可以都显示出来的,无需左右拖动,调整成最常用的
[quote]
<string-array name="QuickSettingButtonAttribute">
<item>MobileData</item>
<item>Wifi</item>
<item>Bluetooth</item>
<item>AutoRotate</item>
<item>SilentMode</item>
<item>Location</item>
<item>PowerSaving</item>
<item>DormantMode</item>
<item>AllShareCast</item>
<item>Sync</item>
</string-array>[/quote]
5、编译SystemUI.apk
apktool.bat b SystemUI SystemUI2.apk

如果提示错误invalid resource directory name,就需要更新一下apktool自带的aapt.exe文件版本,可以到Android开发包中去找,例如android-sdk_r10-windows/platform-tools中的就可以
下载


6、签名
APK实际是个ZIP文件,改后缀为zip,删除新包的AndroidManifest.xml,从旧包中复制AndroidManifest.xmlMETA-INF目录替换

7、安装
将新包改名为SystemUI.apk,拷贝会手机/system/app目录下覆盖原有文件,修改ownergroup和权限与原有文件一致。

强烈建议最后安装前到recovery
里面备份整个系统,以防止新文件有问题导致无法进入手机桌面,随时可以恢复!



完成!更新后发现会主屏壁纸设置丢失,重新设置一下就是了,其他正常。

这个只是移动版本NOTE2的修改方法,其他版本的NOTE2没有看到过SystemUI的情况,只要用的是同一结构的文件就可以。

如何将蓝光原盘压缩成720P的MKV

我采用的方法分为三个步骤:

1、Demux
将蓝光碟中的m2ts文件分解成视频、音频和字幕三个独立的文件,使用的软件是tsMuxeR,找到对应的m2ts文件(一般位于蓝光盘的\BDMV\STREAM目录下,一般找体积最大那个m2ts文件,但也有一些是分成了很多小文件的,用PortPlayer之类的播放器播放看看就知道),选择视频、对应的音轨和字幕(还是用PortPlayer播放看看音轨和字幕),再设置Demux方式和输出目录即可。


2、转换视频
使用ffmepg,将H.264编码的1080P原始文件缩小到720P,采用了2次编码的方法,以下是自己琢磨的参数,IN和OUT代表输入和输出文件名,使用命令行方式,速度就可看你电脑的性能了,在偶的i3 530CPU上,2小时10分钟的片子,需要10个小时左右:
ffmpeg -i IN -an -s 1280x720 -vcodec libx264 -level 4.1 -pass 1 -preset slow -f rawvideo -threads 0 -b:v 5000k -x264opts frameref=6:fast_pskip=0 -y nul

ffmpeg -i IN -an -s 1280x720 -vcodec libx264 -level 4.1 -pass 2 -preset slow -f matroska -threads 0 -b:v 5000k -x264opts frameref=6:fast_pskip=0 OUT

3、Remux
将转换后的视频、视频和字幕(可以是自己找的srt之类的格式)合并成为mkv文件,使用了mkvtoolnix中的mkvmerge工具(图形化界面mmg.exe),将相应的文件加入即可。如果有多个源文件,可以用append的方法合并成为一个mkv

MIUI ROM接收WAP PUSH短信的补丁

我的HTC Desire HD一直在用小米MIUI ROM,一切都好,唯有个问题就是收不到WAP PUSH的短信。在MIUI的论坛上叫了好久都没解决,于是决定自己尝试一下。

好久没碰Java了,又是第一次做Android的程序,发现对于WAP PUSH的编码资料很少,而且很多都不正确,好不容易折腾出来了个原型,基本满足自己的需要就差不多了。

此程序为MIUI ROM接收WAP PUSH短信的补丁,仅在HTC DHD和小米手机上测试通过(理论上Andoird 2.3.3或以上都应该可以)。


程序主界面:Andoird是消息驱动,安装包写好直接就注册到系统,使用时都不需要运行程序,主界面主要是信息提示


接收到第一条WAP PUSH信息时,MIUI会有一个接收WAP PUSH的授权,可以选择“下次不再询问”并“允许”就不会再出现了


接收到的WAP PUSH都存放到短信收件箱里面了,只是暂时没获取到手机号码,提供显示为“WAP PUSH”


MIUI 1.11.18官方版本已经支持
【短信】新增 短信支持WAP PUSH:http://www.miui.com/thread-329468-1-1.html
获取手机号码的问题MIUI开发组也进行了答复:源号码需要framework从sms header中提取,而wap push广播不带这个东西。应用层是无法实现的。

版本201109083
已知问题:
1)未获取到手机号码,发件人显示为“WAP PUSH”;
2)主界面和屏锁界面短信图标没有更新未读信息数量标识

版本20110908
已知问题:
1)未获取到手机号码,发件人显示为“WAP PUSH”;(Intent中Extra只有pduType, data, header, transactionId四个Bundle,貌似没发现有手机号码,header转换为byte[]长度只有1,内核问题?!)

安装包下载:WapPushReceiver.apk
源码下载:WapPushReceiver.rar

供爱好者参考学习,其中对于WAP PUSH数据的解析应该还是不很完整,不过测试了飞信PC客户端发送文件到手机、移动号簿管家客户端下载到手机、无线音乐12530音乐下载到手机发送的WAP PUSH都是可以正常解析的,只是MIUI的浏览器对于一些WAP接入的下载似乎支持还有问题,改用UC浏览器基本就没啥问题了。

一些网上搜索到的WAP PUSH资源:
《Another WAP Push over SMS encoding》:http://mobiletidings.com/2009/02/26/wap-push-over-sms-si-encoding/
《WAPPUSH 原理 基于短信网关WAP推送的实现》:http://tinymce.moxiecode.cp/mce_temp_url
《通过短信网关发送Wappush》:http://hi.baidu.com/lrxin0630/blog/item/e96e15d4e588e60aa18bb7da.html
《Android中WAP PUSH的实现分析》:http://www.iandroid.cn/bbs/android-9312-1-1.html
《Android 短信 彩信 wap push的接收》:http://blog.csdn.net/zengyangtech/article/details/5885508

如何在ipv4的主机中免费使用ipv6

无为而为 说两句:
不错,使用隧道突破了主机没有ipv6的问题
原文地址:http://www.hostloc.com/thread-66033-1-1.html

PHP的file_get_contents不支持gzip编码过的页面?

PHP的file_get_contents获取远程页面内容,如果是gzip编码过的,返回的字符串就是编码后的乱码

1、解决方法,找个ungzip的函数来转换下

2、给你的url加个前缀,这样调用
[quote]$content = file_get_contents("compress.zlib://".$url);[/quote]
无论页面是否经过gzip压缩,上述代码都可以正常工作!

PHP 4.3.0以后版本支持,还可以用于fopen之类的函数~!

ThinkPad X200 QQ语音对方听不到声音的解决方法

解决方法来源于:《解决X200声卡(conexant 20561)XP下不能QQ语音的问题》,原文地址:http://www.thinkpad.cn/forum/viewthread.php?tid=1078018&page=1(需要登录论坛才能看到内容)

即使是最新的X200声卡驱动依然有这个问题,解决方法是用东芝Satellite M300系列笔记本的XP声卡驱动代替原有驱动,下载地址为http://pcdrivers.toshiba.com.cn/upload/Satellite/M300/Conexant_Sound_Driver_V3.47.1.50.ZIP,解压后修改TE1HER5a.inf文件的[Conexant]段,在最后加一行[quote]%HdAudioFunctionDriver.Hermosa5051.DeviceDesc% = HdAudModel,HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_17AA20FF[/quote]
安装更新即可。

如何获取和展示视频网站内容的截图

互联网视频网站已经成为大家娱乐不可缺少的一部分,博客、微博、SNS都在大量的转发视频链接,如何在用户粘贴的视频网站链接后面增加对应视频的截图显示呢?这里提供我的解决思路和片段PHP代码。

1、如何在文本中获得URL?
获得诸如“http://www.xxx.com/.....”的URL地址,这个可以使用正则式来解决,执行后$urls就是输入$text字符串中找到的全部URL组成的一维数组:
[quote] preg_match_all("/(http:\/\/[a-z0-9:;&#@=_~%\?\/\.\,\+\-]+)/i", $text, $matches);
$urls = $matches[0];[/quote]

2、如何还原短链接?
在转发中,很多链接都被转换成了短链接,例如视频地址http://www.tudou.com/programs/view/K2xBz5JFBdY/在在转发中被转换成了短地址http://t.cn/hghgjz,一般主要是为了微博节省文字的长度。常见的方法是调用对应短地址的API,还原得到长地址,但是各个短地址提供的方法不一样。短地址实际就是在访问过程中,使用了HTTP 301跳转(Permanently Moved),会在返回的HTTP头中带上真实的地址,使得浏览器可以跳转,这样的话,我们就可以模拟浏览器获得原始地址即可。

片段代码如下,其中$s_url是短地址,$l_url是还原的原始长地址:
[quote]$SHORT_URL = array (
"t.cn",
"url.cn",
"tinyurl.com",
"goo.gl",
......
);

//检查是否是短地址
$found = false;
foreach ($SHORT_URL as $v)
{
$pattern = "/{$v}/i";
if (preg_match($pattern, $s_url, $ret) == 1)
{
$found = true;
break;
}
}

if (!$found)
{
//不是短地址,直接返回
$l_url = $s_url;
}
else
{

//模拟HTTP访问,还原短地址
$u = parse_url($s_url);
$host_ip = gethostbyname($u["host"]);
$host_port = 80;

$request_header = "";
$request_header .= "GET {$u['path']} HTTP/1.1\r\n";
$request_header .= "Host:{$u['host']}\r\n";
$request_header .= "User-Agent: Mozilla/5.0\r\n";
$request_header .= "Accept: */*\r\n";
$request_header .= "Cache-Control: no-cache\r\n";
$request_header .= "Connection: Close\r\n";
$request_header .= "\r\n";
$request_header .= "\r\n";

$fh = fsockopen($host_ip, $host_port);
fputs($fh, $request_header);
$response = "";
while(!feof($fh))
{
$response .= fread($fh, 1);
}
fclose($fh);

if (preg_match("/Location:(.*?)\r\n/i", $response, $ret) != 0)
{
$l_url = rtrim(ltrim($ret[1]));
}

}[/quote]

3、如何获取原始视频链接对应视频的截图?
常见的视频网站在视频播放页面的源码中都会有对应截图的URL地址,我们只需要打开视频地址,分析源码获取即可,这个就没有统一的方法来实现,例如土豆tudou的视频播放页面源码中看到类似“,thumbnail = 'http://i3.tdimg.com/080/946/236/p.jpg'”的这样一行,这个就是视频对应的截图地址。

片段代码如下,其中$url是视频网站地址,$img_url是对应截图URL地址:
[quote]//构建各个视频网站的截图地址分析正则式,这个需要根据不同网站的情况设定
$VIDEO_SITE = array (
"youku.com" => "/\+0800\|(.*?)\|\">/i",
"ku6.com" => "/<span class=\"s_pic\">(.*?)<\/span>/i",
"tudou.com" => "/thumbnail = '(.*?)'/i",
"56.com" => "/\"img\":\"(.*?)\"/i",
"video.sina.com.cn" => "/pic: '(.*?)'/i",
......
);

//检查是否是视频网站地址
$pattern_img = "";
foreach ($VIDEO_SITE as $k => $v)
{
$pattern_site = "/{$k}/i";
if (preg_match($pattern_site, $url, $ret) == 1)
{
$pattern_img = $v;
break;
}
}

//获得网页源码,分析截图URL
$content = file_get_contents($url);
preg_match($pattern_img, $content, $ret);
$img_url = $ret[1];[/quote]


最后,由于我们需要连接获取的数据的短地址和视频网站可能访问速度不快,如果有大量重复的URL要处理(例如“我的微博”,展现的是最新20条,所以在一定时间内反复访问的也就是这20条中的URL),所以可以考虑自己做本地缓存,我是采用将短地址和长地址、视频地址和截图地址的对应关系作为二维数组保存,然后serialize保存到缓冲文件,同时考虑了缓冲过期(我设定为7天)删除的刷法,以免累计的旧数据太多,这里就不详细写了。

OK,打完,收工~~~!

在xajax中控制函数的执行顺序

引子:xajax是一个开源的PHP类库,它能够让你黏合HTML、CSS、Javascrīpt和PHP,轻而易举的开发功能强大、基于WEB的AJAX应用软件. 使用xajax开发的应用软件,无需重新调入页面,就能够异步调用服务器端的PHP函数和更新内容。

xajax具体的用法不说了,直接说问题:想做一个页面的刷新效果,在获取数据过程中提示用户“正在获取数据”,数据获取完毕后,再将提示语替换成实际的数据,很简单,用xajax做两个PHP函数:
[quote]function show_loading()
{
...
$objResponse->assign("my_text", "innerHTML", "正在获取数据");
...
}

function show_data()
{
...
获取数据$data
$objResponse->assign("my_text", "innerHTML", $data);
...
}[/quote]
再用JavaScript调用
[quote]xajax_show_loading();
xajax_show_data();[/quote]
测试发现,大多数情况,都可以得到想要的结果,但是偶尔会出现一直是“正在获取数据”,无法展现数据的问题。检查发现这种情况数据是获取成功的,进一步debug发现是由于先调用的函数不一定先执行造成的,也就是show_data成功展示了数据,但又被执行较慢的show_loading用“正在获取数据”覆盖了本该显示数据,导致看起来像是获取数据失败,执行出错或卡死的感觉。

最初用了个笨办法,延缓获取数据和展示的行为,JavaScript改为
[quote]xajax_show_loading();
setTimeout(xajax_show_data(), 200);[/quote]
也能达到效果,但是方法很撮。。。


最后翻了xajax的文档,发现可以call或者script调用JavaScript,于是改为
[quote]function show_data()
{
...
$objResponse->assign("my_text", "innerHTML", "正在获取数据");
$objResponse->script("xajax_update_data()");
...
}

function update_data()
{
...
获取数据$data
$objResponse->assign("my_text", "innerHTML", $data);
...
}[/quote]
JavaScript改为
[quote]xajax_show_data();[/quote]

这样就可以确保先执行show_data更新等待提示语完成后,再执行update_data展现数据了。解决~~!

WIN7无法连接L2TP IPSec VPN

同一个L2TP IPSec VPN,在XP可以连接,但是在WINDOW7却不行,表现为很久都不进入校验用户名和密码的提示,最终超时。

对比XP和WIN7的安全配置如下:

XP默认使用的是“典型”,具体是啥子方法不知。


WIN7默认使用的是CHAP和MS-CHAP v2,没有类似XP“典型”的设置。


解决方式:
修改服务器端/etc/xl2tpd/xl2tpd.conf中refuse chap = no,重启xl2tpd,WIN7再连接就正常了

一体机

HP LaserJet Pro M1130 多功能激光一体机,集打印、复印和扫描一体。



激光黑白打印和复印效果都不错,1200出头,家用价格也相对合适,启动和扫描后扫描器件复位的噪声有点大。

更多参数可以看这里:http://h10010.www1.hp.com/wwpc/cn/zh/ho/WF05a/18972-18972-3328064-3328083-3328083-3965842.html

扫描对比:左边为冲洗出来的照片的扫描件,分辨率用的默认150dpi,未做调整;右边为数码原片缩小到对应尺寸。