Archive for the computer Category

    低调推出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>

    效果请看 这里.

    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 »

    rmvb转flv

    想将一部电影转为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目录中。

←Older