类似还有:
更好的文件系统,存对象而不是文件 更好的集成开发工具,直接编辑对象的属性,而不是源代码文本 更好的网络协议,传输对象而不是流 ...
smalltalk 都做过
a.zip(b).flatten
需要性能可以写个 C extension...
呃,估计没有,可否做个 crystal 的简介?以及它为什么特别?
eps 是 embed postscript, 所以要安装 ghostscript 支持
brew info imagemagick
看看 ghostcript 是否勾上了,没有的话
brew reinstall imagemagick --with-ghostscript
你误解了 Objective-C 的语法,把它和 C++ 的语法混淆了
foo.equalTo(bar)
其实是下面的语法糖 (记住,objective-C 的点语法是 getter 的语法糖而不能代替带参数的方法!! ):
[foo equalTo](bar)
所以对应的 Ruby 是 foo.equalTo.(bar)
或者 foo.equalTo[bar]
或者 foo.equalTo.call bar
假如 equalTo 需要一个参数,在 Objective-C 中就只能这么写:
[foo equalTo: bar]
双下划线可以这么输入:
\_\_END\_\_
千分符,heredoc 等等不算关键字
require 'csv'
_, *rows = CSV.parse rs.strip, col_sep: ' '
rows.map {|r| r.values_at 5, 6 }
在 Linux 一直是安全的,因为
对 log rotation, Ruby 2.1 之后是安全的,因为
logdev.flock(File::LOCK_EX)
信息来源:源代码和 http://b.hatena.ne.jp/entry/www.slideshare.net/sonots/rubylogger-rubyconf-20131109
其实 rake 和 thor 更好用...
If you want brackets, use Clojure If you want verbosity, use Java If you want both, use Scala
嗯,其实 len(array)
是 array.__len__()
的语法糖...
不加括号的 print
在 python 2 是可以的,但 python 3 不行...
array[start:stop:step]
挺强大的,不过哲学是只用一种方法操作,所以没有 array.first
...
list comprehension 也挺好使,比较适合简化一些需要 map + filter 才能完成的操作
请问你这个 wchar 是哪个 wchar? 可否提供更详细的信息?
WCHAR
, 它是 UTF-16 内码,little endian (UTF-16LE).wchar_t
, 不同平台的 wchar_t
是不同长度的,有的是是 UTF-16 有的是 UTF-32, 还有别的,而且有 big endian/little endian 的区别 (x86 一般都是 little endian, 不过最好自己做下试验先).弄清楚内码以后,强转成 char* 交给 rb_enc_str_new
, 然后再调用 rb_str_encode
或者在 ruby 方面用 String#encode
方法转换回 utf-8 的字符串。
以 Win32 API WCHAR 为例,它是 UTF-16LE 内码,所以对应的字节数目是字符串长度乘以 2, 假设你有 wchar_ptr
, wchar_len
#include <ruby/encoding.h>
.....
volatile VALUE s;
s = rb_enc_str_new((char*)wchar_ptr, wchar_len * 2, rb_enc_find("UTF-16LE"));
s = rb_str_encode(s, rb_enc_from_encoding(rb_utf8_encoding()), 0, Qnil);
假设你有个 Ruby 字符串 s
s = rb_str_encode(s, rb_enc_from_encoding(rb_enc_find("UTF-16LE")), 0, Qnil);
WCHAR* wchar_ptr = (WCHAR*)RSTRING_PTR(s);
int wchar_len = RSTRING_LEN(s) / 2;
基础知识见: http://www.rubydoc.info/stdlib/core/file/README.EXT
找 API 只能看头文件咯: http://rxr.whitequark.org/mri/ident?i=rb_str_encode
另外,如果你在 C++, 那个强制转换会稍微麻烦点,得用 reinterpret_cast<>
空调低温抽湿 + 大被子
如果有 phusion passenger 5 (raptor) vs unicorn 的性能测试我就点赞
time 一下这个吧... 其实楼主你的 ruby 代码和 php 代码都写复杂了
trees = trees.to_a
q = trees.group_by &:parent_id
trees.each do |t|
t.children = q[t.parent_id]
end
line1 !~ /mysql/i
就好了,另外 ^
和 $
其实匹配的是行首和行末,\A
和 \z
才是匹配字符串首末。普通模式 .
不匹配换行符,多行模式 .
才可以匹配换行符。既然你不熟悉 Ruby 又没时间,为何不直接用 act_as_nested_set... 都不用自己写,还快很多
protobuf/thrift 的 ruby/python 实现非常糟糕,完全体现不出速度来,还不如用 capnp + C 绑定
messagepack 是比 json 要快一点,但它的 js 版比 json 慢很多
没有巨大的性能差别的话,还是选择纯文本协议比较好
pry 里 show-doc foo_method
把这一大段直接加 view 片段缓存,可以更简单和快一点。
class << Rails
attr_accessor :memory_cache
end
Rails.memory_cache = ActiveSupport::Cache::MemoryStore.new
== Rails.memory_cache.fetch 'header' do
= javascript_include_tag ...
= stylesheet_link_tag ...
开发模式还要禁用掉否则不能 reload
因为支持任意子域名的 SSL 证书贵,跨子域名登录验证做起来麻烦
不过 SaSS/PaSS 服务如果允许用户放上自己的 js, 那用子域名隔离 cookie 可能得是必须的
为什么 Haskell 有 do-notation? 就是为了不像 code 1 那么写代码而像 code 2 那么写,本末倒置了...