E3 2019 胡逼简评

微软

  • Ori续作棒棒哒,画风一如既往的灵性
  • 《我的世界: ~~暗黑~~地下城》好像有点意思,不过MC好像做啥都有意思
  • 新的星战脸部模型真鸡儿糙,但是可以完光剑就是帅气
  • 《Cyberpunk 2077》嗯呐,等的就是你,明年4月就阔以玩了,千万不要跳票吖。
  • 模拟飞行又复活了,很期待在顶配PC下的画面表现
  • 帝国2 4K版,这个情怀可以补票 但我想等Steam打折季在说 毕竟一代4K版战役也只玩了个开头而已
  • 新龙珠是个RPG?期待更多实际画面 好奇RPG里怎么体现拼波的快感呢
  • XGP PC,这个对于我这种喜欢瞎玩乱尝试的人感觉比单个买游戏划算不少,可阵容目前看还是挺单薄的,等过几个月没有想玩新游戏的时候,充一个月试试吧
  • 精英手柄二代,还是不便宜而且终于需要常备五号电池了。我的一代要是不坏还真下不了狠心换
  • 废渣地平线4联动LEGO,如果不包括在我的终极版里需要额外买的话就没啥尝试动力了
  • 宫崎老贼和马丁老爷爷合伙搞了一个游戏 我猜这个游戏的特点应该是主角和NPC比死吧
  • Project Xcloud对于大陆玩家,略过吧
  • 新主机和新光环:感觉我的钱包君在哭泣 可能会首发
  • 新战争机器其他部分都没啥兴趣,略过不表

B社

  • 你就是个弟中弟
  • 去年还播了个滚6的片头 今年这是彻底专心手游界了
  • 全不感兴趣,全略

育碧

  • 光荣的接替了索尼大法的逼格 交响乐开场,够劲
  • Watchdogs新作:黑伦敦是因为你们是一家法国公司嘛,地点放在Peking也许更有代入感噢
  • 新彩虹6号:预告片很不错看着眼馋,然后多人游戏对于中年人来说并找不到合适稳定的玩伴,还是算了吧
  • 全境封锁2新内容: 基本同上。但Netflix合作的美剧可以刷一下
  • Uplay+不便宜,相比你们爱打折的游戏,这个订阅服务暂时不看好
  • 还是没有正统细胞分裂续作

SE

  • FF7R它真的要lei了!!!
  • FF7R它真的要lei了!!!
  • FF7R它真的要lei了!!!
  • FF7R:必入。
  • FF8HD: 必入。
  • 妇联A-Day: 不用电影里的脸膜是不是因为省钱,可美队这个脸跟Chris Evans也差的太鸡儿多了吧,违和感严重

世界的主宰

  • DQ11S: 我的PS4还没通呢。
  • 路易基的鬼屋3: 必入,绝对好玩。
  • 巫师3都上NS了吖,不过最新消息是掌机540p的分辨率,略微尴尬
  • 生化全家桶,魂斗罗全家桶 你们是组团来的?
  • 新魂斗罗的演示很像PS2的水平,简单的2D横版社保不好嘛
  • NS的妇联: 感觉会比SE的更水,手游级别。
  • 节奏海拉尔: 这个应该好玩。30美刀内就入一个。
  • 动物之森: 想起星露谷钓鱼的日子,我对这类游戏都怕了,太杀时间,但应该忍不住还是会入
  • 塞尔达野炊续作,纯饼一张。我先是把原作好好玩一遍吧

其他

  • 盟军敢死队2要出高清重制了,本届E3我个人最大惊喜,搞起来搞起来来!!!
  • 索尼大法缺席了是在憋神马大招么?!!咱也不知道,咱也不敢问。

2018 TGA 不靠谱猜想

  • Game of the year: Red Dead: Redemption II
  • Best game direction: God of War
  • Best Narrative: Detroit: Become Human
  • Best art direction: God of War
  • Best score & music: Red Dead: Redemption II
  • Best audio design: Forza Horizon 4
  • Best performance: Bryan Dechart as Connor
  • Games for impact award: 11-11 Memories Retold
  • Best ongoing game: Fortnite
  • Best independent game: Celeste
  • Best mobile game: Dnut County
  • Best VR/AR game: Firewall: Zero Hour
  • Best action game: Mega Man 11
  • Best action/adventure game: God of War
  • Best role playing game: Dragon Quest XI
  • Best fighting game: Street Fighter V Arcade
  • Best family game: Super Mario Party
  • Best sports/racing game: Forza Horizon 4
  • Best strategy game: Valkyria Chronicles 4
  • Best multiplayer game: Fortnite
  • Best E-Sports game: Overwatch
  • Best E-Sports event: Overwatch League
  • Best E-Sports host/commentator: 为神马没有黄旭东
  • Best E-Sports moment: KT vs IG

电竞方面,我这种SC2的dead game爱好者实在是不熟悉那些候选,有两项没法预测。


Ruby Debugging Magic Cheat Sheet

Ruby自带的一些debug功能其实还是很好用的,这里稍做记录。

找到方法是在哪一行记录的

object = Object.new
puts object.method(:blank?).source_location
=> ["/gems/activesupport-5.0.0.beta1/lib/active_support/core_ext/object/blank.rb", 14]

打开项目依赖的gem

$ bundle open active_support

这行命令可以打开Gemfile.lock制定的gem版本的active_support的源代码。使用当前环境变量里EDITOR指定的文本编辑器。

还原gem

$ gem pristine activesupport

假如你对activesupport这个gem添加了一些debug code之类的,可以轻松通过这条命令将gem重置为本来的状态。

$ gem pristine --all

这行命令会重置所有的gem,特别是当一些gem有c扩展的时候,会花费更多时间。

找到方法是如何被调用的

class Project

  def foo
    puts "====================="
    puts caller
  end
end

可以用caller,在不抛出异常的情况下打印出当前的backtrace信息。

找到super方法定义的位置

def foo
  puts method(:foo).super_method.source_location
  super
end

列出一个对象的所有方法

object.methods
# => [:instance_of?, :public_send, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :private_methods, :kind_of?, :instance_variables, :tap, :is_a?, :extend, :define_singleton_method, :to_enum, :enum_for, :<=>, :===, :=~, :!~, :eql?, :respond_to?, :freeze, :inspect, :display, :send, :object_id, :to_s, :method, :public_method, :singleton_method, :nil?, :hash, :class, :singleton_class, :clone, :dup, :itself, :taint, :tainted?, :untaint, :untrust, :trust, :untrusted?, :methods, :protected_methods, :frozen?, :public_methods, :singleton_methods, :!, :==, :!=, :__send__, :equal?, :instance_eval, :instance_exec, :__id__]

通过类直接找到对象方法定义的位置

User.instance_method(:github_url).source_location
得到方法所需的参数
def parse(input, skip_code_comments: false, ignore_whitespace: true)
  # do stuff
end
method(:parse).parameters
#=> [[:req, :input], [:key, :skip_code_comments], [:key, :ignore_whitespace]]

寻找变量是何时被改变的

可以debug的时候灵活使用object.freeze 这样当object被改变时,就可以抛出异常得知object是在哪里被改变了。注意!这个trick只对变量被改变有效果,如果变量是完全被replaced,那么就没有用了。

找到一个常量或对象是在哪里创建

require 'objspace'
ObjectSpace.trace_object_allocations_start

Kernel.send(:define_method, :sup) do |obj|
  puts "#{ ObjectSpace.allocation_sourcefile(obj) }:#{ ObjectSpace.allocation_sourceline(obj) }"
end

world = "hello"

sup world
# => /tmp/scratch.rb:10

本文编译自:http://www.schneems.com/2016/01/25/ruby-debugging-magic-cheat-sheet.html


9条Rails数据库最佳实践

参考链接:http://blog.carbonfive.com/2016/11/16/rails-database-best-practices/

1. 让数据库做他们自己擅长做的事情
2. 编写高效并且chainable的Scopes
  • 返回ActiveRecord:Relation对象(比如不要触发Query)
  • 在数据库中Filter数据
  • 在数据库中排序
  • 不要在Scope中添加排序功能(可以将排序单独写成一个Scope)
3. 减少数据库访问次数
  • 如果一个经常访问的页面导致了太多的数据库访问,那么值得花费一些时间来让数据库访问次数变得更少。
4. 使用索引
  • 考虑将所有where条件中会使用的字段和id字段一样都建立索引。
5. 面对复杂查询时,定义和使用单独的查询对象(Query Objects)
6. 避免在Scope和Query Object之外使用临时(Ad-hoc)的query
7. 使用正确的类型
  • 每一种数据库都有比ActiveRecord更精细的类型,了解并正确的使用它们。
8. 考虑使用数据库本身的全文查询(Full-Text Search)
  • 添加更强大的Elastic Search或者Solr框架都会向程序倒入更多的依赖,所以尽量使用数据库本身的全文查询功能,在数据库本身可以做到的情况下。
9. 尽量不要使用存储过程(Stored procedures)
  • 当业务快速增长变化中,存储过程是非常难以更改并且保持正常工作的,而且特别难以测试.

[读书笔记]《让大脑自由》

1. 越运动,大脑越聪明
  • 我们的大脑在步行运动中进化--每天步行12英里!
  • 想要改善思维技能吗?动起来吧!
  • 运动使更多的血液流向大脑,为大脑带来丰富的葡萄糖作为能量,同时还能带走氧气吸附遗留下来的有害电子。运动也能刺激蛋白生成,促使神经元彼此连接。
  • 只要每周两次有氧运动就可以将罹患一般老年痴呆症的风险降低一半,而且将患阿尔茨海默症的风险减少60%。
2. 大脑一直在进化
  • 我们的头颅里不仅只有一个大脑:我们有三个。首先介绍“蜥蜴脑”,它控制着我们的呼吸,然后我们还有一个和猫的大脑一样的大脑,在这两部分大脑上面覆盖着一层类似吉露果子冻薄薄的物质,我们称之为皮层,它是人类大脑的第三个组成部分,也是强大且“人类特有”的大脑。
  • 天气的变化瓦解了我们祖先的食物供应,他们被迫从树上下来,到大草原上生活。之后人类通过适应变化本身接管了地球。
  • 从四条腿走路到两条腿直立行走在大草原上,这节省了能量,让人类的大脑得以发展得更加复杂、精密。
  • 象征推理是人类特有的一项才能。这种能力可能处于我们需要了解彼此的意图、动机、它使人类在一个小团体内的协作成为可能。
3. 每个大脑都不同
  • 日常生活中你做了些什么,学习了什么会实质性地改变你大脑的样子--实际上你的所学所做对大脑进行了重新塑造。
  • 大脑的各个区域在不同人之间以不同的速度发育。
  • 没有两个大脑以同样的方式,在同一地点储存相同的信息。
  • 我们的智能表现在各个方面,其中许多是不能通过智商测试来揭示的。
4. 大脑不关注无聊之事
  • 我们无法对无聊的事情集中精神。
  • 大脑的注意力“聚光灯”一次只能集中在一件事情上:不能多任务处理。
  • 与我们记住细节相比,我们更善于参照模式以及提炼事件的含义。
  • 情绪唤起有助于大脑学习。
  • 听众会在讲座开始的10分钟后走神儿,不过你可以通过讲故事或者制造一个富含情绪的事件来抓住他们的注意力。
5. 短期记忆取决于最初几秒间
  • 大脑有许多类型的记忆系统。其中的一类由如下4个连续的处理阶段:编码,存储,检索和遗忘。
  • 信息一进入到你的大脑就立刻被分裂成碎片,然后被送到大脑皮层的不同区域储存。
  • 那些能够预测学到的东西是否在日后能够被记起的大多数事件,都发生在学习的最初时刻。我们在记忆的最初时刻对其编码得越精细,记忆就越牢固。
  • 如果你能够复制你在记忆某个事情时的周围环境,你可以提高记起这个事情的几率。
6. 长期记忆取决于有规律的重复
  • 大部分的记忆在几分钟之内就消失了,不过那些度过了脆弱期的记忆随着时间的推移在逐渐增强。
  • 长期记忆在海马和大脑皮层之间的双向交流中形成,直到海马切断了与皮层的联系,记忆才被固定在皮层中,这个过程要经历数年时间。
  • 对于现实,大脑只给了我们一个近似的见解,因为它把新知识同过去的记忆混在了一起,并把新知识、旧记忆当成一个事物存储在一起。
  • 使长期记忆变得更加可靠的方式是,将新的信息逐步输入大脑并在固定的时间间隔温习这些信息。
7. 睡得好,大脑才会转得好
  • 大脑中有两股同样由细胞和化学物质所构成的战斗力量,它们处于持续紧张的战斗状态之中,一股力量试图让你睡觉,而另一股力量试图让你清醒。
  • 当你睡着了的时候,大脑的神经元表现出旺盛的节奏性活动,也许此时它正在重放你白天学习的内容。
  • 需要多长时间的睡眠,以及什么时候睡觉,在这个方面人人都不同,但在下午睡一会儿的生物性驱力人人都具有。
  • 睡眠缺失会损伤人的注意力、执行功能、工作记忆、情绪、数学能力、逻辑推理甚至运动灵巧性。
8. 压力会损伤你的大脑
  • 你身体的防御系统通过释放肾上腺素和皮质醇,对严重的、短暂的危险做出即刻的反应,比如,我们的祖先在觅食的过程中遭遇剑齿虎。慢性应激,比如家庭中的矛盾,严重损害了我们身体的防御系统,因为我们身体的防御系统进化之初只是为了处理短时的压力反应。
  • 在慢性应激下,肾上腺素在你的血管壁上造成伤痕,这会导致心脏病发作或引起中风,而皮质醇会伤害海马的细胞,从而消弱你的学习和记忆能力。
  • 对个体而言,最坏的压力是你感觉对问题失去了控制,感到束手无策,无依无靠。
  • 情绪压力对整个社会都有巨大的影响,影响儿童的学习能力,影响员工的工作效率。
9. 大脑喜欢多重感觉的世界
  • 我们通过感官获得某一事件的信息,将其翻译成电子信号(一些信号来自视觉,一些信号来自听觉,等等),然后将这些信号发送到大脑的不同区域,接着对发生的一切进行重建,最后大脑对整体事件有了认知。
  • 大脑似乎部分地依赖过去的经历,以决定如何将这些信号整合,所以两个人可能对同一事件产生完全不同的认知。
  • 我们的感官就是被进化成要在一起协同工作的模式,例如,视觉影响听觉,这意味着同时激发各个感官可能让我们学得更好。
  • 气味具有唤回记忆的不寻常的力量,也许是因为嗅觉信号绕过丘脑直奔自己目的地的缘故,在这些目的地中,就包括那个被称为杏仁核的情绪主管者。
10. 视觉是最有力的感官
  • 视觉是目前我们最重要的感觉器官,占去大脑一半的资源。
  • 我们所看到的,仅是大脑告诉我们应该看到的,并不是百分百准确。
  • 我们的视觉分析分为许多步骤。视网膜将光子组装成像小电影一样的信息流。视觉皮层处理这些信息流,某些区域记录动作,某些区域记录颜色,等等。最后,我们把这些信息重新整合到一起,于是我们可以看到外部的世界了。
  • 图片可以让我们获得最好的学习和记忆,书面或口头信息做不到这一点。
11. 大脑也有性别差异
  • 男性拥有一条X染色体,女性拥有两条--一条是作为备份用的,X染色体是认知的“热点”,它携带了与大脑构造有关的众多的基因。
  • 女性的基因更为复杂,因为其细胞内活跃的X染色体是妈妈和爸爸的混合。而男性的X染色体都来自妈妈,并且他们的Y染色体携带的基因少于100个,而X染色体携带有1500个基因。
  • 男女大脑在结构上和生化上都是不同的,例如,男性的杏仁核大,合成五羟色胺的速度快,但我们不知道,这些差别是否具有重要意义。
  • 对急性应激男性和女性的反应不同:女性激活左半球的杏仁核,并记住情绪的细节;男性激活右半球的杏仁核,并记住要旨。
12. 我们是天生的探险家
  • 婴儿是指导我们如何学习的榜样,他们不是被动地对环境做出反应,相反他们通过积极的观察、假设、实验和总结对周围世界进行探索。
  • 大脑的特定部分帮助人类在探索世界过程中形成了某种科学的态度。大脑的右前额叶皮层检查我们假设中出现的错误(例如“剑齿虎不是对我们没有威胁的动物”),与它毗邻的区域告诉我们应该改变行为(快跑!)。
  • 因为“镜像神经元”的存在,我们可以识别和模仿某些行为,镜像神经元分布在大脑的各个地方。
  • 成人大脑的一些区域像婴儿一样具有可塑性,所以我们可以产生新的神经元,让我们在一生中,都能够学习新事物。

[读书笔记]《少有人走的路》之自律

《少有人走的路》可能是我这么多年来看过的最对口味的一碗鸡汤了,特别是第一大部分关于自律的文章,特别有体会。把一些我认为的重点摘录一遍,仅供自勉吧。

  • 人生苦难重重
  • 解决人生问题的首要方案,乃是自律,缺少了这一环,你不可能解决任何麻烦和困难。
  • 人生是一个面对问题并解决问题的过程。
  • 我们的心灵渴望成长,渴望迎接成功而不是遭受失败,所以它会释放出最大的潜力,尽可能将所有问题解决。
  • 推迟满足感,意味着不贪图暂时的安逸,重新设置人生快乐与痛苦的次序:首先,面对问题并感受痛苦;然后,解决问题并享受更大的快乐,这是惟一可行的生活方式。
  • "我是个有价值的人",有了这样宝贵的认知,便构成了健全心理的基本前提,也就是自律的根基。
  • 自律的核心,就是学习自我照顾,承认自我价值的重要性,并采取一切措施照顾自己,这是走向自立的关键。
  • 除非存在智力障碍,不然只要花时间学习,就没什么问题解决不了。
  • 直面问题会使人感到痛苦。问题通常不可能自行消失,若不解决,就会永远存在,阻碍心智的成熟。
  • 我们必须面对属于自己的问题,这是解决问题的基本前提。
  • 人生一世,正确评估自己的角色,判定该为何人、何事负责,既是我们的责任,也是无法逃避的问题。
  • 推卸责任时,可能感到舒服和痛快,但心智却无法成熟,常常成为集体,社会的负担。
  • 你不能解决问题,你就会成为问题。
  • 我的时间是我的责任,如何安排时间,应又我自行负责,而且只有我本人才有权处理优先次序。
  • 为远离责任带来的痛苦,数不清的人甘愿放弃权力,实则是在逃避自由。
  • 我们越是了解事实,处理问题就越是得心应手;对现实了解得越少,思维就越是混乱。虚假,错觉和幻觉,只能让我们不知所措。
  • 我们对现实的观念就像是一张地图,凭借这张地图,我们同人生的地形、地貌不断协调和谈判。地图准确无误,我们就能确定自己的位置,知道要到什么地方,怎样到达那里;地图漏洞百出,我们就会迷失方向。
  • 只有极少数幸运者能继续努力,他们不停地探索、扩大和更新自己对于世界的认识,直到生命终结。
  • 逃避现实的痛苦和不幸,是人类的天性,只有通过自律,才能逐渐克服现实的痛苦。我们必须尊重事实,尽管这会带来痛苦,但远比我们的个人利益和暂时的舒适更为重要。我们必须淡化暂时的不适之感,应该追求真理而不是幻象,并愿意承受所有的痛苦。要让心灵获得成长,让心智走向成熟,就要竭尽全力,永远尊重事实,乃至献身真理。
  • 智慧,意味着将思考与行动紧密结合。
  • 反省内心世界的痛苦,往往大于观察外在世界的痛苦,所以,很多人逃避前者而选择后者。实际上,愿意献身真理对于我们的非凡价值,将使痛苦显得微不足道。自我反省的快乐,甚至远远大于痛苦。
  • 人之为人,或许就在于我们可以超越本性,乃至改变本性,尝试去做不和本性的事情吧?
  • 接受挑战,才可以带来真正的安慰;心灵接受长期的,甚至经常碰壁的自律,才可能使治疗成功。
  • 尊重事实,献身真理的人,必然心胸坦荡,以诚待人。我嗯必须不断自我反省,在言语和行动上,确保我们与别人自如沟通,诚实地反映认知的事实。
  • 畏惧挑战带来的正常的痛苦,因而不断逃避和撒谎,无异是有意回避有益的痛苦,这就可能产生相应地心理疾病。
  • 一般来说,不说出全部真相,基本上就等于说谎。
  • 敢于面对事实的人,能够心胸坦荡地生活在天地间,也可借此摆脱良心的折磨和恐惧的威胁。
  • 你既要承担责任,也要拒绝不该承担的责任。
  • 在这个复杂多变的世界里,想使人生顺遂,我们不但要有生气的能力,还要具备即便生气,也可抑止其爆发的能力。
  • 我们必须建立一套灵活的情绪系统,提高我们的“情商”。
  • 要使心智成熟,就须在彼此冲突的需要、目标、责任之间,取得微妙的平衡,这就要求我们利用机遇,不断自我调整。
  • 保持平衡的最高原则就是“放弃”。
  • 放弃人生的某些东西,一定会给心灵带来痛苦。失去平衡,远比放弃更痛苦。
  • 时间改变了,我也必须对以前的自我做出调整。我原本以为会对过去的自我念念不忘,实则全然不是那样。
  • 放弃某种心爱的食物--至少是自身熟悉的食物,肯定让人痛苦,但适当放弃过去的自我,才能使心智成熟。
  • "兼容并包"。这是促进心智成熟不可或缺的工具。兼容并包,意味着既要肯定自我,以保持稳定,又要放弃自我,以腾出空间,接纳新的想法和观念,实现自我平衡。
  • 消除熟悉的过去,追求新鲜的未来。为了体验新鲜事物的独特性,我必须以包容一切的姿态,说服既有的成见和观念暂时让位,让陌生、新奇的事物进入感官世界。我必须完全释放自我,甚至不惜把过去的自我完全打破。
  • 人越是活得长久,历经的生与死也就越多,与此同时,也就会经历更多的欢乐和更大的痛苦。
  • 完全接受痛苦,在某种意义上,痛苦就不再存在。
  • 爱,能使我们感受到更多的快乐,更少的痛苦。
  • 最好的决策者,愿意承受其决定所带来的痛苦,却毫不影响其做出决策的能力。
  • 一个人是否杰出和伟大,视其承受痛苦的能力而定,杰出和伟大本身,也会给人带来快乐和幸福。
  • 不经痛苦和折磨,就无法实现灵魂的超越。
  • 为了放弃,首先必须拥有某种事物。你不可能放弃从来没有过的事物。同样,首先确立自我,才能够放弃自我。
  • 自我,包含具有积极意义的四种人生原则,目标都是解决问题,而不是回避痛苦。这四种原则包括:推迟满足感,承担责任,尊重事实,保持平衡。
  • 只要持之以恒地实践,任何人都能够使精神、心理和灵魂达到更高的层次。

14条Rails最佳实践

参考链接:https://www.sitepoint.com/10-ruby-on-rails-best-practices-3/

1. 两个空格的缩紧
2. 定义断言方法时以问号(?)结尾
3. Iteration: 用each替代for
4. 用unless替代!if
5. Short Circuit: 当判断条件确定时,尽早退出

示例:

if user.gender == "male" && user.age > 17
  do_something
elsif user.gender == "male" && user.age < 17 && user.age > 5
  do_something_else
elsif user.age < 5
  raise StandardError
end

Short Circuit代码:

raise StandardError if user.age < 5
if user.gender == "male" && user.age > 17
  do_something
elsif user.gender == "male" && user.age < 17 #we saved a redundant check here
  do_something_else
end
6. 写测试
  • 测试相当于你的程序和特性的详细规范
  • 测试相当于给其他开发者的文档,使他人更好的理解你实现的意图
  • 测试可以更早的发现和消灭bugs
  • 测试可以在重构以及性能调优的时候给你更多信心,保证不会影响现有功能。
7. DRY(不要重复自己)
  • 使用抽象类
  • 使用Modules
8. 聪明的使用Enums

参考代码:

class Book
  enum status: { draft: 0, completed: 1, published: 2 }
  ...
end

...

if book.draft?
  do_something
elsif book.completed?
  do_something
elsif book.published?
  do_something
end
9. 胖Models, 瘦Controllers和Concerns
  • 将响应(response)无关的代码挪出Controllers, 比如业务逻辑以及持久化/模型变更的代码.
  • Controllers应该只调用model的简单queries, 负责的queries应该挪到Model里面并且封装成scopes. Controllers主要负责的是如何处理请求( request handling), 以及如何返回响应(response related logic).
  • 任何跟request和reponse无关并且和Model有直接联系的代码都应该放到对应Model里.
  • 任何包含了数据结构的类都应该放到app/models目录, 作为Non-ActiveRecord model(table-less class).
  • 当业务逻辑是为了一个特定的领域用途(Printing, Library & etc.)并且和已有的model上下文无关, 应该使用PORO(Plain Old Ruby Objects)类, 并且可以放到app/models/some_directory目录. 所有/app下的代码都会在app启动时自动加载. POROs也可以放到app/models/concerns和app/controllers/concerns目录.
  • 如果一些PORO, Modules或者Classes跟具体应用无关(application independent), 并且可以用于其他应用,请放到/app/lib目录下.
  • 使用Modules来抽象一些共用功能(common functionality), 并且放到app/*目录, 或者在和应用无关(independent)情况下放到app/lib目录.
  • "Service"层是经典MVC模式中重要的一环, 当程序代码增长到难以决策该把一些特定逻辑放在哪里的时候. 想象一下, 你需要一个机制来给订阅者发送图书已出版的短信、邮件或者其他类型的通知. 你可以创建一个关于通知的Service, 并且放到/app/services目录.
10. 国际化/本地化(Internationalization/Localization): 将文字放到yml而不是代码中
11. 数据库方面最佳实践
  • 数据库有任何改变时中, 总是向版本管理系统签入最新的db/schema.rb文件.
  • 当在新系统中创建数据库时, 应使用db:schema load而不是db:migrate.
  • 其他所有情况下, 使用db:migrate来应用新的migration.
  • 不要使用migration向数据库添加数据,使用db/seeds.db来做这件事.
12. 使用嵌套(Nested) Resources/Routes当两个resource有从属关系时
13. 使用Time.zone.now替代Time.now
  • 一个最佳实践是宗师定义默认的timezone在config/application.rb里.
  • Date.today和Time.now总是基于当前及其的timezone.
  • Time.zone.now和Time.zone.today可以解决一些开发环境和生产环境之间的timezone方面的不一致和冲突.
14. 不要将太多逻辑放到Views层,放到app/helpers

2017 macOS下的Ruby开发环境设置

又是一年没更新blog,真是越活越懒越没要求。其实总想写点什么,但一直也没有什么太好的灵感和收获值得分享。不过最近做了一个小网站(xNeus.com)。也更新了一下Ruby的相关工具,觉得也许可以记录下,希望有些意义。

homebrew

homebrew应该不需要更多介绍了吧,用mac的开发者应该都了解,就是类似于linux下yum/apt的一个包管理器。

rvm

rvm是一款年头相当悠久的ruby版本管理器了,中间一度说要终止开发后来好像也继续维护了。其他的类似工具还有rbenv,不过鉴于我对rvm也没有过什么不满,所以就一直这么多年用了下来没有换过。

oh-my-zsh

oh-my-zsh是一款基于zsh的小框架,提供了方面灵活的配置来定制自己的zsh shell。譬如在行首的提示符里现实当前环境里rvm使用的ruby版本,gemset名字,以及git本地是否有未提交更改。还有灵活的plugin支持更强大的命令行补全功能。

tmux

tmux是一个类似screen的terminal窗口管理器,可以在一个shell里面开N个terminal(tmux里叫window),并且在一个window里支持多个pane。把屏幕切割成几部分。我当时是看的这本书(《tmux》)学习的。几个月前还出了第二版。我当时学习时根据书上建议加上一些自己的定制后的配置文件在这里,仅供参考。另外,基于tmux有一个gem特别好用,叫做tmuxinator。可以自己写配置文件,然后直接配置好一个需要的tmux session打开。推荐两者一同食用,风味更佳。

iTerm2

iTerm2也是macOS下知名度很高的一款软件,主要就是比系统自带的Terminal App功能强大了许多,具体有哪些好用的功能,看这里就可以了。

vim

vim是我所用过的最方便的编辑器。我8年前最早从事rails开发的时候是用的netBeans,后来很快就转移到了vim的怀抱。中间也尝试过RubyMine之类的重度IDE,也尝试过emacs以及sublimetext、textmate之类的文本编辑器。不过最后感觉还是vim最方便好用吧。特别是自打有了Vundle这个vim常见管理器后,更是如虎添翼。现在网上有一些需要配置好的vim包(如: spf13-vim)可以直接使用,减轻新手的学习曲线,不过我还是一直自己从头定制的,有兴趣的可以看看(vimrcgvimrc)。当然,关于vim如何配置更加方便开发提高效率其实也是需要一定时间和经验的,我打算回头单独在写一篇blog来说,总之如果你目前没有特别偏爱精通的编辑器,我强烈推荐vim。

pry

Pry是一款更强力的ruby自带的IRB shell替代。不得不推荐,反正我是记不得上次shell里敲入irb是啥时候的事儿。

awesome-ruby

awesome-ruby是一份文档列表。分门别类的在每种类别中都推荐了一些不错的ruby的库、工具、框架、软件等。如果你遇到一个新的需求,打算调查一些可能的第三方gem,那么先看一眼这份文档上有什么推荐,是很有必要的事情。

Dash

Dash是一款API文档浏览器,支持150以上不同的APIs。而且现在还可以加载用户发布的API,我目前用到的API,从Ruby的各种Gem到Javascript的各种Library,都应有尽有。没有找不到的。之前在Mac App Store上可以买,但去年10月份不知道什么原因被下架了,现在只能从它自己的官网购买,如果之前在Mac App Store上购买过的用户,也可以直接发邮件给开发者获取一份新的liscense。

目前想到的关于ruby开发的一些常用东西好像也就这些,过了一眼貌没有一样东西是2017年出现的,可能我太寡闻了吧。以后还是要努力精进些,分享一些更新更好玩的东西才是。谢谢。


谁不曾温柔以待

在马代度假的日子里,每天除了无所事事的看海发呆。顺带静下心来看了几部特别温暖的电影,稍作记录。


《A Single Man》

Tim Ford跨界的首部电影,讲述了一个叫做乔治的英国绅士,在得知失去了自己相伴16年的同性恋人后的一天。一个人,一天,一件事儿。

整场放映中,小A的脑海里总会莫名想起一部小说名《更多的人死于心碎》,而影片也确实一直在渲染这种气氛。从早上拿出手枪打算殉情,到依旧努力让自己精致的出门,一样的上课,一样的去和好友聚会。在所有这一切中,乔治都表现的和一个绅士一样,礼貌,微笑,从容。但却能轻易的让人感受到他骨子里的敏感,和失去爱人后对于生活的不眷恋。

乔治和夏洛特的那条线我认为也是刻画得相当成功,从最初希望的爱情,到最后变成了一种更加深刻的友情或者可以说是亲情。当二人喝完酒跳完舞要散场的时候,夏洛特表现出的那种不舍和不甘行,以及乔石的回复:对不起,我曾经真的试过的。突然让我想到了Eason的那首兄妹:

就让我们虚伪 有感情 别浪费

不能亲爱的一对 亲爱像两兄妹

很多时候,人的感情都是错综复杂的。而我们需要学会的就是真诚的面对不同的感情,以及智慧恰当的接受这种和别人间不一致的感情。

影片末期 乔治和他的学生另一个小鲜肉终于互生情愫,小鲜肉也发现了乔治的自杀计划。并偷偷的将手枪藏了起来。当乔治发现这一切突然重新热爱生活打算继续的时候,不行心脏病复杂还是走了。而弥留之际,仿佛看到了自己16年来的爱人向自己走来一吻定情。

生活有时候真的是一个顽皮的孩童,当你充满绝望时,也许它会给你惊喜。当你漫画希望时,也许它会给你致命一击。而作为我们凡夫俗子也并不是无可奈何的。至少,我们可以去珍惜有过的一些,和在每一个现在努力的去感受得到或逝去的一切。


《Big Fish》

听说这部片子曾经被翻译成《大智若鱼》,但我还是觉得就简简单单的翻译成《大鱼》就很好了。

Tim Burton的电影总是充斥着大量的魔幻元素,本片也不例外。不过以这种风格拍摄父与子之间的故事,还是很让人感觉到意外的。

小A的父亲可以说是一位慈父,长这么大基本没打过小A,也基本没有凶过小A。甚至在小A任性表示退学时,父亲也只是抽了一只眼默默的说:我尊重你的决定,但对你只有最低的一条要求,将来无论干什么不要违法进监狱就好。

不过小A周围还是有很多小伙伴和很多中国式传统类型的父亲们。父子之间从来很少沟通,也时常施加暴力。但随着我们的年龄增长,基本就再无此类的了。换来的则是爷俩一块抽支烟,喝点酒。甚至一块洗个桑拿。

我想应该每个人在儿童时期,对于自己的爸爸都认为是世界上最好最棒最厉害的角色吧,无所不能。满足于孩童形形色色的各种需要。然后随着我们长大,随着我们成长。我们发现我们可以用自己的肩膀去撑起自己的天空,也发现父辈们似乎并不是我们之前那么神话。这个认识会造成父子关系变得奇怪一阵子。但或长或短,最终都会过去。当儿子毕业工作,结婚生子。肩上的担子也一如当年父亲一样的时候,我想对自己的父亲的理解肯定又会多一份吧。

不管小时候神话的父亲在我们心智生熟后会发现多么的平庸不足,但那份爱从不会随着我们的成长,成熟而褪色吧。


《放牛班的春天》

这部片是假期里看到的片子里最赞的一部,所以放到最后来写。

小A的童年生涯倒是没有遇到过门老师这么胸怀大爱的老师。但凭着父母的关系,以及可能小A自身成绩一直还算可以。所以老师们对小A还是很好的。

不过小A的一些所谓喜欢调皮捣蛋的小伙伴们就没有这么幸运了。后来小A在想,如果这些小伙伴当年能被老师们更加关爱,更加耐心的培养,也许是不是后来的很多事都不一样。

小A小学的时候有一位挺帅气的男老师,教音乐的。被很多女同学喜爱,但相对的就被小A的小伙伴们讨厌。男孩子嘛,总会编排一些神马男老师见色起意之类的。小A有一次上学路上捡到了一盘巴赫的磁带,想来在那么小的地方,除了这位老师,也不可能是别人的。但小A那会幼小的叛逆心理也不知怎的,就拿到了奶奶家,用录音机把磁带洗了半带子。两天后学校里张贴丢失告示,果然是这位老师的自带。于是虚荣的小A把这洗了一半的磁带交了上去。等下一次音乐课的时候,这位音乐老师把小A叫过去很温柔的问这磁带是怎么捡到的, 有没有后来拿来干什么。小A当时就心虚了,面红气短的。但依旧几个回合死不承认自己做过任何。于是老师也没有再怎样,后来的两年,老师依旧对小A很好,乐于回答小A的各种问题,甚至偶尔让小A在下课时间去音乐教室老师的钢琴那里随便弹玩着什么。知道这位老师不在教小A的时候,小A才知道录音机默认录磁带的时候是可以把人声录进去的。

小A也早已不记得当时自己洗磁带的时候是否录进了自己的声音。但隐隐小A总感觉其实当时这位老师已经知道了小A的小把戏。但并没有拆穿。

这段往事小A事后到如今30了从未对任何人讲起。在这里,小A想由衷的感激一下这位音乐老师的大度吧,维护了小A那幼稚的谎言,并且在后来的日子里也并没有因此对小A区别对待。依旧热心温暖。


三部电影,三类情感。同性的爱情,父子的亲情以及师生情。

在这个总是宣扬男欢女爱让人腻歪的时代。还好有这些美好的电影去讲述去描述这些不同但一样难能可贵的情感。

可以让人呼吸着阴霾的空气,看着暗淡的天空的同时,偶尔回忆往事。时常记起:

我们都曾被温柔以待。


小A是个诗人(001~010话)

(1)

前朝多贤能 才艺压神明 妖艳高冷 八面玲珑 豪杰自人中

黄梁有美梦 叶公不好龙 砟若霓虹 更似哀鸿 一抹断肠咏

假真魔幻 早已混沌如风

(2)

肴 谣 觉

你说还要 别闹

拥抱 美好 笑 操 老

烦恼 骄傲 毒药

(3)

白白的大腿

甜甜小嘴

原始的滋味

干杯喝醉

(4)

望长空 魔心已深重

醉朦胧 无酒亦成疯

瑟瑟秋风 何来钟鸣

谈笑之中 化作真龙

嗯哼 嗯哼

(5)

最好的时光里

无所谓

没有谁等你

亲爱的自己

(6)

最深处的夜幕 无边的悲凉

昏暗的路灯 指不出方向

迷幻的耳鸣声 无处可藏

黎明之前 不若温柔埋葬

(7)

热吻热汤 告别彷徨 四处流浪 未够悲伤 空中飘荡 寻找希望

跟我极仿 不再伪装 同你很像 仍就心慌 若你很烫 我便极狂

(8)

秋雨至 天渐凉

路灯微亮 夜未央

薄雾倾城 无处诉衷肠

(9)

如梦令

李清照:

常记溪亭日暮,沈醉不知归路。

兴尽晚回舟,误入藉花深处。

争渡,争渡,惊起一滩鸥鹭。

小A:

柔肠千回百转,有你便是晴天。

全都是扯淡,相见欢两不厌。

雨天,神烦,去泥马个蛋蛋。

(10)

我心里有一束花 午夜绽放 孤芳自赏

我心里有一束花 凌晨枯萎 也无所谓

逆风飞翔 渴求阳光  繁华霓裳 一梦黄粱