読者です 読者をやめる 読者になる 読者になる

雀巽の日記帳

雀巽が綴る日常の記録

「語源でわかった!英単語記憶術」がとても面白かった

英語生活

「語源でわかった!英単語記憶術 」を読みました。

語源でわかった!英単語記憶術 (文春新書)

語源でわかった!英単語記憶術 (文春新書)

語源について書かれてる本は多いですが、これは「印欧祖語」の「原音」まで遡って解説してる点が良いなと感じました。

あまりたくさん読んではいませんが、他の語源関係の本だと、 単に接尾語、接頭語、語幹の羅列になっているタイプのものが多い印象です。

個人的にはこちらの「原音まで遡る」というアプローチが非常に身体に合いました。

読むのは結構大変でしたが、かなり多くの発見があり良かったです。

何度読み返しても学びがある系の本だと感じるので、ちょいちょい読み直したいなと思います。

とても面白く、良い本です。

Windows の初期設定をまとめたよ

ITライフ Tips

MacBook Air をさよならバイバイして、Dell XPS をゲットしたので、Windows の初期設定についてまとめてみます。

  • キーボード設定
  • 日本語設定
  • 開発設定
  • MISC

キーボード設定

キーリピート

Control Panel -> Keyboard で Keyboard Properties を開き、Speed の Repeat delay を最短に、Repeat rate を最速にする。

CapsLock

Ctrl2cap を利用し、CapsLock を Ctrl に変更する。

日本語設定

日本語表示

Control Panel -> Clock, Language, and Region -> Change location -> Administrative と開き、 Language for non-Unicode programs を Japanese (Japan) に変更する。

日本語入力

まずはGoogle 日本語入力 を導入する。

次に Control Panel -> Clock, Language, and Region -> Change input methods を開き、Google 日本語入力を追加する。

ストアの言語を英語のままにするため English (United States) をプライマリのままにし、Options -> Change override から default input method を Google 日本語入力にする。

同じ画面から Google Japanese Input の設定を開き、MS-IME の Keymap style に以下のキーマップを追加する。

Mode Key Command
DirectInput Ctrl Space Activate IME
Precomposition Ctrl Space Deactivate IME

これで macOS と同様の操作で IME の ON/OFF の切り替えが可能になる。

開発設定

CLI 環境

いろいろ試した結果、MobaXterm が非常に快適だった。

ただ、Virtualbox 上に openSUSE を入れるので、そっちのターミナルを使えば良いやということで導入は見送り。

Linux

Windows での Linux ライクな開発は諦め、Virtualbox 上に openSuseXfce 導入する。

以下の公式サイトから必要なモノをダウンロードし、インストール。VirtualBox Extension Pack を忘れずに導入しておく。

ディスクサイズは固定で 32GB にした。Virtualbox のチューニングは適宜ググる

Settings -> General -> Advanced を開き、Shared Clipboard と Drag'n'Drop を Bidirectional しておくと便利。

openSUSE 導入後、Guest Additions for Linux を入れる。

導入方法はここここを参考する。

仮想ディスクぽちぽちと GUI からインサートして、# zypper in gcc automake kernel-source kernel-syms で必要そうなものを入れて、最後に # sh ./VBoxLinuxAdditions.run で導入完了。

ネットワーク設定

Virtualbox の Settings -> Network の NAT の Advanced 設定から、必要な PortForwarding を追加する。

現在追加している Port Forwarding Rules は以下の通り。

Name Protocol Host IP Host Port Guest IP Guest Port
Rails TCP 3000 3000
MailCatcher TCP 1080 1080

次に openSUSE 側で YaST -> Security and Users -> Firewall を開き、Disable Firewall Automatic Starting を設定し、Firewall を無効化する。

これで、それぞれ以下の方法でゲスト側でアプリケーションを起動すれば、ホスト側から localhost:PORT としてアクセスが可能になる。

  • Rails
  • MailCatcher
    • mailcatcher --ip=0.0.0.0

解像度 (DPI)

Windows 側の DPI スケーリング (画面拡大率) が Virtualbox 内の OS には反映されないため直接設定を変更する。 XPS 13 では 150% が推奨値かつデフォルト値だったが、流石にでかすぎるので 125% に変更した。

調べたところ、

  • 小-100%(96 DPI)
  • 中-125%(120 DPI)
  • 大-150%(144 DPI)

Windows の基本数値らしい。

Menu -> Settings -> Settings Manager -> Appearance -> Fonts を開き、Custom DPI setting を有効にし、Windows 側に合う数値を設定する。

ただ、普段は外部モニタで作業しているので、基本は無効にしている。

日本語入力

Fctx-mozc を Fcitx - openSUSE に従い、以下のコマンドでインストール後、再起動する。

$ sudo zypper install fcitx-mozc

再起動後、右下のキーボードアイコンから Input method に Mozc を追加する。

これで Ctrl + Space で日本語入力へのトグルでの切り替えが可能になる。

CLI 環境

ターミナルは Xfce デフォルトの Xfce Terminal を利用する。 最初からまともな Terminal があり、Windows と違ってここで消耗しない素敵。

開いたら Preferences を開き Colors の Presets から Solarized をロードする。Solarized 最高。

そして必要なツール一式を以下の通り導入。

$ sudo zypper install make gcc-core git tmux xsel

Git を導入後、ここを参考に Github の設定を行う。

そして necojackarc/dotfiles を README に従いぶち込み設定完了。

MISC

カレンダー

One Calendar を導入。

関連記事

necojackarc.hatenablog.com

関連画像

「Team Geek ―Googleのギークたちはいかにしてチームを作るのか」を読んだ

ITライフ

「Team GeekGoogleギークたちはいかにしてチームを作るのか」を読みました。

Team Geek ―Googleのギークたちはいかにしてチームを作るのか

Team Geek ―Googleのギークたちはいかにしてチームを作るのか

この本、メッチャ良いです。

エンジニアが忘れがちだけど、絶対に心がけておくべきことについてみっちり書いてあります。

また、自分の中の「良きリーダー像」が見えてきたのもかなり収穫でした。 自分用メモ書いたので、適宜見返して自分のものにしていきたいなと思います。

軽妙な語り口で書かれた本で、更に200ページもなく薄い本なので、是非気軽に読んでみてください。

HRT*1 を大事に生きていこう!

*1:Humility, Respect, Trust

痔瘻手術から9日目で無事ゴムが取れました

日常生活

先週の月曜日に痔瘻の手術をしてきたんですが、手術後9日目の本日、無事にゴムが取れました!

necojackarc.hatenablog.com

お医者さんが「1週間〜10日で取れる」とおっしゃていたんですが、まさにドンピシャリでした。

ちなみに、外れたゴムの記念写真も撮りました。

f:id:necojackarc:20161005133824j:plain

このサイズのゴムが1週間ちょっとで身体を貫通して外れるなんて、人間の身体って凄いですね……。

そして輪っかちっちゃ!こんなんがお尻についてたら痛いはずやわ!

明日また通院予定です。変な外れ方してないかだけが心配です。

経過良好だといいなー。

日帰りで痔瘻の手術をしてきました

日常生活

本日、日帰りで痔瘻の手術をしてきました(´;ω;`)

全体的に消化器官が弱く下痢しやすいんですが、半年前の新サービスリリース前後に下痢下痢してたころ、肛門周囲膿瘍からの痔瘻になっちゃってたっぽいです。

この頃、夜中まで働いてたりとストレスが多く、更に睡眠不足も重なっており免疫力が低下してたと思うので、それで……という感じだと思います。

痔瘻(じろう)」とは、名前の通り痔の一種ではありますが、よく知られてる「いぼ痔」や「切れ痔」とは別物です。「穴痔」と呼ばれることもあるそうです。 治療方法が手術オンリーというクレイジーなやつです。勘弁してくれよまじで……。

www.rakuc.com

入院して半身麻酔での手術が多いようですが、近所の先生は基本的に日帰りで局所麻酔で手術を行うスタイルのようでした。

おそらく術式は下記のリンクにある「痔瘻結紮法」か何じゃないかなと思います。

www.amigo2.ne.jp

有名な治療法は思い切ってバサッといく「痔瘻切開開放術式」と、数ヶ月かけて徐々に取り除く「シートン法」だそうですが、 「ウチではシートン法みたいなまどろっこしいことはしない」とおっしゃっていました。強い。

じゃあ何なんだろうと思って説明を元に調べてみたところ、「痔瘻結紮法」が一番近そうな感じでした。

術式に使っていたゴムもネットで調べて出てくるものに比べて細い気もしますし、外に出てる結び目も小さい感じがしますし、 確かに一般的なシートン法ではないんだろうなぁという感じです。ただ、原理はシートン法と同じだと思います。

Wikipedia での医療関連情報は間違っているものも多いと良く聞きますし、まだまだインターネットは発展途上だなとも思いました。

完治するまではなんとも言えませんが、普通は「入院・半身麻酔・数ヶ月」で処置するものを「日帰り・局所麻酔・数週間」で終わらせるという、 圧倒的名医感漂う先生*1でした。説明も丁寧でわかりやすく、こちらのどんな質問にも答えてくれる信頼できる先生でした。

とりあえず、今日からしばらくの間、痛み止めとの共同生活が始まります……!

全ては身体が資本!健康第一でいきましょう!

*1:超名医かヤブ医者のどっちかだろうなって感じがしますね。笑

ERD(論理設計・物理設計)の管理について

ITライフ

ERD(論理設計・物理設計)の管理についてのメモです。

Web サービス企業では設計書の作成や管理がされない傾向にありますが、 以前も書いたように ERD は作成し管理すべきだと考えています。

necojackarc.hatenablog.com

ただ、最近 ERD の管理で煩わしいなと感じる部分がありました。 それは、Railsマイグレーションファイルと物理設計の内容が重複していることです。

論理設計はもう一段抽象度の高い内容となっているので重複していると感じないのですが、 物理設計に関しては「物理設計 = データベースの実装」となるので、内容が重複してしまっていました。

これに対する2パターンの解決案を書きます。

パターン1: 論理設計のみ保持する

論理設計の ERD のみドキュメント管理をし、物理設計を作らないパターンです。 マイグレーションファイルなので実装自体が管理されている場合、これで良い気がします。

パターン2: 物理設計を保持し DDL を利用する

DDL を利用し、物理設計の変更自体をデータベース自体の変更とするパターンです。 SIer 時代に大規模プロジェクトではこちらのパターンを採用していました。

まとめ

  • 論理設計は実装の経緯や意図が現れているため常に保持すべき
  • 物理設計は実装そのものであるので二重管理となる場合は不要

単純に「同じ抽象度のモノを同時に管理するのは DRY じゃない」という話でした。

補足: 論理設計と物理設計について

論理設計

論理設計は実現性、つまり実装や性能を考慮せず、理想的なリレーショナルデータモデルを作成します。

物理設計

物理設計は実現性(実装や性能)を考慮し、インデックス設計やテーブルの統廃合、非正規化などを行います。


この辺りの情報については、このページが簡潔にまとまっていていわかりやすいです。

gihyo.jp

簡単な具体例を挙げると、Rails + MySQL を使った物理設計をする際、

  • 継承関係の実装方法を決める
    • 例) Rails が扱いやすい STI (シングルテーブル継承) を選択する
      • シングルテーブル継承、クラステーブル継承、具象テーブル継承が有名な継承実現方法
  • 階層構造の実装方法を決める
    • 例) Ancestry を利用して扱いやすくする
  • ActiveRecord::Enum の適用を行う
    • 例) ステータスなどを論理設計では1つのテーブルとして設計していたが、それを削除し Enum を利用する

といったようなことを行ったりします。

「達人プログラマー」が全部入りエンジニア教本だった

ITライフ

「達人プログラマーシステム開発の職人から名匠への道」を読みました。

達人プログラマー―システム開発の職人から名匠への道

達人プログラマー―システム開発の職人から名匠への道

  • 作者: アンドリューハント,デビッドトーマス,Andrew Hunt,David Thomas,村上雅章
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/11
  • メディア: 単行本
  • 購入: 42人 クリック: 1,099回
  • この商品を含むブログ (350件) を見る

こちらは UNIXという考え方―その設計思想と哲学と共に t_wada さんが「若者向け課題図書」として挙げられていた本です。

necojackarc.hatenablog.com

読んだ感想ですが、流石若者向け課題図書と言うだけあって「全部入り教本」という感じでした。

開発者としての哲学に始まり、ツール、設計技法、そしてプロジェクト運営など、 システムを作る上で必要になることに対して一通り言及しています。

そして、それぞれで述べられている「心がけ」は色々なプラクティスや手法にも通ずる的を射たものでした。

確かにこの辺りの内容は早い段階で抑えておくべきだなと思います。 知っておいて欲しい心がけの宝庫でした。

ただ、そういった特性上、タイミングによって響く言葉は違うということも痛感しました。

リーダブルコードの時もそうだったのですが、 知っていることや当然だと思っていることも多く載っており、 一瞬「せやな」という感情に支配されていたりもしました。笑

necojackarc.hatenablog.com

もちろん幅広いトピックを扱っているので、響いた部分も多々あります。

以下、響いた言葉を一部抜粋していきます。

早めにクラッシュさせること

障害対応やデバッグをしている際に、本当の原因がどこかわからないで困ることがあるなというのを思い出しました。 例外が起きた位置でクラッシュさせておけば、原因究明に大いに役立ちます。死んだプログラムは嘘をつかない。

全ての例外ハンドラーを除去しても、そのプログラムは動作することができるだろうか?

例外を通常の制御フローに組み込むのは間違いなく悪手です。 そしてこのセリフは例外ハンドラーの使われ方が正しいか正しくないかを考える際に役立つなと思いました。

ソフトウェアは建築と言うよりもガーデニング(つまりコンクリートではなく、より有機的なもの)に近い

「建築のようには絶対行きません!そうだそうだ!もしそうならウォーターフローでうまくいくはずだ!」みたいな気持ちになりました。 今度からソフトウェア開発はガーデニングに例えようと思います。もしそんな機会があれば……。

まず、初期の計画と条件に従って、庭にさまざまな植物を植えます。すると、あるものは力強く育ち、あるものは枯れてコンポストの材料になってしまいます。また、日当たりや雨風の関係で植物をお互いに動かすようなことも行います。育ちすぎた植物は、株分けしたり剪定し、配色の合わないものは美的感覚を満足できるところに移動させます。雑草を抜き、必要に応じて肥料もやります。常に庭の健康状態を監視して、必要な調整(土壌、植物、レイアウト)を行うのです。

リファクタリングの必要なコードを「腫瘍」と考える

小さい内に摘出しないと肥大化して転移するという点で、まさに腫瘍だなと思いました。 腫瘍を見つけたらしっかり無視せず、チケットを切るなど何らかの対応はしておきたい。

プロジェクトの用語集を作ること

これ大事!共通言語大事!

枠にとらわれずに考えるのではなく、枠を見つけだすこと

見かけ上の制約に囚われず、自分が思っているよりも大きな「真の制約」を見つけるべきという話です。 枠を見誤っているケースというのは確かによくあると思います。本物の枠を見極めていきたい。

解説しない方が良い場合もある

「靴ひもの結び方を言葉で説明してみる」とこれの意味がすぐにわかると思います。 自然言語だけでは伝わらない情報がある、というのは肝に銘じておきたいです。

ストレート・ジャケット*1効果

解釈の余地を与えない設計というのは、スキルや技芸といったプログラミング努力を奪い去る意味らしいです。 解釈の余地がないとなると、単なる作業になってしまい、全く面白くないですものね。

自然言語の限界」と「ストレート・ジャケット効果」から、詳細過ぎる仕様書がいかに害であるかがわかりますね。

まとめ

エンジニアとして心がけを幅広く教えてくれる良書でした!

*1:straitjacket: 拘束服