kenju's blog

About Programming and Mathematics

"Teach Yourself Programming in Ten Years" と技術との付き合い方

http://norvig.com/21-days.html "Teach Yourself Programming in Ten Years" というエッセイがある。Peter Norvig という America のエンジニアが書いたエッセイで、界隈では有名だったらしい。ひょんなことからこの存在を知った。 So go ahead and buy tha…

『コンピュータアーキテクチャ改訂4版』を読んだ

コンピュータアーキテクチャ 改訂4版作者: 馬場敬信出版社/メーカー: オーム社発売日: 2016/11/23メディア: 単行本この商品を含むブログを見る 普段の仕事では高水準言語を書いているばかりであり、PC(program counter) や IR (instruction register)がどう…

『Understanding Computation』を読んだ

アンダースタンディング コンピュテーション ―単純な機械から不可能なプログラムまで作者: Tom Stuart,笹田耕一,笹井崇司出版社/メーカー: オライリージャパン発売日: 2014/09/18メディア: 大型本この商品を含むブログ (11件) を見る 実際に読んだのはだいぶ…

『Amazon Web Services 定番業務システム 12 パターン設計ガイド』読書メモ

Amazon Web Services 定番業務システム12パターン設計ガイド作者: 川上明久出版社/メーカー: 日経BP社発売日: 2016/07/12メディア: Kindle版この商品を含むブログ (1件) を見る Why reading this book? 今のチームになってから、仕事で AWS の各種サービスの…

Reading Notes of 5th Chapter of "Writing An Interpreter in Go"

Recently I have written a reading node blog post of "Writing An Interpreter in Go". http://itiskj.hatenablog.com/entry/2018/06/19/083208 After posting the article, I found that the author kindly publish a "lost" chapter - which is about im…

eslint-plugin-compat のメンテナになった

https://github.com/amilajack/eslint-plugin-compat 仕事で利用しているライブラリの一つで、広告表示の JavaScript SDK の互換性担保のために最近入れたもの。 ブラウザ互換の問題で広告表示ができない、といったクリティカルな問題は避ける必要があって、…

Reading Notes of "Writing An Interpreter in Go"

I have just finished reading & writing sample codes "Writing An Interpreter in Go". https://interpreterbook.com/ This is really a great book, especially because: You can write an interpreter from the scratch, with unit testing You can unde…

"Header Bidding" について会社ブログに書きました

Techlife に Header Bidding について書きました。 https://techlife.cookpad.com/https://techlife.cookpad.com/entry/2018/06/18/101324 Header Bidding についての導入事例はなかなか日本では見られないので、これを機に増えるといいなと思います。 また…

『情熱プログラマー』を読んだ。

情熱プログラマー ソフトウェア開発者の幸せな生き方作者: Chad Fowler,でびあんぐる出版社/メーカー: オーム社発売日: 2010/02/26メディア: 単行本(ソフトカバー)購入: 24人 クリック: 683回この商品を含むブログ (126件) を見る 久々に、技術書以外の書…

まつもとりースタイルの話がとても良かった

良かった。語彙力少ないけど、とてもよかった。特にこのスライド。好きなことをやり続けていいんだ、他人から間違ったと言われても自分を信じてやり続ければいいんだ、という、胸の熱くなる話。 そこで実際に一歩踏み出すからこそ、頂が見えてくるんだと思う…

Introduction to go-groom library - grooming your local repositories every day

https://github.com/kenju/go-groom を作った。 作った理由は、 ghq で管理しているある特定のディレクトリに対して、一連のコマンドを実行したい 例えば、毎日 remote branch から最新の状態を持ってきてくれる bundle install とかもしてくれる Host ごと…

"The dRuby Book" を読んだ

http://www.druby.org/sidruby/the-druby-book.html 背景 http://druby.hatenablog.com/entry/20170304/1488568155 関さんの ^ の記事を見つけて、"The dRuby Book" が公開されていることを知りました。こうして公開してもらえるのはありがたいです。 発売さ…

『オブジェクト指向設計実践ガイド』を読んだ

オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方作者: Sandi Metz,?山泰基出版社/メーカー: 技術評論社発売日: 2016/09/02メディア: 大型本この商品を含むブログ (1件) を見る 設計力って難しくて面白い。日々…

Ruby で Numbers->SVG のコンパイラを書いた

過去に書いたこれの Ruby 版。 itiskj.hatenablog.com Ruby で書き換えた理由は、TDD の型の練習だったり、オブジェクト指向開発をライトなレベルで実践したかったり、とまあいくつかあるものの、特に深い理由ではない。気が向いたので書いてみた。 前回同様…

『すごいHaskellたのしく学ぼう!』を読んだ

すごいHaskellたのしく学ぼう!作者: Miran Lipovača,田中英行,村主崇行出版社/メーカー: オーム社発売日: 2012/05/23メディア: 単行本(ソフトカバー)購入: 25人 クリック: 580回この商品を含むブログ (73件) を見る 実際読んだのはだいぶ前の話だが。。多…

新訳版『テスト駆動開発』を読んだ

テスト駆動開発作者: Kent Beck,和田卓人出版社/メーカー: オーム社発売日: 2017/10/14メディア: 単行本(ソフトカバー)この商品を含むブログ (1件) を見る 旧訳版も読んだことがなかった。この本が非常に優れているのは、すごく細かいステップを経ながら、…

スライド『Black Belt Online Seminar Amazon CloudWatch』メモ

資料:https://www.slideshare.net/AmazonWebServicesJapan/black-belt-online-seminar-amazon-cloudwatch CloudWatch システム監視(死活監視、性能監視、キャパシティ監視) Metrics, Namespace, Dimension が基本的概念 標準メトリックスの他、独自メトリ…

『メタプログラミングRuby 第2版』を読んだ

メタプログラミングRuby 第2版作者: Paolo Perrotta,角征典出版社/メーカー: オライリージャパン発売日: 2015/10/10メディア: 大型本この商品を含むブログ (3件) を見る メタプログラミング周りを中心に、Ruby のオブジェクトモデル関連の API についてより…

AWS Lambda の Versioning と Alias 機能についてメモ

資料:AWS Black Belt Techシリーズ AWS Lambda Updates https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-aws-lambda-updates tl;dr Lambda は明示的にバージョン管理ができる エイリアス機能を使うことで、「本番用」かどうかなど…

スライド『AWS Black Belt Online Seminar 2017 Amazon Kinesis』メモ

AWS

資料:https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2017-amazon-kinesis Amazon Kinesis Streams ストリームデータを処理するためのアプリケーション開発 3AZの永続ストレージに強い整合性でデータを複製 順序付きイ…

スライド『AWS Black Belt Online Seminar 2017 Amazon DynamoDB』メモ

資料:https://www.slideshare.net/AmazonWebServicesJapan/20170809-black-belt-dynamodb 自分用メモ。 学び: capacity を安易に減らすことはリスクであることがわかった Auto Scaling, LSI/GSI は知っていはいたけどまだガッツリ使っていない Atomic Coun…

Cookpad TechConf 2018 で LT『広告配信サーバーと広告配信比率最適化問題』で話してきました

https://techconf.cookpad.com/2018/ 本日のLTを公開しました。質問お待ちしております。 #CookpadTechConf https://t.co/m4UqB2CNmU— kenju (@itiskj) February 10, 2018

Railsでiframeからのリクエストを許可するHeadersをafter_actionで設定する

Abstract iframe からのリクエストを許可するには、 X-Frame-Options: ALLOW-FROM https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Option 'Content-Security-Policy: frame-ancestors https://w3c.github.io/webappsec-csp/#directive-…

IODATAルーターを経由してVPNに接続できない時に見直すべき設定

例えば、会社のネットワークにVPNで接続するような場合、無線ルーターの設定によってはデフォルトでつながる場合とそうでない場合が存在する。 ルーターを再起動したり、新しいルーターを設定したときにVPNに接続しなくなった場合は、以下の項目を調べてみる…

Programming Contest: 数字をローマ数字に変換する

exercism.io をやっていて、http://exercism.io/tracks/ruby/exercises/roman-numerals という問題に出くわした。数字が渡されたときに、ローマ数字(String)に変換するメソッドを実装しろ、というものだ。 Problem Specの一部抜粋は以下のような感じ。 def…

社内GHEとGitHub用のGit Author/Emailを分ける方法

基本的には、社内PCを使っているので、 git config --global user.name "ghe author name" git config --global user.email "me@example.com" とGloballyには社内用GHEアカウントでGitを定義した上で、GitHub用のアカウントを使いたいレポジトリでは、 git c…

2017年振り返り

仕事 仕事でRubyをがっつり使うようになったので、一年通してずっとRuby中心に書いていた。サブでは、前半はWebアプリでReact/Redux/TypeScriptのアプリを書いていたので、ES6やNode.jsを結構書いた気がする。後半は機械学習系タスクが増えたので、Python (J…

2017年に買った技術書・一般書籍

年末の棚卸し。備忘録として。 9割方は読了済みだけど、リファレンス目的で買った厚めの本とかはもちろん全部読んでいない。 基本的にAmazonで買った購入履歴を参考にしているので、紙媒体で買った本もあるので網羅はできていない。 こうやって振り返ると、…

"Weighted Random Sampling (2005; Efraimidis, Spirakis)"

ランダムサンプリングのお話。 課題 配列の中から、ランダムに値を選択したい。 その際、必要に応じて重み付けしたい。 実用例 広告配信サーバーにおいて、ランダムにクリエイティブを選択したいときとか。 解決策の一つ "Weighted Random Sampling (2005; E…

Implement Timeout in Ruby

Rubyでタイムアウトをアプリ側で実装したいときなどは、Timeoutというビルトインのmoduleを使えば簡単に実装できる。 docs.ruby-lang.org Example Definition DEFAULT_TIMEOUT = 1 * 60 # 1min def with_timeout(timeout_sec: DEFAULT_TIMEOUT) begin Timeou…