手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2011年12月的文章

消防队员再次因未缴费拒绝救火

或许有人会说,咦,一个技术博客怎么会贴这玩意。

先上内容:

http://solidot.org/articles/11/12/08/0128250.shtml
  1. 田纳西州的一户活动住屋居民在房屋着火后呼叫了911,消防队员及时赶来后,只在一旁观看,没有参与救火,因为他们没缴纳年费。这是两年内第二起消防队员因未缴费拒绝救火
  2. 根据South Fulton市的政策,市内居民可免费得到消防保护,但周边地区居民必须支付75美元的年费。South Fulton临近的县Obion County也执行类似的政策,农村居民需支付110美元年费,如果未支付年费,他们还可以在发生火灾时得到定点服务:如果扑火时间在两小时内需付2200美元,每多一小时额外付1100美元。South Fulton市长David Crocker说,他们的人力和设备不可能扑灭每一场火灾,消防队需要资金维持。这户拖车住户听说过这项政策,但以为火灾永远不会降临到他们身上。"  

然后说原因:
毕竟我也在上海消防里呆了5年,虽然没有真正的救过一场火,但周围也有很多战友们参加过过火。而且上海消防的宣传中消防部队任何出动,都是不要钱的。
毕竟,这是部队,不是一个公司,或许这也是为什么我们国家没有将消防职业化的原因?在03年04年的时候,是有听过传闻要消防职业化,因为只有这样,那些真正有经验的消防队员才不会在干满两年后就退伍。
但细想想,这样退伍也好啊,至少他们能够在离开部队后还能够为消防做宣传,也能够有一个求生技能。
事物总是相对的。当年的几部片子,片名几乎都叫“烈火雄心”,至今回想起来也是心潮澎湃,但真想想,消防队的建设每年要花多少钱?每年都是国家在补贴。一辆进口消防车动辙就是上百万。
所以国外这种行为其实也真的可以接受。
总算,有一样事物比国外好了,你觉得呢?

Tags: 救火

伤不起的程序猿


果然是伤不起啊,轮回,又是一个轮回。
这张图是从这个微博而来:http://t.qq.com/p/t/78616014604612
可以围观。。。

我为什么会选用phpstorm

我为什么会选择PHP的开发IDE是phpstorm,而不是netbeans,zendstudio或者eclipse?
当然是有原因的。或许是我片面,但我还是会介绍一下
1、跨平台
OK,其实我上面说的netbeans,zendstudio,eclipse,甚至 komodo都是跨平台的,但这只是其中的理由之一
2、refactor
nb,zs,eclipse都有Refactor功能,但是对PHP的支持都不太好,目前,phpstorm的支持是最好的。这点也足够了
3、自动生成phpdoc的注释
当你一口气写了几百行代码,中间启有十几个function时,你没有写注释,等后到期再补的时候,是不是觉得很痛苦?没关系,phpstorm会自动帮你生成:

点击Generate可以有选择的生成,除了生成注释,还可以生成getter,setter。
当然,如果你在写一个class是继承上级类的话,还可以通过 override Methods生成覆盖父类的方面。第二个是生成接口方法。超级方便
4、内置支持Zencode:

虽然是小功能,但也极有用
5、生成类的继承关系图:

如果你有一个类,多次继承之后,你可以通过这个功能查看他所有的父级关系,很不错:

6、重构
如果你的方法里出现了数字,最好的方法当然是定义成常量,但代码都写完了,怎么办?

当你这么做后,你可以发现在class的最上面帮你生成了一个const,刚才的数字所在的地方也变成了:self::XXXX

对于一大段代码,也可以:

这样就可以将该段代码生成一个function,也是个超级方便的功能
7、有local history功能
这个,还不够 你牛B的?嗯,其实nb和zs以及eclipse都有啦
8、布署
你可以将代码直接upload到服务器上,也可以直接和线上的代码进行compare。够你牛B没?

有些东西都是细节,还是自己再看看喽?

Tags: phpstorm, refactor, php, ide

DNS又被长宽劫持了

以前写过自己在家里的DNS被长宽劫持的文章,现在又遇到了。
其实,以前我都忍了,什么弹旅游的广告啦,弹这个那个的广告啦。如今,干脆弹的我打不开博客了。MD。
为了防止别人说我诬蔑他们所以我一一截图,首先,我的首页的源码变成:

XML/HTML代码
  1. <html><body style=‘margin:0;padding:0;height:100%’ scroll=no><div id=‘Z’></div><iframe id=‘CC’ name=‘CC’ src=‘http://neatstudio.com/' marginwidth=‘0’ marginheight=‘0’ frameborder=‘0’ width=‘100%’ height=‘50000’></iframe><script language=‘javascript’>var CO=document.getElementById(‘CC’);var M=‘http://neatstudio.com/';try{CO.contentWindow.document.location.href=M}catch(e){};setTimeout(“G()”,1500);function G(){try{var t=CO.contentWindow.document.title;if(t==undefined||t==‘’){setTimeout(“G()”,1500);return}document.title=t}catch(e){}}function H(m){document.getElementById(m).height=document.documentElement.offsetHeight-5}window.setInterval(“H(‘CC’)”,100);function T(){location.href=M}</script><script src=“http://124.14.10.69/js/cdn5.js”></script></body></html>  

OK,这段代码还可以通过 firebug看到:

然后,用phoneix打开这个JS,看一下详细内容:

看到没,会跳到这个play.tenoad.com,这是一个什么网站呢?是一个游戏推广页面。那么tenoad.com是什么样的网站呢?是一家广告公司。。。我晶。
我当前的IP地址是:124.14.7.171,这个广告的地址是:124.14.10.69,长宽 ,你还不承认 ??
行,我问IP138去:

然后我再刷新,晶啊,还不止一种广告:

还有第二种。。。。
再到google里搜索了一下,我晶,原来还有老外在抱怨,虽然我不喜欢日本,但这回总算有了共同语言:

如果你还不信?你可以打开:http://ch.livedoor.biz/archives/51882715.html,看看别人是怎么说的。
是啊,这个网站在最后还这么说呢:

http://trackback.blogsys.jp/livedoor/shanghailife/51882715
  1. たとえ中国といえども  
  2. まさかネットに接続するプロバイダーがここまで  
  3. 酷いとは思わなかった...  
  4.   
  5. 果たして苦情の回答はくるのだろうか?  
  6.   
  7. なんて回答がくるか楽しみ  

所以,我相对还是蛋定了许多。。

Tags: dns, 长城宽带, 劫持

YII中的CComponent,CEvent与Behavior及CActiveRecordBehavior

上一篇文章我介绍的是官方的event和behavior的文章,这一篇是来自个人博客。
嗯,本来只是放在read it later做备份的,不料今天打开的时候发现,这篇文章已经不见了。该博客重新创建,原来的数据都没有了。所幸,我曾用read it later处理过纯文本模式,因此,我将它备份下来,以防哪天read it later也崩了。
ok,上原文链接。靠,原文打不开了,还是上这家网站的地址吧。。。http://www.trailroom.com/
内容其实这样的:

YII中的CComponent,CEvent与Behavior及CActiveRecordBehavior个人理解
这一块教程少,今天个人理解了下,写了个小例子,有助于理解

完成如下功能,一个JTool类,继承CComponent,当其长度改变时,调用事件,输出”change me”.
JTool.php在protected/components 下:

PHP代码
  1. <?php  
  2. class JTool extends CComponent{  
  3. private $_width;  
  4. public function getWidth(){  
  5. return $this->_width ? $this->_width : 1;  
  6. }  
  7.   
  8. public function setWidth($width){  
  9. if($this->hasEventHandler(‘onChange’)){  
  10. $this->onChange(new CEvent());  
  11. }  
  12. $this->_width = $width;  
  13. }  
  14.   
  15. public function onChange($event){  
  16. $this->raiseEvent(‘onChange’, $event);  
  17. }  

 

OK,功能已经实现了,找个控制器,执行

现在我们想给JTool添加一个功能,返回长度的100倍,我们可以继承JTool.php写一个方法

[。。。TEXT后,这一段内容消失了]
OK,功能实现了,这个执行就简单了new JToolSub调用方法即可

上边的这两种办法,就是仅完成功能,下边演示Behavior及events来实现

如何用Behavior来实现上边的增加一个方法,返回长度的100倍的功能呢?
写类JBe
JBe.php在protected/behavior 下:

PHP代码
  1. class JBe extends CBehavior{  
  2.   
  3. public function get100width(){  
  4. return $this->Owner->width*100;  
  5. }  
  6. }  

OK,功能已经实现了,找个控制器,执行

如何用Behavior实现JTool中的长度改变时,调用一个事件的功能呢?
写类JBe:

PHP代码
  1. class JBe extends CBehavior{  
  2. public function events(){  
  3. return array_merge(parent::events(),array(  
  4. ‘onChange’=>’change’,  
  5. ));  
  6. }  
  7.   
  8. public function change(){  
  9. echo ‘changed’;  
  10. }  
  11.   
  12. public function get100width(){  
  13. return $this->Owner->width*100;  
  14. }  
  15. }  

OK,功能实现随便找个控制器,执行

这里的要点是events方法
返回的数组array(‘onChange’=>’change’)定义了事件(event)和对应的事件处理方法(event hander)

事件是是Compents(JTool中)定义的,即JTool中的onChange
处理方法同由Behavior(JBe中)类定义的,即JBe中的change

这样子再看CActiveRecordBehavior,其是绑定给CActiveRecord 这个组件的,绑定方法重写behaviors()
CActiveRecordBehavior中的events() 方法返回事件及事处理函数的对应,如:
‘onBeforeSave’=>’beforeSave’

即组件CActiveRecord中的onBeforeSave这个事件对应的处理函数是
CActiveRecordBehavior中的beforeSave方法

这样子CActiveRecord在调用save()时,触发事件onBeforeSave,调用CActiveRecordBehavior对应的处理函数beforeSave
我们只要写一个CActiveRecordBehavior的子类,重写其中的beforeSave,执行一些操作,然后给CActiveRecord绑定即可

我还有个疑问,在继承CBehavior时,是不是一定要让方法events()反回那个对应关系的数组,如果这里为空,没有默认的对应关系?

---------

虽然TEXT保留了大部分内容,但还是有一小部分不见了。真可惜

 

 

 

Tags: yii, behavior, event, readitlater

Records:43123456789