アラサーが夏目漱石の「それから」を読んで、麺麭(パン)のために働らくことに思いを馳せる

最近、まとまった暇ができると青空文庫を読んでいます。

 青空文庫は、誰にでもアクセスできる自由な電子本を、図書館のようにインターネット上に集めようとする活動です。
 著作権の消滅した作品と、「自由に読んでもらってかまわない」とされたものを、テキストとXHTML(一部はHTML)形式に電子化した上で揃えています。
青空文庫編 青空文庫早わかり

リーダーアプリもあります。

play.google.com

今日、題材にするのはこちら。
夏目漱石 それから

読みはじめたきっかけ

学生の頃から続いている勉強会がありまして、ある回で「みんなの生きがいってなに?」というような題材を取り上げました。そのときに課題本にしたのが「仕事なんか生きがいにするな」。かなりセンセーショナルなタイトルですよね。

この本もとても面白いのですが、このなかで引用されていたのが夏目漱石の「それから」でした。

「猛烈には働らけるかも知れないが誠実には働らき悪いよ。食う為の働らきと云うと、つまり食うのと、働らくのと何方が目的だと思う」
「無論食う方さ」
「それ見給え。食う方が目的で働らく方が方便なら、食い易やすい様に、働らき方を合せて行くのが当然だろう。そうすりゃ、何を働らいたって、又どう働らいたって、構わない、只麺麭が得られれば好いと云う事に帰着してしまうじゃないか。労力の内容も方向も乃至順序も悉く他から制肘される以上は、その労力は堕落の労力だ」

この考え方、とても極端ではありますが、私にはかなり共感するものがありました。
というのも、私と同世代の人たちはいま、この種の選択に直面しているように思うのです。

安定した生活とやりがいのある生活は二者択一なのか

主人公の代助はいわば高学歴ニートで、親が資産家なので働く必要がありません。
代助の旧友、平岡は地方で会社員をしていましたが、(自主)退職させられた末、代助を頼って東京に戻ってきます。平岡にとっては、生活をするためには何であろうと(パンのために)働くしかないわけです。

一方、代助はいろんな言い分を並べつつも、実のところ自分のやりたいことを見つけられずにいます。そんな代助も、親から持ちかけられる縁談を断り続けていたため、下手すると勘当されてその安定した地位を失いかねません。

彼の頭の中には職業の二字が大きな楷書で焼き付けられていた。それを押し退けると、物質的供給の杜絶がしきりに踴り狂った。

代助は自分の感情に誠実にあり続けますが、結局のところそれは財政的な安定が前提となっていることがわかります。前提が崩れれば、彼もまたパンのために働かざるを得ません。

ところで、今日のTwitterでこんな話題がありました。

このツイートは就活生に向けた講演会の話ですが、私たちの世代はもう少し上で、会社に入って数年経ち社会の現実が見えてきた頃。
就活時に「安定した大企業」に就職した人たちにとっては、今がもう一度選び直せるチャンスかもしれません。でも、代助のようにやりたいことが見つからず、安定した地位からは抜け出しづらい。仮に「ヘンな仕事して楽しく生きる」ことを胸に秘めていたとしても、結婚や家族のためにそれを諦めることもあるでしょう。
平岡のようにパンのために働いて生きていたら、クラスメイトの代助に笑われるだろうか?

私も含め、みんながどう舵を切っていくのか、楽しみです。

bitFlyerでbitcoinをはじめる(後編)

前回の記事
ndanah.hatenablog.com

bitcoinの購入

銀行口座の承認が降りたので、bitcoinを購入してみます。
ひとまず一番低い手数料の分水嶺がある10万円以上20万円未満を狙って、0.25BTC(今日時点で11万くらい)を購入してみます。
手数料一覧・税 - ビットコイン(Bitcoin)の購入/販売所/取引所【bitFlyer】

ホームから「取引所」か「ビットコイン」を開き、買いたいビットコインを入力します。

「買う」をタップして注文を確定します。

これでbitcoinを手に入れました!

ウォレットをつくる

ウォレットにはいろんな種類があり、一般に

【セキュリティ】
コールド>デスクトップ>ウェブ
【利便性】
ウェブ>デスクトップ>コールド
ビットコインの使い方を知るには、ビットコインを保管するウォレットや取引所の区別から | Hello Vandle[ハローバンドル]

と言われています。bitFlyerに入れたままの状態はいわばウェブウォレットに入っている状態で、運営が不正をしたりハッキングされたりするとbitcoinを失うことになります。なので、高額なbitcoinをウェブウォレットに入れておくのは危険だというのが通説です。
個人的には、ウェブウォレットに移すならbitFlyerに入れたままのほうが良いと思います。別のウォレットに移すのにも送金手数料取られますし。
というわけで、今回はデスクトップウォレットのBitPay(旧Copay)を利用します。
copay.io

私はMac+iPhone使いなので、この組み合わせでインストール手順を追っていきます。
どの環境でもアプリ画面は一緒だと思います。

Mac版のインストール

Copayのサイトからダウンロードのリンクを辿っていくと、GitHubに飛ばされます。
列挙されているリンクのうち、末尾が.dmgのものをクリックしてダウンロードします。*1
f:id:ndanah:20170814174544p:plain:w350
インストールして起動すると、エラーが出て開けない。
f:id:ndanah:20170814174611p:plain:w350
こういうときはcontrolを押しながらクリックして開くと、このアプリケーションを信頼するか聞いてくれるようになって開けます。
OS X Mavericks: 開発元が未確認のアプリケーションを開く

あとはこのサイトを見ながらやればOKです。なぜか英語版で起動したので、英語が読めない人はスクリーンショットの日本語を見ながら進めましょう。
bitclubfun.com

日本語へはSettings→Languageから切り替えられます。ついでに表示通貨もJapanese Yenに変えておきましょう。

BitPayの画面から受取でQRコードを表示

bitFlyerのアプリから、Pay→送金→QRコードをスキャンして送金

これでウォレットに送金できます。送金手数料がかかるので全額は送れません。0.24BTC送金しました。

iPhoneにウォレットを同期する

Mac側のBitPayから、設定→ウォレットと連動から対象のウォレットを選び、その他のオプション→ウォレットをエクスポート→QRコードと選ぶと、ウォレットを表すQRコードが表示されます*2

iPhoneApp StoreからBitPayアプリをダウンロードします。
appsto.re

この画面の「バックアップから復元」を選びます。

右側のアイコンをタップすると、QRコードの読み取り画面になるので、これでMac側のQRコードを読み取ります。

これでMaciPhoneとで同じウォレットを管理できるようになりました。

*1:前ページでプラットフォーム選んだ意味なくないかこれ

*2:要するにこれがウォレットの秘密鍵ということですね

DRV2605でLRAを動かす

触感フィードバックをしようとして詰まったけど何故か突然上手く行った話。
紆余曲折しているので、結論読んでから実践しましょう。

タイトルの呪文を解説しながら、実験環境を説明します。

DRV2605

www.tij.co.jp
I2Cで叩くと良い塩梅で振動モーターを駆動してくれる便利なIC(超意訳)
ブレークアウト基板はAdafruitやSparkfunから出てます。

Overview | Adafruit DRV2605 Haptic Controller Breakout | Adafruit Learning System

Haptic Motor Driver Hook Up Guide - learn.sparkfun.com

AdafruitはENピンはHIGH固定ですが、SparkfunはENピンが出ているので実デバイスに乗っけるならこちらを選んだほうが良さそう。
しかし私はSparkfunから出ていたのを知らずにAdafruitの方を買ったので、この記事ではAdafruitを使います。マルツで買いました。
触感フィードバックモジュール 2305の通販ならマルツオンライン

Sparkfunのほうはスイッチサイエンスで売っています。
DRV2605L搭載 触覚フィードバックモータードライバ - スイッチサイエンス

LRA

リニア・バイブレータ(LRA:Linear Resonant Actuator)。コイルに電流を流すことで電磁力を発生させ、これと磁石との反発力を使ってコイル自体を上下に振動させるものだ。
最新アナログ基礎用語集 - ハプティクス(触感フィードバック) - TI

いわゆるガラケーに入ってたのは偏心モーター(ERM)で、ブルンブルンって感じの振動でしたよね。最近はカチっというクリック感が出せるLRAが主流だと思います。
LRAにはリンク先の絵にあるコイン状のものと、iPhoneでTaptic Engineと呼ばれているような四角いものがあります。*1

LRAは秋月で調達。ちょっとデカイですが、Taptic Engineと同じで横方向に動くタイプです。
リニア振動アクチュエータ LD14−002: パーツ一般 秋月電子通商 電子部品 ネット通販

動かしてみよう

結線は超簡単。ArduinoのI2C用のピンをつなぐだけ。
Wiring & Test | Adafruit DRV2605 Haptic Controller Breakout | Adafruit Learning System

AdafruitからArduino用ライブラリが配布されてるのでこれを使います。
GitHub - adafruit/Adafruit_DRV2605_Library: Arduino library for Adafruit DRV2605L Haptic Controller Breakout

サンプルコードからbasicを書き込み、いざ…

しーん

なんでやねん。Adafruit_DRV2605::begin()を見に行くと

Adafruit_DRV2605.cpp

  // ERM open loop
  
  // turn off N_ERM_LRA
  writeRegister8(DRV2605_REG_FEEDBACK, readRegister8(DRV2605_REG_FEEDBACK) & 0x7F);
  // turn on ERM_OPEN_LOOP
  writeRegister8(DRV2605_REG_CONTROL3, readRegister8(DRV2605_REG_CONTROL3) | 0x20);

デフォルトはERMのオープンループ設定らしい。
useLRAという関数が用意されているので、これを使う。ついでにLibraryもLRA用の6を選択する。

basic.ino

void setup() {
  Serial.begin(9600);
  Serial.println("DRV test");
  drv.begin();
  
  drv.useLRA();
  drv.selectLibrary(6);
  
  // I2C trigger by sending 'go' command 
  // default, internal trigger when sending GO command
  drv.setMode(DRV2605_MODE_INTTRIG); 
}

これでも動かなかった。なんでー?
電流が足らないのかなーと思い、安定化電源つないだりオシロ覗いたりしたけど原因が分からず。
GitHubで他のライブラリを探してみる。AdafruitとSparkfun以外で2つ見つかる。

FlexModule/haptic/LRA/DRV2605L/software/arduino/DRV2605 at master · FyberLabs/FlexModule · GitHub

GitHub - Seeed-Studio/Grove_Haptic_Motor

このうち、後者で動いた。Auto calibrationも機能している模様。*2
f:id:ndanah:20170814111847p:plain

やはりAuto Calibrationが要るのか?と思い、もう一度Adafruitのプログラムを書いてみる。

Buzzzz

動いた(白目)
結局、同じ現象を再現できず。どうもRATED_VOLTAGE(0x16)とOD_CLAMP(0x17)が小さいと鳴らないので、このせいだったのかもしれないが、電源を入れ直すとデフォルト値に戻るので理屈が合わない。
なお、データシートには明示されていないが*3、上記2つのパラメータはどうも絶対値(つまり定格3Vなら0x03)ではなく、入力電圧に対する比率(0xFF=100%)のような気がする。
振動モーターの仕様をみると

・駆動電圧:2V~6V
・駆動電流:120mA(@3V、バイポーラ駆動、150Hz、デューティー比50%)
・コイル構成:1相(バイポーラまたはユニポーラ駆動)
・コイル仕様:直流抵抗25Ω、インダクタンス210μH(@120Hz)
・本体共振周波数(fo):約150Hz(配線材、固定方法等によって変動します)
リニア振動アクチュエータ LD14−002: パーツ一般 秋月電子通商 電子部品 ネット通販

この場合、5Vを与えていて3V定格で動かすならRATED_VOLTAGE=0x99、OD_CLAMP=0xFFでいいのかな?自信ないですが、ひとまず焼けはしなかったです。

結論

よくわかんないけど動いた。

AdafruitのライブラリにAuto calibrationを追加したので、ひっそり公開しておきます。
GitHub - acho702i/Adafruit_DRV2605_Library at AutoCalibration

bool Adafruit_DRV2605::autoCal(uint8_t ratedVoltage, uint8_t overdriveClamp, uint8_t driveTime)

git上のスケッチではデフォルト値を入れてあります。
DRIVE_TIME(0x1B)はデータシートによると周期の半分を入れれば良いらしい。
Optimum drive time (ms) ≈ 0.5 × LRA Period
というわけで、今回の振動モーターでは5Vを繋いだ前提で

autoCal(0x99,0xFF,0x03)

として、モーターを固定してから実行すればOK。

*1:Androidは大概コイン状のものが載っていますが、Taptic Engineと比べると触感のシャープさに欠けますね。チューニング次第かもしれませんが。

*2:initがfailしていますが、これはinitに正常終了を表す0を返すためのリターンパスが書かれていないためのようです。

*3:英語力と読解力が貧弱なだけかもしれない

bitFlyerでbitcoinをはじめる(前編)

分裂騒動も終わったし、お盆休みで暇だし、この機会に話題のbitcoinを持っておこうと、最大手のbitFlyerにアカウントを開設しようと思い立ちました。

いろんな取引所があってどれがいいやらサッパリですが、初心者はセキュリティや資金力で安心感のある大手を選んでおけば問題ないでしょう。

簡単すぎて結局あまり見てないけど、たぶんここを見ながらやればいける。
bitFlyerの口座開設の手順はこれを読めばわかる!

あっという間に開設できました。下の項目のうち「転送不要書留郵便のお受け取り」以外が完了すると、ウォレットクラスからトレードクラスになれます。*1

スマホ版webからは入出金できないようので、PCかアプリを使いましょう。私はiPhoneアプリを使います。ログインパスワードはbitFlyerからの最初のメールに書かれています(変更しておきましょう)。
bitFlyer Wallet - Bitcoin trading made easy on the App Store
マイアカウントを開くと、入金のところにマークがついてます。まずはここを開いて日本円を入金します。

私は銀行振込で入金しました。なので続きは週明けに。

(2017/8/14) 続き書きました。
ndanah.hatenablog.com

*1:この辺の説明が画面に出てこないの、なんか不親切ですよね…

甲斐駒ケ岳・仙丈ヶ岳の山小屋を比較してみる

8月4日(金)〜6日(日)の2泊3日で仙丈ヶ岳甲斐駒ケ岳に登ってきました。
山小屋は1ヶ月前に予約したのですが、とくに土曜日はいっぱいでキャンセル待ち…!
そんな事情もあって、ふもとにある2つの山小屋に1泊ずつしたので、比較してみようと思います。
小屋の写真はあまり撮らなかったので(変態だと思われるじゃん?)インターネッツの海から探したリンク貼っておきます。

比較表
こもれび山荘 長衛小屋
旧名称 長衛小屋 北沢駒仙小屋
所在 長野県 山梨県
素泊まり 5,500円 5,200円
2食付 8,500円 8,200円
水場
トイレ 室内(洋式) 室外
寝具 毛布 布団
カーテン 全周(1F)
なし(2F)
両サイド
読書灯 スイッチ有(1F)
なし(2F)
一斉点灯
シャワー 有(500円)
電源 有(共用)
電波 圏外 圏外
荷物預かり 無料 有料
朝食 弁当 弁当
その他 バス停近く テント場近く

北沢峠こもれび山荘(長衛荘)
南アルプス長衛小屋(北沢駒仙小屋)

小屋名がまぎらわしい

建て替え時に小屋名が入れ替わったらしく、写真がないとどっちの話なのか分からないことがしばしば。
しかも、県が違うからか、公式情報が並ぶこともない。まさに初見殺し。
どちらも建て替えられて間もないようで、文句なく超きれいです。
料金は若干、長衛小屋のほうが安いようですが、そんなことより自分の希望にあった小屋を選びましょう。

テント泊との混合パーティなら長衛小屋が便利

「食事も泊まりも小屋で」という人には、こもれび山荘をおすすめします。
トイレも室内にありキレイなので、ほとんどカプセルホテルに泊まってる感覚です。
自炊を楽しんだり、テント泊との混合パーティの場合は長衛小屋がおすすめです。
テント場はすぐ目の前。そばに川が流れているので、食材や酒を冷やすこともできます。
室内のトイレはなぜか使えず、小屋すぐ隣の公衆トイレを使うことになっていました。こもれび山荘と比べるとだいぶワイルドな感じになります。
長衛小屋には談話スペースがありますが、こもれび山荘は夕食やその準備のあいだ談話スペースが無く、談話や軽食には屋外のベンチを使うことになります。
山小屋の本を読んだり、山仲間と談話をするのが山小屋の醍醐味だったりしますよね。そういう雰囲気を味わうなら長衛小屋のほうが良いでしょう。
こもれび山荘と長衛小屋との距離は5〜10分程度ですが、天候や身体のコンディションによっては移動するのが億劫になります。

テント場からみた長衛小屋。すぐそこ

シャワーをとるかカーテンをとるか

どちらの小屋も蛇口をひねれば飲用水が出てくるほどに、水は豊富です。
さらになんと、長衛小屋にはシャワーがついています。着替え込み15分の枠で予約利用、料金は500円で累計5分間お湯が出るそうです。山ガールにはうれしいですね!
なお、私はそばの川で行水しました。メンズはこれで十分でしょう。
もうひとつ、山小屋で女子が気にすることといえば、着替え場所。
どちらの小屋もカーテンで仕切られていますが、長衛小屋はカーテンが両サイドしかないので、通路側からは丸見えです。しかも、床まで届いていないという中途半端さ。
これでもあるだけマシだ。寝袋スシ詰めを覚悟していたので、この配慮には感動したほど。
一方、こもれび山荘は全周を遮光カーテンで覆うことができるので、安心して着替えられる。ただし、二階は雑魚寝のようです。夏場はほとんどツアー客で埋まっていると思いますが。
まあ、長衛小屋もシャワーを使えば個室で着替えられるので、問題ないかもしれません。

嬉しい荷物預かり

こもれび山荘では、日中は一角を荷物置き場として無料解放してくれます。最終日に荷物を軽くして登れるのはうれしいですね。
長衛小屋は有料(たしか300円)で預かってくれますが、利用には前日夕方までに申請が必要なようです。
そのほか、長衛小屋には充電スペースが解放されていました。
携帯電話はどちらの小屋も圏外でした。仙丈ヶ岳だと仙丈小屋で、甲斐駒ケ岳では山頂で電波が届きます。

登山時の注意

仙丈ヶ岳には途中に小屋が多くトイレタイムがとりやすいですが、甲斐駒ケ岳にはトイレがありません(途中にある仙水小屋はトイレ解放していない)。それなりの覚悟や準備で登りましょう。麓までめっちゃ我慢しました。
この時期、どちらの山も11時頃には雲が上がってきて山頂は真っ白です。青空の山頂を見たい人は暗いうちから動いた方が良いでしょう。
帰りのバスに乗り遅れる人は、甲斐駒ケ岳の双子山ルートで下山している確率がかなり高いそうです。仙水峠ルートのほうが回り道に見えるけど、こちらのほうが足場もよく楽なのだとか。双子山ルートを計画している人は時間に余裕をもっていきましょう。

状態変化に応じてデータバインディングを抜き差しする

Sliderを使って値を決めるUIで、TextBoxとCheckBoxで値の取りうる範囲を切り替えたい。たとえば、下表の関係にしたい。

CheckBox.Checked Slider.Maximum Slider.Minimum
false 0 TextBox.Text
true -TextBox.Text TextBox.Text

Slider.Maximumは単純にString→DoubleのConverterで実装できるとして、Slider.Minimumはどうしたらいいか?
ConverterにCheckBoxの状態を監視させて…としたいところだけど、なんかハマりそうな予感がする。
というわけで、CheckBoxのイベントを拾って動的にバインディングを変更することにした。

private void HandleCheck(object sender, RoutedEventArgs e)
{
    // 動的にバインディング
    Binding bi;
    bi = new Binding("Max"); //TextBoxの中身をViewModel.Maxに入れている
    bi.Converter = new StringToNegativeDoubleConverter(); //符号反転
    slider.SetBinding(Slider.MinimumProperty, bi);
}

private void HandleUnchecked(object sender, RoutedEventArgs e)
{
    //定数を入れるとバインディングは外れる
    slider.Minimum = 0;
}


こちらを参考にしました。XAMLバインディングしない方が良くない?という話。

・そもそも View と Model を分離して View はデザイナ、Model はプログラマ、と切り分けができるのではなかったか?
・View 自体は Microsoft Exprssion Blend を使って編集するわけだから、いちいち Binding の分が書いてあるのはどうかと思う。
・間違って消しちゃったら、Binding は直すの大変。ここのコードを書くのはプログラマなんだから、Viewに手を加えるの問題あり。

XAMLの動的バインド | Moonmile Solutions Blog


今回の件は、たぶんこっちで実装するのがスマートなんだろうなぁ。そのうち試そう。
thinkami.hatenablog.com

Excelグラフの見た目を一括コピーする

データをまとめるときに、同じ書式や軸設定で複数のグラフを作りたくなるのですが、ひとつずつ設定していくとものすごく手間がかかりますよね。
かといって、グラフごとコピーして参照先を変えるのも面倒…

というわけでグラフを書式コピーする方法を探したところ、こんな方法があるようです。
www.nec-nexs.com
でも、この方法では複数のグラフを選択すると「形式を指定して貼り付け」が出てきません(白目
手順をマクロに記録してやると、どうやらこの「形式を指定して貼り付け」は

ActiveSheet.PasteSpecial Format:=2

に相当しているらしい。ということは

Public Sub グラフ書式を貼り付け()
    Application.ScreenUpdating = False
    Dim x As Object
    Dim xi As Object
 
    Set x = Selection
    If TypeName(x) <> "DrawingObjects" Then
        If Not ActiveChart Is Nothing Then
            ActiveSheet.PasteSpecial Format:=2
        End If
    Else
        For Each xi In x
            If TypeName(xi) = "ChartObject" Then
                xi.Select
                ActiveSheet.PasteSpecial Format:=2
            End If
        Next
    End If
 
    Set x = Nothing
    Application.ScreenUpdating = True
End Sub

これでOK。
手順は、

  • 元となるグラフをコピー(Ctrl+C)
  • 見た目を揃えたいグラフを選択(Ctrl+左クリック)
  • 上記のマクロを起動:マクロにショートカットキーを割り当ておくと便利

複数の選択されたグラフを一括処理する方法はこちらを参考にしました。
oshiete.goo.ne.jp
選択されているグラフがひとつの場合と複数の場合とで条件分岐して、複数の場合はxに格納しておいた選択されたグラフのリストからひとつずつ選択状態にしてPasteSpecialしています。

なお、

Chart.Paste Type:=xlPasteFormats

は、上手くいかなかったです…(Excel 2010)