Submitted by gouki on 2010, February 4, 9:52 PM
快过年了。一些在做和想做的事情需要记录一下了
1、kenai.com要关门了。sbPHP没有地方放源码了。只能天天晚上更新了,不过正好又准备重写一下,所以问题不大,影响也小
2、kkread.com,原来想做小说站的。现在改成代码快读,专门用来研究php,js以及wordpress。等数据多一点后,考虑的是提供整合下载,代码压缩等。
3、mzditu.com,是一直想做的,但没有时间做的。在playgoogle.com上也看到一些操作google map的代码,但却一直没有动手过。。。
4、wordpress学习以及插件研究一下。毕竟,我不是纯粹用来玩的。
5、想好好读读优秀代码,想好好看看书
6、学python,NS团队的hihiyou在博客上贴了点用python做的编辑器,吸引了我。。。
7、想好好看看JS,多写一些jQuery插件。
Misc | 评论:0
| 阅读:16654
Submitted by gouki on 2009, October 16, 10:02 PM
提起高春辉,恐怕更多的人想到的是手机之家。其实,还有一款PHP界的软件是大家所熟知的,那就是ecshop。当然现在的ecshop已经不是高春辉的了。几经转手,现在ecshop已经是shopex的旗下产品了。
4月份的时候,高春辉提出了新的架构,并整理出了一份PPT与大家共享,与“手机之家新系统介绍及架构分享”有关,过了几天,他把DAL方面的特点整理了一下,还是有关 DAL~,认为有一些特色:
XML/HTML代码
- 我也觉得其实这个 DAL 的最核心功能就是如何自动缓存和清理缓存了。因为不让程序员缓存和清理,就的是程序自己来管理缓存和清理缓存,总得清理嘛。不过这个还是保密一下吧。起码不是某些人想的只能缓存单条数据,也不是某些人想的清理是按照单条方式的清理。当然另外的一个核心功能就是分库分表的自动和透明化,这个功能有很多软件都实现了,就不多说了。
六个月过去了,高春辉终于放出了DAL 近期情况~,如果他愿意,估计可能会开源。如果东西很新鲜,那么极有可能引起一场革命。象他的ecshop一样,又或者象当年的ruby的 active record 。
真正的发布会带来什么呢?我也很期待
在
Tags: dal, 高春辉, 手机之家
PHP | 评论:0
| 阅读:19230
Submitted by gouki on 2009, September 10, 9:34 AM
这篇文章的来源有点怪,是在看云风的BLOG时,从文中的一个链接发现的。
格斗游戏玩的不算 早,但总也算沉迷于其中的(某段时间),直至现在,电脑中、PSP中还是有模拟器,经常玩的还是SF2和KOF98等。
这篇文章讲精髓,其实讲的是格斗意识吧。有点意思。就转换了。。。看样子好象是台湾同胞,因为他的BLOG分类里有:程式设计,一般只有台湾同胞才会这么叫程序为程式。
原文如下,来自于從快打旋風談格鬥遊戲:
已經想寫一篇文章討論「遊戲」很久了,遊戲對我影響很深,但玩遊戲在社會上一直是個不入流的娛樂,在爸媽眼裡是個會讓小孩墮落的萬惡淵藪。就像如果 有人問平常的休閒娛樂是什麼,回答打高爾夫球人家就會覺得你是上流社會的公子,但回答打電動就會被貼上宅男的標籤。小時候如果愛打電動(尤其去外面的電玩 店),還會被當成開始變壞的前兆,彷彿玩快打旋風就會真的去跟人家打架一樣。
根據我爸的說法,我打電動的歷史可能比我的年紀還長。因為我媽在懷我的時候,我爸買了一台Apple II給我媽玩遊戲,所以.. 我應該是在我媽肚子裡就開始學著打電動了吧XD
玩遊戲這件事被污名化很久,好像玩遊戲都是百害而無一利,好像每個遊戲都是打發時間的娛樂而已。所以我決定還是要寫點東西,說說玩遊戲的深度和價值在哪,幫廣大遊戲玩家吶喊一下,也希望能讓沒接觸過的人少點刻板印象甚至產生興趣。
我最早接觸且著迷的遊戲是格鬥遊戲,從快打旋風1代 (Street Fighter, 1987)我就玩過了,但那時還不太會玩,而且格鬥遊戲的基本系統也還未發展成熟,所以快打旋風1代比較像是純粹的拳打腳踢遊戲。接下來就是引起全世界格 鬥旋風的經典之作:快打旋風2系列 (Street Fighter 2, 1991-1994)。之所以稱快打旋風2為經典,是因為它訂定了現代格鬥遊戲的基礎系統,這個我稍後再詳細說明。除了CAPCOM的SF2外,當時我比 較愛的其實是SNK的餓狼傳說(Fatal Fury, 1991)、龍虎拳(Art of Fighting, 1992)、侍魂(Samurai Spirits, 1993)這三個作品,這三個作品其實各有特色,但大體上已經脫離不了SF2訂下的基礎,只是加上了一些延伸變化(例如超必殺技或是加上武器)。
當時2D格鬥遊戲的世界說起來只有兩大陣營,一是製作快打旋風系列的CAPCOM,另一個就是SNK。CAPCOM在SF2時期非常風光,但很可惜 過了幾年,就被SNK的另一經典: 格鬥天王 (The King of Fighters, 1994) 打得慘兮兮。KOF的特色在3人一組取代1對1的格鬥,還有華麗的招式及連續技。只可惜SNK太注重於華麗連續技的技巧,導致格鬥被扭曲為能輸入強力的連 續技的人即佔有極大優勢,而喪失了原始對戰的精隨。
那格鬥遊戲的精隨到底是什麼?
簡單來說,就是即時互動的心理戰:根據對手的行動即時應對,需要敏銳的觀察力看破對手的行動、瞬間的反應力以見招拆招、準確和穩定的執行力趁對手露出破綻給予強力打擊。
這也是人類競爭的精隨與本質,只要能早一步洞悉對手的行動,就能克敵制勝。無論在球場上,商場上,或是戰場上都是一樣。格鬥遊戲只是把這個兩人賽局的過程濃縮到一個三戰兩勝的60秒戰鬥裡。所以說,格鬥並不是比誰的力氣大或招式比較華麗,而是一場即時鬥智加上鬥技的競賽。
先前提到過快打旋風2建立起了格鬥的基礎系統,這系統包括了幾個最重要的基本元素:輕、重攻擊,上、中、下段的拳腳攻擊與防禦,以及無法防禦的摔技。所有的格鬥遊戲都脫不出這些基本要素,除了這些基本元素外,剩下的連續技或是超必殺技都只是看起來很華麗的包裝而已。
這些格鬥的基本元素就像剪刀石頭布一樣,兩兩相剋,沒有一個無敵的妙招。上段攻擊可以站著防禦,蹲下則可以閃開;中段攻擊可以站著防禦,蹲下卻擋不 住;下段攻擊不能站著防禦,只能蹲著防。也就是說,站著防可以防上中段攻擊,卻防不了下段攻擊;而蹲著防可以防上下段攻擊,卻防不了中段攻擊。所以當你想 採取防禦姿態時,就要猜測對手的可能攻擊,是中段?還是下段?
一般來說,中段的攻擊招式或拳腳比較少,所以初學者大多會一直蹲防。如果我是攻擊的人,就會試探對手是不是偏好蹲防,或是故意一直用下段攻擊讓他以為我偏好打他的下盤,等到關鍵時刻,就可以用中段攻擊起頭再接上連續技打得他措手不及。
格鬥遊戲至少會有3戰2勝,也就是說第一場的輸家只要有學乖,還是有機會反敗為勝。但正如我所說的,格鬥其實是心戰,一切的關鍵就在能不能看透對手 的想法和策略。聰明的對手如果在第一場學到不能一直蹲防時,突然的中段攻擊可能就不是那麼有用,這時我就會找其他的弱點來突破他。前面有提到,除了上中下 段的攻擊與防禦外,還有一個重要元素是摔技。摔技是近身時才能使用的招式,摔技的特點是無法防禦,所以很適合拿來對付很愛防禦的人。以上一場學乖的那個對 手來說,他如果反應力很好能看穿我要打中段還是下段,他就會很專心看我的動作,這樣我可能絕大多數的攻擊都會被擋下來。這時,要突破他最好的方法就是接近 他,用輕拳攻擊誘使他專心防守,再突然用摔技來突破他的防禦。
這麼說來,摔技就是無敵的囉?當然不是,最簡單的反擊方法就是跳開,然後對手就會因為摔技失敗而露出大破綻,接下來就可以趁隙反擊。
選擇攻擊的輕重也是另一種tradeoff。輕攻擊威力較小,但即使揮空後的硬直時間(任何攻擊和招式使出後都會有一小段無法行動的時間,即稱為硬 直時間)也很短;相反地,重攻擊威力大,但是萬一揮空的破綻也大。所以在攻擊時,不該以破綻大的攻擊起頭,而應該盡量以破綻較小的攻擊開始,如果命中再接 著輸入連續技給予大打擊。
快打旋風除了建立起這些基本攻擊系統外,還引入兩個每個2D格鬥都看得到的標準招式:波動拳和昇龍拳。波動拳是遠距離的牽制武器,即使不在對手身邊 也能照樣攻擊他。昇龍拳是對空武器,只要對手傻傻的跳過來,就可以用昇龍拳把他打下來。這兩種招式帶給格鬥遊戲更多變化,也把戰鬥從近距離的拳腳纏鬥提升 到更寬廣的層次。
和2D格鬥比起來,3D格鬥遊戲就少著墨於飛行武器和跳躍攻擊,例如VR快打系列(Virtua Fighter, 1993)講求的是真實的格鬥技,沒有誇張的氣功和必殺技,所有招式都只是拳腳攻擊的組合和變化。相較之下我一直都比較愛VR快打系列,勝於其他所有的 2D格鬥,因為VR快打裡沒有華麗的包裝(呃,畫面很真實其實是它的賣點之一啦),只有純粹的格鬥。
最近為了快打旋風4買了Xbox 360,能在網路上和無數高手對戰真是喚醒我體內格鬥的熱血。面對真人和電腦是完全不同的感受,像是上面所說的引誘對手只防守下盤基本上只對人有用,對電 腦來說是沒什麼意義的。人容易被騙,但人也學得很快。我在網路上常遇到各種不同打法的人,有的善於不斷混用摔技和打擊技(這叫投打二擇。投擲和打擊二選一 的意思)讓你不知道該防還是該躲,有的不斷利用近身跳躍到你背後踢背(直接跳過你踢你的背,所以要反過來往另一邊防禦才行),有的一直龜在地上不動等你跳 過來就昇龍拳…。
世界上玩家眾多,可以說有多少人就有多少種打法。我最喜歡在第一局觀察對手的攻擊模式,並加以試探他可能的弱點。即使第一局輸了,也要在二三局利用 他的弱點和模式反將他一軍。有時對手比我還高干,就可以明顯感受到兩個人透過畫面上的角色互動揣摩對方的戰略和弱點,一來一往之間都會不斷迸出激戰的火 花,實在非常過癮。
其實格鬥遊戲就像許多雙人對打的運動一樣(例如桌球、網球),除了講求準確的肌肉控制技巧外,也需要即時的觀察與反應力,更重要的藉由對手的動作和反應看穿對手的內心,並從這種互動過程中學習和成長。
Tags: 游戏
Misc | 评论:0
| 阅读:16636
Submitted by gouki on 2009, August 20, 6:39 PM
Gracecode网上的文章,好象研究了比较深。
本文的亮点写在了内容中,但我觉得argements.callee这个用法还是很有特色的。以前都是用this之类的来解决。。。
还有一个亮点就是document.Fragment这个东西。。。
不废话看原文:
异步 innerHTML
innerHTML 插入节点的性能的问题,通常是我们最关注的。在回答这问题时,James Padolsey 给出了他的解决方案,看到上述代码不仅赞叹了下:
JavaScript代码
- function asyncInnerHTML(HTML, callback) {
- var temp = document.createElement('div'),
- frag = document.createDocumentFragment();
- temp.innerHTML = HTML;
- (function(){
- if(temp.firstChild) {
- frag.appendChild(temp.firstChild);
- setTimeout(arguments.callee, 0);
- } else {
- callback(frag);
- }
- })();
- }
- 充分利用闭包解决 IE6 的内存溢出问题
- 使用延时 0 将操作从队列中拉出,防止浏览器假死
- Document Fragment 给予我们个相当好的沙盘,只是我们经常忘记了它
- 回调的节点可以使用 DOM 标准的手法(appendChild)插入
了解了参数就很容易调用,例如
JavaScript代码
- var htmlStr = '<div><p>...</p><p>...</p><div><div>...</div>';
- asyncInnerHTML(htmlStr, function(fragment){
- document.body.appendChild(fragment);
- });
再次不禁赞叹下!
组织 innerHTML 字符串
说到 innerHTML ,通常在这操作之前会有大部分的字符串操作用于连接节点。考虑下面的三种做法,有何不同
方式一
JavaScript代码
- var arr = ['item 1', 'item 2', 'item 3', ...];
- for (var i = 0, l = arr.length, list = ''; i < l; i++) {
- list += '<li>' + arr[i] + '</li>';
- }
- list = '<ul>' + list + '</ul>';
方式二
JavaScript代码
- var arr = ['item 1', 'item 2', 'item 3', ...];
- for (var i = 0, l = arr.length, list = []; i < l; i++) {
- list[list.length] = '<li>' + arr[i] + '</li>';
- }
- list = '<ul>' + list.join('') + '</ul>';
方式三
JavaScript代码
- var arr = ['item 1', 'item 2', 'item 3', ...];
- var list = '<ul><li>' + arr.join('</li><li>') + '</li></ul>';
详细的对比测试在这里(没错,还是 James Padolsey 那小子的 Blog)。同时,PPK 也整理了份有关 innerHTML 的速度测试报告。
IE 的陷阱
对于 IE,innerHTML 有个不大不小的陷阱(via),就是在 tbody 中插入 innerHTML 时,会报莫名的“未知的运行错误”。
测试地址在这里(经过测试,在 IE8 中仍然如此)。有兴趣的同学可以参看更详细的信息。
Tags: arguments, callee, innerhtml
Javascript | 评论:1
| 阅读:18863
Submitted by gouki on 2009, June 9, 5:21 PM
本文是yhustc在娱乐之余利用PHP代码写的刷骨头的文章,现在不知道还能不能用了,但思路和技巧可以参考(这里还有一篇利用greasemonkey来玩开心农场的文章,也可以学习一下哦)
原文网址:http://www.yhustc.com/Blog/172.html
从文章中可以了解,这里面最关键的算法在于code的计算,每一次操作都会返回一个key,用于计算下一次操作的code。如果没有这个,那你所做的外挂程序就无效了。
根据yhustc提供的流程,建议采用firefox(使用firebug插件)进行查看分析(当然还有更多的HTTP分析软件)
不多说了,原文如下:
PHP写的,重在分析,不在可以全文COPY的代码。
校内赚骨头的方法很多,最快的是邀请一下自己的MSN好友,一次送400根。用自己的MSN用户名密码登录后,选任何一个好友(比如自己的MSN小号),直接确定,400根骨头到货了。
。
但是要不断的得到新的骨头,还要速度快,得靠刷。刷骨头有几个方法,一个是自动玩飞盘,接中一次3根骨头,总体趋势还是赚的。一种是喂其他人的小狗,要喂饥饿,体力为0的,有一根以上的骨头反馈,我遇到过奖20根骨头。
我用的就是第二个方法,因为我发现不是好友的小狗也是可以喂的,也就是喂狗的页面把那个pid从1到***不断的狂加,每个页面试一把,找到饥饿的小狗就喂。
流程如下:
1、登录拿到自己的校内id (actor_Fid)。
2、http://dog.xiaonei.com/pet-profile.do?method=dogXML&&pid+自增ID+&t=毫秒单位时间戳得到小狗的XML格式的属性和用于计算验证code的key
3、如果是饥饿的小狗,喂水、喂食,pid加一回到第二步去找下一只饥饿的小狗
4、喂水、喂食用的是同一个method,只是active_Fid这个参数不同,都会返回当前状态和下一轮计算使用的key,可以在这里检查一下返回,如果狗粮不够了,自动去买一下(这一步很简单,就是一个POST)
补充:首发的时候忘记说明了,买狗粮因为买40kg的,每一袋至少赚6根骨头(喂一只狗花1Kg狗粮,最少加一 根骨头,40Kg狗粮34根骨头一袋),所以默认是买40kg的狗粮,那就要求程序第一次运行的时候有足够的骨头。如果没有这么多,可以修改 Dog.php第139行,把"buy_id"=>3设置成1或2,也就是买5或20Kg的狗粮。
一天刷下来能刷很不少骨头,外加爱心等级飙升。
关键的算法在于code的计算,每一次操作都会返回一个key,用于计算下一次操作的code,参考了一下别人的文章,计算code用下面这个函数
php代码
- private function getCode($petId,$key)
- {
- return md5($key."#".$petId."#".$this->actor_Fid."#".'%$T&*jkhjksdhfjk$%^&*BJHhh');
- }
后面那堆字符问我怎么知道的?抄的。google 校内狗狗 key code,看到一篇分析文章,他反编译了那个flash,看到的字符串常量。要不然鬼能反过来算这个md5里面是啥。
有了这个code外加cookie,校内的验证就算是过了,那么不断的找饥饿的小狗,post相应动作,其实就跟自己人肉搜索饥饿小狗,再点那个 flash一样。详细代码见附件列表。里面有个Http基类,这个里面封装了curl的get和post操作,带cookie。如果要写需要维护登录状态 的PHP代码,倒是可以用用,直接extends Http,然后调用$this->get $this->post就可以了。
说一下玩飞盘吧,这个实现也就是一个POST请求,返回的数据里会有小狗的属性,可以在体力不足的时候POST一个喂食操作。但是当玩到一定次数的 时候,会有验证码,其实这个验证码破解不难,有兴趣的可以捣鼓捣鼓,切割成单个字母用最大相似度匹配应该可以。由于我自己只是看看流程,不玩狗狗,所以没 有写这部分代码。
运行方式:修改Dog.php最下面的用户名和密码,把php目录添加到path里,在控制台下运行php Dog.php即可。
附件嘛。。。。我这里可以下载,也可以去原文进行下载。
4a09477ae1be3.rar
Tags: 校内网, 骨头
PHP | 评论:0
| 阅读:17650