今頃手書きノートは必要か?

あっという間2018年終わり、2019年が始まりましたね。
オリンピックもあと少しです。

私は結構の怠け者だと思います。面倒なことをやらないで済むために、一生懸命面倒なことをやっていますし、二度と勉強しなくていいように、何でも勉強しておきたいと思ってます。笑

年末年始の休暇を利用してたくさん勉強しようと思い、結構の数の本を図書館から借りました。
冷静に考えてみると、年末年始の毎日本を読んでも私のスピードでは無理だろうというぐらい借りました。
これじゃダメだよなぁと思ったので、さらに速読の本を借りました。。。

これって解決になる?!なんだか上と同じ理屈になったような〜〜〜笑

実は以前から速読に興味があり、まだ出来ていない身だから、本当にそのようなことが可能かは疑問に思います。
図書館で速読の本を探していたら、同じコーナーに速読に関する反論を唱えるような本もありました。

読書は1冊のノートにまとめなさい」という本です。

気になったので、それも速読の本と一緒に借りました。

その本を読むと、何だか螺旋を描きながら中心点に切り込むような気がしました。
まぁ、これだけでなく、他のもそのような前置きがたくさんあってからの要点の本がたくさんあると思います。
どうせなら、まず結論、それから解説、最後に応用のほうがいいような気がします。
その結論に賛同する、もしくは既に分かっているなら、続きは省略していいし、疑問があるなら、解説を読めばいいというような感じでいいではないでしょうか。

子供の教育にも同じこと言えると思います。
最初から習おうとすることの使い道を示してほしいですね。
社会人になってから、学校に通ってる時に、もっとあれを勉強すればよかった、これも習ったんだけど何だっけ?その時覚えとけば良かったと後悔するのは、習ってる時に何のためにやっているか分からないからではないでしょうか。

話しを飛躍しすぎましたが、それはそれとして気になりました。

もう1つ気になったのは、アマゾンで書かれたレビューです。
本読んだ後に他人のレビューを読むのはどうかと思いますが、今回は偶然ということで少し読みました。

本の中で読みたい本のリストが紹介され、著者が作ったテンプレートがあるということで、URLも貼っていましたが、既に古い本のようで、出版会社が社名を変えてドメインも変わったので、本にかかれたテンプレートには辿り着きませんでした。
ドメインが変わっても、コンテンツは残ってるでは?と思い、そのサイト内で探してみた結果、アマゾンの販売ページに辿り着きました。
ついでだから、そのレビューを読みました。

多くの方は、紙に書くことを問題視していました。
手で書くことが続かないと言われれば仕方ないかもしれませんが、紙とデジタルの検索性や携帯性などで比較するのは、その本の内容ではないような気がします。
そのようなことで評価するのはいかがなものかと思います。

実は私も当初から本当はEvernoteに書くべきではないかと思いました。
さらに動揺させているのは、その本の後半でもデジタル化の方法を紹介してました。
あくまでもノートへの索引ですが、著者の方法について、最初は普通のテキストですが、最近はExcelだと書いてあります。

しかし、なぜかそのようなレビューを読んだ時にひらめきました。

ノートに書いても、紙の本のデジタル化みたいに、その後裁断してスキャンすればいいじゃん!?と。

さらに、文字認識ソフトを使えば(私が書いた汚い字を読めてくれれば)、検索もできるはずです。

ということで、私もノートに書くことを実践しています。
方法はどうであれ、やっぱり継続できることが大切なポイントだと思います。
この本を読む前にも、英語を勉強するためにたくさんの単語をノートに移したことがあるので、この方法は自分に合う気がします。

ちなみに、その英語のノートは読み返すことなく、どこかにしまってしまいました。
その点でいうと、この本で提案した何でも同じノートに書くという一元管理が良いかもしれません。

さらにいうと、本の中にもあるように、ノートに書くことが最終目的ではなく、

読んだ本の内容をなるべく忘れないように、自分の血や肉としていきたい。 P4

なので、この本は1つの方法を提案しているだけであり、最適かどうかは人それぞれ、継続できるかどうかはやってみなければ分からないではないでしょうか。

ところで、さんざん人の話しを結論から言えと言っといて、この記事だって結論先に言ってないんじゃん〜とツッコミが来そうな気がします。笑

はい、大変失礼しました。m(_ _)m
と謝りつつも、ブログは違う気がしています。

まず本ほど長くないんです。
そのため、ポイントとなるところを太字にすることだけでも、ひと目ですぐ分かるようになると思います。

また、このような出来事がありましたのように、その出来事の流れを知っていただき、楽しんでいただきたいと思っています。

どうかお許しを〜

mount_osxfuse: the file system is not available (255)の解決方法

久しぶりにsshfsでリモートHDをマウントしようとしたら、まずFUSEのバージョンが古いと言われました。
FUSEはどうやって入れたっけ?!となかなか思い出せないんですが、幸い下記の「設定」画面で「FUSE」に入ると、ちゃんとアップデート機能が用意されました。

Setting FUSE

無事アップデート終わると、再度マウントしようとしたら、今度はこんなエラーが出ました。

mount_osxfuse: the file system is not available (255)

おそらくファイルシステムが更新されてないだけだと思いますが、Macを再起動します?!いあぁ〜ちょっと面倒ですね。
早速調べてしてみたら、参考1で紹介されたように、下記コマンド一発で解決できました。

sudo kextunload -b com.apple.filesystems.smbfs

Unloadするだけでいいのかなぁと思いながらも、再度マウントするとうまくできました。

参考
  1. mount_osxfuse: the OSXFUSE file system is not available (255) fuse: failed to mount file system: Undefined error: 0 #27293

この人たち寒くないの?

あけましておめでとうございます!

皆さん、大晦日のNHK紅白歌合戦見ましたか?

今年はTWICEが登場しましたね。

これは紅白歌合戦でTWICEのパフォーマンスするときの出来事ですが、9歳の長男に
「この人たち寒くないの?」
と聞かれました。

っん!?うぅん〜

「。。。そ、、そういう衣装だから。。。」
と私が答えました。

ちなみに、足派です。^^;

今年も頑張ります!!

OmniDiskSweeperで不要なファイルを削除してもなかなかディスク容量が減らない問題

Macbook Pro 13インチ 2017年 256GBのモデルを使っています。

よくこんなポップアップが出てきます。

うぅん〜余裕があれば、512GBほしいなぁ〜といったところ何も変わらないので、渋々とファイルを整理することにします。

その時はOmniDiskSweeperをよく使います。
現行バージョン1.11 (v30.2)です。

システムフォルダも含めて容量を確認したい場合、参考1が紹介したように以下のコマンドでターミナルから起動すれば良いです。

sudo /Applications/OmniDiskSweeper.app/Contents/MacOS/OmniDiskSweeper

これで結構便利です。

ところが、何回かやっていくうちに、なかなかディスクの容量が減ってないなぁと感じました。

フォルダを巡ってみたところ、/private/var/root/.Trashのフォルダが大きかったことが分かりました!!

これは!?ルートユーザーのゴミ箱!?これだな!!これが原因でしょう!

OmniDiskSweeper画面左下にある「Trash」で削除すると、ファイルやフォルダはゴミ箱に入ります。
ルートユーザーでアプリを実行しているので、言われてみれば当然ですが、ルートのゴミ箱に入り、完全に削除しないとディスク容量は空きません。

/private/var/root/.Trash直下の全部を削除したら、18GBも空きまして、これでしばらくは凌げるでしょう〜

みなさんもOmniDiskSweeperでファイルを削除しても減らないなぁ〜と思ったら、同じところを覗いてみるといいかもしれません!

参考
  1. How to Find & Recover Missing Hard Drive Space

cerealのJSONフォーマットで最後の波括弧が抜ける問題

Unityのゲームデータ保存で紹介されたシリアライズの方法がなかなかいい感じがしたので、C++の場合でも同じ方法を採用してみたいと思い、C++のシリアライズライブラリcerealを使ってみました。

デモプログラムは無事動作したことを確認し、いざ本番実装となると、構造体をJSONフォーマット(OUT)に変えられましたが、その逆(IN)ができませんでした。
調べたところ、出力(OUT)した結果の一番最後の括弧が抜けることが分かりました。
こんな感じです:

{
    "value0": {
        "value0": 1,
        "value1": 2,
        "value2": 1.5
    }
// 本来ならここにもう一つの波括弧がなくてはいけません

これなら当然JSONとして読み込まず、下記のようなエラーが出ます。

Error: rapidjson internal assertion failure: IsObject()

参考2は同じ問題で、なんと解決策は括弧ブロックにありました。
エラーの例:

int main()
{
  std::stringstream ss;

  cereal::JSONOutputArchive archive( ss );
  SomeData myData;
  archive( myData );

  std::cout << ss.str() << std::endl;

  return 0;
}

正しい例:

int main()
{
  std::stringstream ss;
  { // このブロックがないとダメです。
    cereal::JSONOutputArchive archive( ss );
    SomeData myData;
    archive( myData );
  }
  std::cout << ss.str() << std::endl;

  return 0;
}

デモプログラムのstringstream直後の波括弧ブロックはただソースの見た目をよくするためだと思いましたが、動きまで異なるとは勉強になりました。

参考
  1. cereal – A C++11 library for serialization
  2. The output of json archive using std::stringstream as Output will miss the last “}”

Findコマンドの便利な使い方

基本的な使い方

find . -name "ファイル名"

ディレクトリー直下すべての.txtファイル検索

find . -name *.txt -type f

ファイルサイズ指定

512k以上のファイルを検索:
find . -type f -size +512k

512k以上のファイルをリストアップ:
find . -type f -size +512k -exec ls -lh {} \;
詳細が見れるようになります。

1Mb以下のファイルを削除:
find . -type f -size -1M -exec rm {} \;

詳しくは参考1が参考になります。

時間指定

5分以内修正されたファイルを検索:
find . -type f -mmin -5
直近でいじったファイルの名前が忘れた時に役に立つでしょう。

30日以上経つすべてのファイルを削除:
find . -type f -mtime +30 | xargs rm -f
バックアップスクリプト書く時に役に立ちます。

詳しくは参考2が参考になります。

  1. Linux Tips: Find All Files of a Particular Size
  2. findコマンドのmtimeオプションまとめ

Sublime Text 3をインストールしたらまずやること

テキストエディターとして、Sublime Textはすごく使いやすいと思いますが、OS再インストールなどでインストールし直すとなれば、また最初から設定をカスタマイズしなければいけないのが面倒ですね。
いろいろなプラグインがあり、自由度が高いのはメリットですが、設定に手間がかかるデメリットにもなります。
ここではウェブ開発用に最初の設定をまとめてみました。

環境:
macOS Mojave v10.14.1
Sublime Text v3.1.1
Emmet v2018.06.28.07.42.25

Sublime Textインストールしたら、まずやりたいことは3つです。

  1. タブキーの日本語対応
  2. オートインデント有効化
  3. Emmet

タブキーの日本語対応

このステップはウェブ開発とは限らず、日本語入力行うなら必須になるでしょう。

デフォルトのキーバインディングにあるタブキーを削除(コメントアウト)するにあたって、まず参考1で指摘されたようにすればできます。
しかしながら、Sublime TextメニューからPreferences => Key Bindingsを選んだら、デフォルトのキーバインディングを開くことができたが、編集できない状況になっていました。

これは以下の手順で編集できるようになるはずです。

  1. $HOME/Library/Application\ Support/Sublime\ Text\ 3/Packages/のところに「Default」という名前のフォルダを作ります。
  2. Sublime Textメニュー => Preferences => Key Bindingsを開き、左側のDefaultに(文字入力)カーソルがある状態で保存(command+s)します。
    そうすると、ステップ1のフォルダの下に「Default (OSX).sublime-keymap」という名前のファイルが出来上がるはずです。

    ※このようなことが言われたら、ステップ1の「Default」という名前のフォルダがないことが原因です。

  3. ここからがおまじないみたいなものですが、ウィンドウが2つに分けられた状態のsublime-keymap — Defaultはまだ編集できないはずですが、それを閉じ、$HOME/Library/Application\ Support/Sublime\ Text\ 3/Packages/Default/Default\ \(OSX\).sublime-keymapをSublime Textで開いても、他のエディタを開いてもいいですが、開いたら何もせずに閉じます。
    そうするだけで再度Preferences=>Key Bindingsで確認するとデフォルトが編集できるようになっているはずです。
  4. タブキー関連の設定をコメントアウトして以下になるはずです。
    	// { "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": true} },
    	// { "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": false},
    	// 	"context":
    	// 	[
    	// 		{ "key": "setting.tab_completion", "operator": "equal", "operand": true },
    	// 		{ "key": "preceding_text", "operator": "not_regex_match", "operand": ".*\\b[0-9]+$", "match_all": true },
    	// 	]
    	// },
    

オートインデント有効化

いろいろなプログラミング言語用のインデントプラグインがありますが、毎回インストールのが面倒というよりも、プラグインごとのショートカットが違うので、しばらく使わないと忘れてしまうほうが困ります。
それ故に、デフォルトのオートインデントだけ有効にしたいと思います。
Preferences=>Key Bindingsのsublime-keymap — Userのほうの角括弧に以下のを追加するだけです。

	{"keys": ["alt+shift+f"], "command": "reindent", "args": {"single_line": false}}

Emmetをインストール

プラグインのインストール方法を紹介する記事は多数あるはずですので、ここは簡単に書きますと、

  1. Command+ctrl+p
  2. 「install」を入力する
  3. 「Package Control: Install Package」を選択
  4. 読込みが終わると「Emmet」を入力
  5. 「Emmet」を選択

Ctrl+eを行末移動に変更

キーバインディングの設定になるので、上記タブキーのコメントアウトと似たような感じになります。

  1. $HOME/Library/Application\ Support/Sublime\ Text\ 3/Packages/のところに「Emmet」という名前のフォルダを作ります。
  2. Sublime Textメニュー => Preferences => Package settings => Emmet => Key Bindings – Defaultを選択
  3. Emmetデフォルトの設定を保存します。
  4. 設定ファイルを閉じ、任意エディタで/Library/Application\ Support/Sublime\ Text\ 3/Packages/Emmet/Default\ \(OSX\).sublime-keymapを開いてまた閉じます。
  5. 再度Sublime Textメニュー => Preferences => Package settings => Emmet => Key Bindings – Defaultを選択
  6. 358行あたりの"ctrl+e""super+e"に変更します。

ここはEmmetデフォルトの拡張ショートカットキー”ctrl+e”を”command+e”に変えてます。
そうすればctrl+eはシステムデフォルトの行末移動に戻ります。

すぐ"ctrl+e"下のブロッグでは”tab”キーの設定もありましたが、それは特に変更しなくても拡張が無効になっています。

試しに新規ファイルに!だけ入力し、タブと"ctrl+e"で反応せず、"command+e"でhtmlのフォーマットが展開されることを確認できれば問題ないと思います。

参考2ではEmmetのKey Bindings – Userに設定できると書かれていますが、私の場合、確かにUserのほうに"command+e"を追加することで、command+eで拡張されるようになりますが、ctrl+eは上書きされず、ctrl+eでも同じ拡張されますので、無効にする必要がありました。
それなら直接デフォルトを変えたほうがいいでは?!と思いましてこのようにしました。

参考3の考え方はすごくいいと思いますが、私の場合、"disabled_keymap_actions": "expand_abbreviation"でctrl+eの展開が無効に出来なかったんです。
なので、その続きもないわけですね。

参考
  1. SublimeText3での日本語入力時Tabキーでの変換候補選択を有効にする
  2. 【技術メモ】SublimeTextでEmmetの展開をcommand+eにする
  3. 【Sublime Text3】 Emmet使用時に ctrl + e での展開と行末への移動を両立させる

Unable to boot device due to insufficient system resourcesの対策法

環境:
macOS Mojave v10.14
Xcode v10.0

XcodeでプロジェクトをiPhone XS Maxのシミュレーターで走らせようとしてら、下記のようなエラーが出ました。

Unable to boot device due to insufficient system resources.

Please see Simulator Help for information on adjusting system settings to allow more simulated devices to boot at once.

maxUserProcs: 709, runningUserProcs: 645, enforcedProcBuffer: 144

結論は参考1で紹介された通り以下のコマンドを実行すれば良いです。

sudo launchctl limit maxproc 2000 2500

しかしこれで再度実行するとしたら、下記のようなエラーに変わりました。

違いとしては下部の段がこれに変わっただけです。

maxFiles: 12288, openFiles: 10990, enforcedFilesBuffer: 1868

再度参考1を見てみたら、回答のコメント欄にXcodeを再起動する必要があると書いた人もいたので、Xcodeを再起動してみたら、上記のエラーも出なく、無事アプリをシミュレーターで動かせました。
そのコメント欄には、再起動する必要ないと書いた人もいたので、人の環境によるみたいですね。

参考
  1. Unable to boot device due to insufficient system resources using Xcode 9

面白いスタッフ紹介ページ

こちらはDoodle MobileのTeamページで作ったgifです。
※少し重いので、少々お待ちいただく必要があるかもしれません。

Doodle Mobile Team

ご覧の通り、スタッフの皆さんはマウスカーソルを追って顔の向きを変えてます。
誰のプロフィールが開かれたら、残りの人たちがその人を見るようにされています。

これだけのことですが、しばらくそのページで遊んでいました。^^;
あっち向いてホイだったり、”平手打ち”を食らわせたりしていました。^^;;;

上下左右それぞれの報告に3枚+真正面の1枚の写真で作っているようです。
面白い紹介ページですね!
皆さんも遊んでみてください。^^b

bitbankの(自動売買)ruby APIの使い方

botによる仮想通貨の自動売買をやってみたいと思い、bitbankにアカウントを作り、5千円振り込んでみました。
最終的にはRailsで動かそうと思ったので、rubyを選びました。

いざやろうと思ったら、現時点公式のドキュメントがあまりにもシンプルであることが分かりました。Orz Orz Orz

こちらが公式APIの紹介です。
bitbank.cc API

そして、rubyのライブラリはこちらです。
https://github.com/bitbankinc/ruby_bitbankcc

rubyライブラリに関するドキュメントは「Installation」と「Usage」だけであり、使う例があって参考になりますが、各メソッドとパラメーターの説明がなかったので、ここで調査した結果をまとめたいと思います。

※現時点最終更新日は2017年12月5日で、10ヶ月未更新ということになります。大丈夫かな?!rubyはマイナーだった?!
※今回はお金と直接関係する部分ですので、改めて申し上げますと、ここで書いたものは私がnode.jsやJavaライブラリの参考や私自身が試した結果を基づいた情報ですので、実際操作による過失などには一切責任負いかねます。m(_ _)m



#!/usr/bin/env ruby -Ilib
require 'ruby_bitbankcc'

bbcc = Bitbankcc.new("YOUR API KEY", "YOUR SECRET KEY") #1
bbcc.read_transactions('btc_jpy') #2
bbcc.read_ticker('btc_jpy') #3
bbcc.read_order_books('btc_jpy') #4
bbcc.read_balance() #5
bbcc.read_active_orders('btc_jpy') #6
bbcc.create_order('btc_jpy', "0.001", 130000, 'buy', 'limit') #7
bbcc.cancel_order('btc_jpy', order_id) #8
bbcc.read_trade_history('btc_jpy') #9
bbcc.read_withdrawal_account('btc') #10
bbcc.request_withdrawal('btc', 'ACCOUNT UUID', '0.001', 'OTP TOKEN', 'SMS TOKEN') #11
JSON.parse(response.body) #12

  1. Bitbankcc.new

    オブジェクト作成、ログインみたいな感じですね。

  2. read_transactions

    そのまま実行すると

    => <RestClient::Response 200 "{\"success\":...">
    

    という感じで出ます。

    私最初にこれを見た時、なんぞやこれ!と思いましたね。
    実は#12のJSON解析で返ってきたレスポンスが見れますので以下実行すれば結果の中身が見れます。

    response = bbcc.read_transactions('btc_jpy')
    JSON.parse(response.body)
    

    こんな感じになると思います。

    => {"success"=>1, "data"=>{"transactions"=>[{"transaction_id"=>22250944, "side"=>"sell", "price"=>"724766", "amount"=>"0.0070", "executed_at"=>1539801871742}, {"transaction_id"=>22250943, "side"=>"buy", "price"=>"724913", "amount"=>"0.0081", "executed_at"=>1539801870475}, ...(略)...
    

    結果の中に”executed_at”のところにタイムスタンプようなものが押され、[“data”][“transactions”]のサイズが60であることから、この文は過去1分間の売買履歴を読み込むことができると推測します。

  3. read_ticker

    上記と同じく下記ので中身見れます。以降説明省略します。

    JSON.parse(bbcc.read_ticker('btc_jpy').body)
    

    こんな感じの結果が返ってきます。

    => {"success"=>1, "data"=>{"sell"=>"725989", "buy"=>"725700", "high"=>"730900", "low"=>"720555", "last"=>"725914", "vol"=>"1421.6657", "timestamp"=>1539803448525}}
    

    これは、、、ティッカーというのは、、、weblioのIT辞書によると、
    ティッカーとは、特定範囲内に文字列を流して表示させる表示方式のことである。右から左(あるいは上から下へ)文字が次々に流れてゆくのを読ませる方式であるので、限られた狭い領域で多くの情報を表示することができる。

    ティッカーの代表的な例としては、新幹線の車内や看板、証券取引所などにある電光掲示板がある。Webページにおいても、左右に文字の流れるティッカー表示が用いられる場合が珍しくない。
    だそうです。

    正直現時点この数字を見てもあまり意味が分かりません。^^;

  4. read_order_books

    現時点の取引量(?専門用語がありそうな、、)を取得できます。

    JSON.parse(bbcc.read_order_books('btc_jpy').body)
    

    実行すると、こんな感じで返ってきます。

    => {"success"=>1, "data"=>{"asks"=>[["726850", "0.0087"], ["726860", "0.0040"], ["726861", "0.0246"], ["726862", "0.2485"], ["726998", "0.0090"],
    ...(中略)...
    "bids"=>[["726800", "0.1209"], ["726672", "0.0076"],...(略)...
    

    いわゆる画面で見る以下のことだと思います。

  5. read_balance

    残高確認ですね。実行するとそのままJSON形式で返ってきます。

    => "{\"success\":1,\"data\":{\"assets\":[{\"asset\":\"jpy\",\"amount_precision\":4,\"onhand_amount\":\"5000.0000\",\"locked_amount\":\"0.0000\",\"free_amount\":\"5000.0000\",...(略)...
    

    5000円入ってるのが分かりますね。^^;

  6. read_active_orders

    有効な注文を読み込む用です。
    何もなければ、こんな感じで返ってきます。

    => "{\"success\":1,\"data\":{\"orders\":[]}}"
    

    注文がある場合は後述します。

  7. create_order

    注文です。
    正直これだけが大事のように思えます。
    他のメソッドのほとんどがreadですので、これらは間違ってもほしい情報が返ってこないだけですが、注文(買い売り)を間違えるとお金が返ってこないことになるかもしれません。

    ここパラメーターは以下に意味のようです。

    順番 意味
    1 btc_jpy 公式は「チャンネル」という名前になってますが、取引通貨のペア
    必要に応じて”btc_jpy”の部分を”xrp_jpy”, “ltc_btc”, “eth_btc”, “mona_jpy”などに変更
    2 0.001 ビットコインの額面、他のチャンネルもあるので、正確に言うと、”btc_jpy”の前者の額面だと思われる
    3 130000 円の額面、上記の同じ理由で、”btc_jpy”の後者の額面だと思われる
    4 buy 買うならbuy, 売るならsell
    5 limit 注文種類
    指値ならlimit、成行ならmarket

    なので、上記の意味合わせて、例の意味は130000円で0.001ビットコインを指値で買う注文になっています。

    例えば今は5000円しかないんですが、上記例をそのまま実行するとこうなります。

    bbcc.create_order('btc_jpy', "0.001", 130000, 'buy', 'limit')
    => "{\"success\":1,\"data\":{\"order_id\":435106822,\"pair\":\"btc_jpy\",\"side\":\"buy\",\"type\":\"limit\",\"start_amount\":\"0.00100000\",\"remaining_amount\":\"0.00100000\",\"executed_amount\":\"0.00000000\",\"price\":\"130000.0000\",\"average_price\":\"0.0000\",\"ordered_at\":1539847734642,\"status\":\"UNFILLED\"}}"
    

    そして、一つ前の有効な注文を確認するメソッドを利用すると、今の注文を確認することができます。

    bbcc.read_active_orders('btc_jpy')
    => "{\"success\":1,\"data\":{\"orders\":[{\"order_id\":435106822,\"pair\":\"btc_jpy\",\"side\":\"buy\",\"type\":\"limit\",\"start_amount\":\"0.00100000\",\"remaining_amount\":\"0.00100000\",\"executed_amount\":\"0.00000000\",\"price\":\"130000.0000\",\"average_price\":\"0.0000\",\"ordered_at\":1539847734642,\"status\":\"UNFILLED\"}]}}"
    

    statusが「UNFILLED」になっているので、その注文をそのまま残せば、13万円の残高がある時点で購入されるんでしょうかね?!

  8. cancel_order

    注文のキャンセルです。
    上記の注文キャンセルには

    bbcc.cancel_order('btc_jpy', 435106822)
    => "{\"success\":1,\"data\":{\"order_id\":435106822,\"pair\":\"btc_jpy\",\"side\":\"buy\",\"type\":\"limit\",\"start_amount\":\"0.00100000\",\"remaining_amount\":\"0.00100000\",\"executed_amount\":\"0.00000000\",\"price\":\"130000.0000\",\"average_price\":\"0.0000\",\"ordered_at\":1539847734642,\"canceled_at\":1539848335003,\"status\":\"CANCELED_UNFILLED\"}}"
    

    もう一度注文を確認すると

    bbcc.read_active_orders('btc_jpy')
    => "{\"success\":1,\"data\":{\"orders\":[]}}"
    

    注文が入っていないことが分かります。

  9. read_trade_history

    取引履歴の読み込み用です。

    例えば成行で0.0001で買う注文をするには

    bbcc.create_order('btc_jpy', "0.0001", 0, 'buy', 'market')
    => "{\"success\":1,\"data\":{\"order_id\":417094406,\"pair\":\"btc_jpy\",\"side\":\"buy\",\"type\":\"market\",\"start_amount\":\"0.00010000\",\"remaining_amount\":\"0.00010000\",\"executed_amount\":\"0.00000000\",\"average_price\":\"0.0000\",\"ordered_at\":1539849149642,\"status\":\"UNFILLED\"}}"
    

    さらに、有効な注文を確認すると

    bbcc.read_active_orders('btc_jpy')
    => "{\"success\":1,\"data\":{\"orders\":[]}}"
    

    注文が処理されたことが分かります。

    ここのstatusもが「UNFILLED」なんですね?!
    じゃあ、上記の13万円の注文の予想は違うかもしれません。^^;

    そして、その履歴を確認すると

    bbcc.read_trade_history('btc_jpy')
    => "{\"success\":1,\"data\":{\"trades\":[{\"trade_id\":45463140,\"order_id\":417094406,\"pair\":\"btc_jpy\",\"side\":\"buy\",\"type\":\"market\",\"amount\":\"0.00010000\",\"price\":\"726904.0000\",\"maker_taker\":\"taker\",\"fee_amount_base\":\"0.00000000\",\"fee_amount_quote\":\"0.0000\",\"executed_at\":1539775614206}]}}"
    
  10. read_withdrawal_account

    取りやめのアカウントを読み込む用?
    ここは不明です。
    とりあえず実行してみるとこうなります。

    bbcc.read_withdrawal_account('btc')
    => "{\"success\":1,\"data\":{\"accounts\":[]}}"
    

    パラメーターに通貨の記号がありますので、取りやめになった取引なら分かるような気がしますが、なぜかアカウントですね。

  11. request_withdrawal

    前項と似た理由で、不明です。
    bitbankの「アカウント」メニューに「アカウント連携」があり、bitbank Tradeとのアカウント連携などの情報がありますので、それ関連かもしれません。

  12. JSON.parse(response.body)

    前述の通り、JSON解析です。
    公式の紹介では、これを最初のところに持っていくべきだと思います。

一通り以上です。

最後に先程買った0.0001ビットコインを売りたいと思います!

bbcc.create_order('btc_jpy', "0.0001", 0, 'sell', 'market')
=> "{\"success\":1,\"data\":{\"order_id\":497525118,\"pair\":\"btc_jpy\",\"side\":\"sell\",\"type\":\"market\",\"start_amount\":\"0.00010000\",\"remaining_amount\":\"0.00010000\",\"executed_amount\":\"0.00000000\",\"average_price\":\"0.0000\",\"ordered_at\":1539850841760,\"status\":\"UNFILLED\"}}"

そして、履歴を確認すると

bbcc.read_trade_history('btc_jpy')
=> "{\"success\":1,\"data\":{\"trades\":[{\"trade_id\":45678136,\"order_id\":497525118,\"pair\":\"btc_jpy\",\"side\":\"sell\",\"type\":\"market\",\"amount\":\"0.00010000\",\"price\":\"724384.0000\",\"maker_taker\":\"taker\",\"fee_amount_base\":\"0.00000000\",\"fee_amount_quote\":\"0.0000\",\"executed_at\":1539851053689},{\"trade_id\":45463140,\"order_id\":417094406,\"pair\":\"btc_jpy\",\"side\":\"buy\",\"type\":\"market\",\"amount\":\"0.00010000\",\"price\":\"726904.0000\",\"maker_taker\":\"taker\",\"fee_amount_base\":\"0.00000000\",\"fee_amount_quote\":\"0.0000\",\"executed_at\":1539850121143}]}}"

になります。

先程買った時の1ビットコインの単価は726904.0000で、売った時は724384.0000でしたので、-0.252円になりました。Orz