2016-06-01から1ヶ月間の記事一覧

Gemfile で github から gem を読みこむ

Gemfile では次のようにして github からも gem を読みこむことが出来ます。 gem "kiriban", github: "osyo-manga/gem-kiriban" この時にリポジトリ名と gem の名前が異なっていても問題はないです。

line-bot-sdk-ruby で proxy を設定したかった

Ruby で LINE の bot を作るときに line-bot-sdk-rubyが利用出来ます。 GitHub - line/line-bot-sdk-ruby: SDK of the LINE BOT API Trial for Ruby これを利用すれば、比較的簡単に LINE の bot を作ることが出来ます。 [proxy を設定する] LINE の bot を …

Vim script で辞書関数から辞書関数を呼び出すときの問題の回避方法

Vim

昨日の続き 昨日は function() を利用して辞書を束縛したのですが、もうちょっと簡単な回避方法があります。 [辞書関数を配列として保持する] let s:A = {} function! s:A.call() " self は s:A になる echo "self is s:A :" self is s:A echo "self is s:B …

Vim script で辞書関数から辞書関数を呼び出すときの注意

Vim

さて、次のように辞書関数を辞書の値をして持ちたい場合があると思います。 let s:A = {} function! s:A.call() " self は s:A ではなくて s:B になる echo "self is s:A :" self is s:A echo "self is s:B :" self is s:B endfunction let s:B = {} " 辞書…

Problem - 208A - Codeforces を C++ で書いた

C++

[元ネタ] Round #130 A. Dubstep|Codeforces - C++競プロ学習日記(仮) https://t.co/SOOFOecs0vちわわさんのこれ、Pythonで正規表現なしワンライナーやってみました。https://t.co/b4vSSCg4kw— みやこ@まだPython2で消耗し文字数 (@MiyakoDev) 2016年6月25…

neco-look をすべての filetype で呼び出す

Vim

[追記] @pink_bangbi @manga_osyo サポートしたのでkey に_ 使うようにしてください— 暗黒美夢王(deoplete dev) (@ShougoMatsu) 2016年6月26日 との事なので、最新版では以下のように設定すればおっけーです。 let g:neocomplete#text_mode_filetypes = { "_…

Vim script で sleep sort

Vim

タイマー実装されたのでやってみた。 function! s:echo(msg, ...) echo a:msg endfunction function! s:sleep_sort(list) for i in a:list call timer_start(i * 1000, function("s:echo", [i])) endfor endfunction call s:sleep_sort([10, 4, 6, 8, 9, 7, …

Vim の input() でキャンセル(<Esc>)されたか判定する

Vim

Vim の input() でキャンセル(<Esc>)されたか判定出来ないかぐぐってたら以下のようなワークアラウンドがあったので覚書。 " see: https://github.com/vim-jp/issues/issues/467#issuecomment-23766972 scriptencoding utf-8 function! s:input(...) abort new </esc>…

Vim でグラフィカルにフォントを設定する

Vim

小ネタ的な話なんですが、面白かったので紹介。 GUI 版 Vim では 'guifont' オプションを使用してフォントを設定することが出来ます。 set guifont=Osaka-等幅\ 12 このオプションに対して set guifont=* という風に入力すると、以下のようにフォント選択ダ…

Vim で関数の引数を束縛

Vim

いまさらですが Vim の function() に関数の引数を束縛する機能が実装されました。 第二引数に束縛する引数を配列で渡す事が出来ます。 function! s:plus(a, b) return a:a + a:b endfunction let s:Plus3 = function("s:plus", [3]) echo s:Plus3(5) # => 8…

C++ の stream 入力で末尾にゴミが入ってるかどうかを確認する

C++

Twitter でツッコまれたんですが、例えば以下のように std::stringstream を使った場合はエラーになりません。 #include <iostream> #include <sstream> int main() { // 末尾にゴミがある std::stringstream str("123x"); int x; str >> x; std::cout << x << std::endl; // =></sstream></iostream>…

Vim で timer_stop() を使うときの注意

Vim

さて、最近(でもないけど) Vim に timer_start() と timer_stop() という組み込みの timer 関数が追加されました。 これは一定時間ごとに処理を呼び出す事ができる関数群です。 function! Test(timer) echo 'Handler called' endfunction " 500ms ごとに T…

Android Studio アンチエイリアス を有効にする

Android Studio をインストールしたディレクトリの /bin/studio64.vmoptions(or /bin/studio.vmoptions) ファイルの末尾に -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dsun.java2d.xrender=true を追加します。 [アンチエイリアスなし] [アンチ…

conan を使って C++ で json を扱うためのパッケージを読みこむ

C++

conan のどんなパッケージがあるか調べていたら json を読みこむためのパッケージがあったのでせっかくなので試してみました。 C/C++ Open Source Package Manager GitHub - open-source-parsers/json: JSON for Modern C++ [conanfile.txt を作成する] 適当…

gcc でファイルからオプションを読みこむ

C++

gcc で @{filename} とすればそのファイルに書かれてるオプションをコマンド引数に追加できるみたい。 [options.gcc] -std=gnu++1y -I~/build/boost/boost_1_61_0 [test.cpp] #include <iostream> #include <boost/config.hpp> int main(){ std::cout << BOOST_COMPILER << std::endl; re</boost/config.hpp></iostream>…

C/C++ のパッケージマネージャーである conan を使ってみた

C++

TL で見かけたので試してみた。 C/C++ Open Source Package Manager [conan のインストール] conan は pip からインストールすることが出来ます。 $ pip install conan $ conan --version Conan version 0.9.4 他には brew やバイナリが配布されているみたい…

C++17 の std::void_t

C++

C++17 では std::void_t というメタ関数が追加されるらしい。 これは、 template<typename...> using void_t = void; と、いう風に定義されています。 [使い方] このメタ関数は次のように使うみたい。 template<typename, typename = std::void_t<> > struct has_type_member : std::false_type {}; template<typename T> </typename></typename,></typename...>…

Vim の辞書関数が強化されてて驚いた

Vim

さて、辞書関数といえば以前は call() を介さないと呼び出すことは出来ませんでした。 let dict = { "value" : 3 } function! dict.add(a) return self.value + a:a endfunction let F = dict.add " call() を介して辞書を指定する必要があった echo call(F,…

Vim の function() にコマンドを渡したかった

Vim

call function(":echo")(42) みたいな事ができると便利じゃないですかね! [やってみた] function! s:funccmd(cmd) let func = { "cmd" : a:cmd } function! func.call(...) execute self.cmd . " " . join(map(copy(a:000), "string(v:val)")) endfunction …

marching.vim でプリコンパイル済みヘッダーを使用して C++ のコード補完を高速にする

C++

先日、Clang でコンパイル済みヘッダーを試したのですが、これを marching.vim でも使ってみたいと思います。 今回はひとつのプリコンパイル済みヘッダーファイルを共有して使ってみます。 GitHub - osyo-manga/vim-marching: Async clang code completion. …

C++ で特定の型での可変長引数を受け取る

C++

例えば『int 型の可変長引数』みたいな感じで受け取るコードを考えてみた。 [std::initializer_list を使う] std::initializer_list<int> で受け取ります。 void print(std::initializer_list<int> xs){ for(auto&& x : xs){ std::cout << x << std::endl; } } print({</int></int>…

Clang でプリコンパイル済みヘッダーを使う

C++

Clnag でプリコンパイル済みヘッダーを使ってみたので覚書。 [プリコンパイル済みヘッダーを生成] まず、プリコンパイルしたヘッダーファイルを用意します。 // header.h // とりあえず、重そうな標準ライブラリを列挙 #include <iostream> #include <vector> #include <map> #inclu</map></vector></iostream>…

Vim で 2つの textobj の対象を入れ替える operator つくった

Vim

つくりました。 と、いっても最初に公開したのは2年ぐらい前なんですが。 [プラグイン] NeoBundle "osyo-manga/vim-operator-swap" ソースコード:https://github.com/osyo-manga/vim-operator-swap [使い方] <Plug>(operator-swap-marking) で対象の textobj を設</plug>…

Ruby でメソッドを多重定義するためのライブラリをつくった

まあつくったのは結構前なんですが、つくりました。 Ruby は動的型付け言語なので、静的型付けのような型によるメソッドの多重定義は出来ないんですが、このライブラリによって静的型付けのようなメソッドの多重定義を実現する事ができます。 require "stitc…

C++ で標準入力から文字列を n 回読みこむ

C++

某人が書いてるコードでよくそういう処理が出てくるので簡単に出来ないか書いてみた。 #include <iostream> #include <iterator> #include <algorithm> #include <vector> int main(){ int n; std::cin >> n; std::vector<std::string> v{n} std::copy_n(std::istream_iterator<std::string>{std::cin}, v.size(), v.begin()); </std::string></std::string></vector></algorithm></iterator></iostream>…

Vim でハイライトする operator をつくった

Vim

久々に Vim プラグインをつくった。 [インストール] NeoBundle 'osyo-manga/vim-operator-highlighter' ソースコード:osyo-manga/vim-operator-highlighter [使い方] <Plug>(operator-highlighter) をマッピングします。 nmap <Leader>h <Plug>(operator-highlighter) " 1つのみ</plug></leader></plug>…

C++14 で 1_upto(10) みたいな風に書く

C++

『n 回のループを簡単に書きたい〜』ってことでユーザ定義リテラルを使って upto を書いてみた。 [コード] template<typename T> struct numeric_range{ struct iterator{ auto operator ++(){ return ++value; } auto operator *() const{ return value; } bool operato</typename>…

BOOST_PP_COUNTER

C++

BOOST_PP_COUNTER を利用すると __COUNTER__ のような事が出来ます。 ただし、__COUNTER__ とは違い、マクロを呼び出す度に BOOST_PP_UPDATE_COUNTER() で更新してやる必要があります。 [コード] #include <iostream> #include <boost/preprocessor/slot/counter.hpp> int main(){ int value = 0; value += B</boost/preprocessor/slot/counter.hpp></iostream>…

C/C++ の __COUNTER__ マクロ

C++

__COUNTER__ は 0 から始まり呼び出す度に +1 されるマクロです。 [コード] #include <iostream> int main(){ ary auto = { __COUNTER__, __COUNTER__, __COUNTER__, __COUNTER__ }; for(auto&& it : ary){ std::cout << it << std::endl; } return 0; } /* output: 0 </iostream>…

C++11 で Boost.MPL.lambda みたいなの書いてみた

C++

書いたことがなかったので書いてみた。 [コード] #include <utility> #include <tuple> template<std::size_t Index> struct placeholder{ template<typename... Args> struct apply : std::tuple_element<Index, std::tuple<Args...>>{}; template<typename... Args> using apply_t = typename apply<Args...>::type; }; using _1 = placeholder…</args...></typename...></index,></typename...></std::size_t></tuple></utility>