Skip to content

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also .

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also .
...
  • 4 commits
  • 5 files changed
  • 0 commit comments
  • 1 contributor
Commits on Mar 27, 2013
@halida update fae79fa
Commits on Apr 02, 2013
@halida update 7a62414
Commits on Apr 03, 2013
@halida update e857691
Commits on Apr 05, 2013
@halida update 5d59c1d
View
6 source/_posts/2011-05-24-rails-ubuntu-install.markdown
@@ -103,9 +103,9 @@ mysql默认编码是latin, 我们要改成utf8, 修改/etc/mysql/my.cnf,
设置完后需要重启mysql:
-..code-block:: bash
-
-> sudo service mysql restart
+```bash
+sudo service mysql restart
+```
然后我们重置mysql root密码
View
43 source/_posts/2013-03-27-try-gitlab.markdown
@@ -0,0 +1,43 @@
+---
+layout: post
+title: "试用gitlab"
+date: 2013-03-27 12:10
+comments: true
+categories: rails ruby
+---
+
+![image](http://gitlab.org/images/gitlab_hq.png)
+
+今天我试着安装了一下[gitlab](http://gitlab.org/),它是一个开源的类似github的系统,
+利用它可以本地搭建一个github网站出来。可以解决一些需要客制化代码库,或者私有化管理的需求。
+
+安装过程
+---------------
+按照[文档](https://github.com/gitlabhq/gitlabhq/blob/5-0-stable/doc/install/installation.md)进行,我中间走了一些弯路:
+
+- 安装ruby的时候,我是采用rvm,而不是教程里面的采用系统ruby,后来发现不对,必须安装成系统的版本,不然服务起不起来。
+- postgres用户gitlab不能登陆,后来搜索了一下,发现[需要修改权限](http://blog.deliciousrobots.com/2011/12/13/get-postgres-working-on-ubuntu-or-linux-mint/)
+
+其他过程比较顺利,基本按照教程来就可以了。
+
+架构
+---------------
+
+其实整体系统还是比较简单的,安装了一个系统服务,后面主要是把gitlab当做一个rails应用来跑,后台启动了一个sidekiq。
+
+针对git的部分,分离出来了git-shell,其实就是在系统里面安装了一个shell,用户用git连过来的时候,就用这个shell来进行版本库的操作,它是调用rails网站服务器的API来做权限管控之类的事情。
+
+试用感觉
+---------------
+
+因为我只是试用一下,没有用于生产,只是稍微浏览了一下功能。
+github有的功能它都有,还加上了用户管理,群组管理,查看系统日志等功能。
+功能上面感觉还是够用的。
+
+关于这个项目的架构思路,我觉得还是挺好的。
+网站的部分归网站,git的部分归git,中间通过API来通讯。
+git-shell的方式减少另外跑一个服务的成本,对于小用户群的环境来说可以,
+但是不是很适应用户数量过多的状况,但是场景不多,问题不大。
+不过需要安装系统的ruby环境倒是挺麻烦的,希望他们以后针对这个问题提出改进方案。
+
+
View
74 source/_posts/2013-04-02-squeel.markdown
@@ -0,0 +1,74 @@
+---
+layout: post
+title: "squeel介绍"
+date: 2013-04-02 11:44
+comments: true
+categories:
+---
+
+![image](http://i.imgur.com/yxqRwG5.jpg)
+
+[squeel](https://github.com/ernie/squeel)是Rails下面一个处理复杂sql查询的框架,
+具体用法可以点击前面的链接查看,这里整理一下我对这个东西的评估。
+
+为什么要用它?
+---------------------
+
+平时我们在rails里面,需要写复杂查询的时候,一般都是直接写sql,比如:
+
+```ruby
+Person.where(
+ '(name LIKE ? AND salary < ?) OR (name LIKE ? AND salary > ?)',
+ 'Ernie%', 50000, 'Joe%', 100000
+)
+```
+
+这样的写法不是很好,因为:
+
+- 里面的sql是只针对一个数据库的,不能做到数据库的切换。
+- 里面的sql在ruby里面是字符串,一个是可读性差,一个是不能进行语法上面的检查,只能通过单元测试来保证。
+- 写这样语句的时候,需要切换成sql的思路,写完之后再切换回来。
+- 遇到复杂sql的时候,不容易拆分问题,只能通过大段长度的sql来处理。
+
+采用squeel,就可以变成这些的写法:
+
+```ruby
+Person.where{(name =~ 'Ernie%') & (salary < 50000) | (name =~ 'Joe%') & (salary > 100000)}
+```
+
+原理
+---------------------
+
+squeel使用的方法是传一个block给where,然后这个block会被修改作用域,在这个作用域里面,
+各种操作符和变量都会被转义,变成Node对象,然后形成一个抽象语法树,最后通过底层的[arel](https://github.com/rails/arel)变成真正执行的sql。
+
+具体代码比较重要的是`dsl.rb`里面的`eval``method_missing``stub.rb``visitor.rb`
+
+我思考了一下,这种方法应该是最简洁和干净的,语法是采用ruby的方式,魔法的部分都被包裹在block里面,和现有的功能无缝衔接。
+
+使用心得
+---------------------
+
+如果明白原理,使用它没有什么太多的问题,需要注意的是,
+一定要看一遍log里面生成的sql,确认是自己期望的结构。
+
+还有就是,squeel和原有系统切割得比较好,只有一点需要注意:
+针对`User.where(name: :aaa)`里面把symbol当做value的状况,squeel会转变成:
+
+```sql
+select * from users where users.name == users.aaa
+```
+
+这是一个特性,如果你不期望这样的话,需要改成`where(name: :aaa.to_s)`。也可以关闭,具体看squeel的文档。
+
+在我用的过程中,遇到几个问题:
+
+- 我直接用`or``and`,结果发现按照文档应该是用`|``&`,使用任何东西之前还是需要认真看一遍文档。
+- 复杂查询条件下面,如果用到了`|``&`,为了保证是按照自己期望的优先级分割,需要用括号来明确界定,比如`where{(name == 'aaa' | name == 'bbb') & (level == 1)}`
+- 上面提到的symbol当做value的bug。
+- 因为使用了作用域切换,对象属性等就不能访问了,比如`where{name == @user.name}`,需要改成`where{name == my{@user.name}}`
+
+结论
+---------------------
+
+考虑一下是否需要采用squeel:它的学习成本应该只需要一个小时,性能问题可以通过cache来解决,可以无缝衔接,收益是更清晰,更一致,更好用的代码。
View
49 source/_posts/2013-04-05-mosh.markdown
@@ -0,0 +1,49 @@
+---
+layout: post
+title: "mosh介绍"
+date: 2013-04-05 15:06
+comments: true
+categories:
+---
+
+![image](http://mosh.mit.edu/mosh.png)
+
+这年头做技术没有人不用ssh的吧,然后ssh使用起来还是很不爽的,
+远程服务器慢的时候反应慢,ssh有的时候断掉要重新连。。。
+
+[mosh](http://mosh.mit.edu/)是ssh的替代方案,用来解决慢速网络和移动网络的问题,具体上来说:
+
+- 连上一台服务器后,不管你切换什么网络,或者网络断掉,或者机器休眠又醒过来,连接都能够一直保持。
+- 缓存输入输出,当连接慢的时候,屏幕上面显示的响应还是很快。
+
+我**强烈**建议大家都去用它。
+
+原理
+---------------------
+
+mosh它实现了一套自有的状态同步协议SSP:
+
+- 底层采用UDP,client和网络解耦合,
+- 内部client和server都维护到屏幕和输入的状态,根据状态发送diff/patch。
+- 再在上层加上一个预测模块,根据用户输入先在本地显示预期的输出结果,收到远程服务器返回的屏幕数据,再更新。
+
+作者同时也提出,现在的应用往往没有针对移动作优化,如果一个用户切换了网络(比如正在移动中),
+那么tcp连接断掉会出现各种问题,在这种场景下,SSP这种解决方案会很有用处。
+
+建议大家可以看看mosh首页的视频,作者介绍得很充分。
+
+使用
+------------------------
+
+大家去看[首页的介绍](http://mosh.mit.edu/)就好。这里整理一些我觉得需要提到的:
+
+指定ssh参数,比如你的ssh端口不是22:
+
+```bash
+mosh $server --ssh='ssh -p 2222'
+```
+
+当你在网络断开的时候,关掉了mosh的进程,远程服务器上面对应的server进程会一直存在,
+这个时候重新连上去的时候,就会提示你。这个时候你需要手动kill掉这个进程,
+具体见[issue报告](https://github.com/keithw/mosh/issues/403)。
+
View
2 source/about/index.markdown
@@ -7,7 +7,7 @@ sharing: true
footer: true
---
-![image](https://lh6.googleusercontent.com/-phObbT9xpTg/TxZ1j2F0EBI/AAAAAAAAEcc/emsStX8ShTI/s800/s.jpg)
+![image](http://i.imgur.com/Q4sKXg3.jpg)
我是一个程序员, 我希望能够持续提升自己的技能和智慧,
能够以我的方式改变这个世界.

No commit comments for this range

Something went wrong with that request. Please try again.