Month: September 2013

  • 尝试用fabric部署应用

    说来惭愧,个人是最近才知道fabric的。但是一上手就觉得fabric非常不错,解决了我长久以来的部署问题。 原因我的部署方式是: 登录远程服务器 svn update/git pull deploy.sh 后来觉得把未测试的代码签入代码库不是很好,想直接复制本地代码到远程服务器上再部署,于是第一步变成了: 打包本地代码文件 scp到远程服务器上 在远程服务器上解压缩

  • [snippet] Default browser scrollbar width

    Stackoverflow: Getting scroll bar width using JavaScript function getScrollbarWidth() { var outer = document.createElement(“div”); outer.style.visibility = “hidden”; outer.style.width = “100px”; document.body.appendChild(outer); var widthNoScroll = outer.offsetWidth; // force scrollbars outer.style.overflow = “scroll”; // add innerdiv var inner = document.createElement(“div”); inner.style.width = “100%”; outer.appendChild(inner); var widthWithScroll = inner.offsetWidth; // remove divs outer.parentNode.removeChild(outer); return widthNoScroll – widthWithScroll; }…

  • 【开发提速系列】自己动手,丰衣足食

    之前几篇都是单个主题的,针对某一块内容。现在这里给出的是针对某些特定问题的解决方案,可能不是很通用,但希望对各位有借鉴意义。 Expect与数据拉取脚本 个人认为expect是一个将交互脚本化的工具。 我之前遇到如下问题:通过ssh登录使用动态密码并限制命令的服务器执行一系列操作。一般来说,动态密码和命令限制导致常规的自动化手段不能用的,手动肯定可行,但是个人不认为每天没脑一样重复输个十条一模一样的命令是一件舒服的差事。所以我尝试并选择了expect。典型的expect命令如下: set prompt “$ ” set password [lindex $argv 0] spawn ssh foo@bar.com expect “*Password:*” send “$password\n” expect $prompt send “foo” expect $prompt send “bar” expect $prompt exit 上面的代码通过参数输入password完成了不能直接自动化的部分,剩下的让expect帮忙输入即可。 如果说只是让expect输入几条命令,貌似没啥。实际上,我用expect是来拉取运行数据的,一次大概要输入42条命令。具体参见这里和这里。使用后拉取报告时间从2h急剧缩减到3min。吐槽一句,通过ssh拉取运行数据太原始了…… Attic与验收测试 虽然最近看了FIT的一些博客说,验收测试不是想象中那么好,但是个人使用的话问题不大。具体参见这里和这里,当然还有github上的代码主页。典型的脚本: http.SetUri http://www.google.com/search http.SetParam q foo selenium.GetBy htmlunit selenium.AssertCurrentTitleMatches ^foo.*$ selenium.Close 总结 至此,开发提速系列全部完成。可能由于自己工作时间不长没有太多新意或者干货,但是还是希望对各位读者有用。欢迎拍砖。

  • 【开发提速系列】使用NIX作为开发环境

    如果你不是专门做限制在Windows下的开发的话,试试在nix(mac osx/linux)下开发吧,有很多tip可以帮你提升开发速度。 编码问题 如果原先在windows下开发的,转到nix下之后可能遇到的第一个问题不是软件,而是各种编码问题。以下是一些常见问题的解决方法: ssh乱码 luit -encoding your_encoding ssh luit是一种临时性的解决方法,不用改变你的terminal的编码。encoding设置为远程服务器的编码。 文件内容乱码 想临时看一下的话,尝试一下 iconv。典型使用如: iconv -f file_encoding -t utf-8 input_file | less file_encoding为你input_file的实际编码,默认iconv直接输出到stdout。想要转发到文件,加个 >output_file即可。 文件名乱码 iconv不能用于文件名转换,你需要的是convmv。典型用法: convmv -f filename_encoding -t utf-8 -r directory 因为文件名转换不能类似iconv输出到stdout,所以convmv实际是需要你确认的。比如上面的命令只会尝试性地转换,除非你加上–notest参数。

  • 【开发提速系统】开发基础

    作为程序员最应该关注的几块之一。主要分IDE(Eclipse),构建工具(maven),服务器操作(linux)。 IDE 做Java开发常用的IDE是Eclipse,高效使用Eclipse对你开发提速立竿见影。 首先是快捷键,要像使用Photoshop一样记住常用的快捷键。 其次是减少不必要的鼠标操作,个人认为vi key binding/vrapper,emacs key binding/emacs+插件是几个不错的选择。 还有一些特定的点,比如使用m2e而不是每次都修改了pom.xml(maven的构建定义文件)后在命令行中mvn eclipse:eclipse,还有尝试使用eclipse默认附带的mylyn管理你的开发任务,聚焦你当前的工作文件(IBM的文章1,文章2)。 构建工具 对于大型项目来说,maven是个不错的选择。不过大部分人可能都没有深入了解过maven,我个人之前也是。如果你有时间的话,建议阅读一些maven的书籍。我个人在阅读之后了解到mvn deploy可以打包上传jar上定义在pom.xml中指定的repository上,原先我只知道通过mvn package再手动上传到repository。

  • 【开发提速系列】常规软件使用篇

    日常工作中使用的软件说多不多,说少不少。除去开发用的工具之外,个人认为主要是IM、浏览器、邮件客户端和文本编辑器。 IM 个人主要使用阿里旺旺。一个技巧是Alt + Q,快速发送信息给指定的人。否则要点开主界面,输入对方昵称,回车打开,再输入内容发送等大概四步,次数多了感觉有点麻烦。 浏览器 以firefox为例。 首先要整理好你的书签,便于你快速定位到你需要的页面。常用的网址使用目录定位比搜索更快,而且内网页面不能通过外部搜索访问到。 其次建议使用lastpass等同类工具管理你的帐号和密码。除了减少记忆负担之外,自动登录等功能真得很好用,特别是在内网没有使用SSO(单点登录)到处都是登录界面的时候。 第三,(mac用户请忽略)习惯于鼠标的尝试下鼠标手势,习惯于键盘控制的尝试下vimperator等插件。常规操作方式涉及界面定位,比如新开tab等,鼠标手势和键盘控制的话就不需要了。 第四,假如你希望改变常用的某些网页的界面和行为,比如一直显示搜索框,而不是某个固定页面显示,greasemonkey(chrome是tempermonkey)是一个不错的选择,适合想用firefox做一些页面hack的人。 邮件客户端 学习如何高效使用邮件是一门学问,这里我只给出我实践过的几点。 使用文件夹分类还是tag分类?个人现在用tag分类。针对需要跟进的邮件增加followup;需要保存时使用thunderbird按照月份存档;寻找某封邮件时按照标题,tag,关键字,发件人等搜索,这是使用最强大的邮件服务gmail时得到的经验之一。 文本编辑器 linux下面一般vim/emacs足矣,windows下notepad大部分时候不够。个人觉得sublime,notepad++挺不错。一般来说,开发用的文本编辑器一般要有编码支持,语法高亮等功能。不过,最重要的衡量标准还是顺不顺手。

  • 落書き – 水野亜美

  • 【开发提速系列】开始与工作环境篇

    准备想把这写东西当作分享讲的,不过试讲了一下感觉不好,还是写成系列博客吧。 原先演示文档大概有五十页的样子。部分和工作相关,写到博客中会有删减和改写。 虽然我们程序员有一台电脑和网络就能工作,但是为了更高效的工作,在最基础的地方花功夫也是值得的。 打字 打字速度很重要,对程序员的重要性有如手对程序员的重要。 提高打字速度是一个花功夫的过程,但个人觉得,不能忽视的是数字上的标点符号。如果你在打代码的时候还会用一指禅打标点符号的话,快点速成下标点符号的打字练习吧。 交换ctrl和capslock的位置

  • sass – 2 colors gradient mixin with fallback

    // calculate the middle color for fallback @mixin middle-color($c1, $c2) background-color: rgb((red($c1) + red($c2)) / 2, (green($c1) + green($c2)) / 2, (blue($c1) + blue($c2)) / 2) // generate linear-gradient @mixin linear-gradient($angle, $c1, $c2, $fallback: “”) // background color fallback @if ($fallback !== “”) background-color: $fallback @else @include middle-color($c1, $c2) // webkit linear gradient fallback @if…

  • 谨记一次被非标准属性background-position-y坑的过程

    公司网站的背景是从早到晚渐变的,所以用了一张1px×13000px的图,每天根据时间不同,php那边算个bg-position中y的偏移值。 因为是php那边处理,当时php那边的人就顺手写了个inline style在某个module的layout的标签里: style=”background-position-y: {{ app.bg_position }}px” 后来我只是考虑到要把这个挪到全局layout里去,加个分号。 另加当时我脑残了一下css的平铺方向错写成了repeat-y,所以改好css,把style挪到正确的template里,我就没多想。 顺带确认了下repeat方向是x没错,bg-position位移方向是y没错,chrome下没错,IE下没错。 这便是一个悲剧的开始。 直到今天被人发现在firefox下白天显示着夜晚的深紫色渐变背景,只好开Inspector, 发现虽然body里有写样式,但inline element里却没有读到样式。 google之,才知道background-position-y/background-position-x是IE创造出的非标准属性,但是Chrome竟然支持了,但Firefox没有。 firefox没有…… =。=) 再高级的浏览器也是不可信的。