我们为什么做歪伯乐

摘要:从QQ,人人到微博,我们中很多人已经可以在线上找到自己的真实社交网络,这些社交网络上的应用也渗透到了各个领域,好友买卖,偷菜等带来的社交游戏,蘑菇街,美丽说为首的社交购物,都真的给我们带来了不一样的体验,但在求职招聘领域,似乎国内的社交网络并没有给我们带来实质性的好处,求职网站上的职位一成不变,商务社交网站里往往又没有自己的好友,这就是我们想突破的地方,基于国内现有的社交网络,帮你找到你好友工作过的公司都在招哪些职位。

  • 我们想做什么

一句话,歪伯乐希望通过你已有的社交网络,帮你找到你好友的公司都在招聘什么职位。

有句俗话说“物以类聚,人以群分”,所以你圈子里的好友去了哪些公司,往往你更有可能去那些公司。现在,当你找工作时时,看到一些心仪的职位或者公司,肯定希望能找到好友打听一下待遇,面试,甚至能内推就更好了,而我们就是让你在这里能找到那些自己圈子里的好友工作过的公司正在招聘的职位,而不是一个和你没有关系的职位告示板。

  • 我们做了什么

1. 搜索、订阅、推送你感兴趣的社交网络职位

做一个职位的推荐系统,首先要有职位数据源,开放的职位数据源有很多,比如Job Indeed职友集,聚合了很多招聘网站的招聘信息,我们可以直接接入,不过考虑到我们以前做过新浪微博职位垂直搜素引擎,希望能首先为用户带来社交网络职位。

因为一来,在国外,社会化招聘已经成为日常招聘模式。据社会化招聘网站JobVite 2011年8月的报告和图表显示:有大约89%的美国公司都使用社会化媒体来进行招聘,在使用社会化媒体招聘的这些公司当中,有80%的使用linkedin,使用facebook和twitter分别是50%和45%。现在每天在新浪微博,腾讯微博等社交网络上发出来的职位少说有近万条,也是企业一个日渐重要的招聘补充手段,但用户并没有一个很好的工具去搜索,订阅可能感兴趣的职位,我们能提供这样一个工具。

二来,我们觉得对从社交网络里非结构化数据针对特定领域的数据挖掘是未来一个重要的方向,值得我们花时间去研发。

现在我们每天能通过自己训练的精准规则从新浪微博和腾讯微博采集上千条有效职位,用户可以通过客户端搜索订阅感兴趣的关键字,接收职位推送提醒,先人一步,发现社交招聘职位。

比如搜索”产品经理 北京 ” —>

 

添加订阅—>

收到订阅职位推送提醒 —>

查看职位详情 —>

2. 找到你新浪微博好友工作过的公司都在招哪些职位

既然是基于用户现有社交网络的好友进行数据挖掘,那么选择从什么社交网络导入好友信息就非常重要,经过我们的测试,我新浪微博上的好友大概大概有30%左右的人填写了公司信息,而人人和腾讯微博,豆瓣等社交网络的已有职业信息还太少,Linkedin的国内用户数相对较少,所以首先导入新浪微博的好友能解决推荐的冷启动问题,帮用户挖掘出他的好友都在哪里工作。

下图就是我自己(@wangchao0721)新浪微博登陆后,好友圈子(新浪微博互粉好友)里的公司和与这些公司有关的微博职位。

用户可以查看自己圈子里的公司和有哪些好友在这些公司工作或者工作过 —>

查看好友工作过公司的社交招聘职位,找感兴趣的向好友咨询 —>

 

  • 我们还要做什么

国内已经有了很多商务社交网站,我们希望他们越做越好,让更多的国人有维护在线简历,管理职场人脉的习惯,但我们并不是一个商务社交网站,我们有点类似于Indeed,但是在社交网络上做职位搜索和社交化推荐职位,希望能通过社交开放平台,让用户找到自己好友工作的公司正在招聘的职位。

在搜索引擎的完善性和推荐引擎准确性上,我们都还有非常多需要提升的地方,先按下不表,欢迎大家先来体验拍砖。

网站申请内测:www.ybole.com

客户端下载:www.ybole.com/download

IPhone版下载:https://itunes.apple.com/cn/app/id591645289

扫描可直接下载:

解决Eclipse 3.7.2升级到4.2带来的开发环境迁移问题

摘要:本人原来的Eclipse版本是3.7.2,主要做Android开发,今天准备装个Maven插件编译Github Android客户端看看的,结果死活装不上,遇上了各种问题,果断下了个Eclipse 4.2,试了下M2E,发现完全没问题了,但就是升级Eclipse需要重装Android Development Tools , AnyEditor , ColorTheme等等一堆插件,还有配置,很是觉得麻烦,果断搜了下,Stackoverflow上还是有更好的方法的,不过仅限于3.7以上,简单说一下。

 

  • 下载安装Eclipse 4.2

下载地址:http://download.eclipse.org/eclipse/downloads/drops4/R-4.2-201206081400/,记得不要覆盖了旧的Eclipse版本

 

  • 从旧版本的Eclipse中导入Plugins

选择 File -> Import –> Install -> From existing Installation

image

指向你的旧版本Eclipse,我这里是指向我的Eclipse 3.7.2(图为我导入以后的样子….)

image

  • 最后

还是要记得把Workspace指向以前的Workspace,就可以无缝切换到新的Eclipse了,Enjoy your coding~~

解决Android开发团队代码版本控制中由编码风格不同造成的代码修订混乱

摘要:不知道大家在版本控制中有没有碰到这种情况,某一个文件新push到代码服务器上的修订很大,几乎是全部的代码出现了修改,看了一遍发现原来是由于协作的人之间编码风格不同,其实真实改动就是改了那么一两行,这就影响了了解真正的代码修订,同时是代码修订历史成了摆设。因为马上有实习生进团队,估计很快又会碰到这种问题,本文就是讲我们团队是如何利用Eclipse的工具解决上面的问题的。

 

  • 统一代码风格 — Android Code Style Guidelines For Contributors

首先,统一的代码风格是一个团队协作开发的好习惯,Android Open Source Project 提供了官方的Strict Android Code Style Guidelines For Contributors,和Android的源码要求一样,非常适合做Code Style规定。

 

  • 统一代码格式 — Eclipse Formatter

1. 在Eclipse的Preferences中,找到Java —> Code Style —> Formatterimage

2. 编辑一个新的Profile,在里面按照团队的代码格式编辑,这里我们编辑了“方法首行空行”等,主要是让代码好看一些,编辑好了以后Export出来作为一个xml文件。

image

3. 将这个format的xml发给团队的其他开发者,导入Java —> Code Style —> Formatter,以后只要在Eclipse里Ctrl+Shift+F,就能统一代码格式了。

image

 

  • 统一Imports的顺序

    在Java —> Code Style —> Organize Imports里,可以设置Imports的顺序,和Formatter一样,确定顺序后
      导出后缀为.importorder的文件,发给团队的人员,统一导入。

     

    • 利用Eclipse的Save Action保证规范能应用到代码上

      当然,上面的规范很可能开发过程中忘记Format,就依然会造成摘要里提到的问题,我们可以用Eclipse的
        Save Action,把Format source code & Organize Imports勾上,保存的时候会自动做上面两件事了。

      image

       

      • 最后,利用AnyEditor解决Win&Linux下Tab的空格个数问题

      在Win & Linux下Tab的空格个数不同是个老生常谈了,这也会影响代码提交的修订,修正这个问题需要借助Eclipse的AnyEditor插件(Download),虽然这个比较细节了,但注意下总是好的。

      做法的话,就是记得再提交代码前,将Tab用AnyEditor转换成Spaces

      image

       

              暂时就想到这么多了,从我自己的实践来看,这些做法能让开发团队无论用Svn,Git还是Hg来版本控制,都能保持一个比较好看的ChangeSet记录。

      针对国内Android市场的打包发布统计工具汇总

      摘要:国内的Android开发者上辈子都是折翼的天使,在辛辛苦苦写完代码处理了无数种分辨率,兼容性问题之后,还要面对可能要发布到400多家国内Android应用市场,各种应用中心,下载中心,论坛,QQ群,各种线下推广的巨大悲剧情况,再加上每周一个版本更新的大循环,简直暗无天日了,如果再没有一个很好的数据统计工具来衡量各个渠道的效果,那就真的永无出头之日了….下面就整理一些处理上述悲剧情况的工具,有些我正在用,有些我准备尝试,但本人也还在努力从上述悲剧中解脱出来….

      一,数据统计分析工具 —— 友盟

      老前辈们说“兵马未动,粮草先行”,数据统计其实跟粮草差不多,木有统计数据有时候真是不知道产品应该升级什么,所以我似乎去年刚开始写Android的时候就先挑了下到底用什么统计工具来统计Android程序,因为之前Web都用Google Analytics,所以那时候对刚听过的友盟和Google Analytics做了简单的对比:

      当然,因为当时项目比较紧,我对比的很不仔细,Google Analytics Mobile也没有仔细用,只是觉得友盟提供的功能比我想得还要全,就直接用了,当然这两个现在应该都有了改进,我之后会Update下。

      我自己用友盟主要是基于下面几个Feature:

      1.渠道打包统计,这样方便分开渠道来计算用户增长,对于国内这种Market推广费用极高的地方,这个非常重要。

      2.自动更新,毕竟多版本线的管理非常讨厌,自动更新能加快用户升级,虽然会有点有损用户体验….这个功能我看Google Analytics是没有的,需要另外加jar包实现,所以友盟这个挺方便的。

      3.访问页面分析,这个很像Web Google Analytics里的那个,用起来比较熟,尤其是可以分版本来查看访问分析,可以清晰知道升级后效果如何,比如我们“校园招聘求职”Android App,自从把收藏夹升级为求职管理以后,这个Activity的平均停留时间从8s升到了20s,说明这个功能被一定程度上有效使用了。

      当然,友盟还有一些需要改进的地方,我也经常意见反馈给他们,比如把本版本查看统计的层次升高,可以看到更详细的版本升级效果等,好在回复都比较快,而且态度比大多数国内互联网公司正常多了。

      二,渠道打包工具 —— 友盟渠道打包工具

      渠道就是我们平常说的Android市场,因为国内安卓市场数量庞大,我手头就有个@dicky 前辈整理的400多个市场的总表,不过我一直没能成功读完…..当然从数据统计看的话,估计有上传价值的也就20个市场左右,也就说起码需要打包20多次,这其实是个很费时间的事情,我们有两个方法解决(前提都是你有完整Eclipse项目代码):

      1.使用Ant写打包脚本

      这个方法网上很多了,就是需要为Ant打一个循环扩展包,可以参考《为Android应用增加渠道信息 自动化不同渠道的打包过程》,这个方法我没试过,因为不太熟悉Ant,就没用这个方法,不过这个方法适用情况比较广,估计在公司会用的比较多。

      2.使用友盟渠道打包工具

      我个人使用的这种方式,其实原理很简单,因为是For Windows Only的,就是用PowerShell跑个自动Ant打包过程,这里有两个需要注意:一是初次使用PowerShell如果有权限问题可以在网上查一下,就能解决,我就碰到了,忘了具体是什么了;二是一定要按Readme提供的填,我把Channel和Value写反了就识别不出来了….

      当然,这是用来打包友盟渠道的,可能不具普遍性,不过有需求的话,稍微定制一下Ant脚本,或PowerShell脚本,应该都能满足的。

      三,一站式应用上传工具 —— 抓猫

      上传应用真是个繁琐,而又没办法的事情,谁让中国特色呢(配图抓猫版权所有)…..我这周就深受其痛,每个应用市场都有不一样的截图要求,说明要求,真是非常无语,不想吐槽,最近通过@felixonmars的推友找到了抓猫,可以一站提交10来个Market,并且在不断增加中,正准备尝试一下,优势的话,自己感觉有下面两个:

      1.大部分市场可以绑定自己在各个Market的账号来发,这样不会太依赖工具,有自主权

      2.来自各大市场的统计可以一站查看(不过这个我还是建议用友盟或者Analytics,国内Market的数据实测来看太不靠谱了)

      虽然我可能会有保留的使用这种工具,但我很看好此类工具在国内市场的前景,这实在是一个刚性需求,说不定友盟也会尝试下的。

      学习《百万级应用是怎样炼成的》中的推广之道

      周末读了 @dicky 前辈的《从产品到推广告诉你:百万级用户是怎么练成的》,很是实战,尤其在推广这块,系统而量化的推广策略应该是基础战略,非常值得总结和研究,先记录一下,会在自己的产品推广中运用并检验。

      Working With Bookmarks — 高效使用书签

      本人高度网虫一枚,并且有强烈的“收藏分类综合症”,所以拥有超过2200个书签也不是什么奇怪的事…….

      先炫耀下我的Chrome书签:

       

      额……很多人第一次看到我的书签有超过5级目录的时候就轰掉了…….

      当然我前几年开始用Chrome添加书签的时候也没想到会有这么夸张,但分类收藏后在找任何收藏网页的时候都是按照自己的分类去找的,也没感觉什么费劲的,反而觉得很方便。所以首先我向大家推荐分类的去收藏整理网页。

      下面我给大家介绍一下怎么高效利用Bookmark:

      1.Google Bookmarks

      现在基本上我的生活完全离不开互联网,我的First Option Browser是Chrome,那么使用Chrome可以随时同步收藏夹到Google Accounts,那么不管我在哪里,下一个Chrome,同步我的书签,我就可以得到无差别网络浏览了

       

      2.Neat Bookmarks For Chrome

      Neat Bookmarks是款灵巧实用的Chrome侧置书签扩展,拥有强大的搜索功能,可以极快的搜索出你收藏夹里的网页,配合自己强大的书签,简直是大杀器了

       

      3.Xmarks Bookmark Sync

      当然你不可能用Chrome去干所有的事情,有时候IE,Firefox还是得用起来的,但这时候你要用你的书签怎么办呢,Xmarks提供一个跨浏览器,跨平台的解决方案,只需要注册一个账号,把书签同步上去,就能在任何浏览器,任何电脑上用起来自己的书签了。

       

      4.Bookmark Sentry For Chrome

      当拥有这么多链接收藏以后,自然不可能做到每个链接每隔一段时间就点击,那么可能这其中有一些已经变成死链了,Chrome Store里有工具可以把这些死链,坏链扫描出来,这个Bookmark Sentry就可以做到,当然我希望以后能出现更智能的产品,比如可以检测是不是危险地址等。(这个要多谢昊哥了,不过今天我在ChromeStore上已经找不到了….等找到再不链接吧,或者邮件我,我可以发过去)
      PS:此插件带有广告,会在所有网页底部带他的Google Ad,有点狠,用完可以先禁用掉

       

      5.【Deprecated】手机浏览的扩展工具(现在Chrome已经有Multiple Device支持)

      上面的工具估计能解决在电脑上上高效使用书签的大部分需求了,那如果再蛋疼一些,电脑上看不够,在手机上也想看怎么办?当然,如果你有Android手机同步Chrome书签,或者你是Android 4.0用户可以装Chrome for Android,这当然不在话下,不过还有简单的方法,针对只是想把网页或链接在手机上查看的场景,又是Android用户,可以使用Chrome to phone 插件,发送链接到手机上。还想省流量?那么就用Spool吧,可以发送链接给自己或好友,然后设置只在Wifi下同步,那么用手机浏览连流量都省了!

       

      好吧,我的蛋疼书签文就到此结束了,仅限“收藏网页控”使用…….

      【Update – 20120219】更新了Bookmark Sentry & Chrome to phone & Spool

      【Update – 20121223】更新了Neat Bookmarks For Chrome的安装地址,Deprecated手机扩展

       

      Android:利用Google GeoCoding API替代Geocoder & 解决地址语言问题

      摘要:Android定位开发中碰到GeoCoder间歇抽风问题,查证后得知可以用Google GeoCoding API来Workaround,这里记录此过程中遇到的两个收获吧,一是对这个Workaround给出自己的简单多线程解决方案,并未做太多封装。二是解决解析结果中地址的语言问题。

      一.问题描述

      最近在使用Android SDK中Geocoder类进行地址解析时发现有很大概率发生下面的悲剧…..

       java.io.IOException: Service not Available

      具体原因有各种说法吧,也有文档

      The Geocoder class requires a backend service that is not included in the core android framework. The Geocoder query methods will return an empty list if there no backend service in the platform. Use the isPresent() method to determine whether a Geocoder implementation exists.
      意思应该是Geocoder类的使用描述在使用的前提是必须有 后台服务的支持,但是andorid sdk中不包含该服务的,Google可真够开玩笑的。在真机上不一定存在。据称可以用isPresent() 检测一下,就知道有没有了。

      二.锁定解决方案

      我在Android 的Google Code上发现各国的Developer都碰到这个问题了(http://code.google.com/p/android/issues/detail?id=8816),当然他们也提出了一些解决方案,简单总结下:

      1.使用GoogleMap请求KML来解析位置(KML的Wiki传送门),当然要了解怎么使用KML的话,还得去http://code.google.com/apis/kml/documentation/,看看文档。具体的解决方案是使用URL请求,这是Issues里给的示例,Comment 20 by musicwit…@gmail.com

      http://maps.google.com.tw/maps?f=q&source=s_q&hl=zh-TW&geocode=&q=%E5%8F%B0%E5%8D%97%E7%81%AB%E8%BB%8A%E7%AB%99&ie=UTF8&0&om=0&output=kml

      2.像Comment21里说的我们可以直接利用http地址,实现地址查询:如:

      根据地址查询经纬度:

      http://maps.googleapis.com/maps/api/geocode/json?address=SFO&sensor=false

      根据经纬度查询地址:

      http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=false

      bounds的作用

      http://maps.googleapis.com/maps/api/geocode/json?address=Winnetka&sensor=false

      http://maps.googleapis.com/maps/api/geocode/json?address=Winnetka&bounds=34.172684,-118.604794|34.236144,-118.500938&sensor=false

      region的作用

      http://maps.googleapis.com/maps/api/geocode/json?address=Toledo&sensor=false

      http://maps.googleapis.com/maps/api/geocode/json?address=Tole

      具体可以查看GoogleMap服务的文档http://code.google.com/intl/zh-CN/apis/maps/documentation/geocoding/

      因为项目时间的原因,我果断采用了第二种我比较熟悉的方法。

      三.多线程完成HTTP地址解析

      这方面的教程网上已经有很多了,我就不列出我的方案了,给大家一个传送门吧

      四.中文地址问题

      我的需求是由地理位置解析出中文地址,但由Google Map  GeoCoding API返回的确实英文地址,我试过在HTTP请求中带Charset参数,但并没有成功返回中文…..

      在网上搜了一大圈以后才发现一个解决方法,原来可以直接在Url里带language=zh-CN参数,服了,估计经常使用GoogleAPI的才知道吧,也没发现相关文档,示例:

      http://maps.google.com/maps/api/geocode/json?latlng=39.9727642,116.3753401&sensor=true&language=zh-CN

      可以返回中文了,Problem Done!

      Update 2011-09-22:使用使用Google GeoCoding API过程的问题

      千万别觉得这就结束了,下面列举在实际使用Google GeoCoding API过程中发现的几个问题:

      1.HTTP连接不太稳定,注意多次尝试,而不是仅发送一次请求就使用,而要判断在没有返回值的时候尝试一定次数。

      2.有时候Google GeoCodingAPI会返回错误格式的地址,记得做处理,例如:

      请求:返回formatted_address字段,Url:

      Request URL: http://maps.googleapis.com/maps/api/geocode/json?latlng=30.511381,114.401893&sensor=false&language=zh-CN

      返回: “formatted_address”: “中国湖北省武汉市洪山区鲁磨路118号 邮政编码: 430079″

      崩溃了,居然错带了邮编…..所以还要人工处理下,防止以上情况的发生!

      参考文献:

      Android Google Code Issue 8816: service not available

      Android:用户定位User Localtion和利用HTTP解析地址—GeoCoding

      Google Geocoding API 开发语言问题

      【转】陈皓:程序员技术练级攻略

      这篇文章取名叫Build Your Programming Technical Skills,我实在不知道用中文怎么翻译,但我在写的过程中,我觉得这很像一个打网游做任务升级的一个过程,所以取名叫“技术练级攻略”,题目有点大,呵呵,这个标题纯粹是为了好玩这里仅仅是在分享Mailper和我个人的学习经历。(注:省去了我作为一个初学者曾经学习过的一些技术(今天明显过时了),如:Delphi/Power builder,也省去了我学过的一些我觉得没意思的技术Lotus Notes/ActiveX/COM/ADO/ATL/.NET ……)
      前言
      你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么实际作用,不如从工作中的需求出发)
      建议:

      • 不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来至少10年通用。
      • 回顾一下历史,看看历史上时间线上技术的发展,你才能明白明天会是什么样。
      • 一定要动手,例子不管多么简单,建议至少自己手敲一遍看看是否理解了里头的细枝末节。
      • 一定要学会思考,思考为什么要这样,而不是那样。还要举一反三地思考。

      :你也许会很奇怪为什么下面的东西很偏Unix/Linux,这是因为我觉得Windows下的编程可能会在未来很没有前途,原因如下:

      • 现在的用户界面几乎被两个东西主宰了,1)Web,2)移动设备iOS或Android。Windows的图形界面不吃香了。
      • 越来越多的企业在用成本低性能高的Linux和各种开源技术来构架其系统,Windows的成本太高了。
      • 微软的东西变得太快了,很不持久,他们完全是在玩弄程序员。详情参见《Windows编程革命史》

      所以,我个人认为以后的趋势是前端是Web+移动,后端是Linux+开源。开发这边基本上没Windows什么事。
      启蒙入门
      1、学习一门脚本语言,例如Python/Ruby
      可以让你摆脱对底层语言的恐惧感,脚本语言可以让你很快开发出能用得上的小程序。实践项目:

      • 处理文本文件,或者csv(关键词 python csv, python open, python sys)读一个本地文件,逐行处理(例如word count,或者处理log)
      • 遍历本地文件系统(sys, os, path),例如写一个程序统计一个目录下所有文件大小并按各种条件排序并保存结果
      • 跟数据库打交道(python sqlite),写一个小脚本统计数据库里条目数量
      • 学会用各种print之类简单粗暴的方式进行调试
      • 学会用Google (phrase, domain, use reader to follow tech blogs)

      为什么要学脚本语言,因为他们实在是太方便了,很多时候我们需要写点小工具或是脚本来帮我们解决问题,你就会发现正规的编程语言太难用了。
      2、用熟一种程序员的编辑器(不是IDE)和一些基本工具

      • Vim / Emacs / Notepad++,学会如何配置代码补全,外观,外部命令等。
      • Source Insight (或 ctag)

      使用这些东西不是为了Cool,而是这些编辑器在查看、修改代码/配置文章/日志会更快更有效率。
      3、熟悉Unix/Linux Shell和常见的命令行

      • 如果你用windows,至少学会用虚拟机里的linux,vmware player是免费的,装个Ubuntu吧
      • 一定要少用少用图形界面。
      • 学会使用man来查看帮助
      • 文件系统结构和基本操作 ls/chmod/chown/rm/find/ln/cat/mount/mkdir/tar/gzip …
      • 学会使用一些文本操作命令 sed/awk/grep/tail/less/more …
      • 学会使用一些管理命令 ps/top/lsof/netstat/kill/tcpdump/iptables/dd…
      • 了解/etc目录下的各种配置文章,学会查看/var/log下的系统日志,以及/proc下的系统运行信息
      • 了解正则表达式,使用正则表达式来查找文件。

      对于程序员来说Unix/Linux比Windows简单多了。(参看我四年前CSDN的博文《其实Unix很简单》)学会使用Unix/Linux你会发现图形界面在某些时候实在是太难用了,相当地相当地降低工作效率。
      4、学习Web基础(HTML/CSS/JS)+服务器端技术(LAMP)
      未来必然是Web的世界,学习Web基础的最佳网站是W3School。

      • 学习HTML基本语法
      • 学习CSS如何选中HTML元素并应用一些基本样式(关键词:box model)
      • 学会用 Firefox + Firebug 或 Chrome 查看你觉得很炫的网页结构,并动态修改。
      • 学习使用Javascript操纵HTML元件。理解DOM和动态网页。网上有免费的章节,足够用了。。
      • 学会用 Firefox + Firebug 或 Chrome 调试 Javascript 代码(设置断点,查看变量,性能,控制台等)
      • 在一台机器上配置Apache或Nginx
      • 学习PHP,让后台PHP和前台HTML进行数据交互,对服务器相应浏览器请求形成初步认识。实现一个表单提交和反显的功能。
      • 把PHP连接本地或者远程数据库 MySQL(MySQL 和 SQL现学现用够了)
      • 跟完一个名校的网络编程课程(例如:http://www.stanford.edu/~ouster/cgi-bin/cs142-fall10/index.php )不要觉得需要多于一学期时间,大学生是全职一学期选3-5门课,你业余时间一定可以跟上
      • 学习一个Javascript库(例如jQuery或ExtJS)+ Ajax(异步读入一个服务器端图片或者数据库内容)+ JSON数据格式。
      • HTTP: The Definite Guide 读完前4章你就明白你每天上网用浏览器的时候发生的事情了(proxy, gateway, browsers)
      • 做个小网站(例如:一个小的留言板,支持用户登录,Cookie/Session,增、删、改、查,上传图片附件,分页显示)
      • 买个域名,租个空间,做个自己的网站。

      进阶加深
      1、 C语言和操作系统调用

      • 重新学C语言,理解指针和内存模型,用C语言实现一下各种经典的算法和数据结构。推荐《计算机程序设计艺术》、《算法导论》和《编程珠玑》。
      • 学习(麻省理工免费课程)计算机科学和编程导论
      • 学习(麻省理工免费课程)C语言内存管理
      • 学习Unix/Linux系统调用(Unix高级环境编程),了解系统层面的东西。
        • 用这些系统知识操作一下文件系统,用户(实现一个可以拷贝目录树的小程序)
        • 用fork/wait/waitpid写一个多进程的程序,用pthread写一个多线程带同步或互斥的程序。多进程多进程购票的程序。
        • 用signal/kill/raise/alarm/pause/sigprocmask实现一个多进程间的信号量通信的程序。
        • 学会使用gcc和gdb来编程和调试程序(参看我的《用gdb调试程序》)
        • 学会使用makefile来编译程序。(参看我的《跟我一起写makefile》)
        • IPC和Socket的东西可以放到高级中来实践。
      • 学习Windows SDK编程(《Windows程序设计》 ,《MFC Windows程序设计》)
        • 写一个窗口,了解WinMain/WinProcedure,以及Windows的消息机制。
        • 写一些程序来操作Windows SDK中的资源文件或是各种图形控件,以及作图的编程。
        • 学习如何使用MSDN查看相关的SDK函数,各种WM_消息以及一些例程。
        • 这本书中有很多例程,在实践中请不要照抄,试着自己写一个自己的例程。
        • 不用太多于精通这些东西,因为GUI正在被Web取代,主要是了解一下Windows 图形界面的编程。

      2、学习Java

      • Java 的学习主要是看经典的Core Java 《Java核心编程技术》和《Java编程思想》(有两卷,我仅链了第一卷,足够了,因为Java的图形界面了解就可以了)
      • 学习JDK,学会查阅Java API Doc http://download.oracle.com/javase/6/docs/api/
      • 了解一下Java这种虚拟机语言和C和Python语言在编译和执行上的差别。从C、Java、Python思考一下“跨平台”这种技术。
      • 学会使用IDE Eclipse,使用 Eclipse 编译,调试和开发Java程序。
      • 建一个Tomcat的网站,尝试一下JSP/Servlet/JDBC/MySQL的Web开发。把前面所说的那个PHP的小项目试着用JSP和Servlet实现一下。

      3、Web的安全与架构

      • 学习HTML5,网上有很多很多教程,以前酷壳也介绍过很多,我在这里就不罗列了。
      • 学习Web开发的安全问题(参考新浪微博被攻击的这个事,以及Ruby的这篇文章)
      • 学习HTTP Server的rewrite机制,Nginx的反向代理机制,fast-cgi(如:PHP-FPM)
      • 学习Web的静态页面缓存技术。
      • 学习Web的异步工作流处理,数据Cache,数据分区,负载均衡,水平扩展的构架。
      • 实践任务:
        • 使用HTML5的canvas 制作一些Web动画。
        • 尝试在前面开发过的那个Web应用中进行SQL注入,JS注入,以及XSS攻击。
        • 把前面开发过的那个Web应用改成构造在Nginx + PHP-FPM + 静态页面缓存的网站。

      4、一些开发工具

      • 学会使用SVN或Git来管理程序版本。
      • 学会使用JUnit来对Java进行单元测试。
      • 学习C语言和Java语言的 coding standard 或 coding guideline。(我N年前写过一篇关C语言非常简单的文章——《编程修养》,这样的东西你可以上网查一下,一大堆)。
      • 推荐阅读《代码大全》《重构》《代码整洁之道

      高级深入
      1、C++ / Java 和面向对象
      我个人以为学好C++,Java也就是举手之劳。但是C++的学习曲线相当的陡。不过,我觉得C++是最需要学好的语言了。参看两篇趣文“C++学习信心图”和“21天学好C++”

      • 学习(麻省理工免费课程)C++面向对象编程
      • 读我的“如何学好C++”中所推荐的那些书至少两遍以上(如果你对C++的理解能够深入到像我所写的《C++虚函数表解析》或是《C++对象内存存局(上)(下)》,或是《C/C++返回内部静态成员的陷阱》那就非常不错了)
      • 然后反思为什么C++要干成这样,Java则不是?你一定要学会对比C++和Java的不同。比如,Java中的初始化,垃圾回收,接口,异常,虚函数,等等。
      • 实践任务:
        • 用C++实现一个BigInt,支持128位的整形的加减乘除的操作。
        • 用C++封装一个数据结构的容量,比如hash table。
        • 用C++封装并实现一个智能指针(一定要使用模板)。
      • 设计模式》必需一读,两遍以上,思考一下,这23个模式的应用场景。主要是两点:1)钟爱组合而不是继承,2)钟爱接口而不是实现。(也推荐《深入浅出设计模式》)
      • 实践任务:
        • 使用工厂模式实现一个内存池。
        • 使用策略模式制做一个类其可以把文本文件进行左对齐,右对齐和中对齐。
        • 使用命令模式实现一个命令行计算器,并支持undo和redo。
        • 使用修饰模式实现一个酒店的房间价格订价策略——旺季,服务,VIP、旅行团、等影响价格的因素。
      • 学习STL的用法和其设计概念 -容器,算法,迭代器,函数子。如果可能,请读一下其源码。
      • 实践任务:尝试使用面向对象、STL,设计模式、和WindowsSDK图形编程的各种技能
        • 做一个贪吃蛇或是俄罗斯方块的游戏。支持不同的级别和难度。
        • 做一个文件浏览器,可以浏览目录下的文件,并可以对不同的文件有不同的操作,文本文件可以打开编辑,执行文件则执行之,mp3或avi文件可以播放,图片文件可以展示图片。
      • 学习C++的一些类库的设计,如: MFC(看看候捷老师的《深入浅出MFC》),Boost, ACE, CPPUnit,STL (STL可能会太难了,但是如果你能了解其中的设计模式和设计那就太好了,如果你能深入到我写的《STL string类的写时拷贝技术》那就非常不错了,ACE需要很强在的系统知识,参见后面的“加强对系统的了解”)
      • Java是真正的面向对象的语言,Java的设计模式多得不能再多,也是用来学习面向对象的设计模式的最佳语言了(参看Java中的设计模式)。
      • 推荐阅读《Effective Java》 and 《Java解惑
      • 学习Java的框架,Java的框架也是多,如Spring, Hibernate,Struts 等等,主要是学习Java的设计,如IoC等。
      • Java的技术也是烂多,重点学习J2EE架构以及JMS, RMI,等消息传递和远程调用的技术。
      • 学习使用Java做Web Service (官方教程在这里)
      • 实践任务: 尝试在Spring或Hibernate框架下构建一个有网络的Web Service的远程调用程序,并可以在两个Service中通过JMS传递消息。

      C++和Java都不是能在短时间内能学好的,C++玩是的深,Java玩的是广,我建议两者选一个。我个人的学习经历是:

      • 深究C++(我深究C/C++了十来年了)
      • 学习Java的各种设计模式。

      2、加强系统了解
      重要阅读下面的几本书:

      • UNIX编程艺术》了解Unix系统领域中的设计和开发哲学、思想文化体系、原则与经验。你一定会有一种醍醐灌顶的感觉。
      • UNIX网络编程(卷1):套接字联网API》这是一本看完你就明白网络编程的书。重要注意TCP、UDP,以及多路复用的系统调用select/poll/epoll的差别。
      • TCP/IP详解卷1:协议》-这是一本看完后你就可以当网络黑客的书。了解以太网的的运作原理,了解TCP/IP的协议,运作原理以及如何TCP的调优。
      • 实践任务:
        • 理解什么是阻塞(同步IO),非阻塞(异步IO),多路复用(select, poll, epoll)的IO技术。
        • 写一个网络聊天程序,有聊天服务器和多个聊天客户端(服务端用UDP对部分或所有的的聊天客户端进Multicast或Broadcast)。
        • 写一个简易的HTTP服务器。
      • UNIX网络编程.卷2:进程间通信》信号量,管道,共享内存,消息等各种IPC……这些技术好像有点老掉牙了,不过还是值得了解。
      • 实践任务:
        • 主要实践各种IPC进程序通信的方法。
        • 尝试写一个管道程序,父子进程通过管道交换数据。
        • 尝试写一个共享内存的程序,两个进程通过共享内存交换一个C的结构体数组。
      • 学习《Windows核心编程》一书。把CreateProcess,Windows线程、线程调度、线程同步(Event, 信号量,互斥量)、异步I/O,内存管理,DLL,这几大块搞精通。
      • 实践任务:使用CreateProcess启动一个记事本或IE,并监控该程序的运行。把前面写过的那个简易的HTTP服务用线程池实现一下。写一个DLL的钩子程序监控指定窗口的关闭事件,或是记录某个窗口的按键。
      • 有了多线程、多进程通信,TCP/IP,套接字,C++和设计模式的基本,你可以研究一下ACE了。使用ACE重写上述的聊天程序和HTTP服务器(带线程池)
      • 实践任务:通过以上的所有知识,尝试
        • 写一个服务端给客户端传大文件,要求把100M的带宽用到80%以上。(注意,磁盘I/O和网络I/O可能会很有问题,想一想怎么解决,另外,请注意网络传输最大单元MTU)
        • 了解BT下载的工作原理,用多进程的方式模拟BT下载的原理。

      3、系统架构

      • 负载均衡。HASH式的,纯动态式的。(可以到Google学术里搜一些关于负载均衡的文章读读)
      • 多层分布式系统–客户端服务结点层、计算结点层、数据cache层,数据层。J2EE是经典的多层结构。
      • CDN系统 – 就近访问,内容边缘化。
      • P2P式系统,研究一下BT和电驴的算法。比如:DHT算法。
      • 服务器备份,双机备份系统(Live-Standby和Live-Live系统),两台机器如何通过心跳监测对方?集群主结点备份。
      • 虚拟化技术,使用这个技术,可以把操作系统当应用程序一下切换或重新配置和部署。
      • 学习Thrift,二进制的高性能的通讯中间件,支持数据(对象)序列化和多种类型的RPC服务。
      • 学习Hadoop。Hadoop框架中最核心的设计就是:MapReduce和HDFS。MapReduce的思想是由Google的一篇论文所提及而被广为流传的,简单的一句话解释MapReduce就是“任务的分解与结果的汇总”。HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的缩写,为分布式计算存储提供了底层支持。
      • 了解NoSQL数据库(有人说可能是一个过渡炒作的技术),不过因为超大规模以及高并发的纯动态型网站日渐成为主流,而SNS类网站在数据存取过程中有着实时性等刚性需求,这使得目前NoSQL数据库慢慢成了人们所关注的焦点,并大有成为取代关系型数据库而成为未来主流数据存储模式的趋势。当前 NoSQL数据库很多,大部分都是开源的,其中比较知名的有:MemcacheDB、Redis、Tokyo Cabinet(升级版为Kyoto Cabinet)、Flare、MongoDB、CouchDB、Cassandra、Voldemort等。

      写了那么多,回顾一下,觉得自己相当的有成就感。希望大家不要吓着,我自己这十来年也在不断地学习,今天我也在学习中,人生本来就是一个不断学习和练级的过程。

      —————————————————分割线———————————————

      这篇文章我个人比较喜欢,对整理自己的思路很有帮助,特地收藏一下~~

      MBTI测试结果

      摘要:今天看到美团的产品总监王慧文的招聘启事,上面提到要MBTI测试结果邮件给他,我就想起来去年在雁南飞上做过一次,刚才想再做就放弃了,觉得应该不带目的的来做测试,呵呵,其实以前的结果我觉得还比较准,建议也不错,就贴出来自己参考。

      MBTI测试结果

      性格类型:
      你的性格类型是“ENTJ”( 外向 + 直觉 + 思维 + 判断 )

      你性格外向,活泼、热情,喜欢社交和新鲜事物,认为生活是充满很多可能性。能很快地将事情和信息联系起来,然后很自信地根据自己的判断解决问题。需要别人的肯定,也乐于支持和关心别人。

      MBTI各维度详细得分:

      维度 1 :驱动力的来源: 外向 54%
      维度 2 :接受信息的方式: 直觉 65%
      维度 3 :决策的方式: 思维 59%
      维度 4 :对待不确定性的态度: 判断 57%

      性别的差异
      如果你是个男性:
      你的苦恼在于,你的热情和关爱心,容易被误解为暧昧,但如果你特意塑造自己的强硬一面,又容易丧失自己的天赋优势。

      如果你是个女性:
      你的苦恼在于,由于社会对女性的普遍看法是传统和矜持,如果任由自己的性格发挥,容易被扣上肤浅无知的评语。

      工作优势
      敢于不断尝试并积极行动;

      具备较强的社交能力;

      具备流畅的语言能力;

      有良好的创造力;

      思想不墨守成规,善于发现做事情的新方法;

      充满灵感,足智多谋;

      具有洞察力,能捕捉常规以外的事物,理解力很强;

      你有思想,善于思考,重视逻辑与客观分析,独立工作能力很强;

      工作劣势
      不能胜任比较沉闷的工作;

      独立工作能力较差;

      容易好心办错事;

      可能会陷入在一些具体工作细节与日常操作中无法自拔;

      过于追求原则与效率,会让你的工作环境充满压抑与敌意,使员工士气不高,动力降低,也使自己的精神处于压力之中;

      难以做出充满感情色彩的决定,缺乏人际、人情事件的处理能力;

      难以营造出快乐、有趣、融洽的工作环境;

      个人发展建议
      你的性格适合IT创业,项目经理,产品经理,咨询师等工作。

      在大多数的社交场合中,你很友善,富有魅力、轻松自如而受 人欢迎。在任何有他们的场合中,你总是爽直、多才多艺和有趣,总有没完没了的笑话和故事。善于通过缓和气氛以及使冲突的双方相互协调,从而化解紧张的局势。
      可能的盲点
      由于你关注外界各种变化信息,喜欢处理紧急情况,不愿意制订规划去预防紧急情况的发生。常常一次着手许多事情,超出自己的负荷,不能履行诺言,可能使周围的人陷入混乱。你需要试着找到一些能让自己按时完成任务的方法。
      你的注意力完全集中在有趣的活动上,喜欢不断地接受新的挑战,不愿意在目前沉闷的工作中消磨时间,难以估计自己行为带来的结果。你需要为自己订立一个行为标准。
      你的性格外向,往往喜欢与同事更多的交流,并希望得到他们注意和认可,会容易显得浮躁与不够踏实,甚至是自大与骄傲。
      当情况环境转变时,你很容易忽视他人的情感,变得迟钝和鲁莽。

      个人发展建议:

      — 全面审视现实情况,三思而后行
      — 考虑别人的情感
      — 分清事情的轻重缓急,作好计划,善始善终
      — 需要抑制其独断而忽视他人感情的方面
      — 需要在迅速决定之前,事先计划,考虑细节,三思而行
      — 注意规划性,发展持之以恒
      — 适合的时候,主动承担一些工作对你的发展更有利
      — 尽量思考成熟后再采取行动,碰到困难时,你需要坚持

      雁南飞给您的IT职业发展建议:

      — 总的原则:首先积累好自己的核心竞争力——再图转变
      — 提高自身技术能力,因为无论是技术管理型人才、技术精英,都需要让下面的人服你
      — 如果走纯管理/职业经理人路线,提高自身管理能力
      — 纯做技术也未必没有前途,比如“做技术,如果公司里的关键技术都是你发明的,你的价值比总经理还高。”
      — 系统学习项目管理体系的知识,弥补技术人员这块的缺失
      — 提高自身的交际和沟通能力(如果是外企,还需英语能力)
      — 提高职业成熟度,将个人价值观与现实中的“游戏规则”区分开来
      — 借助现在平台多做项目,积累人脉,待资源积累成熟时,寻找机会进入大型企业或跨国企业做项目管理等工作
      — 提高和控制自己的情商,克服自身性格的一些劣势(做技术是智商上的挑战,做管理是情商上的挑战)

      雁南飞给您的IT职业定位忠告:

      — 职业定位不要幻想,比如有人想做一个技术牛人,可一看代码就烦;还有人想成为经理,可就不喜欢跟人打交道;这样的人只会是南辕北辙的失败者。
      — 职业定位要早,比如技术人员转型做售前/顾问,越早越好
      — 职业定位要慎重,比如技术人员转型做售前,发现没前途,又转做技术人员,非常不利
      — 职业定位要综合决定:比如做技术,还是做管理,要看个人特质/企业环境和需求/个人价值观等3方面的因素综合决定,不要盲从。

      From MBTI咖啡馆:ENTJ执行官 —— 一切尽在掌握之中

      你坦诚,果断,有天生的领导才能。你能迅速的看到不合逻辑和低能无效的方法和程序。你会不断的添加和发展一个系统来解决组织性的问题。你喜欢给自己设定长期计划并真正去完成它。你总是消息灵通、见多识广,并且很擅于和他人表达你所拥有的知识。你也很乐于向别人表达你的想法。

      [教程] 将win7电脑无线网变身WiFi热点

      摘要:本教程是让我的WP7能连接到无线网,因为本人遇到一个诡异的问题,我的WP7不能连接到工作室的无线网,原因可能是WP7允许的连接无线网的时间较短,在路由还没返回success信息之前WP7就认为连接失败了…

      友情提示:以下操作您需要管理员权限
      开启windows 7的隐藏功能:虚拟WiFi和SoftAP(即虚拟无线AP),就可以让电脑变成无线路由器,实现共享上网,节省网费和路由器购买费。宏碁、惠普笔记本和诺基亚N97mini亲测通过。
      以操作系统为win7的笔记本或装有无线网卡的台式机作为主机。
      主机设置如下:
      1、以管理员身份运行命令提示符:
      快捷键win+R→输入cmd→回车
      2、启用并设定虚拟WiFi网卡:
      运行命令:netsh wlan set hostednetwork mode=allow ssid=wuminPC key=wuminWiFi
      此命令有三个参数,mode:是否启用虚拟WiFi网卡,改为disallow则为禁用。
                        ssid:无线网名称,最好用英文(以wuminPC为例)。
                        key:无线网密码,八个以上字符(以wuminWiFi为例)。
      开启成功后,网络连接中会多出一个网卡为“Microsoft Virtual WiFi Miniport Adapter”的无线连接2,为方便起见,将其重命名为虚拟WiFi。若没有,只需更新无线网卡驱动就OK了。
      3、设置Internet连接共享:
      在“网络连接”窗口中,右键单击已连接到Internet的网络连接,选择“属性”→“共享”,勾上“允许其他······连接(N)”并选择“虚拟WiFi”。
      确定之后,提供共享的网卡图标旁会出现“共享的”字样,表示“宽带连接”已共享至“虚拟WiFi”。
      clip_image001
      4、开启无线网络:
      继续在命令提示符中运行:netsh wlan start hostednetwork
      (将start改为stop即可关闭该无线网,以后开机后要启用该无线网只需再次运行此命令即可)
      clip_image002
      至此,虚拟WiFi的红叉叉消失,WiFi基站已组建好,主机设置完毕。笔记本、带WiFi模块的手机等子机搜索到无线网络wuminPC,输入密码wuminWiFi,就能共享上网啦!

      5、开机启动无线网络

      在桌面空白处右击鼠标新建一个记事本,命名为“wifi.txt”

      clip_image003

      打开wifi.txt,输入“netsh wlan start hostednetwork”,保存退出

      clip_image005

      将wifi.txt重命名为“wifi.bat”,确认更改,然后它会变成像wp7.bat那样的图标,就说明成功了

      clip_image006

      注:如果发现改扩展名没用的话,就到“计算机—组织—文件夹与搜索选项”里吧已知文件类型的扩展名显示出来

      clip_image007

      找到windows的启动文件夹(开始—所有程序—启动),右击打开

      clip_image008

      然后把wifi.bat放入启动文件夹中,以后就能开机启动这个虚拟无线网络了

      clip_image010