Category Archives: 软件

如何避免误删除代码带来的灾难

下午,一位同事急匆匆找我,说他在操作TotoriseGit时不小心点击了删除菜单,导致本地的项目整个被删,问我有没办法恢复。我看了看他的提交历史,最后一次提交居然是在几天前,基本上可以认为,这几天做的修改可能都要打水漂了。因为Git对代码版本控制的最小粒度是Commit,即一次提交。这几天下来积累的未提交代码没有被Git管理起来,一旦删除,将无法通过Git的手段来恢复。 发生这种灾难性的结果,不能只怪TotoriseGit没有做好删除确认这一步,更应该检讨自己没有养成良好的提交习惯。 关于良好的提交习惯,我在之前的文章中已有说明,其中一点就是控制好提交粒度,也就是提交的原子性,在此,我需要再补充一点,就是尽量使用小粒度的提交,用频繁的小粒度提交来代替较少的大粒度提交,即一天可以提交3次的话不可等三天再提交1次,因为累积的未提交代码越多越容易出问题: 误删除的灾难,正如这一次我同事遇到的意外一样,累积的未提交代码无法恢复,损失惨重。 提交粒度太大不方便回滚,一次提交里如果包含了登录、首页、甚至是用户管理等功能点,临时发现首页的修改有误,要恢复到上个版本时无法实现快速回滚,因为一回滚,登录和用户管理功能也随即回到了从前。 按理说啊,程序员同学们应该享受提交代码的乐趣才对,该提交时就提交,别太腼腆了啊! 所幸的是,该同事几天来做的修改大都是新增代码文件,没有加入版本管理,TotoriseGit删除文件的时候没有把这些文件一起删除,解决办法就是checkout一次HEAD的版本再把新文件加进去,补充少量丢失的修改,也算是不幸中的大幸吧。但建议不要因此而抱侥幸心理,以后继续累积几天下来再提交一次代码。这次的教训值得深省了!呵。 另,为防止同类事故继续发生,我另一位同事给出了不在TotoriseGit菜单里显示删除功能的设置方法: 使用windows git的GUI的同志请注意,由于delete命令没有确认窗口,为了防止手震点到导致误删除,请空白处右键菜单进入setting,选set Extend Menu Item,勾选上delete和delete(keep local)。就可以屏蔽菜单里的删除(需要用到这两项的时候按住shift然后点右键就可以看到他们出来了)。  

Posted in 技术, 软件 | Tagged , | Leave a comment

iSign+iPicWall=技术沙龙的小玩具

上个月筹备技术沙龙2月份的iOS专场,突发其想,既然是iOS专场,那手上这些iOS设备应该最大化的利用起来,于家有了这样一个想法:在iPad上开发一个签名应用,让到场的每个人用手指在上面画上自己的名字,然后马上同步到连接着投影仪的电脑上,电脑就把刚收到的签名显示出来,让全场的人都看到。 我花了一点业余时间完成了签名应用的第一个版本,项目名叫iSign,然后让网易的双木小神童同学给快速做了个Web展现界面,项目名叫iPicWall。我们当天在沙龙即将开始的前几分钟完成了预演。接下来就开始使用iPad签到了: 签名后,按一下同步按钮,马上在投影上出现自己的签名了。 有意思吧?反正我和双木都觉得非常好玩。以后我们还会继续把这个小玩意完善。 其实沙龙就是这样才好玩。

Posted in 技术, 软件 | Tagged , , | 8 Comments

Git的推广心得

这两周已经开始在公司几个项目/产品里推广Git了,有一些心得,在此分享: 工具神马的都是浮云 实际上,工具神马的都是浮云! Git或HG之类的DVCS就是神器吗?不,充其量也只是另一个VCS或SCM,所谓的分布式、轻量级分支神马的在某些人看来或许是扯蛋的玩意,人家可能用SVN用得不知有多爽多出神入化呢。如果你仅仅是因为要推广一种新工具而去推广Git,那你一定会饱吃闭门羮。不信试试。 真正重要的,是驾驭在工具上面的灵魂(思想),有些人虽然用着Git,但只把Git当作备份工具用;有些人尽管还用着古老的抢占式的VSS,但提交的守则却是规规范范,标签打得清晰条理!前者不管用什么版本管理工具,都是YAST(Yet Another Scm Toolkit),而后者不管用什么管理工具,都能把代码版本管理得齐齐整整。 记住一点:不要把版本管理工具当作代码备份工具用!否则,你需要的只是dropbox。 既然工具是浮云,那我为什么还选择Git?嘿,当你的团队开始有了强有力的版本管理意识支持后,就会下意识地选择方便趁手的工具(好吧,我这里不说强大),Git实际就是这么一种工具,适合各种各样有洁癖的人、提交狂人等。 规范地使用SCM才是正经事 如果你的团队习惯把SCM当备份工具用,那么恭喜你,你有足够好的切入点推广Git了。如何判断一个团队是否把SCM当作备份工具了,有大概以下几个可供参考的现象: 一古脑儿的提交文件,有时1个文件,有时十几个文件,N个功能点一齐提交 备注的特征:“略”,“提交一些代码”,“fix一个Bug”,“今天的代码”等 从来不给代码打上版本号,程序从头到尾只有唯一一个版本,就是Now 遇见冲突就慌张,不懂处理 等等 我推广Git,目的不是为了Show up,说我懂得一个很潮的东西,你们也跟着用吧,而是要彻底改变团队把SCM当备份工具用的习惯,是为产品代码质量负责。 代码版本管理,最终目的是要实现代码版本的可控性,包括大至版本级的重取,包括功能级别的增减,甚至是小至commit级别的回滚。我用以达到这种可控性的是一些规范,而非Git本身(当然Git及它的扩展Git flow立功不小)。 我制定的规范大致有两个: 双分支代码结构 严格的代码提交规范 并有一个推荐的(非强制的)最佳实践: 使用git-flow轻松控制提交粒度 双分支代码结构 双分支指项目推进过程中总是保持使用两个主分支:开发分支(develop)、成品分支(master)。 1)开发分支(develop) 日常的开发工作都是围绕该分支进行。开发分支上的代码只有在封版的时候才会被合并到master分支。 本地的develop分支,开发人员在上面开发功能并提交,当完成一个完整的功能开发并通过测试时,才能把代码push到远程的develop分支。 远程的develop分支上的代码,要求在任何时候总是可以通过编译,所以每次队员把代码push到服务器上之前,需要确保自己的代码已通过编译并测试。远程的develop分支的代码会用于项目的自动构建。 2)成品分支(master) 该分支上面的代码总是稳定的,成品级的。只有在每次发布新版本的时候,才会从develop上面把上版本开始到现版本的修改移到master分支,master分支通过标签(tag)来区分不同的代码版本。产品的实施人员所面对的总是该分支。 代码提交规范 代码提交规范有三大点,必须严格遵守: 控制好提交粒度。每次的提交都必需具有独立性的原子性,建议是以一个功能点或Bug fix为单位;无直接关联的文件不能在同一次提交;除了初次提交,尽量不用commit -a。 认真对待提交备注,多花一分钟回想本次提交的代码所含的意义,清晰描述下来,很有可能以后看备注的人是你。 … Continue reading

Posted in 技术, 软件 | Tagged , , , , | 5 Comments

你为神马不用git-flow呢?

这是一篇译文(原文在此),当时我从这篇文章开始初识git-flow,经过一段时间的实践后,觉得git-flow非常棒,我决定在团队里面推行,我需要写一篇使用的教程,重新读这篇文章的时候,我认为,我只需要把它翻译成中文版,就是给队员们很好的教程了。遂。。拙译如下,个别地方可能不太靠原文,请看官明了: ================================ 今年的一月, @nvie 同学发表了博客 “一种有效的Git分支模型”, 文章讲解了他是如何让自己的Git仓库保持整洁,除此之外,他发布了git-flow; 一个可以轻松实现该模型的Git扩展。 有同学说从来没有听说过?对此,哥表示相当震精,所以,在这篇文章里我要告诉你,为什么它可以让你从早上傻笑到晚上。 安装完git-flow后,你可以在当前目录下创建一个全新的仓库或把一个现有的仓库转换成新的分支结构: $ git flow init 它会问你一系列的问题,蛋定!尽量使用它的默认值就好了: No branches exist yet. Base branches must be created now. Branch name for production releases: [master] Branch name for “next release” development: [develop] How to name your … Continue reading

Posted in 技术, 软件 | Tagged , | 9 Comments

珠三角技术沙龙12月小沙龙预告

原文见:http://techparty.org/2010/12/10/opensource/ 曾经因为所写的某段代码的画龙点睛之妙而欣喜若狂? 多年的历练让你积累了无数的压箱宝而对其呵护备至? 是否,在每次擦拭它们之时总觉得有一股隐隐的冲动? 那么,来开源吧!让它们在其他人的指掌间重放光彩。 开源,固然是个大话题,但实践开源,并不困难:你不必有Plone这种史诗般的作品,不一定要写出rails这样的传世经典;为某开源项目commit一个很小的patch,自个分享一小段心水的代码,向朋友传播开源软件的使用心得时我们已经在实践开源了。 12月小沙龙,独乐乐不如众乐乐,这是一个让你实践开源的舞台。现在向大家征集Topic(总时间30分钟以内为宜)了,topic可以是介绍自己的开源作品(原创),也可以介绍自己喜欢的开源软件(推介)。 小沙龙将在12月19日(周日)下午举行,地点待定(红专厂或寻觅咖啡),接受报名人数为30名左右,由于本次沙龙场地稍大,不要求与会者必携带Topic,但还是强烈建议大家积极准备Topic,现场如果Topic数量多,将通过投票的方式对Topic进行取舍。 现有Topic: 赖勇浩 《python-message:面向消息编程的程序库》 (原创) Jeff 《autoforms:django的自定义表单组件》(原创) 更多的topic见报名表。现在还接受报名,有兴趣移步到这里。 让你们的Topic像洪水般涌向12月小沙龙吧。

Posted in 技术, 生活, 软件 | Tagged , , | Leave a comment

破解让IOS变得更好玩

破解IOS不一定是为了安装盗版软件,而是为了让自己的IOS设备更自由,实际上,我破解后还继续购买付费软件。 破解IOS 在线破解:www.jailbreakme.com  使用IOS设备登上该网页,然后按指示操作即可,它会指标你安装破解,最后会把Cydia安装在桌面上。 通过Cydia安装一萝筐好玩的 有了Cydia就好玩了。使用Cydia可以让你的ios设备支持多进程、不通过itunes安装程序、下载更多其他好玩的东西等,让你的ios设备的功能更加强大。下面几件事情应该要做的: 修改Root密码,以后通过更安全的密码来执行管理员操作。 安装SSH,让你从电脑上面直接命令行控制ios设备。 安装BackGrounder,支持多进程。 安装Multifl0w-多任务切换管理,连按两下Home键查看当前活动的进程。 安装mobile terminal,可以使用终端哇! 安装Netatalk,支持Apple Talk协议,让你的Mac可以直接访问IOS设备文件系统。 安装iFile,类似Filder的东西,在设备上浏览文件。 安装appsync,支持安装ipa文件必须基础组件。 安装installous,出寨版AppStore,不过最主要的是,把ipa文件放到它的下载目录后,用它来安装程序。 安装iDownload,可以直接从ios下载东西。可以从installous安装。

Posted in 软件 | Tagged , , , , , | Leave a comment

使用Gmail与Evernote同步写日记

我是Evernote(windows,mac,手机多平台的笔记软件)的忠实用户,工作时用来起草文档和收集想法;上网时用来收集好文;学习用来做笔记;平时还用来写写日记。关于EverNote的好处,不是这次的重点,想要了解更多EverNote的信息,请到这里。 前不久,我为了方便自己随时随地写日记,就在黑莓手机上下载了一个evernote的应用程序。但该程序让我有几个挺不爽的地方: 1、只能写不能看。 2、不支持autotext,也就是说我不能使用五笔输入法来输入文字,这非常郁闷。 所以,这个应用我一直放着没用。 就在前几天,我在外头的时候,想起要记录一些东西,决定不使用evernote的手机客户端后,我想起了Gmail的手机客户端,于是打开Gmail应用,在手机上给自己快速编写并发了一封邮件。发完之后,我才想起,Evernote其实是可以通过Email来编写笔记的,于是打算回家后捣鼓一下,希望可以让自己方便地在手机上把文章更新到EverNote上去。    使Gmail与Evernote同步内容很简单,通过Gmail的过滤器和转发功能,很容易的就可以把想要同步的内容同步到evernote上。 以我的案例来说明一下,我的需求是:凡是收到由我发出的标题包含有“日记”二字的邮件,都转发到我的evernote帐号上去。 实现步骤: 一、在Gmail里添加转发地址 首先,要找到你的evernote帐号对应的电子邮件地址,如果你安装了Evernote客户端,可以在客户端的菜单找到“账户信息”一项,点击后,弹出窗口里会有“将笔记通过电子邮件发送到”的邮件地址,请记下该地址。 接着,打开Gmail选项的“Forwarding and POP/IMAP”标签,点击”add a forwarding adress”,输入上一步得到的Email地址并提交,这时Gmail会给这个Email地址发一封含确认代码的转发确认的邮件,而你现在只需要打开Evernote,同步一下就能看到这封邮件,在邮件里找到“Confirmation code”,填入验证框即可完成转发配置。 二、创建转发过滤器 在Gmail的搜索框后面点击创建过滤器链接,开始创建一个用于与EverNote同步的过滤器,填写过滤器信息时,我把几个常用的Email地址填到From字段(使用”|”隔开),把收件的Email填到To字段,标题字段填“日记”,然后点击下一步。 在“choose Action”这一步,我把邮件打上“日记”标签、跳过“inbox”、并勾选”forward it to”并选择evernote的邮箱地址。最终点击创建过滤器按钮就完成了。 好了,现在可以测试一下效果了。 !!重要注意事项: Gmail的过滤器或是转发机制有一个问题:当你使用A@gmail.com发送邮件给A@gmail.com时,会触发过滤器,但是并不会发生邮件转发的动作。你需要通过另一个邮箱(如B@gmail.com)给A@gmail.com 发邮件才可以成功转发。但是假如B@gmail.com已经由A@gmail.com托管(即,A可以收发B的邮件),转发同样不会发生! 我的情况就是有A,B两个邮箱,A邮箱管理B邮箱的邮件,我的转发解决方法是这样: 我在B邮箱创建过滤器,该过滤器负责转发邮件,在A邮箱创建过滤器打标签,这样一来,就算我在A邮箱里面使用B@gmail.com 给B@gmail.com发邮件也可以成功转发了。所以我以后只需要往B@gmail.com发邮件就可以保证可以转发成功了。 BTW: 如果想要在通过Email添加笔记到evernote的同时添加分类和标签信息,可以在邮件的标题上做文章。如本文的标题: 使用Gmail与Evernote同步写日记 @日记 #evernote gmail evernote将会把这篇笔记归类到“日记”下面,同时有evernote,gmail两个标签,笔记的标题将会修改成“使用Gmail与Evernote同步写日记”。 官方说法见这里。

Posted in 软件 | Tagged , | 2 Comments

今天在Barcamp宣传DropBox的一则皮皮踢

今天参加了Barcamp在广州试行的活动,并贡献了一个topic:《DropBox简介》,作为一款已经被墙的产品来说,现在才介绍好像晚了一点 :)。 Barcamp是一个很好玩的活动,看看今天的topic大家就知道:《性爱与人生》、资深品酒师的品酒经验、神秘学与生活、Perl6使用体验、R语言介绍、能量工作分享、DropBox简介等。。下次有兴趣的同学,不管你在哪个行业,都值得过来玩一玩。。 更多信息,见推上的标签:http://twitter.com/#search?q=%23barcampGZ 辛苦今天的主办方,让咱们一群技术宅长了见识!会后,我们几个要好的朋友一起饭醉了一番,借用星星的话:@mikespook: #barcampGZ 之后,跟 @jeff_jie、@cncamp、老潘(推多少?忘了……)众人在有福气腐败……这家貌似换厨师了,味道好了不少。饭局中,大家聊了很多非技术话题,并一致认为,技术宅是没有出路的…… Brief intro of Dropbox View more presentations from jeffkit.

Posted in 技术, 软件 | Tagged , , | Leave a comment

思维导图之我用

思维导图是我生活和工作中不可缺少的重要部分,她的使用场景有很多种,午休时间,我想和大家分享一下我使用思维导图的经验,是以抛砖,意在引玉。 读书笔记与知识管理 相信很多同学都有用导图来做读书笔记的习惯,恐怕这也是导图被用得最之泛的一个功能了。我也不例外,我在读一些逻辑性强或技术性的图书时习惯使用导图来做笔记,笔记内容主要是图书的细化版大纲,再加上自己的一些评注。除了读书,我在网上看一些结构相对复杂的文档(尤其是技术文档)的时候也会用导图来组织他们的知识点,这样,导图也成了我的知识管理工具。用导图做读书笔记和知识管理的好处有两点,一、借助导图,我可以很容易地把握书本和知识的总体结构,只保存它们的精髓;二、有这些笔记和知识点提要,当我在需要回忆起来某些内容或知识的时候,过程就变得简单多了,在导图中可以快速找回自己想要的内容和当时自己的理解。 下图为用导图做读书笔记的典型例子: 思考与头脑风暴 有时候我会就某件事情陷入很深的思考,想得很多,很远,犹如天马行空,又像野马脱缰,我称之为个人的头脑风暴,如果当时没有记下来,而思考状态一过去,很多在思考过程中想到的东西就会被忘掉。我在坐飞机的时候犹其喜欢思考,那时,导图就会成为我最得力的帮手。 思考的时候不着边际吗?不要紧,属于另一个范筹的东西我就另起一个结点,在该结点再往深处细化,再形成另一棵思维之树!我通常把脑里边凌乱的独立的想法先倒出到导图,然后就可以开始把这些想法整理成有逻辑的信息了。 以某次飞行中产生的片段为例(点击可见大图): 项目\产品管理 导图用来做产品管理?嗯,freemind曾一度成为我的产品仪表板,我使用一张大的导图来管理产品的目标、计划、人员、任务甚至会议记录,所有关于产品的信息一目了然。归功于导图的无限的扩展性,我可以在这张产品仪面板上填上一些宏观的指标和状态,同时我还能为自己开辟一些结点用于收集很凌散很细节的想法;你还不必去删除掉一些旧的结点,把它们放进一个叫”归档“的结点里去就OK了。很山寨吧?但很实用。 看图,来自真实的产品,由于某些原因,该脑图我就不展开得太详细了 :)。 编码助手,脑图版流程图 在编写逻辑稍为复杂的代码时,我总要组织一下各色角色的职能,大致梳理一下整个流程,然后再开始编码,以前我会用纸和笔,不过前段时间发现导图做这个事也很有一套,于是就用上了。看图: 工程中的一部份 以前我有个项目,需要一些同事为手机的每个功能点截屏,并要把截好的屏严格地以功能点为单位分别存放在不同的文件夹,文件夹下面可能还需要嵌套很多文件夹,最终是一个很庞大的目录树。我的同事们除了截屏外,花在建立目录和分派文件上面的时间也极其长,大部份的时间被一些重要但是很机械的事情占据了。 当时为了解决这个问题,我希望可以让他们避免新建大量的文件夹和命名,这要求有一个自动化的过程,而自动化需要配置数据来驱动啊,我想到了XML。难道要手写XML咩?有没可视化的方式来组织结构化的信息然后可以保存为XML嘛?这时我就想到了思维导图,而且我一直用的freemind的数据就是xml格式的。遂大喜,开始设计使用导图改造工作流程的方案: 最后,导图不负所望地漂亮地完成了任务,下面这样一张导图除了可视化地表示了手机的功能结构,还可以用来做文件导航:负责文件分派的pythone脚本自动创建文件夹后,把视频文件复制到相应的文件夹后,反过来更新导图文件,为每个功能结点都加上可以直接打开该功能的视频的链接。   ————————-低调分割线————————— 工具篇 作为补充,我介绍一下我最常用到的一些导图类的工具,主要是freemind和Omni Outliner和 Omni ifocus: 一、freemind,作为老牌的开源跨平台思维导图就不用我多介绍了,她是我以前使用最多的导图软件,简洁而强大。但有时在我的Mac下面会突然无法输入中文,只有做了其他手准备。 二、Omni Outliner,来自Omni Group(传说是Mac 桌面软件的典范)的一个大纲组织工具,本质与导图一样,但她不是以图的形式出现了,而是以缩进标题的形式,工作界面也相当简洁。现在是我最常用的导图工具。 三、Omni ifocus,一款GTD软件,由于它的任务可以嵌套(树型结点),所以在我的macbook上打败了things。 我在选择思维导图工具的时候只要评估他们是否满足下面几个要求: 一、快捷键,使用导图时,快捷键决定了使用的方便性,如freemind的回车添加结点,Tab添加子结点,都相当方便,而MindManger的快捷键是CMD + Enter,复杂不但止,还和我系统的全屏快捷键冲突,立马抛弃。 二、附件功能,导图有时只是一个很强的组织者,有些东西不一定全在导图里面,所以附件或链接功能就是使他可以延伸的功能,freemind和Omni Outliner都很好地支持了,后者还可以预览和实时录音作为附件。 三、支持中文,目前离开中文我会活不下去,所以一定要支持中文,freemind有时候会傻掉(也可能是我的输入法和Java有冲突)。而样式没有太多要求,花哨的东西我只会试一次就扔,如NovaMind。 小结 … Continue reading

Posted in 软件 | Tagged , , | 2 Comments

从Mac OS X 上移除 mysql

我这台机器上原来有Mysql,后来又用了MacPort,用Macport又装了个Mysql,搞到极其混乱,现在八不清谁跟谁,索性把他们都Uninstall了,然后再用Port重新装过。 先用Port把Port的版本unistall,前提是要停止Mysql: sudo port uninstall mysql5 然后开始删文件吧。sudo rm /usr/local/mysqlsudo rm -rf /usr/local/mysql*sudo rm -rf /Library/StartupItems/MySQLCOMsudo rm -rf /Library/PreferencePanes/My*编辑 /etc/hostconfig 删除这行: MYSQLCOM=-YES-rm -rf ~/Library/PreferencePanes/My*sudo rm -rf /Library/Receipts/mysql*sudo rm -rf /Library/Receipts/MySQL*

Posted in 技术, 软件 | Tagged , | Leave a comment