Tokyo Course Grained

適当に生きてます

日記 2017/08/19

12時に起きて適当に作業する。学校の課題案件で、 javaMySQL触るみたいなの、、MySQLは docker compose上で docker compose便利や。docker環境よく消すけどセットアップの方法よく忘れるから備忘録を githubに置いた

その後スーパー行くが野菜売り場で友人氏に会ったのでその後フードコートでしゃべる。

なんか今の家に来月から住みたい見に来るらしくて急いで帰る。

rebuild のライブ(typesterさん回)聞き流しながら作業する。課題でJavaサーバーサイドのテストしたいけどテストで MySQL 使わない感じにしたくてそんなわけでDI (HK2)を導入。。。基本テスト書くやつなのでときには動かんかったりして土曜のけだるい気分にあってていい。これ深夜まで8時間くらいぶっ続けでやってた。 てか課題ではDIどころかテストもいらんしここまでやらなくてよいのだけどspring とかでないほぼ生なjersey HTTP Serverに自分で DI とか jackson とか mockit 組み込んでいくの積み上げていく感じがいい。 spring boot とか使えばこんなのしないでいいんだろうが…。

ただ今日は仕事はまったく手を付けなかったのが焦る。

今日聞いたポッドキャスト

BOOTCAMPS ARE A SCAM – How to Get a Job WITHOUT Going to a Bootcamp – Start Here FM

bootcamp なんて高いかね払わないでジュニアポジションに応募しなよとのこと。俺もそう思う。$20000とからしいが俺もそれくらい払ったのでは、、って真顔になる。

Rebuild: 189: Server-side Emacs (typester)

影響されやすいから Win NotePC 欲しくなったし PUBG がすげーやりたい。配信とかプレイ動画みる習慣ないから見てみたい。typesterさんrebuildでは珍しい主張の強くない語り手でいいなーと思う。続きで、typesterさんをそのまま何個か聴いた。

Rebuild: 179: Rustacean (typester)

Rebuild: 148: Life Changing Android Experience (typester)

148はプロダクティビティの話ししててナツい。

rebuildで PUBG の話を聴いて DayZ っぽくないか?(どちらもやってません)と思ったのでピコキャスの DayZ 回聴く。 第4回 DayZなどゾンビサバイバルゲーム - @IDA_10 x @miyaokaのピコピコキャスト

プレイしないで語るの最悪。PUBGはそのうちやる…。

今日はポッドキャスト聞きながらもずっとコードにフォーカスしてて、こういう状態をコンスタントに作れるといいなと思った。

広告を非表示にする

Podcast Tweaks

https://tweakpods.appspot.com/

サンプル

f:id:iwg:20170806165457p:plain:h300

これは何?

podcast をリスナー側としてハックするツールです。 以下の機能があります、というか今のところ1つしかないです。

再放送

再放送します。podcastってsubscribeする前のエピソードを聞く機会ってそうそうないですよね。

これまでのエピソードを古い順かランダムに再放送します。また再放送の間隔を指定できます。

このアプリで新しいRSSを発行するので、URLを指定できるアプリの場合podcastのアプリで開いてください。 私はiPhone でRSSRadio 使ってます。OvercastでもURL指定でpodcastが開けます。他にもあるかもしれない。

裏側

Google appengine standard environment です。 データストアは cloud datastoreと memcached というか goon ですね。 フロントはReactJSです。 RSSGoogle CDNから配信されてます。意味は無いけどCloudFrareに変えたい。

ソース github.com

広告を非表示にする

grpc-web on appengine standard environment (できませんでした)

作りかけです。 github.com

いまpodcast用の再放送ツール作ってて、これ を grpc 対応させようとした。 ReactJSのフロントがあってRestのAPIで叩くのだけど、grpc対応させたら RESTなAPIをわざわざ作んなくていいしコードをだいぶ減らせる。 grpcは標準ではブラウザのjsから叩けないしなー って思ってたら現状ongoingらしくて draft がでている。それと、毎日早く欲しい!ってコメントが書かれる issue

現状ドラフトを実装したのは以下のリポジトリ

github.com

このサンプルがなぜか typescript で jsからどうやって叩くのよって思ったら同じことやってるサイトを見つけた。

grpc-web-clientをjsで試してみた - daisuzu's notes (ほんと助かります)

ブラウザから叩くやってみたんだけど、最後appengineで動かすのはハマって現状できなさそうだなと言う結論になった。

  1. appengine の contextが取得できない

grpcのサービスの関数はこんなインターフェイスになってて

func (s *rssService) GetRss(ctx context.Context, rssQuery *library.GetRssRequest) (*library.Rss, error) {

appengineからgcpの各サービス(datastoreとかログとかすべて)を叩くにはこのcontextが必要なのだが grpcのcontextを使うと runtime errorになる。

panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x3856d9]

goroutine 10 [running]:
panic(0x6e7380, 0x820cfa080)
        /Users/iwag/Devel/go_appengine/goroot-1.6/src/runtime/panic.go:481 +0x3e6
google.golang.org/appengine/internal.logf(0x0, 0x0, 0x0, 0x8001e0, 0xa, 0x820f54070, 0x1, 0x1)
        /Users/iwag/Devel/go/src/google.golang.org/appengine/internal/api_classic.go:145 +0xe9
google.golang.org/appengine/internal.Logf(0x8820d4e6d0, 0x820f22300, 0x0, 0x8001e0, 0xa, 0x820f54070, 0x1, 0x1)
        /Users/iwag/Devel/go/src/google.golang.org/appengine/internal/api_common.go:82 +0x151
google.golang.org/appengine/log.Debugf(0x8820d4e6d0, 0x820f22300, 0x8001e0, 0xa, 0x820f54070, 0x1, 0x1)
        /Users/iwag/Devel/go/src/google.golang.org/appengine/log/api.go:19 +0x66
main13960.RssClient.GetRss(0x8820d4e6d0, 0x820f22300, 0x820f4e040, 0x1b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
        rss.go:58 +0x15c
main13960.(*RssClient).GetRss(0xbf6148, 0x8820d4e6d0, 0x820f22300, 0x820f4e040, 0x1b, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
        <autogenerated>:3 +0x11d
main13960.(*rssService).PutRss(0xbf6148, 0x8820d4e6d0, 0x820f22300, 0x820f54000, 0x820da0c00, 0x0, 0x0)
        server.go:298 +0x2a2

app engineが期待しているcontextが違うんだろうなーという感じで、contextの型としてはあってるのだが。ちょっと解決法が見えない感じ。 grpc-web まだongoingだし今日はここまでって感じ。appengine standardじゃないところで動かすのを検討中(flexibleだと動くのだろうか…)。

Amazon Echo: Q and A

カリフォルニアに旅行に行ってて Amazon Echo Dot を買いました。 セットアップ微妙に手こずったので参考情報を上げておきます。

0 どこで売ってるの?

アマゾンはもちろん量販店(TargetとかBestbuyとか)ならどこでも変えますが今(2017/07/25)現在米国でしか買えません。USの物流は終わってて平気で2週間とかかかるので量販店で買うのがおすすめです。私はカナダ在住なので旅行中に買いました…。しょっちゅう$10オフをやっています。

1 Alexa APP がないとセットアップできない!?US以外だとアプリインストールできないんだけど!?

できます。web管理サイト

http://alexa.amazon.com/spa/index.htmlalexa.amazon.com

でもこの/spa/ ってURI設計どうなんだ?多分米Amazon.comのアカウントは必須なはず。適当に作りましょう。

2 なに話せばいいかわかんない

things to try があります http://alexa.amazon.com/spa/index.html#help/thingstotry

3 話した内容消したい

このページで消す http://alexa.amazon.com/spa/index.html#settings/dialogs

4 てか話した内容記憶してんの??

明示的に消さない限りアマゾンのサーバーに保存されてるらしいっす。

5 デバイスの追加

skills でデバイス名とかメーカー名で検索 http://alexa.amazon.com/spa/index.html#skills/search/wemo/?&ref-suffix=sb_gwバイスの設定で remote control を有効にしないとかも(私の買ったtp linkはそう。有効にするのはデバイスのAppの設定から) そのあと Device Discovery

6 全然聞き取ってくれない

ボイストレーニングがあります http://alexa.amazon.com/spa/index.html#settings/voicetraining

7 呼びかけの名前(Alexa)とかどこで設定するの?

ここ http://alexa.amazon.com/spa/index.html#settings からDevicesで適切なデバイスを選択。で、General : Wake word ってところです。 住んでる場所とかタイムゾーンもこのページで変更する。住所は今のところUSにしかできなかったはず。

広告を非表示にする

Python の必要性を感じる日々

ワークでソフトウェアとハードウェアの融合領域みたいなとこやってる…。要するに組み込みとかハード叩くライブラリとか画像処理のアプリを作ってるんだけど C++ で書くの辛い。C++11 は楽といっても(確かに楽だ)、C++のプロジェクトだと必ずPythonバインディングがあり 90% くらいはありそう。 LL で書けるならLL で書きたいよね…ということで Python やりたい。やるのは 2.7でいいのだろうか。

Uber / Lyft のプロモーションコード(クーポン promo) の探し方

夏休みに10日間カリフォルニアに行ってきました。北は北カリフォルニア最大の都市サンフランシスコから南はオレンジ郡アーバインまで。アメリカは車社会なんで車がないとなんもできないし公共交通機関が終わってます。なんで、もっぱらUber/Lyft に頼ることになります。

で、知らなかったんですが Uber/Lyft ってめっちゃクーポン配ってるんですね。$10〜$50まで様々。電話番号認証なんで電話番号1つにつき1回しか使えません。

で、クーポンサイトいっぱい引っかかってどれだよ…みたいになります。 公式がやってるの確実です。あと発見した裏技も紹介します。

Uber

シリコンバレーで最悪の倫理観を持つ企業と呼ばれる Uber です。 https://www.uber.com/en-CA/promo/ (CAになってるけど使えるはず) uber official promo で検索して出てきた uber.com 公式のものを見つけます。2017/06/25現在だと$15。2000円。

Lyft

Uber よりやや価格帯が高いのが Lyft です。 https://www.lyft.com/promo-coupon-code-free-rides これも lyft official promo で検索して lyft.com のものを探しましょう。 lyft はいろいろ選べて最大$20だけど(2017/06/25現在)、$2 / ride *10回でしょっぱすぎる。

裏技 Lyft

ここで裏技なんですが、site:lyft.com/invite $50 とかでグーグル検索するといいですね。見たところ$50が上限っぽいです。$50って6000円ですからね。太っ腹。

私は $5/ride 10回(無期限)が見つかってよしって感じです。が、これ書いてる途中で https://www.lyft.com/invite/redfoo $10/ride * 5回 (14日限定)が見つかってうってなった。まあ俺のは無期限だし。ワンメーターくらいだと$10も行かないんで$5のほうが使いやすいしいいんだ…。

invite code

面倒な場合はぼくの invite コード IWAKAMI92427 を使ってもらってもいいです :bow:

https://lyft.com/igi/IWAKAMI92427

SOA

俺は SOA (Service Oriented Architechiture ) を勘違いしていたのかもしれないと、gRPC のチュートリアルをやりながら思った。

http://www.grpc.io/docs/quickstart/go.html

Service Oriented とは何か? 光あれで最初に作られるべきなのが Service という考え方。 Service ってのは簡単に言うと、Func(StructA req) StructB ですね。入力と出力と処理。

Struct で使うデータは protobuf で定義して、まあモデルです。で、モデルのコードは protobuf から自動生成されます。 現代のモデルってO/R Mapperのようにモデルってデータストアと切っても切り離せないというか完全に融合してるじゃないですか? gRPC のモデルはサービスと一体化してて Service Oriented とはこういうことか!!

あと、View の裏側としてのHTTP APIとは全然違いますね、、という。

自分でも何言ってるかわからない、、、がもう少ししたらわかる気がするのでもうちょっと掘りたい。 GCP 見ててもこの思想が垣間見えるので(ほんとに gRPCが使われている)そこも。

こういう感じの短い技術雑感(いわゆるポエム)も増やしていきたい。

広告を非表示にする