水島雄太のブログ

個人的かつ雑多なブログです。

プログラミング

TypeScriptのkeyofの謎仕様

TypeScriptには keyof というオペレータがある。 例えば、 type Point = { x: number; y: number }; という、型を定義した場合、 > type Point = { x: number; y: number }; undefined > type P = keyof Point; undefined > var point: P = "x" undefined > …

Raspberry Piで学ぶコンピュータアーキテクチャを読んだ

一つのパーソナルコンピュータについて、メモリ、CPU、OS、ネットワーク、周辺機器まで説明されている本を読みたくなったので、Amazonで評価も悪くなさそうな、この本を選定。 そこそこ分量はあるので、読み終わるまでに1か月半ほどかかったが、なかなか良…

闘うプログラマーを読んだ

8年ほど前ドワンゴに入社したときにチームリーダーに闘うプログラマーを貸されて途中まで読んでいたのだが、結局通読はしないままになってしまっていた。 日頃プログラミングを行う中でそういえば最近燃えるものが無いなと思い、なにか情熱を焚きつけるよう…

マイクロサービスアーキテクチャを読んだ

概要 現在SREとしてマイクロサービスやDevOpsに関する仕事をしている割には、マイクロサービスについてまとまった書籍を読んでいないことに気づいた。 何か体系的に学べそうな書籍が何か無いかと調べると、オライリーのマイクロサービスアーキテクチャが割と…

imagemagick で アルファチャンネルを削除する

何が起きたか Flutter で iOS アプリを 作成し、Validate した際にエラーが発生した 解決法 アイコンに使用している画像からアルファチャンネルを削除する。 アルファチャンネルを削除するやり方としては色々あるが、ここでは ImageMagick を使う。 convert …

30秒でわかった気になるGPG

特徴 PGP(Pretty Good Privacy) とは 公開鍵暗号方式を使用した暗号ソフトウェア 主な用途はファイルやメールの暗号化 公開鍵暗号方式を使用するが認証局は設置せず利用者の責任で鍵を管理する 秘密鍵を使用するためにパスフレーズが必要だが、パスフレーズ…

SVGを極める上で参考にすべき資料

はじめに 今年はSVGを極めることを目標としているので、SVGを極める上で必要な知識や理解を得るために必要な資料について記述する。 資料 SVGエッセンシャルズ 第二版 SVGエッセンシャルズ 第2版作者:J. David Eisenberg,Amelia Bellamy-Roydsオライリージャ…

コマンド本体の実行パスを出力するコマンド一覧とその機能の比較

はじめに 実行したいコマンドの実行パスを知りたいときに which や whereis を違いをよく知らずに使っており、そのことをふとした瞬間で恥じてしまったため、違いをまとめます。 macOS 10.14.6 に最初から入っているコマンドを対象にしています。 コマンド本…

20181128

Linux Mint 19 Tara Xfce をインストールした Ubuntuが起動しなくなってしばらく放置していたMi Notbook Air。 USBメモリからLinux Mintをインストールしようと試みたが、GRUBが起動してからカーネルを読み込むことができず、故障したのかなと放置していたが…

典型的なScalaプロジェクトで特定のワードが含まれるファイル一覧を検索する方法

find . \( -type d -name '.idea' -or -type d -name 'tags' -or -type d -name '.git' -or -type d -name 'target' -or -type d -name 'tmp' \) -prune -o -type f -print |xargs grep hogehoge |cut -d ":" -f 1|uniq

godnsを設定

godns.confをloopbackアドレスにすると、外部に公開されないという初歩的なことでハマってしまった気をつけよう。

ECSまとめ

ECSについて ECSは AWSが提供する、kurbernetes・Swarmに似た、コンテナ管理サービスのうちの1つです。 普段開発環境でDockerを使用している方、kubernetes・SwarmなどでDocker Clusterを構築している方でも、ECS独自の用語などのため、混乱する方が一定数…

tmuxで新規ウィンドウを作成した際のデフォルト名を設定する

概要 tmux に reattach-to-user-namespace' した際、新規ウィンドウ名が全て、reattach-to-user-namespace' に設定されてしまいました。 消去などでリネームの手間がかかるため、任意のデフォルト名を設定する方法を調査しました。 設定方法 stackoverflow.c…

tmux/screen上でのnvimのescapeレスポンスを早くする

概要 tmux/screen 上で nvim を使用した際に、 escape/Ctrl-[ 入力に対するレスポンスが遅いため、これを解決する方法について記述します。 tmux/screen 上で nvim のescapeレスポンスを早くする $HOME/.tmux.conf 上で 以下の設定を追記する set -s escape-…

エンジニアが意識するべきこと

エンジニアが意識するべきこと エンジニアが意識するべきことを列挙する 楽しむ 純粋に楽しめる分野について目標設定を行う。 苦行にならないように、飽きが来ないように問題を設定する。 不安にならない 技術領域は多岐にわたるため、自分が知らない技術が…

Rustでファイルの変更を検知して自動でコンパイルやテストを行う

はじめに Rust では GitHub - passcod/cargo-watch: Watches over your Cargo project's source. を使うことで、簡単にファイルの変更を検知して、自動でコンパイルやテストを実行することが出来ます インストール Macの場合、以下のコマンドで完了します b…

Scala 2.12.3 がリリース

Scala 2.12.3 Release Scala 2.12.3 · scala/scala · GitHub Scala 2.12.3 がリリースされました。 変更点 コンパイル速度の高速化 インラインクラスを制御するコンパイル最適化 オプション -opt:l:inline の追加 それに伴い、 -opt:l:classpath と -opt:l:p…

JavaScriptのガベージコレクション

JavaScriptのGCアルゴリズム 昔は参照カウント方式でガベージコレクションを行っていたが、参照カウント方式では例えば以下のようなサンプルコードでメモリリークが発生してしまう。 var div; window.onload = function(){ div = document.getElementById("m…

Java Memory Managementを読んだ

概要 Java memory management | Dynatrace を読んだのでまとめました。 Java Memory Management How Garbage Collection Really Works ガベージコレクションという言葉から、ゴミ集めをする実装だと思いがちだが実はそうではないよ ガベージコレクタが管理し…

「プログラマのためのDocker教科書」を読んだ

概要 プログラマのためのDocker教科書」を読んだため、章毎の感想とまとめについて記述する。 対象読者 導入編でインフラ・ミドルウェアの基礎的な知識について解説があるため、非プラグラマでも基本的なUNIXコマンドが使用できるならば読み進めていける。 …

Vue.js雑感

概要 Vue.jsを使用した雑感について記述する Vue.js雑感 日本語の公式ドキュメントがちゃんと整備されており、宣言的レンダリング機能により、APIを呼び出して取得した値を定義しデータにバインドするだけで、おおかたの機能が実現できる。 jQUeryベースだと…

機械学習をツールとして使えるようになるまで

概要 機械学習をツールとして使えるようになるまでに学習すれば良いことをまとめる。 何を学習すればよいか 機械学習フレームワークはPythonで書かれているものが多いので、Pythonをある程度読めると学習が早い。 機械学習フレームワークはWebフレームワーク…

「スマートフォンアプリマーケティング現場の教科書 リフロー版」を読んだ

概要 「スマートフォンアプリマーケティング現場の教科書 リフロー版」を読んだのでまとめと感想をここに記します。 何が書かれているか スマートフォンアプリに関わる企画、ビジネス、プロモーション、運用、マーケティング、分析について、企画からリリー…

AppleWatchの音声入力機能を使った処理系を作る

はじめに これは 第2のドワンゴ Advent Calendar 2016 - Qiita 18日目のために書かれた記事です。 なぜAppleWatchの音声入力機能を使った処理系を作るのか AppleWatchの文字入力はキーボードやタッチUIを利用することが出来ないため、文字入力方法としては以…

特定の相手のAmazonアフィリエイトリンクを生成する

何故するか 皆さんはAmazonアフィリエイトIDを持っているでしょうか。 Amazonアフィリエイトは御存知の通り、特定のIDを含んだURLからAmazonの商品を購入することで、IDの管理者にお金が入るサービスです。 何かWeb上の記事を経由してAmazonで商品を購入した…

プログラミングはスキマ時間にこそやるべき

概要 プログラミングはゾーンに入るまでの時間が長いため、スキマ時間にプログラミングをやることに対して躊躇いが発生してしまうことがあるが、 以下の理由からむしろスキマ時間にこそプログラミングをやるべきなのではないか。 プログラミングをスキマ時間…

Flask Blueprint における template_folderパス解決の罠

Flask には Blueprintというアプリケーションをモジュール化出来る機能が備わっていますが、このBlueprintのtemplate_folderパス解決にはちょっとした罠があります。 Flaskで以下のようなパッケージ構成を組んだと仮定します。 run.py admin/ __init__.py vi…

ニコニコ動画にartihata動画を投稿しました

株式会社ドワンゴの運営するニコニコ動画にEmoji組版編集サービス artihata の紹介動画をアップしました。 artihata では言語はClojureとClojureのWebアプリケーションフレームワークである Luminus を採用しています。 ほとんどの実装はJavaScriptで記述さ…

Clojure日本語書籍まとめ[2015年6月時点]

Clojureの日本語書籍も数冊出るぐらいになりましたので、ここで一つ2015年6月時点でのClojure日本語書籍についてまとめてみました。 プログラミングClojure 第2版 Clojureの日本語書籍といえばまずコレ。 ハワイ在住Lispハッカーとして有名な川合史朗さん訳…

ClojureのAgentで生成されるスレッドプールのサイズを変更する

ClojureのAgentの実装では、2 + Runtime.getRuntime().availableProcessors()で得られるサイズでスレッドプールを生成するが、このスレッドプールのサイズはset-agent-send-executor!に任意のExecutorServiceを渡して書き換えることが出来る。 set-agent-sen…