易栈网-膘叔

浏览模式: 标准 | 列表 | 图文
支持智能手机的JS框架

支持智能手机的JS框架

智能手机现在是越来越被大众接受,即使是诺基亚那可怜的S40,也能将就着算是智能机吧。关键这些智能机里都有一些浏览器了。比如opera mini,opera mobile之类的,再象android那样的话就是Webkit,IOS也算是Webkit核心了(ff也要登录android之类的),opera也在各个平台都有着自己的版本。因此,我们可以假设,只要是智能手机,都能支持一些简单的JS了。但是我怎么知道哪些浏览器支持的JS在其他浏览器上不支持呢?如果只用最简化的功能,那意义就不大了。因此,支持智能手机的JS框架就比较让人心动了。

一、jQuery Mobile

jQueryMobile不像前面SproutCore 或者Sencha Touch,它没有提供一个完整的应用架构。但它是一个新的开始,其也以向移动网站应用提供更多本地化的控制为宗旨。jQuery Mobile项目宣布其要成为“完整的,统一的,移动UI架构”。 jQuery Mobile核心项目也将继续为移动提供优化,但jQuery Mobile更专注于为主流智能手机浏览器提供一种真正的顶级的JS体验和界面。

官方网址:http://jquerymobile.com/

支持列表:http://jquerymobile.com/gbs/

二、Sencha Touch

Sencha前身是Ext JS ,全名是Sencha Touch HTML5 mobile framework.它提供一种可跨平台的架构,目前支持IOS,Android将在不久后得到支持。这种在线摸触摸技术结合了一个UI库的独立解决方 案,触摸项目管理、地理技术支持、离线缓存技术以及特殊的CSS和CSS3功能。

官方网址:http://www.sencha.com/products/touch/

演示地址:http://www.sencha.com/products/touch/demos.php

三、YUI 3.2

雅虎将发布最新的JS实用程序的YUI库。YUI最新版对触摸和移动设备提供更多更好的支持

官方网址:http://yuilibrary.com/

四、iUI

iUI是一个iPhone用户界面架构,其设计目标是像移动网站应用提供更接近iPhone的体验。它的工作原理是结合WEBKIT为基础的设备以及包括一个JS库和CSS及图形。其最早追溯至2007年,但多年以来缓慢地升级以提供更多其他设备,甚至是iPad。

官方网址:http://code.google.com/p/iui/

五、SproutCore

SproutCore是一个HTML5的架构,目标帮助开发者建立桌面口径的web应用,并且支持任何浏览器下无需补丁的运行。其项目带头大哥已经辞去了其原本苹果的职位,专心致志地来完成此项目。

官方网址:http://www.sproutcore.com/

演示地址:http://demo.sproutcore.com/

六、XUI

在开发Phonegap时,XUI团队对应用于移动设备的现存JS库及表现很失望。XUI创建的初衷是跨多个移动浏览器工作,其包括WEBKIT,Fennec,Opera。其目标是为低成本条件下解决传统JS库不适合移动浏览器,提供更多跨兼容的方案。

官方网址:http://xuijs.com/

英文原版:http://mashable.com/2010/08/18/mobile-web-app-frameworks/

内容来自:http://www.biaodianfu.com/make-your-mobile-websites-act-like-apps.html

JavaScript—计算图片加载的张数

看到cssrain.cn上这篇博客介绍的不错。挺有意思,虽然这个功能在很久以前就有人实现过。。。但现在看来又有不同的感觉
或许大家都记得,在几年前,网页特效中就有一个效果是网页正在下载数据,请稍等。然后是一个进度条,等完毕后,网页就打开了。其实说的就是Cssrain上的效果。不过几年前没有想过要兼容如今这么多的浏览器。所以,还是可以再了解一下(相册网站之类的可能会需要)
----START--

先定义一个图片的数组,然后通过image的onload事件来计算,注意,onload在ie和火狐有所不同。

最后需要一个进度条与之结合即可。

这个脚本在做游戏的地方用得比较多。

http://cssrain.cn/demo/plantsvs/loadImg.html
源码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
*{
margin:0;
padding:0;
}
body{font-size:12px;}
/*不带文字*/
.progress{
border:0;
width: 152px;
height: 18px;
background:url(http://www.cssrain.cn/demo/makeProgress/img/progress.gif) no-repeat -100px 50%;
}
/*带文字显示*/
.progressbar_3{
width:152px;
position:relative;
height:18px;
text-align:center;
position:relative;
color:#222;
}
.progressbar_3 .text{
width:152px;
position:absolute;
left:0;
top:0;
height:18px;
line-height:18px;
z-index:100;
}
.progressbar_3 .progress{
width:152px;
position:absolute;
left:0;
top:0;
height:18px;
z-index:10;
}
</style>
<script language="javascript">
var PicAr=[['http://www.cssrain.cn/images/bg.jpg','背景'],
['http://www.cssrain.cn/images/c1.png','卡片'],
['http://www.cssrain.cn/images/c2.png','卡片'],
['http://www.cssrain.cn/images/c3.png','卡片'],
['http://www.cssrain.cn/images/c4.png','卡片'],
['http://www.cssrain.cn/images/c5.png','卡片'],
['http://www.cssrain.cn/images/c6.png','卡片'],
['http://www.cssrain.cn/images/c7.png','卡片'],
['http://www.cssrain.cn/images/c8.png','卡片'],
['http://www.cssrain.cn/images/sephira_software.png','卡片栏'],
['http://www.cssrain.cn/images/tragic_phantom.png','剪草机'],
['http://www.cssrain.cn/images/yahoo.gif','游戏LOGO界面'],
['http://www.cssrain.cn/images/Control/Pic2.jpg','简介背景'],
['http://www.cssrain.cn/demo/24_pages/image1.gif','image1'],
['http://www.cssrain.cn/demo/24_pages/image2.gif','image2'],
['http://www.cssrain.cn/demo/24_pages/meneame.jpg','简介背景'],
['http://www.cssrain.cn/demo/24_pages/25css.jpg','简介背景']
];


var LoadAccessNum=0; //载入成功的图片数量

function $(id){
return(document.getElementById(id));
}

/*--------以下是载入图片进度条--------*/
var Browser=new Object();
Browser.userAgent=window.navigator.userAgent.toLowerCase();
Browser.ie=/msie/.test(Browser.userAgent);
Browser.Moz=/gecko/.test(Browser.userAgent);

function LevelLoadProgress(){
var PicNum=PicAr.length;
$('text').innerHTML='正在准备载入游戏素材...';
$("progress").style.backgroundPosition= "-150px 50%";
for(n=0;n<=PicNum-1;n++){
Imagess(n,PicAr[n][0],"img"+n,checkimg);
}
}

function Imagess(n,url,imgid,callback){
var val=url;
var img=new Image();
if(Browser.ie){
img.onreadystatechange =function(){
if(img.readyState=="complete"||img.readyState=="loaded"){
callback(img,imgid,n);
}
}
}else if(Browser.Moz){
img.onload=function(){
if(img.complete==true){
callback(img,imgid,n);
}
}
}
//如果因为网络或图片的原因发生异常,则显示该图片
img.onerror=function(){img.src=val;img.onreadystatechange=null;}
img.src=val;
}

//检测图片加载
function checkimg(obj,imgid,n){
LoadAccessNum+=1;
var PicNum=PicAr.length,ReduceX=150/PicNum,imgFlagHeadLeft=139-LoadAccessNum*ReduceX;
$('text').innerHTML='载入:'+PicAr[n][1]+'('+LoadAccessNum+'/'+PicNum+')';
var a = parseInt(LoadAccessNum*ReduceX) ;
$("progress").style.backgroundPosition= (a-150)+"px 50%";
window.status=LoadAccessNum;
if(LoadAccessNum==PicNum){
$('dFlagMeter').style.display='none';
LoadAccess();
return false
}
}
/*--------以上是载入图片进度条--------*/

//调用载入图片进度条LevelLoadProgress(),载入成功后执行LoadAccess();
function LoadAccess(){
$('dFlagMeter2').style.display='block';
}

</script>
</head>
<body onload="document.execCommand('BackgroundImageCache',false,true);LoadAccess();">

<div style="position: absolute; z-index: 255; left: 260px; top: 150px;" id="dFlagMeter">
<table width="500" height="40" cellspacing="0" cellpadding="0" bordercolor="#000000" border="0">
<tbody><tr>

<td width="343" valign="top">
<div class="progressbar_3">
<div id="text" class="text">正在准备载入游戏素材...</div>
<img id="progress" class="progress" width="152" height="18" title="100%" alt="100%" src="http://www.cssrain.cn/demo/makeProgress/img/bg.gif" style="background-position: -150px 50%;"/>
</div>
</td>
</tr>
</tbody>
</table>
</div>

<div style="display:none;position: absolute; z-index: 254; left: 260px; top: 150px;" id="dFlagMeter2">载入成功!</div>


<script type="text/javascript">
LevelLoadProgress();
</script>
</body>
</html>
遭遇ISP劫持?

遭遇ISP劫持?

不得不承认,2345是个垃圾站。如果没有今天这个情况的出现,或许我还愿意承认这个站点,但现在,我非常愤恨。
登录自己的博客花了很久,主要原因就是发现在连接时候,居然多了个forward和proxy,因为不明白原因,所以google了一下,找到了这篇文章 :又被ISP劫持了,原来和我有同样问题的人在。
因为我没有仔细研究,也没精力来研究。我连登录都花了将近半小时。。。。所以就COPY上面说的那个链接的内容了。
----------start---------------

最近上网时遇到过几次访问域名跳转到http://221.231.148.195/forward.html?url=XXXXXXXX然后就没反应的情况,多次发生后不由得让人怀疑。今天查理一下221.231.148.195这 个IP地址是南京电信的。我访问的是一个英文博客,不知道是哪国的但肯定不是中国的。一开始以为DNS被劫持了,所以手动查询DNS,用 WireShark查看没有伪造的数据包。通过国外的线路查询得到的结果是一样的,检查返回的IP确实是对方网站的。Ping对方的IP不通,通过国外线 路可以Ping通,看来劫持是在网络层。

使用WireShark记录HTTP会话的内容,发现第一次访问时返回内容如下。

HTTP/1.1 302 Object moved
Location: http://221.231.148.195/proxy.html?e=xxxxxxxxxxxxxxxxxxxxxxxxxx
Content-Length: 20
Content-Type: text/html
Connection: close
Expires: 0
Cache-control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

<body> ... </body>

浏览器自动请求跳转地址再次返回另一个跳转。

HTTP/1.1 302 Moved Temporarily
Server: nginx/0.7.65
Date: Thu, 12 Aug 2010 00:58:42 GMT
Content-Type: text/html
Content-Length: 161
Connection: close
Location: http://221.231.148.195/forward.html?url=原来请求的URL

<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>nginx/0.7.65</center>
</body>
</html>

但是在我的浏览器里这一次跳转没能再返回任何东西,如果能的话会是以下内容

<html>
<head>
<script type="text/javascript" src="/js/jquery.min.js"></script>
<script type="text/javascript" src="/js/jquery.cookie.js"></script>
<script type="text/javascript" src="/js/jquery.query.js"></script>
<script type="text/javascript">
$(function(){
var value=$.cookie('_GB_ADV_STATE');
if(value==undefined){
$.cookie('_GB_ADV_STATE',"1",{expires:1});
window.location.href="/index.htm?3007";
}
else{
window.location.href=$.query_reg("url");
}
});
</script>
</head>
<body>
</body>
</html>

可以看到如果没有_GB_ADV_STATE这个Cookie的设置Cookie并且会跳转到2345网址导航,如果有这个Cookie的就再跳转到原来要访问的地址。Cookie的有效期设置是一天。 另外在我的Cookie里发现了cnzz_eid的东西,2345网址导航里也嵌入了访问统计的脚本,怀疑2345网址导航在利用这种劫持手段骗取独立访问数。

让我们大家一起谴责这种行为

  • 对方的服务器默认TTL用的是64,而劫持服务器返回的包到达我这里是2xx所以肯定不是原服务器的。TCP的建立时返回的SYN ACK包的TTL是5x,但是HTTP响应的第一个包是2xx。
  • 从代码判断,劫持设备只劫持短期内的第一次访问。不然会死循环。
  • 为什么这两天出问题了,一直死循环跳不到要去的页面了,难道劫持设备出错了?数据包显示在第二次访问时还是被劫持了。所以死循环了。

---OVER--
我没有找到上面的COOKIE,或许消失了(最后稍微正常了,果然发现了这个cookie)。或许有其他情况,反正我是在发现打开网站要很长时间后,我用firebug的net功能查看的,发现多了一个foward.html和proxy.html的记录。才想到用google搜索类似问题的。唉。什么时候有个清静的网络 ?你要做站你就做,你愿意花钱也没啥事,你不能拿普通站长的站来开心吧。我不能代表大多数人,我只能代表我自己谴责一下类似事件的发生。TMD,给我滚

Editplus 自动检查语法

Editplus 自动检查语法

用惯了IDE写PHP,再次回到Editplus的时候总有点不太习惯,比如没有函数提示了(当然也可以自己打造)。不过。。语法检查总还是需要的,总不能自己程序传到服务器上后运行了才知道语法有问题吧?于是利用Editplus的小功能aftersave。改造了一下。

进入editplus的选项设置,点击左侧的User tools菜单,在右侧的Group and Tools下拉框中选择 AutoSave:after save。

1eb4da3ab0048828ba2a29d3c4545c6a

在右侧的 add tool里选择 program。然后输入:标题,程序所在位置,以及参数。。

php语法检测是php.exe -l filename,这个可以通过命令行下运行 php -? 了解。然后要catch output,以及针对current file。。

OK,这样就over了。

看看效果?

95ce8150adb63552a893ffe8e83d2ddb

DNS无法连接了?

DNS无法连接了?

众所周知,8.8.8.8和4.3.2.1等算是google的public dns。好久以来,我已经不再使用上海热线的公用DNS:202.96.209.6和202.96.209.5了。虽然这两个DNS的速度会比较慢一点。但我还是一直在使用。直到今天晚上

突然不能访问任何网页。我本来以为是我的路由器的问题,于是乎重启路由看什么原因,但结果失败了。但QQ能够正常登录。结果也在QQ里发现有几个人也遇到同样的问题。然后希望打电话给我,也是说这个问题。原来,不是我一个人在纠结。

于是,我心里就乱想了。为什么呢?这是为什么呢?这究竟是为什么呢?不敢乱猜了,在DNS里把202.96.209.6加上,并通过排序放在第一个。然后就可以连接上了。

再ping 8.8.8.8又能ping通了。但愿是我多想了。阿门

笔记:svn之目标机器积极拒绝

笔记:svn之目标机器积极拒绝

在以前的博客文章里也介绍了怎么安装svn的,昨天我又重装了一下,不过是按照网上的教程来装的。所以遇到了点问题,那就是:目标机器积极拒绝。
安装过程如下:
$apt-get update
$apt-get install subversion
$mkdir /var/svn/
$useradd svn
$passwd svn
$chown -R svn:svn /var/svn
$svnadmin create /var/svn/test
$vim /var/svn/test/conf/svnserve.conf
把几个注释去掉。。。。
$vim /var/svn/test/conf/passwd
添加用户
$vim /var/svn/test/conf/authz
增加权限
$svnserve -d -listen-port 9999 -r /var/svn
表面上看来没什么问题。但事实上连接的时候就是目标机器积极拒绝。。
仔细想了想,应该没什么问题。看了一下进程,也确实存在 svnserve:ps -ef|grep svnserve
那问题出来哪里呢?突然想到-listen-port ,会不会端口的问题?于是杀掉进程后
$svnserve -d -r /var/svn
然后就可以连上了。。
做个记录

乱弹

乱弹

随便的扯几句喽。。。
1、ipad ,突然发现sbsetting的功能超强大啊。。我明明在ipad里选择了飞行模式,居然可能通过sbsetting打开wifi。而且飞行模式的小飞机居然还存在。牛叉的。。

2、电视连续剧《儿女冤家》,突然感觉里面的情节好真实,这是自《蜗居》以来又一个让人心动的电视。看到电视里的人物,心里觉得好揪心,啃老族这一个词已 经成了一个很让人烦的词语。有的时候,我也觉得自己也算一个啃老族 啊。工作这么多年,也成家了,却几乎没有拿过一分钱回过家。看到电视里的那对儿女,却是比我还厉害。不但吃父母用父母还要占父母的房子。唉。。。。。因为 没有看过结局,所以我就不再多下评论了。

3、乔楚乔大姐,又想带队翻译PHP手册了。感觉乔楚还算是很专注的一个人,但事实上,翻译这种事情,一定要对PHP很深入才能翻译,否则翻译出来很可能 词不达意。所幸他们还会再做校验。同时乔楚发邮件给官方,并收到邮件,终于也可以使PHP中文版在下载列表里显示出来了。(都2年多了,中文手册一直被雪 藏。。感谢乔楚)

4、Yii,最近我在看着Yii,并且根据Yii的代码抄一遍。这样感觉一来可以学习Yii的代码,可以更深入一点。二来,也可以了解Yii的一些设计思 想。Yii的代码还算是比较多的,而且多了一些zii,gii之类的扩展,功能是越来越强大了。只是Yii已经只支持PDO了。准备在抄的过程中还是要支 持一下默认的mysql扩展。(因为有的虚拟主机在命令行的时候,不支持PDO,很妖)

GreaseMonkey with jQuery

GreaseMonkey with jQuery

习惯了用jQuery,因此在使用greasemonkey的时候,也总是想着用jQuery,找了下,确实有这样的例子。。

var $;

// Add jQuery
(function(){
if (typeof unsafeWindow.jQuery == 'undefined') {
var GM_Head = document.getElementsByTagName('head')[0] || document.documentElement,
GM_JQ = document.createElement('script');

GM_JQ.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
GM_JQ.type = 'text/javascript';
GM_JQ.async = true;

GM_Head.insertBefore(GM_JQ, GM_Head.firstChild);
}
GM_wait();
})();

// Check if jQuery's loaded
function GM_wait() {
if (typeof unsafeWindow.jQuery == 'undefined') {
window.setTimeout(GM_wait, 100);
} else {
$ = unsafeWindow.jQuery.noConflict(true);
letsJQuery();
}
}

// All your GM code must be inside this function
function letsJQuery() {
alert($); // check if the dollar (jquery) function works
alert($().jquery); // check jQuery version
}

然后代码就得全部扔在letsJQuery()方法里了。
由于是async,所以,尽量选择快一点地址,比如本地的localhost之类的,HOHO,不过,这就得本地WEB服务常开了。

原文来自:http://joanpiedra.com/jquery/greasemonkey/

关注几个同步软件

关注几个同步软件

Dropbox这软件恐怕也不用多介绍,大家都明白。国内类似软件也有不少。不过我真的不太想用这类类似软件。
我想要什么 ?我想要有dropbox这类软件的功能,但可以自主控制,比如我可以使用FTP来做这事,做一类似于SVN的事情。因为使用ftp或者sftp,对数据可以完整的控制,也不再受限。对于一些比较重要的文件,自己也能够放心的存储 。
找了一下,大约有以下几款软件可能会符合我的要求,但还没有尝试。不过我得尝试一下,下周就是我的尝试了。。。
1、DirSync Pro,不过,看介绍好象不能同步远程的。http://www.dirsyncpro.org/features.html,看了一下是不支持。
2、Capivara 是一个支持 SFTP 和 FTP 的文件同步工具,采用 Java 语言开发。通过对文件的时间戳和 SHA-1 哈希值进行文件的比较以便决定是否同步,同时可预览即将进行的同步操作,防止一些误操作。http://capivara.sourceforge.net/,这个是用java,就是不知道效率怎么样。
3、OpenPiczzais是一个免费版本的Piczza文件传输服务。它可以让你可以安装自己的Piczza服务功能。(事实上我真没仔细看,不过看到居然有openpiczza服务,所以准备尝试一下)

总之,也希望看到本文的朋友推荐一些软件(需要支持自己的FTP服务,就象xmarks之类的)。总之最后如果再不行了就只有SVN或者GIT了。其实上我不需要版本控制,但如果有变动,总能够覆盖或合并本地吧?

ipad 常用软件

ipad 常用软件

我的ipad上有几个常用的软件,嗯横。我比较不太喜欢装软件,所以在用的一般就会一直用下去。

1、good reader 这个,是看书的,除了不支持chm,其他几种基本都支持了。为此我买了正版。0.99刀,但遗憾的是。。。我居然装了看不到图标了。更遗憾的是,单位的IP是192.168.10网段,而无线却是192.168.1的网段,因此,good reader在开通wifi的时候却显示让我们使用192.168.10网段。于是乎,这个功能我就永远无法使用了。

2、pinball ,这个就不用多说了。。。

3、愤怒的小鸟。。。娱乐软件

4、会说话的TOM。给小朋友玩的。

5、植物大战僵尸,纯属娱乐。。。

6、UC,看wap网页的。。。

7、readdleDocs。。本来以为这个才能看word,事实上,有很多都可以。。比如goodreader。所幸good reader显示不出的时候,它能够显示

8、金山快盘。之所以用这个,是因为wps中有个快盘可以存word之类的,所以我可以利用ipad来同步一些资料

9、evernote。。因为,手机上有,电脑上有,所以。。。理所当然喽。