2018-01-01から1年間の記事一覧
2018年振り返り ということで今年やった事振り返りでも。 今年も今日で最後。 Ruby にパッチいっぱい投げた Ruby にパッチいっぱい投げました。 その結果、Ruby 2.6 ではパッチが4つ取り込まれました、わーい。 どんなパッチを投げたのかはこちらを参照。 Ru…
元ネタ Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ!」って出力した後終了って関数作ったら満点で単位貰…
先日 Ruby 2.6 がリリースされましたが、それにわたしが投げたパッチが4つ含まれています。 と、いうことで具体的にどんなパッチを投げてどんな機能が取り込まれたのかを簡単に書いてみようかと Refinements で定義した #to_proc が &hoge 時に呼ばれないの…
今日は年に一度の Ruby がリリースされる日ですね!!! クリスマス?知らないですねえ…。 と、言うことで Ruby 2.6 が無事にリリースされました。やったー! Ruby 2.6.0 Released NEWS for Ruby 2.6.0 そんなわけで気になった機能をいくつか上げてみようか…
Ruby 2.6 で追加される Proc#>> に Symbol も渡したいよねー内部で #to_proc も呼び出してほしいよねーと考えた時の覚書。 現在 Proc#>> には #call が定義されているオブジェクトを渡せる なにをしたい Proc#>> に #to_proc が定義されているオブジェクトも…
Ruby Advent Calendar 2018 3日目の記事になります。 なんとか日付が変わる前に書けました…。 何を書こうか迷ったんですが、この記事では今年 Ruby にパッチを投げまくったディープな Refinements の世界について書いてみようかと思います。 そもそも皆さん …
Hash をソートしたい場合、Hash#sort でソートすることが出来るんですが、このメソッドは [key, value] の配列に変換してからソートが行われます。 なので Hash#sort の戻り値も配列になります。 hash = { b: "homu", c: "mami", a: "mado" } # #sort の戻り…
Ruby 2.5 で追加された #yield_self という地味に便利なメソッドがあります。 これは『レシーバを引数としてブロックを呼び出す』というメソッドになります。 既存のメソッドとして #tap と似ていますが、#tap とは異なり『ブロックの戻り値を #yield_self …
Ruby 2.5 系で CSV.generate を使用しようとしたら意図しない動作をして、調べてみたらバグだったのでそのまとめ。 しかし、これ、結構クリティカルなバグだと思うんですけど、全然話題になってないのが不思議(当時は話題になっていたのかもしれないけど。 …
さて、Ruby の配列でソートを行いたい場合、配列内に nil があるとうまくソートできないことがあります。 ary = ["homu", nil, "mado", nil, nil, "mami", "saya", nil] # Error: comparison of String with nil failed (ArgumentError) ary.sort これは、『…
さて、 Kernel.#proc といえば普通は『ブロックをオブジェクトとして扱う時』に使用します。 # ブロックをオブジェクト化する plus = proc { |a, b| a + b } # もしくは Proc.new でもどうようの挙動になる # plus = proc { |a, b| a + b } # #call でブロッ…
前回参加した Ruby Hack Challeng からだいぶ時間が経ってしまったんですが、その時にやっていたことを覚書程度に書いておこうかと。 ちなみにバグと言っていますが、バグなのか微妙なところだったり。 あと結構フィーリングで書いているので実際の Ruby(の…
完全に食わず嫌いっていうか現状の neocomplete.vim で満足していたんですが、稀によく補完が重すぎてアイエエエエエとなることがあるので、重い腰を上げて deoplete.nvim を入れてみました。 導入 NeoBundle "Shougo/deoplete.nvim" NeoBundle "roxma/nvim-yarp" N…
先週の月木に Cookpad Ruby Hack Challengeに行ってきました。 わたしは今回で4回目の参加になります。 1日目 1日目はコミッタの人が Ruby の実装や内部についてお話しつつ、実際に Ruby のコードを見たり触ったりしよう、というような内容でした。 1日目は…
最近 HTML をゴニョゴニョする事が多いんですが、HTML が整形されておらず見づらい事がままあります。 いい感じに整形して出力したいなーと思って調べてみたら標準ライブラリに CGI.pretty というのがありました。 require "cgi" html = <<~EOS <html> <head> <title>Example D</title></head></html>…
デバッグなどしている時に Rails の実装を読みたい!、ということはよくあると思うんですが、そういう時にシュッと定義元を開きたいですよね。 優秀な IDE とかだとそういう機能もあるかもしれませんが、irb や pry を実行している時にサクッと調べたいです…
してきました。 相変わらず学生ではないんですが、遠目で見ていたりします。 今回は普段の学生LT とは違い CombNaf という別のコミュニティと合同で開催されました。 そのため、参加者が多かったり、普段の学生LT とは結構雰囲気が違っていたような感じでし…
朝起きたら Vim 8.1 がリリースされていました。 Vim 8.0 のリリースが 2016/09/12 なので約1年8ヶ月ぶりとなるリリースです。 大きな追加点としてはやはり :terminal が実装されたことですかね。 わたしは :terminal はクソだと思っているんですが、リリー…
書こう書こうと思っていて結局書いてなかったシリーズ。 とりあえず、現状まとめていたやつだけ放出。 Feature #14579: Hash value omission - Ruby trunk - Ruby Issue Tracking System JavaScript みたいに Hash を定義する時に『値を省略してキーだけ渡し…
もう1週間以上も経ってしまいましたが第9回 学生エンジニア限定LT大会!!!に遊びに行ってきました。 自分でブログ書けと言って書いてなかった 今回は寿司とピザを食べることが出来たぞ!!! [reveal.js + markdown でスライドをつくろう!!] と、言うこ…
元ネタ:C++ バージョン番号を比較する方法 - イネマルのプログラミング備忘録 #include <tuple> #include <iostream> int main(){ // 適当なバージョンデータ auto appA = std::tuple{ 2, 0, 101, 2 }; auto appB = std::tuple{ 2, 0, 100, 3 }; // C++11 で使いたいなら std</iostream></tuple>…
去年、Ruby のパッチを書き始めた頃から開発者向けの ML に参加しているんですが、その中で面白そうなパッチや提案が結構目に付くので定期的にまとめてみようかと。 Feature #13784: Add Enumerable#filter as an alias of Enumerable#select - Ruby trunk -…
今日 2018年2月24日は Ruby が誕生してちょうど 25年目! ということで記念パーティに行ってきました。 まあなんとなく行ってきたんですが、別に偉い人の話を聞いてもしょうがないので会場ではひたすら Ruby のコードを書いていました。人の話を聞いているよ…
たまに C++ を書かないと忘れるので…。 [コード] #include <tuple> #include <iostream> #include <string> template<typename F, typename T, std::size_t I> void apply_impl(F f, T const& t){ f(std::get<I>(t)); } template<typename F, typename T, std::size_t ...Indices> void apply_impl(F f, T const& t, std::size_t n, std::inde…</typename></i></typename></string></iostream></tuple>
Vim script でデバッグ出力を行いたい場合、以下のようなスクリプトを定義しておくことで『変数名:値』みたいな出力をすることが出来ます。 command! -nargs=* \ Debug \ try \| echom <q-args> ":" string(<args>) \| catch \| echom <q-args> \| endtry 使い方 let hoge = 42 " </q-args></args></q-args>…
前回に懲りずに学生に混ざってLTしてきました。 9年間ブログを書き続けて得たもの https://osyo-manga.github.io/slide-gakusei_LT-08-9years-blog/#/ 内容は『アウトプットすることで自分にもプラスになるんやで』みたいな事を話してきました。 まあ、アウ…
LT してきました。 今回もご飯がとても美味しすぎた…。 LINE でお天気bot をつくった話 https://osyo-manga.github.io/slide-omotesandorb-31-otenki-bot/index.html#/ と、いうことで今回は珍しく生産性のある話をしてきました。 年末に LINE でお天気 bot …
と、いうのが JavaScript 界隈で流行っているので Ruby でもやってみた == メソッドを定義する 多分一番簡単なやり方。 比較演算子そのものの結果を変えます。 a = Object.new def a.== other true end p a == 1 && a == 2 && a == 3 # => true a メソッドを…
最近 Ubuntu を入れ直したんですが、その時に Dropbox の同期がうまくいかなかったので覚書。 Linux 版の Dropbox アプリの場合、デフォルトの設定では『1 万件以上のフォルダを監視すること』が出来ないため、以下のようなコマンドを端末から実行して回避す…
Ruby の Hash のキーを Symbol に変更したい場合、Ruby 2.5 で追加された Hash#transform_keys を使うとよさそう。 hash = { "name" => "homu", "age" => 14 }.transform_keys(&:to_sym) # => {:name=>"homu", :age=>14} こういうのをやりたいことは稀によく…