Raspberry PiにRedmine 3.4をインストールした

業務で不自由なRedmine(管理者権限なし)を使用するようになったので、 管理者のできることできないこと把握しとくか、という気持ちで立ててみた。

半日くらいで終わるかと思ったら丸2日ほどかかってしまった。。(Rubyまわりの知識なさすぎて苦戦)

環境

ソフトウェア バージョン
HW Raspberry Pi 2 Model B
OS Raspbian Stretch 4.19.34-v7
Redmine 3.4
PostgreSQL 9.6+181+deb9u
Apache 2.4.25-3+deb9
Ruby 2.4.1
bundler 1.17.1

手順

基本的に Redmine.JPの手順 を踏襲。 記事の手順そのままの部分はまるっと省略する。

主な変更したところ

  • fonts-takao-pgothic が無かったので fonts-takao-gothic に変更
  • Rubyのインストールにrbenvを使用
続きを読む

生体データと線形回帰で感情を分析する

約半年取り組んできたグループ研修が終わったので、書ける範囲でざっくり記録に残しておく。 *1 3人グループでテーマを決めて自由に進め、月一の中間報告でアドバイスをいただく、という形式。

テーマ

テーマの種をいくつか紹介いただき、そこから膨らませてグループでテーマを決める。 生体データからそのときの感情を分析し、ダイジェスト動画を自動生成しよう、というテーマにした。

*1:社内情報を含まないので問題ないと思うけど、怒られが発生したら消します

続きを読む

builderscon 2017に参加してきた

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

続きを読む

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 でスライドが流れてきたので、順番に見てる。 中でも横道さんのスライドが非常に刺さったのでご紹介。

おわりに

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

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