ユユユユユ

webエンジニアです

2020-01-01から1年間の記事一覧

Project Euler で最初の25問を解いた

以前のエントリで掲げた、最初の25問を解く目標を達成できた。最初の問題を解いてからちょうど10日での達成だった。これで全登録者のうち上位11.48%の進捗だという。まだまだ先は長いと知りつつも、十分すぎる達成感と自己肯定感を得られている。コラッツ数…

7月に取り組むテキストを紹介する

月が改まり、仕事も入った。時間の余裕は減る。しかし今までが暇すぎたのである。これからは気持ちを入れ替えて、メリハリをつけて勉強に取り組もうと思いを新たにしている。 で、そのためのテキストをいくつか用意したので、紹介する。 ■ キタミ式イラストI…

仕事に戻った

半年ぶりに人のためにはたらくことになった。と言っても、自分で行動を起こしてポジションをつかみ取ったわけではない。以前よりお世話になっていた縁で依頼してもらえただけで、ただただ運に恵まれただけだ。 もし声をかけてもらえていなかったら、きっとも…

std::map と std::unordered_map

map というデータ構造は連想配列にあたるものと単純に理解していた。unordered_map について追って知ることとなり、初めて map のキーが自動的にソートされることを知る。 #include <map> #include <unordered_map> int main() { std::map<int, int> mymap1; std::unordered_map<int, int> mymap2; in</int,></int,></unordered_map></map>…

応用から基礎へ

昨日、一昨日と数学に関係するエントリが二日続いたのは、明らかにひとつの方針を指し示している。数学を学び直すこと、ひいては基礎を学び直すこと。これが今後のひとつの軸になるだろうと予感する。 学問的根拠がなくても仕事はできる、とする向きがあるの…

『数の悪魔』を読んだ

数の悪魔―算数・数学が楽しくなる12夜作者:ハンス・マグヌス エンツェンスベルガー発売日: 2000/04/01メディア: 単行本(ソフトカバー) あほな質問はやめろ。頭を悩ますことがすごいことなんだ。1 算数を啓蒙する児童書として評判がいいと聞き、読んだ。子…

Project Euler をはじめた

projecteuler.net ご存知の向きも多いと思うが、 Project Euler は数学の問題をプログラミングで解いていくサービス。フィボナッチ数列の偶数項の和を求めたり、任意の整数の最大素因数を求めたりする。もっとも、これらは難度としては最低レベルとなる。進…

6月の振り返り

今月のエントリのうちめぼしいものを振り返りながら挙げていく。 Rails を絶対視しないこと “Rails is omakase” とか “The Rails Way” とかいうキャッチフレーズを盲信してしまう傾向を見つめ直して、少しずつそこから脱却しなければいけないと思い始めてい…

『クリーン・アーキテクチャ』を読んでフレームワーク中心主義からの脱却を考える

Hanami に触ってみたことを動機として、『クリーン・アーキテクチャ』を再読した。 たぶんに漏れず、例の同心円の図ばかり印象深く記憶していたが、改めて精読してみると、この図にはごく軽くしか触れられない。むしろ繰り返し主張され、議論の中心を占める…

`String#==` は実行時間が最適化されているか?

昨日の記事で、 secure_compare は String#== とは異なり常に一定時間で処理が行われる、と書いた。 jnsato.hateblo.jp あらためて GitHub Developer から引用する。 Using a plain == operator is not advised. A method like secure_compare performs a "c…

Rack::Utils.secure_compare を読む

Hanami と Sinatra の CSRF 対策のコードで、いずれも Rack::Utils.secure_compare という API を利用していることを発見した。何が secure なのだろうか? という思いがあり、読んでみた。 def secure_compare(a, b) return false unless a.bytesize == b.b…

<form> タグが送信できる HTTP メソッドは GET と POST のみ

TIL

素の HTML form では GET と POST リクエストしか送信できない。PUT, PATCH, DELETE のような HTTP メソッドをリクエストするには、サーバーサイドで適当に解釈してあげる必要がある。 例えば Rails の場合、 form_with ヘルパーで編集画面の form タグを生…

Sinatra, Rails, Hanami それぞれの CSRF 対策の流儀

CSRF 対策がフレームワークでどう行われるかを読み比べていた。せっかくなので簡単にまとめることにする。 TL;DR 対応するクラス/モジュール 不正時の挙動 トークン Sinatra v2.0.8 Rack::Protection::AuthenticityToken [source] 403 base64 Rails v6.0.3 A…

無理して Docker を使わないこと

TIL

Rails のちょっとした機能を検証するとする。そんなとき、まずはなにからやるか? 今日の僕自身はと言うと、 Dockerfile を作るところから始めていた...。 改めていうまでもないことだが、自戒を込めて書く。愚の骨頂であった。ほんのちょっとした検証にわざ…

heroku でのビルドが突然壊れたのでイシューを提出した

いわゆる「何もしていないのに壊れた」という状況に陥った。 症状としては、 Hanami アプリのデプロイにおける rake assets:precompile タスクの実行時に、 uninitialized constant Bundler とはねつけられてしまう。スタックトレースによると ここ でコケて…

iOS で Safari の Cookie を無効化しているとリクエストが CSRF 扱いされる

TIL

iOS の設定で Safari の Cookie 機能を無効化することができる。 support.apple.com 普段 Safari を使うことは多くないのでそう意識していなかったが、僕自身はこれを有効化していた。で、これを有効化していると、当然 Cookie を利用したセッション管理を利…

90日に一度、AWSのアクセスキーをローテーションする

AWS

AWS の個人アカウントに監査の仕組みを導入している。そのきっかけについては以前に書いた。 jnsato.hateblo.jp CIS AWS Foundations Benchmark を導入し、対応可能なセキュリティ対策を一通り有効化している。違反があれば AWS Chatbot 経由で Slack に通知…

配列の先頭と末尾を管理できる deque 型

AtCoderの過去問より、この問題を解いていた。 atcoder.jp やりたいこと 任意の数列を、空の配列の先頭と末尾に交互に追加していきたい。Ruby であれば、これは Array#unshift と Array#push を使って簡単に書ける。例えばこう。 n = 10 ans = [] 1.upto(n) …

ActiveSupport は気軽に使ってもいいものだろうか?

ActiveSupport はきめ細かく require できる ということを学んだのが昨日。とはいえ、それでもやはりためらいはある。 次に示すのは ActiveSupport が依存するモジュールである。 % gem dep activesupport Gem activesupport-6.0.3.1 concurrent-ruby (~> 1.…

ActiveSupport はきめ細かく require できる

hanami を利用した開発への所感 にて、こう書いた。 タイムスタンプを「○日前」と文字列に変換するだけのために、 ActiveSupport を丸ごと取り込むのは、理にかなった判断とは言えまい。 断定してしまっているが、実はよく調べないまま印象で語ってしまって…

宗教と暦の「歴史的文脈」を担うDateTimeクラス

DateTime クラスのドキュメントを読んでいた。 ほんの小さな好奇心で調べ始めたものだったが、世界文学のふたりの巨匠の命日を引き合いに出して暦の問題を鮮やかに示す文章に興奮させられて、つい読み込んでしまった。それはこんな例である。 shakespeare = …

hanami を使ってみて得られた知見と所感

Hanami で小さな開発をやってみた。 jnsato.hateblo.jp 単機能のウェブページに過ぎず、 Rails であれば1日でできただろうと思う。 hanami の機能や API を追いかけながらの実装だったので、やや時間はかかった。とはいえ、それでもファースト・コミットから…

hanami でブックマークマネージャを作った

1週間ばかり、 hanami による開発に取り組んでいた。動機付けを描写したのは以下のエントリ。 jnsato.hateblo.jp jnsato.hateblo.jp そして、作ってみたものがこちら。 heroku の無料 dyno にデプロイしている。 hanami-news.herokuapp.com ブックマーク管理…

Ruby 2.7 + hanami 1.3.3 + pg のプロジェクトでは bigdecimal 1.4 を使う

sqlite を pg アダプタに付け替えていた。一通り設定を終えて、開発サーバーを立ててみると、こんなエラーが発生した。Ruby 2.7 + hanami 1.3.3 + pg 1.2.3 で再現するはず。 undefined method `new' for class `#<Class:BigDecimal>' bigdecimal とは標準ライブラリで、 Ruby </class:bigdecimal>…

hanami の ApplicationLayout は単体テストすべきでない

hanami new コマンドは application_layout_spec.rb を自動生成し、レイアウトクラスの単体テストのボイラープレートを用意してくれる。しかし実はこれは private API に依存しているとのこと。 github.com 具体的なエラー発生ケースはこう。まずこれが自動…

Rack::Session::Cookie と Secure 属性

hanami にセッション管理を導入しようとしている。デフォルトでは Rack::Session::Cookie を使って cookie にセッションキーを格納する ことになっている。ちょうど先日、 Real World HTTP を読んで cookie の仕組みを復習したところだったので、 Rack がそ…

認証系 gem から知った BCrypt のこと

認証系の機能を持った gem を調べていた。見ていると多くの gem がパスワードのハッシュ化を BCrypt で実装している。きっと BCrypt ならば安心という一般的な合意があるのだろうとだけ推測して、あまり深入りはしなかった。 これだけであればただのつぶやき…

トップレベルドメインと帝国主義

TIL

この記事を読んだ。 gigaom.com 要約する。 インド洋チャゴス諸島。モーリシャスの西に位置し、アフリカから奴隷を入植させて発展した島々は、奴隷解放を経て、1960年代までにはココナッツ農園を軸とした経済と、それに携わる島民の暮らしがあった。 冷戦構…

hanami の Getting Started をやった

表題通り、公式ガイドが提供しているハンズオンをやってみた。 guides.hanamirb.org 書かれていることをひととおりなぞったに過ぎなく、批評的に何かを語ることはまだできないけれど、アークテクチャの単純明快な美しさには心を揺さぶられた。明確な責務を与…

hanami をやることにした

自分の軸となる技術としての Ruby をさらに磨きたいという気持ちが強まっている。なにせ時間だけはあるから、これまでなかなか取り組めていなかったテーマに腰を据えて組み合ってみようかと思っている。 で、やりたいこともそれはそれでいくつかあるのだが、…