2018年11月29日木曜日

GraphQLを触ってみた

The better Restとの触れ込みのあるGraphQLを触ってみた。

GraphQLとは何か?

ここ数年、Webではスタンダードとして使われていたRest APIに対する不満から生まれたバックエンドとフロントエンド間の通信規約である。具体的には主に下記のようなものを課題として捉えている。

課題1 endpointから返されるデータを全部使わない(Over-fetching)

たとえばユーザのプロフィール画面を作りたくて、/user/profiesのエンドポイントを叩いたとする。大体の場合は、これのレスポンスに含まれるすべてのデータは必要とせずに、一部のデータのみ使うであろう。使われないデータは無駄であり、結果として効率的でない通信のやり取りに繋がる。

課題2 endpointをいくつも叩かなければいけない(Under-fetching)

Over-fetchingと表裏一体ではあるのだが、一つの画面に必要となるデータをやり取りするにも、 user/<id>を叩き、次にuser/<id>/profiles、そして最後にuser/<id>/photosの3つのendpointを叩く必要になることがある。これは一つのendpointから返されるレスポインスでは足りないがために起き、そのため複数のendpointへの通信が過剰に走ることになる。パフォーマンスの観点からは基本的にフロントエンドとバックエンド間の通信は少なければ少ないほど好ましい。

課題3 endpoint作成のコストが高い

endpointを一個作るにはフロントエンド・バックエンド側双方の調整が必要となるため、作成のコストが高い。


実際に作ってみた

GraphQLを推進する会社にApollo社がある。Apollo社が提供するApollo Serverを使うと比較的かんたんにGraphQLを試すことができる。

Getting started

出だしに書いてあったとおり、本当に10分で雰囲気がつかめる。もしかしたら10分もいらないかも。

感想

npmで初期化するだけで、playgroundがついてくるのは便利。ただ、ドキュメントが不親切で断片的なコードしか書いてないため、ちょっとした改良をするにも試行錯誤が必要。急がばまわれ的に、まずはapollo serverを使わない素のgraphql.jsなどを触って基礎を先に身につけたほうが良さそう。


2018年10月14日日曜日

Go言語の学習に使った本・サイト


A Tour of Go
定番どころのサイト。一通りのSyntax等は学べるか、サラッと書かれてるので基本を知る以外には情報が足りない感じがある。ブラウザ上でGoの実行環境があるので、スキマ時間に理解を進めるのには役立ちそう

スターティングGo言語 (CodeZine BOOKS)   松尾 愛賀 
入門書として良書。C、Java、Pythonなどの経験がある人に向けたGoの入門書。文法を網羅的に説明しつつ、落とし穴となりそうなところをちゃんと解説している。注意点としては全くのプログラミング初心者を対象としてないところ。プログラミング未経験者がいきなり本書を読んでも理解ができる前提で書かれた本ではない。

Go言語によるWebアプリケーション開発
タイトルのまんまGo言語でWebアプリケーション開発をするために必要な知識についてまとめてある本。(読み終わったらまた書く)

Go in Action
Manning者のIn Actionシリーズ。個人的にIn Actionシリーズの大ファンなので、購入したが、これは若干いまいち。In Actionシリーズは、実際的なサンプルを作りながら、その技術セットに付いて学べるのが特徴であるが、本書に関してはGoの理解を進めるのにあまり向いている作りではなかった

2018年9月5日水曜日

メルカリの俺的活用方法

フリマアプリのメルカリ。いろんな使い方があると思うけど、俺が気に入ってる代表的な使い方を紹介してみる。


1. コミック全巻セットを買って、読んで、そしてまた売る。

コミックは場所的に嵩張るので、よっぽど気に入った本以外は家にキープしておく場所がない。解決策としてはTSUTAYAとかで宅配レンタルするとか、漫画喫茶で読むとかあるんだけど、それぞれ微妙な点がある。
  • 宅配レンタル
TSUTAYAの場合、送料まで含めると一冊あたり150円くらいするので、結構コスパが悪い。またうっかり返却日をすぎると、容赦なく延滞料金が取られる
  • 満喫

フリータイムとか利用すれば、かなりコスパは、個人的にはフリータイム3時間とか6時間とかで集中して漫画を読むのとか楽しめない。一冊読んだあと、ネット見て、またその後、次の巻を読んだり、あいた時間に一冊だけ読んだりと、ダラダラ読むのが好きなので、正直言って満喫に何時間も缶詰するとか若干苦行感ある。家でのんびりと読みたい。

ということで、メルカリとかで漫画全巻セットを買って、自分のペースで読み終わったあとに、またその漫画を売りに出すのが、おすすめとなる。大体の場合、買ったときとほぼ同じくらいの値段で売れるので、手数料+送料がランニングコストとなる。30冊くらいの漫画セットであれば、両方合わせてもせいぜい800-1200円程度である。

2. ゲームを買って、遊んで、また売る
コミックと一緒だけど、ゲームなんかも大体の場合は一度遊ぶと二度とやらないので、遊んだあとサクッと処分できると嬉しい。新作は値段の下落が早いけど、発売後数ヶ月から年単位で時間がたった古いゲームなんかは、コミック全巻セットと同様に大きく値段が下がらないので、だいたい買ったときの値段で売れることになる。ゲームは漫画に比べて小さく、当然送料も安く済むので、ランニングコスト的には更に安く上がる。手数料+送料で400-600円程度で済む。

というふうに、上げてみると、ほとんどシェアリングサービス的な使い方になった。もちろん、店で新品で買ったものをただ売ったり、逆に欲しいものをメルカリで中古で買ったりもしているが、とりわけ個人的には漫画とゲームの使い方が気に入ってる。








2018年2月4日日曜日

日経新聞をKindleで読むまでにしたこと

Kindleのフォーマット(mobi)への変換


日経新聞の電子版を長らくPCで読んでたのだが、目を酷使する時間を少しでも減らそうと思いKindleで読める方法がないか探ってみた。

調べたところ、Calibreというその筋では有名なソフトウェアが存在するようなので、試してみた。

何度か試したのだが、どうやら最近の日経新聞電子版ではエラーが発生するようで、Kindle化するまでに至らなかった。

幸い、Calibreは開発をオープンソースベースで行っているようでgithubにソースが管理されていた。その為、必要な修正をpushし、本家に取り込んでもらうことができた。

Ver 3.15以上であれば日経新聞を無事読み込むことができるので、エラーに悩まされていた人はぜひとも試してほしい


Amazon Web Serviceで自動配信

Calibre本体にタイマー機能がついているので、PCを起動しっぱなしにしておけば、毎日設定した時間に日経新聞を取得し、Kindleまで配信することが可能であるが、現在私はラップトップPCしか使っていないため、毎朝手動で朝刊を取得し、Kindleまでメールで送信する必要があった。毎日のこととなるとこの単純作業も地味に辛い。


はじめはフリー枠を恒久的に用意しているHerokuなどを使いたかったのだが、Calibreの場合は本体をインストールするという作業が必要になるため、Herokuでは技術的にこれを実現できなかった。

AWSならば基本的にはLinuxをそのまま利用できるのでこちらを利用することとした。
まずは一年間のトライアル枠で利用するので料金はかからない。厳密に料金の見積もりを取ってないが、Amazon CouldWatchというこれまたAmazonのサービスを使って朝刊と夕刊の時間を取得する時間だけインスタンスを立ち上げることができたので、トライアル期間を過ぎてもおそらくそれほど多大な料金はかからないだろう。


分かる人にしかわからないレベルの粒度で、AWSの自動配信のためにやったことを書いておく。

1. EC2インスタンスを用意する。Amazon Linux AMIを利用した


2. Amazon Lambdaを利用して、EC2インスタンスを起動するFunction、停止するFunctionを用意する


起動のためのFunction(python2.7)

import boto3
# Enter the region your instances are in. Include only the region without specifying Availability Zone; e.g.; 'us-east-1'
region = 'XX-XXXXX-X'
# Enter your instances here: ex. ['X-XXXXXXXX', 'X-XXXXXXXX']
instances = ['X-XXXXXXXX']

def lambda_handler(event, context):
    ec2 = boto3.client('ec2', region_name=region)
    ec2.start_instances(InstanceIds=instances)
    print 'started your instances: ' + str(instances)
停止のためのFunction
import boto3
# Enter the region your instances are in. Include only the region without specifying Availability Zone; e.g., 'us-east-1'
region = 'XX-XXXXX-X'
# Enter your instances here: ex. ['X-XXXXXXXX', 'X-XXXXXXXX']
instances = ['X-XXXXXXXX']

def lambda_handler(event, context):
    ec2 = boto3.client('ec2', region_name=region)
    ec2.stop_instances(InstanceIds=instances)
    print 'stopped your instances: ' + str(instances)


3. Amazon CloudWatchを利用して、2で作成したそれぞれのFunctionを実行するEventを作成する。

例えば朝刊は午前のJSTのAM2:30に配信されるので、起動をAM2:30、停止をAM3:20にした。

4. 1で用意したEC2にCalibreをインストールする


%>yum update 
%>sudo yum install libGL
%>sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.py | sudo python -c "import sys; main=lambda:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main()"
私の場合はcalibreのインストール前に、libGLを手動でインストールする必要があった。


5. 日経新聞をmobi化するためのコマンド、およびそれを自分のKindleに配信するためのコマンドをスクリプト化する。


%>/opt/calibre/ebook-convert '日本経済新聞(朝刊・夕刊).recipe' /tmp/nikkei.mobi --username=<日経のIDとなるメールアドレス> --password=<そのパスワード>

%>/opt/calibre/calibre-smtp -r mail.gmx.com --username <送信用のメールアドレス> --password <パスワード> --port 587 -a /tmp/nikkei.mobi <送信用のメールアドレス> <Kindleのドキュメント受付用のメールアドレス> subject

6. 5のスクリプトをcronで実行するよう設定する

35 17 * * * /home/ec2-user/calibre.sh



リファレンス







2017年1月1日日曜日

2016年に読んで・観て何かしら記憶に残っているものリスト(フィクション編)

観たフィクションで面白かったものまとめ。もっと色々観たはずだけどあまり覚えてないな。Amazon Primeで無料のやつとか履歴が残ってないので、何を観たのか思い出すのが大変。



全米で大ヒットのドラマ。評判に違わず死ぬほど面白かった。現行の最新であるシーズン6まで一気に観てしまった。原作も読み始めた。ドラマの方も時間を作ってもう一度シーズン1からじっくりとみたい。

これも一部では大ヒットのドラマ。なかなかコミカルで楽しい。

ヒューマノイドロボットの話。本筋とは関係ないけど、アメリカンカルチャーに基づく夫婦の関係が描かれてて興味深かった。ああやってパワフルな女性を支える男性像が昨今の理想的な夫像なのだろうか。

Amazon Primeで無料だったシーズン3まで観た。面白かったので4もフリーになったら見よう。


邦題は「オデッセイ」。火星ミッションの話。月がありきたりになったのでそろそろ火星が映画のネタになる頃か。前半のMatt Damonが淡々と危機を切り盛りして行くところは楽しかったが、後半はすごいグダグダ。

ダンジョン飯 1巻<ダンジョン飯>

タイトル通りダンジョンで飯を食う話。まあなんか面白い。

期間限定で5巻まで無料だったので読んでみた。非常に面白かったので、全部買っても良かったが、冊数が多いので結構金が掛かりそう。ここまで金かけるならKindleじゃなくて紙本で買いたい。

これもKindleで一冊11円とかで売ってたので全部買ってみた。グロい描写が多い。読後感は良くない。でもなんか読むのをやめられなかった。

演劇のストーリのところが趣向が凝らされてる感じがしていい。いつか時間があったらこういう古典を読んでみても面白そう。漫画としても読み応えはある。

シニカルな熊のTEDが観てて面白い。このくらい英語で口が回るようになりたい


ハリポタシリーズ。実は観たことなかった。全部通してみたけど、思ってたより面白い。イギリス英語満載なので、英語の練習にもいいかも。原作も読んでみようと思ったけど、ストーリはやはり子供向けなので、途中で飽きそうだな。





2016年に読んで何かしら記憶に残ってる本リスト(技術書編)

2016年に読んでよかった技術書をリストしておく。
そもそも技術書はそんなにいっぱい読めないので、母集団は多くない。
積ん読もいっぱいあるので、なんとか消化しなくては。

教科学習の教祖Suttonによる教科学習の本。刊行が1998年と古いので、それだけが残念だが、例題がいっぱい載っているお陰で理解がし易い。説明もまあ、この手の本にしてはわかりやすい部類だろう。何よりも、章立ての構成が美しい。当然だが、頭が相当いい人なんだろう。この本一冊だけで基礎が手にはいる。第二版を執筆中とのことなので一日も早い出版が望まれる。


SuttonのReinforcement Learning本が古いので、そこと最新の間を補うための本。かの本とセットで読むのがいいと思う。



説明がやばいくらい分かりやすかった。すべての技術書はこのレベルのわかりやすさを心がけてほしい。


2016年に読んで何かしら記憶に残ってる本リスト(ノンフィクション編)

フィクション・ノンフィクション問わず今年はあまり本を読まなかった。本を読むという行為に少し食傷気味だったのかもしれない。米国に居を移したので意識的に日本語の情報量を減らした影響もあるかもしれない。(代わりに英語の量を増やしているが、残念ながら吸収率が違う)

その中から、少しでも何かしら心に残っている本をリストアップしておく。なお、読んだ直後のコメントではなく、年末まで自分の中で消化した後でコメントしているので、記憶違いや本書からの飛躍があるかもしれない。まあ気にしない。誰かへのおすすめではなくあくまでも自分メモである。


没落していく日本のロールモデルとしてのイギリスを書いた本。イギリスなんて100年以上も没落し続けてるのに、まだ大国なんだから日本も当分は大丈夫だよ、みたいなことを言ってた気がする。こういう観点の考え方もあるのかな、という意味で面白かった



VRの情報が満載だった。Informativeでいい本。



マンション購入の一番のデメリットはそれが他の住民との運命共同体であることだ。共同体の一員と足るような意識の高い住民と住めればいいが、管理費すら払わないような人たちと同じマンションに住んでしまった場合、個人として打てる手はもう何もない。

読んで到達した結論。当分はマンション買わない。一軒家は予算的に変えないから、つまり当分は借家暮らし。どうせ日本の人口は減る一方なので、全体的には不動産価格は低迷していくだろう。人気駅の駅チカ物件とかは相変わらず高値をキープするだろうが、うまく選べばいい物件を広い放題な時代が来る(と予想している)



アスリートの世界はNO1以外は価値がないので、そうなれないと判断したときに諦めるのが非常に重要である。サラリーマンならばNO2だろうが、NO100だろうが、給与水準が落ちるだけで、その道を諦めることの重要度は相対的に低いが、彼らはそうではない。

素人でも容易に想像ができるように、諦めるといってもそんなに簡単じゃない。事故などで客観的にも納得できるような不可能性を突きつけられれば別であるが、もう少し努力を増やせばまだまだ行けるかも、と思っている状態で諦めるのは、それができるだけで一流と呼べちゃうんじゃないかくらいの超人的なメンタリティを要する。