挖坟第十季之-->黑夜王子night_stalker

NS不是最厉害的,但国内搞Ruby的人里面,你可以从他身上学会很多...向杯具们致敬..

1.
Ajax for Rails (oreylly白皮山羊) 也挺不错的
书不厚,主讲view
前半部分大致讲了prototype,scriptaculous和rjs,后半介绍了3个项目,内容相当丰富
不过好像还没中文版

2.有人用过cell么?
[url]http://www.iteye.com/topic/176186[/url]

3.
你可以轻视文凭,轻视分数,但不能轻视知识

没学历,需要多花很多很多努力而不是一点点,缺了四年,你需要十几年来补

建议你先学点基础,离散数学,数据结构,算法等,比学几个框架有用得多

框架什么的过几年就变样了,从培训班出来的,以后还得被培训

有出路的捷径就是上大学,而不是培训班

有一种人不需要学历,那就是牛人,不过我看lz聪明有限,牛不到哪里去

4.
[quote]有一个文档A,有三列信息(key,内容,分数)共计1000万数据,所有信息无序排列;一个文档B,有两列信息(key,姓名) ,共计1000万数据,所有信息无序排列,现在要把A文档所有与B文档key相同的key都替换为B文档的姓名,说下具体的思路及相关的数据结构,不能通过数据库或 shell来实现[/quote]

NS
[quote]
name长的话没关系,换成整数位置pos就行了

通读B,取出(key, pos)做成map,大不到哪里去。

然后顺序读A,读一行line,B文件流检索pos,置换line,写line,循环往复,完毕。 [/quote]

5.Ruby升级到1.9后,String#size将变成字符计数,字节计数是String#bytesize

最好备忘一下,以免将来升级后出现奇异的问题

6.
def self.self
"I am not myself..."
end

self
#=> main

__send__ :self
#=> "I am not myself..."


7.做一个彻底干净的sandbox
[url]http://www.iteye.com/topic/335171[/url]

8.跑了下Ruby/DL2速度测试,比1.9.0快了一个数量级,但是还是比1.8.7的win32api慢
但是官方binary比自己编译的慢一倍……

1.9.1 mswin32 官方binary
user system total real
win32api 3.312000 0.015000 3.327000 ( 3.328125)
dl2 2.735000 0.000000 2.735000 ( 2.734375)

1.9.1 mswin32 build vc2008
user system total real
win32api 1.703000 0.000000 1.703000 ( 1.718750)
dl2 1.453000 0.000000 1.453000 ( 1.453125)

hwnd = 0
require 'Win32API'
module WATest
ScreenToClient = Win32API.new("user32", "ScreenToClient", "IP", "I")

def self.screentoclient(hwnd, x, y)
r=[x, y].pack("ii")
ScreenToClient.call(hwnd, r)
r.unpack("ii")
end
end
=begin win32/api gem
require 'win32/api'
module WA2Test
ScreenToClient = Win32::API.new("ScreenToClient", "IP", "I","user32")

def self.screentoclient(hwnd, x, y)
r=[x, y].pack("ii")
ScreenToClient.call(hwnd, r)
r.unpack("ii")
end
end
=end
require 'dl/import'
require 'dl/types'
module DLTest
extend DL::Importer
dlload "user32.dll"
include DL::Win32Types
extern "BOOL ScreenToClient(HWND, void *)", :stdcall

def self.screentoclient(hwnd, x, y)
r=[x, y].pack("ii")
ScreenToClient(hwnd, r)
r.unpack("ii")
end
end

require 'benchmark'
n = 100000
puts Benchmark::CAPTION
puts Benchmark.measure { n.times{ WATest.screentoclient(hwnd, 0, 0) } }
#puts Benchmark.measure { n.times{ WA2Test.screentoclient(hwnd, 0, 0) } }
puts Benchmark.measure { n.times{ DLTest.screentoclient(hwnd, 0, 0) } }


9.这么看来,清华科技园就是外观漂亮,里面不怎的啊……

清华主楼虽然外观很土,但是主楼后厅简直是神级的,想起当年上谭浩强的C语言课了~

10.有实力,就算是文盲都抢着要

11.就随意bla bla一些呗

——"就算需求已经写好,先复查需求是不是准确
就算需求已经写好,也要弄清楚将来需求可能会如何变化
大家商量订立一些规矩,如定期重构,最大限度DRY……"


答太多可能也不好,说不好人家是测你忠诚度的

——"多协调,照领导的意思办"


一时答不上的问题,也可以用joke忽悠过去,更能给人深刻的好印象

——"呵呵,你听说过这个故事么……"

12.震惊:这也是注释
[url]http://www.iteye.com/topic/342091[/url]

13.语言大师可以用一种语言解决所有问题

我等小人物只能多学几种,以备不时之需

14.A计划:攻心

首先,你要确认他们谁是最关键的话事人

然后想法子调查他的背景,爱好,行为——不要详尽的,要关键的

然后制定一个简单而又精巧的攻略计划

让他彻底站到你这边

最后在适当的时机吐露真相,当然也要把说谎的理由打造得情理交加,可歌可泣

——you passed


B计划:伪证——前提是他们不去仔细验证,或者你悄悄修改他们验证的那台机器的dns路由方式,让它检索你的号码时可以跳到你仿造的页面上

你可以编造新的谎言来掩盖旧的谎言,没关系的

你只是为了让他们不被伤害,不要感到内疚!


C计划:坦诚

你真的是感到内疚吗?

那样更好,只要真诚的说出来(非常能打动人的那种),反正你很内疚,被赶走也是你希望得到的惩罚吧!

人都是有人性的,你有机会(大不大要看你自己的表现了)得到同情和考量(你已经成为这个组织里闪闪发光的新星,或者补人太麻烦)

如果能留下,好好干吧!

15.递归计算向非递归计算转换模板
[url]http://www.iteye.com/topic/201084[/url]

[quote]递归修改成迭代是不错的教材。

可是没很大实用性,因为瓶颈是递归算法的情况不很多,我们还可以把包含很多局部变量的代码段抽出成函数,还可以增加栈空间。

当然模版化的修改方法也不错,让机器完成这类工作,就更加不需要手动把递归改成非递归了。

建议不用在这种问题上纠结,因为太机械,这两算法本质上没什么区别。

像lisp就没有迭代,只有递归~~

如果你的算法会造成递归栈溢出,改成非递归以后很可能也会堆溢出-_-。


ps1:

递归与迭代的区别,其实是差分方程反向和正向递推的区别,也是归纳和演绎的区别。


ps2:

一些不需要栈就能改写的例子:

如f(n) = f(n-1) + f(n-2)

从n开始算就是递归,从2开始算就是迭代,这种转化连栈都不需要。


又如f(n) = f(n/2) + f(n/4)

我们可以设g(n) = g(n-1)/2

f*g(n) = f*g(n-1) + f*g(n-2)

设f' = f*g,则f = f'* g^-1

f'(n) = f'(n-1) + f'(n-2)

同样也不需要栈。


如果f(x)满足: 对任意a, f(a)==f(a),

那么我们可以:写出对应的差分方程,求出差分方程的通解,将f改写成通解。

这样也不需要栈。


一些递归可以在编译期完成,c++的expression template,

这样运行时也不需要栈。
[/quote]

16.[url]http://www.iteye.com/topic/333167[/url]

17.[url]http://www.iteye.com/topic/348988[/url]
[quote]因为大到一定程度时,Fixnum自动变成Bignum。
Fixnum是直接量,Bignum是比较完整的object了。
不过,两者都不能用dup。
[/quote]
1073741823.class
#=> Fixnum
1073741824.class
#=> Bignum


18.Ruby 1.9: 中文编程
[url]http://www.iteye.com/topic/348809[/url]

19.版权页要这样写才对
[url]http://www.iteye.com/topic/351588[/url]

[quote]发帖之前有右上角就好了…… [/quote]

20.[元编程系列] nil? respond_to?
[url]http://www.iteye.com/topic/351546[/url]

21.萌语言
[url]http://www.iteye.com/topic/349735[/url]

22.我已经退出这浑水了。

比起认真的答,钓鱼式答题比较有效率……

23.Rails UnitTest 测试机制浅析
[url]http://www.iteye.com/topic/352443[/url]

24.11个小球和另外1个变态小球的故事
[url]http://www.iteye.com/topic/352254[/url]

25. Haskell in 5 steps
[url]http://www.iteye.com/topic/355244[/url]

26.Ruby 1.9.1 和1.8.6 Hash描述的差异
[url]http://www.iteye.com/topic/354938[/url]

[url]http://www.iteye.com/topic/354938#940910[/url]

27.CPS
[url]http://www.iteye.com/topic/356708[/url]

28.个人理解,接口有两个好处
协作方面:先写文档,再写程序,容易分工
OO方面:将依赖大文件变成依赖小文件,体现多继承关系等等


但不好的是:产生了不少重复的代码。
不过IDE有自动copy and paste,省掉了手工copy and paste……
而且接口如果改动,改起来累死人。

29.windows suck ,shoes windows 上中文解决方案
require 'iconv'

Shoes.app do
alias _button button
def button txt
_button(Iconv.conv 'gbk','utf-8',txt){ yield if block_given? }
end

button "用得着一个个改吗?"
end


30.说 erlang 摸不着头脑有点过了,毕竟语言的设计者都是希望写出来尽量简单好懂的。把 def / var 改成 let,再加个 ->,然后把不纯的部分用 IO 包起来,就没多少区别了……

其实语法上 scala 和 java 的区别才是比较大吧…… java 没有 def 和 var 关键字,也不能省略括号和分号。我觉得它们的亲和性在于库而不是语法。

为什么“血统纯正”这么重要?因为 pure 函数的行为非常稳定,不管外界怎么变化,相同的自变量总是产生同一个结果,让人非常放心,从而可以集中精力去处理其它问题。如果没有纯洁性,复合函数,优化算法,延迟求值等特性都不好实现。不变性(定义而非变量)也能使开发并发程序开发变得简单高效。

杂交语言让你既能写 java 风格的代码,又能写 FP 风格的代码,如果不注意,肯定会产生非常严重的可读性问题。

31.教你用Ruby算命!
[url]http://www.iteye.com/topic/362901[/url]

32.每赚1块钱,就删10行代码。

33.用 haskell 扩展 ruby
[url]http://www.iteye.com/topic/364801[/url]

34.强大的 fold
[url]http://www.iteye.com/topic/366101[/url]

35.用 Ruby 踩踩四人帮
[url]http://www.iteye.com/topic/370266[/url]

36.SQL 与函数式编程
[url]http://www.iteye.com/topic/370674[/url]

37.XML 就像弱化的 lisp,不过它是确定性(decidable)的,适合表达文档,但没法表达程序。
XSL 就很像 lisp 了。

但是标签太冗长了,标签嵌套比括号嵌套啰嗦得多了……

现在的人连括号都懒得敲,以缩进代替括号的精简语法更加舒服(如 yaml,python)

有兴趣可以看看为什么当初选了树形文档表达网页
[url]http://www.w3.org/History/1989/proposal.html[/url]

如果当初选了 lisp,现在 web 开发不知会简单多少 ……

38.[Ruby 1.9] 超箭头运算符
[url]http://www.iteye.com/topic/376293[/url]

39.UI 技术有两点是非常重要的:

1.可以分离界面设计和事件响应:这对团队协作和 IDE 开发很重要。
2.使用的语言支持闭包:能大大简化事件处理。

目前流行的大部分UI如 xaml,xul,flex,html+js 都可以做到这两点……
所以呢,剩下的就是商业运作和推广问题了。

40.each 是人民群众喜闻乐见的吊尾 proc,风格归一,行为清楚。
但也正因为 each 是 proc 语法,受 proc 限制。

for in 不是 proc 语法,所以实现上能优化多一点。

我觉得优化瓶颈的时候可以考虑 for,其它时候肯定是 each 好。

[url]http://www.ruby-doc.org/core/classes/Benchmark.html[/url]

41.其实回字有7种写法...
[url]http://www.iteye.com/topic/378553[/url]

42.JavaScript里面真的需要继承吗?
[url]http://www.iteye.com/topic/371900?page=3#991232[/url]

43.Ruby 静态编程 (你看错了……)
[url]http://www.iteye.com/topic/382080[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值