GitHub Trendingに毎日同じリポジトリがいるのを見たくないので俺がその日初めて見るリポジトリだけを見るためのツールを作った

goの勉強がてらに作った

サンプル

f:id:inabajunmr:20181015000129g:plain

特徴

  • treviewコマンドでTrendingに入ってるリポジトリの情報一覧が表示できる
  • 前日以前に一回でも表示されたリポジトリは表示されない
  • コマンド叩いたときにデフォルトで表示する言語を指定できる

GitHub

GitHub - inabajunmr/treview: Viewer for GitHub Trending. You never see same project on GitHub trending.

なんでCLIなんだよ感あるけど思ったより便利だった Webアプリにしようか悩み中

Webアプリ作るぞ〜〜〜〜だとだれるけどCLIだととりあえずサクッと作るかってなるという知見を得た

JavaのHashMapの実装を眺める会①

HashMapってhashCodeで計算したハッシュからキーと値を引ける構造があって、ハッシュから値を引けるから早い、みたいな理解があって、あとはhashCodeがぶつかったらequalsの結果が等しいかチェックしてる、みたいな理解だったんだけどそもそも「ハッシュからキーを引ける構造」ってなんなん?となったのでHashMapのコードを見ている。そして今のところ全然わからん。

http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/HashMap.java

HashMap$putを見る

putするときにハッシュを作り直してるが何をしたい?

HashMap$hashのコメントを見る

http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/HashMap.java#l320 この辺りのコメントを見ているが全然わからん。

以下よくわからんまま訳したやつ。訳以外は🍙をつけている。


key.hashCode()を計算し、ハッシュの高位ビットを低位に持ってきた値との排他的倫理和を計算します。

🍙こんなん

hashCode():1001
h>>>16    :0010
hash      :1011

テーブルは2の冪でマスクされた値を使うので、カレントのマスクよりも上のビットだけが異なるハッシュの組み合わせは常に衝突するためです。

🍙https://ja.wikipedia.org/wiki/マスク_(情報工学)#2の冪の剰余

(よく知られた例は、小さなテーブル内の連続したFloatのキーのセットです。)

  • 🍙カレントのマスク?
  • 🍙例がわからん

そのため、高位ビットの影響を下位に展開する変換を行います。これに速度、有用性、ビット展開のトレードオフがあります。

  • 🍙ビット展開?散らばり具合の話でいい?

多くの一般的なハッシュの組み合わせは、すでに合理的に分散されています。(そのため拡散による利益をえません) そして、binsに置ける衝突の大きな集合をハンドルするために複数のツリーを利用するので、体系的な損失を減らすための最も効率的な方法のいくつかのシフトされたビットのXORを計算します。 加えて、テーブル境界のためインデックスの計算に使われない高位ビットの影響を組み込むことができます。

  • 🍙全然わからん

そうした方が効率が良いからそうしているらしいということくらいしかわからんけど次はそのままputを見てみる。

Dataボリュームコンテナではなくvolume apiを使う

Docker/Kubernetes 実践コンテナ開発入門

Docker/Kubernetes 実践コンテナ開発入門

この本のp95のDataボリュームコンテナの下りがいまいち理解できなかったのでなんとなくググってたらそもそも使うなという話が出てきたので読んでた。

Dataボリュームコンテナのメリットがいまいち理解できてないんだけど、ざっくりとアプリケーションのコンテナがホスト(のパス)に依存するのはよくないから、コンテナを一個噛ませてあくまでアプリケーションのコンテナは、コンテナ間のボリュームを扱う感じでやろうぜ、的な話なのかなと理解している。

この記事の話は、1.9.0からそもそもボリューム用のコンテナなんか立てなくてもいいAPIができたので、そっちを使おうね、という話。

$ docker volume create --name test

で、testボリュームができて、

FROM busybox

RUN mkdir -p /test
CMD ["ls", "/test/a"]

こんな感じのDockerfileから作ったimageを起動して、ボリュームにtestを使って、

$ docker container run -v test:/test test

コンテナを落としてから

FROM busybox

CMD ["ls", "/test"]

のイメージを同じボリュームを指定して起動すると、

$ docker container run -v test:/test test2
a

最初の起動時のデータが残ってる、という話。

volume apiのドキュメントはこれ。 https://docs.docker.com/engine/reference/commandline/volume_create/

Docker/Kubernetes 実践コンテナ開発入門を読んでいる(-p82)

Docker Composeの下まで読んだ。

Docker Compose

複数のコンテナ実行を一括管理できる。

docker-compose.yml

Docker Composeの設定ファイル。 https://docs.docker.com/get-started/part3/#your-first-docker-composeyml-file

起動と停止

docker-compose.ymlのあるディレクトリでdocker-compose upで起動、docker-compose downで停止。 upで起動したコンテナはdownで全部停止できる。

直接buildもできる

services.サービス名.buildにDockerfileがあるディレクトリを指定すると、まだイメージがなくてもそのDockerfileを使ってビルドしたイメージを使ってコンテナを起動できる。

ホストとコンテナでファイルを共有

services.サービス名.volumesに指定したディレクトリがコンテナ/ホスト間で共有される。

volumes:
  - ./test:/sample

で、ホストのカレント直下のtestが、コンテナ側の/sampleと共有される。

要するにローカルのストレージになんか永続化するようなイメージで、その領域をホストと共有しとくとコンテナ停止して再起動しても残ったデータをそのまま使える。

コンテナ間通信

docker-compose.ymlのサービスにlinksを定義して、コンテナ名を指定するとlinksに指定したコンテナ間での通信ができる。

9月にやったこと

やったこと

Go: The Complete Developer's Guide (Golang)

UdemyのGolangチュートリアル的なやつ。 最後まで見終わって修了証もらった。ちょっと嬉しい。

f:id:inabajunmr:20181001000421j:plain

感想

  • 言語機能として網羅してるかはわからんけどとりあえずプログラムはかけるようになった気がする
  • あと標準APIのドキュメントの見方とかその辺まで教えてくれて良い

ちょっとGo書いてみる

GitHubのTrendingをみるためのツールでしっくりくるものがないので作ろうとしてるが、なんとなくファイルベースでデータを記録するときに簡素なKVSが欲しい気がしたので、それを書いてみた。

github.com

色々足りてないけどまあとりあえず動くって感じ。

IntelliJ IDEAハンズオン――基本操作からプロジェクト管理までマスター

半分くらい読んだ。会社で読んでるがここ最近のお昼休みはプレステをやってしまっていて進捗があまり出てない。

Amazon CAPTCHA

感想

学んだところを使いこなせてない感がえぐいので、それもなんとかする必要がある。遊びで書いてるGoをVSCodeからintelliJ(GoLand?)にするとか考えてるけど金どうしよっかなーって感じ。

Docker/Kubernetes 実践コンテナ開発入門

70ページまで読んだ。若干停滞気味。Dockerってなあに?レベルのところはなんとなくわかった気がする。

感想

今の所説明がわかりやすくて良い。

英語

イングリッシュベルをやり続けている。 今月は80レッスン=33時間受講した。明らかにリスニング力が増している気がする。10月のTOEICに期待。そしてそのまま11月のラスベガスへ。 スピーキングはかなり怪しいので一区切りついたところでフリートークをしようかなと思いつつ、とりあえずDME Teensの完走が先かなー。いろんなことするとテンポが崩れそう。

これからやること

今月書いた記事

esareaでWebページの入力エリアをesaライクなマークダウンエディタ化する | Developers.IO

Web上のテキストエリアをマークダウンエディタ化するChrome拡張。すげー便利だと思う。

git-bugでWebサービスに依存せず、Gitリポジトリだけでバグレポートを管理する | Developers.IO

Gitのリポジトリ内だけでバグレポートを管理するツール。概念実証だけどこれがメジャーになるとGitホスティングサービスの世界観が変わってくる気がしている。

今思ってること

英語以外停滞してるのでその辺をなんとかする。とりあえずDocker/Kubernetes本が優先かなーといった感じ。 あとergodox EZ買ったが全然使えてないのでなんとかしなくては・・・。

複数のカレンダーアプリと連携して、各人のスケジュールを晒さずに予定の調整をしていい感じのタイミングをサジェストしてくれるアプリ

若干の可能性を感じる てゆーかGoogleカレンダーに予定調整のサジェスト機能欲しくない?