ゆるふわ技術日誌

エンジニア見習いの悪戦苦闘日記

TLSのはなし #339

作業など

今日の午前と午後の一部はやり残していた雑務をいろいろとこなした。

朝の研究室はボスと僕くらいしか居ないのでボスが何か言って来ない限りはとても静かで集中できる。良い。

TLSのはなし

研究で、HTTP/2関連のことをやろうとしているので、まずは現状を知るという意味でHTTP/2を使ってみることにした。

HTTP/2は仕様上は暗号化なしでも利用することができるが、一般的なブラウザは暗号化された通信のみでHTTP/2を許可しているので実質的にはSSL通信への対応が不可欠、というわけです。

適当にopensslを使ってオレオレ証明書を作って適切にconfigをかけば使えるのですが、その適切な設定ってのがわからない。

ひとまず動かしたいだけなら、サーバー証明書秘密鍵をおいてあげればいいものの、実際に使われるサーバーでは暗号化スイートをしっかり選んだりしてあげないと脆弱性をうむ原因になるそう。

一度3年生の頃に調べた記憶はあるのですが、全部忘れてしまってその時のメモもなさそうなので、またやり直し…。

qiita.com

この辺のお話は本当に難しい。

(とはいえ研究対象はここじゃないので、暗号化スイートなんて適当でいいって話あるけど)

雑談

自分を見つめ直し。今日は穏やかに生きたよ。

やっと風邪が治ってきた #338

治ってきました。よかった。

まともなご飯が食べられる喜び…………。

今日やったこと

  • 研究室月一ミーティング
  • ボスのお願いでDockerfile書いてた

月一ミーティングに出す資料が風邪の真っ只中に提出期限だったのでフラッフラの状態でiPadで作った物だったことを除いては概ね前向きな意見をもらえてよかった。

あとはボスのお願いでちょっとしたDockerfileを書いたりしてた。CMDでwebrickを動かしてるんですが、それやるとなんかCtrl+Cで止められないんですよねなんなんだあれ。

あと、React始めたいマンがいたのでチョコーっとだけ教えたりしてた。どっから教えたらいいものか、難しい。

話してる間に論点が飛びまくってしまってすまんな…という気持ち。

雑談

進捗はなかったに等しいかもしれないけど、心がやっと普通に戻った。よかった。

現実逃避がてらコードを書いてた #337

現実逃避

研究が空中分解してしまったので相談がてら研究の相談をボスとしたくて雨の中研究室へ向かったのですがボスがいなかったので一日現実逃避してました(オイ


僕はレポートはTeX使って書く派なのですが、世の中にはWordを使って書く人種がいるそうで。どうしてそんな苦行をするのか。。。(ここでいうレポートは情報系のレポートでソースコードとかを貼る必要性があるという前提です。普通に文章書くだけなら別にWordでいいんですけどね)

んで、ソースコードを貼るときにだいたい必要になるのが行番号。Wordで行番号入れる方法調べるとExcelに貼ってオートフィルで行番号入れてコピーするとかいうスーパークレイジーな方法がヒットするらしいですがありえないと思ったのでサクッとツールを作成しました。(見た目をいい感じにしてたら地味に時間食ってしまったがロジックはサクッと作った)

追記:catのnオプションは勧めたのですがWindowsでは使えないということで却下されてしまいました

Line number generator

行番号追加して吐き出してくれるだけ。そんだけ。一応Reactで書いてはいますが殴り書きなのでなかなか酷いコードです。使ってくれる人がいたらリファクタリングしようかな。(これ使ってくれる人が多いのは嬉しいようであまり嬉しくないですが)

デプロイもGitHub Pagesで楽チン。

gh-pages - npm

これ使うとブランチ切ってコミットとプッシュまでやってくれる。すげー楽。

コンソールに面白いの仕込んだのでもしよかったら見てみてねw

Golang

今日も今日とてGolang

基本文法はさらったのであとは書いて覚えるかなぁというフェーズ。

フロントエンドの勉強してる時も思うんですが、勉強用に何か書きたいって時みんな何を書くんですかね。誰か教えて。

雑談

研究〜………

過ちに気がついてしまって凹んだ #336

過ち

ここ2週間くらい研究室のボスから降り注ぐタスクを適当に避けつつ研究の下調べ的なのを進めていました。

英語と格闘したりしていたのはまさにそれ。

今日も英語と戦いつつ調べ物を進めていたのですが、どうやらやろうとしていたことはとっくに解決していた模様。さっき知った。これは流石に研究にできないですね。

研究にできないというだけで学びはあったと思うので後ほどQiitaかどこかにまとめてみようかとは思っていますが……辛い…………!!

追記:ここに全部まとまっているのでQiitaに書くことなかった。 blog.jxck.io

僕がやろうとしていたのはこの記事の終盤に出てくるHTTP/2のServerPushをCDNなどの1st partyリソース以外で用いる方法を考えていたのでした。

とは言っても、私が考えていたのはCDNに対して行われるアクセスの統計を取って、個々のアセットの関連を自動的に生成して投機的にServerPushすればおもしろいのではないかといったことでした。

追記ここまで。

先行研究されてましたーとかだとあるあるかなぁと思うのですが、研究の段階はとっくに通り越して標準化されてたなんて…。無知にもほどがあって悲しいですね。

まぁ気持ち入れ替えて頑張っていくしかないですね。

Golang

これまた研究に使おうかと思って勉強を始めたところでした。

Goを選んだ理由としては、Real world HTTPのサンプルコードなどからも感じたのですが、ネットワークを扱うに当たって標準ライブラリでも十分な機能を持っていそうなこと、そして型がある…w

まぁ流行ってるっぽいし研究で使うなら一石二鳥かなと思ったと思ったというのもあるかも。

こちらはとりあえず研究死んだけど引き続きやっていこうと思います。

雑談

しかも研究でやろうとしてたことの話、数ヶ月前にちらっと聞いていたということが発覚したんですよね。

あの時、興味をもって調べていれば………。

英語の記事と格闘していた #335

英語の記事

Performance Calendar » HTTP/2 Push: The details

この記事。

TL;DRを読んだ感じ、現実的な世界でのHTTP/2サーバープッシュの活用方法について書いているんだと思う。

あまりにもわからなすぎるので原文の記事を横に置いてesaに翻訳しながら読んでいきました。

いまは1.4付近まで読んだ。TCP slow startのあたりとかバッファのあたりを読んでて、TCPに関する知識の圧倒的不足みを感じた。これはいかん。

とりあえず、昔買って放置してあるTCPの本を読むことにした。

Windowsに進捗を飛ばされた

ただのグチなんですが。

とある資料づくりでパワポを使いたくて研究室のWindowsマシンを使ってたらトラブルに見舞われて再起動したらパワポで作りかけてたスライドが消えました。再起動前に確認くらいしてくれればいいのに…。

雑談

記事読みながらesaに翻訳を書く作業、iPadでもできるからすごい。

電車の中でも座れさえすれば作業できるからかなりいい。

(家帰ってきてから再現スクショ)

iPad、良い買い物だったなぁ。

FirebaseをちらりとみたりReact書いたりしてた #334

Firebase

名前だけ聞いたことがあったのですが、今作っているアプリケーションに活かせるかもと思ってみてみた。

私が使いたいのはRealtime database。JSON形式のデータを呼んだり書いたりということをクライアントから行えて、その上変更をサブスクリプションできるのでチャットアプリ的なリアルタイムさが求められる用途にも使えるらしい。(あとは、クライアントがオフラインになっても利用を継続できて、オンラインになったときに同期を取ってくれるみたいな機能もあるらしい)

とても良さげだとは思ったのですが、すでに書きかけだけど自前でゴリゴリ書いたサーバー側があることに加えて、ユーザー認証的な機能をつけようとすると、別途Firebase Authenticationというやつをつかってあげないといけなかったり、今回作ろうとしているものにはちょっとオーバーなので採用は見送りました。

(Authenticationの方はGoogleGitHubTwitterといったサービスを使ったログインや、通常のパスワードとIDを使ったログイン・電話番号認証つきのログインなどを実装できるプラットフォームのようです。自前でユーザーの情報を管理しなくてもいいのはかなり良さげですね。)

React

てなわけで、Firebaseの採用は見送ってゴリゴリとフロントエンドを書いてました。

今回作ろうとしているアプリケーションはリアルタイム通信が必要だったので、ちょっとレガシーかなと思いつつもSocket.ioを採用してみました。

そして、フロント側で以下のようなUtilを作って叩くようにしてみました。

export default class Api {
  public socket: any;

  constructor() {
    this.socket = io('http://localhost:8000');
  }

  async join(name: string) {
    this.socket.emit('Join', name);
    return new Promise<User>(resolve => {
      this.socket.on('Joined', (user: User) => {
        resolve(user);
      });
    });
  }
}

(一部抜粋)

叩く側からはWebSocket使っていることを意識しなくて済む…と思ったんですが、上のコードに示したような処理なら普通にAPI立てればそれで済んだ気がしてきた。

リアルタイム性が求められる情報だけをsocket使ってやりとりした方がコード綺麗だったのでは…。

雑談

ボルダリングはいいぞ。

というかFirebaseすごいっすね。(超今更)こういうものがあるって知らなきゃ使えないし、常にアンテナ張っておくのは大事なことなんだなと思いました。

ボルダリングをしてきた(進捗なし) #333

ボルダリング

八王子にボルダリングの店があったことを知り、初めて行ってきました。

オサレな外観。

ただ壁を登ってるだけ(失礼)なのにとても楽しかったです。

ランニングとかそういうキツさではなく、じわじわと来る感じのキツさなのもすごくいいなぁと思いました。

これからも定期的に行けるといいなぁと思った。そして、毎日10分やそこらだけどやってる筋トレもちょっと数増やしたりしたいと思った。

進捗

ない

せめてもの埋め合わせに、研究に関しての英語の資料を読もうと電車でiPad開いたものの乗り換え駅まで爆睡。オワタ。

雑談

人生21年、ついに体を動かすことの楽しさを実感しつつありよろしい。