<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feed.ivershuo.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
<channel>
<title>阿肆</title>
<link>http://www.ivershuo.com/</link>

<language>zh-CN</language>
<description>Yield To nothing...</description>
<lastBuildDate>Thu, 01 Mar 2012 16:37:06 +0000</lastBuildDate>
<pubDate>Thu, 01 Mar 2012 16:37:06 +0000</pubDate>
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feed.ivershuo.com/shuo" /><feedburner:info uri="shuo" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>shuo</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
<title>介绍两个强大的kohana插件</title>
<link>http://feed.ivershuo.com/~r/shuo/~3/U9f7GmWvHTI/</link>
<guid isPermaLink="false">http://www.ivershuo.com/2012/03/good-kohana-modules/</guid>
<pubDate>Thu, 01 Mar 2012 16:37:06 +0000</pubDate>
<dc:creator>阿肆</dc:creator>
<description><![CDATA[月影同学最近给kohana写了两个强大的插件，：jkit（JKit 是基于 Kohana 3.2 版本基础上开发的框架级插件）和kohana-python（可直接在php中无缝使用python中滴Cl...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>月影同学最近给kohana写了两个强大的插件，：<a href="https://github.com/akira-cn/JKit" title="jkit项目托管主页" target="jkit">jkit</a>（JKit 是基于 Kohana 3.2 版本基础上开发的框架级插件）和<a href="https://github.com/akira-cn/Kohana-python" title="kohana-python项目主页"  target="kohana-python">kohana-python</a>（可直接在php中无缝使用python中滴Class）。给感兴趣的同学演示下使用。<br />
示例是一个上传图片到upyun的脚本<br />
file:controller/a.php（用来接收和返回的客户端接口）<br /><code><span style="color: #000000">
class&nbsp;Controller_A&nbsp;extends&nbsp;Controller&nbsp;{
<br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;before(){
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent::before();
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;img&nbsp;=&nbsp;new&nbsp;Model_Logic_Imgs;
<br />&nbsp;&nbsp;&nbsp;&nbsp;}
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*更新图片*/
<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;action_edit_img(){
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$upedFile&nbsp;=&nbsp;$this-&gt;img-&gt;edit_img($this-&gt;request-&gt;param());
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch(Exception&nbsp;$e){
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;err(null,&nbsp;$e-&gt;getMessage());
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;ok($upedFile);
<br />&nbsp;&nbsp;&nbsp;&nbsp;}
<br />}</span>
</code><br />
file:logic/imgs.php（用来处理图片logic）<br /><code><span style="color: #000000">
class&nbsp;Model_Logic_Imgs&nbsp;extends&nbsp;Logic{
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*更新图片信息*/
<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;edit_img($data){
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!$data['pid']){
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;Exception('没有指定图片id');
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$upedFile&nbsp;=&nbsp;$this-&gt;up_img($data['sourceurl']);
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!$upedFile){
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;Exception('图片上传到upyun未成功');
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*其他图片信息数据库信息更新等*/
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JKit::$log-&gt;info($objDb-&gt;last_query,&nbsp;$arrRes);
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$upedFile['url'];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;}
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*更无缝的调用python&nbsp;Class，
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*这样在controller或logic如有需要用到python中的Class只需要new一个Logic&nbsp;Class
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**/
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;__call($func,&nbsp;$args){
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$img_py_logic&nbsp;=&nbsp;new&nbsp;Model_Pylogic_Imgs;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;call_user_func_array(array($img_py_logic,&nbsp;$func),&nbsp;$args);
<br />&nbsp;&nbsp;&nbsp;&nbsp;}
<br />}</span>
</code><br />
file:pylogic/imgs.py（需要用到的图片处理相关python）<br /><code><span style="color: #000000">
import&nbsp;sys,&nbsp;os,&nbsp;MySQLdb,&nbsp;time,&nbsp;urllib,&nbsp;re,&nbsp;Image
<br />import&nbsp;md5&nbsp;as&nbsp;imd5
<br />from&nbsp;upyun&nbsp;import&nbsp;UpYun
<br />
<br />TMPFILE_DIR&nbsp;=&nbsp;'/tmp/weizoo-img-tmp/'
<br />UPCONFIG&nbsp;=&nbsp;{
<br />&nbsp;&nbsp;&nbsp;&nbsp;'bucket'&nbsp;:&nbsp;'some-img',
<br />&nbsp;&nbsp;&nbsp;&nbsp;'username'&nbsp;:&nbsp;'ivershuo',
<br />&nbsp;&nbsp;&nbsp;&nbsp;'password'&nbsp;:&nbsp;'******'
<br />}
<br />
<br />def&nbsp;md5(src):
<br />&nbsp;&nbsp;&nbsp;&nbsp;m1&nbsp;=&nbsp;imd5.new()
<br />&nbsp;&nbsp;&nbsp;&nbsp;m1.update(src)
<br />&nbsp;&nbsp;&nbsp;&nbsp;dest1&nbsp;=&nbsp;m1.hexdigest()&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;dest1
<br />
<br />class&nbsp;Model_Pylogic_Imgs:
<br />&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__init__(self)&nbsp;:
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.conn&nbsp;=&nbsp;MySQLdb.connect(DBCONGIF['host'],&nbsp;DBCONGIF['user'],&nbsp;DBCONGIF['passwd'],&nbsp;DBCONGIF['dbname'])
<br />&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;up_img(self,&nbsp;sourceurl)&nbsp;:
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&nbsp;=&nbsp;UpYun(UPCONFIG['bucket'],&nbsp;UPCONFIG['username'],&nbsp;UPCONFIG['password'])
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#按星期建立目录
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_dir&nbsp;=&nbsp;time.strftime('%y%U',&nbsp;time.localtime(time.time()))
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#获取文件后缀
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_r&nbsp;=&nbsp;re.compile('\.\w+$')
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filetype&nbsp;=&nbsp;_r.search(sourceurl).group()
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#下载到本地文件
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localfile&nbsp;=&nbsp;TMPFILE_DIR&nbsp;+&nbsp;str(int(time.time()))&nbsp;+&nbsp;filetype
<br />
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;u.mkDir(_dir)&nbsp;:
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;False
<br />
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#img_file&nbsp;=&nbsp;urllib.urlopen(sourceurl,&nbsp;'rb')
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.popen('wget&nbsp;"'&nbsp;+&nbsp;sourceurl&nbsp;+&nbsp;'"&nbsp;-q&nbsp;-O&nbsp;'&nbsp;+&nbsp;localfile)
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;img_file&nbsp;=&nbsp;open(localfile,&nbsp;'rb')
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bfile&nbsp;=&nbsp;img_file.read()
<br />
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#源文件md5之后取前16位作为文件名
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filename&nbsp;=&nbsp;md5(bfile)[0:16]
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#上传到upyun文件
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;upfile&nbsp;=&nbsp;_dir&nbsp;+&nbsp;'/'&nbsp;+&nbsp;filename&nbsp;+&nbsp;filetype
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;u.writeFile(upfile,&nbsp;bfile)&nbsp;:
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;False
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#获取图片平均色，by:@jerryqu
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rgb&nbsp;=&nbsp;self.rbg_img(localfile)
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret_data&nbsp;=&nbsp;{'url':upfile,'rgb':rgb}
<br />
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.remove(localfile)
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ret_data</span>
</code><br />
是不是很喜欢这种写法呢？若感兴趣，<a href="http://www.silverna.org/" title="月影的博客" target="akira">月影的博客</a>上有更多的介绍</p>
<img src="http://feeds.feedburner.com/~r/shuo/~4/U9f7GmWvHTI" height="1" width="1"/>]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>http://www.ivershuo.com/2012/03/good-kohana-modules/#comments</comments>
<wfw:commentRss>http://www.ivershuo.com/feed/2010/04/think-about-markuplanguage/</wfw:commentRss>
<feedburner:origLink>http://www.ivershuo.com/2012/03/good-kohana-modules/</feedburner:origLink></item>
<item>
<title>动态ip自动绑定域名方案1</title>
<link>http://feed.ivershuo.com/~r/shuo/~3/E0B9UdByyx0/</link>
<guid isPermaLink="false">http://www.ivershuo.com/2012/03/dns-for-dhcp/</guid>
<pubDate>Wed, 29 Feb 2012 18:02:14 +0000</pubDate>
<dc:creator>阿肆</dc:creator>
<description><![CDATA[去年从公司拿了个被市场淘汰滴EZ Station玩，虽然配置很低，不过装个linux还是跑得动当开发机滴。
配好webserver，指定好WAN到LAN的转发规则之后，发现不知道为啥有些线路能访问到...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>去年从公司拿了个被市场淘汰滴EZ Station玩，虽然配置很低，不过装个linux还是跑得动当开发机滴。<br />
配好webserver，指定好WAN到LAN的转发规则之后，发现不知道为啥有些线路能访问到有些线路访问不到，当时也就木有去太去管他了。<br />
今年将网络从山寨滴长城宽带换到电信10M光纤之后，电信送滴那个华为HG8240居然不支持WAN到LAN的转发了。前天将PPPoE换成自己的路由拨号之后就可以用了（具体方案我在文尾提出来），因为是动态ip滴，用ip访问终归不方便，虽然有花生壳等服务支持动态DNS解析，但是我又不想暴漏自己的ip，所以就用了使用nginx反向代理滴方式。<br />
而由于ip是变动滴，所以更新起来也就麻烦点，于是用了一套简单的自动上报ip的方案，nginx机器收到ip变更通知再更新配置reload。具体就是如下几步：<br /><ol>
<li>先在路由做好内网ip的mac地址绑定，防止路由重启导致web机获取不同的内网ip</li>
<li>将需要启用外网服务的端口映射转发到web机。ps.很多运营商是禁止了80端口开放，所以可能需要使用其他端口</li>
<li>配置个自动上报的脚本（我这里有写一个简单的<a href="http://www.box.com/s/2138odhqa58qcjcad20s" target="box">http://www.box.com/s/2138odhqa58qcjcad20s</a>，前面的配置自己修改下）。可以使用定时任务来跑或者hack了路由器的可以直接在路由器上来实现该功能，重启触发就是。</li>
<li>在其他外网机器上配置ngxin（或其他可用作反向代理的服务），加上类似如下配置（具体规则根据自己需要修改）：<br />
<code><span style="color: #000000">
server{
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;80;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#开放给外部访问的域名
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_name&nbsp;xxx.ivershuo.com;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;/&nbsp;{
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#web机器的webserver地址
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_pass&nbsp;http://111.222.222.111:8964;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_redirect&nbsp;off;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_set_header&nbsp;Host&nbsp;$host;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_set_header&nbsp;X-Real-IP&nbsp;$remote_addr;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_set_header&nbsp;X-Forwarded-For&nbsp;$proxy_add_x_forwarded_for;
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
<br />}</span>
</code></li>
<li>将域名A记录到上面的nginx机器</li>
<li>跑个http服务来接受前面web机上报的ip，用脚本自动更新nginx配置ip部分，reload nginx配置使生效</li>
</ol><br />
该方案主要可以实现动态ip的域名绑定，并且可以实时生效，又避免了实际ip的暴漏，还可以绕过运营商对80端口的禁止。不过缺点就是流量要走两份，但是一般这个情况对我没太大影响，自己家里网络是包月的，vps流量也用不完。</p><p>如果你也是用的坑爹的电信送的华为HG8240，接下来说下如何使用自己的路由代替HG8240做DHCP服务器。<br />
首先我们要拿到telcomadmin账号，因为给的那个useradmin账号除开可以重启路由外啥功能都木有，真是坑爹。<br />
先用root:admin（对滴，root密码就是这么sb）telnet到192.168.1.1，然后输入shell进入shell，在/mnt/jffs2/hw_ctree.xml这个文件中查找到“ telecomadmin”这串，应该看到密码了吧，然后用这个账号和密码登陆路由<br />
接下来在“网络”页面拿到自己的上网账号和密码（此处需要用到firebug等工具），将internet服务用PPPoE桥接方式桥接到自己的路由器，然后取消HG8240的DHCP服务器功能，如此就将HG8240阉割到基本只有光纤转普通那啥网线的功能了。<br />
用不同段的ip如192.168.2.1做为自己路由的ip，启用DHCP服务，用PPPoE拨号上网。刷新其他机器ip和dns，done！</p>
<img src="http://feeds.feedburner.com/~r/shuo/~4/E0B9UdByyx0" height="1" width="1"/>]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>http://www.ivershuo.com/2012/03/dns-for-dhcp/#comments</comments>
<wfw:commentRss>http://www.ivershuo.com/feed/2010/04/think-about-markuplanguage/</wfw:commentRss>
<feedburner:origLink>http://www.ivershuo.com/2012/03/dns-for-dhcp/</feedburner:origLink></item>
<item>
<title>在python3下使用pyxmpp2</title>
<link>http://feed.ivershuo.com/~r/shuo/~3/-eRtq4hKExI/</link>
<guid isPermaLink="false">http://www.ivershuo.com/2011/11/pyxmpp2-in-python3/</guid>
<pubDate>Tue, 01 Nov 2011 06:48:06 +0000</pubDate>
<dc:creator>阿肆</dc:creator>
<description><![CDATA[这两天在玩一个东东，刚好要用到xmpp，之前有用过php版滴xmpphp，不过php实在不适合玩这个。又找了下nodejs版本滴，可是发现真是各种括号密集，属于那个特工冒死偷到最后一页代码的笑话滴那样...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>这两天在玩一个东东，刚好要用到xmpp，之前有用过php版滴<a href="http://code.google.com/p/xmpphp/" target="_balnk" title="xmpphp项目主页">xmpphp</a>，不过php实在不适合玩这个。又找了下nodejs版本滴，可是发现真是各种括号密集，属于那个特工冒死偷到最后一页代码的笑话滴那样。所以虽然对python不熟悉，还是找了python版滴来用了。据说<a href="http://pyxmpp.jajcus.net/" target="_target" title="pyxmpp主页">pyxmpp</a>是在python下最符合XMPP协议的package，而pyxmpp也推出了最新的<a href="https://github.com/Jajcus/pyxmpp2" target="_target" title="pyxmpp2项目主页">pyxmpp2</a>。像我这样滴潮人当然就折腾这个了。<br />
折腾过程遇到个菜鸟坑，所以记录下，顺便更新下大半年没更新滴blog。<br />
为了显得潮，我将python3也装上了，因为pyxmpp2需要依赖<a href="http://www.dnspython.org/" target="_blank" title="dnspython主页">dnspython</a>，问题就出在这里。<br />
其实pyxmpp2项目主页也有提到，那就是需要检dnspython的<a href="https://github.com/rthalley/dnspython/tree/python3" target="_blank" title="branch python3 of dnspython">python3 branch</a>（<a href="http://www.mail-archive.com/dnspython-dev@howl.play-bow.org/msg00008.html" target="_blank">参考</a>）。<br />
完成之后滴<a href="http://app.ivershuo.com/demo/gbot/" target="_blank" title="pyxmpp2 demo">demo可以点这里</a>玩。<br />
这个事情告诉我，详细看README滴每一行是多么重要。<br />
python3改动较大，同时遇到了几个坑，虽然py3自带了一个2to3滴工具，不过还是顺带推荐下<a href="http://woodpecker.org.cn/diveintopython3/porting-code-to-python-3-with-2to3.html" target="_blank" title="使用2to3将代码移植到Python 3">这个文档</a>，在转到python3下开发滴同学建议先看下。</p>
<img src="http://feeds.feedburner.com/~r/shuo/~4/-eRtq4hKExI" height="1" width="1"/>]]></content:encoded>
<slash:comments>1</slash:comments>
<comments>http://www.ivershuo.com/2011/11/pyxmpp2-in-python3/#comments</comments>
<wfw:commentRss>http://www.ivershuo.com/feed/2010/04/think-about-markuplanguage/</wfw:commentRss>
<feedburner:origLink>http://www.ivershuo.com/2011/11/pyxmpp2-in-python3/</feedburner:origLink></item>
<item>
<title>做什么事？</title>
<link>http://feed.ivershuo.com/~r/shuo/~3/y1MLG4jcgeY/</link>
<guid isPermaLink="false">http://www.ivershuo.com/2011/05/corporate-culture-life/</guid>
<pubDate>Sat, 28 May 2011 13:26:58 +0000</pubDate>
<dc:creator>阿肆</dc:creator>
<description><![CDATA[如果要问有一家公司在做的事是“让世上没有难做的生意”，那么这家公司是哪家？我想应该很多人都知道那是阿里巴巴。
很多人听说过“企业文化是一家公司的灵魂”这句话，不过很多人会觉得这就是一句虚话是一句屁话...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>如果要问有一家公司在做的事是“让世上没有难做的生意”，那么这家公司是哪家？我想应该很多人都知道那是阿里巴巴。<br />
很多人听说过“企业文化是一家公司的灵魂”这句话，不过很多人会觉得这就是一句虚话是一句屁话。其实，真正用心去想一下，事情其实就是那么简单。<br />
我发现符合社会认知的“成功”的大公司，他们做的事情其实都是只有一件。虽然他们做的产品不同，虽然或许他们做的产品有很多。<br />
微软让“计算机进入家庭，放在每一张桌子上”，麦当劳要“控制全球食品服务业 ”，“只要是图片都是我们（柯达）的业务 ”，百度想“让人们更便捷的获取信息，获得所求"，腾讯要做“最受尊敬的互联网企业”，阿里巴巴要“让世上没有难做的生意”... ...<br />
其他的都是手段，上面说到的才是目的。记得之前马云有说过他不会做b2c，不过后来做了。做不做b2c只是一个手段，他最终要的还是“让世上没有难做的生意”，“通过发展新的生意方式创造一个截然不同的世界”。说得好像很伟大，其实人性本来就是想要所得，然想要得到别人的也得给别人所得。现在社会最简单通用的体现就是钱，想想货币之前呢？所以做到了，就是“顺便”把钱也赚了，google就是最明显的例子。我记得我爸对我说过钱在别人口袋，不会很容易就到你自己口袋里来。<br />
用一个实例说下。我去百度这家公司之前，其实对这家公司没啥看法和理解。在百度两年，发现这家公司发展成现在这么大，其实做的事情一直没变，确实也是在“让人们更便捷的获取信息，获得所求”，做“简单可依赖”的产品。做知道是因为发现很多中国用户在query“为什么xxx”、“怎样xxx”这样sentence，而不是像英语系国家用户一样通过 key <strong>words</strong> 在找答案，而百度的搜索引擎去整个互联网获取这样信息或许更难。百度MP3是因为用户有<strong>听</strong>歌的需求（这里是“听”不是下载，应该这样能明白百度mp3向ting转型，因为之前的带宽情况下用户要“听”歌先下载是最好的方式）。还有很多产品，不过本身目的都是要“更便捷的获取信息”，就算包括像先前的百度有啊这样的产品，他的使命更多是用户要获得的信息而不是让商人更好的做生意。有人说阿拉丁使百度更不像一个搜索引擎了，网页搜索引擎也是现阶段网民获取信息最便捷的方式，而或许以后百度还真的就不是做现在看到的网页搜索引擎这个产品呢？<br />
大家应该也会发现一个现象，一旦网上有网民“抱怨”腾讯产品，总会遇到腾讯的同学出来耐心的解释。因为要做“最受尊敬的互联网企业”有一条文化就是“重视员工利益，激发员工潜能，在企业价值最大化的前提下追求员工价值的最大实现”，所以我遇到的腾讯的腾讯不管是在职的还是已经离开的对腾讯公司都是有很好印象的。而腾讯内部“道德操守”也是一条高压线。<br />
一家公司要做的事情决定了这家公司做的产品，也决定了这家公司能走多远。或许有同学会说有得这些所谓的冠冕堂皇的文化是后来公司长大了才成文的，不过你会发现成文不重要，重要的是确实是一开始有没有说，他一直就是这样做的。而不管是光明还是龌龊的事，总是基于这个信条的。<br />
现在创业的公司很多，一片繁荣的现象。不过有些公司在做什么样的事呢？其实产品不重要，做的事才是重要的，做产品原型不是做事，写代码不是做事，推广产品也不是做事，这些只是在弄产品而已。移动互联网、lbs、电子商务这些概念现在都很火，很多人一股脑扎堆在里面。很多人做的事是“拉一批人干活，哄骗vc投钱，上市”，那么真正做的事就是“想上市”而已。当然这也是在做事，不过就算拉到这样一批做这个事（上市）的人，那么成功上市之后呢？有多少在做“上市”这个事的人有想过事情做完之后干什么呢？<br />
所以如果有人要我打工，而问一下做啥呢？回答是做一个很多人都会用的东西，有投资不愁吃穿，还有期权，最终会有一笔钱，也有啥地位。那其实许诺的是空的，这个事一开始是基于“很多人一定会用”才能走到下一个分支的。能为别人带来什么才有人用的，也才知道要做的是什么。能为别人贡献才能得到别人的回报，能为整个社会贡献才能得到社会的回报。社会是人组成人，社会特性也就是人的特性，人都是利益化的。一开始谈自己的收益和一开始谈能为别人带来什么是不同的做事态度，最终做事的方式和得到的回报也会不同，虽然其实本质是一个事。<br />
如果一开始要做的是网页搜索引擎，那么可能就不会有现在的百度；一开始要做的就是在线电子商务平台，那么阿里巴巴可能就止步b2b商城不会有现在的淘宝支付宝了；一开始只想做一家餐饮公司，那么麦当劳或许只是和你楼下的小菜馆一样。抛开做的产品，看做的事，如果你要做的是“让世界更加欢乐”，那么会做什么呢？迪士尼是先做了个主题公园。<br />
其实不止是做企业，其他也是一样，包括人生和建立一个国家。“独立宣言”下建立的美国奉行民主，打着“翻身做主人”口号的某国家，大家可以看到，恩，有了主人之后当然还要一群奴隶来服侍主人。</p>
<img src="http://feeds.feedburner.com/~r/shuo/~4/y1MLG4jcgeY" height="1" width="1"/>]]></content:encoded>
<slash:comments>6</slash:comments>
<comments>http://www.ivershuo.com/2011/05/corporate-culture-life/#comments</comments>
<wfw:commentRss>http://www.ivershuo.com/feed/2010/04/think-about-markuplanguage/</wfw:commentRss>
<feedburner:origLink>http://www.ivershuo.com/2011/05/corporate-culture-life/</feedburner:origLink></item>
<item>
<title>慎用windows下软链，记录一次纠结的IE9安装历程</title>
<link>http://feed.ivershuo.com/~r/shuo/~3/hhr0GCzkipc/</link>
<guid isPermaLink="false">http://www.ivershuo.com/2011/03/no-ok-for-mklink-in-windows/</guid>
<pubDate>Mon, 21 Mar 2011 18:07:36 +0000</pubDate>
<dc:creator>阿肆</dc:creator>
<description><![CDATA[早两天$M发布了IE9，于是很兴奋的想装一下这个我最不喜欢的浏览器的传说中最优的版本。不过安装过程出现了点意外，所以在这里分享下。首先给几个想要安装IE9浏览器的同学一些建议性的提示：到这里下载离线安...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>早两天$M发布了IE9，于是很兴奋的想装一下这个我最不喜欢的浏览器的传说中最优的版本。不过安装过程出现了点意外，所以在这里分享下。首先给几个想要安装IE9浏览器的同学一些建议性的提示：</p><ol><li><a href="http://windows.microsoft.com/en-US/internet-explorer/downloads/ie-9/worldwide-languages" title="IE9全版本下载地址" target="microsoft">到这里</a>下载离线安装包版本吧，如果你的网速和我一样很慢。</li><li>记得安装之前将<a href="http://support.microsoft.com/kb/2409098" title="IE7安装条件" target="microsoft">这个页面</a>给出的前置安装条件如更新包等准备好。</li></ol><p>好了，回归正题。我是上面的条件都做好了，不过安装过程一直还是提示安装没有成功，也没有明确的错误提示，这就是windows下很多软件的优良传统，只告诉你安装成功或失败，而不告诉你具体为啥原因，更好的传统是不会显示的给你个log信息。然后我只能人肉去找它的log看了，跑到C:\Windows\Logs，果然有个“IE9_NR_Setup.log”的文件，结果发现这个文件根本就是坑爹，啥有用的信息都木有！就是把他的安装界面步骤用个文本描述了一遍而已。然后不知道是最近RP暴涨了还是咋滴，居然让我随便的一不小心在C:\Windows这个下面发现了一个“IE9_main.log”的文件（当时就火大，尼玛随便在我windows目录下放log这样滴文件干啥，$M你真是伤不起啊，有木有！有木有！！）。不过在这个文件发现了一行最重要的信息：<br /><code><span style="color: #000000">
Process&nbsp;exit&nbsp;code&nbsp;0x00000011&nbsp;(17)&nbsp;
<br />[The&nbsp;system&nbsp;cannot&nbsp;move&nbsp;the&nbsp;file&nbsp;to&nbsp;a&nbsp;different&nbsp;disk&nbsp;drive.&nbsp;]</span>
</code></p><p>因为家里用的老爷机C盘空间太小，又装了多个系统不敢随便格了重装Windows，那是各种引导的纠结，你们懂的。所以给windows下的User和'Program files'目录给放其他盘然后搞了个软链。顺带友情提示下，在windows vista以上版本系统已自带<a href="http://technet.microsoft.com/en-us/library/cc753194%28WS.10%29.aspx" title="mklink参考文档" target="microsoft">mklink.exe</a>工具。</p><p>如果你也和我这样的情况，那么下面我做的可能就是你要做的了。</p><p>首先删除c盘下'Program files'这个软链，然后将原来的'Internet Explorer'放回到它“真正”的位置，安装IE9，然后将升级完的'Internet Explorer'再放回去（做这一步的时候你需要有多系统或者借助PE盘，因为windows不允许直接拷贝这个目录出去），然后重新将软链建立。That's all.</p><p>用好奇的话说，这样我就“治愈”了IE9啦，哈哈。这个文章里面用了好多“潮流”的词汇，是因为我发现现在连<a href="http://www.qwrap.com" title="前端开源脚本框架Qwrap官方网站" target="qwrap">Qwrap</a>的作者JK同学都比我潮了，我居然又一次成为WED最out的淫了，所以最近准备在好奇的带领下深刻学习各种脸饼少女啦。</p><p>然后，希望这篇文章永远不要遇到哪个倒霉蛋在下面留类似下面的言：“谢谢，正好遇到和LZ一样的问题”。</p>
<img src="http://feeds.feedburner.com/~r/shuo/~4/hhr0GCzkipc" height="1" width="1"/>]]></content:encoded>
<slash:comments>9</slash:comments>
<comments>http://www.ivershuo.com/2011/03/no-ok-for-mklink-in-windows/#comments</comments>
<wfw:commentRss>http://www.ivershuo.com/feed/2010/04/think-about-markuplanguage/</wfw:commentRss>
<feedburner:origLink>http://www.ivershuo.com/2011/03/no-ok-for-mklink-in-windows/</feedburner:origLink></item>
<item>
<title>你在找的正在找你——百度WED前端开发招聘</title>
<link>http://feed.ivershuo.com/~r/shuo/~3/Jny3NgPkhvo/</link>
<guid isPermaLink="false">http://www.ivershuo.com/2010/09/wed/</guid>
<pubDate>Tue, 28 Sep 2010 14:33:04 +0000</pubDate>
<dc:creator>阿肆</dc:creator>
<description><![CDATA[你是不是正在找一份前端开发方向的工作或实习机会呢？如果回答是：&ldquo;是！&rdquo;。那么太有缘分了，我们也正在找你。我们是谁？我们是WED&mdash;&mdash;百度电子商务技术研发部...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>你是不是正在找一份前端开发方向的工作或实习机会呢？</p><p>如果回答是：&ldquo;是！&rdquo;。那么太有缘分了，我们也正在找你。</p><p><strong>我们是谁？</strong></p><ul><li>我们是WED&mdash;&mdash;百度电子商务技术研发部前端开发团队。</li><li>我们是专业的前端开发团队，致力于为百度电子商务产品的用户打造最佳体验。</li><li>我们是年轻的技术团队，明年1月份才迎来她的第三个生日。</li><li>我们是充满快乐的团队，她的官方全称是Web Engineering &amp; Development，但更多情况我们称为：We Enjoy Days~</li><li>我们是拥有很多美女、很多帅哥、很多牛人的优秀团队。</li></ul><p><strong>加入WED团队，你可以做这些事情：</strong></p><ul><li>为百度最优秀的互联网产品改善用户体验</li><li>让自己亲手开发的作品被亿万人使用</li><li>和众多技术牛人一起钻研最新前端技术</li><li>和许多优秀团队进行技术交流</li><li>为Web标准和W3C做点自己能做的事儿</li></ul><p><strong>加入WED团队，你可以拥有这些：</strong></p><ul><li>一边工作一边聊天、搞笑、吃零食</li><li>随时表达你的想并得到关注和支持</li><li>技术全面发展、辅导和长期的培养计划</li><li>享受亲如兄弟姐妹的团队氛围</li><li>个人自由支配的时间和发展空间</li><li>得到为团队成员精心设计的有趣纪念品</li></ul><p><strong>加入WED团队，你可以同我们一起分享这些评价：</strong></p><ul><li>WED团队是强大专业的团队，快速响应需求，有效率有质量地完成任务</li><li>WED团队是无所不能的团队，看似不可能实现的交互效果，在不经意间被轻松搞定</li><li>WED团队是创新求变的团队，我们不时有新想法，迎接新变化，不断给新的惊喜</li></ul><br />
<strong>如果</strong><p><code><span style="color: #000000">
(你决定成为国内最专业前端开发工程师
<br />&amp;&amp;&nbsp;你喜欢轻松愉快地工作
<br />&amp;&amp;你享受团结、自由、像一个大家庭般的团队氛围)</span>
</code></p><p><strong>只要你接触过这些技术中的一部分</strong></p><p><code><span style="color: #000000">
(html/xhtml、css、页面架构和布局
<br />||&nbsp;Web标准、表现与数据分离、html语义化
<br />||&nbsp;JavaScript或ActionScript
<br />||php、ruby、python或perl)</span>
</code></p><p><strong>只要你能做到</strong></p><p><code><span style="color: #000000">
(热爱前端开发这个事业
<br />&amp;&amp;&nbsp;有很好的学习能力和逻辑思维能力
<br />&amp;&amp;&nbsp;不错的团队意识和沟通影响力&nbsp;)</span>
</code></p><p>那么，点击下面的链接，加入我们吧：</p><p><a href="http://hr.baidu.com/www/job/jobDetail.action?jobId=2259" target="_blank" title="百度电子商务技术研发部招聘要求及简历投递">http://hr.baidu.com/www/job/jobDetail.action?jobId=2259</a></p><p>你也可以直接<a href="mailto:wed@aerfa.net">将你的简历发送给我</a>。</p>
<img src="http://feeds.feedburner.com/~r/shuo/~4/Jny3NgPkhvo" height="1" width="1"/>]]></content:encoded>
<slash:comments>8</slash:comments>
<comments>http://www.ivershuo.com/2010/09/wed/#comments</comments>
<wfw:commentRss>http://www.ivershuo.com/feed/2010/04/think-about-markuplanguage/</wfw:commentRss>
<feedburner:origLink>http://www.ivershuo.com/2010/09/wed/</feedburner:origLink></item>
<item>
<title>为Linode（UBUNTU server）添加SNMP</title>
<link>http://feed.ivershuo.com/~r/shuo/~3/j51CdDfb4J8/</link>
<guid isPermaLink="false">http://www.ivershuo.com/2010/08/linode-snmp/</guid>
<pubDate>Tue, 31 Aug 2010 13:33:59 +0000</pubDate>
<dc:creator>阿肆</dc:creator>
<description><![CDATA[因为所在的godaddy服务器时不时受到GFW的亲睐，监控宝的短信几乎都是月初前两天就发光了，所以最终还是决定向Linode搬家。在此先感谢下Blogkid同学的帮助。

装上AMP环境之后，就准...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>因为所在的godaddy服务器时不时受到GFW的亲睐，<a title="注册监控宝" href="http://www.jiankongbao.com/invite/x2r3ro" target="_blank">监控宝</a>的短信几乎都是月初前两天就发光了，所以最终还是决定向<a href="http://www.linode.com/?r=6c9404a07d1833e3be4b183ecf390b689595b457" target="_blank">Linode</a>搬家。在此先感谢下<a title="同事张磊的博客" href="http://www.blogkid.net" target="_blank">Blogkid</a>同学的帮助。</p><p>装上<abbr title="Apache">A</abbr><abbr title="Mysql">M</abbr><abbr title="php">P</abbr>环境之后，就准备试用下<a title="注册监控宝" href="http://www.jiankongbao.com/invite/x2r3ro" target="_blank">监控宝</a>的<a href="http://www.jiankongbao.com/features/server_monitoring" target="_blank">服务器监控</a>，他们的监控是使用的<a title="查看SNMP在wikipedia的解释" href="http://en.wikipedia.org/wiki/SNMP" target="_blank">SNMP</a>监控（可以参照<a title="注册监控宝" href="http://www.jiankongbao.com/invite/x2r3ro" target="_blank">监控宝</a><a title="监控宝安全指引" href="http://wiki.jiankongbao.com/doku.php/%E6%96%87%E6%A1%A3:%E5%AE%89%E5%85%A8%E6%8C%87%E5%BC%95" target="_blank">这里</a>的安全指引第一部分）。因为在配置中自己遇到了一些问题，所以记录下。（不是所有的同学都会遇到问题，张磊同学就说他安装配置一帆风顺）。</p><p>我选择使用的server是Ubuntu 10.04 LTS，并且使用开源的<a title="net-snmp项目主页" href="http://sourceforge.net/projects/net-snmp/" target="_blank">Net-SNMP</a>来做监控，如果有同学也选择的<a href="http://www.linode.com/?r=6c9404a07d1833e3be4b183ecf390b689595b457" target="_blank">Linode</a>并使用和我相同的系统如果在安装和配置Net-SNMP遇到同样的问题，下面的内容可能能用到。</p><p>因为Net-SNMP并没有为Debian用户编译好.deb包，所以只能到项目主页下载源码编译。</p><p>如果你也是拿到服务器第一步就来配置了，所以在第一步./configure的时候就遇到最基础的libc6-dev包没有的问题，此时报错会如下<q>configure: error: C compiler cannot create executables</q>。在Debian系下你只需要apt-get就可以了（我是直接root用户登录的）：</p><code><span style="color: #000000">
apt-get&nbsp;install&nbsp;libc6-dev</span>
</code><p>同时我发现<a title="注册监控宝" href="http://www.jiankongbao.com/invite/x2r3ro" target="_blank">监控宝</a>指引上的openssl的路径和我的不同（一般openssl是默认安装了好的），所以这里参数也需要改下（不过我并没有开启SSL，米钱），使用dpkg（dpkg -L openssl）可以查看，如我的路径是：/usr/bin/openssl。</p><p>接下来我发现在执行make的时候，又报错了：<q>/usr/bin/ld: cannot find -lperl </q>。这是因为系统没有安装perl这个lib，也可以使用apt-get简单的来安装（根据报错信息我们知道需要安装libperl-dev）：</p><code><span style="color: #000000">
apt-get&nbsp;install&nbsp;libperl-dev</span>
</code><p>其实我们打开Makefile可以看到这里是调gcc来编译的。习惯了在desktop发行版上双击.deb包来安装软件的如我等小白明显就是一开始就可以弄好编译环境。</p><p>到此，应该你的Net-SNMP应该顺利编译安装上了。不过我杯具的是安装的是SNMPv3，不过配置好了之后<a title="注册监控宝" href="http://www.jiankongbao.com/invite/x2r3ro" target="_blank">监控宝</a>却一直通信不上，试着用SNMPv2c的验证通信上了。</p><p>最后再次推荐下强大的<a title="注册监控宝" href="http://www.jiankongbao.com/invite/x2r3ro" target="_blank">监控宝</a>。并且感兴趣的同学可以使用我的邀请链接注册（其实本文&ldquo;很不厚道地&rdquo;埋了很多这个链接），地址是：<a title="通过阿肆的邀请注册监控宝" href="http://www.jiankongbao.com/invite/x2r3ro" target="_blank">http://www.jiankongbao.com/invite/x2r3ro</a>，这样我和你都能额外获得5条监控宝的报警短信，反正于大家都没坏处嘛。</p>
<img src="http://feeds.feedburner.com/~r/shuo/~4/j51CdDfb4J8" height="1" width="1"/>]]></content:encoded>
<slash:comments>4</slash:comments>
<comments>http://www.ivershuo.com/2010/08/linode-snmp/#comments</comments>
<wfw:commentRss>http://www.ivershuo.com/feed/2010/04/think-about-markuplanguage/</wfw:commentRss>
<feedburner:origLink>http://www.ivershuo.com/2010/08/linode-snmp/</feedburner:origLink></item>
<item>
<title>JavaScript那些事及第十一期web标准化交流会收获</title>
<link>http://feed.ivershuo.com/~r/shuo/~3/3aDRIZzey8I/</link>
<guid isPermaLink="false">http://www.ivershuo.com/2010/08/gain-of-javascript/</guid>
<pubDate>Mon, 30 Aug 2010 05:48:41 +0000</pubDate>
<dc:creator>阿肆</dc:creator>
<description><![CDATA[本期w3ctech交流会主题是《我和JavaScript那些事儿》，是很泛的话题，有幸听到了老潘、阿当、rank、月影、音速MM等同学的分享，收获很大。

既然话题是我和JavaScript那些事儿，...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>本期<a title="WEB标准化交流会" href="http://www.w3ctech.com" target="_blank">w3ctech</a>交流会主题是《我和JavaScript那些事儿》，是很泛的话题，有幸听到了<a title="来自美团的潘魏增" href="http://panweizeng.com/" target="_blank">老潘</a>、<a title="来自新浪的阿当" href="http://hi.baidu.com/cly84920/blog" target="_blank">阿当</a>、<a title="来自百度的rank" href="http://www.never-online.net/blog/" target="_blank">rank</a>、<a title="来自百度的月影" href="http://www.silverna.org" target="_blank">月影</a>、<a href="http://aiwangwei.com/" target="_blank">音速MM</a>等同学的分享，收获很大。</p><p>既然话题是我和JavaScript那些事儿，我也插播下我自己与JavaScript的那些事。我几乎也是05年左右第一次开始接触javascript，当然记得第一次alert出来hello的时候的那个兴奋。不过很惭愧的是，后来一直没怎么深入学习。<a href="http://bbs.51js.com/viewthread.php?tid=37006&amp;highlight=%2B%D4%C2%D3%B0" target="_blank">月影大侠也是05年开始玩js</a>，现在是js界叱咤风云的人物，我却还基础的JavaScript都玩不好，更惭愧的是现在还每天坐在月影旁边。后来工作了之后项目承担点与JavaScript打交道较少，并且有月影、JK及rank等同学写好的脚本库和组件，加上自己懒惰的性格，学习得也愈少了。</p><p>以一个用瀑布型都玩不好的菜鸟的理解，我认为JavaScript可以说是一个人小鬼大的语言，他的很多特性使得他容易上手又难以精通。并且他从出生起就带着很多不完善的东西，就像老道说的可惜大家已经用上并且爱上他了，所以再要严格的来次涅磐就不大可能了，后面rank同学也说到了组件开发中接口的设计就说到了设计中的这一点要一开始就考虑到。还有就是JavaScript规范的相对混乱，在基于浏览器的开发情况下：核心部分是ECMA来制定，而DOM又是W3C来规范，BOM部分实现上各个浏览器各自为政。不过个人觉得JavaScript最好玩的就是他的弱类型及对象的prototype，这是一种很好的抽象。这样一切传参和返回都可以是任意类型包括函数。就可以玩出看上去可能有点非主流但是很帅很流行的闭包、泛函这样的东西。</p><p>接下来说下在交流会上得到的收获。</p><p>首先是<a href="http://imdonkey.com/" target="_blank">吕婷</a>同学的分享，分享了她自己学习JavaScript的过程，ppt很漂亮。</p><p>然后老潘分享了<a href="http://panweizeng.com/others/ppt/closure.html#1" target="_blank">《JavaScript闭包实例》</a>，开始之前他自嘲说这个话题很枯燥，基本大家都会睡觉了。结果还好，好像就一哥们睡着了（不小心被我发现了）。老潘的分享很好，基本用很容易理解的方式向大家介绍了闭包及使用中内存泄漏等风险。</p><p>然后阿当用一个tabView实现来说明组件开发，用多步修正的方法来演示，很不错，一步步带领大家思考怎样满足多变的需求及优化余地。相信刚接触JavaScript的同学也能很好的理解。</p><p>接下来是rank的分享，分享的也是<a title="rank的分享及总结" href="http://www.never-online.net/blog/article.asp?id=298" target="_blank">组件开发</a>。从<strong>需求</strong>、<strong>实现</strong>、<strong>使用</strong>、<strong>迭代</strong>等方面说明了组件开发中的重点及大家容易忽视的一些点。比如接口的实现，既要做到统一又方便后面升级开发、要做到内部高效率又要使使用者能容易使用。</p><p>很巧合的是这次虽说话题是《我和JavaScript那些事儿》，不过讨论最多的是组件实现这个具体的话题上，可能因为分享者带来的话题有关系吧。其中很有收获的一点是月影突然带来的一个关于组件实现的一个很独特的观点。可能是因为我们过多的关注（样式）组件最终的&ldquo;展现&rdquo;形式而没有用一种归类抽象的观点来看问题。就拿样式组件来说，其实质其实是通过交互带来的样式反馈。月影同时用Twitter来类比，比如我（类比页面中的某ELement）fo了<a title="月影在twitter" href="http://twitter.com/akira_cn" target="_blank">@akira_cn</a>（类比页面中另一个Element如button等），然后月影受到某刺激事件如女朋友的表扬（类比页面中click等事件，这个事件可以是任何的，onclick，onmouseover或者onhit什么的无所谓），然后月影发出通知：&ldquo;MM表扬我了&rdquo;（组件中建立好的联系通道），接着我作为一个fo对这个通知作出反映：&ldquo;恭喜，恭喜！请客！&rdquo;（类比出现popup框或者将某块常用说到的tabView中某块content块显示出来）。</p><p>这次交流会收获很大，也特别感谢<a title="腾讯soso" href="http://www.soso.com" target="_blank">soso</a>提供的QQ公仔奖品，感谢腾讯的同学热情的招待，感谢所有分享者的准备，感谢所有参与交流的同学。<a href="http://www.webchina110.cn/" target="_blank">bobo</a>和<a href="http://rlog.cn/" target="_blank">Robin</a>一上午就在忙碌的布置会场，大家给他俩来点掌声。</p><p>同时，因为某些特别的原因，在这里特别祝福波波，不管他做出怎样的决定，希望他以后的人生路更加精彩！也特别感谢他带给我们这么好的交流机会和平台。</p><p>最后，交流会下一期就是一周年生日了，祝福我们的交流会！</p>
<img src="http://feeds.feedburner.com/~r/shuo/~4/3aDRIZzey8I" height="1" width="1"/>]]></content:encoded>
<slash:comments>5</slash:comments>
<comments>http://www.ivershuo.com/2010/08/gain-of-javascript/#comments</comments>
<wfw:commentRss>http://www.ivershuo.com/feed/2010/04/think-about-markuplanguage/</wfw:commentRss>
<feedburner:origLink>http://www.ivershuo.com/2010/08/gain-of-javascript/</feedburner:origLink></item>
<item>
<title>“邪恶”的opener</title>
<link>http://feed.ivershuo.com/~r/shuo/~3/YUebUBQCQ3o/</link>
<guid isPermaLink="false">http://www.ivershuo.com/2010/08/eval-opener/</guid>
<pubDate>Mon, 23 Aug 2010 17:58:11 +0000</pubDate>
<dc:creator>阿肆</dc:creator>
<description><![CDATA[源于空空的这条推：百度搜索结果页的那句 var location; 宛如神来之笔&hellip;&hellip;。
发散一下，然后在JerryQu及好奇同学的教导下知道了window.opener这...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>源于<a href="http://quchao.com/" target="_blank">空空</a>的<a href="http://twitter.com/Chappell/status/21898101782" target="_blank">这条推</a>：<q>百度搜索结果页的那句 var location; 宛如神来之笔&hellip;&hellip;</q>。<br />
发散一下，然后在<a href="http://www.qgy18.com/" target="_blank">JerryQu</a>及好奇同学的教导下知道了<strong>window.opener</strong>这个神奇的对象，然后发现它实在调皮又邪恶。他的location属性是个奇怪的东东，是外域虽然不可读却是可写的。<br />
比如我们在页面中这样写（实例可以在<a href="http://hi.baidu.com/ivershuo_h" target="_blank">http://hi.baidu.com/ivershuo_h</a>右侧友情链接中点击最后一个那个名为&ldquo;测试&rdquo;的链接玩）：<br />
</p><p><code><span style="color: #000000">
&lt;script&nbsp;type="text/javascript"&gt;
<br />var&nbsp;u&nbsp;=&nbsp;['baidu.com',&nbsp;'google.com',&nbsp;'ivershuo.com'],&nbsp;
<br />i&nbsp;=&nbsp;0&nbsp;,&nbsp;
<br />l&nbsp;=&nbsp;u.length;
<br />setInterval(function(
<br />){
<br />&nbsp;&nbsp;&nbsp;&nbsp;opener.location&nbsp;=&nbsp;'http://'&nbsp;+&nbsp;u[i];
<br />&nbsp;&nbsp;&nbsp;&nbsp;i++;
<br />&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;(i&nbsp;==&nbsp;l?i&nbsp;=&nbsp;0&nbsp;:&nbsp;i);
<br />},2000);
<br />&lt;/script&gt;</span>
</code></p><p><br />
这样在所有链接到这个页面的页面就会出现不停跳转的情况，就算是使用后退按钮退回到先前的页面也一样（这个页面的opener将一直指向打开它的那个窗体）。这样对于一个普通的用户来说会觉得很奇怪。<br />
如果用setTimeout及大延迟时间，然后用户又一直没关闭open（链接执行）页及opener页，且用户回到opener页继续查看，就会导致看到某个时间正在看的页面突然跳转而不知道在后面&ldquo;捣乱&rdquo;的却是来自外域的另外一个页面。<br />
而如果针对某个特定的链接来源页（如搜索引擎搜索结果页），还可以预先埋上opener.location的hash到指定的页面id元素上，加上定时还可以让页面&ldquo;跳舞&rdquo;。<br />
而如果是搜索引擎快照这样可能导致某些小风险同域风险的页面呢？<br />p.s：猜测因同步自己twitter显示到网页上的缘故，服务器ip在天朝某些范围处于和谐状态，建议用google reader订阅我的blog，RSS地址：<a href="http://feed.ivershuo.com/shuo" target="_self">http://feed.ivershuo.com/shuo</a></p>
<img src="http://feeds.feedburner.com/~r/shuo/~4/YUebUBQCQ3o" height="1" width="1"/>]]></content:encoded>
<slash:comments>2</slash:comments>
<comments>http://www.ivershuo.com/2010/08/eval-opener/#comments</comments>
<wfw:commentRss>http://www.ivershuo.com/feed/2010/04/think-about-markuplanguage/</wfw:commentRss>
<feedburner:origLink>http://www.ivershuo.com/2010/08/eval-opener/</feedburner:origLink></item>
<item>
<title>标记语言设计的抽象程度思考</title>
<link>http://feed.ivershuo.com/~r/shuo/~3/FYXIpNwYS0g/</link>
<guid isPermaLink="false">http://www.ivershuo.com/2010/04/think-about-markuplanguage/</guid>
<pubDate>Sun, 25 Apr 2010 12:52:24 +0000</pubDate>
<dc:creator>阿肆</dc:creator>
<description><![CDATA[突然觉得HTML越来越乱了，现在满世界都在喊着HTML5，前端同学好像都把他当作了一个救世主。

HTML是一门标记语言（Markup Language），标记语言在于他的设计不需要逻辑功能，他最主要...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>突然觉得HTML越来越乱了，现在满世界都在喊着HTML5，前端同学好像都把他当作了一个救世主。</p><p>HTML是一门标记语言（Markup Language），标记语言在于他的设计不需要逻辑功能，他最主要的作用就是用确定的标签（在html中是HTML elements）来容纳有不同的内容。其实世间万物本来就有他自己的意义的，在网页上显示出来的一切文本、图像、视频也是。一块巧克力不把它放到巧克力盒子里我们一样知道它是巧克力，只是为了方便生产、运输、卖出的识别我们大多会将巧克力用包装装起来。一个图像我们不用img标签包含，浏览器也是有可能知道它是一个图像的，从一定程度上来说，超文本标记语言的发展是浏览器工业化发展的一个象征。将同类的的东西放到同一个特定的&ldquo;容器&rdquo;中，在oop中来说，就是类的思想了。</p><p>于是，真正引发的问题就是这个容器究竟该设计得多&ldquo;大&rdquo;？这就是设计中经典的抽象程度的问题了。阴阳五行足够概括世间万物、但不能完全描述世间万物。在HTML中，使用标签（Element）和属性（Attribute）二维结合来描述超文本资源。无奈所有的东西都是不断发展的，互联网也不例外。其实HTML5中多出来video等标签就像HTML2多出来img标签一样正常，虽然我们确实值得欢呼，也不用太为此担心兼容&mdash;&mdash;想想gif、png、jpeg&mdash;&mdash;我是达尔文物竞天择思想的支持者。但是我觉得HTML的设计从一开始就没有很好的考虑抽象程度这个问题，可能是为了迁就使用上的方便，最明显的就是这门语言虽然有结构树（DOM）的层级、但是没有意义上的继承，不管是从标签上还是属性上。HTML生来就是有语义的，XHTML想解决数据和结构分离，结果被传道士努力得让大家都只在乎结构和表现的分离了。XHTML2曾一度想放弃向前兼容，还推荐将图像从img标签过渡到object标签，以达到更高的抽象程度，用以更&ldquo;方便&rdquo;地描述互联网上将来越多的不同格式的其他资源。HTML5又干脆弄出来一大堆的极度语义化的标签。那么Microformat的出现又是因为什么原因呢？</p><p>要看清楚这些，其实我们应该明白其实W3C是一个商业组织。<span class="new">WHATWG更是一个商业化&mdash;&mdash;最明白就是浏览器竞争&mdash;&mdash;的产物。很多东西其实就是商业杂交出来的（比如最明显的代表就是鼓吹&ldquo;高尚情操&rdquo;的video标签），HTML的一出生就流淌着商业的血。问题还在于离开商业一切都活不了。</span></p><p><span class="new">不要再讨论HTML5好不好、HTML5什么时候出来、我们什么时候用它。</span></p><p><span class="new">有些东西你在思考的时候永远很难想到，比如</span><span class="new">中国特色的双核浏览器，虽然或许这只是在揠苗助长。</span></p><p><span class="new">这是个最好的时代，这是个最差的时代。或许一直以来就是。</span></p>
<img src="http://feeds.feedburner.com/~r/shuo/~4/FYXIpNwYS0g" height="1" width="1"/>]]></content:encoded>
<slash:comments>22</slash:comments>
<comments>http://www.ivershuo.com/2010/04/think-about-markuplanguage/#comments</comments>
<wfw:commentRss>http://www.ivershuo.com/feed/2010/04/think-about-markuplanguage/</wfw:commentRss>
<feedburner:origLink>http://www.ivershuo.com/2010/04/think-about-markuplanguage/</feedburner:origLink></item>
</channel>
</rss>

