阿肆 发布的文章

月影同学最近给kohana写了两个强大的插件,:jkit(JKit 是基于 Kohana 3.2 版本基础上开发的框架级插件)和kohana-python(可直接在php中无缝使用python中滴Class)。给感兴趣的同学演示下使用。
示例是一个上传图片到upyun的脚本
file:controller/a.php(用来接收和返回的客户端接口)
class Controller_A extends Controller {
    function before(){
        parent::before();
        $this->img = new Model_Logic_Imgs;
    }
        /*更新图片*/
    public function action_edit_img(){
        try {
            $upedFile = $this->img->edit_img($this->request->param());
        } catch(Exception $e){
            $this->err(null, $e->getMessage());
            return;
        }
        $this->ok($upedFile);
    }
}

file:logic/imgs.php(用来处理图片logic)
class Model_Logic_Imgs extends Logic{
        /*更新图片信息*/
    public function edit_img($data){
        if (!$data['pid']){
            throw new Exception('没有指定图片id');
            return;
        }
        $upedFile = $this->up_img($data['sourceurl']);
        if(!$upedFile){
            throw new Exception('图片上传到upyun未成功');
        }
        /*其他图片信息数据库信息更新等*/
                JKit::$log->info($objDb->last_query, $arrRes);
        return $upedFile['url'];                
    }
       /**
       *更无缝的调用python Class,
       *这样在controller或logic如有需要用到python中的Class只需要new一个Logic Class
       **/
        function __call($func, $args){
        $img_py_logic = new Model_Pylogic_Imgs;
        return call_user_func_array(array($img_py_logic, $func), $args);
    }
}

file:pylogic/imgs.py(需要用到的图片处理相关python)
import sys, os, MySQLdb, time, urllib, re, Image
import md5 as imd5
from upyun import UpYun

TMPFILE_DIR = '/tmp/weizoo-img-tmp/'
UPCONFIG = {
    'bucket' : 'some-img',
    'username' : 'ivershuo',
    'password' : '******'
}

def md5(src):
    m1 = imd5.new()
    m1.update(src)
    dest1 = m1.hexdigest() 
    return dest1

class Model_Pylogic_Imgs:
    def __init__(self) :
        self.conn = MySQLdb.connect(DBCONGIF['host'], DBCONGIF['user'], DBCONGIF['passwd'], DBCONGIF['dbname'])
    def up_img(self, sourceurl) :
        u = UpYun(UPCONFIG['bucket'], UPCONFIG['username'], UPCONFIG['password'])
        #按星期建立目录
        _dir = time.strftime('%y%U', time.localtime(time.time()))
        #获取文件后缀
        _r = re.compile('\.\w+$')
        filetype = _r.search(sourceurl).group()
        #下载到本地文件
        localfile = TMPFILE_DIR + str(int(time.time())) + filetype

        if not u.mkDir(_dir) :
            return False

        #img_file = urllib.urlopen(sourceurl, 'rb')
        os.popen('wget "' + sourceurl + '" -q -O ' + localfile)
        img_file = open(localfile, 'rb')
        bfile = img_file.read()

        #源文件md5之后取前16位作为文件名
        filename = md5(bfile)[0:16]
        #上传到upyun文件
        upfile = _dir + '/' + filename + filetype
            
        if not u.writeFile(upfile, bfile) :
            return False
        #获取图片平均色,by:@jerryqu
        rgb = self.rbg_img(localfile)
        ret_data = {'url':upfile,'rgb':rgb}

        os.remove(localfile)
        return ret_data

是不是很喜欢这种写法呢?若感兴趣,月影的博客上有更多的介绍

去年从公司拿了个被市场淘汰滴EZ Station玩,虽然配置很低,不过装个linux还是跑得动当开发机滴。
配好webserver,指定好WAN到LAN的转发规则之后,发现不知道为啥有些线路能访问到有些线路访问不到,当时也就木有去太去管他了。

今年将网络从山寨滴长城宽带换到电信10M光纤之后,电信送滴那个华为HG8240居然不支持WAN到LAN的转发了。前天将PPPoE换成自己的路由拨号之后就可以用了(具体方案我在文尾提出来),因为是动态ip滴,用ip访问终归不方便,虽然有花生壳等服务支持动态DNS解析,但是我又不想暴漏自己的ip,所以就用了使用nginx反向代理滴方式。
而由于ip是变动滴,所以更新起来也就麻烦点,于是用了一套简单的自动上报ip的方案,nginx机器收到ip变更通知再更新配置reload。具体就是如下几步:

  1. 先在路由做好内网ip的mac地址绑定,防止路由重启导致web机获取不同的内网ip
  2. 将需要启用外网服务的端口映射转发到web机。ps.很多运营商是禁止了80端口开放,所以可能需要使用其他端口
  3. 配置个自动上报的脚本(我这里有写一个简单的http://www.box.com/s/2138odhqa58qcjcad20s,前面的配置自己修改下)。可以使用定时任务来跑或者hack了路由器的可以直接在路由器上来实现该功能,重启触发就是。
  4. 在其他外网机器上配置ngxin(或其他可用作反向代理的服务),加上类似如下配置(具体规则根据自己需要修改):
    server{
            listen 80;
            #开放给外部访问的域名
            server_name xxx.ivershuo.com;
            location / {
                    #web机器的webserver地址
                    proxy_pass http://111.222.222.111:8964;
                    proxy_redirect off;
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
    }
  5. 将域名A记录到上面的nginx机器
  6. 跑个http服务来接受前面web机上报的ip,用脚本自动更新nginx配置ip部分,reload nginx配置使生效

该方案主要可以实现动态ip的域名绑定,并且可以实时生效,又避免了实际ip的暴漏,还可以绕过运营商对80端口的禁止。不过缺点就是流量要走两份,但是一般这个情况对我没太大影响,自己家里网络是包月的,vps流量也用不完

如果你也是用的坑爹的电信送的华为HG8240,接下来说下如何使用自己的路由代替HG8240做DHCP服务器。
首先我们要拿到telcomadmin账号,因为给的那个useradmin账号除开可以重启路由外啥功能都木有,真是坑爹。
先用root:admin(对滴,root密码就是这么sb)telnet到192.168.1.1,然后输入shell进入shell,在/mnt/jffs2/hw_ctree.xml这个文件中查找到“ telecomadmin”这串,应该看到密码了吧,然后用这个账号和密码登陆路由
接下来在“网络”页面拿到自己的上网账号和密码(此处需要用到firebug等工具),将internet服务用PPPoE桥接方式桥接到自己的路由器,然后取消HG8240的DHCP服务器功能,如此就将HG8240阉割到基本只有光纤转普通那啥网线的功能了。

用不同段的ip如192.168.2.1做为自己路由的ip,启用DHCP服务,用PPPoE拨号上网。刷新其他机器ip和dns,done!

如果要问有一家公司在做的事是“让世上没有难做的生意”,那么这家公司是哪家?我想应该很多人都知道那是阿里巴巴。
很多人听说过“企业文化是一家公司的灵魂”这句话,不过很多人会觉得这就是一句虚话是一句屁话。其实,真正用心去想一下,事情其实就是那么简单。
我发现符合社会认知的“成功”的大公司,他们做的事情其实都是只有一件。虽然他们做的产品不同,虽然或许他们做的产品有很多。
微软让“计算机进入家庭,放在每一张桌子上”,麦当劳要“控制全球食品服务业 ”,“只要是图片都是我们(柯达)的业务 ”,百度想“让人们更便捷的获取信息,获得所求",腾讯要做“最受尊敬的互联网企业”,阿里巴巴要“让世上没有难做的生意”... ...
其他的都是手段,上面说到的才是目的。记得之前马云有说过他不会做b2c,不过后来做了。做不做b2c只是一个手段,他最终要的还是“让世上没有难做的生意”,“通过发展新的生意方式创造一个截然不同的世界”。说得好像很伟大,其实人性本来就是想要所得,然想要得到别人的也得给别人所得。现在社会最简单通用的体现就是钱,想想货币之前呢?所以做到了,就是“顺便”把钱也赚了,google就是最明显的例子。我记得我爸对我说过钱在别人口袋,不会很容易就到你自己口袋里来。
用一个实例说下。我去百度这家公司之前,其实对这家公司没啥看法和理解。在百度两年,发现这家公司发展成现在这么大,其实做的事情一直没变,确实也是在“让人们更便捷的获取信息,获得所求”,做“简单可依赖”的产品。做知道是因为发现很多中国用户在query“为什么xxx”、“怎样xxx”这样sentence,而不是像英语系国家用户一样通过 key words 在找答案,而百度的搜索引擎去整个互联网获取这样信息或许更难。百度MP3是因为用户有歌的需求(这里是“听”不是下载,应该这样能明白百度mp3向ting转型,因为之前的带宽情况下用户要“听”歌先下载是最好的方式)。还有很多产品,不过本身目的都是要“更便捷的获取信息”,就算包括像先前的百度有啊这样的产品,他的使命更多是用户要获得的信息而不是让商人更好的做生意。有人说阿拉丁使百度更不像一个搜索引擎了,网页搜索引擎也是现阶段网民获取信息最便捷的方式,而或许以后百度还真的就不是做现在看到的网页搜索引擎这个产品呢?
大家应该也会发现一个现象,一旦网上有网民“抱怨”腾讯产品,总会遇到腾讯的同学出来耐心的解释。因为要做“最受尊敬的互联网企业”有一条文化就是“重视员工利益,激发员工潜能,在企业价值最大化的前提下追求员工价值的最大实现”,所以我遇到的腾讯的腾讯不管是在职的还是已经离开的对腾讯公司都是有很好印象的。而腾讯内部“道德操守”也是一条高压线。
一家公司要做的事情决定了这家公司做的产品,也决定了这家公司能走多远。或许有同学会说有得这些所谓的冠冕堂皇的文化是后来公司长大了才成文的,不过你会发现成文不重要,重要的是确实是一开始有没有说,他一直就是这样做的。而不管是光明还是龌龊的事,总是基于这个信条的。
现在创业的公司很多,一片繁荣的现象。不过有些公司在做什么样的事呢?其实产品不重要,做的事才是重要的,做产品原型不是做事,写代码不是做事,推广产品也不是做事,这些只是在弄产品而已。移动互联网、lbs、电子商务这些概念现在都很火,很多人一股脑扎堆在里面。很多人做的事是“拉一批人干活,哄骗vc投钱,上市”,那么真正做的事就是“想上市”而已。当然这也是在做事,不过就算拉到这样一批做这个事(上市)的人,那么成功上市之后呢?有多少在做“上市”这个事的人有想过事情做完之后干什么呢?
所以如果有人要我打工,而问一下做啥呢?回答是做一个很多人都会用的东西,有投资不愁吃穿,还有期权,最终会有一笔钱,也有啥地位。那其实许诺的是空的,这个事一开始是基于“很多人一定会用”才能走到下一个分支的。能为别人带来什么才有人用的,也才知道要做的是什么。能为别人贡献才能得到别人的回报,能为整个社会贡献才能得到社会的回报。社会是人组成人,社会特性也就是人的特性,人都是利益化的。一开始谈自己的收益和一开始谈能为别人带来什么是不同的做事态度,最终做事的方式和得到的回报也会不同,虽然其实本质是一个事。
如果一开始要做的是网页搜索引擎,那么可能就不会有现在的百度;一开始要做的就是在线电子商务平台,那么阿里巴巴可能就止步b2b商城不会有现在的淘宝支付宝了;一开始只想做一家餐饮公司,那么麦当劳或许只是和你楼下的小菜馆一样。抛开做的产品,看做的事,如果你要做的是“让世界更加欢乐”,那么会做什么呢?迪士尼是先做了个主题公园。
其实不止是做企业,其他也是一样,包括人生和建立一个国家。“独立宣言”下建立的美国奉行民主,打着“翻身做主人”口号的某国家,大家可以看到,恩,有了主人之后当然还要一群奴隶来服侍主人。

早两天$M发布了IE9,于是很兴奋的想装一下这个我最不喜欢的浏览器的传说中最优的版本。不过安装过程出现了点意外,所以在这里分享下。首先给几个想要安装IE9浏览器的同学一些建议性的提示:

  1. 到这里下载离线安装包版本吧,如果你的网速和我一样很慢。
  2. 记得安装之前将这个页面给出的前置安装条件如更新包等准备好。

好了,回归正题。我是上面的条件都做好了,不过安装过程一直还是提示安装没有成功,也没有明确的错误提示,这就是windows下很多软件的优良传统,只告诉你安装成功或失败,而不告诉你具体为啥原因,更好的传统是不会显示的给你个log信息。然后我只能人肉去找它的log看了,跑到C:\Windows\Logs,果然有个“IE9_NR_Setup.log”的文件,结果发现这个文件根本就是坑爹,啥有用的信息都木有!就是把他的安装界面步骤用个文本描述了一遍而已。然后不知道是最近RP暴涨了还是咋滴,居然让我随便的一不小心在C:\Windows这个下面发现了一个“IE9_main.log”的文件(当时就火大,尼玛随便在我windows目录下放log这样滴文件干啥,$M你真是伤不起啊,有木有!有木有!!)。不过在这个文件发现了一行最重要的信息:
Process exit code 0x00000011 (17) 
[The system cannot move the file to a different disk drive. ]

因为家里用的老爷机C盘空间太小,又装了多个系统不敢随便格了重装Windows,那是各种引导的纠结,你们懂的。所以给windows下的User和'Program files'目录给放其他盘然后搞了个软链。顺带友情提示下,在windows vista以上版本系统已自带mklink.exe工具。

如果你也和我这样的情况,那么下面我做的可能就是你要做的了。

首先删除c盘下'Program files'这个软链,然后将原来的'Internet Explorer'放回到它“真正”的位置,安装IE9,然后将升级完的'Internet Explorer'再放回去(做这一步的时候你需要有多系统或者借助PE盘,因为windows不允许直接拷贝这个目录出去),然后重新将软链建立。That's all.

用好奇的话说,这样我就“治愈”了IE9啦,哈哈。这个文章里面用了好多“潮流”的词汇,是因为我发现现在连Qwrap的作者JK同学都比我潮了,我居然又一次成为WED最out的淫了,所以最近准备在好奇的带领下深刻学习各种脸饼少女啦。

然后,希望这篇文章永远不要遇到哪个倒霉蛋在下面留类似下面的言:“谢谢,正好遇到和LZ一样的问题”。

你是不是正在找一份前端开发方向的工作或实习机会呢?

如果回答是:“是!”。那么太有缘分了,我们也正在找你。

我们是谁?

  • 我们是WED——百度电子商务技术研发部前端开发团队。
  • 我们是专业的前端开发团队,致力于为百度电子商务产品的用户打造最佳体验。
  • 我们是年轻的技术团队,明年1月份才迎来她的第三个生日。
  • 我们是充满快乐的团队,她的官方全称是Web Engineering & Development,但更多情况我们称为:We Enjoy Days~
  • 我们是拥有很多美女、很多帅哥、很多牛人的优秀团队。

加入WED团队,你可以做这些事情:

  • 为百度最优秀的互联网产品改善用户体验
  • 让自己亲手开发的作品被亿万人使用
  • 和众多技术牛人一起钻研最新前端技术
  • 和许多优秀团队进行技术交流
  • 为Web标准和W3C做点自己能做的事儿

加入WED团队,你可以拥有这些:

  • 一边工作一边聊天、搞笑、吃零食
  • 随时表达你的想并得到关注和支持
  • 技术全面发展、辅导和长期的培养计划
  • 享受亲如兄弟姐妹的团队氛围
  • 个人自由支配的时间和发展空间
  • 得到为团队成员精心设计的有趣纪念品

加入WED团队,你可以同我们一起分享这些评价:

  • WED团队是强大专业的团队,快速响应需求,有效率有质量地完成任务
  • WED团队是无所不能的团队,看似不可能实现的交互效果,在不经意间被轻松搞定
  • WED团队是创新求变的团队,我们不时有新想法,迎接新变化,不断给新的惊喜

如果

(你决定成为国内最专业前端开发工程师
&& 你喜欢轻松愉快地工作
&&你享受团结、自由、像一个大家庭般的团队氛围)

只要你接触过这些技术中的一部分

(html/xhtml、css、页面架构和布局
|| Web标准、表现与数据分离、html语义化
|| JavaScript或ActionScript
||php、ruby、python或perl)

只要你能做到

(热爱前端开发这个事业
&& 有很好的学习能力和逻辑思维能力
&& 不错的团队意识和沟通影响力 )

那么,点击下面的链接,加入我们吧:

http://hr.baidu.com/www/job/jobDetail.action?jobId=2259

你也可以直接将你的简历发送给我

本期w3ctech交流会主题是《我和JavaScript那些事儿》,是很泛的话题,有幸听到了老潘阿当rank月影音速MM等同学的分享,收获很大。

既然话题是我和JavaScript那些事儿,我也插播下我自己与JavaScript的那些事。我几乎也是05年左右第一次开始接触javascript,当然记得第一次alert出来hello的时候的那个兴奋。不过很惭愧的是,后来一直没怎么深入学习。月影大侠也是05年开始玩js,现在是js界叱咤风云的人物,我却还基础的JavaScript都玩不好,更惭愧的是现在还每天坐在月影旁边。后来工作了之后项目承担点与JavaScript打交道较少,并且有月影、JK及rank等同学写好的脚本库和组件,加上自己懒惰的性格,学习得也愈少了。

以一个用瀑布型都玩不好的菜鸟的理解,我认为JavaScript可以说是一个人小鬼大的语言,他的很多特性使得他容易上手又难以精通。并且他从出生起就带着很多不完善的东西,就像老道说的可惜大家已经用上并且爱上他了,所以再要严格的来次涅磐就不大可能了,后面rank同学也说到了组件开发中接口的设计就说到了设计中的这一点要一开始就考虑到。还有就是JavaScript规范的相对混乱,在基于浏览器的开发情况下:核心部分是ECMA来制定,而DOM又是W3C来规范,BOM部分实现上各个浏览器各自为政。不过个人觉得JavaScript最好玩的就是他的弱类型及对象的prototype,这是一种很好的抽象。这样一切传参和返回都可以是任意类型包括函数。就可以玩出看上去可能有点非主流但是很帅很流行的闭包、泛函这样的东西。

接下来说下在交流会上得到的收获。

首先是吕婷同学的分享,分享了她自己学习JavaScript的过程,ppt很漂亮。

然后老潘分享了《JavaScript闭包实例》,开始之前他自嘲说这个话题很枯燥,基本大家都会睡觉了。结果还好,好像就一哥们睡着了(不小心被我发现了)。老潘的分享很好,基本用很容易理解的方式向大家介绍了闭包及使用中内存泄漏等风险。

然后阿当用一个tabView实现来说明组件开发,用多步修正的方法来演示,很不错,一步步带领大家思考怎样满足多变的需求及优化余地。相信刚接触JavaScript的同学也能很好的理解。

接下来是rank的分享,分享的也是组件开发。从需求实现使用迭代等方面说明了组件开发中的重点及大家容易忽视的一些点。比如接口的实现,既要做到统一又方便后面升级开发、要做到内部高效率又要使使用者能容易使用。

很巧合的是这次虽说话题是《我和JavaScript那些事儿》,不过讨论最多的是组件实现这个具体的话题上,可能因为分享者带来的话题有关系吧。其中很有收获的一点是月影突然带来的一个关于组件实现的一个很独特的观点。可能是因为我们过多的关注(样式)组件最终的“展现”形式而没有用一种归类抽象的观点来看问题。就拿样式组件来说,其实质其实是通过交互带来的样式反馈。月影同时用Twitter来类比,比如我(类比页面中的某ELement)fo了@akira_cn(类比页面中另一个Element如button等),然后月影受到某刺激事件如女朋友的表扬(类比页面中click等事件,这个事件可以是任何的,onclick,onmouseover或者onhit什么的无所谓),然后月影发出通知:“MM表扬我了”(组件中建立好的联系通道),接着我作为一个fo对这个通知作出反映:“恭喜,恭喜!请客!”(类比出现popup框或者将某块常用说到的tabView中某块content块显示出来)。

这次交流会收获很大,也特别感谢soso提供的QQ公仔奖品,感谢腾讯的同学热情的招待,感谢所有分享者的准备,感谢所有参与交流的同学。boboRobin一上午就在忙碌的布置会场,大家给他俩来点掌声。

同时,因为某些特别的原因,在这里特别祝福波波,不管他做出怎样的决定,希望他以后的人生路更加精彩!也特别感谢他带给我们这么好的交流机会和平台。

最后,交流会下一期就是一周年生日了,祝福我们的交流会!