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

(´-`).。oO(Mob Programming)

Mob Programmingのことを考える機会があったので。

Mob Programming

のことを知ったのはRegional Scrum Gathering Tokyo 2017のRachelの基調講演。

↓のスライドのp.31のところ

https://www.slideshare.net/RachelDavies/growing-agile-practice-70951185#31

おぉ。って思った記憶がある。

Mob Programming

をなぜやるんだろう?って考えてたら Yotaro TAKAHASHI (@PoohSunny) | Twitter が色々意見を聞かせてくれて。

で、このYouTube見たらいいよって教えてくれたので見た。なるほどなぁって思った。

Mob Programming: A Whole Team Approach - Agile Singapore Conference 2016 - YouTube

「チームがやりたいと決めたからやってる」

って言ってるんだけど、じゃあチームはどうしてやりたいって思ったんだろう?理由なんてなくて「実際に楽しいし、実際にアウトプットも多くなってる」かもしれないけど。

僕だったらどういう理由でやりたいと思うだろう?って、実際に試してみる前にぼーっと考えてみた。

レビュー

スクラムとかペアワークとか導入してても、やっぱりレビュー。に時間がかかる。ペアワークでやってるからだいぶましにはなってるけど。

よくある質問は「レビュー対応のチケットにはどれくらいの時間を見積もったらいいか?」とかだったりするし。

時間がかかる原因

は、フィードバックループがちょい長いところかなぁ。それと、他のペアが知っていることがある。かな。

結局「チーム全員の叡智を集めてチームのアウトプットにする」という考えがあるから。

Mob Programming

チーム全員レビューを入れるくらいなら、Mob Programmingの方が良さそうかなって思った。

特に、方向性を決めるときが効きそう。そこで全員が経験と認識を共有できる、というのは良さそうだなぁ。

ルール

そういえば、Youtubeの中で、ルールとして「誰かのアイデアは別の誰かの手を通して入力されないといけない」ってのがあって。

あぁ、これは良い、と思った。Driverが考えて打ち込んだら、その考えは誰からも見えないもんね。

という雑なメモでした。

Azure上のDC/OSでDatadogを有効にしてみた

ここに書いてあるとおり、DC/OS UniverseにDatadogがあるのでAPI Keyを設定して有効にするだけ。

docs.microsoft.com

そしたらグラフが出てきた(喜

f:id:bufferings:20170410075851p:plain

全く分かってないけど、見た目には満足した。

ほんのちょっとだけDeep Learningを勉強するー

今月1ヶ月間だけに限定してDeep Learningを勉強してみよう!ってことになった。ので、本当に表面的なところを頑張ってみようかなと思う。

そもそもDeep Learningって何?

ってところからなので、ここを読んだ。分かりやすい。

blogs.nvidia.co.jp

あ、待って、そもそもGPUって何?

ってことで、ここを読んだ。これも分かりやすい。

bita.jp

その次に

GDG Kyoto上野山さんのスライド。分かりやすい。

TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)

それから

Eureka香取さんの記事。分かりやすい。

developers.eure.jp

てことは

TensorFlowのチュートリアルをやればいいのかなぁ?ってウロウロしてたら、こんなの見つけた。

deeplearning4j.org

Deep Learning for Java!!

Javaなら頑張れる気がする!まずはチュートリアルでもやってみようかな。

XPS13 (9360) + budgie-remix + touchpad 設定

昨日これを書いたんだけど↓

bufferings.hatenablog.com

結局こんな感じにして、だいぶ快適になった。

$ cat /etc/X11/xorg.conf.d/70-synaptics.conf
Section "InputClass"
  Identifier "touchpad catchall"
  Driver "synaptics"
  MatchIsTouchpad "on"
  MatchDevicePath "/dev/input/event*"

  # 押す強さっぽいけど正直変更してもあまり分からない
  Option "FingerLow" "50"
  Option "FingerHigh" "80"

  # スクロール。マイナスだとナチュラルスクロール
  Option "VertScrollDelta" "-20"
  Option "HorizScrollDelta" "-20"
  Option "VertEdgeScroll" "0"

  # カーソルのスピード
  # Minを0、Maxを1にしたらMaxがInfになってしまったからMaxはMinの何倍みたいな計算してるっぽい雰囲気
  Option "MinSpeed" "1"
  Option "MaxSpeed" "3"
  Option "AccelFactor" "0.3"

  # 僕はタップを使わないのでオフに
  Option "TapButton1" "0"
  Option "TapButton2" "0"
  Option "TapButton3" "0"

  # 手のひら誤検出を防ぐ
  Option "PalmDetect" "1"
  Option "PalmMinWidth" "1"
  Option "PalmMinZ" "200"

  # 滑りぐあい。でもぎこちない感じある
  Option "CoastingSpeed" "40"
  Option "CoastingFriction" "50"

  # これだけ動いたら動かそうとしてると判断される
  # 10とかにしてると動きが四角くなるから0にした
  Option "HorizHysteresis" "0"
  Option "VertHysteresis" "0"

  # 右クリック領域をなくした
  Option "SoftButtonAreas" "0 0 0 0 0 0 0 0"
EndSection

人差し指でカーソルを移動したあとに、親指でクリックするのに慣れてるんだけど、親指が触れるときにカーソルがちょこっと動くのがなくなればいいなぁ。

Macだとそういうときカーソルが微動だにしないのすごい。てか、何にもいじらなくてもすごく気持ちがいい動作になってるのすごい(語彙。

「家族サービス」って言葉にピンとこない

週末に家族でお出かけしたり、子どもと遊んだりしてる。と、たまに「家族サービス大変ですね」って言ってもらったりするんだけど、ピンとこない。

「家族サービス」って言葉を聞くと「父親は仕事がメインだから、本当はやらなくてもいいことなんだけど、サービスでやってて偉いね」みたいに感じるんだけど、そんな気持ちがない。

僕の場合は、むしろ家族が僕に対してサービスで遊んでくれていると言ってもいいくらい。なんだもんね。

あぁ、そうか「家族がサービス大変ですね」ならピンとくるや。

そんだけ。

XPS 13 (9360) に Ubuntu Budgie (bugie-remix) 16.10 を入れたメモ

f:id:bufferings:20170305132950p:plain

去年の年末に、そろそろMac Book Airを買い換えたいなーと思って、なんとなく次はUbuntuがいいかなと思って、なんとなくDellのXPS13がいいかなと思って、でも、日本ではUbuntu版は販売してなかったので、買ってからUbuntuに入れ替えたメモ。デュアルブートじゃなくて、Ubuntuだけにした。

あ、壊れたりするかもだし、やるときは自己責任でやってね。

最初に感想

特に何もしなくても動いた。Touchpadの操作感が全然慣れないので調整していきたい。

XPS13

キーボードはUS配列で注文した。

www.dell.com

Ubuntu Budgie

なんとなくUbuntu Budgie(budgie-remix)というのを選んでみた。16.04もあるけど、なんとなく16.10にしといた。

budgie-remix.org

やったこと

準備

この辺を参考にして

dual boot - Dell XPS 13 9360 Dualboot Windows 10 and Ubuntu 16.04 - Ask Ubuntu

  • WindowsのリカバリーUSBスティックを作成
  • budgie-remixの起動USBスティックを作成
  • biosを更新

再起動してDELLのロゴが出てる間にF2を押してbios設定を開く

  • Secure BootをDisabledに
  • SATA OperationをAHCIに
  • 起動の順番をUSBを一番最初に

インストール

USBからbudgie-remixをインストールして更新しとく

$ sudo apt upadate
$ sudo apt dist-upgrade

日本語入力の設定(Mozc)

ここを参考にして

Ubuntu Budgie - Ubuntu となかまたち

$ sudo apt install fcitx-mozc
$ im-config -n fcitx
$ reboot

Fcitx ConfigurationのInput MethodでMozcを追加。

AppIndicator Appletは表示させないことにした。たまにメニュー表示でフリーズしたので。それと、一度表示させると外すこともできなかったので、最初から表示設定しないことにした。

あとは好みで

Touchpadの調整の準備

まず最初に、touchpadのデバイスが2つ認識されてて、synclientコマンドでゴニョゴニョしたりするのが反映されないので、使ってない方のデバイスを停止しておく。

この辺参考にした

Synaptics タッチパッド - ArchWiki

$ sudo apt-get install xinput
$ xinput
⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ DLL075B:01 06CB:76AF Touchpad             id=11   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=15   [slave  pointer  (2)]
⎣ Virtual core keyboard                       id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard                 id=5    [slave  keyboard (3)]
    ↳ Power Button                                id=6    [slave  keyboard (3)]
    ↳ Video Bus                                   id=7    [slave  keyboard (3)]
    ↳ Power Button                                id=8    [slave  keyboard (3)]
    ↳ Sleep Button                                id=9    [slave  keyboard (3)]
    ↳ Integrated_Webcam_HD                        id=10   [slave  keyboard (3)]
    ↳ Intel Virtual Button driver                 id=12   [slave  keyboard (3)]
    ↳ Intel HID events                            id=13   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard                id=14   [slave  keyboard (3)]
    ↳ Dell WMI hotkeys                            id=16   [slave  keyboard (3)]

この"SynPS/2 Synaptics TouchPad"を止めたい。

$ sudo vi /etc/modprobe.d/blacklist-touchpad.conf 
blacklist psmouse
$ sudo update-initramfs -u
$ reboot

止まった!

$ xinput
⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ DLL075B:01 06CB:76AF Touchpad             id=11   [slave  pointer  (2)]
⎣ Virtual core keyboard                       id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard                 id=5    [slave  keyboard (3)]
    ↳ Power Button                                id=6    [slave  keyboard (3)]
    ↳ Video Bus                                   id=7    [slave  keyboard (3)]
    ↳ Power Button                                id=8    [slave  keyboard (3)]
    ↳ Sleep Button                                id=9    [slave  keyboard (3)]
    ↳ Integrated_Webcam_HD                        id=10   [slave  keyboard (3)]
    ↳ Intel Virtual Button driver                 id=12   [slave  keyboard (3)]
    ↳ Intel HID events                            id=13   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard                id=14   [slave  keyboard (3)]
    ↳ Dell WMI hotkeys                            id=15   [slave  keyboard (3)]

Touchpadの調整

xinput とか synclient コマンドでごにょごにょすればリアルタイムに変更が反映される。で、好みの設定が見つかったらこんな風に保存すると永続化される。

$ sudo mkdir /etc/X11/xorg.conf.d
$ sudo vi /etc/X11/xorg.conf.d/70-synaptics.conf
Section "InputClass"
  Identifier "touchpad catchall"
  Driver "synaptics"
  MatchIsTouchpad "on"
  MatchDevicePath "/dev/input/event*"
  Option "FingerLow" "50"
  Option "FingerHigh" "80"
  Option "SoftButtonAreas" "0 0 0 0 0 0 0 0"
  Option "VertScrollDelta" "-20"
  Option "HorizScrollDelta" "-20"
  Option "CoastingSpeed" "40"
  Option "CoastingFriction" "50"
  Option "MinSpeed" "1"
  Option "MaxSpeed" "3"
  Option "AccelFactor" "0.3"
  Option "VertHysteresis" "0"
  Option "HorizHysteresis" "0"
  Option "PalmDetect" "1"
  Option "PalmMinWidth" "1"
  Option "PalmMinZ" "200"
EndSection

右クリックのエリアをなくしたり

  Option "SoftButtonAreas" "0 0 0 0 0 0 0 0"

スクロールを逆にしたり。

  Option "VertScrollDelta" "-20"
  Option "HorizScrollDelta" "-20"

でも、親指でクリックするときにカーソルがずれるのと、手のひらでタッチしてしまって入力中にカーソルがジャンブするのがつらいので、なんとかしたい。

Caps Lock を Ctrl にしたい

ここを参考にしてXKBOPTIONSをセットしといた。

CapsLockをCtrlにするまとめ - Λlisue's blog

$ sudo vi /etc/default/keyboard
# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS="ctrl:nocaps"

BACKSPACE="guess"
$ sudo dpkg-reconfigure -phigh console-setup
$ reboot

画面タッチをオフにしたい

別にコード書くのに必要ないから、オフにしたいなーと思ったらBIOSの設定にあった。

Fnキーをデフォルトにしたい

Fnロックキーがあった。

ゲストアクセスは切りたい

$ sudo vi /usr/share/lightdm/lightdm.conf.d/50-no-guest.conf 
[SeatDefaults]
allow-guest=false

ログイン画面の解像度を変えたい

lightdm - Wrong Login Screen Resolution - Ask Ubuntu

$ sudo vi /etc/lightdm/lightdm.conf
[SeatDefaults]
display-setup-script=xrandr --output eDP-1 --mode 1920x1080

viで矢印がABCDになる

$ vi ~/.vimrc 
set nocompatible
set backspace=indent,eol,start

という感じ

touchpadの設定は、自分の好みが見つかったらまたメモしておこう。

追記:結構良くなった

bufferings.hatenablog.com

Spring Bootでおさえておくべき4つのこと

同僚から「Spring Bootのこと教えてー」って声かけてもらったので、社内勉強会でこぢんまりと喋ってきた。

Spring Bootのコンセプト

Springがコードレベルの、Spring Bootがアプリレベルの、Spring Cloudがサービスレベルの、みんながやることやっとくよ。な感じ。

ってつぶやいたらまきさんから

って教えてもらったのでスライドを紹介しときました!あざます!

Spring Bootでおさえておくべき3つのこと

最初はどこまでがSpringでどこからがSpring Bootなのか分かってなくて「めっちゃ色々あって魔法みたいでよく分かんない・・・(ヽ´ω`)」ってなってたけど。最近、Spring Bootってこうかなと思うのが、(1)親pom、(2)auto configuration、(3)maven plugin、の3つ。

(1) 親pom

Mavenで最初にアプリの依存関係設定したことある人だったら分かると思うけど面倒くさい。のを、親pomとして定義してくれてるので使いたいstarterを選ぶだけ。そして、平和が訪れたヽ(=´▽`=)ノ

この辺

https://github.com/spring-projects/spring-boot/tree/master/spring-boot-starters/spring-boot-starter-parent

依存関係自体はこの辺

https://github.com/spring-projects/spring-boot/tree/master/spring-boot-dependencies

(2) auto configuration

こいつが魔法の元。

この辺

https://github.com/spring-projects/spring-boot/tree/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure

の中の例えばThymeleafだったらこんな感じになってて

https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/thymeleaf/ThymeleafAutoConfiguration.java#L69

...
@ConditionalOnClass(TemplateMode.class)
...
public class ThymeleafAutoConfiguration {
...

ThymeleafのTemplateModeっていうクラスがクラスパスにあれば、この設定が有効になる。そういうわけで、Thymeleafのjarを依存関係に入れておくだけで、Thymeleafの設定が有効になるのである。魔法である。

「そのjarを含めてるってことは使いたいってことだよね?ってことはみんながするような基本的な設定はしとくね。」という感じ。

(3) Spring Boot Maven Plugin

Spring Bootのアプリは通常、全部の依存ライブラリを含んだいわゆる"fat jar"という実行可能jarに固める。で、そのjarを実行すると、組み込みTomcatとかが起動してアプリが動き始める。そういうスタイル。

その実行可能jarを作ってくれたりする便利なやつがSpring Boot Maven Plugin。

この辺

http://docs.spring.io/spring-boot/docs/current/maven-plugin/usage.html

開発中はSTSとかから起動して動作確認しても良いし、mavenを使ってこんな風に起動することもできる

./mvnw spring-boot:run

jarに固めたいときは、こうやったらいい

./mvnw clean package

で、そのjarから実行したいときは、こんな感じ

java -jar app.jar

Springチカラ

ということで、Spring Bootに関しては大きく分けてその3つをまずは押さえておきたいかなって話をした。で、それ以外はSpringチカラの話。なのでこの本をおすすめしておいた。

books.rakuten.co.jp

そんな感じ。

12-Factor App

実行可能jarの話が出てきたので12-Factor Appに触れておいた。 12-Factor Appは、クラウドプラットフォームを念頭において、どんな風にアプリケーションを作ると良いかという方針を、Herokuの中の人が書いたもの。

僕の中では、外から設定を与える、というのが大きかったんよなぁ。→ 開発環境用の設定を持ったjarとか、本番環境用の設定を持ったjarとか、そういうふうに環境ごとにjarを作るんじゃなくて、jarはひとつだけで、環境によって異なる設定は外から与えてあげようよ、というのん。

The Twelve-Factor App (日本語訳)

Cloud Native App

Pivotalは、その12-Factor Appをさらに押し進めて、DevOpsやCI、Microservicesなども含めて全体としてどのようにアプリケーションを作ると良いかという方針のCloud Native Applicationというものを推奨している。

pivotal.io

補足しておいたのは「PivotalがSpringを引っ張っているのではなく、SpringがPivotalを引っ張っているのだ」ってSpring Oneで言ってたよってこと。

僕とSpring Cloud

僕はこんな風に考えてるんだよー。というのも伝えておいた。

bufferings.hatenablog.com

(4) Spring Bootでおさえておくべきこと4つ目

にして最も大事なことは・・・

Pivotalのまきさん!

まきさんの発信してくれる情報をキャッチすべし。って伝えておいた。

今日話した中で間違いなくここが一番重要。

JSUG

それと、JSUGに参加すべし。ということでついこないだあったやつのスライド、まきさんのとたださんのを伝えておいた。すごくいい資料。

実例で学ぶ、明日から使えるSpring Boot Tips #jsug

Spring for Spring Boot // Speaker Deck

社内の詳しい人

社内だと、藤井さんとTommyさんがめっちゃ詳しいよ!って伝えておいた。

楽天トラベルとSpring(Spring Day 2016)

あとは

そういう話をして

最後にひとつお願いがある!

もし色々と挑戦したら、その試行錯誤を僕にも共有してほしい!めっちゃ面白そうだし!

って伝えて締めくくった。良い日だった。