低调推出goo.gl短网址服务
| Address: | ||
好久没更新了,一是自已越来越懒,二是,这段时间总是心烦意乱,很难静下心来。
不说了,看下面这个简单的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>
效果请看 这里.
学习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好强大,比如 这个东西 是我直接用手写代码实现的一个网站首页布局,里面没用一个表格。
写这个东西的时候,我最头疼的是兼容性问题,在ie下显示正常,换到opera就乱套,好不容易调好了opera下的显示,回到ie又变样了… 几近崩溃。为了让分割条在opera和ie下表示的一致,我甚至不得不采用
<div class="nav">.</div>
这种恶心的用法。
我用的是高洛峰的div/css教程,貌似只有五集,非常不错,入门来说足够了,强烈推荐,需要的童鞋可以去 lamp兄弟连 下载。
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;就没问题了。
想将一部电影转为flv格式的,但找了好多软件,要么就是不行,要么就是收费的,其实已经有现成的免费开源软件,mplayer.
看名字可以知道,它是一个播放器,一个功能很强憾的播放器。由于运行在dos下,它的cpu和内存占用都非常小,播放视频时会打开一个窗口,利用键盘控制播放。我曾拿它和暴风影间播放同一部影片比较,播放flv时,mplayer几乎不占用cpu,而暴风则占用20%,
它有一个自带的编码工具mencoder, 利用它可以转换任何格式的视频。那些所谓的收费视频转换软件用的大都是它。ok, 现在开始转换,首先在命令提示符下切换到mencoder所在目录,然后输入
mencoder "c:\nw.rm" -o "c:\output.flv" -of lavf -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcopts vcodec=flv:vbitrate=256:mbd=1:mv0:trell:v4mv:cbp:last_pred=1:dia=-1:cmp=0:vb_strategy=1 -vf scale=512:-3 -ofps 12 -srate 22050
回车就可以了
参数很多,但只需要知道几个就行了。“c:\nw.rm”是要转换的文件,“c:\output.flv”是目标文件。 vbitrate是视频比特率,越大品质越高。scale是目标视频的宽度(-3)表示保持高宽比。
要转换为avi格式的,可以输入以下命令
mencoder "c:\nw.rm" -oac mp3lame -lameopts preset=64 -ovc xvid -xvidencopts bitrate=600 -of avi -o "c:\nw.avi"
avi格式转为flv的:
mencoder input.avi -o output.flv -of lavf -oac mp3lame -lameopts abr:br=56 -srate 22050 -ovc lavc -lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3
还有mpg转avi格式的:
mencoder input.mpg -oac mp3lame -lameopts aq=3:abr:br=128 -srate 44100 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1200 -ffourcc DX50 -vf scale=480:360,crop=640:478:0:0,harddup -ofps 30 -o output.avi
这个是mplayer的下载地址,还要下载编码解码包codecs,下载后将codecs中的文件(包括*.dll, *.acm,*.ax等)全部解压到mplayer的codecs目录中。