
1975年科恩出生在纽约一个普通家庭,那个年代电脑刚开始普及。科恩的父亲保持着对于新事物的看好,买了一台TimexSinclair个人电脑。

5岁的科恩也通过这台他认为是玩具的东西,开始了自己的编程生涯。
科恩最开始学会的是Basic语言,慢慢的科恩的编程天赋展现了出来,在16岁时,他已经掌握了3门编程语言,1993年18岁的科恩考入了纽约大学。
由于从小已经对计算机基本知识掌握的非常熟练了,所以大学的时间基本上都沉迷在编程和操作系统上面了。
觉得上学没有用的科恩,和其他计算机大神一样,终于在一个暑假辍学了。
科恩最开始投入开发的是一个叫MojoNation的项目,目的是提供加密的文件传输,原理是把机密文件分解成加密块,并传输给其他运行的MojoNation计算机,但企业不太买账。
经过一系列的迭代,在2001年,基于将文件分片快速下载的Bt协议,终于被科恩搞出来了。
相信老司机对于Bt这个协议非常熟悉了。

普通的下载方式都是基于Http协议或者Ftp协议,这种下载方式是从服务器下载,受限于服务端的宽带,下载的人越多速度越慢,相信老司机们都有体会。

Bt下载不是从中心服务器下载,而是让每个下载过文件的人都变成去中心化网络中的一个节点,成为一台小型服务器或叫种子机器。
这样当其他人来下载文件的时候,这些种子机器可以同时为这个人提供下载能力,速度上比中心服务器下载速度快多了。

真正让Bt大火的是通过传播色情内容,果然“黄赌毒”催生了很多技术的发展。
其实比特币或区块链的很多底层技术都是参考了Bt技术,所以掌握区块链底层技术,掌握Bt协议是非常重要的。
技术是无罪的,但基于Bt协议之上的很多暗网、赌博、涩情、盗版的罪恶产品涌现了非常多,FBI也在一直找理由把Bt之父科恩搞进监狱,这也导致了这位技术大神一直过得不怎么好。

Bt技术的Tracker服务器有两种形式:
1. 中心化Tracker服务器,在国外是主要形式;
2. 去中心化的Tracker服务器,也就是由种子机器共同承担,有点区块链的样子了;
第二种也就是大家比较熟悉的磁力链接。
但Bt网络有个缺点,因为下载速度由种子机器的多少决定,所以对于热点资源会下载很快,资源少的或者种子不被上传的下载就非常慢,一些Bt客户端软件会通过各种手段让种子机器上传种子,比如限速,比如激励。
相信听到激励这个词,你已经知道这个事情和比特币、区块链差不多了,我有很长一段时间,怀疑中本聪就是科恩。
其实整个Bt协议和网络有很多值得大家研究的技术,比如哈希计算、异或运算、网络通信、共识与激励。
科恩这位理想主义的技术大神并没有依靠Bt协议大富大贵,窘迫的生活也没他消沉,在他的个人网站上一直写着一句话:
As much of a geek as you·d expect.(尽自己可能做个极客,向你们期待的那样)
有没有一种方法可以自动生成种子数据文件并创建种子数据,就像您在下面链接中的Laravel中看到的那样?LaravelDatabaseMigrations&Seed我在另一个应用程序上看到在Rails的db文件夹下创建了一些带有时间戳的文件,其中包含种子数据。创建它的好方法是什么? 最佳答案 我建议你使用Fabrication的组合gem和Faker.Fabrication允许您编写一个模式来构建您的对象,而Faker为您提供虚假数据,如姓名、电子邮件、电话号码等。这是制造商的样子:Fabricator(:user)dousernam
我们需要为一些新添加的表添加更多种子数据到我们的Rails项目的“版本100”。但是,如果我们简单地将它添加到seeds.rb中并重新运行rakedb:seed命令,它当然会重新添加原始种子数据,复制它。因此,如果您已经将种子数据添加到seeds.rb中,例如,TableOne...我们如何在开发的后期阶段为TableTwo和TableThree增量添加种子数据?我希望我可以简单地创建一个新的seeds_two.rb文件并运行rakedb:seeds_two但这给出了一个错误不知道如何构建任务“db:seeds_two”所以看起来只能使用“seeds.rb”。人们如何维护对种子数据的增
我对Ruby知之甚少,所以如果这个问题的答案显而易见,请原谅我。我注意到http://www.ruby-doc.org/stdlib-1.9.3/libdoc/securerandom/rdoc/SecureRandom.html当调用random_bytes时,Ruby使用pid和当前时间来播种OpenSSL::Random。除非幕后发生其他事情,否则这不正是Netscape在90年代中期在其最初的SSL实现中使用的种子吗?http://en.wikipedia.org/wiki/Random_number_generator_attack#Prominent_examples_of
Ruby将PRNG实现为“修改后的MersenneTwister,周期为2**19937-1”。1我对MT的理解是它在2^32种不同的种子上运行。让我感到困惑的是Random.new(seed)接受任意大的数字,例如Random.new(2**100)。但是,我无法找到(逻辑上的)碰撞:Random.new(1).rand(10**5)==Random.new(2**32-1).rand(10**5)=>falseRandom.new(1).rand(10**5)==Random.new(2**32).rand(10**5)=>falseRandom.new(1).rand(10**5
我需要用表格等设置我的数据库,但在某些情况下我不想加载我的种子数据。我也不想每次想忽略我的种子数据时都删除或移动我的db/seeds.rb文件。有没有办法执行rakedb:setup的任务并忽略种子数据? 最佳答案 是的。只需使用以下两个命令:rakedb:createrakedb:schema:loadrakedb:setup所做的只是创建数据库(db:create),从db/schema.rb加载数据(db:schema:load),然后插入种子数据(db:seed)。您可以单独执行这些步骤。
我正在使用seeds.rb填充一些状态模型引用数据:State.create:name=>'Alabama',:abbreviation=>'AL'State.create:name=>'Alaska',:abbreviation=>'AK'#...虽然我没有使用状态固定装置(因为它是种子数据,我认为纯粹为了测试而复制它不会是DRY),Rails测试框架似乎删除了所有状态种子数据测试。(我正在删除、重新创建、迁移和重新播种测试数据库,并在单元测试运行之前确认数据在那里。)结果是此断言在seeds.rb中成功但在单行测试中失败:assert_equal51,State.all.size1
我有一个现有的数据库,我正在将以前的“NULL”列转换为具有默认值的列(并使用所述默认值填充该列)。但是,该值是我需要创建的记录的ID。如果我将此记录放入db/seeds.rb,它不会运行,因为db/seeds.rb在迁移之后运行——但迁移需要种子数据。如果我在迁移中保留记录创建,那么如果我使用db:load创建新数据库,我将不会获得记录。除了在db/seeds.rb和迁移中复制它之外,还有更好的方法吗?谢谢! 最佳答案 虽然我能理解您希望保持DRY并且不必在migration和seeds.rb中都写这个,但我认为您应该在两个地方都
我在概念上遇到了困难。基本上,我需要接受一些任意的唯一字符串,并能够将其转换为规范化的浮点值。输出浮点值是什么并不重要,只要相同的字符串输入总是产生相同的规范化浮点输出即可。所以这是一个哈希算法,对吗?我熟悉SHA1或MD5,这似乎类似于密码散列,正确密码的结果相同。但是我相信那些方法会输出字符串。我没有得到的是如何将SHA1或MD5的结果转换为一致的浮点值。#Goaldefstring_to_float(seed_string)#...endstring_to_float('abc-123')#=>0.15789string_to_float('abc-123')#=>0.15789
我正在尝试使用CarrierWave为Rails3中的数据库播种图像,但我尝试的任何方法似乎都无法正常工作,除非必须手动上传它们。pi=ProductImage.new(:product=>product)pi.image=File.open(File.join(Rails.root,'test.jpg'))pi.store_image!#triedwithandwithoutthisproduct.product_images有人知道如何使用CarrierWave播种吗? 最佳答案 原来CarrierWave的文档有点错误。有一段
我想用虚拟数据填充新功能,但不想使用db/seeds.rb文件,因为它已经包含与此功能无关的其他数据。运行默认seeds.rb文件,你运行命令rakedb:seed.如果我在db中创建一个文件名为seeds_feature_x.rb的目录,rake命令运行(仅)那个文件会是什么样子? 最佳答案 首先创建一个单独的目录来保存您的自定义种子——此示例使用db/seeds。然后,通过将rakefile添加到您的lib/tasks目录来创建自定义任务:#lib/tasks/custom_seed.rakenamespace:dbdoname