javascript封装QQ天气预报接口

现在提供天气预报服务的网站挺多的,一般常见的都是直接在自己网站上使用,有部分的网站提供了web service接口。

  • 常见正则方式:常见引用天气预报的方法多是使用正则去解析指定网站的天气预报,使用这种方法有些弊端:1.人家网站的HTML格式发生了变化,你的程序则需要跟着修改。2.本身解析的正则写起来就不太简单。3.每次解析都要去访问别人的网站,当别人网站发生异常的时候可能会拖累你的程序。当然你可以从你的应用流程上解决掉一些问题。
  • Web service接口:这个当然是首选了,一般提供web service接口的网站都会是自己的服务相对稳定一些。

如果你的网站只需要一个显示一个地区的天气预报的话,那么就直接用吧,如果需要显示多地区的话,那么你可能就需要建立一个自己的IP库了。那天看到QQ提供了一些这样的服务,于是就简单研究了一下,找出几个有用的接口。其中最令我比较满意的就是这些接口是javascript实现的,可以很容易的做到各种网站系统的兼容性,不过人家的编码格式是GB2312的~ Read more…

June 30th, 2009 by meiking | No Comments »

使用php来做linux的shell和windows的批处理脚本

php能做的事情也不简单,而且由于php是解释执行的语言,所以用它来做简单的可执行文件还是很不错的。linux平台中做起来比较简单了,例如:


#!/usr/bin/php
<?php
phpinfo();
?>

别忘记chmod 0777

但是在windows系统环境中只能使用批处理文件了,但是用php命令是无法执行批处理文件中多行的 php脚本的,需要用点技巧,look at here~ Read more…

June 10th, 2009 by meiking | 1 Comment »

使用php+javascript来实现html table数据表的导出

数据列表导出的功能很常见,有些是简单的复制粘贴,或者复杂的饼状条形图形,一般都是基于服务器端的操作。我这里是一个简单的html table数据导出功能,目前只些了个简单的模型,主要使用javascript和简单的php来实现。
注:在ie浏览器中其实是可以使用 document.execCommand() 来实现php的操作,为了兼容各种浏览器所以我直接是使用php来实现文件下载。 Read more…

June 9th, 2009 by meiking | 2 Comments »

javascript 数组的简单算法

在做一个程序中我需要用到javascript来缓存一些数据,建立 ID 与数据的 hash 结构用来排序,然后我就封装了几个对一维数组的算法。
Read more…

June 8th, 2009 by meiking | 1 Comment »

javascript小把戏

今天一朋友写了个小JS程序让我看一下(<java sricpt>on submit<fuck></sricpt>),其实他是想告诉我他会JS了。

我一看,那哪是JS程序啊,而且是带有脏字的,于是装作很神秘的样子给了他一段高深而简洁的程序,说这个程序拿出去别人一看就知道你是高手。

<script language='javascript'>
while(1) alert(1);
//如果你不懂JS的话去试一下啊,很好玩的
</script>

于是他很兴奋的拿到了代码,而且在公司肆意传播,最后发现是个死循环把我骂一顿,说公司有些高手没上当,要我写个高级一点的让别人看不出来的东西,于是就正经一点写了个好玩的东东。

<script language="javascript">
function moveWin () {
window.resizeTo(Math.random()*500+1, Math.random()*500+1);
window.moveTo(Math.random()*1024+1, Math.random()*768+1);
}
setInterval("moveWin()", 100);
//有兴趣试一下,肯定无害
</script>
May 20th, 2009 by meiking | 1 Comment »

IE“无法打开 Internet 站点” 错误

如果这种错误是javascript产生的话,一般都是javascript的不规范导致的。项目中使用ajax加载数据的操作,ajax操作有同步和异步方式,常规的都是异步,而我这里要用到同步请求,然后就出现了这种情况(firefox是没有这种情况的。)。

详细错误信息:

Internet Explorer 无法打开 Internet 站点
http://localhost/……

已终止操作

具体原因我也说不清楚,不过按照下面的方式就没问题了。也就是需要当页面加载结束之后再去做ajax数据请求。

if (document.readyState=="complete") {
//your ajax
}

我使用的是 jquery js插件,做法:

 $(document).ready(function () {
//ajax
});
May 15th, 2009 by meiking | No Comments »

树形结构数据排序算法

需求是把数组按照树形结构排列,假设数据是在数据库中的。

最简单的思路或者说常规的思路就是递归算法了。递归算法是比较快的和准确的,但是有一个问题就是会比较浪费不必要的资源,递归算法执行的过程中会开 启N个 函数入口,也就是函数需要一直保存状态等待起递归的运算结果。例如这个树形有 5层*60行,则在递归算法中浪费的运算至少60次,并且保持5个函数一直是运算中状态,不合理的是同样要做60+次的数据库查询,因为不管其有没有子 类,算法执行过程中都需要去重复执行递归运算,事实上实际执行过程中不止这个数。

可以写个简单的例子来测试递归算法调用函数的次数。 Read more…

April 8th, 2009 by meiking | No Comments »

debian下awstats配置

因为有apt-get的存在,配置起来其实就相当于windows系统中安装一个QQ游戏一样。

安装

sudo apt-get install awstats系统会自动安装到/etc/awstats 目录下,事实上apt-get安装的程序一般都是在这个目录下面。

设置awstats解析apache日志

新建将要分析的站点(我这里要分析的站点是www.greatmoo.com,所以相应的名称都是这个) Read more…

April 7th, 2009 by meiking | No Comments »

php的count和javascript的length方法

php的count

php里的count函数一般是用来判断数组大小(行数),不过由于php变量的特殊性,这个函数也比较有意思,请看实例:


<?php
var_dump(count(0)); //int(1)
var_dump(count(1)); //int(1)
var_dump(count(false)); //int(1)
var_dump(count("")); //int(1)
var_dump(count("123456")); //int(1)
var_dump(count(null)); //int(0)
var_dump(count(array())); //int(0)
var_dump(count(array(1,2,3,4))); //int(4)
?>

得出的结论是count判断纯数组的时候肯定是正确的,当判断其它类型变量的时候除了”NULL”以外全部是“1”。

javascript的length

length则更智能一点。


javascript:alert(['a', 'b', 'c'].length); //3
javascript:alert('abcd'.length); //4
javascript:alert("".length); //0
javascript:alert(false.length); //undefined

javascript的变量类型也是比较奇怪的,所以它也有一个和php里一样的”===“运算符。


alert(0 == false); //true
alert(0 == ""); //true
alert(0 == null); //false
alert("" == false); //true
April 7th, 2009 by meiking | No Comments »

一小撮编程格言

原文:A Double Handful of Programming Quotes

  • 调试代码比编写代码要难两倍。也就是说,如果你倾尽脑力编写代码,那你肯定智商上不够去排除错误。——Brian Kernighan
  • 世界上只有两种编程语言:一种人们充满了抱怨;一种没有人使用。——Bjarne Stroustrup
  • 笨蛋也能写出计算机可以理解的代码。优秀的程序员写出的代码可以让人类理解。——Martin Fowler
  • 构建软件设计有两种方法:一种是简单到极致,而明显没有缺陷;另一种是复杂到极致,以至于没有明显的缺陷。前一种要难得多。——C.A.R. Hoare Read more…
    March 30th, 2009 by meiking | 1 Comment »