• Unobtrusive JavaScript 就是 HTML 里不内嵌 JavaScript。同理 CSS 也可以不内嵌,而是写在 CSS 文件里。

  • And if you’d shown people Ruby in 1975 and described it as a dialect of Lisp with syntax, no one would have argued with you.
    《Hackers and Painters: Big Ideas from the Computer Age》 Paul Graham

  • 如果大家只是夸夸你,那可能你能力并不强……

  • 求内存盘访问文件的扩展 at January 03, 2020

    操作系统本来就会自动缓存文件。你在读取的时候,文件的内容会自动存在内存里,不需要扩展也不需要任何额外的措施。

    你可以直接用 Ruby 代码顺序读取一次整个文件然后关掉。操作系统一般会在后台把文件留在内存里。

  • PHP 7 安装日志 at December 17, 2019

    ermmm 我总不能说我是搜索搜出来的吧……

  • PHP 7 安装日志 at December 14, 2019

    rvm 也是可以的,也算是一种软件包管理软件。最怕的是裸复制文件的那种。

  • PHP 7 安装日志 at December 10, 2019

    我想说的是,就算要编译,也应该用包管理支持的方式进行编译。比如我维护 Debian 上的 nginx 的时候,是用 dpkg 打包成 deb,虽然过程也是要编译,但最终是由包管理来解决版本追踪问题。

  • PHP 7 安装日志 at December 06, 2019

    我不想显得自己粗暴无礼,但是这帖子整个说得都是什么东西啊。

    CentOS 6 根本就不支持 PHP 7,换句话说如果你要用 Redhat 官方的源,就去装 CentOS 8,如果要用 CentOS 6,就得用第三方源。

    那么第三方源很麻烦吗?不。Remi 源早就有全套 PHP 7.3.12 了(之前版本的也都有),要安装只需要按照教程加上源然后 yum 就完成了。

    同理,Nginx 官方源也早就有最新的稳定版 1.14.2 了。

    全部装一遍,我觉得,半小时足够了吧?

    Linux 上永远也不要 make install 编译安装(除非是用完就扔的)。总是使用 Linux 自带的包管理工具来安装软件。你从源代码编译,就只是得到了一个没有经过测试、没有技术支持、没有任何安全团队保护的软件。如果是为了节省时间而牺牲一些性能,那也就算了。可你这也没节省时间啊……

  • 二维码本身有一定的鲁棒性,用高性能的扫描仪扫描然后调节二值化阈值再拿手机多扫扫吧。

  • 把 Ruby 替换成 Lisp 会不会让人更容易理解问题在哪?

  • 内存不足说明你内存不足。和后面的内存空间剩余充足是矛盾的。

  • Rails 6.0 正式发布 at August 20, 2019

    我觉得我们 Rails 1.2 的才是凉透了……

  • 语言的表达能力。

    换句话说,同样的代码我已经不想用其他语言来写/实现了。

  • 异常浮点数的处理 at June 27, 2019

    浮点数不精确。精确值严禁用浮点。这样的基础知识还是要有的,和 round 还是 next 没关系。

    在浮点数里,200.48000000000002 与 200.48 是应该被程序员视作相等的值。

    即判断两者相等的操作 is_equal = (200.48000000000002 - 200.48).abs < 1e-6 返回的是 true

  • Let's Encrypt 爬坑记 at June 27, 2019

    是什么让你不去用大名鼎鼎的acme.sh的呢……

  • postrotate
      /usr/bin/killall -HUP rsyslogd
    endscript
    

    你应该去重启 puma 而不是重启 syslog。看上去像是复制粘贴了 syslog 的 rotate 配置但是没有改重启脚本。

  • 搞海外服务器这事,要搞好的话还挺复杂的,机房啊线路啊这些都要折腾,没有那种一站式的完美解决方案。

    DO 之前还被爆出来莫名其妙把一个创业公司 (?) 的整个公司账号全封了,机器全关了的事情呢。

  • 只是写脚本随便扒点文件的话 net/http。如果是做项目要拉 API 请求的话法拉第挺好。

  • Rake 重度用户路过。

  • pry(main)> result =  Base64.encode64(hash)
    #=> "gmBQdw9tdiWDFCUUshLNYdrHIRHyeTN8kPNWipUBbd8=\n"
    
  • 2

  • 很多人无脑直接装系统,这种情况下就是问题了。如果自己知道改 prefix 当然另当别论。

    另外像是你说的 pg,还是要有人盯着官方的安全补丁,勤升级才好。有时候连带其他组件更新也需要重新编译。比如 nginx 可以选择静态编译 OpenSSL,那 OpenSSL 有新的安全更新的时候,就要连带 nginx 一起重新编译了。

    而且就算要自己编译,我也是提倡用发行版自己的打包脚本来编译,减少每次编译之间带来的差异。我们这维护一个 nginx mod 版,就是 debian 打包脚本然后用 docker 编译成 deb 包,这样版本更新进度一目了然,而且编译过程 reproducible。

  • 没有编程经验……这个超纲了,臣妾不知道啊……

  • #12 是一方面。 另一方面是软件版本管理,make install 装好以后很容易忽视安全更新。

  • 首先第一条,不要用 make install 安装软件包……

  • 入门的定义本来就不一样,怎么比较。

    部署一个 Ruby 网站需要你拿个 VPS 来搞;部署一个 PHP 网页只需要你找个免费空间 FTP 传上去。

    当时同样做一个 MVC 结构的网站:

    Rails 命令行直接 Generate,PHP 你得先挑个或者做个框架……

  • 不折腾这个词本身就有两层含义。

    一是不用自己去定制,免得浪费自己宝贵的时间。

    二是仿佛你得认他做爹,什么都得听他的,没你的话语权。

    这也是安卓 VS 苹果中的一个关键点。对于普通人来说,拿到一台手机,听厂商的话,照着厂商给你定义的使用方式使用就行了。但是对于一小撮人来说,我的手机我做主,那就会变成「折腾」。买个能刷机的,解开 BL,刷上自己惯用的安卓发行版,按照自己的喜好定制启动器、锁屏、按钮条等等……

    类似的还有什么群晖 VS DIY NAS……还有波音 VS 空客……还有自动挡 VS 手动挡等等。

    具体想不想折腾,还是看人的风格习惯吧。如果你喜欢「让机器听人话」,你可能会更喜欢 Linux 环境。

  • 变量标识符是没有 object_id 的。

    对象是有 id 的。

    你把新的对象赋值给变量标识符,对象的 id 当然会改变。

  • 输入是什么?输出是什么?你别光给输出不给输入啊。

    如果只是要输出一个宽度为输入的半菱形的话

    num = 4
    row_sizes = 2.upto(num).to_a + (num-1).downto(1).to_a
    puts '*' # 第一行
    row_sizes.each {|width| puts '*' * width} # 重复多遍来反复输出
    
    # => *
    #**
    #***
    #****
    #***
    #**
    #*
    
  • ruby 没有 do while 语句吗? at February 15, 2019

    据说比较提倡用 break 来实现。

    loop
        s += (cn % 2).to_s
        cn /= 2
        break unless cn > 0
    end