[macOS] マウスの動きが不安定の時の解決方法

マウスが不安定で、マウスカーソルの動きがカクカクする時、ここの方法を参考にNVRAMのリセットをしてみました。

NVRAMリセットは結構久しぶりにやったもんで、リセットしたかどうかわかりませんでした。

昔のMacbookだと、リセットしたあと、ちゃ~んという起動音が明らかに大きくなったり、画面が非常に明るくなった気がしましたが、今回Macbook Pro 2017年モデルでやってみた感じ、何ひとつ変わってない気がします。

本当にリセットしたのかなぁ?!

それを確認する方法があるようで、以下のコマンド確認できます。

nvram -xp

実行結果:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>

何も書かれてない=リセットできたって意味かな?!

ちなみに、以下のコマンドでもNVRAMリセットできるみたいです。

sudo nvram -c

これは実に便利です。クラムシェルモードで使ってる時、わざわざいろいろと外さなくてもリセットできるからです。

参考:

  1. Macでマウスの動きが不安定で遅い!すぐに直った方法
  2. Confirming NVRAM Reset

[macOS] HomebrewでMongoDBをインストール

MongoDBの公式で紹介されたようにインストールできます。

  1. brew tap mongodb/brew
  2. brew install mongodb-community@4.4

サービスの起動:

brew services start mongodb-community@4.4

または

brew services start mongodb/brew/mongodb-community

サービスの停止:

brew services stop mongodb-community@4.4

または

brew services stop mongodb/brew/mongodb-community

コマンドが長いので、以下のようにエイリアスを作ると便利です。
~/.zshrcや~/.bashrcとか。

alias mongod-start='brew services start mongodb/brew/mongodb-community'
alias mongod-stop='brew services stop mongodb/brew/mongodb-community'

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

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

gitのファイルパーミッションによる違いの対応


※画像はイメージです。

Mac上にあるソースコードをフォルダごとFAT32フォーマットの外付けHDDにコピーし、それをまたMac上に戻した時、何も変更がないはずですが、git statusで見ると、全てのファイルに変更があるように出てしまいます。

具体的にgit diffで見てみると、以下のようにファイルのパーミッションだけの変更だったのが分かります。

...
old mode 100644
new mode 100755
diff --git a/Classes/AppDelegate.cpp b/Classes/AppDelegate.cpp
old mode 100644
new mode 100755
diff --git a/Classes/AppDelegate.h b/Classes/AppDelegate.h
old mode 100644
new mode 100755
diff --git a/Classes/Config.h b/Classes/Config.h
old mode 100644
new mode 100755
...

最初は力技でchmod 644 {プロジェクトフォルダ}で戻そうとしたら、フォルダごとアクセスできなくなりました。(; ̄Д ̄)なんじゃと?
フォルダなので、chmodの-Rが抜けましたね。
それはchmod a+x {プロジェクトフォルダ}で戻すことができました。
ファイルだけ戻したいのでchmod -R 644 {プロジェクトフォルダ}/*.*でやってみたら、proj.androidのようなフォルダ名もあるので、それらまたアクセスできなくなりました。。。まあ、そうなりますよね。

ちょっと待ってよ〜gitの最後にコミットした状態に合わせて手動変更よりも、git reset的なことやればいいじゃん?!思ったが、あいにくまだコミットしていないソースコード変更も混ざってることに気づきました。
何かパーミッションだけ戻す方法ないかと調べてみたら、まあ、ありますよね〜

gitでそのような変更を無視するような設定もできるのようですが、それだとなんだか違う気がしますので、下記参考に変更されたパーミッションを戻せました。
https://stackoverflow.com/a/4408378

具体的に、一つの方法は下記一行実行しておしまいです。

git diff -p -R --no-color \
    | grep -E "^(diff|(old|new) mode)" --color=never  \
    | git apply

または下記のように、まずgitにpermission-resetというaliasを追加します。

git config --global --add alias.permission-reset '!git diff -p -R --no-color | grep -E "^(diff|(old|new) mode)" --color=never | git apply'

そして、

git permission-reset

実行すればパーミッションをリセットできます。

今後もこういう時があるだろうということで、後者で試してみました。
無事パーミッションだけが元に戻りました!

AppStoreにサインインする時の確認コードを入力するところがない

こんにちは。洋平です。

新しく取ったアップルのアカウントをiPhoneのAppStoreからサインインしようとすると、確認コードが必要と言われました。

当然ながらMacbookのほうではログインしようとする場所が表示され、許可すると確認コードが表示されましたが、困ったことにどこにそのコードを入力すれば良いか分かりませんでした。

以下のようなポップアップを期待していましたが、いくら待っても入力のポップアップで出てきませんでした。

※アップルのサイトから切り取り

その後、アップルのフォーラムで同じ問題を直面したQ&Aが見つかり、参考になった回答によると、なんと確認コードは2回目のログイン時に、パスワードに続けて入力すればよかったです。

パスワードがabc、確認コードが123だとすると、パスワード入力欄にabc123と入力すれば良いということです。

後から実際サインインできなかった時のポップアップにも「パスワードに続けてこのコード」的な文章があった気がしましたが、どこかで上記のような確認コード入力するポップアップを見たことがあったので、ついついその先入観から入ってしまったようですね。