#20 楼 @yedingding 只能去 RubyConf 再膜拜两位讲师了...
#66 楼 @yedingding 杭州扯出来会有人认真讲,但是上海讲的时候是大家分别几拨人在聊...
这样对讲者不好,讲完对自己的想法也没有更深的思考。
#60 楼 @jjym 对,因为没有分享都是瞎扯淡,导致这个女生很寂寞... 都没人说话也没听到什么东西。我觉的她很迷茫。
#62 楼 @xiaoronglv 回去的时候 @jjym 还给我说类似的问题..
今天认识很多人,感觉很好。
顺利加入 上海 Ruby Tuesday...
签到!
今天出差到上海,只好由 @kai1248 来接待大家了...
有时间的话会参加一下上海的 Ruby Tuesday...
› git log
commit c5276cf2d5cca3f54db3bb509b0560089e4a4087
Author: Saito <[email protected]>
Date: Sat Oct 12 02:26:00 2013 +0800
add fix
› git log
commit 3b22977874908f576670ae085fe7bd7c144398d9
Author: otias <[email protected]>
Date: Sat Oct 12 02:27:59 2013 +0800
fix config.yml
commit c5276cf2d5cca3f54db3bb509b0560089e4a4087
Author: Saito <[email protected]>
Date: Sat Oct 12 02:26:00 2013 +0800
add fix
[1] pry(main)> system"git add -A"
=> true
[2] pry(main)> system"git commit -m\"hello world\""
[master 97deca9] hello world
1 file changed, 1 deletion(-)
=> true
› git log
commit 97deca90ce17ae9340bf8c9733897ce863e30b75
Author: otias <[email protected]>
Date: Sat Oct 12 02:29:08 2013 +0800
hello world
commit 3b22977874908f576670ae085fe7bd7c144398d9
Author: otias <[email protected]>
Date: Sat Oct 12 02:27:59 2013 +0800
fix config.yml
commit c5276cf2d5cca3f54db3bb509b0560089e4a4087
Author: Saito <[email protected]>
Date: Sat Oct 12 02:26:00 2013 +0800
add fix
这个还好,重要的是腿要能伸展...
TCMalloc 可以提升 6 倍 malloc/free 一组命令的执行!..
Link 一下就能用了...
其实搞了半天不知道该怎么玩...
因为 Javascript 没有模块机制...
其实 Node 也可以这么写:
GLOBAL.user = {
name: "Hello",
sex: "world"
}
require("./user");
console.log(user.name);
› node -i app.js
Hello
这样的话你会得到一个完整的结果。当然在这里,require 的默认返回是 module.exports 也就是 {}
, 这是规范。
如果你想让 node 来模拟 Ruby 的 require 方式当然也是可以的:
GLOBAL.user = {
name: "Hello",
sex: "world"
}
module.exports = true;
这样的话,每次 require('./user') 都能拿到返回值 true
.
那么为毛 CMD 规范要这么蛋疼的给你一个返回值域呢?因为 Javascript 没有模块机制。
变量名很容易冲突。这点跟 C 一样,所以前辈们用了很多种方式来规避这一点。详情请看各种 Module Pattern. 写 C 也是一样的,畏畏缩缩的写个库,最后怕跟别人冲突都得加个前缀...
当然,给 module 一个返回值就是规避如今这种冲突的一个有效方式。首先所有的 module 都被 function 所包裹,变量名不会随意的外泄,当我需要某个 module 的时候我就 require 他。难道不好?
如果每个 require 最终没有返回值,其实是开了历史的倒车。因为变量必须注册在 GLOBAL 域上,要不然没法在 require 之后便拥有这个变量。而最原始的 Javascript 写法就是这样写的。
非高手...
我们现在的前端项目在用自己写的 Linner. 为什么要自己造轮子,是因为我无法调优 Sprockets 的 实时编译速度,以至于后来我发现根本不可能更快。因为 Sprockets 不是给你这么用的。
没有用 yeoman (grunt 是因为:想要做一个像样点的项目,grunt 的配置文件一定在上百行。这是我无法忍受的。而且附带一个巨大的问题,每一个 plugin 都有可能成为性能瓶颈。导致编译速度下降。我暂时没有时间跟能力去每一个调优...
我们暂时没有使用 bower, 因为 bower 真的写的很烂,而且有很多未解决的问题。semver, dependency, 有时 download 就会 hang 住。问题在于这帮人似乎不知道症结在哪里。bower.json 的 main
key 现在也没几个人填就是最大的问题。导致所有使用 bower 的人都必须 pull 到 repo 内的所有文件,导致极大的浪费。所以我们现在的做法是直接在网上下载源文件,并且在 Linner 的 order
key 里面排序。
这是最佳实践...( 我的。
#8 楼 @jiyinyiyong 从 Spring/Guice 来的,DI.
#3 楼 @luikore http://roscidus.com/blog/blog/2013/06/09/choosing-a-python-replacement-for-0install/#summary
其实最后的结果是 Rust 以两分优势领先,Go 的得分最低...
最后没有选 Rust, 是因为 Rust 还没 1.0...太不稳定。
直接在 releases 里面下载就可以了。
Go 的代码缺乏美感。
https://github.com/astaxie/beego/blob/master/controller.go#L3-L22
https://github.com/astaxie/beego/blob/master/controller.go#L343-L359
Taste 很重要啊。
看看 Rust
fn main() {
let nums = [0, 1, 2, 3];
let noms = ["Tim", "Eston", "Aaron", "Ben"];
let mut evens = nums.iter().filter(|x| **x % 2 == 0);
for &num in evens {
do spawn {
let msg = fmt!("%s says hello from a lightweight thread!",
noms[num]);
println(msg);
}
}
}
Rust 在最近几个版本里面 API 改动很大,以前写个 println 搞得跟 Java 一样 io::println
.
@yedingding 好!
97 年开始看国米,因为罗纳尔多。
require "rails"
if ::Rails.env.development?
source 'http://ruby.taobao.org'
else
source 'http://rubygems.org'
end
但是还是用 ENV
比较好
if !a || a.user.name.nil?
这行值得吐槽的地方太多了...
挂了要半个小时了...