低调推出goo.gl短网址服务

Address:


最简PHP框架

好久没更新了,一是自已越来越懒,二是,这段时间总是心烦意乱,很难静下心来。
不说了,看下面这个简单的php框架。虽然只有短短的137个字符(完全可以做为一条tweet),但却可以大致模似出CodeIgniter的用法。

1
2
3
4
5
6
<?php
$g=$GET;$c=@$g['c']?:'home';
if(!@require "c/$c.php") die('error');
$m=method_exists($c,@$g['m'])?$g['m']:'index';
$o=new $c; $o->$m($g);
?>

将以上代码保存为index.php,然后在index.php所在目录下新建C文件夹,把以下代码保存在C目录中,文件名为home.php。

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class home {
    function index()
    {
        echo "hello, world! fucking gfw!"
    }
 
    function user($para)
    {
        echo 'hello, '.htmlspecialchars($para['name']);
    }
}
?>

这样,当访问index.php时,将会执行默认控制器home的默认方法index。
访问index.php?m=user&name=sallon时将会执行home->user($para)方法。
新建控制器时,只需在index.php后指定c=’控制器名’就可以了。

正则啊正则

快被这几个正则给搞死了! 是用来匹配C语言中的/*…*/这样的注释,为了便于表示,将*替换为x,有以下三种方法:

/x([^x]|x+[^/])*x/

/x([^x]|x+[^/x])*x+/

/x[^x]*x+([^/x][^x]*x+)*/

第一个肯定是不对的,能够匹配过多的内容,比如 /xx A xx/ foo() /xx B xx/ .原因是,如果遇到…x/…, /迫使[^/]匹配了x,而下一轮迭代中的[^x]则正好可以匹配/,从而导致越过边界。 所以上边第二个正则中,使用[^/x]来迫使x+返还/前的所有x,这样可以达到匹配/x…x/的要求。

最后一个正则使用opening normal * (special normal *)* closing的形式,这样具有更高的匹配效率,首先匹配非x字符,然后是x,之后判断x之后是否为/,如果是,则结束匹配,否则进入下一轮special normal* 的循环。直到找到x后的/结束,完成匹配。

其实在第三个正则表达式中,最迷惑我的是special部分为什么用[^/x]而不是[^/],后来想了好久,发现[^/]和[^/x]的区别只发生在正则无法匹配字符串时,如果无法匹配,必然会迫使normal部分,即[^x]*x+,返还x,而返还的x正好可以被spcial部分的[^/]匹配,从而在无法匹配时造成无休止的循环。 使用[^/x]则避免了这个问题,可以立即报告匹配结束。

在实际应用中,需将x替换为*,以第三个为例,最终的正则表达式应该是

/\*[^*]*\*+(?:[^/*][^*]*\*+)*\*/

需要说明的是,如果你的正则引擎支持忽略优先量词,这样写是很傻逼的,直接用

/\*.*?\*/

就搞定了。

正则表达式实现视频解析

前天帮同学下载一部电视剧,但找到的bt种子速度太慢,只好放弃,于是决定下载56网的视频,只所以选择56网,是因为它的视频没有被分割,而且我可以牛刀小试一下正则表达式,利用它来批量解析下载地址。之后使用迅雷下载,甚爽。

下面这个是使用perl写的(文件名parse),适用于批量解析。可将所有需要下载视频的flash地址(例:http://www.56.com/n_v48_/c23_/8_/19_/hellowjjb_/
zhajm_120817547185x_/2725000_/0_/32802621.swf)写入一个文件(1.txt),然后运行perl -w parse 1.txt > 2.txt 即可瞬间得到下载地址。

while ($line=<>)
{
if($line=~m/^http:\/\/www.56.com[^c]*?c(\d\d?)_\/(\d\d?)_\/(\d\d?)_\/([^\/]+?)_\/([^\/]*?)_\/.*swf\b/)
{
print “http://c$1.56.com/flvdownload/$2/$3/$4\@56.com_56flv_$5.flv\n”;
}
}

这个是php版的代码:

<html>
<head>
<title>56网视频解析</title>
</head>
<body>
<h3 style=”text-align:center”>视频解析</h3>
<br />
<form method=”post” action=”#”>
<center><input type=”text” size=”60″ name=”url” />
<input type=”submit” name=”submit” value=”Submit” /></center><br />
</form>

<?php
if(isset($_POST['url'])&&isset($_POST['submit']))
{
$url=$_POST['url'];
$pattern=’/^http:\/\/www.56.com[^c]*?c(\d\d?)_\/(\d\d?)_\/(\d\d?)_\/([^\/]+?)_\/([^\/]*?)_\/.*swf\b/’;
if(preg_match($pattern,$url,$matches))
{
$download=”http://c$matches[1].56.com/flvdownload/$matches[2]/$matches[3]/$matches[4]@56.com_56flv_$matches[5].flv”;
}
else
{
$download=”sorry,can not parse download address!”;
}
echo “下载地址是:<br />$download”;
}
?>
</body>
</html>

效果请看 这里.

转载:不是书评 :《我是一只IT小小鸟》

刘未鹏大牛的博客上看到这篇文章,深以为然,忍不住转载过来, 鼓厉一下浮躁的自己。以下是原文:

设计你自己的进度条

进度条的设计是一个很多人都知道的故事:同样的耗时,如果不给任何进度提示,只是在完成之后才弹出一个完成消息,中间没有任何动态变化,那么整个过程就会让人等得非常焦急,导致一些人干脆把程序关了了事。如果有进度不断更新,那么对整个过程耗时的心理感受就会远低于实际值,用户也不会郁闷到把程序关了。(你有多少次在银行处理手续的时候,看着工作人员把一堆材料不停地倒腾来去,心里多希望他们可以在柜台小窗口上投影一个进度条?)

这里的原因在于,没有进度提示的话,我们无法判断这个等待什么时候才是个尽头。如果有不断增长的进度条,那么我们对于什么时候会达到100%就会有一个粗略的估计,这个估计是一剂定心丸,让我们知道这事情总会并且会在不久的将来完成。

做事情也是同样的道理,善于规划的人,会将目标分割成一个个的里程碑,再将里程碑分割成TODO列表。前阵子流行的GTD方法学,核心的理念就在于,如果你把任务分割了,你就有了进度条,你就知道,事情在不断的进展,你总会完成任务或到达你的目标,你会有一个时间估计。反之如果没有这个分割,整个的任务或目标对你来说就只有两种状态——“完成”和“未完成”,如果不幸是一个比较漫长的目标,那么你会发现你的进度条总是“未完成”,一次又一次的等待未果会耗尽你的耐心,让你下意识的产生“这事什么时候才能完呢?”的疑惑,没有分而治之,你就不知道未来还需要付出多少努力才能达到目的,这就会让你心生怯意,不敢进一步投入时间,免得血本无归。在这样的心理下,不少人就会选择保守策略——退出,以免到头来花了时间还一事无成。

而所谓的规划其实就是针对这种心理弱点的做事方法。如果你对整个目标的几个重大步骤有清晰的界定,能够对每个步骤的耗时作出靠谱的上界估计,你就不会被不确定的未来,不确定的时间投入感到恐惧,就不会被这种不确定感压迫到过早退出。
Read the rest of this entry »

javascript贪吃蛇

您的得分:
0



学习javascript时,也仿照高洛峰老师的教程,做了这么个东东。按方向键开始游戏,可以在右边选定级别。非ie浏览器接收键盘消息的方法和ie有点小不一样,因此,这个小游戏只支持IE浏览器。

在wordpress的编辑器中写javascript代码是一件很痛苦的事(总是被莫名其妙的转义),后来我选择在编辑器中用css+div控制布局,并创建地图,将javascript代码单独导出到一个文件中,然后通过src=”…”这种方式调用,终于成功的移植了过来。完整的贪吃蛇代码可以单击 这里 下载。

正则表达式学习

for /r %i in (*.*) do @perl -pi.bak -e "s/^.*$/hello, world!/g" "%i"

(注:如果你不明白以上命令,请不要尝试运行。)

学习div+css

div+css好强大,比如 这个东西 是我直接用手写代码实现的一个网站首页布局,里面没用一个表格。

写这个东西的时候,我最头疼的是兼容性问题,在ie下显示正常,换到opera就乱套,好不容易调好了opera下的显示,回到ie又变样了… 几近崩溃。为了让分割条在opera和ie下表示的一致,我甚至不得不采用

<div class="nav">.</div>

这种恶心的用法。

我用的是高洛峰的div/css教程,貌似只有五集,非常不错,入门来说足够了,强烈推荐,需要的童鞋可以去 lamp兄弟连 下载。

php学习

php快看完了,这个语言给我的最大感觉就是简单,灵活,用起来随心所欲,很有keep it simple, stupid的特色,语法什么的跟c比较接近。所以很容易上手。刚刚写完了一个简单的小型cms系统,基本功能都有了,就是界面奇丑无比,布局很混乱。唉,没半点艺术细胞.. 看来得好好研究一下css了。

有时脑袋发晕了,什么错误都会犯,比如下面这个admin页面。一运行,就会出错Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource…看了半天不知道哪儿有问题。上网搜索也没有答案。后来我把查询语句移到函数外面则正常执行。折腾了大半天,才突然意识到虽然在开头把’conn.php’包含进来了,函数内部却没有声明。 global $a_users;下面加一名global $conn;就没问题了。

Read the rest of this entry »

←Older