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

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

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

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

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

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

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

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

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

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

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


NS
引用

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

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

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


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
http://www.iteye.com/topic/335171

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.震惊:这也是注释
http://www.iteye.com/topic/342091

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

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

14.A计划:攻心

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

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

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

让他彻底站到你这边

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

——you passed



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

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

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


C计划:坦诚

你真的是感到内疚吗?

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

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

如果能留下,好好干吧!

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

引用
递归修改成迭代是不错的教材。

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

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

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

像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,

这样运行时也不需要栈。


16. http://www.iteye.com/topic/333167

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

1073741823.class
#=> Fixnum
1073741824.class
#=> Bignum


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

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

引用
发帖之前有右上角就好了……


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

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

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

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

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

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

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

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

http://www.iteye.com/topic/354938#940910

27.CPS
http://www.iteye.com/topic/356708

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算命!
http://www.iteye.com/topic/362901

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

43.Ruby 静态编程 (你看错了……)
http://www.iteye.com/topic/382080

你可能感兴趣的:(编程,算法,Ruby,Rails,lisp)