builderscon 2017に参加してきた

「知らなかった、を聞く」カンファレンス builderscon 2017 に8/3-5の3日間参加してきた。 セッションはどれも面白かったし、ノベルティも豪華だし、朝食昼食完備(うまい)だし、どれをとっても最高だった。 スタッフ、スポンサー、登壇者のみなさんありがとうございました。

特に面白かったセッション

どれも良くて甲乙つけがたいのだけども。

横山三国志に「うむ」は何コマある?〜マンガ全文検索システムの構築

docs.google.com

横山光輝 三国志 全文検索システム(8/6まで限定)

発表内容の事前情報からこれは絶対面白いと思ってたけど、実際聞いてみて

  • 技術的面白さ(コマ割りの検知、OCR方式、Webサービス化)
  • サービスの完成度
  • 作品への愛情
  • 横山三国志のコンテンツ力(どの1コマでもネタになる強さ)

と、どれをとっても最高だった。

普通にサービスとして使い勝手めちゃ良いので、(権利関係をうまいこといい感じにして)再公開してもらえたらとてもありがたいと思う。

RDBアンチパターン リファクタリング

speakerdeck.com

など、専門外の自分にも大変わかりやすく、響く発表だった。 RDBの技術はコスパが良いということで、もうちょっと勉強しようと思った。

3Dプリンタで作る階差機関

speakerdeck.com

Hardware Engineeringを期待していたら数学の話で始まったので脳が追い付かなくて慌てた。。(なぜか階差機関を全加算器と誤認識してた) テイラー展開とか久しぶりに聞いた。

3Dプリンタの可能性とアツい想いを感じる発表だった。 理論は後追いで調べて理解したい。

Factory Class

エルゴノミックキーボードの量産までのプロセス・苦労話について。

工場でのプロセスなどはメーカ勤務の自分にとってはわりと身近なものだったけど、 それを全部イチから、(外部委託を使うにしても)独力で構築するというのは気が遠くなる大変さだと思った。 そもそも既存資産があるメーカでも、少量生産はコストがかかって大変。

空き時間に見せてもらったキーボードはとても良かったので購入を検討したい。

まとめ

幅広いテーマで「知らなかったを、聞く」ことが出来て最高のカンファレンスだった。試してみたいものがたくさんできた。

ノベルティやら食事やら考えると、どう考えてもコスパ良すぎたので、次の機会には別のかたちで貢献したいと思った(個人スポンサーとかスタッフとか)。

人の発表を聞いただけでやった気になるのは良くないので、アウトプットをしっかりやっていきたい気持ちが高まった。やっていくぞ!!!

VS CodeのEmacsキーバインド化はEmacs Friendly Keymapがよさげ

VS CodeをEmacsキーバインドにする拡張では Emacs Keymap が有名だと思う。

Read me が丁寧で、コンフリクトするキーバインドの置き換え先がリスト化されているのがありがたかった。 (自前でキーバインド変更するとココだいぶ悩む)

しかし、残念ながら Emacs Keymap は メンテされていない っぽい。 代わりに Emacs Keymap を fork した Emacs Friendly Keymap を見つけた。

marketplace.visualstudio.com

本家に加えて(少なくとも)下記の変更が追加されている。

  • The clipboard handling is simplified by the removal of the emacs-only kill ring (which was also an unfinished implementation in the original). Copy, Cut, Yank and C-K work with the system clipboard now.
  • C+x k to close tab, C+x C-k all tabs
  • C+l centers screen on the cursor line
  • C+x C+f bound to quick open file
  • yank overwrites selection

特に1つ目の、ヤンクバッファとシステムのクリップボードを統合してくれるのは欲しかったのでうれしい。

今はまだあまり流行ってないっぽい(インストール数 本家16kに対して約1k)けど、 アクティブにメンテされている正当な後継っぽいので人気出てほしい。

Ubuntu 16.04 に Wireshark をインストール

Wireshark のインストール方法を調べると「一般ユーザで使えるようにする」やり方が色々とあるようなので、一番良いと思われる方法をメモ。

$ sudo apt install wireshark

途中で「Dumpcap を一般ユーザが使えるようにする?」的なプロンプトが出るので Yes を選択。 もし間違えて No にしてしまったら

$ sudo dpkg-reconfigure wireshark-common

で再度設定できる。

これで wireshark ユーザグループが作成される。 最後にユーザを wireshark グループに追加する。

$ sudo gpasswd -a username wireshark

グループ追加はログオフ後有効。もしくは

$ newgrp wireshark

すればそのターミナル内では即時有効化できる。

下記を参考にした。

askubuntu.com

PowerShellのprofileを整理してpromptをいい感じにした

f:id:nanakira:20170129143649j:plain

tl;dr

  • PowerShell の profile を分割して dotfiles 管理にした
  • カレントフォルダパスが長くてもいい感じに見やすいプロンプトにした

動機

Windows のシェル環境はろくにカスタマイズもせず PowerShell を使ってたんだけど、 カレントディレクトリが深くなってくるとプロンプトがどんどん長くなっていって見づらい。 コマンドの途中で折り返されたりしてツライ。

カスタマイズしようにも、profile を雑に継ぎ足してきたので、どこに手を入れたらいいか分からない。

さらに、どうせいじるなら複数環境で同じものを再現できるようにしたい。

と、以上から重い腰を上げて profile の整理に着手した。

ちなみに ConEmu + PowerShell v5 + posh-git + Chocolatey の組み合わせで使っている。

今の profile を分割管理にする

まず、今の profile はごちゃごちゃしていて見通しが悪いので、Emacs の init-loader みたいに分割管理しようと思った。

ざっと調べたところ、id:guitarrapc_tech さんのこちらの記事に全て書いてあった。

PowerShell で Profile を利用して スクリプトの自動読み込みをしてみよう

非常に詳しく説明されており大変参考になった。

Profile の場所確認

PowerShell 上で

> $profile

するとわかる。 が、これで表示されるのは CurrentUserCurrentHost のものなので、 PowerShellPowerShell ISE 共通で読み込ませたい場合は CurrentUserAllHosts として profile.ps1 に記載する方がよい。

if (-not(Test-Path $profile.CurrentUserAllHosts))
{
    New-Item -Path $profile.CurrentUserAllHosts -ItemType file
}

で profile.ps1 が作成される。

profile.ps1 からファイルを読み込ませる

guitarrapc_tech さんの方法を少し簡略化して、profile.ps1 を下記のようにした。

$psdir="$env:HOME\dotfiles\PowerShell"
Write-Host ("Load PS Profiles from {0}\autoload" -f $psdir) -ForegroundColor DarkCyan
Get-ChildItem $psdir\autoload | where Extension -eq ".ps1" | %{.$_.FullName}

これで $HOME/dotfiles/autoload 配下に置いた .ps1 が読み込まれる。

あとは、元の profile の内容を適宜分割して、autoload 配下に入れてやれば OK。

プロンプトをいい感じにする

プロンプトを改造する記事はいくつか見つかるものの、やりたいことにハマるものがないなー、と探してたら、 posh-gitREADME にまさにやりたいことが書いてあった。 README はちゃんと読もう。。

ちなみに、posh-git インストール直後は posh-git インストールフォルダの profile.example.ps1 を参照するようになってると思うが、 中身は

  • Import-Module posh-git
  • prompt のフォーマット定義
  • SSH Agent 起動

なので autoload にいい感じに移動して良い。 その prompt のフォーマット部分をいじる。

カレントパス(+ Git の status)とプロンプトの間に改行を入れる

Import-Module posh-git
$global:GitPromptSettings.BeforeText = '['
$global:GitPromptSettings.AfterText  = '] '
function prompt {
    $origLastExitCode = $LASTEXITCODE
    Write-VcsStatus
    Write-Host $ExecutionContext.SessionState.Path.CurrentLocation -ForegroundColor Green
    $LASTEXITCODE = $origLastExitCode
    "$('>' * ($nestedPromptLevel + 1)) "
}

Write-Host に -NoNewline をつけなければ、改行される。

$global:GitPromptSettings.BeforeText あたりは設定の微調整。README 参照。

パスに $HOME が含まれていたら ~ に置き換えてスッキリさせる

    $curPath = $ExecutionContext.SessionState.Path.CurrentLocation.Path
    if ($curPath.ToLower().StartsWith($Home.ToLower()))
    {
        $curPath = "~" + $curPath.SubString($Home.Length)
    }

    Write-Host $curPath -ForegroundColor Green

パスが長すぎたら省略する

    $maxPathLength = 40
    $curPath = $ExecutionContext.SessionState.Path.CurrentLocation.Path
    if ($curPath.Length -gt $maxPathLength) {
        $curPath = '...' + $curPath.SubString($curPath.Length - $maxPathLength + 3)
    }

最終形

以上をふまえて、最終的にこんな感じになった。

function global:prompt {
    $origLASTEXITCODE = $LASTEXITCODE
    Write-VcsStatus

    # Replace $home by ~ if current path includes $home
    $curPath = $ExecutionContext.SessionState.Path.CurrentLocation.Path
    if ($curPath.ToLower().StartsWith($Home.ToLower()))
    {
        $curPath = "~" + $curPath.SubString($Home.Length)
    }

    # Limit path length up to maxPathLength
    $maxPathLength = 40
    if ($curPath.Length -gt $maxPathLength) {
        $curPath = '...' + $curPath.SubString($curPath.Length - $maxPathLength + 3)
    }

    Write-Host $curPath -ForegroundColor DarkGreen
    $global:LASTEXITCODE = $origLASTEXITCODE

    if ($?) {
        Write-Host " (*'-')"  -NoNewLine -ForegroundColor "DarkGreen"
    } else {
        Write-Host " (*;-;)"  -NoNewLine -ForegroundColor "Red"
    }
    return "> "
}

見た目はこんな感じで、だいぶ気に入っている。 f:id:nanakira:20170129142121j:plain

最後にかわいくした部分は Qiita の こちらの記事 を参照させてもらった。

XP祭り2016 -俺たちの!!- に参加してきた

はじめに

9/24(Sat) に XP祭り 2016 -俺たちの!!- に参加してきた。 毎年参加したいと思いつつタイミング悪く行けてなかったので、今回初参加。

XPが日本のソフトウェア開発の未来を実現する

牛尾剛さん による基調講演。

  • 日本のソフトウェア開発は欧米に比べて 5-10 年遅れている。日本の Agile 導入難度 ダントツ1位
  • Agile は西洋文化の上で作られた。日本でも文化をインストールすれば良い!
  • 文化チェンジ
    1. 生産性マインド Be Lazy. エッセンシャル思考。より少ない時間で成果を最大化
    2. 主体性マインド 大人 = 自分が幸せになることに責任を持つ。相手に求めない。すべては自分次第。
    3. 雇用形態マインド 流動的な雇用形態のメリット: プロフェッショナルな人材が育つ、従業員満足度が高い
  • 文化を変え一歩を踏み出し、日本のソフトウェア開発の進化に貢献しよう!

この講演を聞けただけでも来た価値があった、と思える熱い発表だった。 日本のソフトウェア開発をもっと良くしたい、勝ちたい!という思いがひしひしと伝わってきた。

Be Lazy, エッセンシャル思考は全くその通りで、日本ではどうしても必要以上にやりすぎてしまう傾向があると思う。 大企業やお堅い企業(うち)だとさらにそれが強まる印象。 自分のチームは海外と絡むことが多いので比較的ギャップに理解があり、反面まわりのチームとの考え方のギャップを感じる。

主体性マインドのところで「請負契約なのでアジャイルができません」の例が出てて、 期待してしまったけど、これについては特に解決の説明がなかったと思う。 それは牛尾さんが考えるべきことではないし、自分で考えるのが主体性マインド、なのかな。

プロダクトオーナーの道具箱 ~30以上ものプラクティスを使いこなそう~

関満徳さん によるワークショップ。

実は説明をあまり読んでなくて、プラクティスを次々と紹介していただくのかな?と受け身な気持ちで参加してしまったので反省。 PO のアクティビティ・役割を自分の言葉で説明できるようになる(そのために自分の現在地を知る)というワークショップだった。 自分の理解不足をしっかり理解できたことと、現在地を知るためのワークの進め方を知ることができたのがよかった。 精進します。。

エンタープライズへのアジャイル開発の導入事例

吉原庄三郎さん による講演。

  • 難しい環境にアジャイルを新規導入する場合、教科書通りにたくさんのプラクティスを導入すると失敗する。
  • 本質に立ち返り、最小限のコアプラクティスから始めることで、 メンバーの賛同・理解を得ながらモチベーション高くアジャイルを導入できる。
  • 3つのコアプラクティス
    1. 優先度に従って開発する
    2. ユーザーレビューをする
    3. ふりかえり/デイリーミーティングをする これ以外はウォーターフォールの手法でも構わない

自分は「最初から亜流は良くない」「正しくすべてのプラクティスを実施するのがよい」と思っていたので、 目からウロコだった。 実際、色々やればやるほど現場はショックが大きいし、温度差が出てくるしで、なかなかうまくいかない。

「うまくまわってくるとメンバーから『もっとプラクティスを増やしたい』と要望が出てくる、これが理想的な状態」 というのは本当にすばらしい状態だと思う。

今立ち上げているプロジェクトで実践してみよう、と思った。

メーカー企業がガチスクラムに挑戦した結果

清水弘毅さん による講演。

医療系のシステム開発ウォーターフォールアジャイル開発を導入したお話。

個別の取り組みがどう、というよりも清水さんの情熱・行動力がとにかく印象的だった。

同じくメーカー企業で、アジャイル導入に苦労している身としては、 自分ももっと頑張れる、頑張ろう、と勇気をもらえる発表だった。 あと、読みかけの Fearless Change ちゃんと読もう。。

SWチームとHWチームがスクラムを組んだら

川口順央さん、飯田一輝さん による講演。

SW と HW 一緒にスクラムで開発してみた、というお話。

HW も開発プロセスを踏んで計画的に進めるのは良いと思う。 SW に比べて HW は今でも経験と根性でやりきっているケースが多い印象がある(弊社だけかもしれない)。

SW / HW 一緒にやる、互いのやっていることを理解する、というのはとても良い。 「SWはHWのおまけだと思われている、ガントチャートにHWのことしか書いてなかったり・・・」 は会場の多くの人がうなずいていた・・・ 逆に SW も HW のことを理解する必要がある。

参加できなかったセッションから

Twitter でスライドが流れてきたので、順番に見てる。 中でも横道さんのスライドが非常に刺さったのでご紹介。

おわりに

多くの気づき・情熱・宿題が得られ、最高のイベントだった。ぜひ来年も参加しようと思う。

スタッフのみなさん、発表者のみなさん、参加者のみなさん、スポンサーのみなさん、ありがとうございました。

デザインの基本原則がわかる - ノンデザイナーズ・デザインブック を読んだ

はじめに

デザイナーでない人のための、デザインの定番基本書。

デザインの「4つの基本原則」。これを知るだけで、あなたのデザインはずっとぐっと、良くなります。

仕事でも仕事以外でも、スライドや資料を作る機会は多々あるので一度勉強したいと思ってた。

実際読んでみて、これはすごい良書、必読書だった。大げさでなく、見える世界が変わった気がしている。

ノンデザイナーズ・デザインブック [第4版]

ノンデザイナーズ・デザインブック [第4版]

知らないものは(見えていても)認識できない

世の中のほとんどのもの(チラシ・メニュー・パッケージ etc.)は、デザイナーが「意識的に」デザインしたものであって、「適当に」デザインされたものはほとんどない。

今まで、デザインというものはもっと感性・センスに依るものだと思っていた。 本書を読んで、デザインの大部分は理論・原則に裏付けられているとわかった。

意識して見回すと、身の回りのあらゆるもののデザインは基本原則に則っている。 原則に外れたことをすると、違和感のある、素人くさいものになってしまう。

原則をほんのちょっと意識しながらデザインするだけで、劇的に見え方が変わってくる(気がする)。 過去に自分の作った資料を見返してみても、ものすごく気持ち悪くて直したくなってくる。

臆病にならず、思い切って

デザインは臆病にならずに、思い切ってやること、と本書では繰り返し述べられている。

意図がはっきりと伝わるよう、分かりやすく違いを出すことが重要。

中途半端なデザインは、「なんとなく(適当に)そうしたのか?」「間違えてそうなったのか?」と誤解され、 見ていて気持ち悪いものとなってしまう。
コントラスト ではなく 衝突 と呼ばれる)

  • ほんの少し違うフォントサイズ (12pt と 14pt 等)
  • 似ているけど違うフォント
  • 似ているけど違う色

4つの基本原則

「近接」「整列」「反復」「コントラスト」

このうち「近接」と「反復」は、文書の構造化が習慣づいているエンジニアであれば、意識せずとも実践していると思う。

「近接」は関連のあるものを近くに集めること。 「反復」は同じ書式を繰り返し使うことで、離れていても関連を見出せるようにすること(見出し、注釈等)。

一方、「整列」と「コントラスト」の章は学びが多かった。

整列

すべての構成要素について、左揃え・中央揃え・右揃えの 基準線 を意識すること。

基準線がそろっていない書類はちらかって見える。 基準線がそろっていれば一体感が出る。 多くの要素が整列されていれば、より力強い基準線、力強いデザインとなる。

中央揃えは基準線が弱くなりやすく、初心者には難しいので、慣れるまで禁止するとよい。

コントラスト

様々な方法で はっきりと コントラストをつけて、読者の目を引く。

  • フォントのサイズ
  • フォント
  • 線の太さ
  • 画像の大きさ

カラーホイールの、「補色」「トライアド」「類似色」「シェード」「チント」を使い分ける。

フォントについて

6つのカテゴリーに分類

  1. オールドスタイル
  2. ダン
  3. スラブセリフ
  4. サンセリフ
  5. スクリプト
  6. デコラティブ

複数のフォントを使うときは、必ず 異なるカテゴリから選ぶ こと。

まとめ

さすが「18年ずっと売れ続けているロングセラー」だけあって、納得の良書だった。

この本で得た知識は一生役に立つと思うし、たったの1冊で基本がしっかり身につく、非常に(時間の)コスパのいい本だと思う。

色やタイポグラフィ等、もう少し踏み込んで勉強してみようかなという気持ちになった。

Raspberry Pi への ssh 接続に公開鍵認証を使う

あっさりいけるかと思ったら割とハマってしまったので、繰り返さないためにメモ。

必要性

パスワード入力での ssh 接続はブルートフォースアタックのリスクがあるので、公開鍵認証の利用(とパスワードでの接続の無効化)が推奨されている。

公開鍵を Raspberry Pi に送り込んでみる

Mac or Linux では、"ssh-copy-id" というものを使えばいとも簡単に鍵を転送できるらしい。

$ ssh-copy-id -i ~/.ssh/id_rsa.pub raspberrypi.local

残念ながら Windows なので別の手を使う。

WinSCP でファイル転送

WinSCP を使うと SFTP (SSH File Transfer Protocol) で超絶簡単にファイルを転送できる。 これは今後も便利に使えそうなので、試してみてよかった。

で、ssh で入って ~/.ssh/authorized_keys に格納した。

これで鍵認証でログインできるはず・・・ → "Authentication refused" orz

原因と対策

/var/log/auth.log を参照して原因を探る。

authorized_keys が正しい「ファイル」じゃない

正直「???」ってなった。authorized_keys 「フォルダ」の中に鍵を格納するものだと思ったヨ。。。はずかしい。

Permission の見直し

.ssh -> 700
authorized_keys -> 600

sshd_config の見直し

$ sudo /etc/ssh/emacs sshd_config
ServerKeyBits 1024
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile ~/.ssh/authorized_keys

OpenSSH 形式と PuTTy 形式の違い

ここが一番ハマッた。

OpenSSH の鍵は PuTTy ではそのまま使えないらしい。。GitHub で使えてたから鍵がまずいとは全く思ってなかった。

puttygen で秘密鍵・公開鍵を変換して配置しなおしたところ、無事認証できるようになった。