用CI也有一段时间了,感觉paperen我也挺喜欢CI的,因为觉得上手真的很容易也很方便,暂时还不会考虑其他框架。不过通过这段时间的使用,加上同事比较多疑问(也算是好事吧),自己也有点对CI中控制器与模型部分使用产生些少疑问,特别是模型,因为之前的开发就带来一些比较混乱的状况,老实说之前写的代码比较糟糕。
很多疑问都是产生在控制器与模型之间的,疑问最严重的是模型的重用性(况且可以这么说吧),平平君与奇奇君本来是分开一人负责一块功能的,但是免不了要涉及一些公用的模型,这就导致了一些不能避免的问题,平平君要与奇奇君协商某个公用的模型方法,但是别扭的是前者可能额外附件一些条件,比如要查询state为3的记录而后者则又会附加其他限制条件,而且paperen不太同意在控制器中对模型进行控制(或者下面的例子展示后你就明白什么意思),结果要写一个能符合两者需求的模型方法,在这个模型方法中写了比较复杂的逻辑,本来比较简单的模型突然看到一段复杂的逻辑,这个真的是我不想要的,paperen提议的是即使你查询的条件不同的话就可以考虑分出来单独作为一个方法了,而不要花太多时间在万能的模型方法,因为那可能会增加了模型的复杂度或者增加了控制器与模型的耦合度。说了这么多还不如看个例子吧。
最近从迷茫中又坚持了下来,而且还获得了其他一些与技术无关的体会,当然这些体会并不是突然冒出来的,或者也跟这1年的工作有关吧。paperen首先抛出自己的观点吧,“一件好的产品必须而且一定是从源设计中继承并得以延伸的”,无论您认同或者反对,或者中立也好,paperen会在下面用自己的体会去描述自己这个观点。so,这是一篇议论文……
在生活中会不会有这些情景,“我很想弄一个小玩意,能用来这样那样,是啊!很cool啊!”,在想象中确实很吸引很完美,但一旦将其置于实现中就没有下文了,而这种情况paperen认为是很正常的,每个人都爱幻想,而且应该保持幻想,至于能不能实现是其次,因为如果没有这些幻想与这些概念就根本不会有实例的出现,但这里paperen想强调的是,如果连自己(设计思想来源者)都没法做到吸引自己去动手去认为值得实现,那么可能证明了两件事:1.你只是个空幻想家,2.你想象的玩意仍不够吸引。
在看CI(codeigniter)database那一节的手册发现其自带了事务的处理,之后又不知不觉地查了一些资料,在某个地方看到有个例子,具体描述类似如下:商店现在某商品只有1件库存,然后A与B在网上进行下订,A与B几乎同时(或许也就差几毫秒,A比B快那么一点点)进行。
很明显是只有A才能成功下单的,B则会收到库存不足的提示,但是作为放置在服务端的那个页面(或者称为脚本程序)我们得怎样去处理这个问题呢?或者我先放出一段代码吧。
$sql = "select number from goods where id=1";
$number = intval( $db->result( $db->query( $sql ), 0 ) );
if ( $number > 0 ) {
sleep( 2 );
$sql = "update goods set number=number-1 where id = 1";
if ( $db->query( $sql ) ) {
echo 'Ok!Here you are!';
} else {
echo 'Sorry!Something go wrong!Try it again.';
}
} else {
echo 'No more!you are so late!';
}
这部分代码除了缺少一定注释外都写得没错,当然$db是一个操作数据库的类,我只是将大部分方法封装了,这里的逻辑也是很明显了。
一直都觉得javascript可以玩得很cool。所以终于尝试了使用js来写了一个小游戏,界面上其实也没什么特色~~普普通通吧,paperen将这个游戏取名为(untouchable)不可触及,游戏规则其实很简单,不要让那个按钮与那些飞来飞去的小球发生碰撞,看你能熬到多少秒。
untouchable游戏地址 http://paperen.com/demo/collision/
将《高性能网站建设指南》读完了,感觉很好,这本书值得大家一读。让paperen对前端性能优化有了更多了解。steve souders 将所有法则都描述得很彻底,很简洁。书中一些观点更是让paperen深刻“只有10%-20%的最终用户响应时间花在了下载HTML文档上,其余的80%-90%时间花在了下载页面中的所有组件上”,“如果将后端响应时间缩短一半,整体响应时间只能减少5%-10%,如果关注前端性能,同样是将其响应时间减少一半,则整体响应时间可以减少40%-45%”,总结得真的很到位,更重要的是你在阅读过程中会通过例子自己体会到作者这些观点。
光看封面都挺有意思的,留意那只狗的比例。
先声明一下,这篇文章转载至TaobaoUED博客,还是一篇很旧的文章,但旧不要紧paperen觉得值得分享所以就转载了。原文url http://ued.taobao.com/blog/2008/09/17/grid_systems/ 或者你还没有了解过栅格这个名词,但不要紧通过这篇文章你就能了解到栅格在web设计上的应用,好文章值得转,好技能值得你拥有,so,paperen决定转载这篇文章,第一次转载(paperen连图片也截下来了)。
栅格系统的形成
最近paperen公司的那个搞了一年的东西也差不多可以拿出来了,至少在数据上可靠了点,界面上就……程序上就更……关于丢失密码的处理会有涉及到给会员的注册邮箱发送邮件功能,其实就是运用了SMTP这个服务。
正如对PHP函数有了解的人都应该知道PHP中有一个mail函数,直接调用它理论上就可以发送邮件了
220 163.com Anti-spam GT for Coremail System (163com[20101010])
helo paperen
250 OK
auth login
334 dXNlcm5hbWU6
//你帐号的base64码
334 UGFzc3dvcmQ6
//你帐号密码的base64码
235 Authentication successful
mail from:
250 Mail OK
rcpt to:
250 Mail OK
data
354 End data with.
mime-version:1.0
from:paperen
to:paperen
subject:test
content-type:text/html; charset="utf-8"
//这里要空两行,1行
//2行
hello world!
.
250 Mail OK queued as smtp4,DtGowLCbrgVa+y5N1C9xAA--.11142S2 1294924769
$smtp_server = 'smtp.163.com';
$smtp_port = '25';
$fp = fsockopen( $smtp_server , $smtp_port );
echo fgets( $fp );//220 163.com Anti-spam GT for Coremail System (163com[20101010])
fclose( $fp );阅读更多既然可以这样搞,故下面的代码就明了,注意的是可能需要判断一下服务端返回的状态,是否错误,是否可以继续。不过在这个例子中paperen就不写这么严谨了,毕竟最后会分享一个摘自uchome的利用socket发送邮件的函数。$username = '***';//您邮箱的帐号,@前面的
$password = '***';//密码
$from = 'paperen@163.com';//寄信人邮箱
$to = 'paperen@gmail.com';//收件人邮箱
$smtp_server = 'smtp.163.com';//smtp服务器
$smtp_port = '25';//端口
$message = "Hello paperen,i use php send a mail to you,very cool yet?";//邮件内容
$subject = "Test Only";//邮件标题
set_time_limit(0);
$fp = fsockopen( $smtp_server , $smtp_port );
if( substr( fgets( $fp ), 0, 3 ) != '220' ) exit('connect error');
//hello
fputs($fp, "helo 163\r\n");
if( substr( fgets( $fp ), 0, 3 ) != '250' ) exit('helo error');
//auth login
fputs($fp, "auth login\r\n");
if( substr( fgets( $fp ), 0, 3 ) != '334' ) exit('user error');
fputs($fp, base64_encode( $username ) . "\r\n" );
if( substr( fgets( $fp ), 0, 3 ) != '334' ) exit('pwd error');
fputs($fp, base64_encode( $password ) . "\r\n" );
//auth success
if( substr( fgets( $fp ), 0, 3 ) != '235' ) exit('auth failed');
//mail from
fputs($fp, "mail from:<{$from}>\r\n" );
if( substr( fgets( $fp ), 0, 3 ) != '250' ) exit('mail from error');
//rcpt to
fputs($fp, "rcpt to:<{$to}>\r\n" );
if( substr( fgets( $fp ), 0, 3 ) != '250' ) exit('rcpt to error');
//data
fputs($fp, "data\r\n" );
if( substr( fgets( $fp ), 0, 3 ) != '354' ) exit('data error');
//header
$headers = "mime-version: 1.0\r\n";
$headers .= "from: paperen<{$from}>\r\n";
$headers .= "to: paperen<{$to}>\r\n";
$headers .= "subject: {$subject}\r\n";
$headers .= "content-type: text/html; charset=utf-8\r\n";
fputs($fp, "{$headers}\r\n\r\n" );
fputs($fp, "$message\r\n");
fputs($fp, ".\r\n");
if( substr( fgets( $fp ), 0, 3 ) != '250' ) exit('sendmail failed');
echo 'OK';
fclose( $fp );就是这么简单就可以用php帮你搞掂,是不是很cool~下面附带自己在uchome摘出来的一个sendmail函数,具体配置需要自己根据自己需求修改才可以发送,paperen测试过gmail,163,126,sina,hotmail,qq均可以收到邮件。关于中文标题与内容乱码的问题自己参照sendmail这个函数中看吧,看完你就明白了,主要是43行到53行的代码要看看。$email_subject = '=?' . $mail['charset'] . '?B?'.base64_encode(preg_replace("/[\r|\n]/", '', '['.$mail['sitename'].'] '.$subject)).'?=';
$email_message = chunk_split(base64_encode(str_replace("\n", "\r\n", str_replace("\r", "\n", str_replace("\r\n", "\n", str_replace("\n\r", "\r", $message))))));
$headers = "From: $email_from{$maildelimiter}X-Priority: 3{$maildelimiter}X-Mailer: ". $mail['sitename'] ."{$maildelimiter}MIME-Version: 1.0{$maildelimiter}Content-type: text/html; charset=" . $mail['charset'] . "{$maildelimiter}Content-Transfer-Encoding: base64{$maildelimiter}";下载地址 这里呼·~~好不容易才写完一篇,希望对使用php发送邮件或者想玩玩底层发邮件的你有点帮助吧
一年又是那么一下子结束掉,还觉得自己好像是毕业没多久。2011这个数字对于我来说也算有点意义,因为是从大学混到社会的一年。我只知道在这一年中自己某些人生观、对待某些事情的看法上确实有了变化,但无法告诉你那是什么,似乎这样的话很无解,但确实是这样的。
我通常不会将自己的生活描述得太过于好,但也不会描述得太过于差,当偶尔在TM上有大学朋友问我过得如何时,我通常是使用“我过得不错(很好)”来回答,我想这是一个很好的消息,无论是对他还是对自己,或许这也是乐观的表现,但老实来说没有什么理由说自己过得不好,做到自己感兴趣工作的同时还赚到钱,能租到自己可以接受的房子,而且在深圳还有亲戚关照,还有什么不好。
有时候在微博上或者是在与别人交流中总是能了解到一些关于价值观与人生观,但自己并不会很轻易就接受那些所谓的观点,或许我是变得保守了,我不知道这算不算是成熟,我只是想问问有多少人觉得自己是个很无趣的人。
这应该是个很长久的问题……长久得在网上一搜大把解决方案,就是关于如何防止表单重复提交的问题,而paperen这里也就再来解析一下解决的方法与原理,毕竟也是一个实用的技 术。如果您已经知道如何解决的话那么这篇文章可能不适合你的口味,paperen这里也打算从基础开始讨论,所以希望一步看到解决方案的您也可能不太适合,所以请注意。So~开始吧 ~
paperen想您一定知道表单是什么吧,form元素就是表单,一般网页需要输入的地方必定使用了表单元素,也很常见,一般的代码如下:
<form method="post">
<p>
<label for="test">随便输入点什么</label>
<input type="text" name="data" id="test" />
</p>
<p>
<input type="submit" value="提交" name="submit" />
</p>
</ul>
</form>
重点其实是form与input元素,p元素只是paperen私自加上去的,对后续的说明没有任何影响,其实很简单,所谓input就是输入了,你可以完全将input 元素理解为是用作用户输入,只是某些属性的(type)不能作为输入而已(这里就是submit),而form元素你完全可以将它理解为是一个袋子,将所有用户输入数据到装在它里面之后用 来提交回服务端处理,但对于form元素值得注意的是method属性,一般来说有get与post两种方法,其实不要想得太复杂(因为深入的不需要太理解,对于后续的内容没有太多关系,如 有兴趣不妨可以使用浏览器的调试工具查看请求头部信息与发送信息,例如firebug),表现出来就是,使用get提交表单的话所有的input元素的值将会在地址栏处出现,而post则不会, 例如使用get提交此表单后的浏览器地址栏
若不是opera的快速拨号里面有自己博客的一张图片,paperen我都不会想到该来写点东西。最近一下了班就什么都不想做,感觉真的很累,也渐渐地失去了激情~~或者自己早已经预料会有这么一天的到来,但还是觉得来得有点早,还以为能坚持下去,但是发觉越来越难~~
也或许出来社会就是这样,在生命结束的那一刻才会有一种成就感才能对自己的一生做出评价,而之前的日子就像在长跑,可能是每天每夜地在同一个地方绕圈也可能是不断向前迈进。但很多时候我们也会感觉到迷茫,消极,看到成功的人如何如何,很多时候会觉得对那种长跑感到厌倦。大家老是说“成功没有捷径,惟有勤奋而已”,虽然感觉这是一句勉励自己的话,但有时候却觉得这是一句傻子才会说的话。人有时候也总是会表现出消极的一面,却不总是一件坏事。
paperen你是在自我安慰吗?是的,我是在自我修复这种疲倦,但这种方法越来越不奏效。
话说很久很久以前有个人,他的名字叫paperen,他一直想弄一个聊天工具……而又在同时他不知不觉间步入了WEB的领域,但他依然想弄个聊天工具……于是直到这篇Just For Fun的面世……
一个很囧的引子……其实呢,paperen我在毕业之前就弄了一个,那时打算将它作为毕设的,但结果用了那时在诺网期间那个IP屏蔽的东西作为自己的毕设~~这次再弄了一个,纯属是弄着玩而已,不过也花了些少功夫,代码架构上就一般般,并没有太多面向对象的味道,其实一开始是想发表一个关于在线的东东,结果弄着弄着就加上了聊天对话的东西……下面放出DEMO与RAR包的地址(如果你想做得更好,paperen可以说我这个还远远不够~~但这并不影响你去实现你想实现的更cool的东西):
看到标题你都明白这次又是说啥了,还是JS图片展览的效果,but,这次同时附上 psytopic.com 里面的那个gallery(准确点来说是盗窃回来的),paperen弄来他们的js,css,同时搜索了关于lightory这个信息,准确点来说是个开发者(根据css文件开头的备注找到了这个线索),paperen当然也不确定是不是这个lightory(t.sina.com.cn/lightory),但可以肯定而且令我惊讶的是微博这位又是一个90后的杰出开发者(又让paperen觉得中国的IT未来一片光明,我们需要的只是创新而已),访问了 他的blog 与摆摆书架(http://bookfor.us/)paperen喜欢这样的UI,摆摆书架的玩法大家也可以了解下,挺有意思的。
多余的东西就到此为止了,说得有点多了……好吧,一开始就来个DEMO给大家看看(psytopic.com的那个)。
paperen对mysql的接触是从玩php开始的,paperen并没有学过SQL,但是自学了一些,对于mysql其实也不是专研得太深,而最近又重新看一遍《PHP和MySql Web开发 第4版》才有发现mysql中有些东西paperen到现在还没有玩过~~所以现在paperen再亲自测试一下并拿出来跟大家分享一下,其实大家有这本书的话不妨自己翻开,再看看12,13章的内容,当然如果你是已经了解并玩得很熟了那么可以忽略了。
大概总结了下,这两章介绍了一些玩法有:mysql prepared,pear mdb2,权限分配,sql优化分析,备份与恢复数据库,主从同步数据库,innodb事务与外键,存储过程。都是一些很实用的技巧,而这里paperen只具体说说主从同步数据库与存储过程,其他技巧自己去查查资料吧。
主从同步数据库,这个概念应该很好理解,其实就是集群数据库的概念,在客户端看上去数据库只有一个,但是实质上不止一个,可能是多个数据库在维持,实质上说这个技巧是为了保证web平台的稳定而使用的,paperen觉得这个技巧并不是用来防止数据出错(数据出错站在mysql的层面来看是根本没法避免的,只能靠备份来预防)是为了提高可靠性。
理论上说这是一篇提高我们写代码时的幸福感的文章,you know~paperen也对这个捣腾了许久,好的IDE是会让你写起代码来更加顺手,而当你找到了你喜爱的IDE后是否有想过将代码的字体也改得更好看更舒服一点,那敲起代码来就更舒服了,对眼睛也更好一点,you know有一句话是没错的“代码如诗”……
当然啦,这个话题是无关任何语言平台的,关乎的只是代码的外表美,嗯~确实比较肤浅……you see,paperen目前习惯使用的IDE是netbean+dreamweaver,前者写php代码后者写css与js,一直都习惯这样做的了,paperen很喜欢netbean但是代码的字体总不是那么好看……相对于dreamweaver而言,在dreamweaver中如果你的文件编码是utf8的话它默认使用的字体是Courier New的,如果你的编码是gbk/gb2312的话那么默认的字体就是宋体,但是paperen倒是觉得宋体下的英文难看了。
下面先放出一个paperen测试过程中试用的字体,你可以在里面选择你觉得顺眼的对比对比。paperen目前的首选字体是Courier New 15号的,而dw中也是Courier New 12pt,感觉雅黑怎不太好看呢,有点失望,难道是paperen的雅黑字体是盗版的……
“用多少天用多少年的跌跌撞撞才找到終點”,越成長就越喜歡陳奕迅的歌,發覺每首歌都好好聽。沖涼時唱一個,等公交時哼一段,睡覺前聽一首~~
不知道不覺得又一年了,時間就是這麼快,畢業已經半年了,還是不時地想念宿舍的弟兄們,paperen想他們大概也變了,跟大學的朋友交流也越來越少了,偶爾在綫上聊幾句,一開始還有給部分人發短信報告一下自己的生活,電話一開始也有打過,但是漸漸的就少了,paperen不知道能不能用越來越陌生來形容,但是在paperen認為不至於陌生,因為再碰到他們的時候可能不如大學的那樣青春了那樣單純了,但是在paperen腦中他們還是我在大學認識的他們,而paperen還是他們在大學認識的paperen……
冬至到底是什麼一個節日,聖誕節,元旦,paperen對節日沒什麼感覺,只對放假敏感…聖誕節夜晚的街上應該挺美的,假的聖誕樹,繽紛的燈泡,但對於paperen來說也就是一轉眼過去的東西。晚上回蝸搭的差不多都是末班車,一直喜歡坐在最後的位置,靠著窗,有時後會對著車窗發呆有時候會在做手指操…而看著外面不斷後退的街道與途人,還是能清晰地告訴我“這裡是深圳,這個是繁華的城市”。
最近评论