HTML5/CSS3モダンコーディング 読了

非常に良いです。とても身のある本でした。
対象は、初級者から中級者程度かな。入門書ではないです。 IE9以降の基本となる内容でした。
いつもはbootstrap使っちゃうエンジニア向けにもいいと思います。
 
最近はあまりhtml/css書かないので、知らないことが沢山あってとても楽しかったです。
例えば以下のようなお話。

rem と font-size: 62.5%;

html に font-size: 62.5%: を指定しており、その理由が 主要ブラウザのデフォルトフォントサイズが16pxであることから 10px相当にするために設定しているとのこと。 なるほど。

box-sizing: border-box;

width/heightの指定がpadding, borderを含めてしまうので これを入れておくとより直感的に%指定ができる。
なにこれ、最高やん。

*, *::before, *::after {
  box-sizing: border-box;
}

他にも

letter-spacing: 1px;、datetime、cssカウンタ、HTML5では「実体文字参照よりutf-8」推奨、 background-size: cover; など沢山学べました。

 
ただ、こういうのを自らバリバリ書けるようになるには、量が必要だなとも感じました(当たり前ですが)。
あと一人で書くときは、ざっくりしかデザインしませんが、細部にはこだわるなら各要素のサイズ決めとかモックとか大事だなとも(これも当たり前か)。

イミテーション・ゲーム/エニグマと天才数学者の秘密

2014(5?)年の映画。Amazon Primeで視聴。なかなか面白かった。
ドイツのエニグマ暗号は、セッティングだけで159x10**18あるため、人による作業では解読できない。そこで、解読するための機械を作るという話。 クロスワードで人員募集、暗号解読の瞬間、MI6とロシアスパイとの関係、解読後にドイツに悟られることのないように統計を用いた話などとても面白かったです。
エニグマ解読は、戦争の終結を2年以上早め、1400万人以上の命を救ったと言われているということがエンドロール前に表示されます。すごい時代だったんだと、これらが事実に基づいた話だったんだというのが頭に残ります。

好きなセリフ

何度か登場するこの言い回し。
アランとジョーン(キーラ・ナイトレイ)で若干セリフが違うように聞こえるのですが、まぁほぼ同じです。

Sometimes it is the (very) people (who) no one imagine anything
 of who do the things no one can imagine.
時として誰も想像しないような人物が想像できない偉業を成し遂げる

tsvを mask するスクリプト(勝手にリファクタリング)

はじめて触ったRubyでTSVをマスキング処理。 | Developers.IO
を見ていて、(初めてという記載があるので、全然致し方ないと思います。斧投げてるつもりは全くないです。頑張って欲しいです。)全然rubyっぽくないscriptだったので、反射的にリファクタしてみました。
 

  • 色々問題あり(ここはruby関係ないですが、スコープが大きい、メソッドがない、変数名が微妙など)
  • eachが使われていない(headerとdata部分を分けて扱うことを検討した結果、forを利用しているようですが、基本for無しでいけます。)
  • 元の書き方ではoutputのclose処理が不要

やってみた

class MaskingTsvFile
  OUTPUT = "masked.tsv"

  def exec(input_file)
    lines = open(input_file).readlines.map(&:chomp)
    out = open(OUTPUT, "w")
    out.puts lines[0]
    lines.shift

    lines.each do |line|
      fields = line.split("\t")
      masked_fields = fields[0...-1].push(mask(fields.last))
      out.puts masked_fields.join("\t")
    end
    out.close
  end

  private
    def mask(unmasked_val)
      vals = unmasked_val.split("-")
      vals.map!.with_index do |val, i|
        (i != vals.size - 1) ? "*" * val.size : val
      end
      vals.join("-")
    end
end

if $0 == __FILE__
  MaskingTsvFile.new.exec(ARGV[0])
end