MySql server startup error ‘The server quit without updating PID file ‘

有些天没有开 mysql, 期间升级了 OSX 10.9 系统。
今天打开 mysql 爆了个 MySql server startup error ‘The server quit without updating PID file ‘ 错。
通过以下命令修复了:

sudo chown -R _mysql /usr/local/var/mysql

reference:
http://stackoverflow.com/questions/4963171/mysql-server-startup-error-the-server-quit-without-updating-pid-file

Homebrew安装老版本程序

Homebrew是OSX下最好的包管理工具了吧。可以很方便地查找和安装软件。
软件默认安装的基本都是最新版的软件,怎么安装老版本的软件呢。
很简单,以安装老版本svn为例:
1执行下面命令得到 svn 各版本对应的 git 命令

brew versions svn
1.8.3    git checkout 89853fa /usr/local/Library/Formula/subversion.rb
1.8.0    git checkout f56b641 /usr/local/Library/Formula/subversion.rb
1.8.1    git checkout 55577bb /usr/local/Library/Formula/subversion.rb
1.7.10   git checkout 0060dc3 /usr/local/Library/Formula/subversion.rb
1.7.9    git checkout b0e6223 /usr/local/Library/Formula/subversion.rb
1.7.8    git checkout f7a42d2 /usr/local/Library/Formula/subversion.rb
1.7.7    git checkout a6dcc41 /usr/local/Library/Formula/subversion.rb
1.7.6    git checkout 6b8d25f /usr/local/Library/Formula/subversion.rb
1.7.5    git checkout 5d5cd70 /usr/local/Library/Formula/subversion.rb
1.7.4    git checkout dc4245c /usr/local/Library/Formula/subversion.rb
1.7.3    git checkout eb97154 /usr/local/Library/Formula/subversion.rb
1.7.2    git checkout d89bf83 /usr/local/Library/Formula/subversion.rb
1.6.17   git checkout 6e2d550 /usr/local/Library/Formula/subversion.rb
1.6.16   git checkout 83ed494 /usr/local/Library/Formula/subversion.rb
1.6.15   git checkout 809a18a /usr/local/Library/Formula/subversion.rb
1.6.13   git checkout 7871a99 /usr/local/Library/Formula/subversion.rb
1.6.12   git checkout c99b3ac /usr/local/Library/Formula/subversion.rb
1.6.6    git checkout 8774131 /usr/local/Library/Formula/subversion.rb

2如果已经安装有新版svn程序,执行

brew unlink svn

没有的话跳过这步。
3执行1中得到的所需要版本 svn 对应的 git 命令,如要安装1.7.8版的svn

git checkout f7a42d2 /usr/local/Library/Formula/subversion.rb

4安装svn

brew install svn

就这样。

我使用的那些OSX效率软件

好像只要是有写博客和同时使用苹果电脑,另外有点空闲和有助人为乐的心的人都会写一篇介绍自己常用的效率软件的文章。
那么我也不能例外。不过我好像真的不是很闲,所以这里很多都只列一下软件名称,并不做太多的介绍,仅当记录一下吧。有兴趣的同学们可以自己去研究。
效率软件:
Time Sink: 记录软件使用时间
Alfred2: 神器,快速查找文件,打开程序等很多功能。必备程序。
Dash: 离线文档,代码管理等。
Bartender: 隐藏任务栏小图标。
BreakTime: 一定时间打断屏幕,提示休息。
Caffeine: 防止屏幕关闭,系统休眠。
Manico: 快速在运行的程序间切换。
Wunderlist: GTD, todo list.
Evernote: 笔记。
Dropbox: 同步盘。
Go2Shell: 从 finder 中快速打开 shell.
GoAgentX: 你懂的。
其他软件:
AppClearner: 软件卸载。
Google Chrome: 浏览器,习惯了。
diumoo: 豆瓣电台。
EuDic Free: 字典。你要是爱折腾的话,系统自带的字典也不错。
IntelliJ IDEA: IDE.
Vim: 必备程序。
iTerm: 必备程序。
Reeder: rss 订阅。
Sublime Text2: 快速编辑文本。
Sparrow: 邮件。
就这样吧。有好些都是收费软件,尽量支持正版吧。

一个来自一淘的简单面试题

interview etao

一个简单的面试题


很久前的yisi在微博上发的一淘面试题,整理文件的时候挖出来的。

比较简单的一道题目,考察点主要有负边距,position定位,z-index层级,layout等。
看代码:
dom结构:

    

考虑性能的话还要加上类名,通过tags来解析样式速度慢,因为这里不涉及到具体的业务,就不做处理了。
关于类名命名方式之类的,虽然也很重要,但这里也不说,非要说点什么的话,那就是和公司或者社区的尽量保持一致性。

css:

    ul {
      width: 150px;
      list-style-type: none;
    }
    ul li {
      float: left;
    }
    ul a {
      position: relative;
      float: left;
      margin: 0 -5px -5px 0;
      border: 5px solid blue;
      width: 40px;
      height: 40px;
      text-align: center;
      line-height: 40px;
    }
    ul a:hover {
      border-color: red;
      z-index: 99;
    }
    虽然效果写出来了,但是代码中其实还是有两处不清楚的地方,有人知道的话麻烦告知一下:

  • 1.用 list-style-type: none; 好,还是用 list-style: none; 好,都能达到效果,但是 list-style 里还包括了除type外的其他属性。不知道哪个性能好,或者有其他优势。这就像用 background 时一样,有人直接用background加个颜色,而有人用 background-color, 虽然写的时候没什么问题,但是重构的时候可能因为用了 background 而把其他叠加的 background 其他样式覆盖掉。但是这里的属性值是 none, 就不存在覆盖不覆盖的问题了。个人倾向于使用具体一点的list-style-type.
  • 2.list-style-type 或者 list-style 写在 ul 中还是写在 li 中好,在支付宝的前端 ui 框架爱丽丝中知道 ul 的list-style-type 是可以继承的,写在两个地方都能实现相同的效果。不知道哪种好。爱丽丝中是写在 ul,我个人也倾向于写在 ul 中,我喜欢能写在模块外层上的样式尽量写在外层。

这题目中还有很多可以写的地方,就不展开来讲了。
题目效果
update:
吃个饭回来,想到为毛这里用 ul 是语义化,于是改成用div了,dom结构瞬间简单了很多。
例子见:
题目效果2

maven 编译 NoSuchMethodError 错误解决方法

今天update了下项目,maven compile 时报了个错。
错误如下:

           
                org.apache.maven.plugins
                maven-compiler-plugin
                3.1
                
                    
                        org.codehaus.plexus
                        plexus-compiler-javac
                        2.2
                    
                
                
                    1.6
                    1.6
                    utf-8
                    true
                
            

当上面的

                    
                        org.codehaus.plexus
                        plexus-compiler-javac
                        2.2
                    

中的version版本太低,如1.8的时候会报一个错误:
java.lang.NoSuchMethodError: org.codehaus.plexus.compiler.CompilerError: method (Ljava/lang/String;ZIIIILjava/lang/String;)V not found
改成2.2就好了。
reference:
http://chaoslawful.iteye.com/blog/1829357

关闭 Mac OSX 开机声音

Mac 的开机声音还是有些烦人的,虽然不怎么开机。
用什么系统都喜欢把所有系统提示音设成静音,Mac 当然也不例外。
下面介绍几种关闭系统开机声音的方法:
1、软件:StartupSound.prefPane:http://www5e.biglobe.ne.jp/~arcana/StartupSound/index.en.html
2、执行静音:sudo nvram SystemAudioVolume=%80。执行恢复:sudo nvram -d SystemAudioVolume
3、重启或关机前将系统设为静音
4、开机迅速按静音键F10

使用IDEA的external tools提高开发效率

一直觉得不管使用哪种开发工具,深入研究这个工具都是很值得的,这个投入产出比,性价比等都很高。
俺们公司那群人好像一直都没发现这个问题。依旧使用那几个“常用”的快捷键,手动处理很多很多完全可以托付给机器来完成的东西。
我觉得吧,当你决定使用一款IDE时候,至少把整个程序里的所有菜单按钮过一遍,然后揪出快捷键表打印出来背一背吧。
我们公司大多数人使用 Myeclipse 作为 IDE, 但好像他们很多人连怎么添加插件,怎么设置文件保存后自动格式化代码,自动优化imports,自动添加注释等最基本的功能都不知道,更别说怎么进行性能调优了。(我这不使用Myeclipse的人都知道。。) 这样的话在这公司用这么些早该淘汰的电脑做开发的话还真是有点忧伤呐。
好,打住。
因为我基本都是写前端代码,所以使用了对前端比较友好的Intellij IDEA,也稍的学习了些功能。
这里介绍了高级功能 external tools,就是可以调用外部工具。
其实也没什么可说的,就是和你说有这么个功能,可以调用外部程序,比如调用 nodejs 执行 grunt 命令,可以更具情况设置参数,并在工具栏等地方生成对应的图标,想执行命令的时候点击一下就可以了。比如yuicompresser什么的都能通过这个方式集成进来。十分方便啊。
当然要是什么时候 IDEA 也能像原生支持 ant,maven 等支持 grunt 那就好了。

使用 gzip 压缩 js, css 等静态文件,优化网页加载速度

一般情况下,开发一个项目,部署上线前需要对css,js等文件进行压缩合并。这样可以使文件大小变小很多,用户就能更快地获取到文件,加快网页加载速度。
其实除了使用yuicompresser等合并压缩外,还有一个很凶残的东西,gzip。这是 GUN zip 的缩写,通过这个压缩往往能使文件减少40%以上。当然这不绝对,有些情况使文件变大也是有可能的,这另行讨论。
那怎么使用 gzip 呢?一般有3种方式:
1.通过apache等静态服务器提供的功能,只要通过修改服务器配置文件里的设置就可以开启 gzip 压缩。
2.通过jboss,tomcat,php等容器来开启gzip压缩,方法也是修改配置文件啦。
3.通过一些压缩工具直接对文件进行 gzip 压缩。
前两种方式都是在用户访问网站发起请求时,服务器动态地对请求的文件进行压缩,每次请求都会这样重新压缩,非常消耗cpu处理时间,虽然可以进行缓存。
但按照众所周知的预处理原理,我们最好还是提前将文件压缩好。就像less等能预编的绝对不要放到客户端去处理啊。
所以还是推荐第三种方式。这样用户请求 css js 时就能直接返回 gzip 压缩好的文件,当然写点代码设置请求头为 Content-Encoding:gzip 什么的也是必要的。
大多数情况下只要开启对 html(包括动态生成的页面), css 和 js 的压缩就可以了,因为想 jps, png, pdf 等二进制文件 gzip 基本是不起作用的,反倒压缩需要消耗很多的cpu,得不偿失。
再说说前面提到的gzip压缩可能会使文件变大的问题。其实这个问题也不用怎么考虑,知道下原理就可以了。我们知道 gzip 压缩是根据文件内容的冗余度来处理的,当一个文件内存在很多相似的代码片段或者字符串的话就能得到很好的压缩,而文件内容很少重复的话,压缩可能就没什么效果。
基于这点里有,我们写代码的时候就要注意一些问题,比如引入css文件的写法: 注意几个属性书写的前后位置顺序提交冗余度,这样可以得到更好的压缩率,同样其他多属性的标签也应该保持这种书写的一致性,如input等。有兴趣的可以看看下面google的参考链接,里面做了点介绍,当然要想深入的话RTFM
以上提到的具体的配置方法和 gzip 算法等内容参阅相关文档哈。
写这篇文章主要是因为前些日子给一个网站做性能调优,发现坑爹的根本没有开启 gzip 压缩,有点郁闷,我嚼得好歹 gzip 应该是标配吧。因为也没有什么服务器控制的权限,所以报告了项目经理,让他处理处理,但是没想到啊,办公室里的两个项目经理都说不知道 gzip 这东西,都说之前没听说过。。
纳尼,这不是计算机网络课程里最基本的东西咩。结果一问办公室里的其他人,没有一个人知道。。
好吧不纠结有没有人知道这问题了。
reference:
https://developers.google.com/speed/articles/gzip
http://badqiu.iteye.com/blog/37176
http://laodaobazi.iteye.com/blog/1404694
http://www.hiadmin.org/blog-seo/wordpress-gzip-css-js
http://www.dboy365.com/archives/707

hexo, A fast, simple & powerful blog framework, powered by Node.js.

this post was written a few mouth ago. And for some reason, my idea had changed.
if you are a geeker, and you use github, you must have know github pages, and something like Jekyll or Octopress.
I tried Octopress last year, and find it quite complex to use. As someone in V2EX said, Octopress is for someone called "SBC", i do think so (but Octopress’s default theme is more beautiful).
then i tried several other static website generator, like nico, hexo etc. i found that hexo quite easy to use, the properity of written in nodejs is friendly to frontend developers.
reference:
http://zespia.tw/hexo/

svn的关键词替换

公司里这些东西都没什么人研究,svn很是纯粹的作为了代码的插入抽出工具,一点快感都没有。
最近看某书里提到workflow相关东西,也提到svn的一些高级功能,那就多作一些了解吧。
通过svn可以给提交的文件动态地添加一些信息,比如文件最后的修改时间,文件的版本号,作者等。
1.通过命令行执行命令,具体查看命令: svn help propset
2.直接通过修改svn的配置文件,开启关键字功能enable-auto-props = yes
(OSX下配置文件在~/.subversion)
3.还有就是通过GUI工具设置,平时使用IDEA,自带了svn工具,可以直接在IDE里更新提交代码。当然也可以设置这些关键词了。
喜欢命令行的话可以用第一种方式,8过我还是推荐GUI,比较直观快捷。
第二种方法没试过,猜测是无法将配置同步到svn上的,这就就没法在干净的系统里checkout代码准备构建项目时就能实现关键词替换功能,还要去修改配置文件,虽然可以通过构建脚本完成但是赶脚不好。svn提供了同步这样的配置到服务器的功能别浪费了。
关键词替换的功能除了能节省点自己添加注释,保持注释一致等常规用途外,还可以为css,js等会被浏览器缓存的文件添加版本信息,以便在版本更新的时候浏览器能马上读取最新的文件。具体方法大家自己研究吧,没什么难度。
还有一些注释格式等具体的细节请参考文档,这文章只是抛砖引玉一下。
参考链接:
http://svnbook.red-bean.com/en/1.4/svn.advanced.props.special.keywords.html
http://subversion.apache.org/faq.zh.html