記録この広告は、90日以上更新していないブログに表示しています。2018-08-022018年後半に学びたいこと学びたいこと2018年も半分以上過ぎてしまったが、今年の残り期間で勉強したいことをメモっておくメモです。Docker業務ではほとんど使ってないので個人的に勉強しておきたい。空き時間でchefとvagrantで構築しているローカル開発環境をDocker化する。今はオライリーのDocker本読んでる。Kubernates全然わからんけどとりあえず本読んでおく。GCPこちらも業務で使う機会がほとんどないので個人的に勉強しておかないとやばい。SPAなWebアプリを作ってみる。GoCLIツールを作るのに使ったことがある程度なのでWebアプリのバックエンドをGoで作ってみる。あとはgoroutine使ったなにか。VueReactしかまともに触ったことないのでちょっとやっておきたい。NuxtがNextより良く出来てそうでSSRなPWAとか簡単に作れそう。ブロックチェーンdAppsをちょっと齧った程度だけど面白そう。どっから勉強していいのかがわからない。Etheriumの論文とか読んだらいいのかな。英語これは今年のはじめからずっとリスニングやってるので引き続き。hi-yamamoto.hatenablog.comまとめ基本的に業務でやってないけどやっとかないと将来的に転職先なくなりそうみたいな技術はMustでやっておきたい。あとは関数型言語とかWebAssemblyとかやってみたいことは他にも山ほどあるけど全部は無理なので出来そうなところからコツコツやっていきます。英語リーディングは基本的に技術系のドキュメントが全部英語で読まざるを得ないので普段から結構英文を読む機会が多く特別勉強はしてなくて、単語はDUO3.0を買ったけどあんまりやってない。英語のカンファレンス動画とかeSportsの実況とか英語を聞き取れるだけで楽しめるコンテンツが増えるのでとにかくリスニング出来るようになりたい。リスニング教材は無料のPodcast。いかんせんまだリスニング力が低いためTranscriptが用意されているPodcastを利用している。Englishspotlightenglish.com以前使っていたサイト。速度が結構遅いので初心者向け。エピソードの内容は多岐にわたっていて、自分はテクノロジー系の中から興味のあるエピソードを選んで聞いていた。Englishwww.betteratenglish.com最近一番聞いているのがこれ。Englishである程度慣れてから聞き始めたほうが良い。ついて」など英語学習をする上でも役立つものでなかなか面白い。1エピソード10分くらいなので繰り返し聞くのにも丁度良い。会話中に使われた単語について英語の説明がついており、単語を日本語としてではなく英語として覚えることが出来て便利。バイリンガルニュースbilingualnews.libsyn.com有名なので知っている人も多いと思う。バイリンガルな二人が一方は英語、一方は日本語という「バイリンガル会話形式」のPodcast。最新のニュースから二人がピックアップしたテーマについて議論しているのだが、二人のアンテナが非常に高く普段全然キャッチアップできていないようなニュースを知ることができるのでそういう意味でも勉強になる。1エピソード1時間超えで繰り返し聞くのには向いていない。自分はリスニング力がどれくらい向上したか確かめるためにたまに聞く、みたいな使い方をしている。Transcriptは有料。シャドーイングについて自宅から最寄り駅まで15分~20分くらい毎日歩いているのでその間ずっとPodcastを聞きながらブツブツ言っている。通勤電車内でTranscriptを読みながら非常に小さい声でブツブツ言っている。電車内ではみんなイヤホンつけているので意外と変な顔をされたりはしない。やって習慣化するか英語学習で最も大事なのは続けることだと思う。続けるためにやっているのが勉強したら記録を付けるということ。人間不思議なもので記録を付けるだけで何故かモチベーションが上がる。いうスマホアプリを使っている。無料これが非常に良くできている。教材を自分で登録して教材別に記録することが出来て、記録した時間・量を勝手にグラフにしてくれるのであとで眺めるだけで楽しい。毎週1週間の目標を立てるように促されるのだけど、いつも2時間くらいの短時間で設定して成功体験を積んでいる。このアプリはSNS要素があるのだが、ターゲットが受験勉強中の中高生なのでいきなり中高生から友達申請が来て変な気持ちになるのがちょっと問題。その他Youtubeでテックカンファレンスの英語動画を英語字幕で見るとか。これも結構良いけどやはり1動画が長いので繰り返しできないのが勉強向けではなさそう。ESについてのまとめCQRS+ESというアーキテクチャがどういったものか気になったので調べたことをまとめてみた。データの読み込み(クエリ)と書き込み(コマンド)の責務を分離するアーキテクチャのこと。コマンドモデルユーザーインターフェースなどのクライアントから実行される振る舞いを持つデータの書き込みに責務を持つ操作の成否以外の情報を呼び出し側に返さないクエリモデル非正規化したデータモデルデータの表示のみに責務を持つデータモデルがSQLだった場合はクライアントの表示内容毎にテーブルを用意する操作は冪等であることが保証されるクエリモデルの更新コマンドモデルの実行時の最後にはイベントが発行される。特別なサブスクライバが全てのイベントを受信していて、受け取ったイベントに沿ってクエリモデルを更新し、変更を反映する。更新を同期的にするか非同期処理にするかはシステムの負荷がどれくらいかかるかによって選択されるべきである。同期的な場合は一貫性が保たれるが、システム負荷は高くなる。非同期処理の場合は負荷は抑えられるが、表示されるまでに時間がかかってしまう。イベントソーシング(ES)とは状態(State)を永続化するのではなく、Eventを永続化(ソーシング)すること。ソフトウェアに何が起きたのか(Event)を記録しておくことで現在の状態を割り出す。最新の状態だけを永続化すること。イベントソーシングならソフトウェアの履歴が完全に保存されるある時点での状態を再現できる状態遷移は,私たちの問題空間における重要部分であり,私たちのドメインでモデル化されるべきものです。在庫10例えば4のイベントを取り消したければ3のイベントまで再生することで状態を再現出来る。イベントストアイベントを永続化する為のデータストア。ベースの実装https://github.com/arkency/rails_event_storeCQRSとESの組み合わせクエリモデルとコマンドモデルをそれぞれ永続化すると、コマンド発行後にクエリモデルが同期されていることを担保することが難しい。そこでイベントソーシングを組み合わせることで、コマンドモデルでイベントの永続化を行い、永続化されたイベントによって用途に合わせ何度でもいくらでも最適化されたクエリモデルを作ることが可能になる。オリジナルのWeb版が音量調整とかいまいちやりづらくデスクトップアプリ欲しいとなったので、せっかくだからElectronで作ってみようと思い立った。web版では何故か無かった1曲リピート機能Web版での最大の不満点だった音量調整部分が改善できたのでだいぶ満足してる。SubsonicはかなりAPIが充実して色々出来そうなのでまだまだ機能の追加は出来そう。今後はクロスフェード再生やNotificationなどを入れていく予定。electronreleaseページに各プラットフォーム毎のzipが置いてあるので、Subsonic自体使っている人があまりいなさそうだけど、もしよければ使ってみてください。ちなみにSubsonicにはDemoサーバーが用意されており、サーバーを立ててない人でも使ってみることが出来る。transpilerはbabelでタスクランナーはgulp。この辺りはかなり情報多くて助かった。gulpfileはこちらの記事を参考にさせてもらいました。基本はES2015の構文で書いてbabelでコンパイルした。ViewはReact。Componentでstate管理して、子Componentにprops流すという設計。stateはほぼStoreから受け取っているのでReact側でstateはほとんど変更しなかった。Fluxフレームワークは最初はfacebook/flux使っていたが色々と複雑になるにつれてカオスになってきたので、azu/material-fluxを採用した。どれが良いかよくわかんなかったので、参考にしたアプリで採用されていたものをそのまま採用した。storeそれぞれでクラスを継承して使う形でシンプルでわかりやすかった。fluxのcontextをviewにpropsとして渡すのがめんどくさかったので<Provider>というComponentを作り、Reactのcontextからstoreやactionのインスタンスを取得出来るようにした。最近のデファクトはReduxになりつつあるようなので次はこっちも使ってみたい。CSSフレームワークとしてphotonkitを採用した。photonkitはMacアプリ風の見た目に簡単に出来るもので、React用としてreact-photonkitといモジュールがあったのでそれを使った。多少バグがあったのでreact-photonkitのほうにプルリク送ったが、開発止まってるみたいで未だマージされず。フレームワークだけだと色々厳しいので自分でもかなりCSS書いたが案の定カオスになってしまったのでうまく設計出来るようになりたい。API使ってて、設定の保存とかはlocalStorageをつかってる。Processで分かれており、プロセス間通信の手段としてIPCモジュールが用意されている。APIを使っているので、再生状況等の状態は全部Rendererプロセス側で管理して、状態が変更される度にIPCでMainプロセスにメッセージを送って、Mainプロセス側で更に受け取った状態を管理するという形になっていて、結構厳しかった。今回のアプリは大した規模ではなかったのでなんとかなったが規模が大きくなった場合すぐ破綻しそうなので、何かしら状態を共有出来るようないい感じの設計が必要だと感じた。あとテストあんまり書いてないのでちゃんと書いていきたい。さいごに作ってるうちにElectronやReactについての知見が色々溜まった気がしたが、今となっては大部分を忘れたので思い出したらまた書く。(知見だと思ったらすぐ書くことが大事という学びがあった)とりあえず最低限の機能が出来たので公開したが今後もどんどん機能追加等していきたい。Requestお待ちしております。久しぶりに自宅のサーバーいじりました。それぞれ使うデバイスが違ってそれぞれにデータ入れなきゃいけなくてめんどう...。出来ればデータは同じマシン上で管理したいってことで以前からやろうと思っていたストリーミングサーバーを構築してみました。SubsonicSubsonicjava製です。何年も前からあるみたいですが最新版は今年の3月に出したりしていい感じです。ffmpegするだけで起動まで勝手にやってくれます。restartデフォルトポートは4040です。接続してログインするとブラウザ上で色々設定出来ます。日本語もサポートしてます。躓いた最初は↑と同じ最新版の5.2.1を入れてみたんだけど音楽フォルダをスキャンしても全く表示されませんでした。4.9を入れてみたら直りました。若干UIが違うくらいで特に問題なさそう。SourceForge.netこんな感じですどこからでもブラウザで自宅サーバー上の音楽聞けるので最高でした。スマホアプリも色々あるっぽい。30日間の試用期間すぎるとアプリから聞いたり出来なくなったり色々制限はあるようです。ブラウザからは大丈夫。Premiumは$1/monthとのことです。甘味志向@はてなSubsonicでストリーミングメディアサーバーを構築。勉強会エンジニアの皆さん、勉強会には行ってますか?勉強会の情報を一括で検索出来るサービスは色々あると思いますが、Androidから手軽に探せるのがあるといいなぁ、と思いつくりました。やってることはConnpassとかのイベントサイトのAPIを利用してアプリで表示してるだけのシンプルな作りですが、いざ完成させるとなると結構大変でした。アプリ作りはある程度形にするまでは出来てもちゃんと完成させるのはほんとに大変ですね...。ホントはDoorKeeperの情報も入れたかったんですけどAPIの仕様的に難しかったので今回は見送り。機能としてはカレンダーから日付を選択して一覧表示キーワードでAND、OR検索となります。対応サイトは現在Connpass,Zusaar,ATNDです。アプリから手軽に複数サイト検索できるのでまあまあ便利だと思いますのでぜひ使ってみて下さい。フィードバックお待ちしております。プログラミングfragmentを使って画面遷移する時にデータを渡したい場合なんかによく使うBundleですが、データを格納しておく独自クラスをそのまま入れたい時があります。そのまま格納できます。Parcelableの実装方法はこちらが非常に参考になります。問題はParcelableを実装したいクラスが抽象クラスだった場合です。Parcelable実装にはParcelable.Createorというスタティックフィールドが必要になりますが、そのフィールドを初期化する際にParcelに保存したデータを復元するためのコンストラクタを呼びます。抽象クラスだと当然コンストラクタを呼ぶことができません。実際はこのコンストラクタ内でParcelからデータを読み出します前置きが長くなりましたがではどうすればよいかというと、独自クラスにSerializableを実装するだけです。Serializableはメソッドなどをオーバーライドする必要はなくimplementsするだけで大丈夫ですが、クラスの構造がSerialize出来るようになっていないといけません。Serializableについてはこちらが参考になりますので読んでみてください。val);の形でBundleに格納できます。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。