読者です 読者をやめる 読者になる 読者になる

それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

rename Commandでぱぱっと連番付きファイルを作成する。

linux

連番を付記したファイルを作るのが、めんどくさくなってきた

for ループと sprintf を組み合わせたり、ruby ワンライナーでヤってたけど、だんだんめんどくさくなってきた

rename Commandでぱぱっと作ることにした

rename -N 01 -X -e '$_ = "京都旅行-2016-08-27_$N"' *.jpg

これでぱぱっと、ファイルを連番にできて便利すぎてヤバイ

-N : 引数のフォーマットと開始番号を指定する。例えば 0001 なら4桁0埋め、 100 なら開始番号が100
-X : 拡張子を置換対象にしない
-e : 出力するフォーマット $N が番号が入る所

rubyの置換でコールバックを使う。

ruby

JavaScript の String#replace はコールバックが使えて便利。

置換でコールバックの関数使えると便利なんですよね。

> a.replace(/a/, function(e){ console.log(e); return ''})
a
'bc'
>

js のこの仕様が結構過ぎで多用しまくっててクセになってた

ruby でもブロック渡せることを知った。

'abc'.gsub(/a/){ 'abc' } #=> "abcbc"

ブロック渡せるの便利だよね。大雑把な正規表現でも細かい部分を微調節できるし。正規表現をアレコレいじくり回して直感的じゃなくなったり、複雑になりすぎた正規表現を調整できる。

参考資料

gsub, gsub! (String) - Rubyリファレンス

ruby のURI.parse が日本語GET引数や日本語UTF-8のパスに対応しなくなった

ruby ruby

対応しなくなったんですよ。マジで。

日本語を含むとエラー

>> URI.parse 'http://example.com/あああ'
URI::InvalidURIError: URI must be ascii only "http://example.com/\u{3042}\u{3042}\u{3042}"
from /Users/takuya/.rbenv/versions/2.2.3/lib/ruby/2.2.0/uri/rfc3986_parser.rb:20:in `split'
>>

ruby まじどうしようもないな。

日本語を含むURIはASCIIにEncodeしろってことだろうけどさ、ブラウザからURIをコピペしたら日本語含まれるじゃん?

日本語が含まれたまま使えないと不便だよね。

モンキーパッチで対応する

require 'uri'


module URI
  class << self
    alias :_parse :parse

    def parse a, original=false
      return self._parse a if original

      r=/[一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+/
      a = a.gsub(r){|m|  URI.encode_www_form_component(m) }

      u = self._parse a
      return u
    end
  end
end

とりあえず対応することが出来る。大抵のURIはコレで対応できそう。

npm のモジュール地獄見てて、gem の同じような地獄に成りつつあるし。イチイチ依存Gem増やす必要はないかもしれない。

関連資料

ruby で URL をパースしてGET引数をHashに展開する。(日本語URI対応) - それマグで!