Ruby で xlsx を編集する

Ruby で既存のエクセルファイルを編集したかったので試してみた。 Ruby でエクセルファイルを扱う手段(gem)はいくつかあるが今回は、 .xlsx ファイルの読み込み .xlsx ファイルの書き込み セルの結合 を行いたかったので RubyXL を使うことにした。 余談 …

Electron で jQuery 使う場合の注意点

Electron で UIkit を使っていたらハマったので覚書。 問題点としては、 Electron で jQuery を使おうとするとエラーが出た 上記の問題を解決した結果、gulp のライブリロードが動作しなくなった という2つの不具合が発生した。 先に書いておくと手元では下…

今更聞けない! Ruby の継承と mixin の概念を継承リストから学ぶ

Ruby を学ぶ上で継承と mixin の概念を理解することはとても重要である。 しかし、このあたりの仕組みを学ぼうとすると、include や prepend、特異クラスや特異メソッドなどという様々な機能を理解する必要がありとても複雑である。 そこで本記事は『継承リ…

LLVM 5.0.0 がリリース

LLVM 5.0.0 がリリースされました。 こちらからダウンロードすることが出来ます。 リリースノートは以下を参照してください。 LLVM 5.0.0 Release Notes LLVM 5 documentation Clang 5.0.0 Release Notes Clang 5 documentation Extra Clang Tools 5.0.0 Rel…

std::for_each の戻り値

C++

std::for_each の戻り値って void だと思っていたんですが、どうやら第三引数が返ってくるらしい。 #include <vector> #include <iostream> int main(){ std::vector<int> v{1, 2, 3, 4, 5}; std::for_each(v.begin(), v.end(), [](auto n){ std::cout << n << std::endl; })(42); s</int></iostream></vector>…

Linux 上で Unity を使って遊んでみた

Unity と言えば動作環境が Windows/Mac で『興味あるけど Ubuntu で使えないしなー』と思ってたんですが、一応 Linux 版も開発されているらしく、それが問題なく使えると聞いたので試してみました。 ダウンロード/インストール Unity は以下のページからダウ…

Ruby でメソッドの呼び出し元の情報を取得する

例えば、次のコードのように『A.hoge の呼び出し元の情報』を取得したいことがあります。 module A def self.hoge # 呼び出し元である X オブジェクトを取得したい end end class X A.hoge end 標準の範囲だとできなさそうだったんですが、binding_of_caller…

Ruby で任意のクラスが特異クラスかどうか判定する

Ruby で任意のクラスが特異クラスか判定しなーと思ってあれこれ考えていたんですが、そもそも Module#singleton_class? がすでに存在していました。 class X end p X.singleton_class? # => false p X.singleton_class.singleton_class? # => true p X.new.s…

Boost 1.65.0 がリリース

C++

Boost 1.65.0 がリリースされました。 Boost 1.65.0 では以下の2つのライブラリが新しく追加されました。 Boost.PolyCollection Boost.Stacktrace Boost.PolyCollection は抽象クラスに特化したコンテナで、Boost.TypeErasure などとも連携して使うことが出…

C++ で std::getline を使った split

C++

前回、std::regex を使った split を実装しましたが、今回は std::getline を使った実装です。 #include <iostream> #include <sstream> #include <vector> #include <string> int main(){ auto split = [](auto src, auto del){ std::istringstream stream{src}; std::string output; std::vect</string></vector></sstream></iostream>…

C++ で std::regex を使った split

C++

C++ で split が話題になっていたのでやってみた。 #include <regex> #include <iostream> #include <string> #include <vector> int main(){ auto split = [](std::string src, auto pat){ std::vector<std::string> result{}; std::regex reg{pat}; std::copy( std::sregex_token_iterator{src.begin(), s</std::string></vector></string></iostream></regex>…

C++17 で追加された std::conjunction/std::disjunction メタ関数

C++

知らなかったので覚書。 C++17 で std::conjunction と std::disjunction という2つのメタ関数が追加されました。 この2つのメタ関数はいずれも可変長テンプレート引数を受け取ります。 具体的にどのようなメタ関数なのかは以下のコードを見てください。 #in…

C++ のラムダ式を型推論しながら関数ポインタ型で受け取る

C++

ほぼ使うことはないだろうけど、かなりの知見だったので覚書。 ラムダ式を関数ポインタ型へ変換する これは割と一般的な知識だと思うんですが、『キャプチャしていない』ラムダ式は関数ポインタ型へとキャストする事が出来ます。 using func_t = int(*)(int)…

ここがすごいよ Hsakell の $ 演算子

最近ちょろっと Haskell を書いてて 『$ 演算子すげー』ってなったので勢いでまとめてみる。 Haskell に明るくないのでゆるふわな感じで書いていくよー。 (ちなみに $ 自体の具体的な解説はしない。 関数適用と演算子の優先順位 他言語をやってから Haskell…

Ruby で内部クラスを private にする

Ruby で内部クラスを private にする場合どうするのがよいかと思っていたんですが private_constant を使うのがいいみたい。 private_constant があるのでそれを使えばそれっぽい気がします https://t.co/79ySXXyQ7l— Pocke(ぽっけ) (@p_ck_) 2017年8月8日 c…

Ruby の hook メソッド一覧

Ruby から呼ばれる hook メソッドの一覧が欲しかったので Ruby 2.4 時点で定義されているメソッドをまとめてみました。 他にもあればコメント等で教えていただけると助かります。 Class クラス #inherited クラスのサブクラスが定義されたとき Module クラス…

最新版の Vim で :terminal コマンドを使えるようにする

Vim

最近何かと話題の Vim の :terminal ですが、使用する場合は最新版のソースコードからビルドする他にも configure 時に --enable-terminal を追加する必要があります。 $ ./configure --with-features=huge --enable-terminal これで :terminal コマンドが使…

Scala でライフゲームを書いてみた

2〜3時間で軽く書いてみました。 初めて Scala をガッツリ書いたのであまり Scala らしさが感じられないコードですが…。 [コード] import scala.sys.process._ object Lifegame { type Table = List[List[Boolean]] val o = false val x = true def width(ta…

C++ でライフゲームを書いてみた

C++

特に意味はないんですが、C++ でライフゲームを書いてみました。 C++14 で動作します(Windows での動作は未確認。 [コード] #include <cstdlib> #include <thread> #include <string> #include <iostream> #include <vector> int main(){ using table_t = std::vector<std::vector<bool>>; table_t table = { { 0, 0, 0, 0</std::vector<bool></vector></iostream></string></thread></cstdlib>…

Ruby の (1..5) と (1...5) の違い

前者は使っていたけど、後者は知らなかかったので覚書。 範囲演算子 .. を使用した場合は終端を含み、... を使用した場合は終端を含みません。 p (1..5).to_a # => [1, 2, 3, 4, 5] p (1...5).to_a # => [1, 2, 3, 4]

C++14(17) で zip 書いてみた

C++

現状の C++ で zip を書いたらどうなるんだろう、と思って書いてみました。 [コード] #include <iostream> #include <algorithm> #include <vector> #include <tuple> template<typename T, typename U> constexpr auto zip_impl(T v1, U v2){ auto vi1 = std::begin(v1); auto vi2 = std::begin(v2); using value_t = dec</typename></tuple></vector></algorithm></iostream>…

Ruby の () の戻り値

Ruby だと () の戻り値は nil になるらしい。 p () # => nil p ().nil? # true ほぼ使うことはないだろうけど知らなかった(そもそも () だけ評価出来ると思ってなかった。 ちなみに #call が呼び出されるわけではない。 class X def call "call" end def fu…

C++17 のクラステンプレートのテンプレート引数推論を使ってみて

C++

C++17 では『クラステンプレートのテンプレート引数推論』という機能が新しく追加されました。 どういう機能かというと C++17 以前では以下のようなクラステンプレートを使用する場合はテンプレート引数を明示化する必要がありました。 template<typename T> struct A{ A</typename>…

C++ で Non-static data member initializers に auto が使えないのがつらい

C++

C++14(17) になっても Non-static data member initializers に auto が使えないのがつらい、という話です。 [Non-static data member initializers とは] Non-static data member initializers とは C++11 から追加された言語機能の一つで クラスのメンバ変…

C++ で関数引数の評価順序を保証したかった

C++

[関数引数の評価順序] C++では関数を呼び出す際に渡される引数の評価順序は未規定になっています。 どういうことかというと次のようなコードの場合、処理系によって出力される値が異なる可能性があります。 template<typename T> auto print(T value){ std::cout << valu</typename>…

C++ の可変引数リストに non trivial な値を渡すとコンパイルエラーになる

C++

以下のようなコードを Clang でコンパイルしたところエラーになりました。 [](...){}(std::string("homu")); // error: cannot pass object of non-trivial type 'std::string' (aka 'basic_string<char, char_traits<char>, allocator<char> >') through variadic method; call will abort</char></char,>…

C++17 の std::optional に無効値を設定する

C++

C++17 では Boost.Optional が新しく標準ライブラリ入りしました。 Boost.Optional で無効値を指定する場合は boost::none を使っていたんですが、標準ライブラリの std::optional では std::nullopt を使用して無効値を指定します。 [ソースコード] #includ…

void でキャストすることで "unused" の警告を回避する

元々は C言語?で使われているようなハックらしいのですが、知らなかったので覚書。 さて、例えば次のように関数の引数を assert チェックしてる関数があるとします。 void func(int value){ assert(value == 42); } この場合、デバッグビルドでは問題ないん…

Ruby で任意の異なるクラスのオブジェクトを #uniq するときの注意

元ネタ Rubyむずい…うむむむむむむむうむ[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ https://t.co/buooxLKDHW— 異常者 (@h1manoa) 2017年6月8日 と、いうことでちょっとやってみたら見事にハマったので覚書 元のコード class Hoge def initialize(num) @num = num end d…

RSpec で pending しても before :context が呼ばれてしまう

結果だけ先に書いてしまいますが『pending しているスコープで before :context を定義すると before のブロックが呼ばれます』。 どういうことかというと次のように before :context 内で例外が発生した場合、テストが失敗してしまいます。 describe X do #…