私が歌川です

@utgwkk が書いている

23歳になっていた

表題の通り、7/28に23歳になっていました。

所感

院試に受かり、卒業に成功し、入学書類が受理された結果、大学院生になりました。現在は期末レポートに忙殺されているところです。学部時代とやってることが変わらないですね。

最近は体力の衰えを感じています。朝までレポートをやって少し寝て1限の講義に出る、みたいな荒技はもうできなくなりました。2限も厳しい。500万年ぐらい寝たいなーという気持ちがずっとあります。

誕生日、今となっては何を祝っているのかあまり明確じゃないように感じるようになったけれど、こうして記事にでも残しているうちはある種の節目ということにできていいんじゃないでしょうか。

いつもの

3つあるwishlistをまとめたページが誕生しました。

scrapbox.io

飲みに誘う

この夏はbuilderscon以外はずっと京都にいると思います。

あわせて読みたい

utgwkk.hateblo.jp

AWS CLIでの作業を /tmp で完結させたい

さまざまな出来事があります*1

サークルの共用サーバ*2/tmp にtweets.zip*3をダウンロードしてからS3にアップロードしていたのですが、同じような作業をいくらでもやりそうな気がしたのでメモを残しておきます。

一時ディレクトリに移動する

mktemp -d とかでサクッと作って移動しましょう。

$ cd `mktemp -d`

AWS CLIをインストールする

たぶんどのご家庭のサーバにもバージョンを問わずPythonが入っており、またpipも導入済みであると信じましょう。 ふつうに pip install awscli するとNFS上にインストールされて地獄を見るかもしれません。

幸いなことにpipでは --target オプションによってパッケージのインストール先を指定することができます。 これで一時ディレクトリ上にインストールしちゃいましょう。

キャッシュを保存してるとそれも重い原因になるかもしれません。 今のところ*4キャッシュの保存先をオプションで指定できないのでひとまず --no-cache-dir をします*5

$ pip install --no-cache-dir --target `pwd`/pip awscli

AWS CLIを使えるようにする

めでたくAWS CLIがインストールできましたね。

さて、 ./pip/bin/aws を実行すればAWS CLIを叩けるのですが、このファイルの実体はPythonスクリプトです。 多くの場合、いまインストールしたパッケージのインストール先は、Pythonのランタイムが走査する先として指定されていないと思います。 これをランタイムから見えるようにしましょう。

PYTHONPATH 環境変数にさきほど --target に渡したパスを指定してやればよいですが、何度も書くのは面倒なので export しちゃいます。 ついでに PATH にも入れましょう。

$ export PYTHONPATH=`pwd`/pip
$ export PATH=`pwd`/pip/bin:$PATH

これでAWS CLIが叩けるようになったと思います。

$ aws help

最後に認証情報の設定をしましょう。環境変数で済ませます。

$ export AWS_ACCESS_KEY_ID=WANNNYAKAFUNYAFUNYA
$ export AWS_SECRET_ACCESS_KEY=WANNYANNNYANNWANNMATSURI
$ export AWS_DEFAULT_REGION=ap-northeast-1

これでAWS CLIが使えるようになりましたね。存分に作業しましょう。

参考

*1:NFSが重い、ホームディレクトリがない(そんなことある?)、などなど。

*2:無料で使えて(無料ではない)高速なインターネット回線がある

*3:今はtweets.zipではなくなっている。

*4:pip version 19.2では

*5:ネットワークが十分に速いならリトライしてもそのほうが早い、たぶん……。

携帯回線乗り換え

このたび、両回線の料金明細が出たので記事に書こうという次第です。 ちなみに、UQモバイルの請求は1ヶ月ぶんではなく、だいたい20日ぶんぐらいの計算になっています。

経緯

実家の方から、大学院生になったことだし*1、携帯回線代ぐらい自分で支払いなさい、まずは名義変更をしなさいというお達しを受けたため、格安SIMの検討を行っていました。 いろいろ教えてもらった結果UQモバイルがよさそうかなと思って乗り換えました。

料金明細

Softbank

2019/6支払いぶん

gyazo.com

UQモバイル

2019/7支払いぶん

gyazo.com

所感

UQモバイルがめちゃくちゃ安くて感動しました。 今回はまるまるひと月ぶんの請求にはなってないけど、月々2000円もいかないぐらいで使えて*2、すごい時代ですね。

SIMロック解除から、MNP予約番号の発行、UQモバイルの回線申し込み、本人確認までぜんぶインターネット上で完結してて、これもすごい時代だなという感じです。 店舗に親と行って、親がイライラしているのを横目に手続きをしたり、委任状と本人確認書類の写しを送ってもらったりしていたのから比べると、遥かに進歩しています。

*1:「なったことだし」とは何?

*2:1680円/month

ゴールドカード

f:id:utgwkk:20190703011053j:plain

最近手に入れたゴールドカードたちです。

DENEN

6月、行きつづけてたらついにゴールドカードになった。 思ったより安くてお得みたいな感じになってよい。

HUB

6月、行きつづけてたらついにゴールドカードになった。

HUBのゴールドカードの獲得条件は明示されておらず、インターネットで検索すると、どうやら来店日数が店舗で上位2位である必要があるらしい。 条件を満たした状態で店員に声をかけないと交換してもらえない、みたいなことが書いてあって、ゲームの隠し要素みたいな感じでおもしろい。 私の場合は、会計してたらカードを席までお持ちしますと言われて、ピンポイントなトラブルかなと思っていたら席でゴールドカードを渡された。

ゴールドカード修行、獲得すればステータス、みたいなことがインターネットに書いてあるけど、自然と獲得してしまったのでとくに実感がなく、何円以上の注文をすれば5%引きよりお得になるかについて考えていた。

気持ちが沈んだときにHUBにアブサンを飲みに行く、みたいな生活をしてたら獲得したので、ゴールドカードが欲しいのであればそういう生活をすればいいのではないか。

Ansibleでitamaeのexecuteやnot_ifのようなことをする

さまざまな事情があって、Ansibleでシェルスクリプトを1つのtaskとして実行したくなったり、コマンドのreturn codeに応じて処理を分岐したりしたくなると思います。 itamaeなら executenot_if で実現できるのですが、同じことをAnsibleでやろうとして手間がかかったので記録しておきます。

シェルスクリプトを実行する

shell リソースでコマンドを実行することができます。 さらに、YAMLでは複数行の文字列を書くことができるので、次のように書くことができます。

- shell:
    VAR=`command_expand`
    command1;
    command2;
    command3

注意点としては、複数行のコマンドを入力しても一度に実行されるので、シェルスクリプトと異なりコマンド区切りの ; が必要です。 あまり検証していませんが、POSIXに準拠しているシェルスクリプトなら対応しているのではないでしょうか。

コマンドのreturn codeを取得する

shell リソースでコマンドを実行することができるので、その結果を変数に格納すればreturn codeが取れそうだなということをすぐに思いつくと思います。 たとえば次のように書けそうです。

- shell: which hoge
  register: check_result

しかしこれだけでは、 which hoge のreturn codeが0でない場合にfailになります。 この場合ではfailになりうることは分かっていて、我々はreturn codeを使って分岐したいのです。

ここではfailを無視するために ignore_errors: yes を追加します。

- shell: which hoge
  register: check_result
  ignore_errors: yes

これでめでたく which hoge のreturn codeを check_result.rc で取得できるようになりました、といきたいところですが、まだあります。

このtaskは、check modeのときは実行されません。 したがって check_result という変数が定義されないので、これ以降のtaskで check_result を参照するとエラーで落ちます(!)。

check_mode: no を追加してやればcheck modeでも実行が強制されるので、 check_result を参照できるようになります。

- shell: which hoge
  register: check_result
  ignore_errors: yes
  check_mode: no

組み合わせる

- shell: which hoge
  register: check_result
  ignore_errors: yes

- shell:
    VAR=`command_expand`
    command1;
    command2;
    command3
  when: check_result.rc != 0

これで executenot_if のようなことができるようになりました。よかったですね。もうちょっと楽に書けないものか。

参考

自宅では飲酒をしない

日ごとの飲酒の有無をスプレッドシートに付けてみたところ、思った以上に飲んでいる日が多いということがわかった。

docs.google.com

スプレッドシートに記録するのとは独立に、お酒を飲みすぎでは?? と思っていたので、まずは自宅での飲酒をやめてみることにした。

つい最近までずっと、スーパーでお酒を買って自宅で飲むという流れが形成されていたけれど、日ごとで見たら飲酒回数がすごい人みたいになってしまった。卒論を書いていたときは毎日飲酒しながら書いていた気がする。お財布と肝臓の両方に響くことは火を見るぐらいには明らかだと思う。

今は家ではコーラを飲んでいる。お酒と同じ値段で3倍ぐらい量があって味がしておいしい。お酒に関して、よく、ジュースでいいんじゃないですか、って言われるけど、ジュースでいい場合がけっこうあると思うし、無理に飲酒しなくていいと思う。

『知的生産の技術』を読んだ

知的生産の技術 (岩波新書)

知的生産の技術 (岩波新書)

utgwkk.hateblo.jp

そういえば高校生のときに『知的生産の技術』を輪読する授業を受けた記憶があるけど,どんなことをしたのかぜんぜん覚えていない. このたび改めてちゃんと読んだ.

1969年*1の本だが,現代に通じる話が多い. 記憶をしないために記録をするというのは,普段の生活でもずっとやっていることだと思っていて,タスクはタスクリストに書くし,日々の生活の様子はSNSに書き,その結果つい最近のことでもまったく覚えていないということがある. 覚えていなくても読み返せば記録に残っているので思い出すことができて,そのぶん知的生産活動に打ち込める.

いっぽうで,タイプライターと日本語入力の問題など,現代では解決されているようにみえる問題についてもいくつか言及されている. ワープロがない時代の試行錯誤の様子が垣間見える.

好きな部分を引用して締める.

ある作家の作品のなかに、只棹埋男翁という老学者がでてきて、おどろいたことがある。その老人は、しめきりがきても文章ができあがらないので、たいへんくるしむのだが、夜中になると、とつぜんにキツネがやってきて、とりつく。すると、たちまちにして文章ができあがる、というのである。

みなさんは,知的生産活動をしていますか?

*1:なんと50年前