長いことフリーランスをやっていましたが、3月から再び会社員として働くことにしました。 このあたりの話はまた機会があればするとして、ここではそれにあたって必要になった手続きについて自分用にまとめておきます。
ちなみに個人事業は副業として継続する予定です。 どこかの会社のお手伝いをするというよりは、自分でサービスなどを立ち上げる方向で考えてます。そっちのほうが性にあっているのでねw
続きを読む長いことフリーランスをやっていましたが、3月から再び会社員として働くことにしました。 このあたりの話はまた機会があればするとして、ここではそれにあたって必要になった手続きについて自分用にまとめておきます。
ちなみに個人事業は副業として継続する予定です。 どこかの会社のお手伝いをするというよりは、自分でサービスなどを立ち上げる方向で考えてます。そっちのほうが性にあっているのでねw
続きを読むWebブラウザとサーバー間で常時、または一定間隔で通信を行っている場合、ユーザーが端末の前から長時間離れた際などに通信を停止したい場合があります。最新の情報をサーバからもらってきても使う人がいなければムダですからね。
サーバ負荷的な面で実装するケースが多い印象ですが、スマホアプリの「クラッシュ・オブ・クラン」では無操作状態が続くと強制的にアプリを再起動せよと表示されます。このゲームの場合はログイン状態のときは他プレイヤーが攻め込めないというルールがあるため、それを悪用されないためだと思われます。
というわけで、今回は何らかの事情で一定の時間ユーザーが何も操作を行わなかったかどうかをクライアント側(Webブラウザ)でかんたんに判定できる方法を試してみます。
続きを読むAWS S3を単なるストレージとして使う際には問題とならないのですが、S3をWebサーバとして使う場合はファイルのMIMEタイプ(Content-type
)を正しく指定しておかないとWebブラウザからダウンロードを求められるなど意図した通り動いてくれないことがあります。
この指定方法はシンプルでS3.putObject
を実行する際のパラメーターとして渡すだけ。
const params = { Bucket: 's3.example.com', Key: 'foo.html', Body: await fs.readFile('foo.html'), ContentType: 'text/html' } await S3.putObject(params).promise()
このときに予めMIMEタイプがすべて判明していれば良いのですが、不特定多数の種類のファイルを扱うような場合にはファイル名から拡張子を取り出して判定して……といった処理が必要になります。難しくは無いけどゼロから書くのは正直めんどくさいw
そこで今回はNode.js版のAWS SDKを用いてこのMIMEタイプを自動で判定する方法をまとめます。
※ちなみにCLIから使う場合はawsコマンド(が内部で使っているPythonのライブラリ)が自動的に判定してくれています。
続きを読むGitでバイナリや巨大なファイルを扱う場合に活躍するのが「LFS(Large File Storage)」。 詳細な説明は様々なページで行われていますので、今回はGitHubの利用を前提とした基本的な使い方についてだけまとめておきます。
簡単に言うとLFSを利用するとファイルの実際のデータは専用のストレージに、リポジトリ内部には200byteにも満たないハッシュ値等を保存することでリポジトリを軽量化することができるという仕組みです。
Gitはバイナリファイルに更新がある度に全データがリポジトリに保管されるため油断しているとあっという間にリポジトリが肥大化してしまいます。またGitHubでは通常100Mbyte以上のファイルをpushすることができません。それに加えリポジトリのサイズは1G程度が推奨されていることから「LFS(Large File Storage)」が必要とされているというわけです。
続きを読む「Brotli」はGoogleが開発したファイルの圧縮形式で、主にWebサーバとの間の通信量を削減する目的で利用されています。gzipの後継的な位置づけで圧縮率もgzipより高くすでに主要なWebブラウザで対応済みのため今後徐々に置き換わっていくことが予想されます。
で、通常はWebサーバなどにモジュールを追加などして利用するわけですが、今回はmacOSのTerminal上で利用してみます。結論としては以下の通り。
圧縮 (file.txt.brが生成されます)
$ brotli file.txt
解凍 (file.txtが生成されます)
$ brotli -d file.txt.br
続きを読む