続・ラフなラボhttps://memo.laughk.org/2024-01-27T00:00:00+09:00ArchLinux のディスプレイマネージャを gdm から lightdm へ移行した2024-01-27T00:00:00+09:002024-01-27T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2024-01-27:/articles/2024-01-27-changed-display-manage-from-gdm-to-lightdm/<p>タイトル通りで、プライベートで使っているPCのArchlinux環境のディスプレイマネージャを gdm から lightdm へ移行したのでメモしておく</p>
<p>タイトル通りで、プライベートで使っているPCのArchlinux環境のディスプレイマネージャを gdm から lightdm へ移行したのでメモしておく</p>
<h2>移行のきっかけ</h2>
<p>プライベートではArchLinuxを相変わらず使っていて、比較的カジュアルにバンバンパッケージのアップデートをしているのだがいつ頃からか去年の暮れくらいから PC 起動時に gdm の起動時にうまくGUIが起動せずに止まってしまう事象が頻発して困っていた。</p>
<p>これまで似たようなトラブルはあったのだが、大体は linux kernel のバージョンを LTS の最新に差し替えてお茶を濁している間に直っているというケースがほとんどであったし、今回もしばらくはLTSのKernelを使うと動いていたのでお茶を濁していた。ただ今回は今までとちょっと違って、いつまでたっても直る気配がなく、最新のLTSのlinux kernelのバージョンが6.6になったタイミングでLTSでもgdm がうまく起動しなくなってしまった。</p>
<p>一旦 LTS のカーネルだけをダウングレードしてログイン可能な状態にもどしてから色々様子をみていたけれど、ArchLinux で使えるLinuxカーネルが最新の 6.7 になっても同様の現象が収まらず。また、ディスプレイマネージャに関しては「楽に使えれば良い」というポリシーだったため、 gdm をやめて lightdm に移行することにした。</p>
<h2>gdm -> lightdm の移行の流れ</h2>
<p><a href="https://wiki.archlinux.jp/index.php/LightDM">Arch Wiki の lightdm のページ</a>に従い、 lightdm と適当な greeter(ここではデフォルトで使われる lightdm-gtk-greeter)を入れればとりあえずは使える </p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>yay -S lightdm lightdm-gtk-greeter
</code></pre></div>
<p>ただ、 lightdm-gtk-greeter は本当にとりあえずな感じの画面だったので、見栄えのいいものにするために lightdm-slick-greeter を入れてみた。</p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>yay -S lightdm-slick-greeter
<span class="gp">$ </span>sudo vim /etc/lightdm/lightdm.conf
</code></pre></div>
<p>設定の変更内容は次の通り</p>
<div class="highlight"><pre><span></span><code><span class="w">$ diff -u {/tmp,/etc/lightdm}/lightdm.conf</span>
<span class="gd">--- /tmp/lightdm.conf 2024-01-21 17:12:42.561394041 +0900</span><span class="w"></span>
<span class="gi">+++ /etc/lightdm/lightdm.conf 2024-01-21 16:38:33.080477348 +0900</span><span class="w"></span>
<span class="gu">@@ -99,7 +99,7 @@</span><span class="w"></span>
<span class="w"> </span>#xdmcp-manager=<span class="w"></span>
<span class="w"> </span>#xdmcp-port=177<span class="w"></span>
<span class="w"> </span>#xdmcp-key=<span class="w"></span>
<span class="gd">-#greeter-session=</span><span class="w"></span>
<span class="gi">+greeter-session=lightdm-slick-greeter</span><span class="w"></span>
<span class="w"> </span>#greeter-hide-users=false<span class="w"></span>
<span class="w"> </span>#greeter-allow-guest=true<span class="w"></span>
<span class="w"> </span>#greeter-show-manual-login=false<span class="w"></span>
</code></pre></div>
<p>あとは gdm から lightdm へ切り替え</p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>sudo systemctl disable gdm.service
<span class="gp">$ </span>sudo systemctl <span class="nb">enable</span> lightdm.service
</code></pre></div>
<p>これで再起動をすればOK。
lightdm-slick-greeter そのものの設定は特にいじっていないが、これでとりあえずそれっぽく使えている。</p>
<p>また、gdmそのものも時間が経って気が向いたときに使うかもしれないので今のところ残しておいている。</p>parsedmarc が「No module named 'msgraph'」で動かない件のワークアラウンドなどのメモ2024-01-26T00:00:00+09:002024-01-26T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2024-01-26:/articles/2024-01-26-workaround-for-parsedmarc-not-working-with-no-module-named-msgraph/<p>先日 <a href="https://github.com/debricked/dmarc-visualizer">dmarc-visualizer</a> を試そうとしたところ、利用している <a href="https://github.com/domainaware/parsedmarc">parsedmarc</a> が例外を吐いて使えない場面に遭遇してワークアラウンドとパッケージング周りの問題を報告&PRを送ったのでその辺をメモしておく</p>
<p>先日 <a href="https://github.com/debricked/dmarc-visualizer">dmarc-visualizer</a> を試そうとしたところ、利用している <a href="https://github.com/domainaware/parsedmarc">parsedmarc</a> が例外を吐いて使えない場面に遭遇してワークアラウンドとパッケージング周りの問題を報告&PRを送ったのでその辺をメモしておく</p>
<h1>tl;dr</h1>
<ul>
<li>2024-01-26 時点では parsedmarc を単純にインストールしても「No module named 'msgraph'」という例外が発生し使えない</li>
<li>2024-01-26 時点では急ぎで parsedmarc が使いたい場合、 <code>python -m pip install parsedmarc 'msgraph-core<1.0.0'</code> という具合に msgraph-core の 1.0.0 を避けてインストールすれば利用できる</li>
<li>既にこの問題は本家に報告済みで PR も出した</li>
</ul>
<h1>dmarc-visualizer と parsedmarc とは?</h1>
<p>この二つのツールについては以下のブログを見るのが手っ取り早い</p>
<ul>
<li><a href="https://engineer.crowdworks.jp/entry/dmarc-visualizer">DMARCレポートを眺めるのにdmarc-visualizerがおすすめ - クラウドワークス エンジニアブログ</a></li>
</ul>
<p>簡単に言うなら dmarc-visualizer は「複数の OSS のツールを組み合わせたDMARCレポートをいい感じに表示してくれる便利キット」と解釈すればよくて、
parsedmarc は「dmarc-visualizer が利用している OSS ツールの一つで、名前の通り DMARC レポートをいい感じに変換してくれるツール」と解釈すればよい。</p>
<h1>2024-01-26 時点の parsedmarc の問題</h1>
<h2>発生している現象</h2>
<p>2024-01-26 時点で parsedmarc をインストールして利用しようとすると以下の例外が発生し、使えない</p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>python -V
<span class="go">Python 3.11.6</span>
<span class="gp">$ </span>python -m venv venv
<span class="gp">$ </span><span class="nb">source</span> venv/bin/activate
<span class="gp gp-VirtualEnv">(venv)</span> <span class="gp">$ </span>python -m pip install parsedmarc
<span class="gp gp-VirtualEnv">(venv)</span> <span class="gp">$ </span>parsedmarc --help
<span class="go">Traceback (most recent call last):</span>
<span class="go"> File "/tmp/parsedmarc/bin/parsedmarc", line 5, in <module></span>
<span class="go"> from parsedmarc.cli import _main</span>
<span class="go"> File "/tmp/parsedmarc/lib/python3.11/site-packages/parsedmarc/__init__.py", line 31, in <module></span>
<span class="go"> from parsedmarc.mail import MailboxConnection</span>
<span class="go"> File "/tmp/parsedmarc/lib/python3.11/site-packages/parsedmarc/mail/__init__.py", line 2, in <module></span>
<span class="go"> from parsedmarc.mail.graph import MSGraphConnection</span>
<span class="go"> File "/tmp/parsedmarc/lib/python3.11/site-packages/parsedmarc/mail/graph.py", line 10, in <module></span>
<span class="go"> from msgraph.core import GraphClient</span>
<span class="go">ModuleNotFoundError: No module named 'msgraph'</span>
</code></pre></div>
<h2>原因: 依存している msgraph-core のバージョン指定方法に問題あり</h2>
<p>msgraph というモジュール名を調べたところ、依存しているパッケージである msgraph-core のことであることがわかった。<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup>
この msgraph-core は 2024-01-23 に最新版である 1.0.0 をリリースしており、これは 2021-07-27 ぶりのメジャーリリースで破壊的変更を含んでいる模様。</p>
<ul>
<li><a href="https://pypi.org/project/msgraph-core/#history">msgraph-core · PyPI</a></li>
<li><a href="https://github.com/microsoftgraph/msgraph-sdk-python-core/releases/tag/v1.0.0">Release v1.0.0 · microsoftgraph/msgraph-sdk-python-core</a></li>
</ul>
<p>一方で、 parsedmarc の <a href="https://github.com/domainaware/parsedmarc/blob/7d2b431e5f20bdcdb330c4fbb23ce7df5fb0642f/pyproject.toml#L50">project.toml</a> をみると、 msgraph-core は <code>>=0.2.2</code> と指定されている。</p>
<p>このため、新規で parsedmarc をインストールすると msgraph-core のバージョン0.2.2以上のもので最新である 1.0.0 がインストールされてしまい、動かなくなっていると考えられる。</p>
<h2>ワークアラウンドによる回避</h2>
<p>parsedmarc を使うには msgraph-core の 1.0.0 未満のバージョンがインストールされていればよいので、 parsedmarc のインストール時に次のような感じで msgraph-core のバージョンを指定すればよい</p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>python -m pip install parsedmarc <span class="s1">'msgraph-core<1.0.0'</span>
</code></pre></div>
<p>ピンポイントで 0.2.2 を指定してもよいと思う</p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>python -m pip install parsedmarc msgraph-core<span class="o">==</span><span class="m">0</span>.2.2
</code></pre></div>
<h2>報告をして、とりあえず動くようにするレベルでPRを出した</h2>
<p>この件は parsedmarc の実装を msgraph-core の 1.0.0 に対応させるのが本当の意味で根本的な対応になるだろうが、そんなにシュッとできるとも思えなかったので一端取り急ぎで Issue をあげた</p>
<ul>
<li><a href="https://github.com/domainaware/parsedmarc/issues/464">ModuleNotFoundError: No module named 'msgraph' · Issue #464 · domainaware/parsedmarc</a></li>
</ul>
<p>ただ、今の状況が放置されるのも困るので、ひとまず msgraph-core のバージョンを 1.0.0 未満のものを使うように修正するPRもだした</p>
<ul>
<li><a href="https://github.com/domainaware/parsedmarc/pull/466">fix: msgraph-core version by laughk · Pull Request #466 · domainaware/parsedmarc</a></li>
</ul>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p>ちなみにリリースバージョンを確認するにあたって、先に紹介したクラウドワークスさんの記事や <a href="https://blog.dksg.jp/2023/09/dmarcparsedmarc.html">DMARCレポートツール「parsedmarc」をインストール</a> の記事によって parsedmarc が正常に動いていたであろう時期が予測しやすくなり、大変助けられた。 <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>xmodmap から xremap へ移行2024-01-21T00:00:00+09:002024-01-21T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2024-01-21:/articles/2024-01-21-migration-from-xmodmap-to-xremap/<p>プライベートで使っている ArchLinux 環境のキーバインド変更方法を xmodmap から xremap へ移行した。そのへんをメモしておく。</p>
<p>プライベートで使っている ArchLinux 環境のキーバインド変更方法を xmodmap から xremap へ移行した。そのへんをメモしておく。</p>
<h1>xremap の選定</h1>
<p><a href="https://github.com/k0kubun/xremap">k0kubun/xremap: Key remapper for X11 and Wayland</a></p>
<p>Linux のキーバインド変更方法は色々あり、古くからの定番にあった xmodmap を惰性で長年使っていたのだけど不満が無いこともなかった。主に以下</p>
<ul>
<li>USB機器の抜き差しをすると設定内容がリセットされてしまい、再実行が必要になる</li>
<li>アプリケーションによって効いたり効かなかったりがある</li>
</ul>
<p>特に普段 PC を Typs-C ドックに抜き差しして使っているとちょくちょく設定が飛んでしまうことがありかなり億劫に感じながらも他の方法を探すのをサボり続けて惰性で使い続けていたところがある。</p>
<p>そんななか、以下のブログをみて現状 xremap がかなり完成度が高いんだなと感じ、重い腰を上げて移行してみることにした。</p>
<ul>
<li><a href="https://blog.3qe.us/entry/2023/12/25/201605">SandSをLinuxでやってる人はxremapを導入してxmodmapとxcapeを捨ててください - Lambdaカクテル</a> </li>
</ul>
<h2>xmodmap から xremap への移行</h2>
<h3>インストール</h3>
<p>ArchLinux の場合、 AUR から簡単にインストールできる。パッケージ名は「xremap-x11-bin」</p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>yay -S xremap-x11-bin
</code></pre></div>
<h3>設定(右AltでIME切り替えをできるようにする)</h3>
<p>実はキーバインド変更は「右Altを全角/半角に置き換え」しかやってない。そのため、最初は以下の config.yml を用意すれば行けるだろうと思っていたが、どうあがいてもうまく行かなかった</p>
<div class="highlight"><pre><span></span><code><span class="nt">modmap</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Global</span><span class="w"></span>
<span class="w"> </span><span class="nt">remap</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">ALT_R</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ZenkakuHankaku</span><span class="w"></span>
</code></pre></div>
<p>fcitx の設定と合わせて色々試した感じ、この設定では右ALTに何もバインドされていないという状況になるっぽい(ただあまり深追いはしていない)</p>
<p>どうしたのもかと xremap の issue を探してみた感じ以下のものを発見</p>
<ul>
<li><a href="https://github.com/k0kubun/xremap/issues/230">`CapsLock -> ZenkakuHankaku` remap doesn't work · Issue #230 · k0kubun/xremap</a></li>
</ul>
<p>どうもキーバインド変更で「ZenkakuHankaku」になったキーがうまく機能しないような事象ということで、今回自分の環境で起こっていることとおおよそ共通している。ただこの Issue にヒントはあって「KatakanaHiragana」を使えばやりたいこと(右AltでIMEの切り替え)ができるかもしれないと感じ以下のように変更</p>
<div class="highlight"><pre><span></span><code><span class="nt">modmap</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Global</span><span class="w"></span>
<span class="w"> </span><span class="nt">remap</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">ALT_R</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">KatakanaHiragana</span><span class="w"></span>
</code></pre></div>
<p>「KatakanaHiragana」で切り替えができるように fcitx 側の設定の「Trigger Input Method」に追加</p>
<p><img alt="fcitxの設定" src="https://imgur.com/8C3Vloo.png"></p>
<p>ここまでやったところで無事に右AltでIMEの切り替えが安定して動くようになった</p>
<h3>xremap の自動起動</h3>
<p>ログインするたびに手動でコマンドを実行するの流石に面倒なので systemd で自動起動するようにする。 必要なファイル類を以下のように設置</p>
<div class="highlight"><pre><span></span><code>~/.config/xremap
├── config.yml
└── systemd
└── xremap.service
</code></pre></div>
<p>config.yml は先程の内容通り。 xremap.service は次の通り</p>
<div class="highlight"><pre><span></span><code><span class="k">[Unit]</span><span class="w"></span>
<span class="na">Description</span><span class="o">=</span><span class="s">xremap service</span><span class="w"></span>
<span class="k">[Service]</span><span class="w"></span>
<span class="c1"># restart periodically</span><span class="w"></span>
<span class="na">Restart</span><span class="o">=</span><span class="s">always</span><span class="w"></span>
<span class="na">ExecStart</span><span class="o">=</span><span class="s">/usr/bin/xremap /home/laughk/.config/xremap/config.yml</span><span class="w"></span>
<span class="na">User</span><span class="o">=</span><span class="s">root</span><span class="w"></span>
<span class="na">Group</span><span class="o">=</span><span class="s">root</span><span class="w"></span>
<span class="k">[Install]</span><span class="w"></span>
<span class="na">WantedBy</span><span class="o">=</span><span class="s">default.target</span><span class="w"></span>
</code></pre></div>
<p>用意した xremap.service を systemd で有効にする</p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>sudo systemctl <span class="nb">enable</span> /home/laughk/.config/xremap/systemd/xremap.service
<span class="go">[sudo] password for laughk:</span>
<span class="go">Created symlink /etc/systemd/system/xremap.service → /home/laughk/.config/xremap/systemd/xremap.service.</span>
<span class="go">Created symlink /etc/systemd/system/default.target.wants/xremap.service → /home/laughk/.config/xremap/systemd/xremap.service.</span>
<span class="gp">$ </span>sudo systemctl start xremap.service
<span class="gp">$ </span>sudo systemctl status xremap.service
<span class="go">[sudo] password for laughk:</span>
<span class="go">● xremap.service - xremap service</span>
<span class="go"> Loaded: loaded (/etc/systemd/system/xremap.service; enabled; preset: disabled)</span>
<span class="go"> Active: active (running) since Sun 2024-01-21 21:51:56 JST; 18min ago</span>
<span class="go"> Main PID: 60950 (xremap)</span>
<span class="go"> Tasks: 1 (limit: 57323)</span>
<span class="go"> Memory: 436.0K (peak: 756.0K)</span>
<span class="go"> CPU: 243ms</span>
<span class="go"> CGroup: /system.slice/xremap.service</span>
<span class="go"> └─60950 /usr/bin/xremap /home/laughk/.config/xremap/config.yml</span>
<span class="go">Jan 21 21:51:56 archlinux xremap[60950]: /dev/input/event8 : HDA Intel PCH Mic</span>
<span class="go">Jan 21 21:51:56 archlinux xremap[60950]: /dev/input/event9 : HDA Intel PCH Headphone</span>
<span class="go">Jan 21 21:51:56 archlinux xremap[60950]: ------------------------------------------------------------------------------</span>
<span class="go">Jan 21 21:51:56 archlinux xremap[60950]: Selected keyboards automatically since --device options weren't specified:</span>
<span class="go">Jan 21 21:51:57 archlinux xremap[60950]: ------------------------------------------------------------------------------</span>
<span class="go">Jan 21 21:51:57 archlinux xremap[60950]: /dev/input/event16: Mistel Co.,Ltd. MD600 Alpha</span>
<span class="go">Jan 21 21:51:57 archlinux xremap[60950]: /dev/input/event20: Mistel Co.,Ltd. MD600 Alpha Keyboard</span>
<span class="go">Jan 21 21:51:57 archlinux xremap[60950]: /dev/input/event23: ELECOM TrackBall Mouse DEFT Pro TrackBall</span>
<span class="go">Jan 21 21:51:57 archlinux xremap[60950]: /dev/input/event3 : AT Translated Set 2 keyboard</span>
<span class="go">Jan 21 21:51:57 archlinux xremap[60950]: ------------------------------------------------------------------------------</span>
</code></pre></div>
<p>これで xremap が自動起動されるようになった。
あとは <code>~/.xprofile</code> から xmodmap 関連の設定を削除すれば完全に xremap へ移行完了。</p>
<h3>2024-01-27 追記</h3>
<p>xremap を systemd 経由で動かす際、 root 権限でシステムワイドに動かすよりもユーザーサービスとして動かす方が良さそうだったので後日変更した</p>
<p>若干強引だけど、既存の <code>xremap.service</code> を一旦無効化(丁寧にやるなら先に stop してからやったほうがいいのは間違いない)</p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>sudo systemctl disable /home/laughk/.config/xremap/systemd/xremap.service
<span class="go">[sudo] password for laughk:</span>
<span class="go">Warning: Can't execute disable on the unit file path. Proceeding with the unit name.</span>
<span class="go">Removed "/etc/systemd/system/xremap.service".</span>
<span class="go">Removed "/etc/systemd/system/default.target.wants/xremap.service".</span>
</code></pre></div>
<p><code>--user</code> 付きで再度有効化</p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>systemctl --user <span class="nb">enable</span> /home/laughk/.config/xremap/systemd/xremap.service
<span class="go">Created symlink /home/laughk/.config/systemd/user/xremap.service → /home/laughk/.config/xremap/systemd/xremap.service.</span>
<span class="go">Created symlink /home/laughk/.config/systemd/user/default.target.wants/xremap.service → /home/laughk/.config/xremap/systemd/xremap.service.</span>
</code></pre></div>
<p>手動で起動する場合も <code>--user</code> 付きでやればOK</p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>systemctl --user start xremap.service
</code></pre></div>2023年振り返り2023-12-31T00:00:00+09:002023-12-31T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2023-12-31:/articles/2023-12-31-look-back-2023/<p>毎年恒例の振り返りを書いておく。 いつもどおり「個人活動」「仕事面」「プライベート」で振り返る。</p>
<p>毎年恒例の振り返りを書いておく。 いつもどおり「個人活動」「仕事面」「プライベート」で振り返る。</p>
<h1>個人活動</h1>
<p>8月くらいに一度LTで登壇することはできた</p>
<ul>
<li><a href="https://jawsug-container.connpass.com/event/285124/">JAWS-UG コンテナ支部 #24 ecspresso MeetUp - connpass</a> </li>
</ul>
<p>ecspresso meetup はちょうど業務で ecspresso と ecschedule を絡めた改善を実施したあとだったこともあり、勢いで LT を申し込んでみたところ幸いにも枠の中に潜り込めた感じ。この枠は一瞬で埋まってしまったので本当にイベントを見つけたタイミングが良かったのだと思う。</p>
<p>参考: 当日使ったスライドはこれ</p>
<ul>
<li><a href="https://www.docswell.com/s/laughk/5XY687-2023-08-08-175902-ecspresso-meetup">ECSサービスだけじゃない!ecschedule 管理されているECSタスク定義管理における ecspresso の使いどころ | ドクセル</a></li>
</ul>
<p>現地イベントで同じ領域の様々な事例に触れられてかなり刺激になったこともあり、これは参加できてよかったなとは感じている。ただ懇親会はこの手の飲み会が久しぶりすぎるのもあったのか、実りのあるコミュニケーションにあまり繋げられなかったのが正直あった。お話したい人ともタイミングを逃してしまったり、できても帰り際に軽く挨拶できる程度だったのでこの辺も過ごし方をちゃんと考えたいところ。</p>
<p>また、他にも少しずつイベントに顔を出すとかはできたかな</p>
<ul>
<li><a href="https://platformengineering.connpass.com/event/280339/">Platform Engineering Meetup #2 - connpass</a></li>
<li><a href="https://connpass.com/event/282059/">俺たちの本当にやりたかったDevDay - connpass</a></li>
<li><a href="https://2023-apac.pycon.jp/">PyCon APAC 2023</a> 1日目のみ</li>
<li>python mini hack-a-thon に2回ほど現地参加</li>
</ul>
<p>PyCon APACのような終日開催のカンファレンスはその場の空気感にどっぷり浸れて、久しぶりにリアルでお会いする人たちと飲みにいって近況話から、最近の自分の悩みみたいなものを色々聞いてもらってありがたかったということもあった。もう少しこういう機会は増やしたい気持ちはあるが、日々の生活のリズムと相談なところもある。</p>
<p>一方で Platform Engineering Meetup のような平日開催のイベントはどうするのがいいかなという感覚がまだつかめないでいる。というのが、座学形式で話を伺ったあとに1時間程度の交流会だと確かに集まっている人がどんな人(どの領域のエンジニアなのか。Platform Engineeringに興味があるバックグラウンドは何かなど)は把握できるところはあるものの、短時間で不完全燃焼気味になってしまうことも多いと感じた。ただこれは平日のタイムテーブル的に仕方ないこともあると思うし、日々の生活もあるので有志の2次会に参加するとかもやりづらいところがあり悩ましい。</p>
<p>実際、交流に割ける時間の割に得られるものも限られるということで年末になるにつれ、Meetup は見つけてもオンライン参加にしてしまうことが殆どになった。</p>
<h3>SNSとの距離</h3>
<p>これも一応個人活動の一環として触れておく。去年から今年にかけて X(Twitter)の様々な動きで様々なSNSが生まれたり再注目されたりと良くも悪くも動きがあった年だと思っている。</p>
<p>個人的には「Twitter 以外が盛り上がりそうなら面白そうなので色々触ってみるか!」くらいのノリで、mastodon(fedibird.com), Misskey( misskey.io 他 ), Threads, Bluesky, Nostr など色々それなりに使ってみてなんやかんや mastodon( fedibird.com )と Threads には結構居着いている。</p>
<p>このあたりの動きで面白かったというか、思い知ったこととしては以下あたりがある。</p>
<ul>
<li>「2023年にもなるとSNSに求めるものが個々人で違いすぎてなんかもうどうなるかよくわからんな」</li>
<li>「どんなSNSでも居心地の良さを見いだしやすいのは人が少ないうちだけ」</li>
<li>「よりコモディティ化するとどうしてもトラブル体質の人が現れてしまい、ミュートやブロック、投稿のアクセス制限などないとやってられない」</li>
</ul>
<p>特に一番最後のやつに関しては、主義主張、価値観、公序良俗に対する見解の食い違いみたいなもので、正直見ていて気分が悪くなるような流れも様々な場所で見かけることがあり「もう人類にSNSは早すぎたんじゃないの...」という気分になってしばらく SNS そのものと距離をおいたりもした。</p>
<p>mastodon( fedibird.com ) と Threads に関しては比較的にそのへんのことから自己防衛する手段が整っているというのと、ローカルタイムラインという概念が無いというのがあって居着いているのがある。<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup></p>
<p>X(Twitter)も、たまに何かポストすると変なアカウントが何かしら変な絡み方してくるのが大分厳しいと感じており、見はするもののあまり積極的に使いたいとは思わなくなっているのは事実としてある。個別連絡とかも X(Twitter) しか無い状況ならできれば Discord とか Instagram DM(Threadsに紐づけてるアカウントでももう一つプライベートアカウントでも) あたりに移していきたいかなという思いはあったりする。<sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup></p>
<h1>仕事面</h1>
<p>仕事は引き続き Web 系のインフラエンジニアとして過ごしているが、組織編成や新たなメンバーを向かい入れるにあたった状況の変化も大きかった。役職的には所謂 IC(individual contributor)であるのは変わらないものの、自分の経験・知識から一定組織を(ときにはチームを超えて)リードするような振る舞いを求められることはより多くなったと思うし、その中の日々の過ごし方にひたすら苦しんだ感じがある。</p>
<p>実際今年の後半からは著しくパフォーマンスを落としてしまうことも少なくなく、先週くらいからやや調子は取り戻したものの完璧とも言いづらく、年明けからの過ごし方も色々悩んでしまっているのが正直なところ。<sup id="fnref:3"><a class="footnote-ref" href="#fn:3">3</a></sup></p>
<p>一応、2023年に入ってから Platform Engineering の実現を掲げた組織体制になっていっているものの、日々の課題(トイル)や組織のフォローなどに忙殺されている感は強く、うまく推進できているかは今のところあまり自信はない。</p>
<h1>プライベート</h1>
<p>(※ 子供も大きくなってきたので、家族が絡む詳細はぼかして書いておく。)</p>
<h2>子育て関連</h2>
<p>2023年は大分 COVID-19 関連の制約がゆるくなってきた感じがあり、イベント系が色々復活してきた感じはある。一つの節目を迎えることもあって、それらイベントや日々の生活に備えた家庭優先モードは多かった気はする。自分の周辺が「コロナ終わった」みたいなテンションでアクティブになっているのを横目に、引き続き余計な行動は避けるようにはしていた。</p>
<p>一方でそれでも家族の行動はアクティブになったこともあったのか、病院のお世話になる機会は一気に増えたようにも思える。体調管理は引き続き気をつけていかないとなというところ。</p>
<p>また、ここ数年とはまた違った背景で「リモートワークできないときついな」という状況になったなと感じている。あとこれは数年は続くかな。</p>
<h2>休日の過ごし方</h2>
<p>基本的に2022年から引き続きなところが大きい。ただ、諸々のイベントが復活するようになってきて土日の予定がすでに埋まってしまうということが結構増えた感じもあり、車で子どもたちを連れて出かける機会は去年よりは減ったと思う。</p>
<p>とはいえ、引き続き車で出かける機会はまあまああって、子どもたちも大分車に乗ることに慣れてきたのか片道1時間位は普通に行けるようになった。それもあって回数は減ったものの遠出をする比率は上がったかもしれない。来年くらいになると単純な遊具のある公園以外の領域にもチャレンジしていきたいところ。</p>
<p>一方で休日なのにイベント・お出かけで忙殺されている面はあるなと感じていて、日々の家の片付けとか今後の向けての動きなどに関して俯瞰して考えたりアクションしたりがあまりできていなかったようには思える。もう少しバランスをとれたほうがいいんだろうな。</p>
<p>また、自分自身の心の休息としても車で出かける機会はちょくちょくあった。これは有給であったり、会社のハッピーフライデー(土曜祝日の前日がおやすみ)制度のときなど、自分一人で休めるときに限られるんだけど、強制的にデジタルデトックスにもなるし、住んでいる場所からちょっと足を伸ばすだけで行ける場所の発見に感動もあるしで年々ハマってきてる感じはある。</p>
<p><img alt="小田原あたりに一人でドライブしたときのやつ" src="https://imgur.com/8jpYtGw.png">
<em>小田原あたりまで一人でドライブしたときのやつ、財布が無いのに現金しか使えない駐車場だとあとから気づいてえらい目にあった場所</em></p>
<h2>帰省</h2>
<p>今年は4,5年ぶりくらいに新幹線でお盆の時期に帰省をした。個人的にはまた車で旅をしながら戻るのをやりたいかなーと感じてはいたものの、妻の休みのスケジュールなどを加味したことと「お盆の季節に帰れてないなー」とふと思い立ったことが大きい。</p>
<p>それにしても2回ほど車だけで行ったあとに新幹線にのると「あの道中を3時間くらいで移動してしまうのか... すごい...」という謎の感動を味わえた。道中の景色もすっ飛ばしてしまうもったいなさはあるものの、やっぱり便利ではあるんだよな。</p>
<p>今回はちょろっと「もう無理にお盆に合わせて帰ってこなくても大丈夫だよ」とは言われたので、2024年は何かしら別の旅行とくっつけて実家に行ってみるのも面白いかなとは感じている</p>
<h2>筋トレなど</h2>
<p>地味に2023年の大きな変化があったトピックは筋トレだと思う。2022年は「全く運動をしない状態にはしない」という守りの状況だったけど、今年は「筋肉増やしていくぞ!」とバリバリ攻めの状況になった。</p>
<p><img alt="家トレのお供たち" src="https://imgur.com/1fxu6HL.png">
<em>家トレのお供たち</em></p>
<p>きっかけとしては4月くらいに会社のイベントで映った写真の自分の顔の感じをみて「うーん、ちょっとこれはぼちぼち手をうったほうがよさそうだな...(ダイエット的な意味で)」と思ったことが大きい。2022年までも何もしていないわけではなかったものの、ストレスで朝に暴食してしまうこともあったので良くない太り方をしている自覚はあり、そのへんを一気に解消しに行くことにした。</p>
<p>ダイエット自体はこれまでも数回やって、実際それなりに成果は出してきたのだけど、毎回共通していたのは「筋肉はついていない。むしろ減ってる」というものがあった。事実として過去のダイエットはなんとなくの糖質制限とランニング、おまけにそれっぽいジムトレーニングという組み方が多く、体脂肪率が15%くらいまでくるとピタリと体重が落ちなくなる(けど、まあ15%まで減らせたからいいか)状況になって終了という感じだった。</p>
<p>ただそれだと、これからの自分の年齢を加味するとガリガリになるしか痩せる方法が無くなりそうでよくなさそうだなということで、これまでとは同じ方法はとらずに「あくまでも筋肉をつける」ということを最優先に筋トレを開始していった。</p>
<p>情報収集は Youtube が一番よかった。これまで何かしら学習する際に Youtube をベースにするのは結構苦手意識があったんだけど、幸いにして筋トレに関しては Youtube はためになる情報が結構ある。この体験を通じて動画から情報をキャッチアップする勘所みたいなものを掴めたのも地味に大きかったかもしれない。</p>
<p>特にお世話になっているのは以下のチャンネルのものが多い(ほかも見ることはあるけど)</p>
<ul>
<li><a href="https://www.youtube.com/@YAMASAWA">山澤 礼明【筋肉チャンネル】</a></li>
<li><a href="https://www.youtube.com/@mametama">まめたまの筋トレ日記 </a></li>
<li><a href="https://www.youtube.com/@yoshinori-yamamoto">山本義徳 筋トレ大学 - VALX</a></li>
<li><a href="https://www.youtube.com/@-ClimbLife">クライムライフ【Climb Life】</a> </li>
<li><a href="https://www.youtube.com/@sexyfitness">sexyfitness 40-50代ボディをかっこよくする筋トレ法</a> </li>
</ul>
<p>単純なトレーニング動画からトレーニング・食事まわりの基本知識の座学的なもの、家ジムの組み方とか、全部が全部ではないものの、比較的ロジカルに説明されているものが多くてかなり学びになっている。また、トレーニング動画(特にスーパーセット系)は動画がそのままタイマーとして利用できたり、繰り返しフォームなどをしっかり確認しながらできたりと、自宅トレーニングの質を大幅に上げることに成功したと思う。</p>
<p>おかげで今のところジム通いを再開させずとも自宅トレーニングの分割法で「3日トレーニングして1日おやすみ」というルーティンが大体回るようになっている。</p>
<p>ちなみにフィットボクシングも日々の筋トレの準備運動程度に短めになったものの引き続き継続中。</p>
<p><img alt="フィットボクシング1066日継続中" src="https://imgur.com/0RcnoQS.png">
<em>フィットボクシング1066日継続中</em></p>
<p>今のところ、習慣として根付いた段階で多少筋力増加傾向にはなっているものの、成果に関してはまだまだこれからという状況ではあるので来年移行も引き続き継続していきたいところ。</p>
<h2>料理</h2>
<p>さっきの筋トレの状況があって今年はほとんどの期間をローファット(低脂質)な食事にしており、自炊率はかなり上がった。その際は、 <a href="https://www.youtube.com/@mametama">まめたまの筋トレ日記 </a> で紹介されている低脂質な料理レシピと <a href="https://www.youtube.com/@ryuji825">料理研究家リュウジのバズレシピ </a> の合せ技でかなり楽しく美味しい低脂質な食事を続けられたと思う。</p>
<p>またその関係で、継続していたマッスルデリやBASEブレッドの定期購入はやめてしまった。<sup id="fnref:4"><a class="footnote-ref" href="#fn:4">4</a></sup></p>
<hr>
<h1>さいごに</h1>
<p>このブログだけ振り返ってみると「なんだか筋トレばっかやてたんだな」という感じにも見えてしまうんだけど、まあここにあまり書けないようなしんどいと思えることのほうが多かったと感じていて、むしろこれだけ関心を持てるトピックとして筋トレがあって本当に精神面で助けられたところが大きいと思っている。</p>
<p>とにかく「しんどい状況がひたすら続いていたなー」という年ではあった。
来年はなにかいいことあるといいんだけど。</p>
<p>それでは良いお年を。</p>
<h1>参考: 過去の振り返り</h1>
<ul>
<li><a href="/articles/2022-12-31-look-back-2022/">続・ラフなラボ – 2022年振り返り</a></li>
<li><a href="/articles/2021-12-31-look-back-2021/">続・ラフなラボ – 2021年振り返り</a></li>
<li><a href="/articles/2020-12-31-look-back-2020/">続・ラフなラボ – 2020年振り返り</a></li>
<li><a href="/articles/2019-12-31-end-of-2019/">続・ラフなラボ – 2019年振り返り</a></li>
<li><a href="/articles/2018-12-31-look-back-2018/">続・ラフなラボ – 2018年</a></li>
<li><a href="/articles/2017-12-31-look-back-2017/">続・ラフなラボ – 2017年</a></li>
</ul>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p>ローカルタイムラインがないというのは mastodon というよりは fedibird.com に限った話。他にもローカルタイムラインが無いサーバはあるかもだけど、基本的に mastodon はだいたいローカルタイムラインはある。 <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:2">
<p>すでにどこかしらのコミュニティSlackや Facebook, Google Chat, Signal などでやり取りしているならそれでいいんだけど <a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:3">
<p>この辺の事情に関しては色々話したかったりするので気になる人は X(twitter) とか Mastodon, Discord, Facebook, Instagram あたりで連絡(DM)くれれば時間作るので飲みに行きましょう <a class="footnote-backref" href="#fnref:3" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
<li id="fn:4">
<p>いずれもダイエット・筋トレに良さそうに見えているが、案外カロリーの割に脂質が高いケースが多く、食事のコントロールがやりづらくなってしまったため <a class="footnote-backref" href="#fnref:4" title="Jump back to footnote 4 in the text">↩</a></p>
</li>
</ol>
</div>VAIO SX14, Windows11 環境構築 2023.122023-12-05T00:00:00+09:002023-12-05T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2023-12-05:/articles/2023-12-05-kitting-vaio-sx14-windows11-2023-12/<p>この記事は <a href="https://adventar.org/calendars/8994">コネヒト Advent Calendar 2023 - Adventar</a> 6日目の記事です。</p>
<p>先日業務PCが Thinkpad L14 から VAIO SX14 と新しくなり、
もろもろの業務環境のセットアップを久しぶりにしたのでその内容をまとめます。</p>
<p>この記事は <a href="https://adventar.org/calendars/8994">コネヒト Advent Calendar 2023 - Adventar</a> 6日目の記事です。</p>
<p>先日業務PCが Thinkpad L14 から VAIO SX14 と新しくなり、
もろもろの業務環境のセットアップを久しぶりにしたのでその内容をまとめます。</p>
<h1>PC情報: VAIO SX14</h1>
<p>きっかけは以前まで利用していた Thinkpad L14 の調子がだいぶ悪いケースが増えてきたことが大きいです。
どの機種にするかは基本的に自由にリクエストできることから今回は Thinkpad シリーズではなく VAIO を選択しました。</p>
<p><img alt="納品されたVAIO SX14ブラックエディション" src="https://imgur.com/8bYedB6.png" width=500 /></p>
<p>今回選定した大まかなスペックをこれまで使っていた Thinkpad 14L と比較すると次の通りです。</p>
<table>
<thead>
<tr>
<th></th>
<th>Thinkpad L14</th>
<th>VAIO SX 14</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>CPU</strong></td>
<td>Ryzen 7 PRO 4750U</td>
<td>Intel Core i7-1370</td>
</tr>
<tr>
<td><strong>メモリ</strong></td>
<td>64G</td>
<td>32GB</td>
</tr>
<tr>
<td><strong>ストレージ</strong></td>
<td>1TB SSD</td>
<td>1TB SSD</td>
</tr>
<tr>
<td><strong>ディスプレイ</strong></td>
<td>Full HD (1920x1024)</td>
<td>4K (3840x2160)</td>
</tr>
<tr>
<td><strong>キーボード配列</strong></td>
<td>英字配列</td>
<td>英字配列</td>
</tr>
<tr>
<td><strong>重さ</strong></td>
<td>約 1.61kg</td>
<td>約 999g</td>
</tr>
</tbody>
</table>
<h2>所感など</h2>
<ul>
<li>メモリはこれまでの半分の32GBとなりましたが、ここ数年業務で利用している感じ64GBをフルで使うようなケースもほぼ無かったこともあり、今のところ全く困っていません</li>
<li>CPUの世代は新しいものとなり、Intel CPUですがとても快適になりました。 <sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup></li>
<li>VAIO も機種によっては英字配列キーボードを選べるのがうれしいですね </li>
<li>重さは正直まったく考慮していなかったのですが、実際にVAIO SX14を持ってみると薄さも相まって持ちやすさが段違いによく、それにも関わらずPC全体はとても頑丈で扱いやすく一瞬で「VAIO最高じゃん!」という気持ちになりました</li>
<li>4Kディスプレイも相まって、どこでも作業効率を落とすことなく作業できそうで色々な可能性を感じます</li>
<li>情シスにお願いしたタイミングがちょうどブラックフライデーと重なり、ブラックエディションだったのにも関わらず30万円ほどで購入できたのはラッキーでした。 <s>気に入って私物にも同じものを購入しようとしましたが、その時には既にブラックフライデーは終わっていました...</s></li>
<li>ALL BLACK EDITION で隠し刻印のキーボードがカッコいい</li>
</ul>
<p><img alt="納品されたVAIO SX14ブラックエディション2" src="https://imgur.com/aVVpyax.png" width=500 /></p>
<h1>Windows11 のセットアップ</h1>
<p>基本的には以前書いた次の記事で紹介しているものがベースとなってはいますが、2023年12月版ということで改めてまとめます</p>
<ul>
<li><a href="/articles/2020-12-20-back-to-windows/">続・ラフなラボ – 7年ぶりくらいに Windows 環境に戻ってきた</a></li>
</ul>
<p>また、すべてを網羅的にまとめるととんでもない長さになりそうなので、大まかものとなっている点はご了承ください。</p>
<hr>
<h2>大まかに最初やったことの流れ</h2>
<ol>
<li>Win + v でクリップボード履歴の有効化</li>
<li>Edge の最低限の設定<ul>
<li>Edge デフォルトの週刊誌みたいなトップの無効化</li>
<li>Edge で会社のGoogle Workdspaceへのログイン</li>
</ul>
</li>
<li>スナップの余計な機能を無効化</li>
<li>パスワードマネージャ<ul>
<li><a href="https://www.enpass.io/">Enpass</a> (主に会社用の情報を扱っている。あくまで個人利用だが Vault は会社のGoogle Driveを使っている)</li>
<li><a href="https://1password.com/jp">1passowrd</a> (主に個人用途。GitHub や X、Discord などの認証情報はこっちなので)</li>
</ul>
</li>
<li>Slack のインストールとセットアップ</li>
<li>Firefox のインストールセットアップ(業務と切り離した用途でWebブラウジングするときに使う。デフォルトにはしない)</li>
<li>PowerToys のインストールとPowerToys Keyboard Manager でキーバインド変更</li>
<li>シンボリックリンク有効化</li>
<li>IMEの設定</li>
<li>scoop のインストール、CLI環境整備</li>
<li>WSLの引っ越し</li>
<li>業務で使うツール類のインストール</li>
<li>コンテナ環境(今回は Docker Desktop ではなく podman をしばらく使ってみることにした)</li>
<li>フォントの追加(UDEV Gothic, BIZTER など)</li>
<li>SSH越しに旧PCから細かいファイルの転送</li>
</ol>
<p>いくつかはもう少し詳しくピックアップします</p>
<h2>Edge の最低限の設定</h2>
<p>最近は Edge の挙動がほとんど Chrome と一緒なので業務で使うメインブラウザは Edge にしています。
ただ、久しぶりにまっさらな状態で起動してみたところ週刊誌のような記事が大量に目に入ってきて「うわ...」となってしまいました。</p>
<p>デフォルトの最初に開かれるタブの右上の歯車アイコンを選択し、画面表示内容から設定可能で、「ニュースを非表示」にしました。</p>
<ul>
<li>「ニュースを非表示」の場所
<img alt="Edgeの画面からニュースを非表示にするメニューの場所" src="https://imgur.com/TpaWn5Z.png" width=500 /> <br/></li>
<li>実際に非表示にした様子
<img alt="Edgeでニュースを非表示にした様子" src="https://imgur.com/VcthS82.png" width=500 /> <br /></li>
</ul>
<h2>スナップの余計な機能を無効化</h2>
<p>Windowsを利用する際はWinキーと方向キーの組み合わせでウィンドウをスナップ(寄せる)させる動作はよく利用するのですが、
Windows11 標準では次のように、都度残りのスペースに何かを配置するように促されるのがうっとうしいです。</p>
<p><img alt="Firefoxを右に寄せたものの、左側に何かを配置するように促されている様子" src="https://imgur.com/SWmLTyA.png" width=500 /></p>
<p>この動作は止めることができて、設定の「システム」 > 「マルチタスク」 の中にある「ウィンドウのスナップ」の中にチェックボックスが多数あります。
その中の「ウィンドウをスナップしたときに、その次にスナップする対象を提案する」のチェックを外せばよいです。</p>
<p><img alt="スナップ時の余計な提案を無効化する設定" src="https://imgur.com/7aXfBG7.png" width=500 /></p>
<h2>PowerToys のインストールとPowerToys Keyboard Manager でキーバインド変更</h2>
<p>Windows の便利なユーティリティである PowerToys を導入します。詳細は次のページにあるので割愛します。</p>
<ul>
<li><a href="https://learn.microsoft.com/ja-jp/windows/powertoys/install">PowerToys のインストール | Microsoft Learn</a></li>
</ul>
<p>PowerToys は多くの機能がありますが、私の主な導入のモチベーションは Keyboard Manager によるキーバインド変更です。
あまりヘビーにキーバインドを作りこんでいるわけではありませんが、個人的に以下の置き換えは必須です。</p>
<ul>
<li><code>Alt(Right)</code> → <code>VK243</code> (右Altを全角半角キー)</li>
<li><code>Capslock</code> → <code>Ctrl</code></li>
</ul>
<h2>シンボリックリンクの有効化</h2>
<p>Windows はデフォルトの状態ではシンボリックリンクが利用できないのですが、それでは git リポジトリのクローン時に問題が発生することはもちろん、
細かい環境構築時にもいろいろと不便なことが多いので利用できるようにします。</p>
<p>やり方は Windows の「開発者モード」を有効化するか、ローカルグループポリシーエディターからシンボリックリンク作成の権限を自分が利用するユーザーに付与する方法があります。私は「開発者モード」にすることによって何が起こるかあまり把握していないので、後者の方法でやりたいことに対する権限を最低限つけるようにしています。</p>
<p><img alt="ローカルグループポリシーエディタでシンボリックリンクの作成ポリシーを選択している様子" src="https://imgur.com/d6r64tr.png" width=500 /></p>
<p>ポリシー「シンボリックリンクの作成」に自分のユーザーを追加する際は、<code>PCのホスト名\PCのログインユーザー名</code> で追加すればよいです。</p>
<h2>IMEの設定</h2>
<p>地味な奴ですが、私は常に半角スペースを使いたい人間なのでやっておきます。
Windows キーを押して、「IME」と入力すれば「日本語 IME 設定」という項目が一番上に表示されます。</p>
<p><img alt="Windowsキーを押してから「IME」と入力している様子" src="https://imgur.com/zWfnUDr.png" width=500 /></p>
<p>ここから「全般」をクリックして、「スペース」の内容を「常に半角」にすればOKです</p>
<p><img alt="" src="https://imgur.com/hRuxcXl.gif" width=450 /></p>
<h2>scoop のインストール、CLI環境整備</h2>
<p>業務中のほとんどを基本的にはCLI環境で過ごすので環境を整備します。
個人的に Windows の場合は <a href="https://wezfurlong.org/wezterm/index.html">Wezterm</a> と <a href="https://www.nushell.sh/">nushell</a> の環境を整えたいのでそこを目指します。</p>
<p><img alt="Weztermでnushellを起動した様子" src="https://imgur.com/uRabAgk.png" /></p>
<p>大まかな流れとしては次の通り</p>
<ol>
<li>パッケージマネージャ scoop のインストールとセットアップ</li>
<li>nushell, wezterm を含むツールをインストール</li>
<li>dotfiles を git clone し、必要に応じてシンボリックリンクを張る</li>
<li>neovim のセットアップ</li>
<li>よく使う言語ランタイム(go, python, node)をインストール</li>
</ol>
<h3>1. パッケージマネージャ scoop のインストールとセットアップ</h3>
<p>Windows のパッケージマネージャは他にも <a href="https://chocolatey.org/">chocolaty</a> もありますが、個人的に <a href="https://scoop.sh/">scoop</a> のほうが好みなのでそちらを導入します。<sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup>
nushell 環境が整うまでは powershell で環境整備します。</p>
<p>まずは公式サイトにある手順で導入</p>
<div class="highlight"><pre><span></span><code><span class="nb">Set-ExecutionPolicy</span> <span class="n">RemoteSigned</span> <span class="n">-Scope</span> <span class="n">CurrentUser</span>
<span class="nb">irm </span><span class="n">get</span><span class="p">.</span><span class="n">scoop</span><span class="p">.</span><span class="n">sh</span> <span class="p">|</span> <span class="nb">iex</span>
</code></pre></div>
<p>これで scoop コマンドはインストールされますが、初回に git をインストールしないと基本的な機能が扱えないので入れます</p>
<div class="highlight"><pre><span></span><code><span class="n">scoop</span> <span class="n">install</span> <span class="n">git</span>
</code></pre></div>
<p>git のインストールが終わると scoop が完全に使えるようになるので追加しておくと便利な <a href="https://github.com/ScoopInstaller/Extras">extras</a> と <a href="https://github.com/ScoopInstaller/Versions">versions</a> バケットの追加と必要なツールをインストールします。</p>
<div class="highlight"><pre><span></span><code><span class="n">scoop</span> <span class="n">bucket</span> <span class="n">add</span> <span class="n">extras</span>
<span class="n">scoop</span> <span class="n">bucket</span> <span class="n">add</span> <span class="n">versions</span>
</code></pre></div>
<h3>2. nushell, wezterm を含むツールをインストール</h3>
<p>ここまでくれば scoop の準備は大体できたので、必要なツールのインストールをします</p>
<div class="highlight"><pre><span></span><code><span class="n">scoop</span> <span class="n">install</span> <span class="p">`</span>
<span class="n">vim</span> <span class="p">`</span> <span class="c"># テキストエディタ、システムの設定とかをいじるときに使う</span>
<span class="n">neovim</span> <span class="p">`</span> <span class="c"># メインで使うテキストエディタ</span>
<span class="n">nu</span> <span class="p">`</span> <span class="c"># メインで使う CLI シェル</span>
<span class="n">starship</span> <span class="p">`</span> <span class="c"># CLIシェルのプロンプトをいい感じにするやつ。最近重いのでやめようかなとも思ってるけどいったん追加</span>
<span class="n">wezterm</span> <span class="p">`</span> <span class="c"># メインで使うターミナルエミュレータ</span>
<span class="n">fzf</span> <span class="p">`</span> <span class="c"># CLIの fizzy finder</span>
<span class="n">aws</span> <span class="p">`</span> <span class="c"># aws cli 、これがないと仕事にならない</span>
<span class="n">terraform-switcher</span> <span class="p">`</span> <span class="c"># 複数バージョンの terraform の切り替えができるツール</span>
<span class="n">make</span> <span class="p">`</span> <span class="c"># GNU make、もはやタスクランナー</span>
<span class="n">bat</span> <span class="p">`</span> <span class="c"># リッチな cat コマンド、Windows でも問題なく動くので重宝する</span>
<span class="n">dog</span> <span class="p">`</span> <span class="c"># CLIのDNSクライアント</span>
<span class="n">ripgrep</span> <span class="p">`</span> <span class="c"># 高速 grep</span>
<span class="n">sd</span> <span class="p">`</span> <span class="c"># sed コマンドの rust 実装版</span>
<span class="n">difftastic</span> <span class="p">`</span> <span class="c"># CLI diff ツール、Windows でも問題なく動く diff コマンドとして重宝する</span>
<span class="n">sudo</span> <span class="p">`</span> <span class="c"># 管理者権限であれこれやりたいときに便利</span>
<span class="n">gh</span> <span class="p">`</span> <span class="c"># GitHub CLI</span>
<span class="n">ghq</span> <span class="p">`</span> <span class="c"># git repository をいい感じに clone してくれる君</span>
<span class="n">jq</span> <span class="p">`</span> <span class="c"># json パーサー</span>
<span class="n">jasper</span> <span class="p">`</span> <span class="c"># GitHub Issue クライアント、GUI</span>
<span class="n">ScreenToGif</span> <span class="p">`</span> <span class="c"># GifCapture ツール。あるとドキュメント作るときに結構便利</span>
<span class="n">sass</span> <span class="p">`</span> <span class="c"># marp のテーマをいじるときに地味に使う</span>
<span class="n">keypirinha</span> <span class="p">`</span> <span class="c"># Windows のランチャーツール、正直 PowerToys Run とどっちをメインにするかちょっと悩んでる</span>
<span class="n">heidisql</span> <span class="p">`</span> <span class="c"># 軽量な MySQL クライアント、Cleartext Plugin にも対応(GUI)</span>
<span class="n">obsidian</span> <span class="c"># ローカルで使う用の強力なメモツール (GUI)</span>
</code></pre></div>
<h3>3. dotfiles を git clone し、必要に応じてシンボリックリンクを張る</h3>
<p>私は自分の dotfiles は GitHub で公開しているので clone してきます。(なので、ここは完全に私個人用のメモです)</p>
<div class="highlight"><pre><span></span><code><span class="n">ghq</span> <span class="n">get</span> <span class="n">laughk</span><span class="p">/</span><span class="n">dotfiles</span>
</code></pre></div>
<p>clone できたら最低限必要なシンボリックリンクを張ります</p>
<div class="highlight"><pre><span></span><code><span class="nb">cd </span><span class="p">~/</span><span class="n">AppData</span><span class="p">/</span><span class="n">Roaming</span>
<span class="nb">New-Item</span> <span class="n">-type</span> <span class="n">Symlink</span> <span class="n">-Target</span> <span class="p">..\..\</span><span class="n">ghq</span><span class="p">\</span><span class="n">github</span><span class="p">.</span><span class="n">com</span><span class="p">\</span><span class="n">laughk</span><span class="p">\</span><span class="n">dotfiles</span><span class="p">\</span><span class="n">nushell</span> <span class="n">nushell</span>
<span class="nb">cd </span><span class="p">~/</span><span class="n">AppData</span><span class="p">/</span><span class="n">Local</span>
<span class="nb">New-Item</span> <span class="n">-type</span> <span class="n">Symlink</span> <span class="n">-Target</span> <span class="p">..\..\</span><span class="n">ghq</span><span class="p">\</span><span class="n">github</span><span class="p">.</span><span class="n">com</span><span class="p">\</span><span class="n">laughk</span><span class="p">\</span><span class="n">dotfiles</span><span class="p">\</span><span class="n">nvim</span> <span class="n">nvim</span>
<span class="nb">cd </span><span class="p">~</span>
<span class="nb">New-Item</span> <span class="n">-type</span> <span class="n">Symlink</span> <span class="n">-Target</span> <span class="n">ghg</span><span class="p">\</span><span class="n">github</span><span class="p">.</span><span class="n">com</span><span class="p">\</span><span class="n">laughk</span><span class="p">\</span><span class="n">dotfiles</span><span class="p">\</span><span class="n">wezterm</span><span class="p">\</span><span class="n">wezterm</span><span class="p">.</span><span class="n">windows</span><span class="p">.</span><span class="n">lua</span> <span class="p">.</span><span class="n">wezterm</span><span class="p">.</span><span class="n">lua</span>
</code></pre></div>
<h3>4. Neovim のセットアップ</h3>
<p>実は scoop で neovim を install しただけではエラーが出て起動しません。 <sup id="fnref:3"><a class="footnote-ref" href="#fn:3">3</a></sup><br>
キャプチャ等を取り損ねてしまったのですが、<a href="https://github.com/neovim/neovim/wiki/Installing-Neovim#pre-built-archives">公式のWiki</a>にも記載があり、Visual Studio 2015 C++ redistributable が必要です。</p>
<p>これは Wiki に従い次のページから最新のインストーラーをダウンロードしてインストールすればOKです。
今回の VAIO SX14 では x64 で問題なく使えました。</p>
<ul>
<li><a href="https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170">Latest supported Visual C++ Redistributable downloads | Microsoft Learn</a></li>
</ul>
<p><img alt="vcruntimeインストーラーの配布場所" src="https://imgur.com/dVHY9Hk.png" width=500 /></p>
<p>Visual Studio 2015 C++ redistributable がインストール出来たら neovim が使えます。
私はプラグインを多数利用しているので、インストールをしておきます( lazy.nvim, nvim-treesitter を使っている前提)</p>
<div class="highlight"><pre><span></span><code><span class="p">:</span>Lazy install
</code></pre></div>
<p>また、nushell のスクリプトや設定編集を支援するツール( LhKipp/nvim-nu )も nvim-treesitter 経由でインストールしておきます</p>
<div class="highlight"><pre><span></span><code><span class="p">:</span>TSInstall <span class="k">nu</span>
</code></pre></div>
<p>これで neovim のセットアップは完了です</p>
<h3>5. よく使う言語ランタイム(go, python, node)をインストール</h3>
<p>個人的に go や python でコードを書く機会は多く、node製のツールのお世話になることが多いので入れておきます。
nodeに関してはツールの利用が主な目的なので lts を入れます。また、Python は個人的に得意なことに加え、社内に多く存在する AWS lambda の function のほとんどが Python であることから複数バージョン入れておきます。</p>
<div class="highlight"><pre><span></span><code><span class="n">scoop</span> <span class="n">install</span> <span class="p">`</span>
<span class="n">go</span> <span class="p">`</span>
<span class="n">python</span> <span class="n">python311</span> <span class="n">python310</span> <span class="n">python39</span> <span class="p">`</span>
<span class="n">nodejs-lts</span>
</code></pre></div>
<p>Python は Windows の場合、 <code>py</code> コマンドというインストールされている Python のランタイムバージョンを指定して利用できる便利なコマンドがありますが、
scoop 経由でPythonを複数バージョン入れる場合はインストール時に表示されるメッセージに従い、次の reg ファイルを使ったレジストリ変更が必要です。忘れずにやります。</p>
<div class="highlight"><pre><span></span><code><span class="n">powershell</span> <span class="n">-C</span> <span class="s1">'C:\Users\laughk\scoop\apps\python39\current\install-pep-514.reg'</span>
<span class="n">powershell</span> <span class="n">-C</span> <span class="s1">'C:\Users\laughk\scoop\apps\python310\current\install-pep-514.reg'</span>
<span class="n">powershell</span> <span class="n">-C</span> <span class="s1">'C:\Users\laughk\scoop\apps\python311\current\install-pep-514.reg'</span>
<span class="n">powershell</span> <span class="n">-C</span> <span class="s1">'C:\Users\laughk\scoop\apps\python\current\install-pep-514.reg'</span>
</code></pre></div>
<p>これで <code>py</code> コマンドからそれぞれのバージョンを扱えるようになります</p>
<div class="highlight"><pre><span></span><code><span class="go">❯ py --list</span>
<span class="go"> -V:3.12 * Python 3.12 (64-bit)</span>
<span class="go"> -V:3.11 Python 3.11 (64-bit)</span>
<span class="go"> -V:3.10 Python 3.10 (64Label)</span>
<span class="go"> -V:3.9 Python 3.9 (64Label)</span>
</code></pre></div>
<hr>
<p>ここまでで最低限の CLI 環境が整いました</p>
<h2>WSLの引っ越し</h2>
<p>WSLはイメージの export/import ができます。基本的には次の記事を参考に次の流れで旧PCの環境をそのまま引っ越しできました。 <sup id="fnref:4"><a class="footnote-ref" href="#fn:4">4</a></sup></p>
<div class="highlight"><pre><span></span><code><span class="n">export</span> <span class="o">-></span> <span class="n">外付けHDDへ移動</span> <span class="err">→</span> <span class="n">外付けHDDから新PCへコピー</span> <span class="err">→</span> <span class="kn">import</span>
</code></pre></div>
<ul>
<li><a href="https://qiita.com/koji_hattori/items/1480d25aca8cdf5ac4a1">【備忘録】WSL2でのimport, exportとログイン設定 #Windows10 - Qiita</a></li>
</ul>
<h3>移行元</h3>
<div class="highlight"><pre><span></span><code><span class="n">wsl</span> <span class="p">-</span><span class="n">-export</span> <span class="n">Arch2</span> <span class="p">.\</span><span class="n">wsl_archlinux_image</span><span class="p">.</span><span class="n">tar</span>
</code></pre></div>
<h3>移行先</h3>
<div class="highlight"><pre><span></span><code><span class="n">mkdir</span> <span class="p">~\</span><span class="n">wsl</span><span class="p">\</span><span class="n">data</span> <span class="p">~\</span><span class="n">wsl</span><span class="p">\</span><span class="n">images</span>
<span class="nb">mv </span><span class="n">wsl_archlinux_image</span><span class="p">.</span><span class="n">tar</span> <span class="p">~\</span><span class="n">wsl</span><span class="p">\</span><span class="n">data</span><span class="p">\</span>
<span class="nb">cd </span><span class="n">wsl</span>
<span class="n">wsl</span> <span class="p">-</span><span class="n">-import</span> <span class="n">ArchLinux</span> <span class="n">images</span><span class="p">\</span><span class="n">archlinux</span> <span class="p">.\</span><span class="n">data</span><span class="p">\</span><span class="n">wsl_archlinux_image</span><span class="p">.</span><span class="n">tar</span> <span class="p">-</span><span class="n">-version</span> <span class="n">2</span>
<span class="nb">rm </span><span class="n">data</span><span class="p">\</span><span class="n">wsl_archlinux_image</span><span class="p">.</span><span class="n">tar</span>
</code></pre></div>
<h2>コンテナ環境: Podman</h2>
<p><img alt="podmanのページ" src="https://imgur.com/FZUCYES.png" /></p>
<p>業務ではECSを中心にコンテナはバリバリ使うので環境構築は必須です。
コネヒトは2023年12時点の組織状況では Docker Desktop を利用する際に特にライセンス料などは発生しませんが、Docker 以外のコンテナランタイムも興味があるので
今回は podman で環境を整えてみました。</p>
<h3>インストール</h3>
<p>Windows でも導入は簡単で、次のリリースページから Windows 向けのインストーラーをダウンロードしてインストールすればOKです</p>
<ul>
<li><a href="https://github.com/containers/podman/releases">Releases · containers/podman</a></li>
</ul>
<p>Podman の GitHub リポジトリには Windows 向けのドキュメントもあり、基本的な使い方はここを見れば大体わかります</p>
<ul>
<li><a href="https://github.com/containers/podman/blob/4ec76eca3557862f71ac3aabc5fa3d119ceb39c8/docs/tutorials/podman-for-windows.md">podman/docs/tutorials/podman-for-windows.md at main · containers/podman</a></li>
</ul>
<p>また、Windows 環境で podman のインストールをすると自動的に WSL の Linux 環境の PATH にも podman コマンドが追加されて利用もできそうなことが確認できました。
おそらく Docker Desktop の WSL Intergration を有効にした状態と一緒なんだろうと理解しています。</p>
<p>ちなみに、<a href="https://podman-desktop.io/">podman desktop</a> というアプリケーションもありますが、これだけを入れても podman は使えないです。 Docker Desktop と違い、純粋に podman(およびその他コンテナランタイム)の GUI 画面のみを提供しているものと見たほうがよさそうです。</p>
<h3>イメージを pull する際の挙動を docker にそろえる</h3>
<p>業務で扱う環境は基本的に Docker の利用が前提となっているので、イメージの検索対象となるレジストリに <code>docker.io</code> を追加します。
<code>~\.config\contaners\registories.conf</code> ( Windows でも <code>~/.config</code> 配下であっています) に次の内容を追記すればよいです。</p>
<div class="highlight"><pre><span></span><code><span class="n">unqualified-search-registries</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s">"docker.io"</span><span class="p">]</span><span class="w"></span>
</code></pre></div>
<p>もっとも、短縮名を使うことにはリスクもあるという情報もあるので、状況をみつつこの辺の設定は見直していけたらと感じています。</p>
<p>参考:</p>
<ul>
<li><a href="https://www.redhat.com/sysadmin/container-image-short-names">Container image short names in Podman | Enable Sysadmin</a></li>
</ul>
<h3>podman-compose のインストール</h3>
<p><code>docker compose</code> を使う機会もあるので同等のコマンドを使えるようにします。
幸い、 <a href="https://github.com/containers/podman-compose">containers/podman-compose</a> というツールがあったのでありがたく導入します。</p>
<p>Python 製で pip 経由のインストールが必要なので、 <a href="https://pipx.pypa.io/stable/">pipx</a> を使って導入します。
pipx は Python 製のツールを純粋に使うためだけの目的に導入する際に便利なもので、ツールごとに隔離した環境を作ってインストールを行い、PATH はシンボリックリンクなどでいい感じに整えてくれるものです。</p>
<p>インストールしていなかったので pipx の導入から始めます。
私は「純粋にCLIのツールとして使うだけなのであればpipxはシステムワイドに入れてしまっても構わない」と考えているので専用の venv などは用意せずそのまま入れます。 <sup id="fnref:5"><a class="footnote-ref" href="#fn:5">5</a></sup></p>
<div class="highlight"><pre><span></span><code><span class="n">py</span> <span class="p">-</span><span class="n">3</span><span class="p">.</span><span class="n">12</span> <span class="n">-m</span> <span class="n">pip</span> <span class="n">install</span> <span class="n">pipx</span>
<span class="n">py</span> <span class="p">-</span><span class="n">3</span><span class="p">.</span><span class="n">12</span> <span class="n">-m</span> <span class="n">pipx</span> <span class="n">ensurepath</span>
</code></pre></div>
<p>pipx が導入できたら pipx 経由で podman-compose を導入します。</p>
<div class="highlight"><pre><span></span><code><span class="n">pipx</span> <span class="n">install</span> <span class="n">podman-compose</span>
</code></pre></div>
<p>これで <code>podman-compose</code> <code>podman compose</code> コマンドが利用できるようになり、 <code>docker-compose.yml</code> なども活用できるようになりました。</p>
<h2>フォントまわり</h2>
<p><img alt="UDEV Gothicがインストールされている様子" src="https://imgur.com/bLKRHaM.png" width=500 /></p>
<p>PCで文字の読み書きが長くなるならフォントは見やすいものを選びたいと個人的に思っています。
私は最近は以下のフォントが気に入っているので今回インストールをしています</p>
<ul>
<li><a href="https://github.com/yuru7/udev-gothic">yuru7/udev-gothic: UDEV Gothic は、ユニバーサルデザインフォントのBIZ UDゴシックと、 開発者向けフォントの JetBrains Mono を合成した、プログラミング向けフォントです。</a></li>
<li><a href="https://github.com/yuru7/BIZTER">yuru7/BIZTER: BIZTER は、UI 向けフォント Inter と、ユニバーサルデザインフォントの BIZ UDPゴシックの合成フォントです。</a></li>
</ul>
<h2>SSH越しに旧PCから細かいファイルの転送</h2>
<p>旧PC環境には多くのファイルがあり、必ずしもすべてを移行する必要はないのですが
それでもどうしても移行が必要なこまごまとしたファイルはそれなりにあります。</p>
<p>それらの移行には会社の Google Drive を経由するのが正攻法ですが、物によっては Google Drive へのアップロードからのダウンロードが億劫な場合もあります。
そこで一部のファイルに関しては片方のPCで OpenSSH サーバを立てて scp で移行をしました。</p>
<p>OpenSSH は今は Windows でも標準で入っているので、やり方さえ分かっていれば案外簡単に使えます。</p>
<h3>サーバにする方</h3>
<p>有効になっているか確認します。次のコマンドを実行します(以下、要PowerShell)</p>
<div class="highlight"><pre><span></span><code><span class="n">sudo</span> <span class="n">powershell</span> <span class="n">-C</span> <span class="s2">"Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'"</span>
</code></pre></div>
<p>すると以下のような結果になります</p>
<div class="highlight"><pre><span></span><code><span class="n">Name</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">OpenSSH</span><span class="o">.</span><span class="na">Client</span><span class="o">~~~~</span><span class="mf">0.0</span><span class="o">.</span><span class="mf">1.0</span><span class="w"></span>
<span class="n">State</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">Installed</span><span class="w"></span>
<span class="n">Name</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">OpenSSH</span><span class="o">.</span><span class="na">Server</span><span class="o">~~~~</span><span class="mf">0.0</span><span class="o">.</span><span class="mf">1.0</span><span class="w"></span>
<span class="n">State</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">NotPresent</span><span class="w"></span>
</code></pre></div>
<p>OpenSSH.Server の State が NotPresent の場合は有効化されていないので、次のコマンドで有効化します</p>
<div class="highlight"><pre><span></span><code><span class="n">sudo</span> <span class="nb">Add-WindowsCapability</span> <span class="n">-Online</span> <span class="n">-Name</span> <span class="n">OpenSSH</span><span class="p">.</span><span class="n">Server</span><span class="p">~~~~</span><span class="n">0</span><span class="p">.</span><span class="n">0</span><span class="p">.</span><span class="n">1</span><span class="p">.</span><span class="n">0</span>
</code></pre></div>
<p>有効化されていることが確認できたら次のコマンドでSSHサーバを起動します</p>
<div class="highlight"><pre><span></span><code><span class="n">sudo</span> <span class="nb">Start-Service</span> <span class="n">sshd</span>
</code></pre></div>
<p>ファイルの転送が終わったらサービスを止めておくのが安全です</p>
<div class="highlight"><pre><span></span><code><span class="n">sudo</span> <span class="nb">Stop-Service</span> <span class="n">sshd</span>
</code></pre></div>
<h3>クライアント側</h3>
<p>クライアント側ではターミナルで ssh, scp コマンドが利用できます。
最初に ssh コマンドでお試しでログインしてみるとよいです。サーバ側のログイン情報でログイン可能です。</p>
<div class="highlight"><pre><span></span><code><span class="n">ssh</span> <span class="n">192</span><span class="p">.</span><span class="n">0</span><span class="p">.</span><span class="n">2</span><span class="p">.</span><span class="n">100</span> <span class="c"># IPアドレスは事前にサーバー側のものを確認しておく</span>
</code></pre></div>
<p>ログインができることを確認したら、必要なファイルを scp で持ってこれます。この時、リモートのPATHの指定でホームディレクトリを表す <code>~</code> が使えない点に注意してください。</p>
<div class="highlight"><pre><span></span><code><span class="n">scp</span> <span class="n">192</span><span class="p">.</span><span class="n">0</span><span class="p">.</span><span class="n">2</span><span class="p">.</span><span class="n">100</span><span class="p">:</span><span class="n">C</span><span class="p">:/</span><span class="n">Users</span><span class="p">/</span><span class="n">laughk</span><span class="p">/</span><span class="n">path</span><span class="p">/</span><span class="n">to</span><span class="p">/</span><span class="n">file</span> <span class="p">.</span>
</code></pre></div>
<h1>さいごに</h1>
<p>ここまでで直近でやった Windows 環境の0からの構築内容を簡単にまとめました。 </p>
<p>やっぱり新しい PC は触っているとワクワクしますし、0から環境を見直す機会になりリフレッシュできる部分もあると個人的には思っていて結構好きです。</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p>今回のPC購入まであまり最近のCPU事情を追っていなかったのですが、2023年12月時点では問答無用でRyzenがよいという状況ではなさそうな話を見かけたことも大きいです <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:2">
<p>winget は標準で利用は可能ですが、管理者権限が必要になったりCLIツールが scoop ほど充実していないのでCLIや開発系環境の整備では使いません。 <a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:3">
<p>https://github.com/neovim/neovim/wiki/Installing-Neovim#pre-built-archives <a class="footnote-backref" href="#fnref:3" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
<li id="fn:4">
<p>外付けHDDは会社の情シスから貸してもらったもので、私物は当然使っておりません <a class="footnote-backref" href="#fnref:4" title="Jump back to footnote 4 in the text">↩</a></p>
</li>
<li id="fn:5">
<p>システムワイドに導入するのは避けたい。という場合は <code>--user</code> オプションをつけて <code>~/.local</code> or <code>~\AppData\Roaming</code> 配下にインストールされるようにするのもアリです <a class="footnote-backref" href="#fnref:5" title="Jump back to footnote 5 in the text">↩</a></p>
</li>
</ol>
</div>このブログのAdsense広告を外した2023-07-31T00:00:00+09:002023-07-31T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2023-07-31:/articles/2023-07-31-removed-the-adsense-ads-from-this-blog/<p>タイトルが全てだけど、長らくこのブログに掲載していたAdsense広告を外した。</p>
<p>タイトルが全てだけど、長らくこのブログに掲載していたAdsense広告を外した。</p>
<p>このブログは特に収益目当てでやっている活動ではない。実際稼げているわけでもなく、<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup>むしろここ数年は不快な広告が自分のサイトに出てしまうという状況のほうが問題だなと感じていたのと、
直接影響を受けるわけでもないのだけど改正電気通信事業法の施行の話もあったのでいい機会だと思って外した。(Google Analyticsの利用とかはもうちょいちゃんと書いたほうがいいんだろうなと思いつつ)</p>
<p>ちなみに、現状 DISQUS のコメントはまだ生かしてはいるけど、このブログをFediverse対応させるとかおもしろそうなのでそのへんの目処が立ったら外すかもしれない。</p>
<!-- 続き -->
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p>10年位でようやく1万円とかだったので、まあドメイン代を賄えるくらいではあります) <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>Mistel Barocco md600 alpha を買った2023-07-10T00:00:00+09:002023-07-10T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2023-07-10:/articles/2023-07-10-mng-mistel-barocco-md600-alpha/<p>先々週くらいにふと思い立って <a href="https://archisite.co.jp/products/mistel/barocco-md600-alpha-bt-rgb/">Mistel Barocco md600 alpha</a> というキーボードを購入してメインで使っている。これがかなりいい感じ。</p>
<blockquote class="text-post-media" data-text-post-permalink="https://www.threads.net/t/CuemjIdyNE7" data-text-post-version="0" id="ig-tp-CuemjIdyNE7" style=" background:#FFF; border-width: 1px; border-style: solid; border-color: #00000026; border-radius: 16px; max-width:540px; margin: 1px; min-width:270px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"> <a href="https://www.threads.net/t/CuemjIdyNE7" style=" background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%; font-family: -apple-system, BlinkMacSystemFont, sans-serif;" target="_blank"> <div style=" padding: 40px; display: flex; flex-direction: column; align-items: center;"><div style=" display:block; height:32px; width:32px; padding-bottom:20px;"> <svg aria-label="Threads" height="32px" role="img" viewbox="0 0 192 192" width="32px" xmlns="http://www.w3.org/2000/svg"> <path d="M141.537 88.9883C140.71 88.5919 139.87 88.2104 139.019 87.8451C137.537 60.5382 122.616 44.905 97.5619 44.745C97.4484 44.7443 97.3355 44.7443 97.222 44.7443C82.2364 44.7443 69.7731 51.1409 62.102 62.7807L75.881 72.2328C81.6116 63.5383 90.6052 61.6848 97.2286 61.6848C97.3051 61.6848 97.3819 61.6848 97.4576 61.6855C105.707 61.7381 111.932 64.1366 115.961 68.814C118.893 72.2193 120.854 76.925 121.825 82.8638C114.511 81.6207 106.601 81.2385 98.145 81.7233C74.3247 83.0954 59.0111 96.9879 60.0396 116.292C60.5615 126.084 65.4397 134.508 73.775 140.011C80.8224 144.663 89.899 146.938 99.3323 146.423C111.79 145.74 121.563 140.987 128.381 132.296C133.559 125.696 136.834 117.143 138.28 106.366C144.217 109.949 148.617 114.664 151.047 120.332C155.179 129.967 155.42 145.8 142.501 158.708C131.182 170.016 117.576 174.908 97.0135 175.059C74.2042 174.89 56.9538 167.575 45.7381 153.317C35.2355 139.966 29.8077 120.682 29.6052 96C29.8077 71.3178 35.2355 52.0336 45.7381 38.6827C56.9538 24.4249 74.2039 17.11 97.0132 16.9405C119.988 17.1113 137.539 24.4614 149.184 38.788C154.894 45.8136 159.199 54.6488 162.037 64.9503L178.184 60.6422C174.744 47.9622 169.331 37.0357 161.965 27.974C147.036 9.60668 125.202 0.195148 97.0695 0H96.9569C68.8816 0.19447 47.2921 9.6418 32.7883 28.0793C19.8819 44.4864 13.2244 67.3157 13.0007 95.9325L13 96L13.0007 96.0675C13.2244 124.684 19.8819 147.514 32.7883 163.921C47.2921 182.358 68.8816 191.806 96.9569 192H97.0695C122.03 191.827 139.624 185.292 154.118 170.811C173.081 151.866 172.51 128.119 166.26 113.541C161.776 103.087 153.227 94.5962 141.537 88.9883ZM98.4405 129.507C88.0005 130.095 77.1544 125.409 76.6196 115.372C76.2232 107.93 81.9158 99.626 99.0812 98.6368C101.047 98.5234 102.976 98.468 104.871 98.468C111.106 98.468 116.939 99.0737 122.242 100.233C120.264 124.935 108.662 128.946 98.4405 129.507Z"></path></svg></div> <div style=" font-size: 15px; line-height: 21px; color: #999999; font-weight: 400; padding-bottom: 4px; "> Post by @laughk_jp</div> <div style=" font-size: 15px; line-height: 21px; color: #000000; font-weight: 600; "> View on Threads</div></div></a></blockquote>
<script async="" src="https://www.threads.net/embed.js"></script>
<p>(せっかくなので Threads の埋め込みも試している)</p>
<p>先々週くらいにふと思い立って <a href="https://archisite.co.jp/products/mistel/barocco-md600-alpha-bt-rgb/">Mistel Barocco md600 alpha</a> というキーボードを購入してメインで使っている。これがかなりいい感じ。</p>
<blockquote class="text-post-media" data-text-post-permalink="https://www.threads.net/t/CuemjIdyNE7" data-text-post-version="0" id="ig-tp-CuemjIdyNE7" style=" background:#FFF; border-width: 1px; border-style: solid; border-color: #00000026; border-radius: 16px; max-width:540px; margin: 1px; min-width:270px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"> <a href="https://www.threads.net/t/CuemjIdyNE7" style=" background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%; font-family: -apple-system, BlinkMacSystemFont, sans-serif;" target="_blank"> <div style=" padding: 40px; display: flex; flex-direction: column; align-items: center;"><div style=" display:block; height:32px; width:32px; padding-bottom:20px;"> <svg aria-label="Threads" height="32px" role="img" viewBox="0 0 192 192" width="32px" xmlns="http://www.w3.org/2000/svg"> <path d="M141.537 88.9883C140.71 88.5919 139.87 88.2104 139.019 87.8451C137.537 60.5382 122.616 44.905 97.5619 44.745C97.4484 44.7443 97.3355 44.7443 97.222 44.7443C82.2364 44.7443 69.7731 51.1409 62.102 62.7807L75.881 72.2328C81.6116 63.5383 90.6052 61.6848 97.2286 61.6848C97.3051 61.6848 97.3819 61.6848 97.4576 61.6855C105.707 61.7381 111.932 64.1366 115.961 68.814C118.893 72.2193 120.854 76.925 121.825 82.8638C114.511 81.6207 106.601 81.2385 98.145 81.7233C74.3247 83.0954 59.0111 96.9879 60.0396 116.292C60.5615 126.084 65.4397 134.508 73.775 140.011C80.8224 144.663 89.899 146.938 99.3323 146.423C111.79 145.74 121.563 140.987 128.381 132.296C133.559 125.696 136.834 117.143 138.28 106.366C144.217 109.949 148.617 114.664 151.047 120.332C155.179 129.967 155.42 145.8 142.501 158.708C131.182 170.016 117.576 174.908 97.0135 175.059C74.2042 174.89 56.9538 167.575 45.7381 153.317C35.2355 139.966 29.8077 120.682 29.6052 96C29.8077 71.3178 35.2355 52.0336 45.7381 38.6827C56.9538 24.4249 74.2039 17.11 97.0132 16.9405C119.988 17.1113 137.539 24.4614 149.184 38.788C154.894 45.8136 159.199 54.6488 162.037 64.9503L178.184 60.6422C174.744 47.9622 169.331 37.0357 161.965 27.974C147.036 9.60668 125.202 0.195148 97.0695 0H96.9569C68.8816 0.19447 47.2921 9.6418 32.7883 28.0793C19.8819 44.4864 13.2244 67.3157 13.0007 95.9325L13 96L13.0007 96.0675C13.2244 124.684 19.8819 147.514 32.7883 163.921C47.2921 182.358 68.8816 191.806 96.9569 192H97.0695C122.03 191.827 139.624 185.292 154.118 170.811C173.081 151.866 172.51 128.119 166.26 113.541C161.776 103.087 153.227 94.5962 141.537 88.9883ZM98.4405 129.507C88.0005 130.095 77.1544 125.409 76.6196 115.372C76.2232 107.93 81.9158 99.626 99.0812 98.6368C101.047 98.5234 102.976 98.468 104.871 98.468C111.106 98.468 116.939 99.0737 122.242 100.233C120.264 124.935 108.662 128.946 98.4405 129.507Z" /></svg></div> <div style=" font-size: 15px; line-height: 21px; color: #999999; font-weight: 400; padding-bottom: 4px; "> Post by @laughk_jp</div> <div style=" font-size: 15px; line-height: 21px; color: #000000; font-weight: 600; "> View on Threads</div></div></a></blockquote>
<script async src="https://www.threads.net/embed.js"></script>
<p>(せっかくなので Threads の埋め込みも試している)</p>
<h1>購入背景</h1>
<p>過去にErgodoxや<a href="https://falba.tech/product/dsa-keycaps-printed-left-right-keyboards-redox-2/">Redox</a>, <a href="https://shop.yushakobo.jp/products/ergodash/">Erogodash</a> などを使ってきていて分割キーボードの良さはわかってはいたものの、自作系キーボードがどうしても2年、長くても3年は持たずに何かしらの故障をして使えなくなってしまい、自作系ではないもので何かいいものはないかとずっと探していた。</p>
<p>最後の Ergodash が故障してからしばらくは <a href="https://happyhackingkb.com/jp/products/hybrid_types/">HHKB Hybrid Type-S</a> を使っていたのだけど、やっぱり分割が恋しいなと思い始めてちょくちょく調べていたところ Barocco md600 alpha にたどり着いた感じ。</p>
<p>実は Barroco md600 alpha 以外にも以前 <a href="https://shop.yushakobo.jp/products/choco60-rev-2">Choco60</a> や <a href="https://shop.yushakobo.jp/products/5637">lulu</a> なんかも購入してはいたのだけど、いずれもキー配列にどうしてもなじめずに結局売却してしまったり使わなくなってしまったりしている。</p>
<ul>
<li>Choco60 は HHKB とほぼ配列が同様で行けるかと思ったが、分割した際に「6」が右側にある関係で右手を大きく動かす必要があり、負担が大きく触るのが無理になってしまった。</li>
<li>lulu はキー配置と自分の手になじむキーバインド設計がうまく見つからないだけでなく、キーバインド変更に必要なツールが気が付いたら変わってしまうなど、いじるのが億劫になることが多く使わなくなった。</li>
</ul>
<h2>Barocco md600 alpha</h2>
<p>個人的に Barocco md600 alpha がいいなと思えたのは、主に以下の点</p>
<ul>
<li>企業の既製品で組み立て不要、すぐ壊れることもおそらくはないし保障もある程度あるだろうという安心感</li>
<li>分割した際に「6」の位置が左側にある</li>
<li>キーバインドのカスタマイズが可能</li>
<li>キーキャップなどの一式がそろった状態での価格の(自作系と比較しての)安さ</li>
</ul>
<p>実際購入してみて、今のところこの辺の期待には大いに応えてくれていると感じる。ちなみに買ったのは銀軸と迷ったが赤軸にした。</p>
<h1>使ってみて所感</h1>
<p>2週間ほど使ってみている感じでは満足度が非常に高く、本当に買ってよかったと感じる。</p>
<p><img alt="Mistel Barocco md600 Alpha" src="https://imgur.com/xvKgW5l.png"></p>
<p>最初はAlice配列と言う「キーが斜めに設置されている配列」に結構違和感があり、タッチタイプできるまで誤爆が酷かったがキーの位置を目視で確認しつつしばらく色々タイピングしているうちに大体慣れて今では大分スムーズにタイプできるようになっている。</p>
<p>デフォルトのキー配列はアルファベット、数字、記号などは基本的なUS配列という感じ。ただ右「Fn」の位置、そして一部「Fn」と組み合わせて使う「←」「↓」「↑」「→」のようなキーのポジションや「`」が「Fn + Esc」になってしまっているなどそこそこ癖もある。このあたりはどうしても受け付けなかったのだけどすべてカスタマイズでイイ感じにできた。</p>
<p>ちなみにキーのカスタマイズは大体以下のような感じで、キーボード単体で完結する。</p>
<ul>
<li>「Fn」+「Ctrl」 で編集モードになる</li>
<li>編集モード中にバインドを変えたいキーをタイプ</li>
<li>この状態で割り当てたい動作をタイプ</li>
<li>「Fn」+「Tab」でセーブ</li>
<li>もう一度「Fn」+「Ctrl」で編集モード終了</li>
</ul>
<p>最初にこれを説明書で見た時はかなり複雑で面倒そうだなと感じたが、キーボードのランプとキーの光り方がいい感じになるので実際はそれほどでもない。むしろ一度やり方を覚えてしまうと「ちょっとここの配置直したいな」と思い立った瞬間にシュッと編集できるのでめちゃめちゃ体験がよい。キーバインド変更に特別なツールを起動したり設定を編集してコマンドをたたく必要がないというのが予想外に体験が良すぎてもう他のキーボードに行けないくらいになってきている。</p>
<p>US配列に抵抗がなく、分割キーボードを検討している人には個人的にめっちゃおススメできると感じる。</p>
<h2>リンク</h2>
<iframe sandbox="allow-popups allow-scripts allow-modals allow-forms allow-same-origin" style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B0C7C1Z6M7&linkId=9da570555e41750475d48b025bffd9fe"></iframe>
<p><a href="https://amzn.to/3XGQuo3">Amazon | Mistel Barocco MD600 Alpha BT RGB 左右分離型 有線/Bluetooth 5.0 ワイヤレス 両対応 英語 US配列 Gateron G PRO 赤軸 メカニカルキーボード | ミステル(Mistel) | パソコン用キーボード 通販</a></p>lazy.nvim と相性が悪かったので colorscheme を nordtheme/vim から shaunsingh/nord.nvim に変更した2023-05-05T00:00:00+09:002023-05-05T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2023-05-05:/articles/2023-05-05-change-colorscheme-of-neovim-to-shaunsingh-nordnvim/<p>タイトル通りなのだけど、先日 neovim のプラグインマネージャーを packer.nvim から <a href="https://github.com/folke/lazy.nvim">lazy.nvim</a> に移行した際、lazy.nvim のウィンドウが色合いがおかしくなり、実用に耐えない状況だった。原因を色々調べてみたところ利用している colorscheme との相性の可能性が高く、 <a href="https://github.com/nordtheme/vim">nordtheme/vim</a>(旧: arcticicestudio/nord-vim ) から <a href="https://github.com/shaunsingh/nord.nvim">shaunsingh/nord.nvim</a> に変更したところ諸々解消したというお話</p>
<p>タイトル通りなのだけど、先日 neovim のプラグインマネージャーを packer.nvim から <a href="https://github.com/folke/lazy.nvim">lazy.nvim</a> に移行した際、lazy.nvim のウィンドウが色合いがおかしくなり、実用に耐えない状況だった。原因を色々調べてみたところ利用している colorscheme との相性の可能性が高く、 <a href="https://github.com/nordtheme/vim">nordtheme/vim</a>(旧: arcticicestudio/nord-vim ) から <a href="https://github.com/shaunsingh/nord.nvim">shaunsingh/nord.nvim</a> に変更したところ諸々解消したというお話</p>
<h1>変更前</h1>
<p><img alt="nordtheme/vim を使った場合" src="https://imgur.com/aCRyTJJ.png"></p>
<ul>
<li>background がピンクっぽくなっていて、一応読める内容もあるがヘッダーの選択していない場所の文字は全く読むことが出来ず正直どうにかしたい</li>
</ul>
<h1>対応</h1>
<h2>原因調査</h2>
<p>色々試していくうちに lazy.nvim で以下のように colorschem を neovim 標準で入っている <code>habamax</code> にすると時折きれいな色になることに気づいた。</p>
<div class="highlight"><pre><span></span><code><span class="nb">require</span><span class="p">(</span><span class="s2">"lazy"</span><span class="p">).</span><span class="n">setup</span><span class="p">(</span>
<span class="n">plugins</span><span class="p">,</span>
<span class="p">{</span> <span class="n">install</span> <span class="o">=</span> <span class="p">{</span> <span class="n">colorscheme</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"habamax"</span> <span class="p">}</span> <span class="p">}</span> <span class="p">},</span>
<span class="p">)</span>
</code></pre></div>
<p>また、 lazy.nvim で似たような症状が報告されている Issue も発見</p>
<ul>
<li><a href="https://github.com/folke/lazy.nvim/issues/565">bug: Lazy window colors look weird (does not use colorscheme) · Issue #565 · folke/lazy.nvim</a></li>
</ul>
<p>この件は vim-solarized が lazy 向けのハイライトを提供していないことが原因で lazy.nvim 側のバグなどではないという感じに読み取れた。</p>
<p>ここまで調べた感じでおそらく nordtheme/vim に関しても似たようなことが言えそうだとあたりがつく。ただ、これ以上は深追いするよりはテーマをいっそ変えたほうが状況は早く解消しそうだと考えたので colorscheme を漁ってみることにした。</p>
<p>選定において、今のところ僕は nord 系の colorscheme が気に入っているので引き続き nord 系の neovim 対応を謳っていそうなものを探したところ以下のものを見つけた</p>
<ul>
<li><a href="https://github.com/shaunsingh/nord.nvim">shaunsingh/nord.nvim: Neovim theme based off of the Nord Color Palette, written in lua with tree sitter support</a></li>
</ul>
<h2>colorscheme を変更</h2>
<p>ひとまずサンプルそのまんまで以下のように設定( <code>require("lazy").setup(...)</code> に指定する plugin に追加)</p>
<div class="highlight"><pre><span></span><code> <span class="p">{</span> <span class="s1">'shaunsingh/nord.nvim'</span><span class="p">,</span>
<span class="n">lazy</span> <span class="o">=</span> <span class="kc">false</span><span class="p">,</span>
<span class="n">priority</span> <span class="o">=</span> <span class="mi">1000</span><span class="p">,</span>
<span class="n">config</span> <span class="o">=</span> <span class="kr">function</span><span class="p">()</span>
<span class="n">vim</span><span class="p">.</span><span class="n">cmd</span><span class="s">[[colorscheme nord]]</span>
<span class="c1">-- Example config in lua</span>
<span class="n">vim</span><span class="p">.</span><span class="n">g</span><span class="p">.</span><span class="n">nord_contrast</span> <span class="o">=</span> <span class="kc">true</span>
<span class="n">vim</span><span class="p">.</span><span class="n">g</span><span class="p">.</span><span class="n">nord_borders</span> <span class="o">=</span> <span class="kc">false</span>
<span class="n">vim</span><span class="p">.</span><span class="n">g</span><span class="p">.</span><span class="n">nord_disable_background</span> <span class="o">=</span> <span class="kc">true</span>
<span class="n">vim</span><span class="p">.</span><span class="n">g</span><span class="p">.</span><span class="n">nord_italic</span> <span class="o">=</span> <span class="kc">false</span>
<span class="n">vim</span><span class="p">.</span><span class="n">g</span><span class="p">.</span><span class="n">nord_uniform_diff_background</span> <span class="o">=</span> <span class="kc">true</span>
<span class="n">vim</span><span class="p">.</span><span class="n">g</span><span class="p">.</span><span class="n">nord_bold</span> <span class="o">=</span> <span class="kc">false</span>
<span class="c1">-- Load the colorscheme</span>
<span class="nb">require</span><span class="p">(</span><span class="s1">'nord'</span><span class="p">).</span><span class="n">set</span><span class="p">()</span>
<span class="kr">end</span><span class="p">,</span>
<span class="p">},</span>
</code></pre></div>
<p>すると以下のような感じで無事に Nord カラーで表示されるようになった</p>
<p><img alt="shaunsingh/nord.nvim を使った場合" src="https://imgur.com/rIf9tMC.png"></p>
<h1>余談</h1>
<ul>
<li>もともと利用していた colorscheme は、そもそも以前 arcticicestudio/nord-vim という名前だったと思うのだが、いつの間にか nordtheme/vim となっており長らく変更に追従できていなかった感がある</li>
<li>この <a href="https://github.com/nordtheme/vim">nordtheme/vim</a> 自体はメンテナンスは活発に行われていそうではあるのだが、 あくまでも想定しているのは vim であって neovim での利用はそこまで想定されていないのかもしれない。</li>
</ul>Error code: Wsl/Service/0x800706f7 というエラーを吐いてWSLが起動できなくなった時の対処療法2023-03-13T00:00:00+09:002023-03-13T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2023-03-13:/articles/2023-03-13-workaround-for-error-code-that-wsl-service-0x800706f7/<p>22H2 が出始めたあたりからか、仕事で使っている Windows11 環境で WSL を使おうとすると次のようなエラーが出て利用できない状況が発生している</p>
<div class="highlight"><pre><span></span><code><span class="go">❯ wsl</span>
<span class="go">スタブは正しくないデータを受信しました。</span>
<span class="go">Error code: Wsl/Service/0x800706f7</span>
</code></pre></div>
<p><img alt="エラーが発生している様子" src="https://imgur.com/xdjctpX.png"/></p>
<p>根本解決までいかないものの、対処療法を見つけたのでメモしておく。( <a href="https://fedibird.com/@laughk/109799960097221653">大分前に toot はしていた</a>のだけど、改めてまとめる)</p>
<p>22H2 が出始めたあたりからか、仕事で使っている Windows11 環境で WSL を使おうとすると次のようなエラーが出て利用できない状況が発生している</p>
<div class="highlight"><pre><span></span><code><span class="go">❯ wsl</span>
<span class="go">スタブは正しくないデータを受信しました。</span>
<span class="go">Error code: Wsl/Service/0x800706f7</span>
</code></pre></div>
<p><img alt="エラーが発生している様子" src="https://imgur.com/xdjctpX.png"></p>
<p>根本解決までいかないものの、対処療法を見つけたのでメモしておく。( <a href="https://fedibird.com/@laughk/109799960097221653">大分前に toot はしていた</a>のだけど、改めてまとめる)</p>
<h1>結論</h1>
<p>この記事執筆時 2023-03-13 時点では、以下を管理者権限のPowerShellなりcmdで実行してsocket接続のリセットをすればOK <sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup></p>
<div class="highlight"><pre><span></span><code>❯ netsh winsock reset
Winsock カタログをリセットしました。
リセットを完了するためにコンピューターを再起動する必要があります。
</code></pre></div>
<p><img alt="対処療法できている様子" src="https://imgur.com/DRWyGs6.png"></p>
<p>ひとつ注意があり、実行後に「リセットを完了するためにコンピューターを再起動する必要があります」と表示がされるが、WSLを使いたいのであれば <strong>再起動はやってはいけない</strong>。再起動するまでのひと時の間のみ、WSLが利用できるようになる。</p>
<p>このコマンドはWindowsを起動するたびにやらなければならないのが面倒ではあるが、Dockerも依存しているのでWSLそのものが使えないよりははるかにマシである。(なので、この方法はあくまでも対処療法)</p>
<h1>余談1: この件のIssueは立っている</h1>
<p>ちなみにこの件は WSL に Issue は立っている</p>
<p><a href="https://github.com/microsoft/WSL/issues/9413">Error when installing distros - The stub received bad data. Error code: Wsl/Service/0x800706f7 · Issue #9413 · microsoft/WSL</a></p>
<p>この対処療法も次のコメントで発見した。</p>
<blockquote>
<p>In my case using this cmd solved the issue:<br>
<code>netsh winsock reset</code> </p>
</blockquote>
<p><em><a href="https://github.com/microsoft/WSL/issues/9413#issuecomment-1370201447">https://github.com/microsoft/WSL/issues/9413#issuecomment-1370201447</a></em> より</p>
<h1>余談2: 原因が本当によくわからない</h1>
<p>この件は本当に原因がよくわからない。(自分のWindows関連の知識不足というのももちろんあるのだが)</p>
<p>そもそもで、この現象はプライベートで使っている、同じく windows11 環境では発生していない。なので最初は業務PC特有のウィルスソフトや監査周りのツールを疑ったが、社内で協力を得て切り分けするも「これが原因である」というものを特定するには至らなかった。</p>
<p>Issue が上がっていることから、おそらくウィルスソフト・セキュリティソフトとの相性の悪さという話では無いのかもしれない。</p>
<p>いずれにせよ、毎回コマンドが必要なのは億劫なところではあるので1日も早い根本解決を願うのみ...</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p>スクリーンショットの sudo は scoop でインストール可能な Windows 向けの sudo コマンドを利用している <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>Androidの左下に表示される画面回転ボタンを無効にした2023-01-15T00:00:00+09:002023-01-15T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2023-01-15:/articles/2023-01-15-turn-off-android-rotate-button/<p>タイトルそのままだけど、Androidの左下にちょくちょく表示される画面回転ボタンが邪魔だったので無効化したけど、思いの外面倒だったのでそのへんをメモしておく。</p>
<p>タイトルそのままだけど、Androidの左下にちょくちょく表示される画面回転ボタンが邪魔だったので無効化したけど、思いの外面倒だったのでそのへんをメモしておく。</p>
<h1>tl;dr</h1>
<ul>
<li>Android の左下にちょくちょく表示される画面回転ボタンがずっと邪魔だった</li>
<li><a href="https://play.google.com/store/apps/details?id=com.cannic.apps.rlbubble&hl=ja&gl=US">Rotation Lock Bubble</a> というアプリを使って画面回転ボタンの表示位置をずらしてお茶を濁していたが、Youtubeアプリなどの動画の全画面表示に支障がでていた</li>
<li>PC から adb コマンドを使って設定変更を行い、Androidの画面左下に表示される画面回転ボタンを非表示にした</li>
</ul>
<h1>起こっていたこと</h1>
<p><img alt="" src="https://imgur.com/vk4JNH8.png"></p>
<p>こういうやつ。特にTwitterの場合は一番上まで移動するためのホームボタンの位置とかぶっていて誤爆することが多くなかなかなストレスだった。</p>
<h1>やったこと</h1>
<p>「android rotate ボタン 邪魔」あたりで検索するとそれっぽい情報が色々出てきて、見つけた方法を順に試した感じ。結論から言うなら、adbコマンドの実行環境を整えられるだけの知識があるのであれば、面倒でもアプリでお茶を濁さず最初から adb コマンド経由の無効化をしたほうがいい。</p>
<h2>その1: <a href="https://play.google.com/store/apps/details?id=com.cannic.apps.rlbubble&hl=ja&gl=US">Rotation Lock Bubble</a> 導入</h2>
<p>後述の adb コマンドによる無効化も考えたものの、最初はadbコマンドを利用する環境を用意するのがだるく感じてしまって、アプリで回避できるならそっちでやってみるかとやっていた感じ。</p>
<p>この <a href="https://play.google.com/store/apps/details?id=com.cannic.apps.rlbubble&hl=ja&gl=US">Rotation Lock Bubble</a> を入れると画面回転ボタンの表示位置を調整することが可能で、最初はこれを使って画面上部のやや右側に表示することである程度状況を回避していた。</p>
<p><img alt="" src="https://imgur.com/JvnwFpL.png"></p>
<p>ただ、たまに効いていないのか引き続き左下に画面回転ボタンが表示されるケースは発生していたし、Youtubeなどの動画コンテンツを全画面にするのに移動した画面回転ボタンを探して押す必要が出てしまったりとそこまで快適なものでもなかった</p>
<h2>その2: adb コマンド経由で無効化</h2>
<p>Rotation Lock Bubble も微妙な感じだったので重い腰を上げて根本的な対処をすることにした。 Androidアプリケーションの開発をするわけではないけど <a href="https://developer.android.com/studio/command-line/adb?hl=ja">Android Debug Bridge(adb)</a> を使えるようにする必要がある。なお、以下の作業は自己責任のもとで行うこと。</p>
<h3>adbコマンドを利用できるようにする</h3>
<p>自分の場合は普段使いのPC環境が ArchLinux 環境なのでAURからCLIツールのみをさくっと導入できた <sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup></p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>yay -S android-tools
</code></pre></div>
<h3>対象のAndroid端末で「開発者向けオプション」を有効にする</h3>
<p>また、対象のAndroidデバイスの開発者モードの有効化も忘れずに。設定から「ビルド番号」を探し、タップを連打する。有効になると設定「システム」のなかに「開発者向けオプション」という項目が出現するので、そこから「USBデバッグ」を有効化する。<sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup></p>
<h3>USBデバッグでPCと接続し、コマンドを実行</h3>
<p>Android端末側でそこまで設定ができたら、USBでPCと接続。Android側でUSBデバッグを有効にするかを聞かれるので許可をする。以下のコマンドで接続済みのデバイスを確認できるので心配なら一度見ておくとよい。</p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>adb devices
</code></pre></div>
<p>ここまできてようやくお目当てのコマンドが実行できる。以下を実行すれば Rotation ボタンを無効化できる。</p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>adb shell settings put secure show_rotation_suggestions <span class="m">0</span>
</code></pre></div>
<p>一度これを実行すれば開発者向けオプションを再び無効化しても、この設定は効いたままになる。また、確認はしてないけどセキュリティパッチやOSアップデートなどのROMのアップデートが発生するとやり直しになる可能性はある気がしている。</p>
<hr>
<p>ここまでやって、ようやく誤爆の多い画面回転ボタンを無効化できた。できればこういうやつは標準の設定で無効化するとかしたいのだけどな。</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p>Windows や macOS、 Arch以外のLinuxディストリビューション環境の場合、Androidアプリの開発をするわけではないのであれば、 <a href="https://developer.android.com/studio/releases/platform-tools?hl=ja">SDK Platform-Tools リリースノート | Android デベロッパー | Android Developers</a> から適宜 zip ファイルをダウンロード&展開して、その中に含まれるディレクトリにPATHを通せばいいと思う <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:2">
<p>機種によって微妙に違うところにあるかもしれない。そういった場合は「開発者」あたりで設定を検索すればいいと思う <a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
</ol>
</div>Self-Hosted Live Sync で Obsidian を使い始めた2023-01-12T00:00:00+09:002023-01-12T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2023-01-12:/articles/2023-01-12-obsidian-self-hosted-live-sync/<p>タイトルのままだけど、<a href="https://obsidian.md/">Obsidian</a> の Self-Hosted Live Sync を使ってプライベートなメモを複数デバイスで同期できるようにしてみたのでその辺を簡単に書いておく</p>
<p>タイトルのままだけど、<a href="https://obsidian.md/">Obsidian</a> の Self-Hosted Live Sync を使ってプライベートなメモを複数デバイスで同期できるようにしてみたのでその辺を簡単に書いておく</p>
<h1>Obsidian</h1>
<div class="iframely-embed"><div class="iframely-responsive" style="padding-bottom: 33.3333%; padding-top: 120px;"><a href="https://obsidian.md/" data-iframely-url="//cdn.iframe.ly/api/iframe?url=https%3A%2F%2Fobsidian.md%2F&key=488d1c0ad23037f6fc79e2e7c152b59f"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<p>Obsidian はいわゆるMarkdownメモツールで、コミュニティプラグインが豊富であったりドキュメント同士のつながりをいい感じに表現できたりする。(自分の観測範囲では)ユーザーコミュニティも盛り上がっていて最近だと結構定番になりつつあるツール。</p>
<p>個人的にもこれまで何度か試していて、特に最近のバージョンでライブビューの状態でvimキーバインドが安定するようになりかなりよさげな手ごたえを掴んでいた。</p>
<h1>Self-Hosted Live Sync</h1>
<p>そんな Obsidian なのだけど、試す中で難ありだなと感じていたものの一つに「複数デバイス間の同期」がある。公式には <a href="https://obsidian.md/sync">Obsidian Sync</a> という機能があるのだけど、これを利用するには有料サービスの利用(つまりサブスク契約)が必須になる。</p>
<p>もちろん、良いものであればお金を払って利用したいところではあるのだけど、個人的な温度感としては「E2EEな同期ができればそれ以外のオプションは不要」という感じだったので月$8払う価値があるかどうかちょっとしり込みしてしまっていたところがある。</p>
<p>そんななかで非公式ではあるものの複数デバイスでの同期が可能なプラグイン Self-Hosted Live Sync というプラグインがあることを知った。</p>
<ul>
<li><a href="https://github.com/vrtmrz/obsidian-livesync">vrtmrz/obsidian-livesync</a></li>
</ul>
<h2>Live Sync の設定</h2>
<p>軽くググってみると、色々試されている記事が既にあり、以下の記事が丁寧かつ簡潔でわかりやすかった。</p>
<ul>
<li><a href="https://www.lisz-works.com/entry/obsidian-self-hosted-livecync">Obsidianにfly.ioでSelf-hosted LiveSyncを設定する - lisz-works</a></li>
</ul>
<p>Live Sync するためのDBを <a href="https://fly.io/">fly.io</a> のマネージドの Couchdb を使うことが前提でサインアップが必要になったものの、それも含めてCLI経由でサクサク対応できて体験がとても良かった。基本は先ほど張ったリンクの記事を見ればいいのだけど、すこしだけハマりどころとか差分があったのでメモしておく</p>
<h3>flyctrl は scoop 経由でも導入可能</h3>
<p>オフィシャルな手順ではないので自己責任での導入にはなるけど、Windowsでscoopを使っている場合はmainバケットにもあるみたいで、簡単に導入で来た。今後のアップデートのことも考えて今回は scoop で導入。</p>
<div class="highlight"><pre><span></span><code><span class="go">❯ scoop install flyctl</span>
</code></pre></div>
<h3>DBへの接続に失敗する</h3>
<p>Obsidian 側で設定する際に、紹介した記事であるような「Could not connect to the database.」 は自分の環境でも発生したのだが、画面が記事のものと違っていて少し戸惑った。設定画面の左から3つ目のアイコンを選択した中にある「Check database configuration」の「Check」をクリックすると確認画面になり、元記事にあるようなログと「Fix」ボタンが表示され、無事に接続可能な状態まで持って行けた</p>
<p><img alt="Check database configurationの位置" src="https://imgur.com/6dG1UKg.png">
<em>Check database configurationの位置</em></p>
<h3>Live Sync が開始されない</h3>
<p>DBまわりの設定を整えれば勝手に同期が始まるかと思ったのだけど、別途有効にする設定が必要だった。
設定の場所は左から6番目のReTweetみたいなアイコンの中にある、文字通りの「LiveSync」の項目を有効にすればOK</p>
<p><img alt="Live Syncを有効にする" src="https://imgur.com/S7KCynM.png">
<em>Live Syncを有効にする</em></p>
<h1>さいごに</h1>
<p>ここまでやってみてスマホアプリ含めて同期可能な状態になった。特にパスワードと専用URIによる同期情報の共有も便利でそのまま1passwordに突っ込んで持ちまわれるのも良い。</p>
<p>同期自体もかなり快適に動いているので、このままObsidianをメインのメモツールにしてもよさそうだなという感じになったのでしばらく使ってみることにする。</p>2022年振り返り2022-12-31T00:00:00+09:002022-12-31T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2022-12-31:/articles/2022-12-31-look-back-2022/<p>毎年恒例の振り返りを書いておく。
いつもどおり「個人活動」「仕事面」「プライベート」で振り返る</p>
<p>毎年恒例の振り返りを書いておく。
いつもどおり「個人活動」「仕事面」「プライベート」で振り返る</p>
<h1>個人活動</h1>
<p>それらしきものをピックアップしてみると以下のような感じ</p>
<ul>
<li>stapy に久々に読んでもらって話してきた</li>
<li><a href="https://github.com/laughk/pelican-hss">laughk/pelican-hss</a> のテーマは細々とでもアップデートを継続。最近色々また手を加えたくなってきているのでこの辺も継続してやっていく</li>
<li>CNDT2022で久々にオフラインテックカンファレンスに参加</li>
<li><a href="https://connehito.connpass.com/event/267072/">Let's Go Talk #5 (GoのLT会) - connpass</a> で LT をした</li>
</ul>
<p>登壇機会を多少無理やり確保しつつも、相変わらず低空飛行が続いた年だったように思える。
ただ、オフラインカンファレンスは参加するだけでも得られる刺激は大きく、色々復活してくるようなら顔は出していきたい。
来年は特にプライベートまわりの動きがより強くなっていきそうで、一IT技術者としてどういう生存戦略を立てていこうかは色々手探りを続けたいところ。</p>
<p>最近はgoでこういうの作りたいなーという案がぼんやり浮かんだり、Windows環境で利用する<a href="https://www.nushell.sh/">nushell</a>をえらく気に入っているところがあり、これから開発が進んでいく感じがあるのでうまいこと貢献できないかとかは考えている。</p>
<h3>参考リンク</h3>
<ul>
<li><a href="https://memo.laughk.org/articles/2022-02-03-stapy77-look-back-evolution-of-python-2022/">続・ラフなラボ – みんなのPython勉強会#77 (#stapy)で Python3.6から3.10までの変更振り返りの話をさせてもらった</a></li>
<li><a href="https://github.com/laughk/pelican-hss/releases/tag/v2.4.0">Release v2.4.0 · laughk/pelican-hss</a></li>
<li><a href="https://memo.laughk.org/articles/2022-12-27-cndt2022/">続・ラフなラボ – CloudNativeDaysTokyo 2022 に参加してきた #CNDT2022</a></li>
</ul>
<h1>仕事面</h1>
<p>なんだか仕事面は今年は色々問題の解決を図ったのだけど、軸が定まらなかったかなと思える。
会社ブログでも書いていたように去年から今年にかけてはインフラエンジニア業よりも、Notionを社内でいかに活用させていくかという課題が常につきまとったように思える。これがいいのか悪いのかは正直良くわからない。自分がどうなりたいか次第だと思ってはいる。</p>
<ul>
<li><a href="https://tech.connehito.com/entry/2022/12/07/182847">コネヒトでNotion導入活動を始めて1年以上経過した - コネヒト開発者ブログ</a></li>
</ul>
<p>今年前半は統合監視のツールが色々散り散りになっている状況があって Datadog の導入をすすめたが、あまり自分のことに注力できる状況になかなか持って行けず。結果としてAPM以外の活用ポイントが見いだせない中途半端な状況になってしまっている。ここは既存の監視周りの状況のキャッチアップに苦労した部分もあるとは思っていて、そのあたりを把握しているメンバーに対する巻き込みが足りなかったのあるだろうなという反省は今振り返って感じた。</p>
<p>メインタスクに一区切りがつく9月あたりの四半期の最後の期間あたりぐらいで Terraform, ecschedule のリポジトリのツール周りの整備をゴリッとやった。特に Terraform はいわゆる「モノレポ」になっているのだけど、全体に <code>terraform plan</code> とかするのがしんどくなってきたので非同期系の実行もWindowsでも安定していたタスクランナー <a href="https://github.com/go-task/task">go-task/task</a> を突っ込んだりもしている(この辺の話はどこかに書きたいとは思ってる)。</p>
<p>また、社内でリモートワークでも利用可能な固定IPが必要になり「なにかいいVPNサービスないですか?」と相談をうけて、「いや、その要件ならProxyでいいでしょ...」と数年ぶりにSquidでProxyを立て、そのアクセス制限をslack経由でできるようにする go 製の bot を用意することもあった。</p>
<ul>
<li><a href="https://tech.connehito.com/entry/2022/08/29/123804">リモートワークでもIP制限があるツールを利用するためにSquidで簡易Proxyを用意した話 - コネヒト開発者ブログ</a></li>
<li><a href="https://www.docswell.com/s/laughk/5G89X5-2022-12-14-125912-lets-go-talk-5">slack-go/slack の websocket モードでメンションやDMを扱う - Let's Go Talk #5 | ドクセル</a></li>
</ul>
<p>今年後半になると、未だに ElastiCache Redis 2.x クラスタが現役だった場所があり、そのへんをすべて6系にアップグレード対応をした。これはもちろんプロダクト開発側の協力も得られたこともあってうまくいった感じ。</p>
<iframe src="https://fedibird.com/@laughk/109578547546943423/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe>
<script src="https://fedibird.com/embed.js" async="async"></script>
<p>ほかだと今年はインフラエンジニアメンバーも増えたことがあり、フォローに回る機会も増えた。地味に「後輩」というメンバーと一緒に仕事をするという機会がこれまで殆どなかったこともあって色々手探りながらやっていたと思う。また、12月は想定外の執筆業務が発生してしまいほとんどの業務に急ブレーキがかかり、心身ともにものすごく疲弊してしまった。色々思うところがあるのだけど、かなり後味が悪い状態なのでフィードバックをして改善を図るつもりではある。</p>
<p>やっていないわけではないのだけど、自分の軸は定まらない部分が大きく来年以降どうするかはちょっと悩むところではある。</p>
<h1>プライベート</h1>
<p>今年も本当に色々あった。</p>
<h3>COVID-19と子育て</h3>
<p>5月くらいまではCOVID-19影響で子供の保育園の閉鎖があたりまえの状況になってしまい、本当にしんどかった。
その中でも4月に自分も含めた家族全員が COVID-19 に感染してしまい一家全滅状態になってしまった。このときは自分も妻も発熱なく、子どもたちの発熱も1日で収まったりとそこまで重症化しなかったのが幸いではあるが、回復した子どもたちを2週間近く家から出さずに過ごすのがまたしんどかった。</p>
<p>ただ、5月以降あたりから保育園の方針が変わり、「COVIT-19感染者発生」=「即関係クラスの封鎖」ということにはならなくなった。本格的に「共存」の方向に変わったわけだけど、結果としてこっちのほうがここ2,3年の中では一番ダメージは少なくて済んではいる。体調に気を遣わなければいけないのは変わらずだけど、生活リズムがかき回されるケースが減ったのは精神衛生上トータルではプラスだったと思う。この「共存」の流れから保育園の運動会、お遊戯会も妻と二人で見に行くこともでき、子どもたちの成長をしっかりと見届けることもできた(去年までは人数制限が厳しく1人しか見に行くことができなかった)。このおかげで同じクラスの親御さんでも2,3年ぶりに顔を見かけた方もいて、本当に長かったなという気持ちにもなった。</p>
<h3>休日の過ごし方</h3>
<p>休日の過ごし方としてはカーシェアリングで子どもたちを連れて色々な公園に行くことが増えた。
発端としては車の購入を真剣に考えて、車を所有している体で頻繁に出かけてみてカーシェアの限界を見てみようと思い立ったのが大きい。</p>
<p>実際やってみると、自分の住んでいる地域から行ける範囲に本当にいろんな場所があるなという発見があり、なかなか体験がよかった。
結果として、ピークの時期にお気に入りの車種が確保できない問題があったりはするものの、休日以外に利用しないのであれば今住んでいる場所の場合はカーシェアのほうが維持費とメンテナンスコストで圧倒的に有利という結論になって車の購入は見送ることにはなったけれど。</p>
<p>また、いろいろな公園に子どもたちを連れ回す知見やグッズが充実してきてできるのであればキャンプとかも行ってみたいなと思いはじめた。ただ現状の子どもたちの手のかかり具合から見ると今は行けてもピクニックくらいまでかなというところが寂しいのだけど、どこかでチャレンジしたいところではある。</p>
<p>また子供の習い事なども出始めて来ていて、これまで多少強引にでも出ていた <a href="https://pyhack.connpass.com/">pyhack</a> にもなかなか参加できなくなってきていてどうしたものかというところはある。</p>
<h3>家族イベント</h3>
<p>去年と同じ10月末から11月頭にかけて、今年は家族全員で車オンリーの帰省をした。
かなりの長旅ではあったのだけど仙台に住む姉家族にも初めてまともに挨拶ができたり、3年ぶりくらいに自分の親に孫たちと対面させられたりと本当に行けて良かったと思う。</p>
<p>長期間ということもあってレンタカーを使ったわけだけど、去年はシエンタを用意してもらえたので今年も同じプランで近いグレードを用意してもらえるだろうと高をくくっていたらアクアを用意された。アクア自体は走りも良くて燃費もよく、ガソリン代はかなり安く上がったのだけど積載量ギリギリになってしまったりタブレットを後部座席向けに取り付けできなくなってしまったのは痛かった。来年も車だけで帰省するのであれば多少お金がかかっても車種を指定したほうがよさそうには思えた。</p>
<p><img alt="家族で出かけた薬研渓流での風景" src="https://i.imgur.com/a49lUeq.jpeg">
<em>家族で出かけた薬研渓流での風景</em></p>
<h3>筋トレなど</h3>
<p>コロナ禍以降は意識的に体を動かす習慣をなんとか維持しているものの、今年はどっちかというとあまり攻めたことはできてなくて本当に運動不足を防ぐための感覚が強かったように思う。
特に COVID-19 関連の保育園閉鎖が乱発しているあたりで生活リズムが完全に壊れてしまい、早朝にダンベルでトレーニングする余力が全くなくなってしまった。
それでもなんとか鍛える動きはしたかったので、お昼のマッスルデリを温めている間に腹筋ローラーをやるという習慣はそこそこ身につき、膝コロであればお腹が地面につくスレスレくらいでできるようにはなった。</p>
<p>あとはFit Boxingは相変わらず継続を死守している感じで2022年は実家への帰省がありつつも1日も欠かさず継続はした。
もちろん忙しいときは本当に軽めに5分、10分やっておわりというときもあったけれど。</p>
<p><img alt="2022年12月31日のFit Boxingの様子" src="https://imgur.com/zu9b1Ar.png">
<em>2022年12月31日のFit Boxingの様子</em></p>
<h1>さいごに</h1>
<p>振り返ってみるると、生きることで精一杯状態がなんとか安定してきたかなーという感じの年だったように思う。
年々1年が過ぎ去るのも早く感じるようになってきてるので、あまり先のことを後回ししすぎないようにしつつ日々生き抜いていきたいと思う今日この頃。</p>
<p>それではよいお年を。</p>
<h1>参考: 過去の振り返り</h1>
<ul>
<li><a href="https://memo.laughk.org/articles/2021-12-31-look-back-2021/">続・ラフなラボ – 2021年振り返り</a></li>
<li><a href="https://memo.laughk.org/articles/2020-12-31-look-back-2020/">続・ラフなラボ – 2020年振り返り</a></li>
<li><a href="https://memo.laughk.org/articles/2019-12-31-end-of-2019/">続・ラフなラボ – 2019年振り返り</a></li>
<li><a href="https://memo.laughk.org/articles/2018-12-31-look-back-2018/">続・ラフなラボ – 2018年</a></li>
<li><a href="https://memo.laughk.org/articles/2017-12-31-look-back-2017/">続・ラフなラボ – 2017年</a></li>
</ul>CloudNativeDaysTokyo 2022 に参加してきた #CNDT20222022-12-27T00:00:00+09:002022-12-27T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2022-12-27:/articles/2022-12-27-cndt2022/<p>既に開催から1カ月以上経過してしまったが、先月 11月21,22日に開催された CloudNativeDaysTokyo2022(以下CNDT2022)にオフライン参加してきたので簡単にでもブログにしておく。ちなみに発表資料や動画は既に公式サイトから確認できるので、細かくはピックアップはしない。</p>
<ul>
<li><a href="https://event.cloudnativedays.jp/cndt2022">CloudNative Days Tokyo 2022</a></li>
</ul>
<p>既に開催から1カ月以上経過してしまったが、先月 11月21,22日に開催された CloudNativeDaysTokyo2022(以下CNDT2022)にオフライン参加してきたので簡単にでもブログにしておく。ちなみに発表資料や動画は既に公式サイトから確認できるので、細かくはピックアップはしない。</p>
<ul>
<li><a href="https://event.cloudnativedays.jp/cndt2022">CloudNative Days Tokyo 2022</a></li>
</ul>
<h1>過ごし方</h1>
<h2>基本</h2>
<p>今回自分にとってはオフラインイベントの参加は <a href="https://python2.connpass.com/event/161403/">Python 2 EOL Party in Tokyo - connpass</a> 以来の実に2年9カ月ぶりで、カンファレンスの過ごし方自体を大分忘れてしまっている感じはあった。</p>
<p>また、まだ COVID-19 の感染対策を意識した会にはなっているので、やはりコロナ禍以前と完全に同じノリというわけにもいかない感じで、トークを聞かずにフラフラするにはちょっと物足りない感じはあった。これは僕自身が会場の人への声のかけ方を忘れてしまっている部分もあったかもしれないのだけど...(声かけ損ねてしまった人もいて、タイミング逃してしまってごめんなさい... 🙇)</p>
<p>そんなこともあり、今回の CNDT2022 ではオフラインイベントのリハビリのような形で参加させてもらったところはある。基本的にはプログラムに沿ってトークを聞いて回りクロージングに参加という感じ。ただ、家庭事情的なものと会場の場所の関係でどうしても最初のトークには間に合わず、2つ目以降のトークから参加という形にはなった</p>
<h2>Twitter</h2>
<p>最近Twitterはそこまで頻繁につぶやいてる状況じゃなかったけど、この会は「久しぶりのリアルイベント盛り上げていくかー」という気持ちでハッシュタグつけて色々 Tweet しまくっていた。これで少しでも「フィードバック」つながったのであれば幸い。</p>
<ul>
<li><a href="https://twitter.com/search?q=from%3Alaugh_k%20since%3A2022-11-21%20until%3A2022-11-23&src=typed_query&f=live">from:laugh_k since:2022-11-21 until:2022-11-23 - Twitter検索 / Twitter</a></li>
</ul>
<h2>会場でのすごしかた</h2>
<p>今回の CNDT2022 はWifiも電源も提供されない状況というのがあって、過ごし方はちょっと工夫がいるなと1日目の段階で痛感。今回はたまたま事情があって購入していた povo2.0 の容量を余していたのでネット回線周りは問題なかったけれども問題は電源。</p>
<p>業務の一環として行かせてもらっていたのもあって、仕事PCの Thinkpad L14 Gen1(AMD)を持ち込んでいたのだけどなかなか電力消費が激しく、普通にTweetDeckを開いてハッシュタグを追いつつSlackを眺めてNotionにメモっているだけでもものすごい勢いで減っていき1日は持たなかった。1日目夕方くらいは業務用のスマホでTweetDeckを開き、Notionアプリとの行き来も案外いけるという感じだったの最後はそれで乗り切った。</p>
<p>2日目はどうしようかと思っていたところ、ちょうど防災用途で買ってあったポータブルバッテリー <a href="https://amzn.to/3WOfWq3">Anker PowerHouse 200</a> が転がっていたので反射的にリュックに突っ込んで会場に乗り込むという奇行に走ったけど、案外これはよかった。サイズ的にもリュックに何とか収まったし、どこでも電源が撮れるという安心感は半端なかった。</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">昨日は電源難民になっていたので持ってきたポータブルバッテリーを始動 <a href="https://twitter.com/hashtag/CNDT2022_PHOTOCON?src=hash&ref_src=twsrc%5Etfw">#CNDT2022_PHOTOCON</a> <a href="https://twitter.com/hashtag/CNDT2022?src=hash&ref_src=twsrc%5Etfw">#CNDT2022</a> <a href="https://t.co/XjyBmfU6Wt">pic.twitter.com/XjyBmfU6Wt</a></p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/1594890438963781632?ref_src=twsrc%5Etfw">November 22, 2022</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>ただ、これでも2日目終了間近になってくると残量が減ってきて、最終的に残量12%まで下がった。PCの給電以外の用途では使わずにこれだったのでそれだけPCが使う電力量が多いのだなと言う知見も得られた</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">今日一日使った結果の残量はこれ <a href="https://twitter.com/hashtag/CNDT2022?src=hash&ref_src=twsrc%5Etfw">#CNDT2022</a> <a href="https://twitter.com/hashtag/CNDT2022_PHOTOCON?src=hash&ref_src=twsrc%5Etfw">#CNDT2022_PHOTOCON</a> <a href="https://t.co/6PLofwR5E2">pic.twitter.com/6PLofwR5E2</a></p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/1594980816324812801?ref_src=twsrc%5Etfw">November 22, 2022</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<h2>トークセッション</h2>
<p>今はコネヒトでインフラエンジニアとして過ごしているのだけど、業務的には基本的にECS(特にFargate)にお世話になっている感じで正直なところ日々の業務でk8sはもちろんCNCFを意識することはほぼない。なのでややアウェイな感じはあったのだけど、逆に業務をしているだけだと知りえない技術や意識しない話が色々聞けたのは純粋に楽しかった。</p>
<p>特に印象に残っているのは以下のトーク</p>
<ul>
<li><a href="https://event.cloudnativedays.jp/cndt2022/talks/1555">旅するCSO 鈴木いっぺいの「KubeCon現地リキャップ」 | CloudNative Days Tokyo 2022</a><ul>
<li>普段CNCFとの縁があまりない人間からすると、そちらの界隈の状況を幅広くキャッチアップできてとてもよかった</li>
</ul>
</li>
<li><a href="https://event.cloudnativedays.jp/cndt2022/talks/1546">Future of CI/CD: testing.next | CloudNative Days Tokyo 2022</a><ul>
<li>最初は結構とっつきにくい感じかなと思ったけれど、タイトル通り CI/CD におけるテスト「実行」はどうあるべきかという事に対する議論やプラクティスが語られて聞いていてとてもワクワクできた</li>
</ul>
</li>
<li><a href="https://event.cloudnativedays.jp/cndt2022/talks/1589">DevOps実装初期フェーズの組織がTerraformとecspressoで求めるAmazon ECS CI/CDの最適解 | CloudNative Days Tokyo 2022</a><ul>
<li>現職でも ecspresso を導入してまだ日が浅いので、他社さんがどんな感じでやっているのかを聞ける貴重な機会だった</li>
</ul>
</li>
<li><a href="https://event.cloudnativedays.jp/cndt2022/talks/1591">謎は全て解けた! 安楽椅子探偵に捧げる AWS ネットワーク分析入門 | CloudNative Days Tokyo 2022</a><ul>
<li>プラクティスと言うよりは AWS の裏側でどんなことが起こっているかを推理していく感じの話で期待はある意味期待は裏切られたものの、トーク自体はとても興味深く、面白く楽しく聞けた</li>
</ul>
</li>
</ul>
<p>ただ、今回様々な都合で会場で事前に収録してある動画をみんなで見るというスタイルが結構多く、話を聞く分にはいいのだけど「このへんちょっと聞いてみたいかも」となった時にフラっと登壇者の方を捕まえて聞いてみるというのができなかったのはちょっと寂しくはあった。</p>
<p>たとえばこういうの(<a href="https://event.cloudnativedays.jp/cndt2022/talks/1560">ペパボのSREが生産性の向上を目指しCloud Nativeなチーム作り実践した話 | CloudNative Days Tokyo 2022</a> を聞いていた時)</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ストーリーポイントの見積もりってどんな感じにやってるのかなーと気になった <a href="https://twitter.com/hashtag/CNDT2022?src=hash&ref_src=twsrc%5Etfw">#CNDT2022</a> <a href="https://twitter.com/hashtag/CNDT2022_F?src=hash&ref_src=twsrc%5Etfw">#CNDT2022_F</a></p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/1594913775668563968?ref_src=twsrc%5Etfw">November 22, 2022</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<h2>ノベリティとか</h2>
<p>今回、正直「ただの参加者でこんなにもらっていいのか...?」というくらい色々いただいてしまった</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">頂いた!(サイズの関係で交換してもらった) <a href="https://twitter.com/hashtag/CNDT2022?src=hash&ref_src=twsrc%5Etfw">#CNDT2022</a> <a href="https://t.co/u5GN1bw6ap">pic.twitter.com/u5GN1bw6ap</a></p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/1594638944284872704?ref_src=twsrc%5Etfw">November 21, 2022</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>じゃんけん大会でいただいたもの</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ノベリティ頂きました! <a href="https://twitter.com/hashtag/CNDT2022?src=hash&ref_src=twsrc%5Etfw">#CNDT2022</a> <a href="https://twitter.com/hashtag/CNDT2022_PHOTOCON?src=hash&ref_src=twsrc%5Etfw">#CNDT2022_PHOTOCON</a> <a href="https://t.co/FoqrB4nVyM">pic.twitter.com/FoqrB4nVyM</a></p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/1594867769358839808?ref_src=twsrc%5Etfw">November 22, 2022</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>自由にとっても良いものからいただいたものその1</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">なるほど箸🥢Corp <a href="https://twitter.com/hashtag/CNDT2022_PHOTOCON?src=hash&ref_src=twsrc%5Etfw">#CNDT2022_PHOTOCON</a> <a href="https://twitter.com/hashtag/CNDT2022?src=hash&ref_src=twsrc%5Etfw">#CNDT2022</a> <a href="https://t.co/sVjHj0nRZg">pic.twitter.com/sVjHj0nRZg</a></p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/1594951134531432448?ref_src=twsrc%5Etfw">November 22, 2022</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>自由にとっても良いものからいただいたものその2</p>
<blockquote class="twitter-tweet" data-conversation="none"><p lang="ja" dir="ltr">CNDT2022賞(4) <a href="https://twitter.com/laugh_k?ref_src=twsrc%5Etfw">@laugh_k</a> 様<br>「ポータブルバッテリーかっこいいです!」<br>(現地の電源コンセント提供ができずすみませんというお詫びも込めて)<a href="https://t.co/bAC4RFg6Pg">https://t.co/bAC4RFg6Pg</a><a href="https://twitter.com/hashtag/CNDT2022_PHOTOCON?src=hash&ref_src=twsrc%5Etfw">#CNDT2022_PHOTOCON</a></p>— CloudNative Days (@cloudnativedays) <a href="https://twitter.com/cloudnativedays/status/1597717741313871874?ref_src=twsrc%5Etfw">November 29, 2022</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>PHOTOCONでなんと「CNDT2022賞(4)」をいただいてしまった。 <s>奇行に走って獲得した感じでなんだか申し訳なさがあるw</s></p>
<p>そしてこれに加えてスタンプラリーの抽選にもあたってしまい、本当に色々いただいた。</p>
<p><img alt="いただいた景品もろもろ" src="https://imgur.com/Db1l1J6.png"></p>
<p>カンファレンスTシャツなども久しぶりだったけれど、タイミング的にちょうど箸を買い替えようとしていたところで一番役にたっている。本当にありがとうございます!次回以降どこかのCNDTイベントでCFPを出せるような実績ちゃんと作っていきたいところ💪</p>
<h1>さいごに</h1>
<p>簡単にではあるものの、CNDT2022参加まとめ的な感じでかいてみた。</p>
<p>色々と制約のある状況であってもやはりオンラインイベントとはことなる会場の雰囲気は確かにあって、参加できて本当によかったし、なにより開催まで色々と動いてもらった運営の皆様に本当に感謝。次回以降のイベントにもぜひとも参加したい。</p>ArchLinux で xdg-open でディレクトリを開くと何故か VS Code が起動してしまうときの対処2022-12-03T00:00:00+09:002022-12-03T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2022-12-03:/articles/2022-12-03-why-dose-xdg-open-open-direcotries-in-vscode/<p>いつぐらいのタイミングからか、ArchLinux 環境で <code>xdg-open .</code> とかすると VS Code が起動するようになってしまい「お前じゃねえ座ってろ」と心の中で言いいつつ黙って閉じていたのだけど、いい加減対処したのでその内容をメモ</p>
<p>いつぐらいのタイミングからか、ArchLinux 環境で <code>xdg-open .</code> とかすると VS Code が起動するようになってしまい「お前じゃねえ座ってろ」と心の中で言いいつつ黙って閉じていたのだけど、いい加減対処したのでその内容をメモ</p>
<h1>起こっていたこと</h1>
<p>つまりこうです</p>
<p><img alt="なぜかxdg-openでディレクトリを開くとVS Codeが起動してしまう様子" src="https://i.imgur.com/ZmXN0PI.gif"></p>
<p>本当は nemo とかのファイラーが起動してほしい。</p>
<h1>原因</h1>
<p>どうもどこかの VS Code のバージョンで <code>code.desktop</code> の <code>MimeType</code> に <code>inode/directory</code> が入るようになってしまったらしい。</p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>cat /usr/share/applications/code.desktop
<span class="go">[Desktop Entry]</span>
<span class="go">Name=Visual Studio Code</span>
<span class="go">Comment=Code Editing. Refined.</span>
<span class="go">GenericName=Text Editor</span>
<span class="go">Exec=/usr/bin/code --unity-launch %F</span>
<span class="go">Icon=visual-studio-code</span>
<span class="go">Type=Application</span>
<span class="go">StartupNotify=false</span>
<span class="go">StartupWMClass=Code</span>
<span class="go">Categories=TextEditor;Development;IDE;</span>
<span class="go">MimeType=text/plain;inode/directory;application/x-code-workspace;</span>
<span class="go">Actions=new-empty-window;</span>
<span class="go">Keywords=vscode;</span>
<span class="go">[Desktop Action new-empty-window]</span>
<span class="go">Name=New Empty Window</span>
<span class="go">Exec=/usr/bin/code --new-window %F</span>
<span class="go">Icon=visual-studio-code</span>
</code></pre></div>
<h1>対処</h1>
<p><code>/usr/share/applications/code.desktop</code> は <a href="https://aur.archlinux.org/packages/visual-studio-code-bin">AUR (en) - visual-studio-code-bin</a> に含まれるものなので直接いじるのは避けて、<code>$XDG_DATA_HOME</code> (デフォルト <code>~/.local/share</code>) 配下にコピーしそちらを編集</p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>cp /usr/share/applications/code.desktop ~/.local/share/applications/.
<span class="go">'/usr/share/applications/code.desktop' -> '/home/laughk/.local/share/applications/./code.desktop'</span>
<span class="gp">$ </span>nvim ~/.local/share/applications/code.desktop
</code></pre></div>
<p>変更内容は以下のような感じ。 <code>MimeType</code> から <code>inode/directory</code> を削除するだけ。</p>
<div class="highlight"><pre><span></span><code><span class="w">$ diff -u /usr/share/applications/code.desktop ~/.local/share/applications/code.desktop</span>
<span class="gd">--- /usr/share/applications/code.desktop 2022-11-27 11:15:13.000000000 +0900</span><span class="w"></span>
<span class="gi">+++ /home/laughk/.local/share/applications/code.desktop 2022-12-03 20:27:33.705570101 +0900</span><span class="w"></span>
<span class="gu">@@ -8,7 +8,7 @@</span><span class="w"></span>
<span class="w"> </span>StartupNotify=false<span class="w"></span>
<span class="w"> </span>StartupWMClass=Code<span class="w"></span>
<span class="w"> </span>Categories=TextEditor;Development;IDE;<span class="w"></span>
<span class="gd">-MimeType=text/plain;inode/directory;application/x-code-workspace;</span><span class="w"></span>
<span class="gi">+MimeType=text/plain;application/x-code-workspace;</span><span class="w"></span>
<span class="w"> </span>Actions=new-empty-window;<span class="w"></span>
<span class="w"> </span>Keywords=vscode;<span class="w"></span>
</code></pre></div>
<p>これで無事に <code>xdg-open .</code> でデフォルトのファイラーが起動するようになった🙌</p>Wezterm で nushell を使うときは shell_integration を false にするとよい2022-11-28T00:00:00+09:002022-11-28T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2022-11-28:/articles/2022-11-28-nushell-config-for-wezterm/<p>最近の Windows における CLI 環境は <a href="https://github.com/wez/wezterm">Wezterm</a> + <a href="https://www.nushell.sh/">nushell</a> という組み合わせで落ち着いているのだけど、この二つを組み合わせようとすると問題が発生する。その問題の回避方法を書いておく。</p>
<p>最近の Windows における CLI 環境は <a href="https://github.com/wez/wezterm">Wezterm</a> + <a href="https://www.nushell.sh/">nushell</a> という組み合わせで落ち着いているのだけど、この二つを組み合わせようとすると問題が発生する。その問題の回避方法を書いておく。</p>
<h1>tl;dr</h1>
<ul>
<li>2022-11-28 時点でWeztermでnushellを起動すると、文字入力のたびに意図しない改行が発生する問題がある</li>
<li>回避策としては nushell の設定 <code>shell_integration</code> という項目を <code>false</code> にするとよい</li>
</ul>
<h1>どんな問題?</h1>
<p>このGifキャプチャのような感じで1文字入力するごとに改行されるような挙動になり、常用するにはかなり厳しい状態となっている。</p>
<p><img alt="Gifキャプチャ - nusllの改行がおかしい状況" src="https://i.imgur.com/QB0B9GC.gif"></p>
<p>この件に関連する問題は nushell のいくつかの Issue で既に話題になっている。( Wezterm 開発者の Wez さんも降臨していたりする)</p>
<ul>
<li><a href="https://github.com/nushell/nushell/issues/6214">significant flickering with nushell on windows using oh-my.nu · Issue #6214 · nushell/nushell</a></li>
</ul>
<h1>回避策</h1>
<p>現状の回避策は以下のIssueのコメントで言及されている</p>
<blockquote>
<p>Setting "shell_integration: false" in config.nu fixes the problem (tested on alacritty, wezterm, and Windows Terminal)</p>
</blockquote>
<p><em>from <a href="https://github.com/nushell/nushell/issues/5585#issuecomment-1229397770">https://github.com/nushell/nushell/issues/5585#issuecomment-1229397770</a></em></p>
<p>という事で以下のように設定ファイルを開き、<code>shell_integration</code> の値を <code>false</code> にすればOK</p>
<div class="highlight"><pre><span></span><code><span class="go">nvim $nu.config-path</span>
</code></pre></div>
<div class="highlight"><pre><span></span><code><span class="gu">@@ -223,7 +223,7 @@</span><span class="w"></span>
<span class="w"> </span> max_history_size: 10000 # Session has to be reloaded for this to take effect<span class="w"></span>
<span class="w"> </span> sync_history_on_enter: true # Enable to share the history between multiple sessions, else you have to close the session to persist history to file<span class="w"></span>
<span class="w"> </span> history_file_format: "plaintext" # "sqlite" or "plaintext"<span class="w"></span>
<span class="gd">- shell_integration: true # enables terminal markers and a workaround to arrow keys stop working issue</span><span class="w"></span>
<span class="gi">+ shell_integration: false # enables terminal markers and a workaround to arrow keys stop working issue</span><span class="w"></span>
<span class="w"> </span> disable_table_indexes: false # set to true to remove the index column from tables<span class="w"></span>
<span class="w"> </span> cd_with_abbreviations: false # set to true to allow you to do things like cd s/o/f and nushell expand it to cd some/other/folder<span class="w"></span>
<span class="w"> </span> case_sensitive_completions: false # set to true to enable case-sensitive completions<span class="w"></span>
</code></pre></div>みんなのPython勉強会#77 (#stapy)で Python3.6から3.10までの変更振り返りの話をさせてもらった2022-02-03T00:00:00+09:002022-02-03T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2022-02-03:/articles/2022-02-03-stapy77-look-back-evolution-of-python-2022/<p>先日主催の一人であるあべんべんさん(<a href="https://twitter.com/abenben">@abenben</a>)にお声がけいただき、
久しぶりにみんなのPython勉強会で登壇させていただきました。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 170px; padding-bottom: 0;"><a data-iframely-url="//cdn.iframe.ly/api/iframe?url=https%3A%2F%2Fstartpython.connpass.com%2Fevent%2F234221%2F&key=488d1c0ad23037f6fc79e2e7c152b59f" href="https://startpython.connpass.com/event/234221/"></a></div></div>
<script async="" charset="utf-8" src="//cdn.iframe.ly/embed.js"></script>
<p>先日主催の一人であるあべんべんさん(<a href="https://twitter.com/abenben">@abenben</a>)にお声がけいただき、
久しぶりにみんなのPython勉強会で登壇させていただきました。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 170px; padding-bottom: 0;"><a href="https://startpython.connpass.com/event/234221/" data-iframely-url="//cdn.iframe.ly/api/iframe?url=https%3A%2F%2Fstartpython.connpass.com%2Fevent%2F234221%2F&key=488d1c0ad23037f6fc79e2e7c152b59f"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<h1>スライド</h1>
<iframe width=100% height=400 src="https://memo.laughk.org/slides/2022-01-27-stapy77/"></iframe>
<p>ref. <a href="https://memo.laughk.org/slides/2022-01-27-stapy77/">Python3.6から3.10までのおよそ5年間の間の進化を振り返る - みんなのPython勉強会#77</a></p>
<p>内容としてはタイトル通りで Python3.6 から Python3.10 の間にどんな新機能が入ったかをざっくりまとめたものです。ただ、まとめたとはいえ、30分で質疑応答含めて話しきれそうなものに絞っているので到底網羅的には紹介はできていません(Python3.6周辺であった非同期周りの機能の追加などカットしているもの多くあります)。</p>
<p>なぜ Python3.6 からにしているかという点で言えば、去年にEOLを迎えたバージョンであるということと、完全に個人的な事情ですがスラスラわかる第1版の対応バージョンがPython3.6だったということが挙げられます。また更に個人的な感覚で言えば Python3.6 あたりから Python3 系が主流になりはじめ、Amazon Lambda をはじめとするマネージド・サービスでも多くサポートされるバージョンとなった記憶があることも相まっています。</p>
<h2>当日回答しきれなかったQ&A</h2>
<p>いただいていたQ&Aに対して、私なりの考えを回答してみます</p>
<h4>Pythonに限らず新しいバージョンや機能を使う場合は、チーム内のエンジニアとどのように調整しあうか何かよい方法はありますか?こういった切り替えには踏み込めないものなので。。。</h4>
<p>開発しているシステム・アプリケーションの種類や規模、そしてそのチームがどういった趣向かに依存するところも多いので一概にこうすべきという答えは残念ながら思いつきません。ですが、新しいバージョンを導入するメリット(例えば新しいシンタックスを採用することで冗長な書き方を回避できる、システムパフォーマンスの向上が期待できるなど)とアップデートをしないデメリット・リスク(利用しているライブラリのサポート終了、マネージドサービスでのサポート終了、環境の再現が困難になっていくなど)は提示していく必要はあると思います。</p>
<p>提示の方法もチームのワークフローによってやり方は考える必要がありそうですが、例えばGitHub IssueやJira、Redmineなどである程度自由に起票をできる習慣があればそこで情報を取りまとめつつ提案することはできそうです。またスプリントを行っているのであれば、レトロスペクティブのタイミングでプロブレムとして問題提起をしたり、プランニングのタスクに入れられないか相談するといったやり方はできそうな気がします。1on1がある場合は、そこで一旦自分の考えを示して、展開方法を相談するのも良いかもしれません。どんな方法であれ、工数をとって対応する必要があることなので、チーム・組織で取り組むべき課題と認識してもらわないと厳しいとは思うので、チームの状況に合う方法で勇気をもって提案していく必要はあると思います。</p>
<h4>3.11にはどのような機能が入りますか?</h4>
<p>2022-02-01 時点では 3.11.0a4 がリリースされているようで、以下のページに変更内容がまとまっています。公式のドキュメントですので、このWhat's newのページを見るのが一番確実だと思います。</p>
<ul>
<li><a href="https://docs.python.org/3.11/whatsnew/3.11.html">What’s New In Python 3.11 — Python 3.11.0a4 documentation</a></li>
</ul>
<p>まだすべてが確定しているわけではないでしょうが、例えば新たに <a href="https://www.python.org/dev/peps/pep-0654/">PEP 654</a> が採択されるようで、複数の例外を扱える Exception Groups という機能とそれを扱うための <code>except*</code> 節が利用可になるようですね。</p>
<h4>Pythonで型を書くメリットはどのような時でしょうか?</h4>
<p>一般的に言われるのは、VS CodeやPyCharmなどのIDEの強力な開発支援機能を生かせるというものがあります。
例えば、VS Code の <a href="https://marketplace.visualstudio.com/items?itemName=njpwerner.autodocstring">Python Docstring Generator</a> という docstring を生成してくれるプラグインでは、型ヒントの記載があるとそのまま docstring の内容に反映されます。</p>
<p>私の個人的な感覚では、関数定義の際に型を書いて置くことでその引数の役割がより明確になり、いい加減な実装や設計を未然に防ぐのに役に立っている感じはあります。(その引数が list でも dict でも処理できる関数を書いてしまうとか)あくまで定性的なものではありますが。そのため、規模の大きなアプリケーションであったり、自分以外の人間もメンテナンスに関わる機会が多いのであれば基本的に書いておいた方が良いと考えています。</p>
<p>ただ、基本的には型は書いておいた方が便利な事が多いと考えつつも、書いているコードがどういったものなのかにもよるところはあるかなとも思っています。特に1ファイルだけの小さなタスクをこなすためのスクリプトであれば、標準的な(str, int, list, dict などの)型ヒントのみを書いて、サードパーティーライブラリ関連の型はコメントでオブジェクトの元となるクラス名を書く程度で済ませてしまうことも多いです。これは、私個人的には小さなタスクをこなすための1ファイルスクリプトの場合、目の前の問題を解決する事の方が優先度は高いと考えているためです。</p>
<h4>バージョンが新しいとIDEやプラグインなどに影響が発生することは有りますか?VSCodeやPyCharmはどの程度最新に追随してくれるものなのでしょうか?</h4>
<p>(プラグインというものが、VS Code等のコーディングを行うエディタ向けであるものと仮定して回答します)</p>
<p>私の観測範囲の話にはなってしまいますが、PythonのバージョンをあげることでIDEやテキストエディタのプラグインが全く利用できずに困ったという話はあまり見かけません。Pythonそのものの新しい機能に追従できていない(例えばPython3.10のパターンマッチングのシンタックスハイライト)という事はあるかもしれませんが、リリース後しばらくすれば余程の事が無い限り追従されているイメージです。</p>
<p>どちらかと言えば、テキストエディタのプラグインそのもののバージョンアップによる仕様変更による影響の方が、個人的に多い感覚があります。</p>
<h1>感想とか</h1>
<p>前回呼んでいただいたのが<a href="https://memo.laughk.org/articles/2018-03-13-stapy33/">第33回</a>で実に4年ぶりに参加させていただいた感じです。前回同様、書籍の出版に絡めてお声がけいただいたこともありとてもありがたい限りです。</p>
<p>ただ、お声がけいただいてから家庭や業務状況が想定外にとてつもなく忙しくなってしまい、なかなか準備に時間が割けずで準備にあたって運営皆様にはご迷惑をおかけしてしまいました🙇</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">トップバッターは <a href="https://twitter.com/laugh_k?ref_src=twsrc%5Etfw">@laugh_k</a> さんです。どうぞよろしくお願いいたします。<a href="https://twitter.com/hashtag/stapy?src=hash&ref_src=twsrc%5Etfw">#stapy</a> <a href="https://t.co/QZ4HbqNZJQ">pic.twitter.com/QZ4HbqNZJQ</a></p>— 阿部一也 | 金融×XTech & ITコミュニティ (@abenben) <a href="https://twitter.com/abenben/status/1486642581006028802?ref_src=twsrc%5Etfw">January 27, 2022</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>当日はいただいていた時間よりもかなり早めにトークが終了してしまったのですが、ありがたいことに多くの質問をいただきその応答に時間を回すことができたので結果オーライだったかなという感じです。また、質疑応答の際には特に <a href="https://twitter.com/tsjshg">@tsjshg</a> さんの進行にとても助けられた感じがありました。対談に近い形で質問に答える流れは私自身とても楽しんで答えることができました。Zoom チャットでも <a href="https://twitter.com/aodag">@aodag</a> さんからも一部フォローいただきとても助かりました。本当にありがとうございました。</p>
<p>リモート会での初参加ではありましたがリモートの勉強会でありながら、会自体の雰囲気の良さみたいなものも感じました。
スライドのアップロードに手間取ってしばらく残っていた感じだったのですが、結果的に懇親会でほどよい軽さで色々お話しできて楽しかったですし、最後まで残っていてよかったなと思いました。こういう雰囲気なら、時間に余力があるときは参加者としてまたお邪魔したいなと思いました。</p>2021年振り返り2021-12-31T00:00:00+09:002021-12-31T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2021-12-31:/articles/2021-12-31-look-back-2021/<p>毎年恒例になってきた今年の振り返りをしておく。</p>
<p>振り返る軸としても同じく「個人活動」「仕事面」「プライベート」ととしている。</p>
<p>毎年恒例になってきた今年の振り返りをしておく。</p>
<p>振り返る軸としても同じく「個人活動」「仕事面」「プライベート」ととしている。</p>
<h1>個人活動</h1>
<p>今年の個人活動は執筆が中心だったと言える。結果として共著書1冊の出版への寄与、技術雑誌1冊への寄稿につながった。詳細は以下の記事通り。</p>
<ul>
<li><a href="https://memo.laughk.org/articles/2021-11-11-surapy-2nd/">続・ラフなラボ – スラスラわかるPython第2版が出ます</a></li>
<li><a href="https://memo.laughk.org/articles/2021-12-29-software-design202201/">続・ラフなラボ – Software Design 2022年1月号第2特集へ寄稿しました。</a></li>
</ul>
<p>それ以外のものとしては、去年から引き続き、 @terapyon さんの Podcast にゲストとして呼んでいただいた。</p>
<ul>
<li><a href="https://podcast.terapyon.net/episodes/0053.html">#44 laugh_kさんをゲストにスラスラわかるPython第2版出版記念とイベントやOSSの話 | terapyon channel podcast</a></li>
</ul>
<p>他、細かなものだと Windows のランチャー Keypirinha のプラグインを作って公開したりもした。これは今も業務で活用してる。</p>
<ul>
<li><a href="https://memo.laughk.org/articles/2021-01-04-keypirinha-plugin-for-github/">続・ラフなラボ – Windows で Github へのアクセスを便利にする Keypirinha Plugin を作った</a></li>
</ul>
<p>また、 GitHub のアクティビティを出力する便利ツール <a href="https://pypi.org/project/footprint/">footprint</a> のメンテを細々と続けていたりした。</p>
<p>ただできていたのはこの程度、それ以外はほぼ活動ができていない。後述する家庭事情でこれでもキャパオーバーに近い感じになってしまった。一応 pyhack にはオンラインイベントに継続して参加はしていたが、その殆どは家庭事情を優先しての短時間参加でその時間もほとんどを執筆に費やす形になった。そのため、自分の気になる技術を手を動かしてキャッチアップするといったことはできない形となってしまった。</p>
<p>オンラインイベントに対する参加もほぼできていない。課題感については去年の振り返りと同様な感じで、なかなか集中して参加する環境を用意できなかったというのが大きい。これについては去年できそうだと見ていた Try をやりきれなかったところはあって、このような結果になった原因は外的要因だけではないと見ている。</p>
<h1>仕事</h1>
<p>インフラエンジニアとして働き始め、年はじめはかなりいい感じに立ち上がりができたと思う。コネヒトに去年の12月入社してからの最初の課題である定期実行バッチの改修を最初はひたすら進めていて、結果として <a href="https://github.com/Songmu/ecschedule">ecschedule</a> をいい感じに導入でき、その内容を KDDIグループ企業各社のDeveloper イベント KGDC のコネヒト枠として発表することもできた</p>
<ul>
<li><a href="https://kgdc.connpass.com/event/203487/">KGDC Tech Conference #0 通信インフラだけじゃないKDDIグループの多彩な技術 - connpass</a></li>
<li><a href="https://speakerdeck.com/laughk/a-story-about-a-scheduled-execution-batch-on-the-ecs-scheduled-task-converted-to-gitops-with-ecschedule">ECS Scheduled Task 上の定期実行バッチを ecschedule で GitOps 化した話 / A story about a scheduled execution batch on the ECS Scheduled Task converted to GitOps with ecschedule - Speaker Deck</a></li>
</ul>
<p>その後はしばらくアウトプットがない状況が続いたが、仕事的にはコード化されていないクラウドリソースをひたすら Terraform 化する活動をしていた。ただ、実際のところ Terraform 化にだけリソースを割き続けるわけには行かない状況も頻発。なんとか最低ラインのコード化はできたもののインフラチームとしてこれはいいのか?という議論になり、今年の9月以降はコネヒトのインフラエンジニアの活動を個人からチームとして機能させるべくあの手この手でテコ入れをしていた。その辺の活動については年末の会社のアドベントカレンダーでアウトプットすることはできた。</p>
<ul>
<li><a href="https://tech.connehito.com/entry/2021/12/18/115457">インフラエンジニアの業務で部分的にスクラムを取り入れている話 - コネヒト開発者ブログ</a></li>
</ul>
<p>ここは正直自分自身かなり手探りでやっているところなので、率直な話いきなり応募とかしなくていいし「応募なんて興味ないけどこの辺の話聞きたい。なんか言わせろ」って人いたら @laugh_k まで連絡ください(切実)</p>
<p>またインフラ技術にとらわれず、長期に渡るリモートワーク中心の組織において、会社全体で「オンラインにおけるドキュメンテーション」「オンライン上のコラボレーション」の領域を強化しないとやってられないという結論に個人的至って、色々声を上げまくっている状況。これについては来年具体的な形でアウトプットできるようしっかり活動したいと思っている。</p>
<p>こうして取り組んでいることをピックアップしてみるとそれなりにやっている感はあるものの、後半の個人活動のキャパオーバーが響いてパワーを上げきることができなかったと思うところはある。バランスを見ながらやっていきたいというのが理想ではあるのだけど、やって来るチャンスへの食らいつき方とかを考えると悩ましいところではある。なんというか、パワーを上げきれなかったことに関して、自分自身で納得感が完全に得られない形になってしまったのが今年はあまり良くなかったなと思う。</p>
<h1>プライベート</h1>
<p>プライベートに関しては6月くらいまでは、コロナ禍の引きこもりが続く中でもそれなりにうまく立ち振る舞えていた気はする。カフェイン断ちもうまくいっていたし、あすけんのフォローをベースに日々の食事周りの改善もかなりいい感じにできていた。</p>
<p>ただ、7月末にCOVID-19の濃厚接触者がお世話になっている保育園から発生してから一気にリズムが崩れ去った。上の子も濃厚接触者となってしまいPCR検査からの自宅待機、その後の2度めの保育園登園自粛要請により再び保育園をほとんど利用できなくなったことに加え、日に日にCOVID-19の感染者数が増加していく状況は僕自身が絶望のどん底に落ちるには十分だった。登園自粛が発生する背景は理解できるし、その状況でもギリギリのところで保育の仕事をしてくれている保育園の方々には本当に頭ががらないというところではある。でもここまで保育園が利用できない状況が頻発するのであれば、今住んでいる場所に住み続けるのはどうだろうかとかなり真剣に悩んだ。実際移住的な話はかなりリアルなレベルで考えたりもした。ただこれもリアルに試算してみて最終的に頓挫はしたのだけど。</p>
<p>去年から続いていた筋トレも、2度めのワクチン接種による副反応あたりからそのまま登園自粛要請、執筆の最後の追い込みと完全にキャパオーバーとなってしまいほとんどできない状況になってしまった。それでもなんとかフィットボクシングの習慣だけは死守ている(今日で連続336日だった)。とはいえ、やっぱり自分の体は最大の資本なので筋トレは再開していきたい思いが強い。</p>
<p>10月くらいになってからはワクチン接種者が増えてきたおかげか世の中の状況もだいぶ状況が改善したと思う。保育園の行事も少しづつ復活し始めて、下の子の運動会(的な行事)や上のこの学芸会(的な行事)もしっかり見届けることができた。</p>
<p>10月下旬から11月頭にかけては車オンリーの帰省を強行した。これはこのタイミングでやってよかったとは思う。このタイミングで帰っていないと、身内がどういう状況になっていたかを知ることはできなかった。詳細は詳細すぎるくらいに書いたのでそちらを参照</p>
<ul>
<li><a href="https://diary.laughk.org/posts/2021-12-30-%E7%89%87%E9%81%93800km%E3%81%82%E3%82%8B%E5%AE%9F%E5%AE%B6%E3%81%AB%E8%BB%8A%E3%81%A0%E3%81%91%E3%81%A7%E5%B8%B0%E7%9C%81%E3%81%97%E3%81%9F">片道800kmある実家に車だけで帰省した</a></li>
</ul>
<h1>最後に</h1>
<p>COVID-19の状況が収束しないまま2回めの年末を迎えたけれど、なんだか自分自身のリズムをまだ確立しきれていない状況が続いているのが今年の状況だった。去年は「COVID-19の影響ガガガ...」で済まそうとしていたところはあるけど、今年は「今の厳しい状況、本当に COVID-19 だけが原因だけなのか?」という視点でも色々考えるようになった。いい答えは今の所でていないのだけど。</p>
<p>現状は日本国内ではCOVID-19がやや落ち着いた状況ではあり、プライベートの縛りはやや緩やかではある。ただオミクロン株の影響を考えると2022年もまだまだ予断を許さない状況は続く。2022年、今年よりも良い年になってほしいのだけど、どうだろうな。</p>Software Design 2022年1月号第2特集へ寄稿しました。2021-12-29T00:00:00+09:002021-12-29T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2021-12-29:/articles/2021-12-29-software-design202201/<p>SNS上ではすでに告知していたことですが、Software Design 2022年1月号第2特集の「Pythonで自動化スクリプトシェルスクリプトもいいけどPythonもね」の第3章を寄稿しました。</p>
<p>SNS上ではすでに告知していたことですが、Software Design 2022年1月号第2特集の「Pythonで自動化スクリプトシェルスクリプトもいいけどPythonもね」の第3章を寄稿しました。</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Software Design 2022年1月号第2特集の第3章を寄稿しました。PythonでWeb APIを使うための基本知識をまとめています!<br><br>急なお願いにも関わらず丁寧にレビューいただいた皆様( <a href="https://twitter.com/terapyon?ref_src=twsrc%5Etfw">@terapyon</a> <a href="https://twitter.com/takanory?ref_src=twsrc%5Etfw">@takanory</a> <a href="https://twitter.com/kashew_nuts?ref_src=twsrc%5Etfw">@kashew_nuts</a> <a href="https://twitter.com/soogie?ref_src=twsrc%5Etfw">@soogie</a> <a href="https://twitter.com/takapy0210?ref_src=twsrc%5Etfw">@takapy0210</a> )も本当にありがとうございました!! <a href="https://t.co/xdMkGZUAyF">https://t.co/xdMkGZUAyF</a></p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/1469122799839358977?ref_src=twsrc%5Etfw">December 10, 2021</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<h2>きっかけ</h2>
<p>今回、技術評論社の担当の方から私が過去(本当に結構前)に公開していたイベントの登壇資料を確認いただいて連絡を頂いたのがきっかけです。アウトプットしておくとどういう縁があるか本当にわからないですね。</p>
<ul>
<li><a href="https://www.slideshare.net/laughk/python-webapi-nextsteppythonprograming">入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-p…</a></li>
<li><a href="https://www.slideshare.net/laughk/python-oss-pyconjp-2016slide">たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016</a></li>
</ul>
<p>お話を頂いたのが10月中旬ころで、実はこのとき「<a href="/articles/2021-11-11-surapy-2nd/">スラスラわかるPython 第2版</a>」の出版間近で最後の追い込みがようやく落ち着くかどうかの段階だったため引き受けるかどうかはかなり悩みました。ただ、求められている内容がおそらく過去に公開していたスライドで扱う領域であろうことが読み取れたことと、書籍執筆のテンションが残っている状況であれば雑誌8ページ程度の量ならなんとかできそうだという結論になり引き受けることにしました。10月から11月にかけてプライベートの予定もかなり詰まっていたので、最初から締め切りを1週間伸ばしていただく形ではありましたが。</p>
<h2>内容</h2>
<p>私の担当した第3章「Web APIの活用」の内容は「インフラ、SRE、運用など自動化を担う人」「シェルスクリプトなどを書く機会の多い人」「個人の雑務の自動化に取り組みたい人」に向けたPython で Web API を扱うための基礎です。これは企画の対象読者から、普段必ずしもコードを書くことがメインの仕事ではない方が自動化の最初の一歩を踏み出すサポートとなる内容がいいなと考え、Web APIの利用ケースに特化した基本的な内容にしました。サンプルとして紹介するスクリプトも極力環境依存のないものを標準としたほうがよいと考え、メインストリームの話としては標準ライブラリのみを使うことを前提とし、PyPI経由でインストールが必要なライブラリの扱いはコラムとして、こういう手段もあるという紹介にとどめています。</p>
<p>シェルスクリプトとの比較やエラー処理のあたりはもう少し丁寧に扱い、最後のサンプルプログラムも最終的に Slack 通知をやるところまでは扱いたかったのが正直なところです。ただ、8ページという制約は実際に書いてみるとかなり盛り込める内容が限られてしまったため「この章でこれだけ押さえておけば、業務で利用しているサービスのWeb APIを使ったスクリプトを最低限書き始められる」内容に絞り込みました。</p>
<p>そのため、もちろん執筆者が違うというのもあるのですが第1章、2章とはだいぶテイストの違う内容になっています。(私が執筆している段階では1章、2章の内容はわからなかったのですが、見本誌で初めて拝見させていただきました。第2章で紹介されている logging まわりの話は意外と書籍ではなかなか見かけない内容なのでとても興味深く読ませていただきました。)</p>
<h2>執筆話</h2>
<p><a href="https://podcast.terapyon.net/episodes/0053.html">先月terrapyon_channelにゲストで呼んでいただいた回</a> でも少し話しましたが、今回の執筆は Google Docs + <a href="https://workspace.google.com/marketplace/app/code_blocks/100740430168?hl=ja">Code Blocks</a> + <a href="https://chrome.google.com/webstore/detail/textlint-proofreader/hdongmdneapmhfblomidbafplpanpdmm?hl=ja">textlint:文章チェッカー</a> の組み合わせで行いました。これはかなりいい意味で予想外に執筆体験が良かったです。</p>
<p>Google Docs の場合は基本的な文章作成は当然問題なくできますし、自動で保存されるので安心感もありました。サンプルコードの記載に関しても <a href="https://workspace.google.com/marketplace/app/code_blocks/100740430168?hl=ja">Code Blocks</a> のおかげで全く問題なく記述もでき、 <a href="https://chrome.google.com/webstore/detail/textlint-proofreader/hdongmdneapmhfblomidbafplpanpdmm?hl=ja">textlint:文章チェッカー</a> で最低限の校正を行いながら作業できました。ブラウザを起動するだけで執筆を開始できたのも大きく、少し時間が空いたタイミングですべての執筆環境がすぐに整い書き始められました。正直なところ、下手に Markdown(restructuredtext, asciidoc) + git な環境でやるよりもとても快適でスピードを上げて執筆できたと思います。</p>
<p>コラボレーションに関してもバッチリで、Google アカウントを持っている人であれば誰でも招集でき、インラインコメントを通じて原稿の内容に関する議論もそのままできます。そのため書きはじめの段階で担当者の方をコメント可能な閲覧権限で招待し、最初のアウトラインの書き出し段階からチェックしていただくことができました。また、流石に雑誌の記事に乗せる文章を第三者レビュー無しでいくのは個人的に怖すぎたので pyhack 経由の知り合いのみなさま(<a href="https://twitter.com/terapyon">@terapyon</a> <a href="https://twitter.com/takanory">@takanory</a> <a href="https://twitter.com/kashew_nuts">@kashew_nuts</a> <a href="https://twitter.com/soogie">@soogie</a> )や会社の同僚の <a href="https://twitter.com/takapy0210">@takapy0210</a> へ原稿内容のレビューをお願いしたのですが、google docs のリンクを渡すだけで始められたのでかなりスムーズに行えたと思います。(丁寧なレビュー、本当にありがとうございました)</p>
<p>もちろん提出に関してもそのままお渡しすればOKだったので、トータルの執筆体験としてはかなり良かったです。</p>
<h2>雑感</h2>
<p>今回、今までは基本的に読む側だった Software Design へ寄稿することができ、少しはこれまでの恩返しができたなかという気持ちになれました。お声がけくださった技術評論社Yさま、本当にありがとうございました。</p>
<p><img alt="https://imgur.com/pCpJ0OB.png" src="https://imgur.com/pCpJ0OB.png"></p>スラスラわかるPython第2版が出ます2021-11-11T10:00:00+09:002021-11-11T10:00:00+09:00Kei Iwasakitag:memo.laughk.org,2021-11-11:/articles/2021-11-11-surapy-2nd/<p>先日<a href="https://twitter.com/laugh_k/status/1458029275915767810">それらしきTweetをしていました</a>が、この度翔泳社さんより私が共著で執筆したスラスラわかるPython第2版が出版されます。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a data-iframely-url="//cdn.iframe.ly/api/iframe?card=small&url=https%3A%2F%2Fwww.shoeisha.co.jp%2Fbook%2Fdetail%2F9784798174389&key=488d1c0ad23037f6fc79e2e7c152b59f" href="https://www.shoeisha.co.jp/book/detail/9784798174389"></a></div></div>
<script async="" charset="utf-8" src="//cdn.iframe.ly/embed.js"></script>
<p>先日<a href="https://twitter.com/laugh_k/status/1458029275915767810">それらしきTweetをしていました</a>が、この度翔泳社さんより私が共著で執筆したスラスラわかるPython第2版が出版されます。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://www.shoeisha.co.jp/book/detail/9784798174389" data-iframely-url="//cdn.iframe.ly/api/iframe?card=small&url=https%3A%2F%2Fwww.shoeisha.co.jp%2Fbook%2Fdetail%2F9784798174389&key=488d1c0ad23037f6fc79e2e7c152b59f"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<p>予定では11月17日より発売で、Amazonなどでは予約可能な状況になっています。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://www.amazon.co.jp/%E3%82%B9%E3%83%A9%E3%82%B9%E3%83%A9%E3%82%8F%E3%81%8B%E3%82%8BPython-%E7%AC%AC2%E7%89%88-%E5%B2%A9%E5%B4%8E-%E5%9C%AD/dp/4798169366?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E3%82%B9%E3%83%A9%E3%82%B9%E3%83%A9%E3%82%8F%E3%81%8B%E3%82%8BPython&qid=1636591298&sr=8-2&linkCode=sl1&tag=laughk-22&linkId=4dda1d54196e0545419202cfa80a1df2&language=ja_JP&ref_=as_li_ss_tl" data-iframely-url="//cdn.iframe.ly/api/iframe?card=small&url=https%3A%2F%2Famzn.to%2F3n51Y3U&key=488d1c0ad23037f6fc79e2e7c152b59f"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<p>また、一部書店では先行販売されているようで僕自身もまだ見本誌を受け取れていないのに並んでいるという情報をみかけてかなりびっくりしました。写真は無事に昨日の朝受け取れた見本誌です。</p>
<p><img alt=見本誌 src=https://imgur.com/4PajzPy.png width=450></p>
<h2>内容</h2>
<p>幸いなことにPythonの入門書として多くの方に手にとって頂いた「スラスラわかるPython」ですが、第1版の出版からはすでに4年も経過している状況でPython3.6が出たばかりの内容は流石に全体的に古いものとなってしまいました。</p>
<p>第2版では2021年の状況に合わせたものに情報をアップデートし、先日リリースされた Python3.10 をサポートする内容となっています。アウトラインとしては以下のようになっています。私は第1章〜第3章、第11章〜第13章とダウンロード特典となった付録を担当しました。</p>
<div class="highlight"><pre><span></span><code>第1章 Pythonの紹介
第2章 Pythonを自分のPCで動かそう
第3章 Pythonでプログラムを動かそう
第4章 型とメソッド
第5章 条件分岐
第6章 リスト型と繰り返し処理
第7章 辞書型
第8章 関数
第9章 エラーと例外
第10章 型ヒント
第11章 スクリプト、モジュール、パッケージ
第12章 Webスクレイピング
第13章 ファイル操作
ダウンロード特典
<span class="k">-</span> ドキュメントの読み方、見つけ方
<span class="k">-</span> プログラムでよく使うファイル形式の紹介
<span class="k">-</span> さらにPythonを使い込んでいくために
</code></pre></div>
<p>大きな変更としては第1版にはなかった Type Hintの章が追加されています。他にもスクレイピングとファイル操作の第12章・第13章については対象とするサイトを <a href="https://pycon.jp/2016/ja/">PyCon JP 2016 のサイト</a> から <a href="https://www.pycon.jp/support/bootcamp.html">Python Boot Camp</a>のものへ変更を行い新たに書き直しています。第1章から第3章については第1版における第1章と付録に収録されていたCLI操作についての内容を再編したものを収録しています。また、第1版について頂いた問い合わせなどを踏まえ書籍全体を通して細かな文言修正等のアップデートも多く行っています。</p>
<p>第1版で収録されていた付録については、今回残念ながらページ数都合で書籍内に収録することが叶わずダウンロード特典に含む形でとなりました。個人的な思いとして、ダウンロード特典は「入門書を終えた次のステップのための役立つ情報」を収録したつもりです。もし本書を手にとっていただき最後まで読んでいただいた方はもちろん、ある程度プログラミングを我流で触ってみているひとにもぜひ合わせて見みていただけると、とても嬉しいです。</p>
<h3>正誤表</h3>
<p>誤植があった場合、以下の翔泳社の書籍のページに正誤表がありますのでご参照下さい 🙇🙇🙇</p>
<p><a href="https://www.shoeisha.co.jp/book/detail/9784798174389">https://www.shoeisha.co.jp/book/detail/9784798174389</a></p>
<h2>執筆を通じて</h2>
<p>第1版から引き続き一緒に執筆いただいた <a href="https://twitter.com/esuji">@esuji</a> さん、監修いただいた <a href="https://twitter.com/terapyon">@terapyon</a> さんありがとうございました!また、かなり無茶なスケジュールにも関わらず引きつづきレビューに参加いただいた <a href="https://twitter.com/kashew_nuts">@kashew_nuts</a>さん、<a href="https://twitter.com/soogie">@soogie</a>さんも本当にありがとうございました!</p>
<p>翔泳社担当のNさんにもお世話になりました。途中原稿の提出・レビュー方針で色々とご迷惑おかけしてしまいましてすみません。スラスラわかるPython第2版、なんとか形にすることができて大変感謝しております。</p>
<p>コロナ禍で家庭の状況でかなりごたついていて困難だった執筆も協力頂いた皆様のおかげでなんとか形にすることができました。状況を理解してくれた妻にもとても感謝しております。</p>
<h2>さいごに</h2>
<p>本書が一人でも多くの方の「プログラミングをPythonではじめる」最初の一歩をサポートできることを引き続き願っています!よろしくお願いします!!!</p>プライバシー重視のメッセンジャーを求めて、SignalとSessionの緩やかな導入2021-06-21T00:00:00+09:002021-06-21T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2021-06-21:/articles/2021-06-21-i-have-started-using-Signal-and-Session-in-search-of-privacy/<p>ここ最近色々あって安心して利用できそうなメッセンジャーツールを探していたのだけど、その流れで<a href="https://www.signal.org/">Signal</a>と<a href="https://getsession.org/">Session</a>を導入してみた。</p>
<p>ここ最近色々あって安心して利用できそうなメッセンジャーツールを探していたのだけど、その流れで<a href="https://www.signal.org/">Signal</a>と<a href="https://getsession.org/">Session</a>を導入してみた。</p>
<p>正直僕の場合はそもそもプライベートなメッセージやり取りをあまりしないのに加えて、そのプライベートなメッセージも9割がFacebook Messenger, 適当なコミュニティーSlack、TwitterのDMで済んでしまっており、これらを無理に変えようとはしていない。なので今のところSignalはAndroidのSMSクライアントとして、Sessionは自分自身とのチャットによるメモ置き場くらいにしかつかってない。</p>
<p>ただ、もし今後はよりプライバシーを重視した手段/サービスでメッセージのやり取りをしたい、僕と個別に連絡を取りたいという人は、僕の電話番号知ってる人ならSignalでも反応できるようにしたし、電話番号も避けたいというのであれば Session のIDも個別に教えますよという告知です。</p>
<p>言いたいことは以上なのだけど、以下それぞれどんなものかを、せっかくなので僕が調べたことを書いておく。</p>
<h2>Signal</h2>
<div class="iframely-embed"><div class="iframely-responsive" style="padding-bottom: 52.5%; padding-top: 120px;"><a href="https://signal.org/ja/index.html" data-iframely-url="//cdn.iframe.ly/hSe7ojj"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<p><a href="https://signal.org/ja/#signal">https://signal.org/ja/#signal</a></p>
<p>Signal はプライバシー重視なプライベートメッセンジャーを探すと比較的簡単に見つかった。アメリカの非営利団体<a href="https://signal.org/blog/signal-foundation/">Signal Foundation</a>が運営を行っており、そのおかげもあって広告類やメディア記事などの余計な機能はまったくない。それでいて音声通話、ビデオ電話、グループチャット、ブロック機能、ファイル添付などメッセンジャーアプリとして必要な機能はちゃんとある。メッセージ送信後3時間以内であれば削除も可能。事前に「〇〇分後に削除」という時間制限付きのメッセージの送信なんかもできる。Facebookメッセンジャーのようにメッセージにリアクションをつけることもでき、UI的にもとてもシンプルで日本語にも対応しており個人的にはいい意味で渋いなと感じている。PC版もWindows/mac/Linux版がある。</p>
<p>後述する欠点もあるんだけど、 <strong>アプリの使いやすさ・わかりやすさ・シンプルさ・導入の敷居の低さや機能面を考慮すると、Signalは今回探してみた中では幅広い人に一番勧めやすいとは感じる。</strong></p>
<p>Signalはサーバ上にはメッセージを残さない模様。なのでそもそもやり取りした内容の情報は流失しようがない感じ。また、通信の際には当然暗号化はされているが、その暗号化のプロトコルが <a href="https://github.com/signalapp/libsignal-protocol-c">libsignal-protocol-c</a> としてOSSとして公開されているのも大きい。<a href="https://github.com/signalapp/Signal-iOS">iOSアプリ</a>や<a href="https://github.com/signalapp/Signal-Android">Androidアプリ</a>、<a href="https://github.com/signalapp/Signal-Desktop">デスクトップアプリ</a>についても同様にOSSとしてコードは公開されている。</p>
<p>Wikipedia曰く「電子フロンティア財団が定める「最もセキュアなメッセンジャーリスト」で、7つの調査項目の全てをクリアしている。また、アメリカ合衆国上院議員の公式な連絡ツールとして認められている。その他、インターネット監視プログラム「PRISM」を内部告発した、内部告発者のエドワード・スノーデンも、秘匿性の高さを評価した。 」とのこと。<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup></p>
<h3>アカウントとか連絡帳の扱い</h3>
<p>Signalアカウントというものがあり、電話番号(SMS)でサインアップをする。
SMSで認証をすればすぐに使い始めることができるので、始める敷居はとても低い。</p>
<p>基本的に電話番号を知っているもの同士でのやり取りが前提になっている。どうも「『友達』という概念はない」と解釈したほうがよさそうで、「この電話番号のアカウントにメッセージの送信/通話を試みる。以上」という感じがしている。また、Android版はデフォルトのSMSクライアントとしても利用できるので、「とりあえずSMS用に導入してみて徐々にSignalに連絡方法を移していく」ということもできそう。</p>
<p>Signalアプリは連絡帳との連携もできる。その際の連絡帳の情報は、連絡帳にある電話番号がSignalユーザーとして登録されているかどうかの判断のためにSignalサーバに定期的に送信はされるようではある。実際、新規にチャットを開始する際の宛先一覧で、Signalユーザーの電話番号のものは左側の文字が青くなる。</p>
<p>ただし、Signalサーバに送信される連絡帳情報は本当に「Signalユーザーかどうかの判断」のみにしか使われておらず、Signalが勝手に連絡帳の中の情報に対して通知をしたりメッセージを送るようなことはなく、Signalサーバーに連絡帳の情報も保存されない模様。以下のブログに詳しく説明があり、<a href="https://github.com/signalapp/contactdiscoveryservice">ContactDiscoveryService</a> という技術を利用してSignalサーバからでさえも連絡帳の中身を盗み見ることができないようにされている。(と、少なくとも自分は解釈している)</p>
<ul>
<li><a href="https://signal.org/blog/private-contact-discovery/">Signal >> Blog >> Technology preview: Private contact discovery for Signal</a></li>
</ul>
<p>それでもなお連絡帳の情報をSignalに送信したくないのであれば、Signalに対して連絡帳アクセスの権限を与えなければよい。新規の人とチャットを始める際は電話番号を手入力(電話帳からコピペ)すればよいので、Signalに電話帳アクセスを許可しなくても使うことはできる。</p>
<p>また、連絡帳連携をしている場合は連絡帳に登録された電話番号が新たにSignalにサインアップされたときに通知を受け取ることもできる。逆にいえば、Signalにサインアップをすれば自分の電話番号を知っている人はそれを検知することはできるということ。「〇〇という電話番号はSignalメッセージが受信可能である」という事実がパブリックになる感じ。それによって検知した人ができることは「Signalのメッセージの送信」程度なため、実質「リッチなSMSのやり取りができる」くらいではある。電話番号所有者の名前であったりSignal上で誰と繋がっているかなどの電話番号以上に個人に踏み込んだ情報が漏れるわけではないものの、ここは人によって印象は別れるかもしれない。</p>
<p>なお、連絡帳連携の有無は関係なく、Signalでメッセージのやり取りを実際に始めると相手に自分のSignalで登録しているプロフィールは公開される。</p>
<p>電話番号以外で人とやり取りする手段がないという点が若干微妙ではあるのだけど、逆に言えば少なくとも電話番号を知っている人同士の場合のやりとりはSignalがちょうどいいなとも思える。(個人的には)</p>
<h3>個人的に微妙に感じている部分</h3>
<p>しっかりとした団体が運営していてUI的にもシンプルで使いやすく、基本的には好印象なのだけど、欠点もあるなーとは感じる。例を挙げてみると次の通り。</p>
<ul>
<li>電話番号に変更がある場合、同じアカウントを維持できる保証がない<sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup></li>
<li>DM相手だけでなく、同じグループチャットにいる人に対しても名前と電話番号が公開される</li>
<li>iOSからAndroid、AndroidからiOSのデータ移行はできない</li>
<li>PCは何台でもリンク可能だが、モバイル端末は1台しかアクティブにしておけない</li>
<li>新規でPCアプリにリンクした場合、過去のメッセージをオフィシャルにシンクする手段がない</li>
<li>オフィシャルではPCアプリのデータバックアップ・リストアができない。<sup id="fnref:3"><a class="footnote-ref" href="#fn:3">3</a></sup></li>
</ul>
<p>このあたりの仕様はちょっと注意が必要だなーというのと、特にバックアップまわりは改善してほしいなとは感じる。</p>
<h2>Session</h2>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://getsession.org/" data-iframely-url="//cdn.iframe.ly/fZ25Qpc?iframe=card-small"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<p><a href="https://getsession.org/">https://getsession.org/</a></p>
<p>Session はたまたまどこかのTweetで存在を知って入れてみた感じ。強固な暗号化通信を用いているのはSignalと一緒だけど、こちらは世界中の分散ノードを通じたE2EEによるチャット、グループチャット、ファイル添付が行える。残念ながら通話やビデオ電話は現時点でできない。アプリのソースを見るとSignalのフォークの模様。PC版も Windows/mac/Linux それぞれそろっている。</p>
<p>Signalとの違いは次のような感じ</p>
<ul>
<li>電話番号不要で使える</li>
<li>やり取りは世界中に分散されたノードを通じてE2EEで行われる</li>
<li>音声通話、ビデオ電話は現時点ではできない</li>
<li>PC・モバイル端末ともに同時に利用できる台数に制限なし</li>
<li>オープンチャットが存在する</li>
</ul>
<p>また、サイトやドキュメントは英語だけどもアプリはちゃんと日本語対応されている。</p>
<h3>アカウントまわり</h3>
<p>サインアップの際は電話番号もメールアドレスなども不要で、サインアップに使った端末から(?)一意のSession ID(ランダムな英数字)が発行されていきなり使い始めることができる。よくわかんないけどとりあえず始める分にはそこまで敷居は高くないかもしれない。</p>
<p>メッセージのやり取りをするには相手のSession IDを手入力(or コピペ)するか、相手にQRコードを発行してもらいそれをスキャンすることでやり取りを開始することができる。</p>
<p>グループチャットについては誰でも作成は可能で、過去にメッセージをやり取りしたことがある人をinviteしていくという感じっぽい。</p>
<h3>PC利用</h3>
<p>PCでの利用の際にはモバイル側で「リカバリフレーズ」を発行して、それを入力して「リカバリ」すれば利用できる。</p>
<p>PCで起動すると最初はデータがなくて空っぽだが、Signalと違って過去数日のチャットのやり取りも同期される。どのくらいの年月まで同期可能なのかはわからないが、少なくとも過去分全部とは行かなかった。セキュリティ・プライバシーの観点だとデフォルトは過去分は同期されないほうが安全かなという気はするが、利便性を考えるとこっちのほうが便利だなとも思う。</p>
<p>ちなみにモバイル同士の機種変更なんかでも同様の挙動をする。</p>
<h3>雑感</h3>
<p>個人的には特に電話番号不要という点が大きくて、プライベートなメッセージングツールとして理想的な仕様だなとは感じている。</p>
<p>ただ使っていると「まだまだ開発段階なのかなー」という印象は結構あって、試し始めたばかりのときは別のアカウントとのメッセージのやり取りはできても、PCとモバイルでなかなかメッセージが同期されないみたいなことはあった。このへんはアップデートのたびによくはなっている。</p>
<p>また、Signalと比べるとギークっぽさが強いところはあると思う。</p>
<h2>その他</h2>
<p>他にもいくつか調べたものはあるのでメモ程度に書いておく</p>
<ul>
<li><a href="https://telegram.org/">Telegram</a><ul>
<li>こちらも機密性の高いメッセージングサービスで調べるとすぐに出てくる。(せっかくなので実はTelegramもアカウントはとった)</li>
<li>ロシア生まれだが現在はドイツの独立系非営利企業Telegram Messenger LLPが運営しているらしい</li>
<li>多くのプラットフォームで利用可能で、APIも公開されている関係で非公式なクライアントも存在する模様。</li>
<li>Android版のサインアップ時、連絡帳や通話履歴のアクセス許可を求められたが拒否しても使うことはできた。</li>
<li>非営利企業による運営のおかげか、広告やメディアなどの余計な機能はない</li>
<li>通常のチャットとE2EEプライベートなチャットの2種類のチャットがある</li>
<li>残念ながら公式には日本語対応はされてない。</li>
</ul>
</li>
<li><a href="https://discord.com/">Discord</a><ul>
<li>ゲーマー向けのイメージが強いが、最近はゲームに限らない様々なコミュニティのやり取りに使われている印象がある</li>
<li>現状はE2EE対応こそされてないけど、ボイスチャットの実績もあり、クロスプラットフォームのクライアントもありで利便性はとても高い</li>
<li>どこかのサーバーに入ってワイワイやるイメージが強いけど、特定のアカウントと友達として直接つながり1対1でやり取りすることもできる</li>
<li>友達として繋がって、1対1のやりとりで連絡する人が結構増えている話を聞いたことがあって、たしかにアリだなとは思った。</li>
</ul>
</li>
<li><a href="https://play.google.com/store/apps/details?id=com.google.android.apps.messaging&hl=ja&gl=US">Google メッセージ</a><ul>
<li>最近のAndroidだとデフォルトのSMSクライアントとして入っていることがほとんどのアプリ</li>
<li>ただのSMSクライアントと思いきやRCS対応もしていて、いつの間にか日本でもこのGoogle メッセージ同士であれば画像やファイルの添付、ステッカーなんかを使ったリッチなチャットができるようになっていた。</li>
<li>グループチャットなども対応していて、正直「Androidユーザー同士ならこれでいいじゃん...」という気持ちに</li>
<li>PCでもWeb版で利用できるが、モバイル端末とリンクする挙動でSMSも含めてPC上で扱えて、とても良くできている。</li>
<li>iOS版が無いようで、iOSユーザーとのやりとりはSMSのみになってしまう(iMessageも似たような状況かな)</li>
<li>現状E2EE対応はされてはおらず、これから1対1のやり取りで利用可能になるっぽい <sup id="fnref:4"><a class="footnote-ref" href="#fn:4">4</a></sup></li>
</ul>
</li>
<li><a href="https://airlex.co.jp/">エアレペルソナ</a><ul>
<li>国産のサービスらしい。</li>
<li>電話帳情報不要で利用可能。GoogleアカウントやAppleアカウントなどでサインアップもできる。</li>
<li>カードという概念があり、繋がっている人の「会社の繋がり」「趣味のつながり」「家族」みたいなカテゴライズができる模様。</li>
<li>PC版がない点や、E2EEに関して特に言及されていなので「うーん...」という感じ。利便性を優先するにも、「それならDiscordのほうがいいのでは?」というのが正直な印象</li>
</ul>
</li>
<li><a href="https://ja.wikipedia.org/wiki/%2B%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8">+メッセージ</a> <ul>
<li>日本の3キャリアが提供するサービス</li>
<li>MVNOだと使えないのであまり詳しくは調べていない</li>
</ul>
</li>
</ul>
<p>他にもいい感じのものがあれば知りたい。</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://ja.wikipedia.org/wiki/Signal_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2)#cite_note-:0-8">Signal (ソフトウェア) - Wikipedia</a> <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:2">
<p>Android端末でsimを抜いた状態でも引き続き利用することはできた。ただ、この状態がどこまで保証されるかはわからない。少なくとも他の人に電話番号が渡ってしまうと利用の継続は厳しそうに思う。 <a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:3">
<p>アンオフィシャルなバックアップツールは存在する <a href="https://github.com/carderne/signal-export">https://github.com/carderne/signal-export</a> <a class="footnote-backref" href="#fnref:3" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
<li id="fn:4">
<p><a href="https://www.itmedia.co.jp/news/articles/2106/16/news076.html">Google、Androidの7つの新機能予告 「メッセージ」のE2EEや★追加など - ITmedia NEWS</a> <a class="footnote-backref" href="#fnref:4" title="Jump back to footnote 4 in the text">↩</a></p>
</li>
</ol>
</div>asciidoc で textlint を使う2021-01-18T00:00:00+09:002021-01-18T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2021-01-18:/articles/2021-01-18-textlint-for-asciidoc/<p>最近 asciidoc で日本語を書く機会が出てきて、せっかくなら textlint で校正しながらやりたいと思って環境を整えたら結構ハマったところがあるのでメモしておく</p>
<p>最近 asciidoc で日本語を書く機会が出てきて、せっかくなら textlint で校正しながらやりたいと思って環境を整えたら結構ハマったところがあるのでメモしておく</p>
<h2>tl;dr</h2>
<ul>
<li>textlint は標準では markdown と plaintext のみ対応</li>
<li>asciidoc で利用するには <a href="https://github.com/seikichi/textlint-plugin-asciidoctor">seikichi/textlint-plugin-asciidoctor</a> を導入すればいい</li>
<li>vscode-textlint で asciidoc も見るには設定で <code>textlint.languages</code> に <code>asciidoc</code> を追加する必要がある</li>
</ul>
<h2>textlint-plugin-asciidoctor を導入する</h2>
<p>textlint は標準では markdown と plaintext のみ扱えるのでプラグインを導入する必要がある。現状だと以下のプラグインを導入するのが nodejs のみで完結するのでお手軽。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://github.com/seikichi/textlint-plugin-asciidoctor" data-iframely-url="//cdn.iframe.ly/wheqo8w"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<p>README にある通り npm install すれば OK (textlint 本体は導入済みと仮定している)</p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>npm install textlint-plugin-asciidoctor
</code></pre></div>
<p>インストールできたら <code>.textlintrc</code> の plugin にも追記する</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="err">...</span><span class="w"></span>
<span class="w"> </span><span class="nt">"plugins"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"></span>
<span class="w"> </span><span class="s2">"asciidoctor"</span><span class="w"></span>
<span class="w"> </span><span class="p">],</span><span class="w"></span>
<span class="w"> </span><span class="err">...</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</code></pre></div>
<p>これでコマンド単体では textlint は asciidoc も扱えるようになる</p>
<h2>VS Code で使う場合</h2>
<p>VS Code で textlint を使う場合は vscode-textlint を使うことになる。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://marketplace.visualstudio.com/items?itemName=taichi.vscode-textlint" data-iframely-url="//cdn.iframe.ly/kvxDHAE"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<p>この vscode-textlint も標準では適用される形式に制限があるようで、少なくとも asciidoc のドキュメントは対象ではない。何か設定できないものかと調べると以下の PR で、textlint を適用するファイルの種類を指定できるようになっていた模様</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://github.com/taichi/vscode-textlint/pull/14" data-iframely-url="//cdn.iframe.ly/sg8kHiB"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<p>ということで、以下のような感じで <code>settings.json</code> の <code>textlint.languages</code> に <code>asciidoc</code> を追加すればOK</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="err">....</span><span class="w"></span>
<span class="w"> </span><span class="nt">"textlint.languages"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"></span>
<span class="w"> </span><span class="err">...</span><span class="w"></span>
<span class="w"> </span><span class="s2">"asciidoc"</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="err">...</span><span class="w"></span>
<span class="w"> </span><span class="p">]</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</code></pre></div>
<h2>おまけ: Vim / Neovim で使う場合</h2>
<p>neovim でも使えれば便利だろうなーということでこっちもやり方を調べたが、 <a href="https://github.com/mattn/efm-langserver">efm-language-server</a> 導入し、vim-lsp + vim-lsp-settings なり coc.nvim なりで efm-language-server の設定をすればいいことがわかった。</p>
<p>今のところ、coc.nvim でやっていて、設定内容的には以下の記事のものをそのまま利用させていただいてるという感じ。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://sh0e1.com/posts/2020/10/26/using-textlint-in-coc-nvim/" data-iframely-url="//cdn.iframe.ly/yANs9Ox"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>Windows で Github へのアクセスを便利にする Keypirinha Plugin を作った2021-01-04T00:00:00+09:002021-01-04T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2021-01-04:/articles/2021-01-04-keypirinha-plugin-for-github/<h1>tl;dr</h1>
<ul>
<li>普段扱う GitHub のリポジトリ数が大幅に増えて、雑なブラウザの履歴による補完がきつくなった</li>
<li>Windows の Alfred Like なランチャーでうまいことできないかなと思ったが既存のプラグインではできなさそうだった</li>
<li>なので <a href="https://keypirinha.com/">Keypirinha</a> という Windows で使える Alfred Like なランチャー向けのプラグインを作った</li>
</ul>
<h1>tl;dr</h1>
<ul>
<li>普段扱う GitHub のリポジトリ数が大幅に増えて、雑なブラウザの履歴による補完がきつくなった</li>
<li>Windows の Alfred Like なランチャーでうまいことできないかなと思ったが既存のプラグインではできなさそうだった</li>
<li>なので <a href="https://keypirinha.com/">Keypirinha</a> という Windows で使える Alfred Like なランチャー向けのプラグインを作った</li>
</ul>
<h1>作ったもの</h1>
<p>こんな感じに使えるやつ</p>
<p><img alt="demo" src="https://raw.githubusercontent.com/laughk/Keypirinha-GitHub/main/demo.gif"></p>
<p>Github リポジトリ</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://github.com/laughk/Keypirinha-GitHub" data-iframely-url="//cdn.iframe.ly/eMS8GQL"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<p>できることはREADMEにも記載しているが、だいたい以下。</p>
<ul>
<li>GitHub のリポジトリをインクリメンタルサーチして選択したリポジトリの各種ページを開ける</li>
<li>GitHub の自分のアカウント関連のページを開ける</li>
</ul>
<p>自分がメインで欲しかったものは主に前者の方で、後者は比較的簡単にできそうだったからつけてみたという感じ。リポジトリの検索には GitHub の Graphql API を使っていて、python 標準の <code>urllib</code> で直接リクエストしている。なので <code>pip</code> でライブラリ導入する必要はない。</p>
<h1>背景</h1>
<p>「ブラウザのブックマーク使えばええやん」とか「org のトップから検索してもいいのでは」とかありそうなんだけど、数が変動するものでいちいちブックマークするのも結構億劫だったことや、org を開いてサーチバーを選択して... とやるのも手が止まってしまう感じがありもう少しスムーズににやりたい!と思うようになったことが大きい。</p>
<p>こいうことをしたい場合は mac なら Alfred の <a href="https://github.com/gharlan/alfred-github-workflow">gharlan/alfred-github-workflow</a>、Linux でも Ulauncher の <a href="https://github.com/brpaz/ulauncher-github">brpaz/ulauncher-github</a> や <a href="https://github.com/buty4649/ulauncher-github-extension">buty4649/ulauncher-github-extension</a> でできるのだけど、Windows の場合これができる機能 or プラグインが提供されているランチャーを見つけることができなかった。</p>
<p>なので、プラグインが作れそうないい感じのランチャーはないかなと探し回ったところ目についたのが Keyperinha というツール</p>
<ul>
<li><a href="https://keypirinha.com/">Keypirinha — Keypirinha</a></li>
</ul>
<p>Python でプラグインが書けるとのことでドキュメントを読みつつ、既存のサードパーティープラグインがどう実装されているかを参考にさせてもらいながら手探りで作ってみた。</p>
<h1>ダウンロード</h1>
<p>自分のユースケースとしては大丈夫そうな感じになっていて、以下からダウンロードできます。 Keypirinha の<code>InstalledPackage</code> フォルダに設置すれば使えます。</p>
<p><a href="https://github.com/laughk/Keypirinha-GitHub/releases">Releases · laughk/Keypirinha-GitHub</a></p>2020年振り返り2020-12-31T00:00:00+09:002020-12-31T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2020-12-31:/articles/2020-12-31-look-back-2020/<p>年末ということもあるし、今年は COVID-19 による世の中の変化がすさまじい年なので記録に残しておきたいというのもあるので手短になっても書いておく。</p>
<p>日々どうやって過ごしていくのが家族にとって、自分にとって良いのだろうと試行錯誤が続いた気がする。ここ2,3年は「個人活動」「仕事面」「プライベート」と分けて振り返っていたけど、今年は仕事と家庭の距離が近づきすぎて境界がかなり曖昧になってる。</p>
<p>年末ということもあるし、今年は COVID-19 による世の中の変化がすさまじい年なので記録に残しておきたいというのもあるので手短になっても書いておく。</p>
<p>日々どうやって過ごしていくのが家族にとって、自分にとって良いのだろうと試行錯誤が続いた気がする。ここ2,3年は「個人活動」「仕事面」「プライベート」と分けて振り返っていたけど、今年は仕事と家庭の距離が近づきすぎて境界がかなり曖昧になってる。</p>
<h1>個人活動</h1>
<h2>オフライン</h2>
<p>オンラインイベントだらけの年ではあったけど、以下のイベントは時期的にギリギリオフラインで参加することができた。</p>
<ul>
<li><a href="https://eure.connpass.com/event/159240/">Goもくもく会(ごもくかい)#23 - connpass</a></li>
<li><a href="https://sre-next.dev/">SRE NEXT 2020</a></li>
<li><a href="https://pyhack.connpass.com/event/160037/">(第108回)Python mini Hack-a-thon - connpass</a></li>
<li><a href="https://python2.connpass.com/event/161403/">Python 2 EOL Party in Tokyo - connpass</a></li>
</ul>
<p>特に SRE NEXT と Python 2 EOL Party in Tokyo は足を運べてよかった。 あのときのように、いろいろなエンジニアの人たちと適当に飲みつつ語りつつをやれる日が恋しくなってきた。戻ってくるのはいつになるんだろうか。</p>
<p>また、イベント自体はオンラインではあるものの、 PyCon JP 2020 の1日目は @terapyon さんにお声がけいただき、少人数ではあるものの半オフラインみたいな形で参加できた。集まったメンバーでワイワイ話しながらトークセッションを聞けるのはオンラインならではだったし、あれはなかなか体験が良かった。</p>
<ul>
<li><a href="https://pyconjp.connpass.com/event/181288/">PyCon JP 2020 カンファレンス - connpass</a></li>
</ul>
<h2>オンライン</h2>
<p>COVID-19 の影響でほとんどのイベントがオンライン化し、これまで常連で参加している pyhack などのもくもく会も例に漏れずオンライン化。最初は「オンラインでもくもく会出てもな...」 という気持ちだったが、あまりにも社外の生の情報にふれる機会がなく、「少しでもなにか社会と接点を保っておこう」と考えるようになり、多少無理をしてでも参加するようになった。他だと <a href="https://forkwell.connpass.com/">forkwell</a>さんの <code>#InfraStudy</code> シリーズは何度か参加してみている。</p>
<p>また時代の変化も感じ、オンラインで発表する側にも実際に回ってみないとアウトプットのやり方がアップデートできないなと感じ、BPLL に一度発表者としてオンラインでおじゃまさせてもらった。</p>
<ul>
<li><a href="https://bpstudy.connpass.com/event/192947/">BPLL #51 - connpass</a></li>
<li><a href="https://www2.slideshare.net/laughk/my-carrier-and-covid19">コロナ渦とキャリアの話 / my carrier and covid-19</a></li>
</ul>
<p>他だと @terapyon さんがポッドキャストを始めたので、それに乗っからせてもらう形で2回ほどゲストで出演させていただいた。</p>
<ul>
<li><a href="https://podcast.terapyon.net/episodes/0016.html">#15 laugh_kをゲストに スラスラPython本、Desktop Linuxなど | terapyon channel podcast</a></li>
<li><a href="https://podcast.terapyon.net/episodes/0044.html">#35 laugh_kさんをゲストに こんな時代の転職とオンボーディングに加えてWindowsに戻った話 | terapyon channel podcast</a></li>
</ul>
<p>初回はポッドキャストで話す勝手がつかめず、「話すの難しいな」と感じていたけど、転職活動や今の職場で場数を踏んだのか2回目出演時は大分リラックスして話ができている気がする。やっぱり経験は大事。</p>
<p>オンラインイベントに対する個人的な感じは、「参加しづらくなり、できても得られるものが減ってしまった」というのが正直なところ。こう考えるのは自分の家庭状況によるものなのだけど、家族がいる状況で仕事でもないのにオンラインイベントに張り付くのが心理的になかなか厳しい。19~22時は夕食からお風呂、寝かしつけと子供がいる家庭は戦場となりがちな時間帯だし、休日も自分一人だけ終日もくもくしているわけにも行かない。オンラインイベントへの参加中は、気分的には家の中で何時間も長電話するような感覚がある。何かあったらすぐに家のことができるのはいい面でもあるのだけど、イベントそのものをほっぽりだすことにもなる。どちらに比重を置くにせよ「ながら」参加になってしまうので家庭のこともイベントも中途半端になってしまい、結果として「あれ、あの時間結局何やってたんだっけ?」となることも少なくなかった。Youtube にアーカイブが残るケースもあり、それ自体はとてもありがたいと思いつつ、あとから見ることもできるが仕事中にながらで流しておくのが精一杯な感じもあり、やはりオフラインイベントに参加していた頃に比べると「得られるものが減ってしまった」という感覚はどうしても出てしまう。とはいえ、オンラインイベント中心な状況はそうそう変わる感じもなさそうなので、うまい付き合い方は模索したい。直近で検討していることとしては「どうしても集中して参加したいイベントは近所のホテルの部屋を確保して缶詰になる」くらいだが。</p>
<h1>仕事</h1>
<p>色々な変化があったのだけど、まずは COVID-19 の影響で2月中旬から原則ほぼリモートワークになったこと。もともとリモートワーク可の制度があったのでそれを利用する形で開発メンバーから自主的にフルリモートに移行していった形になった。</p>
<p>仕事内容的には今年はほとんどが Elasticsearch (を扱う go のコード)と向き合っていた感じがある。神経をすり減らしながらある程度のところでなんとか着地させられたが、果たして自分は良い成果を残せたのだろうか?という点は自分的にはかなり怪しくて、申し訳無さがあったりする。</p>
<p>コロナ渦の状況でフルリモートでひたすら一つの問題を追っかけていたのだけど、その内容と自分がこれからやっていきたい技術の乖離が日々激しくなるのをかなり感じた。またそれを補うべく個人活動もうまくワークしなくなった状況も後押しして、自分の手足が腐っていくような感覚が出始め、1技術者として生き続けるための仕事、個人活動、家庭すべてのやりかたを今の状況に合わせていく必要があると強く感じるようになった。</p>
<p>結果として、そこから転職活動をはじめコネヒトに出会い転職する形になった。</p>
<ul>
<li><a href="https://memo.laughk.org/2020/12/11/0000027.html">続・ラフなラボ – コネヒトで働き始めた</a></li>
</ul>
<p>今回の転職で「ベンチャーのインフラ寄りの何でも屋」から「インフラエンジニア」としてまた働き始めているが、それなりには動けているとは感じていてまずは一安心というところ。</p>
<p>オンライン入社で、まだ1度も出社はしていないものの、社内の Slack や細かなオンラインイベントは活発で、全社員の朝会で司会をするなども早速やってみたりもした。そのおかげか、オンライン上でも少しずつ顔と名前を覚えてもらえているかなーという感じはある。</p>
<h1>プライベート</h1>
<p>今年は COVID-19 なしでは本当に語れない。原則フルリモートワークとなり、家庭との距離が近くなったのはいいことなのだけど、近くなりすぎて逆に家庭とのうまい距離のとり方を見失ってる状況かもしれない。</p>
<p>家の状況でいえば、妻も自分も原則フルリモートワークへの移行を余儀なくされたのでそれまで放置されていた片付け、家具の見直し、不要物の処分を急ピッチで勧めた。ディスプレイアーム、サブで使うタブレット、マイク類、WEBカメラ、部屋になかったエアコン、壁面収納導入などかなりの投資をした。優先度を下げていたものが前倒しになっただけなんだけど、大きな出費になった。</p>
<ul>
<li><a href="https://note.com/laughk/n/n28b54c96d7cb">フルリモートワーク体制になるにあたってやってきたこと - バロンチェアの入手|laughk|note</a></li>
<li><a href="https://note.com/laughk/n/n2bad5aac1d34">フルリモートワーク体制になるにあたってやってきたこと - ネットワーク編|laughk|note</a></li>
<li><a href="https://note.com/laughk/n/nd8990b2226a0">リモートワークのサブ端末として Chromeタブレットを使っている|laughk|note</a></li>
</ul>
<p>ただそのおかげでそれまでは物置としてしか機能していなかった部屋を事実上の自分の書斎スペースにできたのはよかった。とはいえ、今は子供が小さく専用の部屋がなくても大丈夫という状況だからできていることではあるのだけど。</p>
<p>事件的なところだと、非常事態宣言時は本当にしんどかった。保育園がほぼ利用できない状況でもリモートで仕事を続行するかたちとなり、正直気が狂いそうになった。朝保育園に行く時間と同じくらいに、自転車で行ける範囲での公園に子どもたちを連れ出し、遊ばせるのが日課になっていた。それ以外の時間はずっと子どもたちが家で騒いでる状況での業務。書斎スペースはあるもののそんなのお構いなしに子どもたちは乱入してくるので気が休まらなかった。ただ、同じような家庭はおおかったおかげ(?)か、「リモートワーク = 子育て世代にやさしい」とは必ずしも言えないという認識はある程度は広まったんじゃないかなとは個人的に思ってる。</p>
<p>もう1件事件的なところだと、<a href="https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/cocoa_00138.html">COCOA</a> から陽性者との接触が検知され、自宅の書斎スペースから数日出られない状況になったことがあった。その時の日記を書いている。</p>
<ul>
<li><a href="https://diary.laughk.org/posts/2020-10-04-cocoa%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E9%80%9A%E7%9F%A5%E3%81%8C%E6%9D%A5%E3%81%A6%E3%81%8B%E3%82%89%E8%90%BD%E3%81%A1%E7%9D%80%E3%81%8F%E3%81%BE%E3%81%A7/">COCOAアプリの通知が来てから落ち着くまで | laughk's diary</a></li>
</ul>
<p>PCR検査を受けた結果は陰性だったが、その間職場にも保育園にも戦々恐々され、(感染リスク自体は誰にでもあるものの)本当に申し訳ない気持ちになってしまったし、ちょうど妻が体調を崩しはじめの状況でワンオペをお願いせざるを得なくなったのが何より申し訳なかった。3日間くらいの自室待機だったけど、子どもたちの声や物音が聞こえる中、本当に地獄のような時間だった。できることならあんな目にはもうあいたくないけど、日頃の対策は気を抜かず、また逆の立場になったときにちゃんと動けるように心構えは持っておきたい。</p>
<p>運動面でいえば、COVID-19 の感染リスクもさることながら COVID-19 に対する温度感の差からくる対人トラブルを避けたいという意図でスポーツジムには全く行かなくなり、自宅でのトレーニング中心に切り替えた。</p>
<ul>
<li><a href="https://note.com/laughk/n/n661799143eba">フルリモートワーク体制になるにあたってやってきたこと - 運動不足対策|laughk|note</a></li>
</ul>
<p>最初は上記のブログにある通りトランポリンとダンベルでやっていた感じだが、6月あたりに Switch 本体の抽選に当選しフィットボクシングを始めた。リングフィットも入手に成功したのだけど、内容的にあまり肌にあわず、最終的にダンベルトレーニング → フィットボクシングという流れに落ち着いている。家のことが慌ただしくて、ダンベルは3日に1回とかのペースでやっていたのだけど、結果的に何故かジムに通っていた頃よりも筋肉量がちゃんとあがって今年で +4kg となった。自分の体がよくわからんとなっている。</p>
<h1>おわりに</h1>
<p>ザーッと今年のことを書いてみた。まだ漏れがあるかもしれないけど、これだけみても本当に色々ありすぎた。来年は、いい年になるといいのだけどな。</p>
<p>それではよいお年を。</p>7年ぶりくらいに Windows 環境に戻ってきた2020-12-20T00:00:00+09:002020-12-20T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2020-12-20:/articles/2020-12-20-back-to-windows/<p><img alt="Windows10の様子" src="https://i.imgur.com/hcwaV3a.png" width="600"/></p>
<p>この記事は <a href="https://qiita.com/advent-calendar/2020/connehito">コネヒト Advent Calendar 2020</a> の20日目の記事です。</p>
<p>僕はプライベートで過去6年位、また業務利用でも直近3年半くらいずーっとArchLinuxで過ごしてきていて、過去にこんな記事も書いています。</p>
<p><a href="https://memo.laughk.org/2017/12/03/000013.html">続・ラフなラボ – ArchLinux なラップトップで仕事しはじめて大体1年経った</a></p>
<p>ただ、今月コネヒトに入社するにあたって業務利用するPCを Windows 10 Professional マシンにすることを選択したので、実際に過ごしてみてどうなのかを書いてみようと思います。</p>
<p><img alt=Windows10の様子 src=https://i.imgur.com/hcwaV3a.png width=600></p>
<p>この記事は <a href="https://qiita.com/advent-calendar/2020/connehito">コネヒト Advent Calendar 2020</a> の20日目の記事です。</p>
<p>僕はプライベートで過去6年位、また業務利用でも直近3年半くらいずーっとArchLinuxで過ごしてきていて、過去にこんな記事も書いています。</p>
<p><a href="https://memo.laughk.org/2017/12/03/000013.html">続・ラフなラボ – ArchLinux なラップトップで仕事しはじめて大体1年経った</a></p>
<p>ただ、今月コネヒトに入社するにあたって業務利用するPCを Windows 10 Professional マシンにすることを選択したので、実際に過ごしてみてどうなのかを書いてみようと思います。</p>
<h1>自分の仕事について</h1>
<p>Web系のインフラエンジニアとして働いています。今のところは AWS の ECS や EventBridge 周りを触っていることが多く、Python で業務に必要なスクリプトを書いたり、PHP,Go のコードを触る機会もあります。他には Terraform のコードも触ったりしています。</p>
<p>SSH でリモートのサーバにログインする機会はほぼありません。 Docker はバリバリ使います。</p>
<h1>なんで Windows にしたの?</h1>
<p>もともと入社時にLinuxで仕事できないか?とは交渉はしていました。ただコネヒトはCASB/IT資産管理のためのサービスが導入されている状態で、Linuxにおけるその領域のいい解決策が見つからなかったのが大きいです。<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup> また Windows の開発環境についても WSL2 をはじめここ数年でかなり良くなっている話も見かけるので心機一転、Windows でやってみるかという気持ちになりました。</p>
<p>mac も選択肢にはあったのですが、3年半前に業務PCをLinuxに移したあたりで気持ち的に完全に mac から離れていることに加え、Intel アーキテクチャでなくなっていく mac が今後どうなっていくのかまだ見えていない状況での選択は微妙だなと思えたのもあります。PCの選定をした時期が M1 mac が発表される前というのもありますが。</p>
<h1>実際に業務で使っている PC の環境をもろもろ紹介</h1>
<p>本当は Ryzen 7 PRO / メモリ64G 搭載のモリモリの Thinkpad L14 を使う予定なのですが、パーツの調達の関係でまだ納品されておらず、私物の Thinkpad X270 を特例で業務で使わせてもらっています。そのため今は若干チートリアル感もあったりします。PCの納品日が楽しみです。</p>
<h2>ターミナル環境</h2>
<p>基本的に以下の記事を参照するのが間違いないです。本当に最近の Windows における開発環境の知見がまとまっていてこの記事がなければここまで「Windowsいいじゃん!」という感覚にならなかったかもしれません。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://secon.dev/entry/2020/08/17/070735/" data-iframely-url="//cdn.iframe.ly/z0wgtdP?iframe=card-small"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<p>ターミナルエミュレータそのものは、今のところは PowerShell Core 利用時は <a href="https://www.microsoft.com/ja-jp/p/windows-terminal-preview/9n8g5rfz9xk3?activetab=pivot:overviewtab">Windows Terminal(Preview版)</a>、WSL2 環境を使うときは mintty の WSL対応版である <a href="https://github.com/mintty/wsltty">wsltty</a> で落ち着いています。</p>
<p>ターミナルエミュレータも探してみると Windows 対応のものもかなりの種類があり驚きました。色々試してみた感じだと他にも <a href="https://conemu.github.io/">ConEmu</a> は歴史があるだけあって日本語周りもしっかり対応されており、パフォーマンス的にもよかったのですが若干 Window サイズを変更時の描画が崩れがありました。<a href="https://github.com/alacritty/alacritty">Alacritty</a> は基本的には Windows 対応もしっかりされておりパフォーマンス面が間違いないなとは思っていたのですが、日本語入力周りにまだ難がありちょっと常用するのは厳しいという結論になりました。このあたりは先月に Twitter でもごちゃごちゃつぶやいています。</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Windows のターミナル、どれも一長一短という感じだなー。 Windows Terminal もややもっさり感があったり日本語関連ちょいちょい怪しい。Alacritty はパフォーマンスは申し分ないけど日本語変換の表示位置がずれて気になってしまう...</p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/1329008055284092928?ref_src=twsrc%5Etfw">November 18, 2020</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<h2>パッケージマネージャ scoop</h2>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://github.com/lukesampson/scoop" data-iframely-url="//cdn.iframe.ly/fZ6sB59"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<p>https://scoop.sh/</p>
<p>今回 Windows に戻ってきて感動しているのが scoop の存在です。mac でいうところの homebrew 的なもので、コマンドライン経由で様々なアプリケーションの導入ができます。特に以下の点が気に入っています。</p>
<ul>
<li>管理者権限が不要</li>
<li>update が簡単</li>
<li>versions バケットが素晴らしい<ul>
<li>terraform などの複数バージョン持っておきたいものきちんと棲み分けできる</li>
<li><code>scoop reset terraform@x.xx.xx</code> とするだけでバージョン切り替えが可能</li>
</ul>
</li>
<li>zip を展開してそのまま PATH を通すようなインストーラーのないアプリケーションも多く、管理がしやすい</li>
<li>開発者、エンジニアが必要としそうなツールが大体そろっている<ul>
<li><code>git</code> はもちろん、<code>sudo</code> や <code>tar</code> など Unix系OS ではおなじみのコマンドがあっさり導入できてしまう</li>
<li><code>fzf</code>, <code>ghq</code>, <code>ripgrep</code>, <code>vim</code>, <code>neovim</code> なんかもコマンド一発で入る</li>
</ul>
</li>
</ul>
<p>昔 Windows を利用していた際はこのあたりの管理がとても面倒だった記憶があるのですが、scoop のおかげでものすごく楽になるだけでなく、Unix系のコマンドについては「これWindows対応してたのか!」というものも簡単に発見できるのでとてもよいです。</p>
<h2>PowerToys (Keyboard Manager, PowerToys Run, ColorPicker など)</h2>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://github.com/microsoft/PowerToys" data-iframely-url="//cdn.iframe.ly/ZyyHTr4?iframe=card-small"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://docs.microsoft.com/en-us/windows/powertoys/" data-iframely-url="//cdn.iframe.ly/yStW1V8"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<p>うまく説明できないのですが、MS製のWindows便利キットセットという感じのものでしょうか。launcher や Image Resizer などの便利アプリがセットになっている感じのものです。</p>
<p>僕がメインで使っているのは Keyboard Manager で、具体的に言えばキーバインド変更です。そこまでゴリゴリにキーバインド変更しているわけではないですが、以下の変更は個人的に必須なので GUI でさくっと設定できるのはありがたいです。</p>
<ul>
<li><code>Alt(Right)</code> → <code>VK243</code> (右Altを全角半角キー)</li>
<li><code>VK 22</code> → <code>VK 243</code> (qmk_firmware の LANG1 を全角半角キーへ) <sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup></li>
<li><code>Capslock</code> → <code>Ctrl</code></li>
</ul>
<p>他の機能はそこまで頻繁に使わないものの、Image Resizer や Color Picker なんかは不定期に使う機会がありそうです。こういった細かい調整みたいなことは昔は一つ一つ野良のフリーツールを入るなりレジストリを直接いじったり...という感じでやらなければいけなかったのですが、MS製ツールでこのあたりができるのようになったのが個人的にとてもうれしいです。</p>
<h2>Docker</h2>
<p><a href="https://hub.docker.com/editions/community/docker-ce-desktop-windows">Docker Desktop for Windows - Docker Hub</a></p>
<p>Docker については Docker for Windows があるのでそれを使っています。ここについては情報がすでに溢れてそうなので深くは触れませんが、Hyper-V ではなく WSL2 を利用しています。PowerShell からも Unix系と特に変わりなく docker が利用できていますし、Linux で使っていた時は GUI 部分がなかったので GUI アプリで docker の状態を見れるのは便利かもなーと感じています。</p>
<p>パフォーマンス面は、今のところは極端に重く感じることもなく概ね快適です。</p>
<h2>WSL2 (ArchWSL)</h2>
<p>今まで ArchLinux 環境どっぷりできたので WSL2 で利用するディストリビューションも ArchLinux を使いたいと思って色々探したところ、作って公開されているされているものを見つけたのでありがたく使わせて頂いてます。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://github.com/yuk7/ArchWSL" data-iframely-url="//cdn.iframe.ly/MVl6FD6"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<p>導入も scoop で簡単にいけました。本当に scoop 便利です。</p>
<p>導入後のセットアップもドキュメントがまとまっているのでそちらに従います</p>
<ul>
<li><a href="https://wsldl-pg.github.io/ArchW-docs/How-to-Setup/">How to Setup | ArchWSL official documentation</a></li>
</ul>
<p><a href="https://github.com/Jguer/yay">yay</a> をは入れておきたいので導入します。ちょっとハマりどころがあったので軽くメモしておくと以下のような感じ</p>
<div class="highlight"><pre><span></span><code><span class="gp">#</span><span class="c1"># base-devel を入れなおしておく</span>
<span class="gp">#</span><span class="c1"># fakeroot に関して聞かれるがいじってほしくないので n で</span>
<span class="gp">$ </span>sudo pacman -S base-devel
<span class="gp">$ </span>mkdir Downloads
<span class="gp">$ </span><span class="nb">cd</span> Downloads
<span class="gp">#</span><span class="c1"># URL は Jguer/yay のその時の最新 release のもので</span>
<span class="gp">$ </span>curl -LO https://github.com/Jguer/yay/releases/download/v10.1.0/yay_10.1.0_x86_64.tar.gz
<span class="gp">$ </span>tar xf yay_10.1.0_x86_64.tar.gz
<span class="gp">$ </span><span class="nb">cd</span> yay
<span class="gp">$ </span>./yay -S yay-bin
</code></pre></div>
<p>また Docker については ArchWSL で pacman/yay で入れるのではなく、Docker for Windows 側の integration を有効にすることで使えます。Windows 側と共通で使えるので pull した image などが双方で使い回せて便利です。</p>
<p><img alt="" src="https://i.imgur.com/epsGFzS.png"></p>
<p>これで大体普通の Linux 環境として使える感じなりました。 </p>
<h2>エディタ、コーディング</h2>
<p>今のところは書くものとしては、Terraform コード、YAML、Python スクリプト、たまに PowerShell スクリプトなどです。読むのであれば、PHP や Go もあります。あとはよく Markdown も書きます</p>
<p>メインで使うことが多いのが neovim(neovim-qt) です。ちょっとしたことであればターミナル内で利用することもありますが、PowerShell + Windows Terminal だと日本語の表示が安定しないので neovim-qt を多く使うようになりました。サブで VS Code も使えるようにしていますが、今の所あまり出番が無いです。</p>
<p>必要になれば JetBrains の IDE も導入するかもしれませんが、今は必要なさそうということと、マルチプラットフォーム対応なのでいざというときも安心して使えそうな感じがあります。</p>
<p>ちなみに Windows 側で大体間に合っている感じがあり、メモを書くために ArchWSL のターミナルを起動して neovim を開くということはほとんどしません。(パフォーマンス的にはかなり快適ですが)</p>
<h2>Windows 標準でいい感じのもの</h2>
<p>Windows 標準の機能でも以下はいい感じです。(macでもありそうですが)</p>
<h3>ペイント、ペイント3D</h3>
<p>雑にスクリーンショットを加工したりするのにちょうどいいです</p>
<h3>スクリーンショット</h3>
<p>昔ながらの Snipping Tool とかも使えますが、2020年12月時点では <code>Winキー</code> + <code>Shift</code> + <code>s</code> でやるのがいい感じです。ボタンを押してから特定のWindowなのか、選択範囲なのか、画面全体なのかを指定してそのまま加工まで行けるのは個人的にはわかりやすくて良いなと感じています。</p>
<h3>クリップボード管理</h3>
<p>実は標準でついてる機能で便利に使っているもので、<code>Winキー</code> + <code>v</code> で履歴がずらずら出てきてそこから選択する形で貼り付けができます。こういうことも何らかのツールを入れずにできるのがとても良いです。ちなみにデフォルトでは無効になっていますが、無効の状態でショートカットキーを押すと有効にする画面が出てくるので、このへんもわかりやすいなと思いました。</p>
<h2>その他</h2>
<p>やはり世の中一般でみるとメジャーなOSな Windows は色々と周辺サポートが充実しているなと言うのはものすごく感じます。業務で必要なアプリ(Slack, Zoom, ブラウザ各種)は当然使えますし、ハードウェアのドライバもサポート含め充実しているのはやはり安心感があります。(Linuxでも大分よくはなっているのですが)</p>
<p>たまに <a href="https://paw.cloud/">Paw</a> のような mac のみに提供されているツールで多少困ることもありますが、だいたいの場合はクロスプラットフォームの別のツールで代替えが効くのでそこまで致命的ではないかなと思ってます。</p>
<h1>まとめ的な所感</h1>
<p>まだ戻ってきて1ヶ月くらいですが、どんな感じで Windows と過ごしているかを書いてみました。実際に戻ってくるまでは「きっとほとんどのことを WSL2 でやることになるんだろうなー」と思っていたのですが、いざ環境を整えてみると思いの外 Windows だけでも快適な環境が整い、アレルギーに感じていた PowerShell も「これは良いものだな」となったり、むしろUnix系ではない新たな技術との出会いみたいにも思えて「なんだか今の Windows 使ってみると楽しいな」と思えてきています。今 M1 mac もかなりアツくて楽しそうだなと思いつつも、Windows は Windows で進化していて開発環境としてもとても快適に使えるなと思う今日この頃です。</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p>もし情報持っている方がいたら DM でもメンションでもいいので <a href="https://twitter.com/laugh_k">@laugh_k</a> まで教えてくれるとめちゃめちゃ嬉しいです(切実) <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:2">
<p>英語配列だと LANG8 を割り振っても認識してくれないので回避策として <a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
</ol>
</div>コネヒトで働き始めた2020-12-11T00:00:00+09:002020-12-11T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2020-12-11:/articles/2020-12-11-join-connehito/<p><a href="https://connehito.com/"><img alt="コネヒトコーポレートサイト" src="https://i.imgur.com/mk5wE1b.png"/></a></p>
<p>近況です。</p>
<p>本当はしばらく働いて落ち着いてから近況報告しようかなーと考えていたけど、早めにオープンにしたほうが色々動きやすいかなと思えてきたのでもう書いちゃいます。</p>
<p>先月いっぱいで<a href="https://twitter.com/laugh_k/status/1324507266507132928">株式会社WACULを退職し</a>、今月12月1日から<a href="https://connehito.com/">コネヒト株式会社</a>でインフラエンジニアとして働いています。 コネヒトは「<a href="https://mamari.jp/">ママリ</a>の会社」というと知っている人もいるかもしれません。</p>
<p><a href="https://connehito.com/"><img alt="コネヒトコーポレートサイト" src="https://i.imgur.com/mk5wE1b.png"></a></p>
<p>近況です。</p>
<p>本当はしばらく働いて落ち着いてから近況報告しようかなーと考えていたけど、早めにオープンにしたほうが色々動きやすいかなと思えてきたのでもう書いちゃいます。</p>
<p>先月いっぱいで<a href="https://twitter.com/laugh_k/status/1324507266507132928">株式会社WACULを退職し</a>、今月12月1日から<a href="https://connehito.com/">コネヒト株式会社</a>でインフラエンジニアとして働いています。 コネヒトは「<a href="https://mamari.jp/">ママリ</a>の会社」というと知っている人もいるかもしれません。</p>
<h1>背景</h1>
<p>実は先月に <a href="https://bpstudy.connpass.com/event/192947/">BPLL #51</a> でLTさせてもらってます。</p>
<iframe src="//www.slideshare.net/slideshow/embed_code/key/teHT0TYAD9xrXZ" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe>
<div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/laughk/my-carrier-and-covid19" title="コロナ渦とキャリアの話 / my carrier and covid-19" target="_blank">コロナ渦とキャリアの話 / my carrier and covid-19</a> </strong> from <strong><a href="https://www.slideshare.net/laughk" target="_blank">Kei IWASAKI</a></strong> </div>
<p>ここ数年、しばらくベンチャーの何でも屋みたいな動き方をするのが多かったのですが、色々な領域を実際にやってみて、クラウドネイティブな世界を目指していけるような感じでインフラ領域を改めてしっかりやっていきたいなと思うようになったことが大きいです。さらにコロナ渦の状況に背中を押されたのもあります。</p>
<p>そんな状況で本当に様々な企業さんとお話させていただき、振るわない/力及ばずもあればお断りするというケースも多数ありました。最終的に選考の過程でコミュニケーションを取らせていただく中で、自分が目指して行きたい技術領域はもちろん、事業内容的にも自分のこれからのライフプランを充実させられそうだと思えたコネヒトへの入社を決めました。</p>
<p>もうちょっと話聞きたいみたいな人いたら、リモートランチとか誘ってくれるとうれしいです。</p>
<h1>入ってみて&これから</h1>
<p>ちょうど入社日である12/1にコーポレートサイトが一新され、新たに「あなたの家族像が実現できる社会をつくる」という会社のミッションを掲げるすごいタイミングでの入社になりました。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="padding-bottom: 52.5%; padding-top: 120px;"><a href="https://connehito.com/news/new-departure/" data-iframely-url="//cdn.iframe.ly/JSVWw4z"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<p>(自分が入社前の出来事が多くあまり偉そうに言えませんが...)これまでは主にママリを通じた"ママ"をサポートするという形で様々な活動をしていましたが、これからは"ママ"にとどまらずに様々な視点で"家族"をサポートしていくという段階のようで挑戦領域の広がりを感じ、戦々恐々しつつワクワクしつつみたいな気持ちでいたりします。</p>
<p>入社してしばらくはかなり手厚くオンボーディングをやっていただいていて、会社の文化を本当に大切にしてるなーということも感じるし、自分の考えもそこにマッチしていると思えることが多くまずは一安心という状況です。まだ一度も物理出社はしておらず、うまく入っていけるかなーというのはまだまだ手探りですが、なんとかなりそうかなーとは思えてきています。</p>
<p>仕事的にはインフラエンジニアとして、まずは現状のキャッチアップから入りインフラ視点からの様々な改善を加速させるべくやっていく感じになりそうです。</p>WFH・自宅作業環境 2020.052020-05-09T00:00:00+09:002020-05-09T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2020-05-09:/articles/2020-05-09-wfh-environment/<p>COVID-19の影響でほぼ在宅業務な状態がつづいていて、環境が整ってきている感じはある。ある程度やりきったら晒そうとしてたんだけど、そう思い始めて2ヶ月くらいも経ってしまったし、まだアップデートされる可能性も十分あるけど現時点の環境を晒してみる。</p>
<p>COVID-19の影響でほぼ在宅業務な状態がつづいていて、環境が整ってきている感じはある。ある程度やりきったら晒そうとしてたんだけど、そう思い始めて2ヶ月くらいも経ってしまったし、まだアップデートされる可能性も十分あるけど現時点の環境を晒してみる。</p>
<h1>机まわり</h1>
<p><img src="https://lh3.googleusercontent.com/pw/ACtC-3ebVKvJUmJybhDUuCGKQidQyUMWVFgrnydyXZFnb0JKeFks7QiylXS9hnnTDs9iVWw8UcnZ0vGUrfbiS8-IB3lgu4yYpGZnWKffHPyMd1CZloBSmylaez2nlYakcXsAfOFv4e7w06-tKF_cGXD_Jhe8=w1303-h977-no?authuser=0"></p>
<p>L字の机っぽく見えるけど、それぞれ全く別の机を2つ組み合わせている。ちなみに2つとももともと持っていたもので、COVID-19 が起因となって購入したものではない。そしてこの置き方も狙ったわけではないのだけど、部屋の整理整頓のときにサブの机をたまたま今の配置に置いたら「これ便利なのでは?」ということに気づき、そのままくっつけて使うようになった。実際一つの机だけではちょっと紙の書類を出しただけですぐに散らかってしまったりすので助かってる。あと何故か積み上がってしまったラップトップマシンたちをいい感じに置けたのもまあよい。</p>
<p><img src="https://lh3.googleusercontent.com/pw/ACtC-3dHIJATdrp4IcxqRxoi1m-ik7LyeABqwv5obbtPWQISdILaOMzspuUPxlCxRMJ3YdDh9IHYTC_6F6TmdA8yVR2iRtay0T0k7pOcMffopk2gvWybcn1OK4W_7DW-yZPrK1u_eeMHyMtqVAbCuNIX7er6=w1303-h977-no?authuser=0"></p>
<p>メインの作業スペースとなる机はこんな感じ。
場所の都合上、あまり広い机を置けずこの大きさのものが限界だろうという状況なので机の上が狭くならないような工夫は可能な限りやっていて、モニター、タブレット、コンデンサマイクはアームで固定して宙に浮かすようにしている。これだけでも大分机の上は広くなる。またラップトップスタンドも活用してラップトップそのもので机の上のスペースを使わないようにも気を使っている。</p>
<p><img src="https://lh3.googleusercontent.com/pw/ACtC-3d8AqOBu2njw2jcigTTZaSlXwWW-o1JDoVvSTi5gWOI9EchgJAvnZQDetVXuConlP_9-9hz17qYC3jOZpt4zKgMpB_b8VW-A5YjeIgfzJVgGMakOE62jaf1EKkKkPUJLyKxSV4bAga86fCXzfHPAsgP=w1531-h1149-no?authuser=0"></p>
<p>左側には適当なフックをラックの穴にネジで止めた簡易的なラップトップ置き場も作っている。これでかなり効率的に置くことができていて結構気に入ってる。</p>
<h1>タブレット</h1>
<p>以下に書いているので割愛</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://note.com/laughk/n/nd8990b2226a0" data-iframely-url="//cdn.iframe.ly/UiQTQSd?iframe=card-small"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<h1>マイク</h1>
<p><img src="https://lh3.googleusercontent.com/pw/ACtC-3fnM03oDOiPy5V7ccys_LFtW6QjJ6ljhCnp3HRe8ejF-gXIcAy10_d0eTmP1irg76c4GgBsnrGAQep4WzpFDmsw0nf6xEzblJLUe4u5562Wg3FcCf-BR47MkfuZ8b8mA11xPj7dyh5y7EBJDn0tNsxU=w733-h977-no?authuser=0" width=400 ></p>
<p>前回のブログでもちょろっと書いているけど、マイクは USB コンデンサマイクを調達した。普段は Chrome タブレットにハブ経由でつないでリモートMTGの際に使っている。</p>
<p>このマイクにした理由は先程書いたとおり机の上の場所を可能な限り取りたくなかったというのと、 PC/タブレット/ヘッドホン 付属のマイクよりも高品質のマイクを使って MTG 参加者のストレスを減らしたかったというのが大きい。とくに今年はもう人と話す機会もリモートが中心なるだろうから品質の良いマイクは持っておいてなにも損は無いだろうと考えたのもある。</p>
<p>実際これを使った際の音の品質に関しては評判がいい。ただ、最近ちょっと値上がりしているなーと思っていたのもつかの間、2020-05-09 時点で在庫がまったくない状況になってるみたい。</p>
<p>参考: <a href="/2020/05/08/0000025.html">続・ラフなラボ – ポッドキャスト #terapyon_channel #15 のゲストとして出演した</a></p>
<h1>配線</h1>
<p><img src="https://lh3.googleusercontent.com/pw/ACtC-3eHP8KCe_KsbHNRonurUtNMxZPs5eCLzZJpz_VQogT4C5dUbp_GGiRsZqL8njiOzT8GQXdRW_2xN3m3ZQaZoj7rKTGctsEejHcl1Qlq_1D_7Q65UIF7oMMw_sl64-NWSGblPJAgnNeLw0_qKEpotS4M=w1303-h977-no?authuser=0" width=500 /></p>
<p>配線については可能な限り机の下に追いやり、やはり上の貴重な作業スペースを使わないようにしている。IKEA のケーブルオーガナイザーと足元における小さな本棚の上の部分に大きめなものは格納。その際コンセントの向きがネックになったりするんだけど、ダイソーでうってるコネクタがめちゃめちゃ役にたっている。</p>
<p><img src="https://lh3.googleusercontent.com/pw/ACtC-3cygQxe82muYEdjO0OB_JGHUJchTEL6bswidABAEDCZKjJL0IUBbLoJXQTqhlUgaekPSzRjvUPsY8HUaSSMh8h9r9RnltpTESjVy2sLZu_siV4MU496uqUn-b_ip1VU1JW4xtXuS_qVlvxzZ5pxUAx8=w733-h977-no?authuser=0" height=350 /></p>
<p>あと机の下に配線を追いやる際にマグネットがよいという情報も見かけたのでやってみている。手元の Type-C ハブがそのままだとくっつかなかったので、ダイソーで家具の転倒防止につかう金属板を買ってきて、それを両面テープとマスキングテープでくっつけて対処してる。</p>
<table align="center">
<tr><th></th><th></th></tr>
<tr>
<td>
<img src="https://lh3.googleusercontent.com/pw/ACtC-3fb6IMqW1SMLY6OyaJ3Ku5r5dphwDqIeLcJhUQ8i_gGbWF4y7nYwjT3GDmfJ6osQI0rxl7zcdj6FezHxw3V7fw3WtQdT1qlJc9n1U6Kz5irEfv9CSX4S4cK-X1Gg99RJNTyDOX64eFhITpLSs_jDPQZ=w733-h977-no?authuser=0" width=250>
</td> <td>
<img src="https://lh3.googleusercontent.com/pw/ACtC-3fYJkMdEWJhtxP20djjR7uhAyjd7_p_K_aun9uCHR-yhlWZa_lbTvzdoKL5lmRAAScz6SrJ2xvVLe6Hz8htxPJt4vnqiJwd1zPlxA0ZkAQAZS7NM6tLgeOvYv7F8LqBe37prPxXEr3KGCiqksViMZXo=w1303-h977-no?authuser=0" width=350 >
</td>
</tr>
</table>
<p>大きめなキーボードマウスパッドを置いてるのは、机の板の色が暗めなんだけど周辺ガジェットがことごとく色が黒くて見づらいという理由で置いてみている。なくてもいいっちゃいいんだけど、明るくなるのは結構よい。</p>
<h1>椅子</h1>
<p>椅子についてはこちらに書いているので割愛</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://note.com/laughk/n/n28b54c96d7cb" data-iframely-url="//cdn.iframe.ly/k9BV8wh"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<h1>利用しているものたち</h1>
<p>細かいところを説明しだすとキリがなくなるのであとは実際に使ってるもののリンクを貼っておく。</p>
<h2>Amazon で買えるもの</h2>
<table align="center">
<tr> <th></th> <th></th> <th></th></tr>
<tr>
<td>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B00BHRJKXI&linkId=e0267d659194d024327b4fea65fe965a"></iframe>
</td>
<td>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B00D747POK&linkId=114fcb8d39fcf70b7bf9ae520782e17a"></iframe>
</td>
<td>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=tf_til&t=laughk-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=B00C65C19K&linkId=adf8f183049e49d341e22c7b71a15f62&bc1=000000<1=_blank&fc1=333333&lc1=0066C0&bg1=FFFFFF&f=ifr"></iframe>
</td>
</tr>
<tr>
<td>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B00VRJHHDG&linkId=1b2434f45907090a649a429f838edf6a"></iframe>
</td>
<td>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B07NH8S9JL&linkId=d6ab4f59171f67b20c0804891d8814cd"></iframe>
</td>
<td>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B01L76YRO0&linkId=7b7a5ec16876b0f0f8bc77ee96e6f342"></iframe>
</td>
</tr>
<tr>
<td>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B07GLWQS61&linkId=ac6d10fec97b794318b09f02ba4c62a1"></iframe>
</td>
<td>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B07C9T4TTW&linkId=2c85c44951e58686964dce69ef4c47fc"></iframe>
</td>
<td>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B07TW1L6VY&linkId=9ebc995f1789da38e85b1bdba9d58a86"></iframe>
</td>
</tr>
<tr>
<td>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B07ZWYFNP6&linkId=2b9c3019b0173bebb54268902e7ed037"></iframe>
</td>
<td>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B06VWRDSLN&linkId=509f167928d028ef5cb6d10def1cc344"></iframe>
</td>
<td>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B07PF516CN&linkId=c4975c73d49b379a4bd4e571fee8e156"></iframe>
</td>
</tr>
</table>
<h2>Amazon 以外</h2>
<ul>
<li>サブの机<ul>
<li><a href="https://item.rakuten.co.jp/economy/f-88755/">【楽天市場】ワークデスク(幅110cm×奥行45cm) プレーン 45 CM-2010 SP【F-13520】:エコノミーオフィス-オフィス家具</a></li>
</ul>
</li>
<li>机のラック<ul>
<li><a href="https://item.rakuten.co.jp/office-com/oflusrh-1000">万能上置棚 机上ラック オフィスコムオリジナル ハイタイプ 2段 幅1000mm 色々な机に簡単取り付け 高さ8段階調節 机上台 ラック PCラック デスクラック デスク収納 本棚 OAラック 棚 机 デスク 100cm</a></li>
</ul>
</li>
<li>机の PC 置き場作成に使ったパーツ<ul>
<li><a href="https://www.monotaro.com/p/4170/0206/">3×25 (+)皿小ねじ (SUS316L)(パック品) 1パック(17個) 大阪魂 【通販モノタロウ】 41700206</a></li>
<li><a href="https://www.monotaro.com/p/4216/9617/?displayId=4">3.2×13×1.2 丸ワッシャー 特寸(ステンレス) 1パック(25個) 大阪魂 【通販モノタロウ】 42169617</a></li>
<li><a href="https://www.monotaro.com/p/4211/4186/?displayId=4">M3 6×1.6 板ナット(ステンレス)(パック品) 1パック(10個) 大阪魂 【通販モノタロウ】 42114186</a></li>
</ul>
</li>
<li>タブレット<ul>
<li><a href="https://www.yodobashi.com/product/100000001004203620/">ヨドバシ.com - Acer エイサー D651N-F14M [Chromebook Tab 10/ARM Cortex-A72 + ARM Cortex-A53 MPCore/メモリ 4GB/32GB eMMC/9.7型/Chrome OS/コバルトブルー] 通販【全品無料配達】</a></li>
</ul>
</li>
<li>Ergodash (セパレートキーボード)<ul>
<li><a href="https://yushakobo.jp/shop/ergodash/">ErgoDash | 遊舎工房</a></li>
<li><a href="https://yushakobo.jp/shop/mda-ortho-void/">MDA ORTHO VoID | 遊舎工房</a></li>
</ul>
</li>
</ul>ポッドキャスト #terapyon_channel #15 のゲストとして出演した2020-05-08T00:00:00+09:002020-05-08T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2020-05-08:/articles/2020-05-08-appeared-in-terapyon-channel/<p>先日 <a href="https://twitter.com/terapyon">@terapyon</a> さんのポッドキャスト <a href="https://podcast.terapyon.net/episodes/0016.html">#terapyon_channel</a> 第15回のゲストとして呼んでいただき、ポッドキャストデビューを果たした。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a data-iframely-url="//cdn.iframe.ly/ONgVpBj?iframe=card-small" href="https://podcast.terapyon.net/episodes/0016.html"></a></div></div>
<script async="" charset="utf-8" src="//cdn.iframe.ly/embed.js"></script>
<p>先日 <a href="https://twitter.com/terapyon">@terapyon</a> さんのポッドキャスト <a href="https://podcast.terapyon.net/episodes/0016.html">#terapyon_channel</a> 第15回のゲストとして呼んでいただき、ポッドキャストデビューを果たした。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://podcast.terapyon.net/episodes/0016.html" data-iframely-url="//cdn.iframe.ly/ONgVpBj?iframe=card-small"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<h1>きっかけ</h1>
<p>SNS で適当に感想をつぶやいたところ、Facebook にさらしていた作業スペースの写真と合わせて拾ってもらい「ゲストに一度出てみます?」とお誘いいただいて今回の機会は実現した。</p>
<h1>収録</h1>
<p>収録は ZOOM でつないだ状態で話しつつ、各自のローカル環境でも別々に録音をする感じで行った。</p>
<p>本編でもちょっと喋っているけど、ArchLinux な Thinkpad T490 の環境で録音した。
Linux はオーディオ周りあまり得意でなさそうな先入観をもっているんだけど、案外行けた感じ。ツールはクロスプラットフォームで利用可能な <a href="https://www.audacityteam.org/">Audacity</a> を使った。録音用途としては初めて使ったのだけど、雑に USB マイクを指した状態で録音を開始したらいい感じに取れたので簡単だった。</p>
<p>自分の分の音源を Dropbox で @terapyon さんに渡して残りの編集をお願いする形。
出来上がったデータを最初聞いたときは思いの他しっかり形になっていて、他人事のように「おおすげーw」と思った。</p>
<p>自分の録音した声は聞くと死にたくなるようなタイプのはずなんだけど、案外ちゃんと聞けたのもビックリ。</p>
<h1>はじめてのポッドキャスト出演</h1>
<p>@terapyon さんとは <a href="https://pyhack.connpass.com/">pyhack</a> の飲み会で同席する機会も多いので雑談の延長線上でゆるゆる話せるかなーと思っていた。ただ、いざ収録するとなると「コンテキストを知らない人に聞かせる」という意識が変に働いてしまい「余計なこと喋らないようにしよう」「極端な内輪ネタに走らないようにしよう」と言う感じにブレーキがかかってしまってなかなか思うように喋れなかったなーというのが正直な感想。編集後記で @terapyon さんも言っていたが、当日結構 ZOOM の遅延が発生しがちで更に探り探りしゃべることに拍車がかかってしまった感じもある。</p>
<p>他だと、コンテナ周りの話になったときには言語化していたはずの自分の中の理解がパッとでなくなってしまってた感じが正直あって、うまく説明しきれなかったり、踏み込みきれなかったり、単純に興味あることなのに結構抜け落ちてしまってる感じがあってやばいななんて思ったりもした。</p>
<p>あとは自分の喋り方の癖が結構悪く出てしまったと感じていて、ちょっと詰まったり間が開くとやたらと「まあ...」とかの余計な副詞を多用してしまう感じ直していかないとな... と反省したりもした。人前で話す機会はここ1年大分減っていたし、これからも黙ってればどんどん減っていってしまうので意識してやってかないとなと思った。</p>
<p>また機会があったらそのへんしっかりと意識してやりたい。</p>
<p>それにしても 「Rebuildfm に出てる方々は本当にすごいんだな...」 ということをめちゃめちゃ実感した。 </p>
<h1>おまけ: 使っていたマイク</h1>
<p>マイクに関してはフルリモート体制になり、以下のものを購入していたのだが今回の機会でも大活躍だった。机の上の場所を取りたくないという理由だけでえいやで買ったエントリモデルなのだけど、今の所評判がいフィードバックしかない。本当に買ってよかった。ただこのマイクは購入したタイミングでは 6,000円 くらいで買えたので確実に値上がりしてきてるな... と感じる。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://www.amazon.co.jp/MAONO-%25E3%2582%25B3%25E3%2583%25B3%25E3%2583%2587%25E3%2583%25B3%25E3%2582%25B5%25E3%2583%25BC%25E3%2583%259E%25E3%2582%25A4%25E3%2582%25AF-%25E3%2583%259E%25E3%2582%25A4%25E3%2582%25AF%25E3%2582%25B9%25E3%2582%25BF%25E3%2583%25B3%25E3%2583%2589-%25E3%2582%25A2%25E3%2583%25BC%25E3%2583%25A0%25E3%2582%25B9%25E3%2582%25BF%25E3%2583%25B3%25E3%2583%2589%25E4%25BB%2598%25E3%2581%258D-YOUTUBE/dp/B07GLWQS61" data-iframely-url="//cdn.iframe.ly/yIDyofs?iframe=card-small"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>SRE NEXT に行ってきた #srenext2020-01-27T00:00:00+09:002020-01-27T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2020-01-27:/articles/2020-01-27-srenext-2020/<p><img alt="srenext" src="/images/2020/01/2020-01-27-sre-next.jpg" witdh="450px"/></p>
<p>先週末に開催された SRE NEXT に参加をしてきたので、その参加ログを書いておく。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a data-iframely-url="//cdn.iframe.ly/uyH2l2H" href="https://sre-next.dev"></a></div></div>
<script async="" charset="utf-8" src="//cdn.iframe.ly/embed.js"></script>
<p><img alt=srenext src=/images/2020/01/2020-01-27-sre-next.jpg witdh=450px></p>
<p>先週末に開催された SRE NEXT に参加をしてきたので、その参加ログを書いておく。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://sre-next.dev" data-iframely-url="//cdn.iframe.ly/uyH2l2H"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<h2>当日の発表された資料など</h2>
<p>当日の発表資料などは以下の記事にまとまっているのでそちらを参照。なのであえてこのブログにスライドを埋め込んだりはしない。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="padding-bottom: 52.5%; padding-top: 120px;"><a href="https://qiita.com/Hassan/items/6f7fb1c206f77716ee2a" data-iframely-url="//cdn.iframe.ly/qjRvh33"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<p>当日足を運んでいながらも全部見れたわけではないので自分でも色々見てみるつもり。</p>
<p>また後ほど全部ではないが当日の動画も公開される模様。</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/srenext?src=hash&ref_src=twsrc%5Etfw">#srenext</a> 講演動画ですが、すべてのセッションではないですが公開予定です!後日、参加者の皆様に、講演動画URLを先行で案内します!</p>— SRE NEXT (@srenext) <a href="https://twitter.com/srenext/status/1220956631267069952?ref_src=twsrc%5Etfw">January 25, 2020</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<h2>当日の過ごし方</h2>
<p>基本的にはしっかりトークセッションを聞いて回っていた。</p>
<p>最近はカンファレンスに参加する際は適当に会場をフラフラしてスポンサーセッションをみたりするのも大事だなーと思っていて、あまりトークばっかりにならないようにしているのだけれど、今回は気になるセッションが非常に多く結果的にそうなったという感じ。参加したものは以下</p>
<ul>
<li>特別ヨガプログラム(途中から)</li>
<li><a href="https://sre-next.dev/schedule#c1">[C1] 絶え間なく変化するメルカリ・メルペイにおけるSREの組織と成長</a> </li>
<li><a href="https://sre-next.dev/schedule#a2">[A2] パフォーマンスを最大化するための SRE のオンボーディング事例</a> </li>
<li><a href="https://sre-next.dev/schedule#b4">[B4] 冗長性と生産性を高めるハイブリッドクラウド環境の実現</a>] </li>
<li><a href="https://sre-next.dev/schedule#c5">[C5] スクラムを1年回してSREと開発組織がどう変わったのか</a></li>
<li><a href="https://sre-next.dev/schedule#a6">[A6] SREがセキュアなWebシステムを構築、維持するためにやれることはなにか</a> </li>
<li><a href="https://sre-next.dev/schedule#a7">[A7] サイト信頼性エンジニアリングの原則</a></li>
<li><a href="https://sre-next.dev/schedule#a7">[A8] Webサービスを1日10回デプロイするための取り組み</a></li>
<li><a href="https://sre-next.dev/schedule#a7">[A9] パネルディスカッション</a> </li>
</ul>
<p>懇親会にはしっかり参加してきたのだけど、
久々にお会いできた方、はじめましての方も含めてどの方とも色々話が盛り上がって非常に楽しく有意義な時間だった。</p>
<h2>雑感</h2>
<p>雑つらつら書いていく</p>
<ul>
<li>ヨガセッションは間に合わなければまあしゃーないくらいの感覚だったのだけど、ギリギリ間に合い途中から参加できた。セミナールームで机に座りながら、しっかりみんなストレッチしている光景がなかなかおもしろかったけど、ストレッチの内容自体もよかった。</li>
<li>基調講演はいずれも非常によかった。研究視点からの話と現場での実際の取り組みの話とでそれぞれのスピーカーの方のカラーが出ていたのもすごくよかった。</li>
<li>「人間の認知不可の上昇」のあたりは個人的にも色々と思い当たるところがあるなーと感じていた</li>
<li>最近の自分の関心傾向からなのか結構組織的な話を聞きに行ったなーと感じるけど、そういったセッションや話題も多く、自分以外でも色々考えたり悩んだりしている人が多いのかなーと思ったりしていた</li>
<li>特にスクラムの話は実際にやってのけているという事例に出会うことがこれまでなかったので聞けたのは良かった。もうちょいお話伺おうかと思ったがスピーカーの方見つけることができなかったのが残念</li>
<li>全体的にトークセッションの内容が詰め詰めな感じであまりゆっくりスポンサーセッションとか回れなかったなーというのはある。SREクイズトライしそこねた。</li>
<li>トークセッション自体は20分トーク多めで体力の消費が結構少なかったのはよかった。ただ「話が盛り上がる切る前に終わってしまう」みたいなケースもそれなりにあったんじゃないかなーという気もする。</li>
<li>とはいえトークセッション、本当にどれも聞きに行きたい感じだったので動画は期待してる。</li>
<li>懇親会はかなり楽しかった。「普段 SRE やられているんですか?」的な話に対する返しが話す人によって毎回違うのが面白かった。やっぱり SRE は役割としてチーム内に混ざっているケースもあれば「SRE エンジニア」とやっている人もいるしで組織によっての状況の違いなんだろうなーと改めて感じた</li>
<li>「SRE = インフラ」とは限らない。という感じの話題もちらほら自然に出てきていたけどホントそうだよなーと実感。現状は関心がある人がインフラ寄りな方が多いんだろうなー。と改めて思った。懇親会で「CloudNative もそうだよねー」みたいなことを話した。</li>
<li>SRE という役割を今一度しっかりと確認できた感じで、本当に参加してよかったカンファレンスだった。SRE Lounge の方も今後機会があればお邪魔したい。</li>
</ul>2019年振り返り2019-12-31T00:00:00+09:002019-12-31T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2019-12-31:/articles/2019-12-31-end-of-2019/<p>気がつけば年末に突入。今年は静かではあったけど大きな変化が盛りだくさんな年だった。
振り返っとく</p>
<p>今年は仕事がここ数年で一番落ち着いてたかなーという状況。(まあそれでもそこそこ忙しくはあった) 一方でプライベート面はかなり忙しかった。妻が仕事に復帰し、そのなかで子供二人を見ながら生活というのは本当に大変。</p>
<p>気がつけば年末に突入。今年は静かではあったけど大きな変化が盛りだくさんな年だった。
振り返っとく</p>
<p>今年は仕事がここ数年で一番落ち着いてたかなーという状況。(まあそれでもそこそこ忙しくはあった) 一方でプライベート面はかなり忙しかった。妻が仕事に復帰し、そのなかで子供二人を見ながら生活というのは本当に大変。</p>
<h1>個人活動</h1>
<p>今年は意図的に個人活動をセーブした状況。それでもそこそこのイベントには足を運ぶことができた。</p>
<h2>もくもく会</h2>
<p>合計で7回。体調崩して行けなかった回もあったりしたが、結構足は運べたと思う。
もくもく会は座学ではなく、自分の学習時間を純粋に確保できる面が大きいので、できたらもっと頻度増やしたいのだけどなーというところ。</p>
<ul>
<li><a href="https://mokupy.connpass.com/">mokupy</a> 1回</li>
<li><a href="https://pyhack.connpass.com/">pyhack</a> 6回 </li>
</ul>
<h2>カンファレンス</h2>
<p>今年は純粋に参加者として行き、それぞれの界隈の状況を目で見て肌で感じてきたという状況。
また海外に行けるほど余力もなかったので今年はこんな状況。</p>
<ul>
<li><a href="https://cloudnativedays.jp/cndt2019/">CloudNative Days 2019 Tokyo</a></li>
<li><a href="https://builderscon.io/tokyo/2019">Builderscon Tokyo 2019</a></li>
<li><a href="https://pycon.jp/2019/">PyCon JP 2019</a></li>
</ul>
<p>以下は行く予定だったのだけど体調崩して泣く泣く欠席。
Go は今年から業務で触り始めた関係で是非とも行きたかったのでこれは本当にくやしかった...</p>
<ul>
<li><a href="https://gocon.connpass.com/event/148602/">Go Conference 2019 Autumn</a> </li>
</ul>
<h2>その他イベント</h2>
<p>Gocon こそ行けなかったものの、行ける範囲で Go 関連のイベントに少し足を運んでみたという感じ。</p>
<ul>
<li><a href="https://golangtokyo.connpass.com/event/147175/">golang.tokyo</a></li>
<li><a href="https://gocon.connpass.com/event/153665/">Go Release 10 Year Anniversary Party in Tokyo</a></li>
</ul>
<h1>仕事面</h1>
<p>転職がメインイベントではあったのだけど、前職でやっていた最後の仕事もなかなか大きかった。今となっては「これ今年だったっけ...?」というくらい前のことに感じてしまうが今年の出来事であった。</p>
<p><a href="https://memo.laughk.org/2019/03/11/000019.html">SQUEEZEを退職しました</a></p>
<p>そして3月に <a href="https://wacul.co.jp">WACUL</a> に転職をした。
その関係でメインでさわる技術スタックが結構変化し、特に大きかったのはメインの言語が Python ではなく Go になったということだと思う。</p>
<p>今は雑に言うと Google Analytics と連携していい感じのレポートを出しつつ提案データを示し、施策の進捗管理をいい感じできる(ことを目指している)プロダクトのバックエンドの開発に関わりつつ、そのシステムのインフラも見る感じのことを仕事としてる。関わるプロダクトの特性が大量のデータ分析バッチを相手にするという感じで、これまで触れてきたシステムとはなかなか勝手が違い絶賛苦戦中...
Go そのものもそうだし、Google Analytics や WEB マーケティングとかそのへんの知識をどんどん身につけていかないと自分の仕事で関わってるものがなんなのか見失いがちになってしまうのでこれはもっともっとやってかないとなーという状況。</p>
<p>ただ今年はあまり無茶苦茶やることもなくなり、基本的には平和に過ごすことができた。本当に今の職場には感謝。</p>
<h1>プライベート</h1>
<p>仕事をセーブできるようになり、家庭や自分のことにも色々目を向けられるようになった。
日々の睡眠時間もようやくおちついてきて。やっと6時間くらいはコンスタントに眠れるようになった。そのおかげか逆にしばらく蓄積された疲労を感じるようになり、もとの調子に戻るまで結構時間がかかった。</p>
<p>休暇的な話だと元号変更に伴うスペシャルゴールデンウィークでは余裕をもって実家に帰ることができたし、3年ぶりに夏休みをちゃんと取得できた。
特に夏休みは1日子供の保育園の体験保育をやったりもしたが、4日ほど本当に自分のための休暇を取得することができ、やっとまともな休息が取れた。</p>
<p>日々の生活リズムもそこそこ安定して、フィットネスジム通いも再開、気がついたら体脂肪が22%とかなってたのだけど16%くらいまで落として危機を脱することもできた。</p>
<p>ほかだと通勤時間電車で座って過ごすことも増えたので気が向いたときに note.com に個人的な日記っぽいものを書くようにもなった。</p>
<p>ここまで見てみるといいこと尽くめな感じあるが、もちろん大変だったことも多い。</p>
<p>基本的に共働きで子供二人という状況自体がやっぱり大変で、子供が家に居るときは常に面倒を見続けなければならず最低限の保育園への送迎に食事の準備と洗濯、お風呂で結構体力を使い果たしてしまう日々が続く。
目先のことばかりでなく子供の成長に合わせて揃えなければいけないものの準備などもそうだし、自分自身の自己研磨的な活動もやりたいのだけど手が回せる時間が本当に限られてしまっているなーというのは日々感じている。
幸い、もくもく会には行かせてもらったりたまにカフェに行かせてもらったりはしているので全く時間がないというわけでもないけど、それでも結構大変だなーという状況は続く。
時には睡眠時間を削ったりで色々試行錯誤はしているけど、なかなか現実的にはまる手段が出てこないなーというのが正直なところ。せっかく時間が確保できても疲れ果てていて集中力を伴う作業ができずに眠ってしまうことも多くてそれも悩みどころ。</p>
<h1>総括っぽいやつ</h1>
<p>今年は仕事環境が変わり、仕事でむちゃくちゃすることはなくなったものの技術スタックの変化が大きかった。
また、プライベート面はようやくまともに今の家庭の状況や自分の健康面に面と向き合うことができた。という感じだと思う。</p>
<p>自分の身の回りの立て直しにようやく取り掛かれたとかそんな感じ。</p>
<p>技術的な試行錯誤、キャッチアップがあまり満足にできていないという状況が引き続きというのは良くないので
今年ようやくできた身の回りの立て直しをしっかりやって、来年以降はもっと具体的な問題を潰しにかかりたい。</p>
<p>そんな年だったかな。</p>PyCon JP 2019 行ってきた #pyconjp2019-11-04T00:00:00+09:002019-11-04T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2019-11-04:/articles/2019-11-04-pyconjp-2019/<p>9/16,17 に行われた PyCon JP 2019 に参加してきた。
すでに2ヶ月近く経ってしまい、かなりブログを書くのが遅くなってしまった...</p>
<p><img src="/images/2019/11/2019-11-04-1.jpg" width="350"/></p>
<p>ちなみに今回は初めて託児所を利用させてもらいそのへんの感想は別途分けて書いた。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a data-iframely-url="//cdn.iframe.ly/HcMH2yU" href="https://note.mu/laughk/n/n47c9e61dca8a"></a></div></div>
<script async="" charset="utf-8" src="//cdn.iframe.ly/embed.js"></script>
<p>9/16,17 に行われた PyCon JP 2019 に参加してきた。
すでに2ヶ月近く経ってしまい、かなりブログを書くのが遅くなってしまった...</p>
<p><img src=/images/2019/11/2019-11-04-1.jpg width=350></p>
<p>ちなみに今回は初めて託児所を利用させてもらいそのへんの感想は別途分けて書いた。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://note.mu/laughk/n/n47c9e61dca8a" data-iframely-url="//cdn.iframe.ly/HcMH2yU"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<h1>今年の過ごし方</h1>
<p>PyCon JP は 2015 から参加していて今年で5回目。 今年は何気に初めて「ただの参加者」を満喫した感じ。というのも過去参加した PyCon JP は以下のような感じでずっと何かしら忙しく過ごしていたのであった</p>
<ul>
<li>2015年 初参加でLTで登壇</li>
<li>2016年 トークスピーカー</li>
<li>2017年 本を執筆した縁でパネルディスカッションに参加</li>
<li>2018年 当時所属していた会社がスポンサーブースを出した関係で持ち回りでその対応</li>
</ul>
<p>今年はCFPも出しておらず(出す暇がなかった😂)、所属企業がスポンサーブースを出すということもなかったので、本当に何もなしのただの一般参加者として過ごした。なのでこれまでで一番余裕をもって参加することができたと思う。</p>
<p>そんな状態でどう過ごしたかといえば、あまりトークを集中して聞きまくるという感じにはしなかった。スポンサーブースに遊びに行ったり眺めたり、ポスターセッションをじっくりみたり、久しぶりに会うひとたちと「最近どうですか」みたいな感じでおしゃべりすることに費やした感じ。</p>
<p><img src=/images/2019/11/2019-11-04-2.jpg width=450></p>
<p>2日間通して聞きに行ったトークは以下の4つのみだった。</p>
<ul>
<li>Yet Another Isolation - Debian Packageと紐づく環境分離</li>
<li>Pythonで切り開く新しい農業</li>
<li>Kubernetes と JupyterHub で構築する機械学習eラーニングサイト</li>
<li>入門 自作検索エンジン</li>
</ul>
<p>実は他にも聞きに行こうと思ったのだけど会場への入室に失敗し聞きに行けなかったのは以下。場所をミスったり、気がついたら 2,3 分過ぎてしまっていて「15分トークだから今から行ってもな...」となってしまったりだった。</p>
<ul>
<li>Pythonを使ったAPIサーバー開発を始める際に整備したCIとテスト機構</li>
<li>チームメイトのためにdocstringを書こう</li>
</ul>
<p>1日目はオフィシャルパーティーにも参加、今年は去年と微妙にパーティー会場となるエリアが違い、開始直後が身動きが取れない感じではあったものの、最終的に広めの会場が開放されていろいろ歩き回れた。あとビールの減りは妙に早かった気がして後半はハイボールばっかり飲んでいたような。そして顔見知りで適当に2次会で入った店で海外からの PyCon JP 参加者と一部 PyCon JP スタッフの方(?)が飲んでいて混ざる形になったのは面白かった。</p>
<p>2日目は特にオフィシャルパーティーとかはないのだけれど、これまた適当な顔見知りメンツで飲みに行った。これはたまたまなのかわからないが、去年の PyCon JP が終わったあとに行った店と同じところで笑った。ビールを喰らいつつ、この場ではいろいろディープな話ができたような気がする。</p>
<p><img src=/images/2019/11/2019-11-04-3.jpg width=350></p>
<h1>その他雑感</h1>
<ul>
<li>託児所は本当にありがたかった(詳細は Note の方に書いた)</li>
<li>トークを聞くことをメインとせずに過ごすと座る機会がなく、終日ほぼ立ちっぱなしになってものすごく疲れてしまった</li>
<li>お弁当、チケットを考慮すると提供してもらえるだけでかなりすごいことなのだけど、どれも同じような内容に見えてしまったことと落ち着いて座れそうな場所があまりなさそうで、ゆったり座ることも加味して外食にしてもよかったかなと思ってしまった。</li>
<li>実際の会場に居るのにもかかわらず、トークセッションの会場に入れず何故かその場でオンラインのライブを見ることになるケースが発生するのは想定外だった。ちゃんとしたヘッドホン持ってかないといろいろ厳しい。</li>
<li>これも会場の制約だけど、やっぱり充電スペースが十分とは言えない感じで参加者はPCを持ち歩くという前提自体があまりマッチしてないかもなーという気はした。Type-C で給電可能なPCならモバイルバッテリーで頑張れそうな気もするけど。</li>
<li>ipython + Elasticsearch のネタで飛び込み LT に申し込んだものの、くじ引きで外れた。ちょっと残念だったが、まあトークではいい話が聞けたのでそれはよし。</li>
<li>2日目が終わったあとの飲みで、ジャンルをもう少し絞ったもう少しエッジが効いた話ができる場があるといいかもねーみたいな話をした。Djangocongress みたいな。</li>
</ul>
<p>今年は結構落ち着いて楽しむことができた感じはしつつも、今年に入ってから仕事のメインで Python から少し離れてしまったことと、最近あまり目立ったアウトプット・インプットができてなかったなーということも感じることができた気がしている。「最近の Python のトレンドちゃんと追いきれていないなー」という感じの焦りと寂しさと悔しさが入り混じった、なんかこう「もっとやってかないとやばいなー」ということを感じることができたのが今回の一番の収穫だったかもしれない。</p>
<p>来年は少し時期が早まっての開催になるけれど、ちゃんと参加できるかなー。今度はアウトプットの準備を整えた上で参加したい。</p>ブログのホスティング先を Vultr から Cloud Run に移行した2019-07-16T00:00:00+09:002019-07-16T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2019-07-16:/articles/2019-07-16-move-to-cloudrun-from-vulr/<p>タイトルの通り、これまでこのブログは Vultr の VPC 上で起動した h2o 経由で配信をしていたのだけど、
Cloud Run に移行したのでその辺もろもろ記録として書いておく。</p>
<p>タイトルの通り、これまでこのブログは Vultr の VPC 上で起動した h2o 経由で配信をしていたのだけど、
Cloud Run に移行したのでその辺もろもろ記録として書いておく。</p>
<h1>Cloud Run</h1>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://cloud.google.com/run/" data-iframely-url="//cdn.iframe.ly/LaHLamD?iframe=card-small"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<ul>
<li>GCP の新サービスで Docker コンテナをサーバレスで実行できるというもの。まだベータ。</li>
<li>自分で Docker image を用意さえできればそれ以外の縛りは無いっぽい(雑な解釈)</li>
</ul>
<h1>それ〇〇でよくね?</h1>
<p>このブログは static site generator の <a href="https://github.com/getpelican/pelican/">pelican</a> で Markdown or ReST をビルドしたものを利用した静的サイトなので、正直他にもっと楽にいい感じにブログ環境は整えられるとは思っている。
Netlity とかはよく聞くし、S3 + Cloudfront でもいいし、Github Pages でもよい。なんだけど、せっかく自分で好き勝手できるサイトでもあるので、興味のあるサービスとか技術まわりをさわる実験台にしたいという思いもあって敢えて手をかけているというところが大きい。</p>
<p>実際、現状の業務でなかなか触る機会がなかった GCP をそこそこ触ってなるほどなーと実感できる機会を今回は得た。</p>
<h1>ざっくり before/after</h1>
<h2>before</h2>
<ul>
<li>ブログのソースは gitlab.com で管理</li>
<li>gitlab-ci を利用<ul>
<li>commit 発生時にビルド用の docker image <a href="https://hub.docker.com/r/laughk/pelican-sitebuilder">laughk/pelican-sitebuilder</a> を使って CI を回し、直接コマンドを実行してサイトを生成</li>
<li>master commit の場合は生成したサイトコンテンツを rsync + ssh で VPC に転送する形で CI 経由でデプロイ</li>
</ul>
</li>
</ul>
<h2>after</h2>
<ul>
<li>ブログのソースは gitlab.com で管理</li>
<li>gitlab-ci を利用<ul>
<li>commit 発生時に <a href="https://hub.docker.com/r/google/cloud-sdk/">google/cloud-sdk</a> で CI を回し、 dind で <a href="https://hub.docker.com/r/laughk/pelican-sitebuilder">laughk/pelican-sitebuilder</a> を docker run してサイト生成</li>
<li>生成したコンテンツを含んだ docker image の build と gcr への push </li>
<li>master commit の場合に <code>gcloud beta run deploy</code> を実行</li>
</ul>
</li>
</ul>
<h1>やったこと</h1>
<p>そんなわけで今回の移設で大体以下のことをやった</p>
<ul>
<li>コンテンツを突っ込めばいいだけの dokcer image を作成</li>
<li>GCP の使い方や gcloud コマンドの使い方を色々試行錯誤 </li>
<li>独自ドメインの登録とマッピング、そしてVPCからの切り替え</li>
<li>gitlab-ci.yaml の更新</li>
</ul>
<h2>コンテンツを突っ込めばいいだけの dokcer image を作成</h2>
<p>このサイトは静的サイトなので適当な HTTP サーバを用意して配信する必要がある。特にこだわりが無いのであれば nginx の公式 image を使ってやるのが手っ取り早いし色々いいんだろうけど、
せっかくなので h2o の image を用意してやってみることにした。</p>
<p>で、これを用意。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://github.com/laughk/docker-h2o" data-iframely-url="//cdn.iframe.ly/3TrO2UN"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<p><code>h2o.conf</code> を用意して <code>/etc/h2o.conf</code> に copy して、配信したい静的コンテンツは <code>/srv</code> 配下に置くということだけを前提にしている。
あとコンパイル周りで下手にハマりたくなかったので ubuntu の image を使っている。</p>
<p>自分用と割り切っていてドキュメントとか全く用意できていない...</p>
<h2>GCP の使い方や gcloud コマンドの使い方を色々試行錯誤</h2>
<p>まず、 gcloud コマンドや、そもそもの GCP の使い勝手が全然わかっていなかったのでコンパネからガチャガチャやったり、適当にコマンド実行して色々作ったり壊したりして感覚を掴んだ。
公式のドキュメントにもコンパネでやる場合と CLI でやる場合の両方が解説されてたりしてやりやすかった。</p>
<p>あと Cloud Run に関しては以下の記事も参考にさせてもらった。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://medium.com/google-cloud-jp/cloud-run-%25E3%2582%2592%25E6%259C%2580%25E9%2580%259F%25E3%2581%25A7%25E8%25A7%25A6%25E3%2581%25A3%25E3%2581%25A6%25E3%2581%25BF%25E3%2582%258B-6e42021307d4" data-iframely-url="//cdn.iframe.ly/Zw5NE4O?iframe=card-small"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<p>この当たりで、以下の事を把握</p>
<ul>
<li>Cloud Run で実行するコンテナは GCR に push されてる image でないといけない (Gitlab の registory はダメだった)</li>
<li><code>gcloud builds submit</code> は必須じゃない。<ul>
<li>むしろ git 管理下でないファイルを突っ込もうとしたら色々ハマった</li>
<li>ローカルで build した image を <code>docker push gcr.io/:project_id/:image_name</code> しておけばよい</li>
</ul>
</li>
<li>docker container で Listen する PORT 番号を環境変数に持たせてあげる必要がある。<ul>
<li>ref. <a href="https://cloud.google.com/run/docs/migrating?hl=ja#listen_on_the_port_defined_by_the_port_environment_variable">Migrating an Existing Service | Cloud Run Documentation | Google Cloud</a></li>
<li>Dockerfile に <code>ENV PORT (PORT番号)</code> を入れとかないと上手く起動できない</li>
</ul>
</li>
</ul>
<h2>独自ドメインの登録とマッピング、そしてVPCからの切り替え</h2>
<p>ここが結構ハマったところ。
とりあえずコンテナ化をして deploy してみるまではできたのたのだけど、いざ自分のドメインをセットしようと「カスタムドメインを管理」からマッピングの設定に行くも、
対象となるサービスが真っ白で何だこりゃ... となってしまった。</p>
<p>ここで GCP に nameserver 移さなきゃダメかなーと勘違いをしてしまい、「これは見送りかな...」とまで考えてしまったのだけど、雑に Tweet したら中のひとから「 nameserver 移さなくてもできるよー」という旨の Tweet をいただいた。
これがなかったら諦めていたかもしれない... 感謝 :pray:</p>
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">You should be able to keep your domain and DNS provider. <br>When you setup a custom domain, you you be asked to update your DNS with a A or CNAME record</p>— Steren (@steren) <a href="https://twitter.com/steren/status/1150567175599452161?ref_src=twsrc%5Etfw">July 15, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>実際対象となるサービス部分が真っ白になってしまった原因は試しに作った Cloud Run のサービスを一回全部消してしまっていたためで、
ちゃんとデプロイされた状態で「カスタムドメイン管理」に移動したらちゃんと設定をすることができた。</p>
<p>カスタムドメインの設定は使いたいドメインを GCP に登録して、Cloud Run のサービスにドメインをマッピングするという流れでやる。
登録の際に検証するドメインはサブドメインでなくルートドメインでやる必要がある点に注意すれば大丈夫なはず。
指定された内容の TXT レコードを追加すればよい。</p>
<p><img alt="image" src="/images//2019/07/2019-07-15-3.png"></p>
<p>認証がされたらマッピングの設定が最後までいけるようになるのでやる。</p>
<p><img alt="image" src="/images//2019/07/2019-07-15-2.png"></p>
<p>その際に「この内容で CNAME レコードを設定してね」と出るのでここも従って対応する。</p>
<p><img alt="image" src="/images//2019/07/2019-07-15-1.png"></p>
<p>最初は <code>/etc/hosts</code> でちゃんと表示されることを確認してから CNAME を設定しようとしたものの、
CNAME が反映されないと SSL 証明書も生成されずに表示の確認しようもなかったので、エイヤで切り替えまでやってしまった。
初回のSSL証明書生成に15分くらいかかってしまうので、切り替え中にブラウザでアクセスするとエラーになってしまうのだけど
「まあ自分のブログだし...」とそこは割り切った。</p>
<h2>gitlab-ci.yaml の更新</h2>
<p>無事に Cloud Run に切り替えられたところで、自動デプロイ周りも変更した。
static site generator によるブログの場合正直これが止まってしまうのはつらいので。</p>
<p>VPC 時代も直接コマンド叩いて生成したサイトのコンテンツを VPC にせっせと rsync してもらう感じに自動化はしていたのだけど、
マネージドな環境にのっかったのでもうちょっと今っぽいやり方に変更。</p>
<p>変更後の <code>.gitlab-ci.yaml</code> は以下。</p>
<div class="highlight"><pre><span></span><code><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">google/cloud-sdk:alpine</span><span class="w"></span>
<span class="nt">variables</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">DOCKER_HOST</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">tcp://docker:2375/</span><span class="w"></span>
<span class="w"> </span><span class="nt">DOCKER_DRIVER</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">overlay2</span><span class="w"></span>
<span class="w"> </span><span class="nt">PELICAN_BUILDER_IMAGE</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">laughk/pelican-sitebuilder:2019-05-19T073000</span><span class="w"></span>
<span class="w"> </span><span class="nt">BUILD_IMAGE</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">gcr.io/${PROJECT_ID}/memo.laughk.org</span><span class="w"></span>
<span class="nt">services</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">docker:dind</span><span class="w"></span>
<span class="nt">stages</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">build</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">docker</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">deploy</span><span class="w"></span>
<span class="nt">before_script</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">apk add --no-cache git docker</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">gcloud auth activate-service-account --key-file ${GCLOUD_SERVICE_KEY}</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">gcloud config set project ${PROJECT_ID}</span><span class="w"></span>
<span class="nt">site_build</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">stage</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">build</span><span class="w"></span>
<span class="w"> </span><span class="nt">script</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">git clone https://github.com/laughk/pelican-hss</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">docker run -v "$(pwd):/project-root" -v "$(pwd)/pelican-hss:/my-theme" ${PELICAN_BUILDER_IMAGE} builder -T -c publish</span><span class="w"></span>
<span class="w"> </span><span class="nt">artifacts</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">paths</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">output/</span><span class="w"></span>
<span class="nt">docker_build_and_push</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">stage</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">docker</span><span class="w"></span>
<span class="w"> </span><span class="nt">script</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">gcloud auth configure-docker</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">docker build -t ${BUILD_IMAGE}:${CI_COMMIT_SHORT_SHA} .</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">docker push ${BUILD_IMAGE}:${CI_COMMIT_SHORT_SHA}</span><span class="w"></span>
<span class="w"> </span><span class="nt">dependencies</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">site_build</span><span class="w"></span>
<span class="nt">deploy_to_cloudrun</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">stage</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">deploy</span><span class="w"></span>
<span class="w"> </span><span class="nt">script</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">gcloud components install beta</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">gcloud beta run deploy memo-laughk-org --project ${PROJECT_ID} --image=${BUILD_IMAGE}:${CI_COMMIT_SHORT_SHA} --region us-central1 --platform=managed</span><span class="w"></span>
<span class="w"> </span><span class="nt">only</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">master</span><span class="w"></span>
<span class="w"> </span><span class="nt">dependencies</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">docker_build_and_push</span><span class="w"></span>
</code></pre></div>
<p>簡単にポイントだけメモしておくと以下</p>
<ul>
<li><code>service: ["docker:dind"]</code> で docker in docker ができるようになる<ul>
<li>ref. <a href="https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#use-docker-in-docker-executor">Building Docker images with GitLab CI/CD | GitLab</a></li>
</ul>
</li>
<li><code>GCLOUD_SERVICE_KEY</code> には GCP のサービスアカウントの秘密鍵(json形式)の中身を突っ込んでいる。 variables の type を file にしているので、この環境変数自体は file パスになる。 <code>cat > filename.json</code> とかしなくていいので便利。<ul>
<li>ref. <a href="https://docs.gitlab.com/ee/ci/variables/#variable-types">GitLab CI/CD environment variables | GitLab</a></li>
</ul>
</li>
<li>このジョブを実行する際の最低限の Role は「Cloud Build 編集者」「サービス アカウント ユーザー」「Cloud Run 管理者」「ストレージ管理者」「閲覧者(project)」でいけた<ul>
<li>Cloud Run のデプロイには 「サービス アカウント ユーザー」 がないとダメだった</li>
</ul>
</li>
</ul>
<h1>Cloud Run 移設やってみて</h1>
<ul>
<li>ずっとやれてなかった GCP を触る時間がやっとつくれた</li>
<li>Cloud Run の「Docker image さえ用意すればOK」感が静的サイトでも結構ガチャガチャクラウドサービス触れていい感じ</li>
<li>デプロイ周りもシェルスクリプトで頑張る感じが減ってやりやすくなった</li>
</ul>
<p>という感じで総じてやってよかったなというのが今の所の所感。あとは1ヶ月くらい動かしてコストも見ながら最終的にどうするか決めようかなという感じ。
Vultr も十分安いので...</p>
<h1>追記 (2019-07-17)</h1>
<p>日本リージョンでも Cloud Run が使えるようになったので早速切り替えた。</p>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">日本リージョン来たので早速切り替えた。追加で asia-northeast1 にデプロイしてドメインマッピングは一度削除してやり直したけど、結構スムーズに切り替わった感想</p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/1151238945641922561?ref_src=twsrc%5Etfw">July 16, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p><img alt="image" src="/images//2019/07/2019-07-15-4.png"></p>pelican-hss v2.0.1 をリリースした2019-05-19T00:00:00+09:002019-05-19T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2019-05-19:/articles/2019-05-19-pelican-hss-v2-release/<p>このブログのテーマ <a href="https://github.com/laughk/pelican-hss">pelican-hss</a>、 ちまちま手を加えるとかしていたのだけど、気がついたら 2年半くらい release をしておらずな状態で、今回手を加えたタイミングで溜まっていた分を一度にリリースするという形をとった。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a data-iframely-url="//cdn.iframe.ly/NQ39Xj1" href="https://github.com/laughk/pelican-hss"></a></div></div>
<script async="" charset="utf-8" src="//cdn.iframe.ly/embed.js"></script>
<h2>リリース内容</h2>
<p>リリースはこちら</p>
<p><a href="https://github.com/laughk/pelican-hss/releases/tag/v2.0.0">Release v2.0.0 · laughk/pelican-hss</a></p>
<p>このブログのテーマ <a href="https://github.com/laughk/pelican-hss">pelican-hss</a>、 ちまちま手を加えるとかしていたのだけど、気がついたら 2年半くらい release をしておらずな状態で、今回手を加えたタイミングで溜まっていた分を一度にリリースするという形をとった。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://github.com/laughk/pelican-hss" data-iframely-url="//cdn.iframe.ly/NQ39Xj1"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<h2>リリース内容</h2>
<p>リリースはこちら</p>
<p><a href="https://github.com/laughk/pelican-hss/releases/tag/v2.0.0">Release v2.0.0 · laughk/pelican-hss</a></p>
<p>変更内容は大体以下のような感じ</p>
<ul>
<li>google plus ボタンの廃止</li>
<li>google analytics 用に使っていた <code>ga.js</code> を <code>analytics.js</code> に切り替えた<ul>
<li><code>ga.js</code> はだいぶ前にサポート終了していた</li>
</ul>
</li>
<li>LESS から sass へ変更</li>
<li>fontawesome のバージョンアップ</li>
<li>その他細かなデザイン修正</li>
</ul>
<p>また、特にそれ用に変更はしていないものの、 Pelican 4.0 でもちゃんと動作することも確認済み。</p>
<h3>追記</h3>
<p>このエントリをシェアしようとしたら Tweet ボタンにバグがあったので修正... ドッグフーディングしておいてよかった ...
それに伴ってこのエントリのタイトルも修正した。</p>
<p><a href="https://github.com/laughk/pelican-hss/releases/tag/v2.0.1">Release v2.0.1 · laughk/pelican-hss</a></p>
<h2>その他</h2>
<p>あとはこのブログでは逐一最新を使ってたのだけど、公式テーマ集リポジトリへのフィードバックがずっと滞っていたので今回は忘れずに PR を出した。</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://github.com/getpelican/pelican-themes/pull/647" data-iframely-url="//cdn.iframe.ly/RVibIxS"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<p>PR がマージされれば公式テーマ側でも反映されるはず。pelican-hss 自分の使いやすいテーマという立ち位置は変わらないので、ちまちまとでも更新はつづけてきます。</p>SQUEEZE を退職しました2019-03-11T00:00:00+09:002019-03-11T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2019-03-11:/articles/2019-03-11-goodbye-squeeze/<p>近況です。この間もちらっと <a href="https://twitter.com/laugh_k/status/1098906147262652416">Tweet していた</a> けれど株式会社 SQUEEZE を退職しました。3週間ほど有給消化をしていましたが今日からは所属も変わりました。</p>
<p>近況です。この間もちらっと <a href="https://twitter.com/laugh_k/status/1098906147262652416">Tweet していた</a> けれど株式会社 SQUEEZE を退職しました。3週間ほど有給消化をしていましたが今日からは所属も変わりました。</p>
<h1>SQUEEZE での思い出</h1>
<p>在籍していた期間はおよそ1年半でしたが、もう何年もいたんじゃないかというくらい毎日とても濃密でエキサイティングな日々でした。</p>
<p>SQUEEZE が関わっている事業は民泊・インバウンド を取り巻くことを色々やっている関係上、ホテル・不動産業界の流れも強く、ホテルの開業を間近でみたり、実際の宿泊施設がどの様に運用されているかを目の当たりにすることも多いです。そのため普通に Web サービス開発・運用をしているだけでは得られないような経験がたくさんできました。<a href="/2018/12/31/000018.html">去年の振り返り</a> にも書いたけど民泊・インバウンドを取り巻く状況は今まさに色々な業界がカオスな感じで入り混じっていて業界自体の変化も激しいです。SQUEEZE 自体も例にもれず、実際この1年半で全然別の会社になってるなーというくらいやっている仕事の内容も、一緒に仕事をしているパートナーの方々のタイプも本当に変わったなーと感じます。</p>
<p>SQUEEZE ではソフトウェアエンジニアという肩書であったものの結果的にインフラ全般、 Django REST Framework による API 開発、Angular によるフロントエンド開発まで幅広く関わりました。またカンファレンススポンサーとしてのやり取りなんかもしました。</p>
<p>特にフロントエンドは最初に Angular のコードを見たときに本当にわけがわからなくてキャッチアップにものすごく苦労したのを今でも覚えてます。そして迷惑もたくさんかけてしまいました... この頃は特に <a href="https://twitter.com/massa142">@massa142</a> からはレビューを通じてサーバサイド・フロントエンドともに基本的なプロダクト開発に関する視点を本当に学ばせてもらい、おかげでなんとかマシに開発できるようになったと思います。</p>
<p>去年の暮れあたりからは今後の SQUEEZE を取り巻く状況から発生するであろうビジネス要件に耐えられるよう、インフラ環境をほぼゼロから作り直すようなことをひたすらやっていました。Classic ELB 使うのをやめたり、DB を RDS から Aurora MySQL にしたり、ElasticBeanstalk 環境を ECS on Fargate な環境に移したり... 最後のに関しては会社の Medium にも書かせてもらいました。</p>
<div style="margin: 0 auto;">
<script async src="https://static.medium.com/embed.js"></script><a class="m-story" href="https://medium.com/squeeze-inc/suitebook-infrastructure-have-moved-on-from-elasticbeanstalk-to-ecs-on-fargate-7ab62a317e77">suitebook infrastructure has moved on from ElasticBeanstalk to ECS on Fargate</a>
</div>
<p>他にも社内的なことにもごちゃごちゃ首を突っ込んだりもして、去年1月のカンパニーパーティーでスライド用意していきなり勝手に「 <a href="https://kibe.la/ja">Kibela</a> 入れてくれ」とプレゼン始めたりしたのが懐かしいです。Kibela の浸透具合はメンバーの入れ替わりが激かったり異常に切羽詰まった状態になったりして一時期過疎ってたけど、最近はまた開発メンバーを中心に活気づいてきています。情報共有手段としての地位を少しずつ固めていってるのをみてやっといてよかったなと思ってます。最終日報に感謝の気持ちを綴ることもできました。</p>
<p>これは最終出社日がたまたまカンパニーパーティーだったのでオフィスにいた開発メンバーで撮った写真。</p>
<p><img alt="2019-03-11-1" src="/images/2019/03/2019-03-11-1.png"></p>
<p>ちなみにこの後2次会でよなよなバーにも行き、その帰りに寝過ごして終点まで行ってしまいオフィスから直接帰るよりも高いタクシー代を払う羽目になりました。</p>
<h1>きっかけ</h1>
<p>さらっとだけ書きます。</p>
<p>一言で言えば「家庭の状況がかわり、今まで以上に余裕が必用になったため」です。</p>
<p>去年第二子が生まれマンションも購入した関係で家庭の状況がガラリと変わりました。<a href="/2018/12/31/000018.html">去年の振り返り</a> にも書いたけど子供二人の状況と言うだけでもこれまで以上に日常的にやることは増えますし、家事の負荷も大きくなります。今後のことも自分一人のこととしてではなく、家族全体のこととして考える必要性がより一層強くなります。また、そんな状況で「自分が思っている以上に自分は家庭のことにも時間を使いたい人間だった」ということにも気づきました。</p>
<p>SQUEEZE 自体も技術職は裁量労働制となっており、全社的にもモバイルワーク(一般的に言われる「リモートワーク」の意味。SQUEEZE ではモバイルワークと呼んでいる。)の推奨という形で働きやすさを模索している段階ではあります。実際、相性が良い人にとっては今でもとても働きやすい環境だと思います。他にも SQUEEZE は Web だけにとどまらない事業を持っている面白さもあり、しっかりやっていれば昇給もするし、カンファレンス等の参加にも積極的で背中を押してもらえたりもします。また、今いい感じにエンジニアのメンバーも集まり始めていて、問題も山積みなんだけど、どんどん良くしていこう、やっていこうという状況です。自分もそんなメンバーと一緒に直近だと ECS に移したプロダクトの今後の成長もそうだし、事業・会社の成長にも一緒についていきたいという想いも正直ありました。</p>
<p>だたそれでも業界自体もまだまだこれからのベンチャー企業の荒波の中で今働き続けるのは、自分にとっても家族にとっても良い選択ではないなと最終的に考えるようになったのも事実です。</p>
<p>そのような状況になり、働き方とライフスタイルを見直すべく行動を起こし始め、結果として今日からはたらく会社に出会い転職することを決めました。</p>
<h1>転職活動</h1>
<p>こちらもさらっとだけ書いておきます。</p>
<p>以前は Wantadly 経由で色々な企業様にお話を聞きに行ったりしていたのですが、自分で直接いろんな企業を探せるほど余裕もなく、また他にも思うところもあったので今回は使ってません。またフリーランスになるという選択は今の自分と相性がいい働き方とも言えず、なにより子供の保育園の基準に影響がでるなど今回は見送りました。</p>
<p>今回はずっと前に登録していた<a href="https://job-draft.jp/">転職ドラフト</a> で全て行いました。思い立った時期がちょうど第14回が始まる直前でタイミングがよかったこともあります。</p>
<div style="margin: 0 auto;">
<div class="iframely-embed"><div class="iframely-responsive" style="padding-bottom: 52.5%; padding-top: 120px;"><a href="https://job-draft.jp/" data-iframely-url="https://cdn.iframe.ly/4r2DV2w"></a></div></div><script async src="https://cdn.iframe.ly/embed.js" charset="utf-8"></script>
</div>
<p>レジェメを更新して「まあどんなものか様子見て今後を考えるかー」と最初は思っていたのですが、思いの外多くの企業様から指名をいただきました。ありがたい限りです。その中からメッセージ内容や事業内容、企業情報などを比較。いくつかの企業様には実際にやり取りしてお話させていただき、自分の家庭状況のバランスを保ちつつも技術者として攻めていけそうだなと感じるところに出会うことができました。</p>
<h1>これから</h1>
<p>そういうことで、今日からは <a href="https://wacul.co.jp/">株式会社WACUL</a> という会社で働きます。一技術者として、事業成長に寄与できるよう頑張っていきます。</p>2018年2018-12-31T00:00:00+09:002018-12-31T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2018-12-31:/articles/2018-12-31-look-back-2018/<p>2018年ももうおわりということで、ざっと今年を振り返っておく。
正直今年は去年以上に色々激動過ぎた...</p>
<p>去年と同じく「個人活動」「仕事面」「その他」で分けてみる。</p>
<p>2018年ももうおわりということで、ざっと今年を振り返っておく。
正直今年は去年以上に色々激動過ぎた...</p>
<p>去年と同じく「個人活動」「仕事面」「その他」で分けてみる。</p>
<div class="section" id="section-1">
<h2>個人活動</h2>
<p>個人活動は仕事とプライベートのイベントの重さから、去年ほどはとてもじゃないけどできない状況だった。ただ、とにかく時間がない割には気になる技術イベントに足を運んだりはできたかなというところ。</p>
<p>Connpass から参加したイベントを引っ張ってきたが以下のような感じ。</p>
<ul class="simple">
<li><a class="reference external" href="https://retty.connpass.com/event/74299/">Pythonもくもく自習室(書き初め) #6 @ Rettyオフィス - connpass</a></li>
<li><a class="reference external" href="https://pyhack.connpass.com/event/76637/">(第85回)Python mini Hack-a-thon - connpass</a></li>
<li><a class="reference external" href="https://startpython.connpass.com/event/73168/">みんなのPython勉強会#33 - connpass</a></li>
<li><a class="reference external" href="https://frontend-temple.connpass.com/event/81899/">第32回フロントエンドもくもく寺@千駄ヶ谷 - connpass</a></li>
<li><a class="reference external" href="https://pyhack.connpass.com/event/82060/">(第87回)Python mini Hack-a-thon - connpass</a></li>
<li><a class="reference external" href="https://mokupy.connpass.com/event/85889/">第27回 Pythonもくもく会 - connpass</a></li>
<li><a class="reference external" href="https://pyhack.connpass.com/event/84791/">(第88回)Python mini Hack-a-thon - connpass</a></li>
<li><a class="reference external" href="https://python-nyumon.connpass.com/event/83667/">Python入門者向けハンズオン #7 - connpass</a></li>
<li><a class="reference external" href="https://django.connpass.com/event/82148/">DjangoCongress JP 2018 (Day 1 カンファレンスデー) - connpass</a></li>
<li><dl class="first docutils">
<dt><a class="reference external" href="https://ansible-users.connpass.com/event/100344/">Ansible Night in Tokyo 2018.09 - connpass</a></dt>
<dd><ul class="first last">
<li><a class="reference external" href="https://ansible-users.connpass.com/event/101176/">Ansible 飯 in Tokyo 2018.09 - connpass</a></li>
</ul>
</dd>
</dl>
</li>
<li><a class="reference external" href="https://pyhack.connpass.com/event/99182/">(第92回)Python mini Hack-a-thon - connpass</a></li>
<li><a class="reference external" href="https://pyhack.connpass.com/event/103419/">(第93回)Python mini Hack-a-thon - connpass</a></li>
<li><a class="reference external" href="https://testnight.connpass.com/event/103064/">CI/CD Test Night #1 - connpass</a></li>
<li><a class="reference external" href="https://python-nyumon.connpass.com/event/100817/">Python入門者向けハンズオン #8 - connpass</a></li>
<li><a class="reference external" href="https://folio.connpass.com/event/109213/">Scramble! #2 Security - connpass</a></li>
<li><a class="reference external" href="https://pyhack.connpass.com/event/110414/">(第94回)Python mini Hack-a-thon - connpass</a></li>
</ul>
<p>またこれ以外にも以下のイベントには参加</p>
<ul class="simple">
<li><dl class="first docutils">
<dt>JapanContainerDays</dt>
<dd><ul class="first last">
<li>18.04, 18.12 の2回とも参加。これは全然時間がとれなくてブログが書けていなかったのだけどあまり積極的にコンテナ界隈、クラウドネイティブ界隈のキャッチアップができていない状況ではいい知見が得られて本当に行ってよかったと思う</li>
</ul>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>PyCon JP 2018</dt>
<dd><ul class="first last">
<li>今回は会社のスポンサー枠として行った関係で Connpass に記録が無いのだけど参加した。スポンサー業がかなり忙しくなってしまい、例年より楽しめた感じが下がってしまったところは正直ある。ただ今年は話のコンテンツのバランスがよく知見が深まった話やあまり自分にとって馴染みのない話も聞けたのはよかった。あと久々に会う人たちと色々お話できたのもよかった</li>
</ul>
</dd>
</dl>
</li>
</ul>
<p>あと、特段大きかったのは PyCon HK 2018 の CFP が通り、初の海外カンファレンス登壇の実績を解除したこと。これはとても良い経験になったとは思う。正直今思うとスケジュール的に無理しか無い状況でよくやってこれたもんだと自分でも思ってしまうが、手持ちのカードで突っ込んで一応どうにかできたので、良かったんだろう... 詳しくは別途ブログも書いた。</p>
<ul class="simple">
<li><a class="reference external" href="https://memo.laughk.org/2018/12/22/my-pyconhk-2018.html">続・ラフなラボ – PyCon HK 2018 で CFP が通ってしまったので発表してきた</a></li>
</ul>
<p>こう振り返ってみると思ったよりも色々やってはいたんだなと思った。ただしっかりと自分の知見にするための振り返りだったりインプット作業がほとんどできてなかったとも思う。正直プライベートでなにかコードを書くとか自分の興味のある技術トピックを調べたり検証したり、業務で触れてる技術を深堀したりといったことは一切できなかった。そういった状況は去年からずっと続いていて、結果として2年位もインプットに時間が割けていないということになる。これは非常にマズイので来年とか関係なく、どうにかせねばと感じている。</p>
</div>
<div class="section" id="section-2">
<h2>仕事面</h2>
<p>転職はなかったんだけど、会社がこの1年色々と激動すぎた。人の入れ替わりもかなり激しく、結果社内で英語を話す機会は無くなった。また2月くらいから9月くらいまで息つく暇もない状況がずっとつづいていて正直しんどかった。ここ3ヶ月はチームのメンバーも増え、落ち着いてきている。これから組織になっていくんだろうなという状況。忙しさは凄まじかったのだけど、会社のやっている民泊を取り巻く界隈は不動産業界やホテル業界が入り混じり、今まさにあたらしい業界ができていくという感じがあってすごく面白いポジションで仕事できている感が強い。たぶん来年もこの勢いはとまらないどころかもっともっと盛り上がっていくんじゃないかなと言う気さえするし、当面退屈することなんか無いんだろうなと思う。</p>
<p>技術的には今年前半はどこが得意とか不得意とか言ってられる状況じゃなくて、Angular と TypeScript の基礎をなんとか手探りながら叩き込み、フロントエンドから DRF による API 実装、また引き続きメインプロダクトのインフラも気にかけたりと大忙しだった。いいか悪いか置いておき、結果的にはおかげさまで今までよりも Web 界隈の技術を広く浅く知ることができたと思う。特にフロントエンド周りは jQuery でとまってしまっていた自分にとってインパクトは大きかったが、今フロントエンドがどんな感じになってるかを知ることができたのは大きかった。あと、以前 <a class="reference external" href="https://twitter.com/shikakun">@shikakun</a> から sass とかデザイン周りのコーディングの基礎を教わっていたのがかなり役にたった。というかあれがないとかなりやばかった... 改めて感謝。</p>
<p>後半にかけては今度は後手になってしまったインフラ周りの問題が目立つようになり、プロダクト開発からは少しづつ離れ、今関わってるプロダクトのインフラをこれからの会社のステージに合わせたものにどうやって持っていこうか色々試行錯誤をしている。自分の手でこの当たりを考えてアクションしていけるのはかなり面白いと感じている。</p>
<p>こうして振り返ってみると、多分未だかつて無いやるしかねー状況に立ち向かったのがほとんどだったなと感じる。
後半から始まったインフラ面の見直しが年明けには待ち構えていて、どんどん問題のスケールがいい意味で大きくなってきている感じがあってなかなか落ち着きそうにも無い気配である。</p>
</div>
<div class="section" id="section-3">
<h2>その他</h2>
<p>仕事面も結構ヘビーだったのだけど、今年はライフイベント的にも大きな物が重なった。</p>
<p>1つは第二子の誕生。非常に喜ばしいことなのだけど、家でのすごしかたは大幅に変わった。これまでは「子一人 vs 親二人」という感じだったのだけど、「子一人 vs 親一人」x 2 または 「子二人 vs 親一人」な状況になり体感的には忙しさは4倍は上がったんじゃないかという感覚がある。これからも夫婦がいろいろ自由に生き続けるために、色々考えなければいけないことが山積みだなと痛感しまくる日々である。</p>
<p>もう1つは、マンションを購入したこと。
これは第二子の誕生が関係しているのだけど、家族の人数が増えそれまでの 2DK の賃貸アパートではキャパ的に厳しくなってしまったのが大きい。元々購入することが目的で探したわけではないのだけど、たまたま条件が合ってかつ手が出せそうな物件と出会うことができて購入に至った次第。これは本当に大変な目にあったので後からでも Medium あたりにつらつらまとめを書きとどめておきたいくらい。(なんだけど時間が確保できずできてない...) もちろん物件自体には満足していて購入したこと、引っ越しをした事自体はほんとうに良かったと思っている。</p>
<p>そのあたりのことが合ったのが今年の中盤くらい。仕事もパツパツな状況で同時進行でやっていて正直生きた心地がしなかった。これはどうするのがいいのかわからないんだけど、「ライフイベント的に重い奴らはこっちの都合なんか見てくれない」と腹を括るくらいしかできないんじゃないかなという気がしてしまってる...</p>
<p>去年の振り返りブログで「睡眠時間は確実に確保できるように取捨択一してフルパワーでやるべきことに臨みたい。」って書いたのだけど正直今年も同じ基本5時間睡眠どころか時期によってはさらに悪化してしまってた気さえする。ろくに眠れない日がかなり多かった。これはいい加減なんとかしたい...</p>
</div>
<div class="section" id="section-4">
<h2>さいごに</h2>
<p>今年は仕事・プライベートに巨大イベント盛りだくさんな状況で技術職に就く人間としての自己研磨が全然できない年になってしまったというのが正直な所感。</p>
<p>去年の暮れは「執筆が終わったんだし、もう何が来ても怖くない( ー`дー´)キリッ」 くらいに思ってたんだけど現実そんなに甘くないということを突きつけられた...</p>
<p>来年以降もライフステージもガンガン変わっていきそうなので、備えられることは備えつつ真摯に向き合っていこうと思う。
あとは自分の時間を取るための施策はいろいろとやっていって、仕事も家族もプライベートもバランス保ちつつ攻め続けられる体制を作っていきたい。</p>
</div>
PyCon HK 2018 で CFP が通ってしまったので発表してきた2018-12-22T00:00:00+09:002018-12-22T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2018-12-22:/articles/2018-12-22-my-pyconhk-2018/<p>大分遅くなってしまったが、先月香港で行われた <a href="http://pycon.hk/2018/">PyCon HK 2018</a> で通ってしまった CFP のトークをしてきたので、その辺を自分用にまとめておく。
色々波乱もあってツラい場面もあったけど、結果として行ってきて本当に良かったと思ってる。</p>
<p><img alt="" src="/images/2018/12/pyconhk-2018-01.jpg"/></p>
<p>カンファレンスTシャツとネームカード。Tシャツのデザインがいい感じにかっこよい。</p>
<p>大分遅くなってしまったが、先月香港で行われた <a href="http://pycon.hk/2018/">PyCon HK 2018</a> で通ってしまった CFP のトークをしてきたので、その辺を自分用にまとめておく。
色々波乱もあってツラい場面もあったけど、結果として行ってきて本当に良かったと思ってる。</p>
<p><img alt="" src="/images/2018/12/pyconhk-2018-01.jpg"></p>
<p>カンファレンスTシャツとネームカード。Tシャツのデザインがいい感じにかっこよい。</p>
<p>ちなみに同行した <a href="https://twitter.com/ane45">@ane45</a> が既に会社のブログでレポートを書いてくれてるのでそちらも合わせてどうぞ</p>
<script async src="https://static.medium.com/embed.js"></script>
<p><a class="m-story" href="https://medium.com/squeeze-inc/pyconhk-report-60a04b2cd447">PyCon HK 2018 参加レポート – SQUEEZE Inc. – Medium</a></p>
<h1>経緯</h1>
<p>元々今年は PyCon APAC に行きたかったものの、去年同様家庭都合で行けなくなってしまい、香港はスケジュール的に行けそうかなととぼんやりと考えていた。
そんな中である日社内 Slack で <a href="https://twitter.com/checkpoint/">@checkpoint</a> から以下のような感じで CFP フォームのリンクを無言でメンションされて機運をあげたのが始まり</p>
<p><img alt="" src="/images/2018/12/pyconhk-2018-03.png"></p>
<p>とりあえず時間がない中なんとかやりたいこと駆動でネタをひねり出し、提出に成功。その後 PyCon JP 2018 のクロージングが始まるかのあたりで採択された旨の連絡がきたのであった。</p>
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">エイヤで出してた PyConHK 2018 の CFP が通ってしまったときの顔.png</p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/1041962970824073216?ref_src=twsrc%5Etfw">2018年9月18日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<h1>話した内容とその準備、そして発表</h1>
<p>発表のときの様子。一緒に行った <a href="https://twitter.com/nakamurasousuke">@nakamurasousuke</a> に撮ってもらった。大分表情がこわばってんなと思う。</p>
<p><img alt="" src="/images/2018/12/pyconhk-2018-04.jpg"></p>
<p>発表で使ったスライドの PDF 版はこちら</p>
<iframe src="//www.slideshare.net/slideshow/embed_code/key/LY2uHGhQkde0q1" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe>
<div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/laughk/collaboration-hack-with-slackbot-pycon-hk-2018-20181124" title="Collaboration hack with slackbot - PyCon HK 2018 - 2018.11.24" target="_blank">Collaboration hack with slackbot - PyCon HK 2018 - 2018.11.24</a> </strong> from <strong><a href="https://www.slideshare.net/laughk" target="_blank">Kei Iwasaki</a></strong> </div>
<p>またスライドに登場するコードはこちらにおいてある</p>
<div class="iframely-embed"><div class="iframely-responsive" style="height: 168px; padding-bottom: 0;"><a href="https://github.com/laughk/pyconhk2018-sample-code" data-iframely-url="//cdn.iframe.ly/gZmxTfE"></a></div></div>
<script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script>
<p>会社のブログにも書いてもらってるんだけど、雑に言うと「<a href="https://github.com/lins05/slackbot">slackbot</a> を使うと Slackbot 簡単に作れて便利ー」という感じのかなりゆるふわなネタ。このネタの動機としてはちょうど社内 Slack に bot ほしいなと思っていたので、発表準備駆動で無理やりやってみようという思った感じ。</p>
<p>ここ最近はスライドを作る際には <a href="https://yhatt.github.io/marp/">marp</a> でゆるく作ってしまうことが多かったのだけど、今回は以下のツールを組み合わせて作った。</p>
<ul>
<li><a href="https://github.com/gnab/remark">remarkjs</a></li>
<li><a href="https://github.com/sinedied/backslide">sinedied/backslide: CLI tool for making HTML presentations with Remark.js using Markdown</a></li>
</ul>
<p>英語での発表ということもあり、どうしてもタイムキーパーが使えるスピーカーノートの機能が使いたかったのだけど marp では対応していなかったので、以前ちょろっと使った remarkjs を使おうと思った次第。
backslide は今回の発表準備でたまたま見つけたのだけど、css や画像ファイルの配置、ローカル環境でのスライドのプレビューがかなりやりやすくなってかなりスライド作成が捗った。</p>
<h3>他準備のときのエピソード</h3>
<ul>
<li>ネタ自体はかなりゆるふわにしたのでスライドを作るところまでは英語でもそこまで厳しい感じはしなかったのはよかった</li>
<li>自分がそんなに英語得意ではないので(というか苦手...)、スピーカーノートを作るのがかなりキツかった。スライド本編より時間使った。</li>
<li>ただそのおかげでスライドの内容は発表前までで今までよりは精査できたんじゃないかなとは思う。</li>
<li>直前の pyhack で色々用意した社内 slackbot の機能がコードがそこそこでかくなってしまい、スライドで扱えるボリュームじゃ無くなってしまい直前に 0 から作り直す羽目になってしまった。</li>
<li>カンファレンスの直前で鼻と喉をやられて英語どころか日本語すら喋れるか怪しくなってしまい、十分な練習ができなかったのが痛い...</li>
</ul>
<h3>実際発表をやってみて</h3>
<ul>
<li>やっぱりもう少し十分に練習してから臨みたかったところはある<ul>
<li><a href="https://twitter.com/nakamurasousuke">@nakamurasousuke</a> からも「通じなくはないけどネイティブにはちょっとわかんないかもしれない表現もちょくちょくあった」とフィードバックを頂いた</li>
</ul>
</li>
<li>思ったより質問が来てしまい、あまり上手く答えられなかった<ul>
<li>英語のヒアリング力が全然ダメダメなところが露呈...</li>
<li>全然上手く回答できず <a href="https://twitter.com/noahcse">@noahcse</a> に助けてもらってギリギリその場がおさまった</li>
<li>せっかく興味を持ってもらったのに上手くコミュニケーションをとれなかったのが悔しい</li>
</ul>
</li>
<li>とはいえ、そこまで英語得意でなくとも発表だけならやれなくもないという感覚は掴めた<ul>
<li>もちろん精度はもっとあげていきたいけど</li>
</ul>
</li>
</ul>
<h1>その他 PyCon HK 2018 エピソードとか雑感</h1>
<ul>
<li>香港の場合、どうしてもデータ系の話に偏る場合が多く、データサイエンス以外の話がもすごく珍しいという話を聞いた。実際去年の PyCon HK からみてもデータ系の話がほとんどな傾向はあると思う。</li>
<li>スピーカーの方のバックグラウンドも、それなりに大きな組織であったりアカデミックな背景を持っている方が多かった印象。自分みたいに Web 系企業所属で趣味も混ざりつつ純粋に好きな技術ネタで発表みたいなノリはかなり珍しかったんだろうなと感じる</li>
<li>思ったより日本勢が多かった<ul>
<li>スピーカーの <a href="https://twitter.com/Masahito">@Masahito</a> と <a href="https://twitter.com/freedom_holicx">@freedom_holicx</a></li>
<li><a href="https://twitter.com/ane45">@ane45</a>, <a href="https://twitter.com/nakamurasousuke">@nakamurasousuke</a> の応援</li>
</ul>
</li>
<li><a href="https://twitter.com/Masahito">@Masahito</a> が <a href="https://memo.laughk.org/2017/11/18/000010.html">自分の PyCon HK 行ってきたブログ</a> を読んだ事がきっかけで今回 CFP に応募したと世の中狭いなと言う気持ちとものすごく嬉しい気持ちもあった。ブログ書いててほんと良かった。</li>
<li>香港在住の日本人エンジニアの方との交流もあり、現地の生活のあれこれも聞けて面白かった。</li>
<li>2日目のスピーカーパーティーはもろに異文化交流できたのが楽しすぎた<ul>
<li>やっぱり英語がもっとできるともっと楽しいんだろうなと痛感</li>
<li>海外の方とのやり取りはなんやかんやで Facebook が楽なんだなーと感じた</li>
<li>アニメ話が結構通じてびっくり</li>
</ul>
</li>
</ul>
<p>パーティーの様子</p>
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">パーティ!わいわい <a href="https://twitter.com/hashtag/pyconhk?src=hash&ref_src=twsrc%5Etfw">#pyconhk</a> <a href="https://t.co/DLlDjVH9nK">pic.twitter.com/DLlDjVH9nK</a></p>— sugita (@ane45) <a href="https://twitter.com/ane45/status/1066283756091203584?ref_src=twsrc%5Etfw">2018年11月24日</a></blockquote>
<h1>最後に</h1>
<p>PyCon HK、去年は「来年は LT くらいの準備をしつつ」なんて書いてたけれど、
蓋を開けてみると今年はまさかの CFP が採択され、今度は自分が人を巻き込んで日本から香港に行くという感じになった。</p>
<p>なんかホント生きている何が起こるかわからないなと感じたし、
なんと言うかすごくワクワクしっぱなで行ってよかったし、エイヤでも CFP 出してよかったなと思う。<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup></p>
<p>あと、香港は日本からそこまで遠くもなく時差も少ないし、
ある程度英語が通じつつ、中国語圏でもあるので漢字で雰囲気を掴めたりするので、
海外カンファレンス行ってみたいという人にはいい場所だと思う。PyCon に限らず、技術カンファレンスあったらまず行ってみるのはオススメ。</p>
<p>来年はどうなるんだろうな。
ただ、香港はまた行きたいな。</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p>トーク直前は緊張で「逃げたい」とぶつぶつずっと言ってたけど喉元過ぎればなんとやらというやつだと思う <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>みんなのPython勉強会#33 ( #stapy )で「入門本を読んだ後に何しようか」という話をしてきた2018-03-13T00:00:00+09:002018-03-13T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2018-03-13:/articles/2018-03-13-stapy33/<p><a class="reference external" href="https://twitter.com/terapyon">@terapyon</a> さん経由で <a class="reference external" href="https://twitter.com/abenben">あべんべん(@abenben)</a> さんからご依頼を頂き、
先週行われた「みんなのPython勉強会#33」で登壇させていただいた。</p>
<iframe class="hatenablogcard" frameborder="0" scrolling="no" src="https://hatenablog-parts.com/embed?url=https://startpython.connpass.com/event/73168/" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="みんなのPython勉強会#33 (2018/03/07 19:00〜)"></iframe><p><a class="reference external" href="https://twitter.com/terapyon">@terapyon</a> さん経由で <a class="reference external" href="https://twitter.com/abenben">あべんべん(@abenben)</a> さんからご依頼を頂き、
先週行われた「みんなのPython勉強会#33」で登壇させていただいた。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="みんなのPython勉強会#33 (2018/03/07 19:00〜)" src="https://hatenablog-parts.com/embed?url=https://startpython.connpass.com/event/73168/" frameborder="0" scrolling="no"></iframe>
<div class="section" id="section-1">
<h2>発表資料</h2>
<p>こちら</p>
<iframe src="//www.slideshare.net/slideshow/embed_code/key/BfYSFhra0TNdvI" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="display: block; margin-left: auto; margin-right: auto; border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/laughk/python-webapi-nextsteppythonprograming" title="入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing" target="_blank">入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing</a> </strong> from <strong><a href="https://www.slideshare.net/laughk" target="_blank">Kei Iwasaki</a></strong> </div><ul class="simple">
<li>内容としてはプログラミングの入門書を読んでみたけれど、「じゃあその次に何をしようかが思い浮かばない」という方を対象としたもの。</li>
<li>Web API の扱い方を題材としたのは、手軽に何かやってるが得られやすくちょうどいい題材だなということと、スラスラわかるPythonで色々検討して書籍で扱うのは難しいという判断からボツネタとなっていたけど発表ならいけるかなーと思って選定した感じ。</li>
</ul>
</div>
<div class="section" id="section-2">
<h2>当日の様子</h2>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/stapy?src=hash&ref_src=twsrc%5Etfw">#stapy</a> <a href="https://twitter.com/laugh_k?ref_src=twsrc%5Etfw">@laugh_k</a> 登壇 <a href="https://t.co/olJ9bUDFqB">pic.twitter.com/olJ9bUDFqB</a></p>— Manabu Terada@CMScom (@terapyon) <a href="https://twitter.com/terapyon/status/971335966039265280?ref_src=twsrc%5Etfw">March 7, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><ul class="simple">
<li>当日はほぼ定員通りの120名近くの方がいらっしゃってた模様。すごい。</li>
<li>Live 中継もしていたっぽい。次回以降も興味ありそうな話があればそちらから参戦するのもありかも。</li>
</ul>
</div>
<div class="section" id="section-3">
<h2>その他感想</h2>
<ul class="simple">
<li>みんなの Python 勉強会シリーズ自体は結構前から知っていて1回位行きたいなーと思っていたところでのお誘いで、正直かなり嬉しかった。</li>
<li>自分以外のスピーカーが <a class="reference external" href="https://pycon.jp/2017/ja/events/media-meeting/">PyCon JP 2017 メディア会議</a> でご一緒した大津さんと <a class="reference external" href="https://twitter.com/hirokiky">@hirokiky</a> さんという顔見知り同士で変にリラックスした不思議な気分で臨めた。</li>
<li>自分が Python を入門したてのときにお世話になった 「Pythonスタートブック」の著者である <a class="reference external" href="https://twitter.com/tsjshg">@tsjshg</a> さんとお会い出来て簡単にでも挨拶できたのがほんとに嬉しかった。自分が @tsjshg さんも運営に関わる勉強会の登壇者となって話せたことがとても感慨深く嬉しく思った。(ちなみにこの本を購入したのは今から7年くらいまえの 2011 年9月23日だった)</li>
<li>当日バタバタして名刺を補充せずに会場に行ってしまったのが失敗だった... 最近あまり勉強会でも名刺交換しなくなってたからすっかり忘れていた(反省)</li>
<li>懇親会は樽生のビールがあってピザもあって、その中で有志のLTがあってとザ・エンジニアの勉強会っぽい感じがしてすごく楽しかった。色々とお声がけもいただき一瞬で終わってしまった感じがした。</li>
<li>体調が全快ではなく、メンバー的に2次会に行きたかったのだけど残念ながら懇親会が終わったタイミングで帰った。ただ次の日になってみてこの選択で大正解だった。次機会あるならばこの辺も調整したいなーとは思う。</li>
</ul>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">体力的にキツイので二次会には行かず懇親会で離脱。座学でその後ワイワイする会、久しぶりだったけどだいぶ楽しめた。お疲れ様でした&ありがとうございました! <a href="https://twitter.com/hashtag/stapy?src=hash&ref_src=twsrc%5Etfw">#stapy</a></p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/971381961406087168?ref_src=twsrc%5Etfw">March 7, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
Thinkpad X270 のキーボードを自力で英語配列に交換した話2018-01-15T00:00:00+09:002018-01-15T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2018-01-15:/articles/2018-01-15-replace-x270-keyboard-from-jp-to-us/<p>年末に iosys で叩き売られていた X270 (Core-i7 7600U, Mem16GB, SSD512PCIe) を入手して業務で使い始めていたのだけど、個人的に日本語配列が思ったよりツラかったので自力で交換した。その際のメモを書いておく。</p>
<p>年末に iosys で叩き売られていた X270 (Core-i7 7600U, Mem16GB, SSD512PCIe) を入手して業務で使い始めていたのだけど、個人的に日本語配列が思ったよりツラかったので自力で交換した。その際のメモを書いておく。</p>
<div class="section" id="tl-dr">
<h2>TL;DR</h2>
<p>Thinkpad X270 のキーボード交換を実際にやってみて以下の知見を得た</p>
<ul class="simple">
<li>X270 も X240 ~ X260 のキーボードが入手できれば交換用に使える</li>
<li>交換用のキーボードはAmazonとかでも手に入る</li>
<li>以前の7段キーボードの時代のノリで交換作業しようとすると痛い目見る</li>
<li>とはいえ、個人でもまあ交換できなくない(オススメはしない)</li>
</ul>
</div>
<div class="section" id="section-1">
<h2>交換したくなった動機</h2>
<p>今回極力安くハイパワーなラップトップがほしかったため、キーボードは「基本Ergodox繋いで使うし、たまにHHKB持ち歩いて尊師スタイルでもいいかー、Thinkpadだし最悪自力で交換で」というノリで英語配列は必須にしなかった。</p>
<p>なのだけど実際使ってみると、Ergodox を繋いでいるときはともかく尊師スタイルがやりづらい。トラックパッドが予想以上に使いづらく、上の方でクリックしてるとトラックポイントを使いたくて手がムズムズしてくる。仕方なくPC側の設定で日本語配列キーボードを英語配列として認識させて騙し騙しつかってはいたものの Space、Backspace、右 Shift が小さかったり Enter が縦長だったり無変換とか日本語の独自のキーが邪魔だったりでやっぱり Thinkpad の US 配列が使いたいと思った。</p>
</div>
<div class="section" id="section-2">
<h2>交換用キーボードの入手</h2>
<p>メルカリも見たんだけど、Amazon で普通に買えたのでそちらから購入。具体的には以下のもの。適当にググってみると X270 も X260 のものと同様のものが使えそうだったので記載はないけどエイヤでポチった。</p>
<p><a class="reference external" href="https://www.amazon.co.jp/gp/product/B07426SJH9/ref=as_li_ss_tl?ie=UTF8&psc=1&linkCode=sl1&tag=laughk-22&linkId=1faf4d41f304245e1af0ae9eadc7ea3e">Amazon | TAMMY® ノートパソコンのキーボード 適用する レノボ LENOVO Thinkpad X230S X240 X240I X240S X240T X250 X260 修理交換用 | TAMMY | キーボード 通販</a></p>
</div>
<div class="section" id="section-3">
<h2>交換</h2>
<p>「どうせ Thinkpad だし交換もそれほど苦労しないだろ」とたかをくくってたんだけど、キーボード納品直前に Lenovo のマニュアルを確認してみて手順がめっちゃ多くてびっくりした。</p>
<p><a class="reference external" href="https://support.lenovo.com/jp/en/solutions/pd104674">Removal steps for keyboard assembly - ThinkPad X270</a></p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">年末に色々あって急遽叩き売られていたThinkpad X270(日本語配列)を買って英語配列キーボードも別途調達して自力で交換しようとしてたんだけど、マニュアル見て昔のThinkpadのノリで雑に選定してしまったことを後悔したorz <a href="https://t.co/5CIl0UJO05">https://t.co/5CIl0UJO05</a></p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/952196282084343808?ref_src=twsrc%5Etfw">January 13, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><p>Youtube にも交換作業の動画が以下にあって見てみたのだけど、「え...これやんの...さすがにこれは...」となってしまった。 <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a></p>
<p><a class="reference external" href="https://www.youtube.com/watch?v=HTN-CO_flVs">Lenovo ThinkPad x240 / x250 / x260 - Keyboard Replacement Tutorial | IT Support London - YouTube</a></p>
<p>マニュアルとか動画とか、この後の写真とか見ればわかるんだけど X270 はキーボード交換のために一度PCをほぼ全部バラさなきゃならない。そこで流石に素人がここまで手を出すのもなーと思って、適当にググって出てきた「PCキーボードの交換やります」とうたっている業者を見つけ試しに見積もりを依頼した。</p>
<p>なんだけど、作業自体断られてしまった。</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">キーボード交換やるよーってうたっている業者に作業代行よ見積り依頼したけど話自体断られてしまった...</p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/952410771199111168?ref_src=twsrc%5Etfw">January 14, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><p>ちょっとがっかりしたけど、これで逆に踏ん切りがついて自力で交換する覚悟ができ、実際にやってみた。</p>
<p>その際に、自分がどこまでやったかわからなくならないように写真を取りまくったので上げておく。</p>
<hr class="docutils" />
<img alt="" src="/images/2018/01/14_115422474.jpg" />
<p>作業開始</p>
<img alt="" src="/images/2018/01/14_120456433.jpg" />
<p>裏のネジを外して開ける。最初は内部バッテリーを外す。普段よく見ているやつにこんなのが入ってるのは知らなかった。</p>
<img alt="" src="/images/2018/01/14_120555471.jpg" />
<p>メモリも外す</p>
<img alt="" src="/images/2018/01/14_120821340.jpg" />
<p>Wifiのカード(右)とスピーカー(左)、こいつらも外す</p>
<img alt="" src="/images/2018/01/14_120837820.jpg" />
<p>この辺で全体像を撮っておいた</p>
<img alt="" src="/images/2018/01/14_120947218.jpg" />
<p>Wifiのカード、こいつを外す(大事なことなので</p>
<img alt="" src="/images/2018/01/14_121224322.jpg" />
<p>ファンも外す</p>
<img alt="" src="/images/2018/01/14_121534329.jpg" />
<p>外れた</p>
<img alt="" src="/images/2018/01/14_121634262.jpg" />
<p>スピーカー。こいつも外す(大事なことなので</p>
<img alt="" src="/images/2018/01/14_121815075.jpg" />
<p>スピーカーの接続コネクタも当然外す</p>
<img alt="" src="/images/2018/01/14_121857334.jpg" />
<p>ちゃんと確認してないけど、多分液晶と System Board を繋ぐやつ。これも外す。</p>
<img alt="" src="/images/2018/01/14_121942255.jpg" />
<p>液晶と System Board と繋ぐやつその2(だと思う)</p>
<img alt="" src="/images/2018/01/14_122258230.jpg" />
<p>System Board とキーボードを繋いでいるやつ。当然外す。</p>
<img alt="" src="/images/2018/01/14_122443840.jpg" />
<p>System Board 上のものが大分外れてきた</p>
<img alt="" src="/images/2018/01/14_122544401.jpg" />
<img alt="" src="/images/2018/01/14_122624224.jpg" />
<p>細かい部品も外す</p>
<img alt="" src="/images/2018/01/14_122635772.jpg" />
<p>System Board を外す直前</p>
<img alt="" src="/images/2018/01/14_122913297.jpg" />
<p>はい(粘着テープでくっついていて外しづらい)</p>
<img alt="" src="/images/2018/01/14_123302390.jpg" />
<p>白っぽく広がってるのがキーボード。
今回交換したいのはこいつ。なんだけど覆っているプラスチックのやつを外す必要が有る。</p>
<img alt="" src="/images/2018/01/14_123808424.jpg" />
<p>細かいケーブルを外し</p>
<img alt="" src="/images/2018/01/14_124033141.jpg" />
<p>やっとキーボードがみえた</p>
<img alt="" src="/images/2018/01/14_124357488.jpg" />
<p>バイバイ日本語キーボード</p>
<img alt="" src="/images/2018/01/14_124732391.jpg" />
<p>ちなみにこの時点で液晶とも分離されている</p>
<hr class="docutils" />
<p>という感じで、ここまでバラしてようやく交換ができる。
戻す作業までは流石に写真は撮ってないけど、この後は基本的にこの逆をやる。</p>
<blockquote class="twitter-tweet" data-conversation="none" data-lang="en"><p lang="ja" dir="ltr">断られて逆に踏ん切りついたんで結局自力でやったんだけどまあヘビーだった。無事に終わってホッとしてる。 <a href="https://t.co/0nAwWSRLHh">pic.twitter.com/0nAwWSRLHh</a></p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/952412880191696897?ref_src=twsrc%5Etfw">January 14, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><p>ちなみに内部バッテリーを外すせいか(?) BIOS の時計が狂うみたいで
交換後の初回起動の際にビープ音が鳴り響く。これはおちついてBIOSの時計を合わせてあげればOKだった。</p>
<p>最近の Thinkpad は昔みたいに必ずしもキーボードだけスッと交換するみたいな技はやりづらい模様。今回の作業やってて本当に心臓に悪かった。やってできなくはないけど正直オススメはしない... 時間やお金に余裕があるなら黙ってオフィシャルのBTOでキーボード配列を指定してオーダーするのがよさそうです。</p>
</div>
<div class="section" id="section-4">
<h2>オチ</h2>
<img alt="" src="/images/2018/01/14_143637529.jpg" />
<p>一個だけネジが余ってしまった。
まあ、大きさ的にキーボードを覆っていたプラスチックのやつを止めるものなので問題ないだろうとは思う 😇</p>
<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>この動画では説明もありで33分ほどで終わってるのだけどかなり早いと思う。自分は実際にやってみて1時間40分くらいかかった。</td></tr>
</tbody>
</table>
</div>
2017年2017-12-31T00:00:00+09:002017-12-31T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2017-12-31:/articles/2017-12-31-look-back-2017/<p>気がついたら2017年ももうおしまい。
ということで、振り返りブログを書いておく。</p>
<p>気がついたら2017年ももうおしまい。
ということで、振り返りブログを書いておく。</p>
<div class="section" id="section-1">
<h2>個人活動</h2>
<div class="section" id="python">
<h3>執筆を中心としたPython系コミュニティとの関わり</h3>
<p>なんと言っても一番大きかったのが技術書の執筆。話自体は去年から動いていたのだけど執筆活動が本格化したのは今年に入ってから。
今年の前半は仕事以外の時間をほぼ執筆にすべてを捧げていたと言っても過言ではないと思う。</p>
<p>執筆に関してはブログも書いたし、そのプロセスに関しては BPStudy#123 で発表する機会もいただけた。</p>
<ul class="simple">
<li><a class="reference external" href="/2017/08/07/00001.html">スラスラわかるPythonという本を書きました</a></li>
<li><a class="reference external" href="/2017/11/27/000012.html">BPStudy#123 〜 技術書執筆の実際、ノウハウ 〜 にて登壇させてもらった #bpstudy</a></li>
</ul>
<p>スラPy自体なんとか形にすることもできし、幸いにしてポジティブなフィードバックをいただく機会が多くありがたい限り。
BPStudyのときのスライドにも載せているけれど、この執筆を通じてはPython系コミュニティ(実質pyhackだけど)との関わり方が大きく変わった。</p>
<p>執筆はそれ自体もそうだし今まで月イチでゆるく好きなことをやっていただけの pyhack との関わり方の変化が大きく変化。
今年前半はほぼ原稿を書くのに費やたし、本が出版されてからは pyhack 以外のイベントごとに関して関わっている方々から何かとお声がけいただくことが多くなった。
以下のイベントもそう。</p>
<ul class="simple">
<li><a class="reference external" href="https://plonejp.connpass.com/event/51340/">World Plone Day 2017 Tokyo</a> のLT</li>
<li><a class="reference external" href="https://pycon.jp/2017/ja/events/media-meeting/">PyCon JP 2017 のメディア会議</a> の登壇者</li>
<li><a class="reference external" href="https://pyconjp.connpass.com/event/62858/">PyCon JP 2017 Development Sprints</a> の「スラスラわかるPython+Visual Studio Codeでアプリ開発します」TA</li>
<li><a class="reference external" href="https://python-nyumon.connpass.com/">Python 入門者の集いシリーズ</a> のゲスト講師としての講演と初心者向けハンズオンの講師</li>
<li><a class="reference external" href="https://bpstudy.connpass.com/event/68500/">BPStudy#123 〜 技術書執筆の実際、ノウハウ 〜</a> の登壇者</li>
</ul>
<p>他にも通常の pyhack に参加する際にも、執筆前よりも他の方々との雑談も多くなった気がする。
今回自分が関わった執筆はもともとコミュニティベースで行ったこともあるのだけれども、執筆を通じて得たものがすごく大きかったと感じる。</p>
</div>
<div class="section" id="section-2">
<h3>イベント</h3>
<p>イベント面は、 <a class="reference external" href="/2017/09/23/000005.html">PyCon JP には今年も参加。</a> ブログに書いている通り残念ながら今年は準備不足でトークは通らずだったけれど過去最高に濃密に過ごせた。
他で言えば、本当は PyCon APAC にも行くつもりでいてツアーにも申し込んでいたのだけど残念ながら家庭都合でいけなくなってしまった。その代わりと言ってはあれだけれども11月に弾丸スケジュールで <a class="reference external" href="/2017/11/18/000010.html">PyCon HK には行くことができた。</a> 来年は APAC も HK も行きたいなと思うので頑張って調整したいところ。</p>
</div>
<div class="section" id="section-3">
<h3>アウトプット</h3>
<p>執筆関連の動きが活発だった反面、それ以外がほとんどできていない。</p>
<p>pyhack 以外にも #mokupy や #rettypy などのもくもく会には結構足を運んだのだけど、前半はほぼ執筆の時間にあてていたし、後半もイベント登壇にむけた資料作成などの準備の時間にしていることが多くて技術的な試行錯誤がほとんどできていなかった。
なんとか <a class="reference external" href="https://github.com/pepabo/furik">furik</a> の Python 実装である <a class="reference external" href="https://github.com/laughk/footprint">footprint</a> をとりあえず動く状態にしたのと、細々と <a class="reference external" href="https://github.com/laughk/pelican-hss">pelican-hss</a> のメンテをするので手一杯だった気がする。ここは自分の技術的な幅を広げるためにももっとやらないとなーということは感じている。やってかねば。</p>
<p>ただ、そんな中でも少しいい方向に持っていけたかなーというのは参加イベント関連のログを <strong>遅れてもいいので</strong> ブログにするということができるようになったことだと思う。
基本的に自分のブログは自分のために書くことを第一にしているので、実際にやってみて遅れてでもブログにすることでも十分に意味はあるなと感じている。これは続けてこう。</p>
<p>あと、SQUEEZE に入ってから英語の定着率を少しでも伸ばそうと Medium の方に English Activity をつけ始めた。
最近ちょっと優先度が落ちてきてしまって実質「しごとの基礎英語」ログになってしまってることが多いのだけれど、それでも細く長く続けていければと思ってる。</p>
<ul class="simple">
<li><a class="reference external" href="https://medium.com/@laughk/english-activity-at-2017-12-27-wed-a9abf11d11db">English Activity at 2017-12-27 (Wed) – Kei Iwasaki – Medium</a></li>
</ul>
</div>
</div>
<div class="section" id="section-4">
<h2>仕事面</h2>
<div class="section" id="section-5">
<h3>転職</h3>
<p>まず大きかったのは転職。ブログも書いているし、揺るぎない事実なので書いておくと1年で2回した。</p>
<p>2回目の転職に関して詳細はインターネットには書かないけれど大枠だけ書いておくと、今年前半所属していた現場は実際に働いてみると自分にとってどうしてもミスマッチだなと感じることが多かった。所属し続けてもバリューを出し続けることは難しいと感じたし、そんな人間がいつまでも粘って残ったとしてもお互いに時間が無駄だろうと感じたところが大きい。人によっては居心地の良い現場でもあっただろうし、これは完全に自分にマッチしなかったということだと思っている。</p>
</div>
<div class="section" id="section-6">
<h3>現職</h3>
<p>SQUEEZE に入社してからは、英語がキツくて面食らうことも多かったけれども
チーム文化的にもマッチすることが多く、楽しく仕事できている。「もっと頑張らないとな...」と落ち込むこともあるけれど僕は元気です。
自分がこれまで挑戦したくてもできなかったことにも手は伸ばせていて以下のことはできた。</p>
<ul class="simple">
<li>Cloudwatch のデータをわかりやすく可視化するために Grafana を導入</li>
<li>Celery worker 導入に伴うインフラ環境の用意 on ElasticBeanstalk</li>
<li><dl class="first docutils">
<dt>統合監視として Datadog の導入</dt>
<dd><ul class="first last">
<li>必要なアラートを挙げれるように</li>
<li>それまで取得できていなかった各種メトリクスの充実</li>
<li>Monitor 設定をブラウザでやるのが辛かったので Terraform でコード管理化</li>
</ul>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>Ansible を導入してインフラのコード管理</dt>
<dd><ul class="first last">
<li>ebextensions のプロビジョンだと無理があった</li>
<li>ElasticBeanstalk の AutoScale 経由からでも手動適用でも差異が出ないようにした</li>
</ul>
</dd>
</dl>
</li>
<li>Django カスタムコマンドを利用したバッチ処理の実装</li>
<li>その他プロダクトの開発</li>
</ul>
<p>ただ、今 SQUEEZE で関わっているプロダクトの開発はフロントエンドの比重が大きくて Django を知っているだけだと正直全然歯が立たない状況。
今のところは AngularJS を使っているので流行りとかは一旦おいて、そのへんの知見を基礎から叩き込みつつやっていかねばという状況。
なかなかヘビーではあるのだけれどもせっかくの機会、 jQuery の世界で止まっていてSPAが何なのかあまりピンと来ていなかった状態から脱するチャンスと思ってしっかりやっていこうと思う。</p>
<p>もちろん、これまでの自分の経験上インフラ面でもまだまだ良くしていきたいところも多い。
大変ではあるのだけれども、自分で設計したインフラを実際に手をかけて創っていくことは面白いと感じているしこちらもやっていくぞという気持ち。</p>
</div>
</div>
<div class="section" id="section-7">
<h2>その他</h2>
<div class="section" id="section-8">
<h3>プライベート</h3>
<p>8月くらいに3年間通ってたスポーツジムを退会した。
本当は続けたかったのだけど、今年から始まった子供の朝の準備・送迎と職場が渋谷から表参道に変わった関係で、どうあがいてもスポーツジムに行っても時間的に満足に体を動かすことができなくなってしまった。</p>
<p>そこからは朝のランニングに切り替えている。
膝のことを考え一旦週3回。忙しかったりするとできないこともちょくちょくあるのだけれども、無理にスポーツジムに行くよりもかなり満足に体を動かすことができるようになった。
やっぱり体を動かす習慣はちゃんと継続していきたい。</p>
</div>
<div class="section" id="section-9">
<h3>睡眠時間</h3>
<p>今年は生活環境がガラリと変わる中、2回の転職と(自分の中で)過去に例を見ないレベルの個人活動で常時睡眠不足な状態に陥っていた。
初版執筆後、脱稿直後、12月後半くらいはまだ寝る時間があったけれどそれ以外の平均睡眠時間(土日含む)が5時間あったかどうかあやしい。
家にいるときは気がつくと「休みたい」とひたすら口に出ていた気がする。</p>
<p>おかげで昼間に強烈な眠気に襲われることも多く、正直いうと年間通じて業務中の集中力・体力がかなり低下していたと思う。
自分のリソースの限界が見えた反面、やっぱりこの状況はよくない。
来年はまず業務へのコミットを第一にしたいと思っているので、睡眠時間は確実に確保できるように取捨択一してフルパワーでやるべきことに臨みたい。</p>
</div>
</div>
<div class="section" id="section-10">
<h2>さいごに</h2>
<p>今年はスラスラわかるPythonの執筆を中心としたPython系コミュニティ(主に pyhack)との関わり、2度の転職、プライベート環境の大幅な変化と
めまぐるしい変化に見舞われて、常に自分のリソースギリギリで動いていたなーと感じる1年だった。挑戦することができてよかった一方、全力を出しきれなかったと思うことも多くあった。今後の自分の活動の取捨選択が迫られる状況がよりシビアになったし、それに対して全部うまく対処できたかというとちょっと怪しい部分も残る年だったと思う。</p>
<p>これまで挑戦できなかったことに挑戦できた反面、これまで継続できていたことが崩壊した部分はあるので2018年は取捨択一をしっかりとしてやっていくぞ。</p>
</div>
(第83回)Python mini Hack-a-thon #pyhack 参加ログ2017-12-12T00:00:00+09:002017-12-12T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2017-12-12:/articles/2017-12-12-pyhack83/<p>遅れてしまったけど参加ログを書いておく。</p>
<iframe class="hatenablogcard" frameborder="0" scrolling="no" src="https://hatenablog-parts.com/embed?url=https://pyhack.connpass.com/event/72098/" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="(第83回)Python mini Hack-a-thon - connpass"></iframe><p>遅れてしまったけど参加ログを書いておく。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="(第83回)Python mini Hack-a-thon - connpass" src="https://hatenablog-parts.com/embed?url=https://pyhack.connpass.com/event/72098/" frameborder="0" scrolling="no"></iframe>
<div class="section" id="section-1">
<h2>やっていたこと</h2>
<p>今回やっていたことは以下の2つ</p>
<ul class="simple">
<li><a class="reference external" href="/2017/12/03/000013.html">続・ラフなラボ – ArchLinux なラップトップで仕事しはじめて大体1年経った</a> のブログを書いていた</li>
<li><a class="reference external" href="https://github.com/laughk/footprint">laughk/footprint</a> の遅めの時間のActivityが次の日のもの扱いされてしまうバグ対応をしていた。</li>
</ul>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="fix timezone by laughk · Pull Request #3 · laughk/footprint" src="https://hatenablog-parts.com/embed?url=https://github.com/laughk/footprint/pull/3" frameborder="0" scrolling="no"></iframe><p>実際のところ、ほぼブログを書くのに時間を使ってしまったのでまたほとんど日本語ばかり書いている会になってしまった。しかも今回はあまり Python 関係なかった... footprint のバグ修正の方も、直すには直したけどまだ pypi に上げれてない。遅くとも今週末にはやっておかないとだ。</p>
</div>
<div class="section" id="section-2">
<h2>その他</h2>
<p>ここのところなんやかんやで pyhack にはあまり参加できていなかったので「ここ(pyhack)で会うの久しぶりー」と声をかけてもらった。もう完全に常連だなーと改めて感じた。</p>
<p>この日のお昼はいつもどおりの沖縄料理屋ぱいかじ。別イベントに行く前に寄った <a class="reference external" href="https://twitter.com/hajime_nakagami">@hajime_nakagami</a> さん親子とも一緒。 <a class="reference external" href="https://twitter.com/hajime_nakagami">@hajime_nakagami</a> さんの息子さんと自分の出身大学が一緒でそのへん絡めた話が盛り上がったなー。楽しいランチだったけど大学時代の自分を振り返って色々反省したりもした。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="沖縄の台所 ぱいかじ 新宿新南口店(PAIKAJI) (新宿/沖縄料理) - Retty" src="https://hatenablog-parts.com/embed?url=https://retty.me/area/PRE13/ARE1/SUB101/100000027346/" frameborder="0" scrolling="no"></iframe><p>午後はひたすらモクモクして成果発表。今回もプロジェクタのトラブルは起こさず済んだ。</p>
<p>成果発表が終わって本編が終了したら飲みへ。一次会は <a class="reference external" href="https://retty.me/area/PRE13/ARE1/SUB101/100000010921/">ドイツ風居酒屋クライネヒュッテ</a> 料理もビールもうまかった。ここは樽生頼むと蓋付きの珍しい感じのジョッキに入ってくるのが印象に残ってる。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="ドイツ風居酒屋クライネヒュッテ(KLEINE HUTTE) (新宿/ドイツ料理) - Retty" src="https://hatenablog-parts.com/embed?url=https://retty.me/area/PRE13/ARE1/SUB101/100000010921/" frameborder="0" scrolling="no"></iframe><p>2次会はハーミットへ。こちらでも色々お話で楽しかった。
今回は終電前にちゃんと帰った。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="BAR HERMIT 西口店【公式】" src="https://hatenablog-parts.com/embed?url=https://hermitwest.owst.jp/" frameborder="0" scrolling="no"></iframe><p>行ったお店をちゃんと記録したらほとんど飲み歩いていた感じになってしまった...</p>
<p>今回の成果は以上です。</p>
</div>
ArchLinux なラップトップで仕事しはじめて大体1年経った2017-12-03T00:00:00+09:002017-12-03T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2017-12-03:/articles/2017-12-03-archlinux-1year-in-work/<p>この記事は <a class="reference external" href="https://qiita.com/advent-calendar/2017/linux">Linux Advent Calendar 2017 - Qiita</a> の3日目の記事です。</p>
<p>本日は Linux デスクトップを実際に業務で使っているという話です。</p>
<p>私は今年に入ってから業務でずっと ArchLinux 環境の DELL XPS13 9360/XPS13 2 in 1 を使ってきたのですが、
そろそろ1年位経つのでそのへんの利用状況とか「実際どんな感じなの?」ということをざっくばらんに書いてみようと思います。</p>
<p>この記事は <a class="reference external" href="https://qiita.com/advent-calendar/2017/linux">Linux Advent Calendar 2017 - Qiita</a> の3日目の記事です。</p>
<p>本日は Linux デスクトップを実際に業務で使っているという話です。</p>
<p>私は今年に入ってから業務でずっと ArchLinux 環境の DELL XPS13 9360/XPS13 2 in 1 を使ってきたのですが、
そろそろ1年位経つのでそのへんの利用状況とか「実際どんな感じなの?」ということをざっくばらんに書いてみようと思います。</p>
<div class="section" id="section-1">
<h2>アウトライン</h2>
<ul class="simple">
<li>自分の仕事について</li>
<li><dl class="first docutils">
<dt>なんで Linux デスクトップを業務で使ってるの?</dt>
<dd><ul class="first last">
<li>なんで ArchLinux ?</li>
</ul>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>実際に業務で使っている PC の環境をもろもろ紹介</dt>
<dd><ul class="first last">
<li>利用しているPC</li>
<li>ArchLinux のインストール状況</li>
<li>利用しているLinux環境、ソフトフェア</li>
<li>基本的なデスクトップまわり</li>
<li>Webブラウザ</li>
<li>エディタ・コーディング</li>
<li>開発・検証環境</li>
<li>ターミナルエミュレーター</li>
<li>音楽</li>
<li>雑なお絵かきツール</li>
<li>Gifキャプチャーツール</li>
<li>パスワード管理ツール</li>
<li>プレゼンテーション</li>
<li>オフィス系ドキュメント</li>
<li>クラウドストレージ</li>
<li>Slack</li>
</ul>
</dd>
</dl>
</li>
<li>Linux 環境で業務をしていてよかったこと</li>
<li>Linux 環境で業務をしていて困ったこと</li>
<li>まとめ的な所感</li>
</ul>
</div>
<div class="section" id="section-2">
<h2>自分の仕事について</h2>
<p>Web系のエンジニアです。インフラ寄りなことがメインなのでサーバにログインして作業するとか、そのへんの環境をいい感じにしていくとかそれ系のモノが中心。Ansible Playbook や Terraform file、シェルスクリプトや Python スクリプトを書いたりするし、最近では Django, TypeScript も書く機会がでてきた。</p>
<p>この後にも書くけれど、そういった職業柄、正直 Linux で業務してて困るというケースは殆ど感じていない。</p>
</div>
<div class="section" id="linux">
<h2>なんで Linux デスクトップ を業務で使ってるの?</h2>
<p>色々あるけれど個人的にだいたい以下理由で Linux デスクトップ を使っている。</p>
<ul class="simple">
<li>業務で mac を使う機会もそれなりにあったけど、最近の mac が個人的にはイマイチな感じがしてきていた</li>
<li>Windows は嫌いじゃないけど、Unix系環境の方が落ち着くと感じる</li>
<li>プライベートではここ3年くらい Linux デスクトップ環境で過ごしてきた (LinuxMint -> ArchLinux)</li>
<li>今年の頭に転職をして、その際に好きなPCを好きなOSで使っても良いと言われた (その後もう一度転職しているのだけど、今の職場も同様)</li>
<li>Unix 系の環境で Webブラウザ, Neovim, Virtualbox, vagrant, Docker, ssh, python, git あたりを気持ちよく使いたい</li>
<li>みんなと一緒なのが面白くないと感じているところもあるっちゃある</li>
</ul>
<div class="section" id="archlinux">
<h3>なんで ArchLinux ?</h3>
<p>私個人の感覚で行くと以下のような理由で ArchLinux を使っている。</p>
<ul class="simple">
<li>Ubuntu -> LinuxMint -> ArchLinux と使ってきた結果、長期的にみても安定して使えていて ArchLinux 使ってると一番落ち着くと感じている</li>
<li>ローリングアップデートで常に最新でいられるのがよい</li>
<li>公式のパッケージで導入できるツールのバージョンもおおよそ最新</li>
<li>Arch Wiki の充実</li>
</ul>
<p>とはいえ、ディストリビューションを何にするかは人それぞれ好みによるところもあるので一概にこれがいいというものはないと思う。
Ubuntu を半年ごとにアップグレードしながら使うのも良さそうな感じもしている。</p>
</div>
</div>
<div class="section" id="pc">
<h2>実際に業務で使っている PC の環境をもろもろ紹介</h2>
<p>実際にどんな感じの環境でやっているかをつらつら書いてみる。</p>
<div class="section" id="pc-1">
<h3>利用しているPCについて</h3>
<p>今現在業務で使ってるのは <a class="reference external" href="http://www.dell.com/jp/business/p/xps-13-9365-2-in-1-laptop/pd?oc=cax503spavs16on8ojp&model_id=xps-13-9365-2-in-1-laptop">DELL XPS13 2 in 1</a> 。
スペックは最上級のものを使っているのでメモリも 16GB で Core-i7 搭載。
2 in 1 と言いつつまあ 360度 ディスプレイを開閉できるラップトップ。本体の重さも軽量で持ち運びが楽で良い。
ArchLinux のインストールも問題なくできる。</p>
<p>ただ正直言うと 2 in 1 は CPU が Core i7-7Y75 と i7 だけども省電力プロセッサということもあり、Web開発の用途でもパワー不足を感じるケースがちょいちょいある。これは PC が納品されてから気づいてしまったのが痛手だった。前の職場では <a class="reference external" href="http://www.dell.com/jp/p/xps-13-9360-laptop/pd">XPS13 9360</a> を使っていたのだけど、開発用途だとこちらをリソースコミコミで使った方が幸せになれると思う。</p>
</div>
<div class="section" id="archlinux-1">
<h3>ArchLinux のインストール状況</h3>
<p>Windows 領域は削除せずに 120GB くらい残してデュアルブートにしている。</p>
<p>主に理由は以下の2つ</p>
<ul class="simple">
<li>ファームウェア周りのアップデートがちょくちょく降ってくるのだけど、それを当てる手段が Windows 経由でしか無い</li>
<li>何らかのハードウェア故障が発生した場合、診断ツールを Windows 上で走らせないとそもそも修理をしてもらえないことがある</li>
</ul>
<p>この辺りの事情はもしかしたらメーカーによって違うのかもしれない。
とはいえ、ハードウェアを取り巻くあれこれに対処できるようにするためにも、
Windows 領域は残しておいたほうがいいだろうなーというのが今の所の個人的な見解。SSD の領域がもったいない感じもするけど。</p>
</div>
<div class="section" id="section-3">
<h3>基本的なデスクトップまわり</h3>
<img alt="" src="/images/2017/2017-12-03-Linux-adcarendar-1.png" />
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field"><th class="field-name">ログインプログラム:</th><td class="field-body">GDM</td>
</tr>
<tr class="field"><th class="field-name">デスクトップ環境:</th><td class="field-body">Gnome</td>
</tr>
<tr class="field"><th class="field-name">日本語入力:</th><td class="field-body">fcitx + mozc</td>
</tr>
<tr class="field"><th class="field-name">AURヘルパー:</th><td class="field-body">yaourt</td>
</tr>
<tr class="field"><th class="field-name">日本語フォント:</th><td class="field-body">IPAexフォント</td>
</tr>
<tr class="field"><th class="field-name">等幅フォント:</th><td class="field-body">Cica</td>
</tr>
</tbody>
</table>
<ul class="simple">
<li>Linux デスクトップを使っている人からすると、かなり無難な選択に収まっていると思う</li>
<li>ログインプログラムはもっと軽量なものもあるのだろうけど、GDM はインストールして自動起動を有効にするだけでいい感じに動いてくれるのが楽で使っている</li>
<li>Gnome はなんやかんやで Linux デスクトップではユーザーが多い環境だし情報も多く、拡張も豊富なので安心感が強い</li>
<li>日本語入力の <tt class="docutils literal">fcitx + mozc</tt> も現状これが一番無難で安定な気がしている。SKK が使えるならまだ選択肢ありそうだけど</li>
<li>フォントはどこかでキレイで見やすいと評判だった IPAex を UI に使ってる。実際かなりキレイでみやすい。</li>
<li><dl class="first docutils">
<dt>コーディングやターミナル上のフォントは最近だと Cica を使ってる。AUR にあるバージョンが 2.x にならないので、とりあえず <tt class="docutils literal">PKGBUILD.sh</tt> を↓ に差し替えて無理やり新しいものを突っ込んでる</dt>
<dd><ul class="first last">
<li><a class="reference external" href="https://gist.github.com/laughk/4ab42d1c6ac40af9fab063a07924f1ba">[For Archilinux] 手っ取り早く Cica v2 を使いたかったので AUR の PKGBUILD を以下のように編集して突っ込んだ。</a></li>
</ul>
</dd>
</dl>
</li>
<li>AUR <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a> ヘルパーは定番の <tt class="docutils literal">yaourt</tt> を使っている。ただ最近は他にもいい感じのやつがあるっぽいので試してもいいかも。</li>
</ul>
</div>
<div class="section" id="web">
<h3>Webブラウザ</h3>
<p>Vivaldi をメインに使ってたのだけど、Quantum が来てから firefox に移った。</p>
<p>Vivaldi は Google Docs 使っているとたまに変な挙動をしたり、それ以外にも Chrome 依存の Google 系 API が Vivaldi だと潰されている(?) のか上手く動かないケースも多かった。更に言えば最近ちょっと重い感じが結構あった。</p>
<p>他にも Chromium/Chrome は利用できるので、ブラウザに関して困ることは殆どないと思う。
最悪 IE/Edge が必要になった場合は Virtualbox 用のテストイメージを以下から入手してつかえばよい。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="Free Virtual Machines from IE8 to MS Edge - Microsoft Edge Development" src="https://hatenablog-parts.com/embed?url=https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/" frameborder="0" scrolling="no"></iframe></div>
<div class="section" id="section-4">
<h3>エディタ・コーディング</h3>
<p>私の場合は Neovim でだいたい事足りている。
Ansible Playbook, Terraform file、簡単な bash, Python スクリプト あたりは Neovim で十分。</p>
<p>ただ Django, TypeScript のコードをいじる際には最近は VS Code を使ってる。
簡単な設定で強力なデバックとかタグジャンプとかが使えるのが良い。パワー不足な XPS13 2 in 1 でもサクサク動く。</p>
<p>小さめな編集とかは tmux の中で Neovim を使って、大きめな Web アプリケーションのコードを触る際には VS Code を使っている感じ。</p>
<p>他にも Emacs, Atom はもちろん JetBrains 製の IDE だって pacman コマンドですぐに導入できる。選択肢は他のOSとそれほど差はないんじゃないかなと思っている。</p>
</div>
<div class="section" id="section-5">
<h3>開発・検証環境</h3>
<p>私の場合はコードを書くのは Python/bash がほとんどなので、とりあえず Python の実行環境が整えばよい感じ。
この辺は pacman 経由で python3.6, python2.7、あと理由あって AUR から python3.4 を入れている。
実際にコードを書くときには、それらをベースに直接 PC 上に venv/virtualenv で実行環境を作って使っている。</p>
<p>MySQL や Redis といった必要なミドルウェアは pacman でパッケージインストールするのではなく、Docker コンテナを起動することで対処している。</p>
<p>今更感があるのかもしれないけれど、開発環境用ミドルウェア代わりに Docker コンテナ使う運用は本当に手軽に環境整えられて便利。
mac/windows だと Docker 使ってると色々トラブルが発生するケースもあるようだけど、Linux で使ってる分にはその手のことは感じたことがない。
Kernel アップデートが降ってきたときに再起動を忘れてると、コンテナの動きがおかしくなることはあるっちゃあるけど大きな問題だとは思ってない。</p>
<p>あとは、 Amazon Linux などをコンテナとしてではなくVMとしてガチャガチャいじって挙動を確認したいケースもあって、
そういうときは Virtualbox + vagrant を使ってる。</p>
</div>
<div class="section" id="section-6">
<h3>ターミナルエミュレーター</h3>
<p><a class="reference external" href="https://wiki.archlinux.jp/index.php/Terminator">Terminater</a> という一応 Linux デスクトップでは定番っぽいものをしばらく使っていたのだけど、
使わない機能が多すぎたので最近は <a class="reference external" href="https://wiki.archlinux.jp/index.php/Termite">Termite</a> というエミュレーターを使っている。
設定は ini 形式で記載しておけるので dotfiles にも突っ込める。これは他にも軽量で使いやすものがあれば知りたいかなというところ。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="thestinger/termite: A keyboard-centric VTE-based terminal, aimed at use within a window manager with tiling and/or tabbing support." src="https://hatenablog-parts.com/embed?url=https://github.com/thestinger/termite/graphs/contributors" frameborder="0" scrolling="no"></iframe><p>ちなみに <a class="reference external" href="https://wiki.archlinux.jp/index.php/Rxvt-unicode">urxvt</a> も試してみたのだけど、
絵文字の表示がイマイチだったり 4K ディスプレイ上でフルスクリーンにするとエミュレータ全体が落っこちるということがあり、使うのは諦めた。</p>
</div>
<div class="section" id="section-7">
<h3>音楽</h3>
<p>私は常に音楽聴きながら作業をしているわけではないけれど、聞く場合は Google Play Music を利用している。
それもブラウザ越しではなく Linux でも利用可能な以下の Electoron 製のプレイヤーがあるので使っている。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="MarshallOfSound/Google-Play-Music-Desktop-Player-UNOFFICIAL-: A beautiful cross platform Desktop Player for Google Play Music" src="https://hatenablog-parts.com/embed?url=https://github.com/MarshallOfSound/Google-Play-Music-Desktop-Player-UNOFFICIAL-" frameborder="0" scrolling="no"></iframe><p>AUR 経由でインストールする場合は、パッケージ名が 「gpmdp」になっている。</p>
</div>
<div class="section" id="section-8">
<h3>雑なお絵かきツール</h3>
<p>Github の PR や Issue、あとは Slack なんかで雑に指示書きやモザイクを入れたスクショを共有したい場合があるのだけど、
そういう用途に <a class="reference external" href="https://pinta-project.com/pintaproject/pinta/">Pinta</a> というアプリケーションを使ってる。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="Pinta: Painting Made Simple! - PintaProject/Pinta" src="https://hatenablog-parts.com/embed?url=https://pinta-project.com/pintaproject/pinta/" frameborder="0" scrolling="no"></iframe><p>mac でいう evernote skitch みたいなものだけど、起動した感じは Windows のペイントに近いかも。</p>
<p>ちなみに以前は shutter というツールを使っていたりもしたけれど、どこかのタイミングで Perl のバージョンが上がってから全く起動しなくなってしまった。インストールも時間がかかっていたことから使うのをやめた。</p>
</div>
<div class="section" id="gif">
<h3>Gifキャプチャーツール</h3>
<p><a class="reference external" href="https://github.com/phw/peek">Peek</a> というツールを使っている。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="phw/peek: Simple animated GIF screen recorder with an easy to use interface" src="https://hatenablog-parts.com/embed?url=https://github.com/phw/peek" frameborder="0" scrolling="no"></iframe><p>今の所そんなに頻繁には使わないけれど、ものすごくシンプルで使いやすいかなーとは思っている。</p>
</div>
<div class="section" id="section-9">
<h3>パスワード管理ツール</h3>
<p>この手のツールの定番は 1Password なんだろうけど、私は <a class="reference external" href="https://www.enpass.io/">Enpass</a> を使っている。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="Best password manager for iOS, Android, Windows, Linux, Mac | Enpass" src="https://hatenablog-parts.com/embed?url=https://www.enpass.io/" frameborder="0" scrolling="no"></iframe><p>クロスプラットフォームでかつ、OSが変わってもUIが一緒で使用感にほとんど差が無く使えるのがよい。
PCだけで使う分には無料でOKだし、モバイルも含めて使うならプラットフォームごとに $9.99 払えばフルで使える。<a class="footnote-reference" href="#footnote-2" id="footnote-reference-2">[2]</a></p>
<p>以前は Keepass も使っていたけれど、Enpass のブラウザ連携のやりやすさに感動して1年ほど前に Enpass に乗り換えている。
そのへんの話は以前以下のブログに書いた。</p>
<p><a class="reference external" href="/2016/12/28/0001.html">続・ラフなラボ – パスワード管理ツールを Keepass から Enpass へ移行した</a></p>
</div>
<div class="section" id="section-10">
<h3>プレゼンテーション</h3>
<p>当然 Keynote、PowerPoint は使えないけれど、案外選択肢はあると思う。</p>
<p>今年は色々なツール・サービスを使う機会があったけれど、普通にプレゼンテーションするのであれば <a class="reference external" href="https://docs.google.com/presentation/u/0/">Google Slides</a> を使うのいいんじゃないかなと個人的には思っている。公開されているテーマも結構あるし、基本的なレイアウトが扱いやすいのでいいと思う。画像も扱いやすい。</p>
<p>他の選択肢だと以下も普通につかえる。Markdown スライド系が多い。</p>
<ul class="simple">
<li><a class="reference external" href="https://slideship.com/">Slideship</a></li>
<li><a class="reference external" href="https://qiita.com/Qiita/items/4ff5873776992f0511d6">Qiitaのスライドモード</a></li>
<li><a class="reference external" href="https://github.com/gnab/remark">remark</a></li>
<li><a class="reference external" href="https://yhatt.github.io/marp/">Marp</a></li>
<li><a class="reference external" href="https://ja.libreoffice.org/discover/impress/">LibreOffice Impress</a></li>
</ul>
<p>また実際にプロジェクタに繋いでプレゼンする際には、解像度の Scale 設定を 100% より大きくしている場合、
プロジェクタ側の解像度調整がどうにも上手くいかなくなることがある。
ラップトップのディスプレイが QHD や 4K 対応の場合デフォで200%とかになってる可能性もあるので設定を確認したほうがよい。</p>
</div>
<div class="section" id="section-11">
<h3>オフィス系ドキュメント</h3>
<p>今の職場は基本的に Google Apps を使うのでドキュメントもだいたい Google Docs。
たまに MS Office のドキュメントが共有されるケースもあるけれど、閲覧だけなので Google Drive でみても LibreOffice でみても全く問題ない。</p>
<p>なので、ブラウザとLibreOfficeさえあればほぼ困ることはないという状況。</p>
</div>
<div class="section" id="section-12">
<h3>クラウドストレージ</h3>
<p>会社で Google Apps を使っている関係で Google Drive が使える。
残念ながら公式のクライアントは Linux には用意されていないけれど、今 <a class="reference external" href="https://www.thefanclub.co.za/overgrive">OverGrive</a> というものをトライアル中。いい感じに同期できているっぽいので License 購入してよさそうな感じ。</p>
<p>一応 Gnome にも Google アカウントの機能に Google Drive 領域をマウントする機能があるのだけど、
ものすごく反応が遅くてまともに使えない感じ。</p>
<p>ちなみに業務用の XPS13 2 in 1 には入れていないけど、
プライベートで使っている XPS15 (こちらも ArchLinux) には Dropbox と OneDrive のクライアントを入れている。
Dropbox は公式の Linux クライアントが使えるし、OneDrive も非公式ではあるけどまあ使えているという感じ。</p>
<p>OneDrive のクライアントについては以前ブログを書いた。</p>
<p><a class="reference external" href="/2016/12/22/0000.html">続・ラフなラボ – Linux の MS Onedrive のクライアントで新しいものが出ていたので変更してみた</a></p>
</div>
<div class="section" id="slack">
<h3>Slack</h3>
<p>Slack は公式の Linux 版が提供されており、ArchLinux 向けのものも pacman 経由で簡単に入れられる。
他にも <a class="reference external" href="https://github.com/raelgc/scudcloud">scudcloud</a> というサードパーティのクライアントもある。</p>
<p>基本的には公式を使っておけばいいと思う。ただ、以前 mac で入力すると豆腐が混入するバグが直るまでの間、
公式クライアントでは豆腐まみれで見れなかった文字が scudcloud では何の問題もなく表示されることもあったので
念の為両方入れている。</p>
</div>
</div>
<div class="section" id="linux-1">
<h2>Linux 環境で業務をしていてよかったこと</h2>
<p>実は極端に「これができる。Linuxデスクトップサイコー!」と感じることはそんなにない。</p>
<p>Docker がネイティブで使えるという点はうれしいし、開発やインフラ運用に必要なツールは大体すぐに導入できるし、デスクトップ環境の細かいところも自分色に染められる感じは結構気に入っているかなという気はする。</p>
<p>ただ一番大きいのは、ArchLinux だからではあるけど、
常に最新のOSを安定して使っていられるということが私にとってはうれしいことだなと感じている。</p>
</div>
<div class="section" id="linux-2">
<h2>Linux 環境で業務をしていて困ったこと</h2>
<p>これまでの流れだと、そんなに困ってなさそうな雰囲気を醸し出したかもしれないけれど
1個だけものすごく困ったというかツラいことがあった。それが IPsec な VPN への接続。</p>
<p>ツラさを挙げると以下のような感じ。</p>
<ul class="simple">
<li>AUR 含めて GUI の Client ツールを探してもほとんど出てこないし、出てきたものもまともに動かない</li>
<li>「Linux IPsec」で検索しても VPN サーバ構築の話ばかりで、Client として接続するだけの話がほとんど出てこない</li>
<li>辛うじて見つけた情報をもとに Client 設定をするにしても、ミドルウェアを幾つか導入して設定する必要がある</li>
<li>結局 libreswan か strongswan + lx2tpd の導入が必要となり大掛かりでものすごく面倒。下手なサーバ構築よりキツイ。</li>
</ul>
<p>手段がないわけじゃないけど、Windows/mac だとすんなりできることなのになんでこんなことを... というレベルでツラかった。</p>
<p>ちなみに OpenVPN の場合は NetworkManager のプラグインがしっかり動くので、あっさり繋がる。
他の VPN は試してないけど、もしかしたら導入が面倒な場合もあるかもしれない。</p>
</div>
<div class="section" id="section-13">
<h2>まとめ的な所感</h2>
<p>実際に Linux デスクトップをこんな感じで仕事で使っているという紹介をしました。</p>
<p>1年位 Linux デスクトップを実際に使ってみていますが、思ったよりも困ることは全然少ないなと感じています。
もちろん、仕事内容や職場環境によるところはあると思いますが Linux デスクトップ生活、悪くないです。</p>
<p>私個人としては、これからも特段理由がなければ Linux デスクトップを使い続けようと思ってます。</p>
<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td><a class="reference external" href="https://wiki.archlinux.jp/index.php/Arch_User_Repository">AUR</a> はユーザーコミュニティによる ArchLinux 用のリポジトリ</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="footnote-2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-2">[2]</a></td><td>Android, iOS にそれぞれ課金という形になる。なので Android 複数台なら1回だけの課金でいいし、Android も iOS もというのであればそれぞれに対して課金する必要が有るという感じ。</td></tr>
</tbody>
</table>
</div>
BPStudy#123 〜 技術書執筆の実際、ノウハウ 〜 にて登壇させてもらった #bpstudy2017-11-27T00:00:00+09:002017-11-27T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2017-11-27:/articles/2017-11-27-bpstudy123/<p>先日行われた 「BPStudy#123 〜 技術書執筆の実際、ノウハウ 〜 」 にて登壇させていただきました。</p>
<iframe class="hatenablogcard" frameborder="0" scrolling="no" src="https://hatenablog-parts.com/embed?url=https://bpstudy.connpass.com/event/68500/" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="BPStudy#123〜技術書籍執筆の実際、ノウハウ - connpass"></iframe><p>先日行われた 「BPStudy#123 〜 技術書執筆の実際、ノウハウ 〜 」 にて登壇させていただきました。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="BPStudy#123〜技術書籍執筆の実際、ノウハウ - connpass" src="https://hatenablog-parts.com/embed?url=https://bpstudy.connpass.com/event/68500/" frameborder="0" scrolling="no"></iframe>
<div class="section" id="section-1">
<h2>当日のスライド</h2>
<p>資料はこちら。レイアウトを程よく雑にいじったりしたかったので今回は Google Slides で作成しました。</p>
<div class=google-slide>
<iframe src="https://docs.google.com/presentation/d/e/2PACX-1vT5zXdtBJhEJ1-OFSAN2sxqPgFp_C3IdVUGjhqSs6WtnRavdr2d_QHZHOMWwL1lG5gtftJ79V9qgOPv/embed?start=false&loop=false&delayms=3000" frameborder="0" width="960" height="569" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>
</div><p>また発表の内容を <a class="reference external" href="https://twitter.com/froakie0021">@froakie0021</a> さんにキレイにまとめていただいていました。
自分の発表内容をこうしてまとめていただけるのは本当に嬉しいですね。 @froakie0021++</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">最後は <a href="https://twitter.com/laugh_k?ref_src=twsrc%5Etfw">@laugh_k</a> さんの『はじめての執筆でわかった技術書ができるまでの流れ』でした。リポジトリの死活監視大事 <a href="https://twitter.com/hashtag/bpstudy?src=hash&ref_src=twsrc%5Etfw">#bpstudy</a> <a href="https://t.co/nP6aUd5YyR">pic.twitter.com/nP6aUd5YyR</a></p>— もふもふ (@froakie0021) <a href="https://twitter.com/froakie0021/status/934019441779552257?ref_src=twsrc%5Etfw">November 24, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><div class="section" id="section-2">
<h3>内容とか背景とか</h3>
<p>「<a class="reference external" href="http://amzn.to/2A8kzoe">スラスラわかる Python</a> <a class="footnote-reference" href="#surapy" id="footnote-reference-1">[1]</a> の執筆で初めて技術書執筆をやってみた体験談」的なお話をさせていただきました。</p>
<p>今回の BPStudy の他の登壇者の面々を見ると、既に執筆を経験されたことのある方たちだったので、
じゃあ自分は「技術書を初めて執筆してみてどうだったよ?」の視点で話をしようと考えました。
実際、当日は登壇者それぞれが全く違う視点の話になり会全体のバランスがよくなったようでよかったです。</p>
<p>また、今回のお話には <a class="reference external" href="https://pycon.jp/2017/ja/events/media-meeting/">PyCon JP 2017 のメディア会議</a> 登壇の際に用意していたネタで、尺の都合等で話しきれなかった内容も盛り込みました。 この辺は <a class="reference external" href="/2017/09/23/000005.html">PyCon JP 2017 参加ブログ</a> に 「別途ブログ書く」と言っていましたが、今回の BPStudy のお話を <a class="reference external" href="https://twitter.com/takanory">@takanory</a> さんよりいただき、発表という形で実現することができました。機会をいただき本当にありがとうございました!</p>
</div>
</div>
<div class="section" id="section-3">
<h2>その他雑感</h2>
<ul class="simple">
<li>発表の直前まさかの <a class="reference external" href="https://twitter.com/haru860">@haru860</a> さんから「laughk 現象 <a class="footnote-reference" href="#laughk-phenomenon" id="footnote-reference-2">[2]</a> というものがあるらしいですが?」と言われたのはびっくりした。どこまで話が伝わってるんだ...</li>
<li>今回の発表では時間内にまず話したかったことは話しきれた感じがあったのでよかった。</li>
<li>他の登壇者の方の話も視点が違っていて「わかるわかる」「なるほどなー」という感じに本当に面白く聞けた。</li>
<li>懇親会で <a class="reference external" href="https://twitter.com/takanory">@takanory</a> さん <a class="reference external" href="https://twitter.com/hirokiky">@hirokiky</a> さんと「今日とまったく同じ内容で再演したいくらい」と話がでたくらい大分盛り上がった。</li>
<li>懇親会、1次会のベトナム料理非常にボリューミーだしおいしかった。2次会も久々にじっくり美味しいクラフトビールをくらえた感じでよかった。終電は逃した。</li>
<li>正直、今回は家庭の都合で準備がかなりギリギリになってしまい大丈夫かなと内心不安だったけど、いい会になったようだしそれに貢献できたようで本当によかった。最高だった。</li>
</ul>
<hr class="docutils" />
<p>最後に、今回の BPStudy では執筆を通じて感じていたアウトプットしたいことを発表する場をいただき本当にありがとうございました!</p>
<table class="docutils footnote" frame="void" id="surapy" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>スラスラわかる Python についてはこちらをご参照ください <a class="reference external" href="https://memo.laughk.org/2017/08/07/00001.html">続・ラフなラボ – スラスラわかるPythonという本を書きました</a></td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="laughk-phenomenon" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-2">[2]</a></td><td>私が過去の pyhack の成果発表の際にどんなに頑張ってもディスプレイの解像度の調整が上手く行かずに手こずるということを何回か連続でやったらいつの間にかそう名付けられてしまった。</td></tr>
</tbody>
</table>
</div>
Python もくもく自習室 #4 ( #rettypy ) 参加ログ2017-11-26T00:00:00+09:002017-11-26T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2017-11-26:/articles/2017-11-26-rettypy4/<p>1週間経ってしまったけど、 Python もくもく自習室 #4 ( #rettypy ) に行ってきたのでその時のログをまとめておく。</p>
<iframe class="hatenablogcard" frameborder="0" scrolling="no" src="https://hatenablog-parts.com/embed?url=https://retty.connpass.com/event/69865/" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="Pythonもくもく自習室 #4 @ Rettyオフィス - connpass"></iframe><p>1週間経ってしまったけど、 Python もくもく自習室 #4 ( #rettypy ) に行ってきたのでその時のログをまとめておく。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="Pythonもくもく自習室 #4 @ Rettyオフィス - connpass" src="https://hatenablog-parts.com/embed?url=https://retty.connpass.com/event/69865/" frameborder="0" scrolling="no"></iframe>
<div class="section" id="section-1">
<h2>やったこと</h2>
<ul class="simple">
<li><a class="reference external" href="/2017/11/18/000010.html">続・ラフなラボ – PyCon HK 2017 に参加しに香港に行ってきた</a> のブログを書いてた</li>
<li><a class="reference external" href="https://bpstudy.connpass.com/event/68500/">BPStudy#123〜技術書籍執筆の実際、ノウハウ - connpass</a> の準備</li>
</ul>
<p>ブログを書くのが思ったより時間かかってしまって、BPStudy の準備がそれほどできてなかったなーという感じ</p>
<div class="section" id="section-2">
<h3>雑感</h3>
<ul class="simple">
<li>Retty さんのオフィスに行くのが久しぶりで駅の出口とか忘れていて少し迷いかけた。</li>
<li>お昼は焼肉屋 or とんかつを求めてさまよい歩いたけれどどちらもお店がおやすみ。最終的に Retty さんオフィス近くのカレー屋さんに落ち着いた。野菜中心になったけどおいしかった。あと普段全然話さない人と同席で、馴染みのない業界の話を色々聞けたのもよかった。</li>
</ul>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="ハドルカレーダイニング (huddle curry dining) (赤羽橋/カレー) - Retty" src="https://hatenablog-parts.com/embed?url=https://retty.me/area/PRE13/ARE14/SUB1405/100001168358/" frameborder="0" scrolling="no"></iframe><ul class="simple">
<li>15時くらいにおやつがデプロイされた。写真撮ってなかったけど、もちもちなどらやき美味しかった。</li>
<li>全体的にかなり集中できて、写真撮ったりとか Twitter 見たりとかもしなかったなー</li>
<li>成果発表では PyCon HK の参加報告的なことと BPStudy 用のスライドをできてるところだけチラ見せでおわった。あと久々に例の現象を起こしてしまった。</li>
</ul>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">久々に発表のときのディスプレイ調子悪くなった <a href="https://twitter.com/hashtag/rettypy?src=hash&ref_src=twsrc%5Etfw">#rettypy</a></p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/931809033870229504?ref_src=twsrc%5Etfw">November 18, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><hr class="docutils" />
<p>Rettypy は会場が広々してガッツリ集中しつつも、成果発表が登壇っぽくできるのはいいなーと改めて思った。
また都合つきそうならおじゃまします!</p>
</div>
</div>
PyCon HK 2017 に参加しに香港に行ってきた2017-11-18T00:00:00+09:002017-11-18T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2017-11-18:/articles/2017-11-18-pyconhk2017/<p>PyCon HK に参加するべく、今月頭に香港に行ってきたのでそのまとめ。
2日間の開催だったけど、諸々の都合で1日目だけ参加してきた。</p>
<iframe class="hatenablogcard" frameborder="0" scrolling="no" src="https://hatenablog-parts.com/embed?url=http://pycon.hk/2017/" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="PyCon 2017"></iframe><p>PyCon HK に参加するべく、今月頭に香港に行ってきたのでそのまとめ。
2日間の開催だったけど、諸々の都合で1日目だけ参加してきた。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="PyCon 2017" src="https://hatenablog-parts.com/embed?url=http://pycon.hk/2017/" frameborder="0" scrolling="no"></iframe>
<div class="section" id="section-1">
<h2>行った動機</h2>
<p><a class="reference external" href="https://twitter.com/terapyon">@terapyon</a> さんに「PyCon HK どう?」とお声がけもらったのがきっかけ。
今年本当は行くつもりでいた PyCon APAC に行けなくなったこともあり、「海外カンファレンス行ってみたいなー」という願望を叶えるのにちょうどよいかなと思った。</p>
</div>
<div class="section" id="pycon-hk-2017">
<h2>PyCon HK 2017</h2>
<div class="section" id="section-2">
<h3>会場</h3>
<p>会場は <a class="reference external" href="http://www.cityu.edu.hk/">City University of Hong Kong</a>
最寄り駅の九龍塘站 (Kowloon Tong) 駅と繋がっているショッピングモールから外に出ること無く直接行くことができる。</p>
<img alt="" src="/images/2017/2017-11-18-pyconhk-01.jpg" />
<p>写真を撮ってなかったけど、
大学内は全体的に吹き抜けのものすごく広い通路があって、その両脇にいくつもの講義スペースがあるような感じだった。
ソファーとかもいっぱいあって、疲れたときにスッと休めるのはよかった。</p>
<p>特に案内とかなかったけど 2F に開場を発見して受付を済ませた。</p>
<p>看板はこんな感じ。</p>
<img alt="" src="/images/2017/2017-11-18-pyconhk-03.jpg" />
<p>「Big Data」「Data Science」「Analytics」の文言からもわかるとおり、イベント全体がデータサイエンスを意識したものになっていた。
キーノートのときも「データ系の人手を上げてみて」と言われたときに、感覚的にだけど開場の8割9割が手を上げていて実質 PyData っぽい層が集まっているんだろうなと思った。</p>
</div>
<div class="section" id="section-3">
<h3>トーク</h3>
<p>トークは以下のものを聞いた。</p>
<ul class="simple">
<li><a class="reference external" href="http://pycon.hk/2017/topics/applying-serverless-architecture-pattern-to-distributed-data-processing/">Applying serverless architecture pattern to distributed data processing</a>
- <a class="reference external" href="https://github.com/fnproject/fn">fnproject/fn: The container native, cloud agnostic serverless platform.</a> に関する話</li>
<li><a class="reference external" href="http://pycon.hk/2017/topics/python-blockchain-application-in-less-than-24hrs/">Python Blockchain Application in < 24 hrs</a></li>
<li><a class="reference external" href="http://pycon.hk/2017/topics/how-to-reinvent-the-wheel-and-build-the-most-popular-JSON-RPC-library/">How to reinvent the wheel and build the most popular JSON-RPC library</a></li>
<li><a class="reference external" href="http://pycon.hk/2017/topics/ha-capability-with-document-store-using-mysql-shell-running-python/">HA capability with Document Store using MySQL Shell - running Python</a></li>
<li>LT</li>
</ul>
</div>
<div class="section" id="pycon-hk">
<h3>PyCon HK 全体的な感想</h3>
<p>会場のあらゆる自販機で水が売り切れていてなかなかしんどかった。
仕方なく日本でいう豆乳飲料的なやつを買って飲んでたのだけどすごく甘かった。↓を3本くらい飲んだ。
このシリーズ、現地ではポピュラーなのかわからないけどこれ用の自販機が多かった。</p>
<img alt="" src="/images/2017/2017-11-18-pyconhk-02.jpg" />
<p>お昼は大学の学食みたいな場所で食べた。学食と言うよりはフードコートのような感じだった。
食べたのはアヒルのお肉のヌードル。麺は中華麺だと思ってたら春雨っぽいのだった。
肉はやや臭みがあって好みが分かれそう。この臭みを抑えるためなのか薬草っぽいのも入っている感じだった.</p>
<img alt="" src="/images/2017/2017-11-18-pyconhk-04.jpg" />
<div class="section" id="section-4">
<h4>他もろもろ</h4>
<ul class="simple">
<li>トークセッションの言語は基本的に英語なので、「まったくわからん、詰んだ...」というようなことはなかった。(一部だけ中国語のセッションもあったみたいだけど)</li>
<li>小さな講義室でのトークセッションがなんだか大学の講義をうけてるような感じで聞けたのは個人的にいいなーと思った。</li>
<li><dl class="first docutils">
<dt>正直なところ、イベントとしてはまだ全体的に手探りでやってる部分も多いんだろうなという気はした。</dt>
<dd><ul class="first last">
<li>Wifi が有るんだか無いんだかよくわかんなかった</li>
<li>スライドやデモの字がものすごく小さくて見えないこともちょいちょいあった。</li>
<li>タイムキープがあまりちゃんとできてないときもあった。</li>
</ul>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>LTが <a class="reference external" href="https://twitter.com/terapyon">@terapyon</a> さんと最後に飛び込んでこられた方の2名だけだった。</dt>
<dd><ul class="first last">
<li>あまりこの辺の文化が出来上がってないのかなーという気がちょっとした。</li>
<li>時間が無くてネタを仕込めなかったのが本当に悔しい...</li>
</ul>
</dd>
</dl>
</li>
<li>帰り際にスピーカーパーティのゲストにと誘ってもらえたのだけど、家族も一緒に香港に来ていた関係で行けなかったのが残念。</li>
<li>1日のプログラムが 16:30 には終わったのは今回家族で来ていた関係もあり、結構都合が良かった。ボリューム的にもちょうどよかったのかもしれない。</li>
</ul>
</div>
</div>
</div>
<div class="section" id="section-5">
<h2>その他、初めて香港行ってみての感想とか</h2>
<p>妙に建物が細長いなーと思った。↓は泊まったホテルから撮ったやつ。</p>
<img alt="" src="/images/2017/2017-11-18-04.jpg" />
<p>夜景がすごくよかった。ホテルからも見えたけど、フェリーに載ってみるこれまためっちゃキレイ。スマフォ撮影で結構船が揺れていたので写真はこれが限界。</p>
<img alt="" src="/images/2017/2017-11-18-03.jpg" />
<div class="section" id="section-6">
<h3>他もろもろ</h3>
<ul class="simple">
<li>思ったよりも英語ばっかりじゃなかった。広告とか見てると中国語の方が多かったかも。</li>
<li>交通網がめちゃめちゃ整っていて移動がすごく便利だった。主要なところは駅から直結しているケースが多くてホテルに行くにも PyCon HK 会場に行くにもほとんど外を歩かなかった。</li>
<li><a class="reference external" href="https://www.octopus.com.hk/tc/consumer/index.html">octopus (個人客戶 - 香港八達通)</a> という日本で言う Suica, PASMO, ICOCA 的なものがものすごく普及していて、これにチャージさえしていればだいたい買い物ができた。現地ではクレジットカードや現金よりもこちらが主流な印象を受けた。</li>
<li><dl class="first docutils">
<dt>キャッシュフローの確認をお座なりにしてしまい、クレジットカードが止まっていることに香港に入ってから気づいて詰みかけた。</dt>
<dd><ul class="first last">
<li>旅費を含む請求がかかったタイミングで普段引き落とされる前提の額しか口座に用意しておらず、引き落としに失敗していたことが原因 😇</li>
<li>国内外限らず、旅行の際には自分のキャッシュフローをちゃんと確認しましょう(自戒)</li>
<li>細かい買い物は octopus にチャージして乗り切った</li>
<li>大きめなものは妻に色々出してもらった...</li>
</ul>
</dd>
</dl>
</li>
</ul>
</div>
</div>
<div class="section" id="section-7">
<h2>さいごに</h2>
<p>スケジュールにあまり余裕が無く、ものすごく大変だったしやりきれなかったところもあったけど香港よかった。
来年は LT くらいの準備をしつつ PyCon に行く事を口実にまた行きたいなー。</p>
</div>
Python入門者向けハンズオン #6 で講師をしてきた2017-10-31T00:00:00+09:002017-10-31T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2017-10-31:/articles/2017-10-31-pynyumon-6/<p>先日行われました「Python 入門者向けハンズオン #6」で講師をしてきました。イベントのリンクは以下です。</p>
<iframe class="hatenablogcard" frameborder="0" scrolling="no" src="https://hatenablog-parts.com/embed?url=https://python-nyumon.connpass.com/event/62147/" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="Python入門者向けハンズオン #6 - connpass"></iframe><p>過去に何度か TA としてお手伝いさせて頂いていた Python 入門者の集いのハンズオンシリーズでしたが、
今回は <a class="reference external" href="https://twitter.com/terapyon">@terapyon</a> さんのお声がけもあり、まさかの講師として参加をしてきました。</p>
<p>先日行われました「Python 入門者向けハンズオン #6」で講師をしてきました。イベントのリンクは以下です。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="Python入門者向けハンズオン #6 - connpass" src="https://hatenablog-parts.com/embed?url=https://python-nyumon.connpass.com/event/62147/" frameborder="0" scrolling="no"></iframe><p>過去に何度か TA としてお手伝いさせて頂いていた Python 入門者の集いのハンズオンシリーズでしたが、
今回は <a class="reference external" href="https://twitter.com/terapyon">@terapyon</a> さんのお声がけもあり、まさかの講師として参加をしてきました。</p>
<div class="section" id="section-1">
<h2>事前にやってたこと</h2>
<p>この会にあたって、利用するテキストの情報が大分古くなってしまったなーというのが気になったので
更新のためのPRを送ったりしてました。</p>
<ul class="simple">
<li><a class="reference external" href="https://github.com/pynyumon/pynyumon/pull/10">Change a recommended editor from Atom to VS Code by laughk · Pull Request #10 · pynyumon/pynyumon</a></li>
<li><a class="reference external" href="https://github.com/pynyumon/pynyumon/pull/11">Delete unnecessary description by laughk · Pull Request #11 · pynyumon/pynyumon</a></li>
<li><a class="reference external" href="https://github.com/pynyumon/pynyumon/pull/13">Add a description about using commandline by laughk · Pull Request #13 · pynyumon/pynyumon</a></li>
<li><a class="reference external" href="https://github.com/pynyumon/pynyumon/pull/15">update python version to 3.6.3 by laughk · Pull Request #15 · pynyumon/pynyumon</a></li>
<li><a class="reference external" href="https://github.com/pynyumon/pynyumon/pull/21">スクレイピングの新しいサンプルを追加 by laughk · Pull Request #21 · pynyumon/pynyumon</a></li>
<li><a class="reference external" href="https://github.com/pynyumon/pynyumon/pull/24">windows の venv の説明を PowerShell 前提のものに更新 by laughk · Pull Request #24 · pynyumon/pynyumon</a></li>
<li><a class="reference external" href="https://github.com/pynyumon/pynyumon/pull/32">日本語がおかしかったので修正 by laughk · Pull Request #32 · pynyumon/pynyumon</a></li>
<li><a class="reference external" href="https://github.com/pynyumon/pynyumon/pull/33">公式インストーラーから入れたPythonでは sudo は不要なので説明からも消す by laughk · Pull Request #33 · pynyumon/pynyumon</a></li>
<li><a class="reference external" href="https://github.com/pynyumon/pynyumon/pull/34">対象となる処理の Python Tutor サンプルのパーマリンク情報を追加 by laughk · Pull Request #34 · pynyumon/pynyumon</a></li>
<li><a class="reference external" href="https://github.com/pynyumon/pynyumon/pull/38">Powershell の実行ポリシー変更のコマンドが間違っていたので修正します by laughk · Pull Request #38 · pynyumon/pynyumon</a></li>
</ul>
<p>またイベント1週間前には <a class="reference external" href="https://twitter.com/takanory">@takanory</a> さんと <a class="reference external" href="https://twitter.com/kashew_nuts">@kashew_nuts</a> さんに練習にも付き合っていただきました。(@BP社さん会議室) 本当にありがとうございました!!!</p>
</div>
<div class="section" id="section-2">
<h2>当日</h2>
<div class="section" id="section-3">
<h3>準備</h3>
<p>イベント当日はプロジェクタの接続テストとかやっておいたほうがいいだろうなと思って大分余裕を持って渋谷入り。
AM11:00 くらいにはヒカリエに居ました。適当なソファーで <a class="reference external" href="https://github.com/pynyumon/pynyumon">ハンズオンで使うテキスト</a> の内容を確認しつつ <a class="reference external" href="https://twitter.com/kashew_nuts">@kashew_nuts</a> さん、<a class="reference external" href="https://twitter.com/afroscript10">@afroscript10</a> さんと合流して会場入り。かしゅーさんと当日どんな感じで進めていこうか緩く打ち合わせ & 動作確認。画面に出す文字の大きさとかを調整。</p>
<p>以下は開始直前の気持ちです</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">今日これからこの会で講師するのですが緊張してゲロ吐きそうです<br> / Python入門者向けハンズオン #6 <a href="https://t.co/jDbGfl5ilo">https://t.co/jDbGfl5ilo</a> <a href="https://twitter.com/hashtag/PyNyumon?src=hash&ref_src=twsrc%5Etfw">#PyNyumon</a></p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/924098587981619200?ref_src=twsrc%5Etfw">October 28, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
<div class="section" id="section-4">
<h3>本編</h3>
<p>始まってみると、最初のスクリプトを作って実行して見るところで予想以上にハマってしまうケースが散見。
「あー、そうなっちゃったか...」と思いつつも、大勢いる TA のみなさんの臨機応変の対応に本当に助けられました。</p>
<p>最初の部分が過ぎた辺りからは基本的な説明のリズムをすんなり作れて少し安心。
途中で TA の皆さんから「画面の色の見やすさ」や「質問のコントロールのやりかた」など状況に応じたフィードバックをもらえたのも大きくてホントこの会は色々な人に支えられてるなーと実感する場面が多かったです。感謝。</p>
</div>
</div>
<div class="section" id="section-5">
<h2>余談</h2>
<ul class="simple">
<li>途中でプロジェクタがダウンしてしまってものすごく焦った。PCじゃなかったのは良かった (新laughk現象、プロジェクタが死ぬ)</li>
<li>Just Idea だったけど手元にあった「スラスラわかるPython」プレゼントのじゃんけん大会できたのはよかった。</li>
<li>3時間位人前で話し続ける場合、水は2Lでも足りないという知見を得た。</li>
<li>テキスト以外の話す際のメモを Google Keep に突っ込んで手元のスマフォで見ようとしていたのだけど、思いの外 Twitter の通知が来てしまってあまり見れなかった。やっぱり講師という役割は注目を集めるのだなー。</li>
<li>テキストをPCとは別に横にタブレット置いて出しておいたのは良かった。</li>
<li>画面をミラーリングにしたのは大正解。周囲を見渡す余裕が殆どなかった。</li>
<li>Windows VM 操作中のトラックパッドの中クリック誤爆がかなり多くてキツかった。もし次機会あるならトラックボール持っていこうかな...</li>
</ul>
<p>そんな感じで無事なんとか終了。参加された皆様本当にお疲れ様でした!
少しでも「Python 面白いなー」と思ってもらえたらうれしいな。</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">お疲れさまでした!:)<a href="https://twitter.com/hashtag/pynyumon?src=hash&ref_src=twsrc%5Etfw">#pynyumon</a> <a href="https://t.co/639UEKuNaP">pic.twitter.com/639UEKuNaP</a></p>— afroscript@teratail (@afroscript10) <a href="https://twitter.com/afroscript10/status/924229676549025793?ref_src=twsrc%5Etfw">October 28, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><p>ちなみに自分は懇親会のあと、3次会まで行ってギリギリ終電で帰りました。次の日疲れてほぼ死んでました 😇</p>
</div>
GUI git client, Gitg で Gravater の有効化2017-10-08T00:00:00+09:002017-10-08T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2017-10-08:/articles/2017-10-08-gitg-enable-gravater/<p>最近ちょこちょこ Git の GUI クライアント(on Linux)を試してみているのだけど、GNOME に付属している <a class="reference external" href="https://github.com/GNOME/gitg">Gitg</a> で Gravatar を有効にする情報がなかったのでメモ。</p>
<iframe class="hatenablogcard" frameborder="0" scrolling="no" src="https://hatenablog-parts.com/embed?url=https://github.com/GNOME/gitg" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="GNOME/gitg: gitg is a GitX clone for GNOME/gtk+. It aims at being a small, fast and convenient tool to visualize git history and actions that benefit from a graphical presentation."></iframe><p>最近ちょこちょこ Git の GUI クライアント(on Linux)を試してみているのだけど、GNOME に付属している <a class="reference external" href="https://github.com/GNOME/gitg">Gitg</a> で Gravatar を有効にする情報がなかったのでメモ。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="GNOME/gitg: gitg is a GitX clone for GNOME/gtk+. It aims at being a small, fast and convenient tool to visualize git history and actions that benefit from a graphical presentation." src="https://hatenablog-parts.com/embed?url=https://github.com/GNOME/gitg" frameborder="0" scrolling="no"></iframe>
<div class="section" id="section-1">
<h2>結論</h2>
<p><tt class="docutils literal">org.gnome.gitg.preferences.interface</tt> に <tt class="docutils literal"><span class="pre">use-gravatar</span></tt> という Boolean の設定項目があるので、それを <tt class="docutils literal">true</tt> にしてやればOK。
コマンドだと以下のようにする。</p>
<p>デフォルトの値は <tt class="docutils literal">false</tt>.</p>
<div class="highlight"><pre><span></span><span class="gp">$ </span>gsettings get org.gnome.gitg.preferences.interface use-gravatar
<span class="go">false</span>
</pre></div>
<p>こいつを <tt class="docutils literal">true</tt> へ変更</p>
<div class="highlight"><pre><span></span><span class="gp">$ </span>gsettings <span class="nb">set</span> org.gnome.gitg.preferences.interface use-gravatar <span class="nb">true</span>
<span class="gp">$ </span>gsettings get org.gnome.gitg.preferences.interface use-gravatar
<span class="go">true</span>
</pre></div>
<p>これで無事に有効化された</p>
<table style="max-width: 600px">
<tr>
<th>before</th>
<th>after</th>
</tr>
<tr>
<td><img src=/images/2017/2017-10-08-Gitg-before.png style="max-width: 400px"></td>
<td><img src=/images/2017/2017-10-08-Gitg-after.png style="max-width: 400px"></td>
</tr>
</table></div>
<div class="section" id="section-2">
<h2>雑記</h2>
<p>この設定方法はググっても具体的な設定方法が出てこなくて、 Gitg のリポジトリを gravater で検索したところ
<tt class="docutils literal"><span class="pre">org.gnome.gitg...</span></tt> な文字列を見かけ色々試してみて見つけた感じ。</p>
<p>ref. <a class="reference external" href="https://github.com/GNOME/gitg/search?utf8=✓&q=gravatar&type=">https://github.com/GNOME/gitg/search?utf8=✓&q=gravatar&type=</a></p>
<p>Gitg ぱっと見悪くなさそうな気配だけど、実際のところ使い倒しているわけではないのでまだ結論は出てない。
ただ今回の gravater 以外の設定も <tt class="docutils literal">gsettings</tt> 経由でしかいじれなさそうな感じがしてどうなんだろうね...</p>
<p>結局面倒になってコマンドライン + <tt class="docutils literal">tig</tt> に戻ってしまうかも。</p>
</div>
第20回 Pythonもくもく会 #mokupy 参加ログ2017-10-02T00:00:00+09:002017-10-02T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2017-10-02:/articles/2017-10-02-mokupy20/<p>第20回 Python もくもく会(#mokupy) に参加してきた。ちょうど20回目。SQUEEZE の中の人としては初参加だった。</p>
<iframe class="hatenablogcard" frameborder="0" scrolling="no" src="https://hatenablog-parts.com/embed?url=https://mokupy.connpass.com/event/67028/" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="第20回 Pythonもくもく会 - connpass"></iframe><p>第20回 Python もくもく会(#mokupy) に参加してきた。ちょうど20回目。SQUEEZE の中の人としては初参加だった。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="第20回 Pythonもくもく会 - connpass" src="https://hatenablog-parts.com/embed?url=https://mokupy.connpass.com/event/67028/" frameborder="0" scrolling="no"></iframe>
<div class="section" id="section-1">
<h2>やってたこと</h2>
<p>今回は 10/28(土) に行われる Python 入門者向けハンズオン #6 に向けた準備をしていた。
具体的には以下のドキュメントを一通りみて、Windows と Mac 時々 Linux 環境で動作を確認しつつどんな感じで進めようか考えていた感じ。
なんでこんなことをしているのかと言うと、実は今回は自分が講師をやることになっている。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="pynyumon/pynyumon: Python入門者向けハンズオンテキスト" src="https://hatenablog-parts.com/embed?url=https://github.com/pynyumon/pynyumon" frameborder="0" scrolling="no"></iframe><p>ドキュメントを一通り見てみると情報が古いままだったり、自分が当日に口だけで説明するのがしんどそうだなと感じたところの修正をしていたりしていた。まだやりきれてないのだけど、以下のPRがこれ。次の週末までには目処をつけないとな。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="[wip] Update for pynyumon hands on 6th by laughk · Pull Request #9 · pynyumon/pynyumon" src="https://hatenablog-parts.com/embed?url=https://github.com/pynyumon/pynyumon/pull/9" frameborder="0" scrolling="no"></iframe><p>ちなみに絵を書くのには <a class="reference external" href="https://www.draw.io/">draw.io</a> を使っている。最近は仕事でもインフラの構成図書いたりするのに活躍しているのだけど、ドキュメントに差し込みたい図を書くときなんかも便利。デスクトップアプリもある</p>
<ul class="simple">
<li><a class="reference external" href="https://github.com/jgraph/drawio-desktop/releases">Releases · jgraph/drawio-desktop</a></li>
</ul>
</div>
<div class="section" id="section-2">
<h2>当日の流れ</h2>
<p>簡単に手伝えることはないかなーと思って気持ち少し早めに会場入り。職場と一緒なので感覚的には出社に近かった。</p>
<p>今日は参加者も多く、窓際の自責でやっていたのだけど全体的にほんとにみんなもくもく集中して作業している感じで自分の分もだいぶ集中して時間がとれた。
ただ、もろもろ動作確認のために Virtualbox で Windows 動かしながら更に Ubuntu の VM も起動して絵も書いてとかやっていてちょくちょくPCが固まってしまったのが辛かった。
ブラウジングで重めの処理が発生するページでたまに固まるのだけど、これどうにかならんのか... XPS15 のスペックでこうなるのは厳しい。</p>
<p>お昼は開拓していた外苑前のタイ料理屋へ。どこかの高校か大学かの野球部っぽい集団が途中で現れて店員さんがめっちゃ忙しそうだった。
飯は豚のイエローカレーにしたけど野菜たっぷりボリュームたっぷりでうまかった。</p>
<p>午後もひたすらモクモク。途中、 <a class="reference external" href="https://twitter.com/kor_miya">@kor_miya</a> さんが <a class="reference external" href="http://amzn.to/2xIOBOa">スラスラわかるPython</a> を完走されてフィードバックをいただく。
読者の方から直接フィードバックをいただけるのは本当にありがたい。</p>
<p>最後の成果発表はプロジェクタが大阪に出張してしまっていて小さなモニタベースだった。とはいい感じにワイワイできていたと思う。
全体的に PyQ やられてた方も多かったし、特にデータ系の話がかなりアツい感じだった。</p>
<p>成果発表が終わったらすーっと解散していった感じ。
#mokupy はこの引き際がちょうどいい感じな気もする。</p>
<p>ということで、お疲れ様でしたー。</p>
<p>そういえば一応今回の #mokupy は9月分扱いらしく今月もう一回やるみたいな事を <a class="reference external" href="https://twitter.com/massa142">@massa142</a> さんが話していた。予定合うかな。</p>
</div>
(第80回)Python mini Hack-a-thon #pyhack 参加ログ2017-09-25T00:00:00+09:002017-09-25T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2017-09-25:/articles/2017-09-25-pyhack80/<p>#pyhack に参加してきた。ここ最近は予定が合わない状況が続いていたので3ヶ月ぶりくらいな気がする。
今まで #pyhack の参加ブログはほとんど書いていなかったのだけど、ふとちゃんと記録残しておこうという気になったので雑にだけど今回から書こうと思う。</p>
<iframe class="hatenablogcard" frameborder="0" scrolling="no" src="https://hatenablog-parts.com/embed?url=https://pyhack.connpass.com/event/63983/" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="(第80回)Python mini Hack-a-thon - connpass"></iframe><p>#pyhack に参加してきた。ここ最近は予定が合わない状況が続いていたので3ヶ月ぶりくらいな気がする。
今まで #pyhack の参加ブログはほとんど書いていなかったのだけど、ふとちゃんと記録残しておこうという気になったので雑にだけど今回から書こうと思う。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="(第80回)Python mini Hack-a-thon - connpass" src="https://hatenablog-parts.com/embed?url=https://pyhack.connpass.com/event/63983/" frameborder="0" scrolling="no"></iframe>
<div class="section" id="section-1">
<h2>やってたこと</h2>
<p>今回は以下の2つ。</p>
<ol class="arabic simple">
<li><a class="reference external" href="/2017/09/23/000005.htm">PyCon JP 2017 参加してきた</a> のブログを書いた</li>
<li><a class="reference external" href="https://github.com/laughk/footprint">laughk/footprint</a> という Github/Gitlab.com から activity をとってきて Markdown で出力する CLI のツールを書いていた</li>
</ol>
</div>
<div class="section" id="section-2">
<h2>当日の流れ</h2>
<p>午前中はブログを書いていた。</p>
<p>PyCon JP のブログの方にも書いていたけれど、今年の PyCon JP はとんでもなくパワーを使い、「PyCon疲れ」が全然抜けなくてずっとブログが書ききれないでいた。
とりあえず開催した9月中に書けてよかった。メディア会議用で話しきれてなかったのは遅くなってでもどっかで書いておこうと思う。</p>
<p>お昼は @terapyon さん不在だったけどいつもの沖縄料理のお店にいった。
妙に人数が少ないなーと思ってたら奥の方にも別の #pyhack 組がいておもしろかった。</p>
<p>午後は footprint のコードをいじり始める。
<a class="reference external" href="https://mokupy.connpass.com/">#mokupy</a> や <a class="reference external" href="https://retty.connpass.com/event/61449/">#rettypy に参加したとき</a> にちょっとづつ作りはじめていたのだけど、時間が開いていたためか結構忘れていて
「あー、そうそうこんな感じで書いた書いた」と過去の自分と会話する感じにやっていた。 #pyhack の時間ではある程度コードの整理をやって setup.py 書いてコマンドラインのオプション軽く整理してという感じで進められた。</p>
<p>他には <a class="reference external" href="https://twitter.com/matsPod">@matsPod</a> さんが超コンパクトな自作キーボードを持ってきていてそのへんの話が面白かった。
ちょうど自分も Ergodox 持参で参加している関係もあって親和性が高かったと思う。</p>
<p>成果発表では軽く footprint のデモをやったのだけど、サンプルがよくなかったのかあまり「おー!」と感じの物が出せなかった。不完全燃焼で終わるのも悔しかったのでもう少しそれっぽいやつを Tweet した。</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">footprint ( <a href="https://t.co/aqIhSuKONl">https://t.co/aqIhSuKONl</a> ) のデモ行けなかった分 , --gl オプションつけると gitlab の activity も表示される感じです。( --from, --to で期間も指定できる ) <a href="https://twitter.com/hashtag/pyhack?src=hash">#pyhack</a> <a href="https://t.co/Evf7w6dKKD">pic.twitter.com/Evf7w6dKKD</a></p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/911523465097764864">September 23, 2017</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script><p>成果発表は 18:40 くらいには終わってたと思う。早い(過去の #pyhack と比較)。</p>
<p>終わった後は懇親会。2次会まで行った。
最近の #pyhack は書籍の執筆・翻訳に関わっている比率が上がってきていこともあって、そのあたりのアレヤコレヤで盛り上がって楽しかった。
あとPyCon疲れはどうやら自分だけではなかったようだとわかって少し安心した。</p>
<p>今回も自分の好きなことをやりつつ色々おしゃべりできて楽しかった。
次回は残念ながら別の予定があっていけないので、次は11月かなー?</p>
</div>
<div class="section" id="section-3">
<h2>おまけ</h2>
<p>footprint は pyhack が終わった後にももう少し手をいれてひとまず pip で導入できるようにはしておいた。まだとりあえず動くレベルのコードなので整理しつつテストも書かないとなー。あとは JIRA, Trello, Bitbucket あたりは対応したいのだけど果たして手が回るだろうか...
とりあえずしばらくは自分の振り返りのお供で使いつつ粛々と開発してこう。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="laughk/footprint: footpritnt(足跡) is summary generator for Github/Gitlab.com activity." src="https://hatenablog-parts.com/embed?url=https://github.com/laughk/footprint" frameborder="0" scrolling="no"></iframe><iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="footprint 0.0.1.dev0 : Python Package Index" src="https://hatenablog-parts.com/embed?url=https://pypi.python.org/pypi/footprint" frameborder="0" scrolling="no"></iframe></div>
PyCon JP 2017 参加してきた2017-09-23T00:00:00+09:002017-09-23T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2017-09-23:/articles/2017-09-23-pyconjp-2017/<p><img alt="pyconjp2017-squeeze" src="/images/2017/2017-09-23-pyconjp2017-squeeze.jpg"/></p>
<p>今年も PyCon JP に参加してきました。今回は初めて Sprints も含めて参加しました。</p>
<p><img alt="pyconjp2017-squeeze" src="/images/2017/2017-09-23-pyconjp2017-squeeze.jpg"></p>
<p>今年も PyCon JP に参加してきました。今回は初めて Sprints も含めて参加しました。</p>
<h2>PyCon JP 2017</h2>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="PyCon JP 2017 in Tokyo | Sep 7th – Sep 10th" src="https://hatenablog-parts.com/embed?url=https://pycon.jp/2017/ja/" frameborder="0" scrolling="no"></iframe>
<h2>Conference</h2>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="PyCon JP 2017 - connpass" src="https://hatenablog-parts.com/embed?url=https://pyconjp.connpass.com/event/59412/" frameborder="0" scrolling="no"></iframe>
<h2>Sprints</h2>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="PyCon JP 2017 Development Sprints リーダー&一般参加者 - connpass" src="https://hatenablog-parts.com/embed?url=https://pyconjp.connpass.com/event/62858/" frameborder="0" scrolling="no"></iframe>
<hr>
<h1>僕の今年の PyCon JP</h1>
<p>今年の PyCon JP は大体以下のような感じで、個人的に参加したPyCon JPの中では過去最高にバタバタした状態で過ごしました。</p>
<ul>
<li><a href="https://pycon.jp/2017/ja/proposals/vote/31/">トークのCfPは提出していた</a>もののリジェクト&諸々忙しすぎて<a href="https://techplay.jp/event/630686">RejectCon</a> へ応募する暇もなかった</li>
<li>トークのスピーカーとしての登壇はできなかったけれど、<a href="/2017/08/07/00001.html">書籍を執筆した</a>関係でお声がけいただき、<a href="https://pycon.jp/2017/ja/events/media-meeting/">メディア会議</a>とういう企画におけるスピーカーの一人という形で登壇することになった。</li>
<li>今年は所属しているSQUEEZEが<a href="https://pycon.jp/2017/ja/sponsors/">Diamond Sponsor</a>をしていた関係でブースのお手伝い・企画もありめちゃくちゃバタバタしながら過ごした感じがある。</li>
<li>執筆した「スラスラわかるPython」にて <a href="https://code.visualstudio.com/">VS Code</a> を使う前提で説明をしいていたところ Microsoft の <a href="https://twitter.com/ayatokura">@ayatokura</a> さんからお声がけあり、3日目の Sprint にもリーダーではないけれどTA的な形で参加することになった。</li>
</ul>
<h2>トークのCfP</h2>
<p>今年は執筆にかまけて準備不足なまま提出していた感は否めないので、
リジェクトに関しては「当然の結果だよなー」というのが正直なところではあります。</p>
<p>来年に向けては、「今からネタを考えておかないとなー」というよりは
「いつでもネタが出せるように日々の技術者としての振る舞いをしっかりやってこう」という気持ちが強いです。</p>
<p>がんばろう。</p>
<h2>メディア会議</h2>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="メディア会議 | PyCon JP 2017 in TOKYO" src="https://hatenablog-parts.com/embed?url=https://pycon.jp/2017/ja/events/media-meeting/" frameborder="0" scrolling="no"></iframe>
<p>ひょんなことから(?)お声がけいただいた企画で、個人的には執筆を通じた思いなどを実際に吐き出す場をいただけたのはかなり嬉しかったです。
ただ、実際にその場でいい感じにコメントするのは難しですね... 喋りながらまとめようとしてなかなかうまくまとまらなかったり、<a href="https://twitter.com/kara_d">@kara_d</a>さんの想定外の質問<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup> に平常時ならスッと返しそうなものを変なリアクションしてしまったりと、パネルディスカッションというのは通常の発表とも違う別の難しさがあるなと実感しました。</p>
<p>60分でしたが舞台に上がっている人間としては一瞬で終わってしまった感じでした。
個人的には尺の関係で事前に用意していたネタを話しきれない部分もあったので、後日別途ブログに書こうかなと言う気もしています。</p>
<p>あと開始前に雑に「いえーい、<a href="https://twitter.com/kashew_nuts">@kashew_nuts</a> さん見てるー?」とかやってたらめっちゃハッシュタグ付きで写真晒されました。</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/pyconjp?src=hash">#pyconjp</a> <a href="https://twitter.com/hashtag/pyconjp_202?src=hash">#pyconjp_202</a> メディア会議にいる <a href="https://t.co/x13GNvfXCZ">pic.twitter.com/x13GNvfXCZ</a></p>— かしゅーなっつ (@kashew_nuts) <a href="https://twitter.com/kashew_nuts/status/905992473884766208">September 8, 2017</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<h2>スポンサーブースの中の人</h2>
<p>所属先がPyCon JPのスポンサーという状況は初めてでした。</p>
<p>こういったカンファレンスでブースをやる側になった経験が完全に無くて、どう振る舞ったものかと思ったりもしました。幸い知り合いの方にちょくちょくブースに来ていただいたり、SQUEEZE のことを聞かれたりすることもあって思いの外忙しく過ごしていました。</p>
<p>他にも Conference 1日目は SQUEEZE ブースで「スラスラわかる Python」 の著者サイン会&即売会を行うことになり、10冊行かないくらいでしたが会場の方にお買い上げ頂きうれしかったです。<sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup> ただ次の日のサイン会対象である「<a href="http://amzn.to/2yjkM30">PythonユーザのためのJupyter[実践]入門:書籍案内|技術評論社</a>」を指さされて「こっちは売ってないんですか?」と結構な頻度で聞かれ、時代はJupyterだと思いました。</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">SQUEEZE ブースでスラスラわかるPythonの即売会&サイン会やってます! ブースで僕と <a href="https://twitter.com/esuji">@esuji</a> さんと握手! <a href="https://twitter.com/hashtag/pyconjp?src=hash">#pyconjp</a> <a href="https://t.co/IcxngPnlpT">pic.twitter.com/IcxngPnlpT</a></p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/906044011898519553">September 8, 2017</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>バタバタしつつも楽しく過ごしていましたが、良くも悪くもなんだかんだ SQUEEZE のブースにいる時間が多かったかなーという思いがあります。トークセッションなりオープンスペースなりポスターカンファレンスなりのPyCon JPの会場にどんな人が集まっているのかを見て回ったほうが良かったかなーというのが個人的な反省点ですね。</p>
<h2>3日目の Sprints に参加</h2>
<p>「スラスラわかるPython」でメインで扱うテキストエディタを VS Code にしたことから <a href="https://twitter.com/ayatokura">@ayatokura</a> さんをはじめとする Microsoft の中の人たちからもお声がけいただき、今回の Sprints の「スラスラわかるPython x Visual Studio Code」のチームができた感じです。</p>
<p>当日は思ったよりも多くの方々に集まっていただき嬉しかったです。
集まった人の感じを見ているによってスラPyの本に興味をもっていただいた方や、単純にVS Codeの使い方だけ知りたかった方など様々でなるほどなーという感じではありました。ただ皆さん Sprints を通じて何かしら持って帰っていただけたようでよかったです。特に当日に本をはじめから進めてもらって「スクレイピングできました!」と言われたときは「マジすか!やったやった!!」という感じに本当に嬉しかったですね。他にも本に関しても幾つかフィードバックがあったのでそちらも反映できる準備をして置かないとなと思いました。</p>
<p>一方で自分自身はどうだったかと言うと、TA的な感じでの参加だったのである程度覚悟はしていましたが、
あまり落ち着いて何かをやる暇がなくて終日あたふたしてすごしていたかなーという感じはありました。学びも多かったのだけどものすごく疲れました。</p>
<p>あと会場提供の Microsoft さんからまさかの Tux の置物をいただいた。ありがとうございます!</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">microsoft さんでまさかのものを頂いた <a href="https://twitter.com/hashtag/pyconjp?src=hash">#pyconjp</a> <a href="https://t.co/BlTHZ0rvII">pic.twitter.com/BlTHZ0rvII</a></p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/906750112671571968">September 10, 2017</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<h1>その他</h1>
<ul>
<li>元々 PyCon JP のパーティーは食事のクオリティ高いと思ってたけど、今年は1日目のパーティーのクオリティがほんとにすごくて、特にクラフトビールとか日本酒各種が置かれていたのはびっくりだった。すごい。2次会行かなくても満足度がすごかった。</li>
<li>
<p><a href="http://amzn.to/2fhaSaT">Pythonファーストブック</a>と時代はJupyterだと思ったので<a href="http://amzn.to/2yjtyhJ">PythonユーザのためのJupyter[実践]入門</a>を購入。著者の方々からのサインも頂いた!</p>
<p><blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">サイン会終了直前で駆け込みで書いてもらった!ありがとうございます!! <a href="https://twitter.com/hashtag/pyconjp?src=hash">#pyconjp</a> <a href="https://t.co/y3SySt5iWq">pic.twitter.com/y3SySt5iWq</a></p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/906376277568897024">September 9, 2017</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
</li>
<li>
<p>Sprints の懇親会でせっかく Best Speaker の Greg Price 氏と一緒の席になったけれど、英語力の低さでうまくコミュニケーションとれなかった。今の職場に来てマシにはなってたけどそれでも全然ダメダメだった。雑談の延長線上のコミュニケーションは特に難しい。英語しっかりやってこう。</p>
<p><blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">とりあえず英語のコミュニケーションまともに取れるようにマジで勉強しないと... 必死で聞いて3割理解できてるかも怪しいしホント頑張ろう</p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/906872736433111040">September 10, 2017</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
</li>
<li>
<p>Conference と Sprints で3日間パーティー懇親会込で参加して楽しく過ごせたところも有るけども、ものすごいパワーを使ってほんとに疲れた。終わってからガチで体が動かなくなるくらいにほんとに疲れ切ってしまった。Tutorial や前夜祭、RejectCon からぶっ続けで出てる人はマジですごいと思う。</p>
</li>
</ul>
<hr>
<p>今年の僕の PyCon JP はこんな感じでした。来年は会場の場所は変わるけれども引き続き開催されるようなので楽しみです。</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p>「プライベートの時間を印税に変えたのですね?」な内容が特に「そう来るかーw」という感じで余裕が無くなりました。 <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:2">
<p>急遽当日ゲストで一緒にサイン会に参加いただいた <a href="https://twitter.com/esuji">@esuji</a> さん、翔泳社緑川さんありがとうございました! <a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
</ol>
</div>株式会社SQUEEZE で働き始めた2017-09-03T00:00:00+09:002017-09-03T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2017-09-03:/articles/2017-09-03-join-squeeze/<p>近況です。</p>
<p><img alt="SQUEEZE" src="/images/2017/2017-09-01-SQUEEZE-office.jpg"/></p>
<p>近況です。</p>
<p><img alt="SQUEEZE" src="/images/2017/2017-09-01-SQUEEZE-office.jpg"></p>
<p>ここ最近は<a href="/2017/08/09/000003.html">イベントで登壇させていただいたり</a>、<a href="/2017/08/07/00001.html">執筆していた本が出版されたり</a><sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup>と非常に慌ただしかったのですが、もうひとつイベントがあって転職をしていました。8月から <a href="https://squeeze-inc.co.jp/">株式会社SQUEEZE</a> で働いています。</p>
<h2>From</h2>
<h3>BASE株式会社</h3>
<ul>
<li>PAY.JP の中の人</li>
<li>インフラを見つつ AWS API Gateway と Lambda で画像サイズを動的に変換して返すAPIを作ったりしてました。</li>
</ul>
<h2>To</h2>
<h3>株式会社SQUEEZE</h3>
<p>ソフトウェアエンジニアとしての入社ですがインフラ周りの運用・改善・交通整備をやりながら Python(Django) のコードを触っていくという感じになりそうです。適当なタイミングで <a href="https://squeeze-inc.co.jp/team/all/">チーム紹介のページ</a> に顔写真が晒されることでしょう。</p>
<p>あと業務PCも好きなものを選ぶことができて <a href="http://www.dell.com/jp/p/xps-13-9365-2-in-1-laptop/pd">DELL XPS13 2-in-1</a> を用意してもらい、相変わらず Arch Linux で仕事をしています。</p>
<h1>SQUEEZE について</h1>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="株式会社SQUEEZE" src="https://hatenablog-parts.com/embed?url=https://squeeze-inc.co.jp/" frameborder="0" scrolling="no"></iframe>
<p>今年の PyCon JP では <a href="https://pycon.jp/2017/ja/sponsors/">Diamond スポンサーをしている</a> ことから、Python界隈の方なら名前をご存知の方もいると思うけれどそれ以外だと知らない方も多いと思います。どんな会社なのかは以下の記事あたりが詳しくいい感じにまとまっています。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="「民泊業界の総合商社を目指す」SQUEEZE代表・舘林 真一さん | 民泊大学" src="https://hatenablog-parts.com/embed?url=https://minpaku-univ.com/interview/3037/" frameborder="0" scrolling="no"></iframe>
<p>最近は民泊をコンセプトにしたホテル事業も始まりました。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="【公式】大阪・梅田「Minn アパートメントホテル」: 京都へも1本の好立地" src="https://hatenablog-parts.com/embed?url=https://minn.asia/" frameborder="0" scrolling="no"></iframe>
<p>他にも挙げると以下のような感じ</p>
<ul>
<li>創設3年のベンチャー企業</li>
<li>表参道にオフィスがある</li>
<li>行っている事業は所謂インバウンド、ホスピタリティ関連で、特に「民泊」を取り巻く課題に色々と挑戦している</li>
<li>社内公共語は英語。実際にホームページを見てもらうとわかるけど社内に外国籍の方も多数</li>
<li>プロダクトは Django 製で、バリバリ Python を使っている。(一部 Go も使っている)</li>
<li>今年の PyCon JP に以外にも、<a href="https://pycon.my/2017/07/19/announcing-squeeze-as-our-silver-sponsor/">PyCon APAC 2017 の Silver スポンサー</a> や <a href="http://kumamoto.pycon.jp/">PyCon mini Kumamoto の Silver スポンサー</a> をやったりと、会社としても Python 盛り上げていくぞ!という感じがある</li>
</ul>
<p>今ビジネス的に勢いがあり、Pythonとそれをとりまくコミュニティーに対する理解もあり、国際的な環境も詰まっている感じです。</p>
<p>特に社内に多国籍の方々がいるのが新鮮で、日常生活の中で英語を聞く割合が一気に増えました。
オフィスの中の会話は日本語、英語、時には中国語も混ざり合ってる感じです。
MTG も「みんなに伝えるために英語を使う」という感じなので、強制的に英語力を鍛えざるを得ない状況。<sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup>
自分はこれまでまともに英語に向き合う環境に身を置いたことが全く無ければ得意でもないし、むしろ苦手なので面食らいっぱなしで
「やべーよやべーよ」と思いながら英語の勉強をできるところからはじめてる状態です。これに関しては自ら望んでいたことなのでキツイけどやってくぞという気持ちでがんばります。</p>
<hr>
<p>このブログは以下のレギュレーションに従って書いてみました。</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">タイトルで煽らない、かしこまった見出しもつけない、ウィッシュリストのせない、東亜飯店張らない、fromとtoを両方書く。職場崩壊を暴露しない。キラキラしない。これが私の求める退職エントリです。</p>— laiso (@laiso) <a href="https://twitter.com/laiso/status/892403727079923712">August 1, 2017</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p>そして著者紹介でしれっと所属が株式会社SQUEEZEとなっておりました。 <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:2">
<p>日本人の方ももちろんいるし、そちらから捕捉もしてもらえるので「英語できないと詰む」というわけでもないです。 <a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
</ol>
</div>builderscon 2017 行ってきた2017-08-09T00:00:00+09:002017-08-09T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2017-08-09:/articles/2017-08-09-builderscon-2017/<p>先週末に行われた <a href="https://builderscon.io/tokyo/2017">builderscon 2017</a> に行ってきたのでその時の感想的なものを。</p>
<p>先週末に行われた <a href="https://builderscon.io/tokyo/2017">builderscon 2017</a> に行ってきたのでその時の感想的なものを。</p>
<h2>聞いたトーク</h2>
<p>実際に聞きに行ったトークは以下のような感じ</p>
<ul>
<li>前夜祭<ul>
<li><a href="https://builderscon.io/tokyo/2017/session/9fd0b658-4f50-11e7-aa42-42010af00d0a">【前夜祭】オンプレミスデータセンター撤退! - 大人のビルコン 〜撤退技術スペシャル〜(1) - builderscon tokyo 2017</a></li>
<li><a href="https://builderscon.io/tokyo/2017/session/a0d94b63-4f50-11e7-aa42-42010af00d0a">【前夜祭】データストア撤退の歴史 - 大人のビルコン 〜撤退技術スペシャル〜(2) - builderscon tokyo 2017</a></li>
<li><a href="https://builderscon.io/tokyo/2017/session/a1616e8b-4f50-11e7-aa42-42010af00d0a">【前夜祭】PaaS完全撤退の歴史 - 大人のビルコン 〜撤退技術スペシャル〜(3) - builderscon tokyo 2017</a></li>
<li><a href="https://builderscon.io/tokyo/2017/session/a1cf4049-4f50-11e7-aa42-42010af00d0a">【前夜祭】ブロックストレージとの戦い、そして撤退 - 大人のビルコン 〜撤退技術スペシャル〜(4) - builderscon tokyo 2017</a></li>
</ul>
</li>
<li>1日目<ul>
<li><a href="https://builderscon.io/tokyo/2017/session/d8e457d2-cb67-483a-8ea5-88db8158dd04">初めてのMySQLチューニング -データベースは怖くない!- - builderscon tokyo 2017</a></li>
<li><a href="https://builderscon.io/tokyo/2017/session/f80aad32-4f21-11e7-aa42-42010af00d0a">マイクロチームでの高速な新規開発を支える開発・分析基盤 - builderscon tokyo 2017</a></li>
<li><a href="https://builderscon.io/tokyo/2017/session/fe7cd76d-1877-45d2-8742-788644701ae1">Goで実装する軽量マークアップ言語パーサー - builderscon tokyo 2017</a></li>
<li><a href="https://builderscon.io/tokyo/2017/session/c8f36693-32aa-4bf1-816a-4966f3859926">RDBアンチパターン リファクタリング - builderscon tokyo 2017</a></li>
<li>LT</li>
</ul>
</li>
<li>2日目<ul>
<li><a href="https://builderscon.io/tokyo/2017/session/7cd8cb72-0948-4da8-8577-0f98cda28174">知られざる世界 〜WEB以外のPHP〜 - builderscon tokyo 2017</a></li>
<li><a href="https://builderscon.io/tokyo/2017/session/715a0393-d28c-4721-8e67-924a30a12e24">AWS CodeBuild を使ってものすごい並列数で CI を実行しよう - builderscon tokyo 2017</a></li>
<li><a href="https://builderscon.io/tokyo/2017/session/17d5767a-4f26-11e7-aa42-42010af00d0a">WEB+DB PRESS 100号記念 特別企画 - builderscon tokyo 2017</a></li>
<li><a href="https://builderscon.io/tokyo/2017/session/d0e6158e-b640-4eee-b17e-7cd77f2d0474">Serverless Server Side Swift - builderscon tokyo 2017</a></li>
<li><a href="https://builderscon.io/tokyo/2017/session/420815c1-f185-4898-b370-39e983691481">ここが辛いよサーバーレス。だが私は乗り越えた - builderscon tokyo 2017</a></li>
</ul>
</li>
</ul>
<h2>感想をつらつら</h2>
<p>前夜祭がSNS等の拡散禁止の条件がついているだけあって、それぞれなかなか聞けない濃い話が多く話されて本当に面白く、エンジニアの祭り感がすごかった。Web系の話がメインではあったけ、この日だけで十分な規模のMeetupだったと思う。</p>
<p>1日目は一通り話を回ってみて、最初と最後のDBに関する話がよかった。
「初めてのMySQLチューニング -データベースは怖くない!」は文字中心のスライドなのになんとも言えない見やすさと mamy1326 さんのトークのわかりやすさがあって聞きやすかった。内容も自分が大分忘れてしまっていることもあれば知らないものも認識できたので聞きに行ってよかった。
「RDBアンチパターン リファクタリング」ではサービスを運用する上でのDBとの向き合い方に関しての知見が得られた感じ。Software Design の連載の方も見返してみようと思った。
懇親会にも参加して、いろんな方とお話。MSP時代からPython界隈の方やペパボゆかりの方などとこれまで自分がお会いしたいろんなクラスタの方が一同に居合わせていた感じが面白かった。1つの場所であれこれとお話できてとてつもなく濃い時間で一瞬で終わってしまった感じではあったけど、ただひたすらに楽しかった。</p>
<p>2日目は1日目にそれほどぶっ飛ばさなかったのでちゃんと朝ごはんをいただけた。サンドイッチ美味しかった。
1日目よりは全体的にゆるゆる回った気がする。CodeBuild の話はテスト実行に関するリアルな話が多めで聞いていて面白かった。
個人的にこの日一番印象に残ったのはサーバーレス2連続のトラック。
急遽順番が逆になって「Serverless Server Side Swift」からだったのだけど、そもそものサーバーレスに関する話とSwiftに関する話、その後に Swift でサーバレスはどうやるのかという流れ。スライドにまとめられた情報量tと noppoMan さんのトークが非常にわかりやすくて、まさにbuildersconのテーマであった「知らなかった、を聞く」が一番体験できたトークだったんじゃないかなと思ってる。その流れからの「ここが辛いよサーバーレス。だが私は乗り越えた」が話の流れとしていい感じに繋がってよかった。こちらも実際にサーバーレスなプロダクトの実運用をしてみないとわからない知見があって聞きに行ってよかったなと思った。</p>
<p>全体的にエンジニアのお祭り感満載で、楽しみつつも得られる知見が非常に多く行って本当に良かったと思う。
特にいろんなジャンルの話があるので懇親会などであった人とどんな話を聞きに行ったかで話をしても、全然違う分野の話が出てくるのは本当におもしろい。機会があるなら是非来年も参加したいと思う。</p>Python入門者の集い#5 でゲスト講演させていただいた #PyNyumon2017-08-09T00:00:00+09:002017-08-09T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2017-08-09:/articles/2017-08-09-pynyumon-5/<p>7/10 に行われた <a href="https://python-nyumon.connpass.com/event/53306/">Python入門者の集い #5 - connpass</a> というイベントでゲスト公演させていただきました。
(既に1ヶ月位経ってしまってブログに書くのが今更感があるのだけど、自分の記録用に。)</p>
<p>7/10 に行われた <a href="https://python-nyumon.connpass.com/event/53306/">Python入門者の集い #5 - connpass</a> というイベントでゲスト公演させていただきました。
(既に1ヶ月位経ってしまってブログに書くのが今更感があるのだけど、自分の記録用に。)</p>
<p>当日の様子は以下にまとまってます。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="Python入門者の集い #5 #PyNyumon - Togetterまとめ" src="https://hatenablog-parts.com/embed?url=https://togetter.com/li/1128725" frameborder="0" scrolling="no"></iframe>
<p>発表資料はこちら。今回は <a href="https://slideship.com/">slideship.com</a> を使いました。
<s>(今の所直接埋め込めなさそうなので、↓はただのリンク</s><br>
(2017-11-19 追記: Slideship が ifram に対応していたので更新)<br>
(2021-01-24 追記: Slideship 閉鎖に伴いスライドが見えなくなっていたので、SpeackerDeck に移したものに差し替えた)</p>
<script async class="speakerdeck-embed" data-id="e06bd375e3cb4e54a5121f3180351d29" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>
<p><a href="https://speakerdeck.com/laughk/the-story-of-an-infrastructure-engineer-who-met-python">Python と出会ったインフラエンジニアの話 / / The story of an infrastructure engineer who met Python - Speaker Deck</a></p>
<p>内容としては「これまでの自分のキャリアの中でPythonとどう付き合ってきたか」をかなり短めにまとめた感じのものです。自分の場合はプログラムを書くというスタートラインに立つのに色々試行錯誤してしまったクチでどこまで参考になるかはわからないですが、「コミュニティーと関わってみると、いい流れが作りやすくて楽しいよ」ということが伝えたかったことです。このスライドをきっかけに何かアクションを起こすきっかけを作ってもらえると嬉しいなと勝手に思ってます。</p>
<h2>余談</h2>
<p>余談としては、今回はじめて Slideship を使ってみましたが、ブラザ越しにスッと Markdown でスライドを作れるのはよいです。他にも、画面がスマフォ対応しているので発表直前で自分の資料を確認したり、簡単なタイポを修正するのにPCが要らなかったりしていい感じです。
ただ今の所は画像の位置の調整がまだ細かくできなくて、右半分は画像にして左半分にそれに関する説明を書くみたいなことができないのがツライかなと思いました。
とはいえ、手軽に作れて公開も楽にできるのは本当にいいので今後もスライド作る際は Slideship 使っていこうと思います。</p>
<h2>その他</h2>
<p>この日は自分の後の <a href="https://twitter.com/jbking">@jbking</a> さんが自分とは大分方向性の違う公演をされたり、LT が11個も後につづき、いずれも「みんな Python でいろいろやってるなー」という感じで非常に様々な話が出てきて面白かった(そのほとんどが後から見つけられないのが残念...)。</p>スラスラわかるPythonという本を書きました2017-08-07T00:00:00+09:002017-08-07T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2017-08-07:/articles/2017-08-07-published-surapy/<p><img src="/images/2017/2017-08-07-surasura-python.jpg" width="150px"/></p>
<p>本日 2017-08-07 に出版された「<a href="http://amzn.to/2hzFYP2">スラスラわかるPython</a>」という本を共著で執筆しました。</p>
<p><img src=/images/2017/2017-08-07-surasura-python.jpg width=150px></p>
<p>本日 2017-08-07 に出版された「<a href="http://amzn.to/2hzFYP2">スラスラわかるPython</a>」という本を共著で執筆しました。</p>
<hr>
<h2>どんな内容?</h2>
<p>「そもそもプログラミングに馴染みがない。けどこれからPythonでプログラミングをしてみたい!」といった初心者の方を対象とした入門本です。アウトラインは以下のような感じ。
(このうち私は第1章、第8〜10章、付録の章を担当しました。)</p>
<div class="highlight"><pre><span></span><code>第1章 Pythonをはじめよう
第2章 型とメソッド
第3章 条件分岐
第4章 リストと繰り返し処理
第5章 辞書型
第6章 関数
第7章 エラーと例外
第8章 スクリプト、モジュール、パッケージ
第9章 Webスクレイピング
第10章 ファイル操作
付録
- プログラミングをはじめるためのCLIの基礎
- ドキュメントの読み方、見つけ方
- プログラムでよく使うファイル形式の紹介
- さらにPythonを使い込んでいくために
</code></pre></div>
<p>全体を通して、そもそもプログラミングってなんなのさ?という話から始まり、基本的なPythonの文法の必要最低限の部分を押さえて実際にWebスクレイピングのプログラムを書いてみるという流れです。
網羅的に Python の機能を覚えてもらうというよりも、「Pythonでプログラミングってこうやるんだ!」という体験を重視しています。</p>
<p>個人的には付録の部分で他の入門書と違うカラーが出せたかなと思っています。
Python そのものとは少し違うけれどもプログラミングの学習に役立つことと、
本書が終わった後のステップに進みやすくなるような情報が収録されています。</p>
<p>「ドキュメントの読み方、見つけ方」では
Python 公式のドキュメントにどんな情報があるのかということとその読み方、
加えて PyPI でインストールが可能なライブラリのドキュメントの見つけ方を紹介しています。
どちらもインターネット上にある情報なので、誰でも自由に見れるものですが
慣れていないとどう読んでいいかわからない、難しいと感じる人も多いはずです。
そういった方の助けとなるべく、「公式ドキュメントはこういう情報があるよ」や
「こういうパターンで書かれていることが多いよ」と言ったドキュメントを読むための基本的な Tips が収録されています。</p>
<p>「さらにPythonを使い込んでいくためには」では、どの分野でどのようなライブラリを使うことが多いのかを広く浅く紹介しています。
これは自分自身が独学で試行錯誤してプログラミングを覚えようとしていたときに
「何となくやってみたいことがあるけど、どうやってググっていけばいいかわからない」という問題にぶち当たっていた経験を反映したものです。
一言にプログラミングと言っても、プログラミングを通じて実現したいことによって学習する内容も変わってしまいます。
そういった場合に、せめてメジャーな分野については言葉の意味を整理しておいたほうが適切な情報に巡り会えるだろうという思いを込めています。</p>
<h3>正誤表</h3>
<p>誤植があった場合、以下の翔泳社の書籍のページに正誤表がありますのでご参照下さい 🙇🙇🙇</p>
<p><a href="http://www.shoeisha.co.jp/book/detail/9784798151090">http://www.shoeisha.co.jp/book/detail/9784798151090</a></p>
<h2>執筆を通じて</h2>
<p>前書きにも書いていますが、本書の執筆は監修であり普段は <a href="https://pyhack.connpass.com/">pyhack</a> でご一緒することの多い <a href="https://twitter.com/terapyon">@terapyon</a> さんにお声がけいただき実現しました。</p>
<p>お話はいただくまで私は書籍の執筆はもちろん、雑誌への寄稿なども一切やったことがなく完全に未知の分野への挑戦でした。
本書の執筆にあたっては、<a href="https://twitter.com/terapyon">@terapyon</a> さんはもちろん共著者である <a href="https://twitter.com/esuji">@esuji</a>さん、色々アドバイスを頂いた <a href="https://twitter.com/takanory">@takanory</a> さん、翔泳社担当の緑川さんをはじめ、本当に丁寧にレビューしていただいた皆様など本当に多くの方々に支えられながら形にすることができました。改めましてありがとうございました!!</p>
<p>今回の執筆を通じ、私自身基本的な部分でありながらもふわっとした理解のままだったところも多くあり、改めて Python の知識と向き合うこともできました。
また、書籍というアウトプットがどのようなプロセスで行われるかということを身をもって知ることができ、この本とともに私自身も成長させてもらうことができたように思います。</p>
<h2>さいごに</h2>
<p>本書が一人でも多くの方の「プログラミングをPythonではじめる」最初の一歩をサポートできること願っています!
よろしくお願いします!!!</p>[Python] 関数内部で生成されたインスタンスのメソッドの呼び出し方を mock でテストする2017-05-10T00:00:00+09:002017-05-10T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2017-05-10:/articles/2017-05-10-python-mock-test-for-called-method/<p>Python のテスト書いているときに関数内におけるインスタンスメソッドの呼び出しをテストをしたくなったらハマったので忘れないうちにメモ。<a href="https://docs.pytest.org/en/latest/">pytest</a> を使っているのでサンプルもそれ前提で書いている。</p>
<p>Python のテスト書いているときに関数内におけるインスタンスメソッドの呼び出しをテストをしたくなったらハマったので忘れないうちにメモ。<a href="https://docs.pytest.org/en/latest/">pytest</a> を使っているのでサンプルもそれ前提で書いている。</p>
<p>例えばこんなコードがあるとする ( target.py とする)</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">use_library</span>
<span class="k">def</span> <span class="nf">target_method</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
<span class="n">instanse</span> <span class="o">=</span> <span class="n">use_library</span><span class="o">.</span><span class="n">SampleClass</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="n">instanse</span><span class="o">.</span><span class="n">sample_method</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
</code></pre></div>
<p><code>target_method</code> は特に何も返さないのだけど、
内部でちゃんと <code>instanse.sample_method</code> が想定されるパラメータを受けて呼び出されるのかをテストしたい状況があった。</p>
<p>メソッド等がどうやって呼び出されたのかをテストするには Python だと mock を使えば簡単にできる。
ただ今回みたいに関数の内部で生成されたインスタンスのメソッドの場合どうやってモックすればいいのか結構悩んだ。</p>
<p>最初は以下のような感じで mock しようとした。<br>
<code>excepted</code> はこのテストケースで <code>instanse.sample_method</code> の引数に渡っていて欲しい文字列。</p>
<div class="highlight"><pre><span></span><code><span class="kn">from</span> <span class="nn">unittest</span> <span class="kn">import</span> <span class="n">mock</span>
<span class="k">def</span> <span class="nf">test_target_method</span><span class="p">():</span>
<span class="n">my_mock</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">Mock</span><span class="p">()</span>
<span class="n">excepted</span> <span class="o">=</span> <span class="s1">'B'</span>
<span class="k">with</span> <span class="n">mock</span><span class="o">.</span><span class="n">patch</span><span class="p">(</span><span class="s1">'target.use_library'</span><span class="p">,</span> <span class="n">my_mock</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">target</span>
<span class="n">target</span><span class="o">.</span><span class="n">target_method</span><span class="p">(</span><span class="n">a</span><span class="o">=</span><span class="s1">'A'</span><span class="p">,</span> <span class="n">b</span><span class="o">=</span><span class="s1">'B'</span><span class="p">)</span>
<span class="n">my_mock</span><span class="o">.</span><span class="n">SampleClas</span><span class="p">()</span><span class="o">.</span><span class="n">sample_method</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="n">excepted</span><span class="p">)</span>
</code></pre></div>
<p>このとき <code>my_mock</code> は <code>target.target_method</code> 内部における <code>use_library.SampleClass</code> (<code>use_library</code> が <code>my_mock</code> に差し替わってる) の呼び出しまでは記録してる。ただ <code>use_library.SampleClass</code> で初期化されたインスタンスである <code>instanse</code> に関するところまでは追跡できない。</p>
<p>なので <code>my_mock.SampleClas().sample_method.assert_called_with('B')</code> とかやっても「<code>my_mock.SampleClas().sample_method</code> は呼び出されてない」ということになってテストが失敗する。</p>
<p>可能であれば <code>use_library</code> が <code>my_mock</code> に差し替わっている状況の with 構文のなかで <code>instanse.sample_method.assert_called_with('B')</code> みたいに呼び出せればいいのだけれどそうもいかない。</p>
<p>そんな感じであの手この手で色々試していくなかで、<a href="https://docs.python.jp/3/library/unittest.mock.html">公式ドキュメントの unittest.mock のページ</a> をよく見てみると <code>mock_calls</code> と <code>assert_has_calls</code> というものがあることを発見した。</p>
<ul>
<li>
<p>mock_calls の説明</p>
<blockquote>
<p>mock_calls は、メソッド、特殊メソッド、 そして 戻り値のモックまで、モックオブジェクトに対する すべての 呼び出しを記録します。</p>
</blockquote>
</li>
<li>
<p>assert_has_calls の説明</p>
<blockquote>
<p>mock_calls は、メソッド、特殊メソッド、 そして 戻り値のモックまで、モックオブジェクトに対する すべての 呼び出しを記録します。</p>
</blockquote>
</li>
</ul>
<p>これらをを見て「なんとかなりそう!」と試してみたところ、うまくいった。</p>
<p><code>assert_has_calls</code> の引数には <a href="https://docs.python.jp/3/library/unittest.mock.html#unittest.mock.call">mock.call オブジェクト</a> を要素とするリスト型で渡す必要があるのでそこだけ注意。<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup> 先程のテストコードを以下のような感じにするとうまく行く</p>
<div class="highlight"><pre><span></span><code><span class="kn">from</span> <span class="nn">unittest</span> <span class="kn">import</span> <span class="n">mock</span>
<span class="k">def</span> <span class="nf">test_target_method</span><span class="p">():</span>
<span class="n">my_mock</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">Mock</span><span class="p">()</span>
<span class="n">excepted</span> <span class="o">=</span> <span class="p">[</span><span class="n">mock</span><span class="o">.</span><span class="n">call</span><span class="o">.</span><span class="n">SampleClass</span><span class="p">()</span><span class="o">.</span><span class="n">sample_method</span><span class="p">(</span><span class="s1">'B'</span><span class="p">)]</span>
<span class="k">with</span> <span class="n">mock</span><span class="o">.</span><span class="n">patch</span><span class="p">(</span><span class="s1">'target.use_library'</span><span class="p">,</span> <span class="n">my_mock</span><span class="p">):</span>
<span class="kn">import</span> <span class="nn">target</span>
<span class="n">target</span><span class="o">.</span><span class="n">target_method</span><span class="p">(</span><span class="n">a</span><span class="o">=</span><span class="s1">'A'</span><span class="p">,</span> <span class="n">b</span><span class="o">=</span><span class="s1">'B'</span><span class="p">)</span>
<span class="n">my_mock</span><span class="o">.</span><span class="n">assert_has_calls</span><span class="p">(</span><span class="n">excepted</span><span class="p">)</span>
</code></pre></div>
<p>ちょっと書き方がややこしいけれど、
無事に関数内部のインスタンスメソッドの呼び出し方をテストできるようになった。</p>
<hr>
<h2>参考リンク</h2>
<ul>
<li><a href="https://docs.python.jp/3/library/unittest.mock.html#unittest.mock.Mock.assert_has_calls">26.5. unittest.mock — モックオブジェクトライブラリ — Python 3.6.1 ドキュメント (assert_has_calls の場所)</a></li>
</ul>
<p>以下はこの記事の内容に直接触れてるわけではないけれど、Mock の基本的な使い方が非常によくまとまっているので貼っておく。</p>
<ul>
<li><a href="http://note.crohaco.net/2015/python-mock/">[python] まだmockで消耗してるの?mockを理解するための3つのポイント - くろのて</a> </li>
</ul>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p><code>print(my_mock.mock_calls)</code> で実際に表示されているものに合わせて書いていくのが手っ取り早いと思う。 <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>World Plone Day 2017 Tokyo で Pelican の紹介 LT をしてきた #plonejp2017-04-27T00:00:00+09:002017-04-27T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2017-04-27:/articles/2017-04-27-pelican-lt-at-world-plone-day-2017-tokyo/<p>World Plone Day 2017 Tokyo というイベントで
Pelican の紹介をする LT をしてきました。</p>
<iframe class="hatenablogcard" frameborder="0" scrolling="no" src="https://hatenablog-parts.com/embed?url=https://plonejp.connpass.com/event/51340/" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="World Plone Day 2017 Tokyo - connpass"></iframe>
<p>World Plone Day 2017 Tokyo というイベントで
Pelican の紹介をする LT をしてきました。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="World Plone Day 2017 Tokyo - connpass" src="https://hatenablog-parts.com/embed?url=https://plonejp.connpass.com/event/51340/" frameborder="0" scrolling="no"></iframe>
<p>その際のスライドはこちら</p>
<iframe src="//www.slideshare.net/slideshow/embed_code/key/brN8e0tsk4D3OJ" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe>
<div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/laughk/pelican-world-ploneday2017tokyo" title="Pelican の紹介 / World Plone Day 2017 Tokyo" target="_blank">Pelican の紹介 / World Plone Day 2017 Tokyo</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/laughk">Kei Iwasaki</a></strong> </div>
<p>私は仕事で Pelocan を使うという機会はまったくもってないのだけれど過去に何度か書いているとおり、
このブログの生成には Pelican を使ってます。pyhack でも Pelican を使ってるみたいな話はしていたので、
そのへんの流れで今回の機会をいただきお話してきました。</p>
<p>Pelican はなんだかんだで結構長いこと使えていて、
そこまでネガティブな印象を自分自身では持っておらずで
スライドも全体的にいいとこ中心に色々ピックアップした面が大きいかなという感じです。</p>
<p>とはいえ、5分のLTなのに結構な量のスライドになってしまい
更に「Static Site Generator ってなんだよ」な説明に時間を使いすぎて
後半の説明があまり突っ込んでできなかったなというのが反省点。
(機会いただいたのに本当にすみません...)</p>
<p>ここのところ篭ってばかりであまりしっかり発表する機会も聞く機会も少なかったので
機会をちゃんとつくってアウトプットしてかないとなと思ったのでした。</p>
<h3>スライドの補足</h3>
<p>「イケてないところの話が聞きたかった」という声をちらほら頂いたのでスライドに補足する感じで書いてみます。</p>
<p>パッと思いついてたのが Static Site Generator 全般のものばかりで正直「Pelican 特有のこれがな...」というのがなかなか思いつかなかったのですが、
「テーマごとに独特の設定を設定ファイルに追加する必要がある」 は Pelican 特有かなと思いました。</p>
<p>もちろん、すべてのテーマに独自の設定項目があるということではないのです。
ただ python で設定ファイルを記載するという特徴と、テーマを形成する jinja2 テンプレートの組み合わせで
結構自由にカスタムできてしまうのですよね。</p>
<p>私が作った <a href="https://github.com/laughk/pelican-hss">HSS</a> というテーマを使う場合を例にしてみます。
2017-04-27 時点のバージョンではソーシャルボタンの出力コントロールは以下のような内容を pelicanconf.py に追記する必要があります。</p>
<div class="highlight"><pre><span></span><code><span class="n">SHOW_SOCIAL_SHARE_BUTTON</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">SOCIAL_SHARE_BUTTONS</span> <span class="o">=</span> <span class="p">(</span>
<span class="s1">'twitter'</span><span class="p">,</span> <span class="s1">'facebook'</span><span class="p">,</span> <span class="s1">'hatebu'</span><span class="p">,</span> <span class="s1">'pocket'</span><span class="p">,</span> <span class="s1">'googleplus'</span>
<span class="p">)</span>
</code></pre></div>
<p>この変数や tuple は本来の pelican の設定項目では無いのでこのテーマ独自のモノになってます。<br>
そのため他のテーマで仮に同じようなソーシャルボタン機能があったとしても、この設定がそのまま反映される保証はないです。</p>
<p>自由にできるので好き勝手にカスタムできるのは良いのですが、
他のテーマに切り替える際にはこのあたりの状況は億劫かもしれません。</p>
<h3>World Plone Day 2017 Tokyo の感想</h3>
<p>Plone 関係のイベントは2年前の<a href="https://plonejp.connpass.com/event/12547/">Plone Symposium Tokyo 2015</a> 以来でした。</p>
<p>正直なところ私は Plone を直接触る機会がまったくないのですが
イベントに来てみると Python と Web の話が集まるので面白いです。
今回もそういった期待通りで楽しかったです。</p>
<p>特に</p>
<ul>
<li><a href="https://speakerdeck.com/zenich/plone5falseossniokerujin-hua-toshi-ying-duan-suo-ban">Plone5のOSSにおける進化と適応 短縮版 // Speaker Deck</a> </li>
</ul>
<p>は縮小版とはいえ Zope/Plone の歴史が非常にわかりやすくまとまっていて楽しく勉強させていただきました。</p>
<p>LT も Python の話題は最近だとどうしてもデータサイエンス系のもの多くなりがちですが、
今回は Web が前提になっているのでなかなか聞けない Python 製の様々な Web サイト構築のツールの話が聞けたのは良かったです。</p>
<p>全体の詳細は <a href="http://www.freia.jp/taka/blog/world-plone-day-20170426/index.html">@shimizukawa さんのブログ</a> にまとまっているので気になる方はそちらを見ていただくのがよいです。</p>
<h3>その他</h3>
<p>最後にビアバッシュの様子を貼っておきます。</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">ピザとビール <a href="https://twitter.com/hashtag/plonejp?src=hash">#plonejp</a> <a href="https://t.co/KQJPMLUYjo">pic.twitter.com/KQJPMLUYjo</a></p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/857203526480547840">April 26, 2017</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>BASE 株式会社の PAY.JP チームにジョインした2017-01-09T00:00:00+09:002017-01-09T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2017-01-09:/articles/2017-01-09-join-payjp/<p>所謂転職エントリです。
苦手な方はブラウザバックかタブを閉じていただければと思います。 </p>
<p>Twitter で<a href="https://twitter.com/laugh_k/status/803907029068697600">それとなく近況をつぶやいていました</a>が
先月で2年2ヶ月ほど働いていた <a href="https://pepabo.com/">GMOペパボ(以下ペパボ)</a> を退職し、今月から <a href="https://binc.jp/">BASE 株式会社</a> の <a href="https://pay.jp/">PAY.JP</a> チームでインフラエンジニアとして働き始めました。</p>
<p><img alt="BASE&PAY" src="/images/2017/2017-01-11_01.jpg"/></p>
<p>所謂転職エントリです。
苦手な方はブラウザバックかタブを閉じていただければと思います。 </p>
<p>Twitter で<a href="https://twitter.com/laugh_k/status/803907029068697600">それとなく近況をつぶやいていました</a>が
先月で2年2ヶ月ほど働いていた <a href="https://pepabo.com/">GMOペパボ(以下ペパボ)</a> を退職し、今月から <a href="https://binc.jp/">BASE 株式会社</a> の <a href="https://pay.jp/">PAY.JP</a> チームでインフラエンジニアとして働き始めました。</p>
<p><img alt="BASE&PAY" src="/images/2017/2017-01-11_01.jpg"></p>
<h1>BASE / PAY.JP について</h1>
<h2>入るまで</h2>
<p>後述の経緯で去年の9月頃から Python を主軸にできる環境の仕事は無いかと転職活動をはじめ、
主に <a href="https://pycon.jp/2016/ja/">PyCon JP 2016</a> のスポンサーをされている企業で主に Wantedly 経由であちこち話を聞いて回っていたところ、 Python 中心な環境で決済プラットフォームを提供している PAY.JP が特に目に止まった。<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup></p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="「Python x 決済」「ニッチ x ニッチ」エンジニアWANTED! - BASE株式会社のインフラエンジニア中途の求人 - Wantedly" src="https://hatenablog-parts.com/embed?url=https://www.wantedly.com/projects/67450" frameborder="0" scrolling="no"></iframe>
<p>PAY.JP についてはたまたま以下の第0回の PAY Conferrence にも行っていて、
BASE として、PAY.JP として世の中のどういった課題に貢献していきたいかということはおおよそはわかっていていたつもり。</p>
<p>特にこのときの <a href="https://twitter.com/kyoro353">@kyoro353</a> さんの
「『現金が消えた街』 〜決済・送金・与信の全て電子化され、"現金"が消えた世界の物語〜」の話にはかなり引き込まれた事を覚えている。
決済という体験のコストを下げ、改善していき、人々の暮らしや生き方をより良いものにしていこうという確かなビジョンを感じることができた。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="PAY Conference #00 - connpass" src="https://hatenablog-parts.com/embed?url=https://base.connpass.com/event/37700/" frameborder="0" scrolling="no"></iframe>
<p>また github の organization もやっている感があって、
オープンな形で自分の技術者としての価値も幅広く高めていけそうだという感触も掴めた。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="PAY.JP" src="https://hatenablog-parts.com/embed?url=https://github.com/payjp" frameborder="0" scrolling="no"></iframe>
<p>他にも BASE, PAY.JP チームの雰囲気に関しては <a href="https://twitter.com/laiso">@laiso</a> さんのジョイン時のエントリが非常に参考になり、
こんな場所なら自分もやっていけそうだなという感触も掴めた。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="BASEに入社した - laiso" src="https://hatenablog-parts.com/embed?url=http://blog.lai.so/entry/2016/08/22/BASE%E3%81%AB%E5%85%A5%E7%A4%BE%E3%81%97%E3%81%9F" frameborder="0" scrolling="no"></iframe>
<p>何度かのお話をする機会を経てオファーをいただきしばらく悩んだけど、総じて</p>
<ul>
<li>自分の技術の主軸としたい Python のプロダクトに技術者として関われる。</li>
<li>コミュニティー等で活動している人もいてオープンな活動もやっていけそう。</li>
<li>プロダクトの目指すべきところが世の中を、人々の生活をより良いものにしていこうという確かな姿勢があって共感できた。</li>
</ul>
<p>あたりでマッチしていると思い、ジョインすることを決めた。</p>
<h2>入ってみて</h2>
<p>ジョインしてまだ1週間経ってないのだけれど書いてみる。</p>
<h3>雰囲気</h3>
<p>最初オフィスを見学させていただいた際にあった「PAY 部屋」と呼ばれる PAY.JP メンバーが <s>隔離されて</s> 独立していた部屋の壁は去年の末にぶち破られたようで PAY.JP チームも BASE チームもワンフロアに集まっている。
組織的には PAY.JP は別れては居るのだけど、月イチの締め回では全体でいっしょに集まってワイワイしていたし全社的なコラボとかはありそうな感じ。</p>
<p>PAY チームに関しては Python コミュニティーで活動されてる方も多く、実際 <a href="https://pyhack.connpass.com/">python mini hack-a-thon</a> で知り合った人と繋がってる人も多くいて業界の狭さを感じつつ、「Python の会社だな」という感覚は確実にあって事前に話していた通りだなと感じている。</p>
<p>他にもいろいろありそうなのだけど、大体 @laiso さんのブログの通りだなというのが今の所の所感。</p>
<h3>お仕事</h3>
<p>私はインフラエンジニアという枠でのジョインなので、もちろんそのあたりの領域を中心に見ていくことにはなるけど
状況次第でアプリケーション領域に踏み込んで行くのというのも十分にありそう。</p>
<p>あまり詳細は書けないしちゃんと把握していくのはこれからだけど、
扱うモノが決済ということもあり、まだ2年経ってないサービスだけれども大分ガチガチに固めている感じはある。
これまでの自分の経験では決済の仕組みを作る側になる機会がなかったためか聞き慣れない用語も結構あって、しっかりやってかねば!という思いがより強まっている。</p>
<p>あと PC は基本的に好きなものを使わせてもらえて、全部載せの DELL XPS13 に Archlinux を入れて使うのも OK で最高な感じがある。
(もちろんセキュリティ関連のことは気にする必要があるけれど、その辺はセキュリティエンジニアのクリスに早速色々面倒を見てもらった)</p>
<h1>ペパボの思い出</h1>
<p>それまで Twitter なんかでしか見ることのない
インターネット大好きでめっちゃアウトプットしまくっている人たちがいっぱい居る会社で
色々な視点で改めてインターネットにどっぷり浸かることができた気がする。</p>
<p>在籍期間は2年2ヶ月と一般的なキャリアと比較すると短期間の部類になるのだろうけど</p>
<p>EC(インフラ) -> ヘテムル(インフラ) -> グーペ(インフラ) -> tetote (何でもあり) -> EC(サーバサイド開発)</p>
<p>みたいな感じで関わり、サイクルOJT<sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup> なんて目じゃないくらい様々なところに首を突っ込まさせてもらった。</p>
<h2>入社</h2>
<p><a href="/2014/09/07/join-pepabo.html">ここ</a> でも大枠は書いて入るのだけど、当時はビビリでちょっと控えてたところもあったので今更ながらもう少し追加で書いてみる。</p>
<p>入社前は完全に Web オペレーション中心のインフラエンジニア業をやっていたのだけど、
ちょうど Infrastructure as Code という言葉が出始めてきていて自分の関心も高まっていた。</p>
<p>そんな中で勉強会で <a href="https://twitter.com/ume3_">@ume3_</a> さんに遭遇して色々お話したり、既に退職はされていたけど <a href="http://serverspec.org/">Serverspec</a> の開発者である <a href="https://twitter.com/gosukenator">mizzy</a> さん, 日々の業務で自分がやりたいことをググるとことごとく引っかかるブログを書かれていた <a href="https://twitter.com/glidenote">@glidenote</a> さん等のペパボの中の人のアウトプットをみていて、インフラエンジニアでも github バリバリ使ってたり手を動かしてアウトプットしまくってる人たちがいて、こんな会社で仕事を通じてエンジニアとしてのキャリアパスを描けたらなと思って応募した。</p>
<p>特に @glidenote さんへの憧れの強さが志望動機の大きなところではあったのだけど、
なんと前前職の有給消化が始まるタイミングで転職エントリを目撃。入れ違いという形になってしまった。<sup id="fnref:3"><a class="footnote-ref" href="#fn:3">3</a></sup></p>
<h2>1年目</h2>
<p>元々はECのインフラエンジニアとしてジョインして、日々の業務のなかでMSP時代ではなかなか味わうことのなかった
サービスを運用する視点というものをより強く感じられるようになった。</p>
<p>最初のうちで大きなことといえば、脆弱性対応のときに fabric 使って業務に勢いをつけたり
まとめてドカンと期限がやってきたSSL証明書をひたすら更新したり、CDN 運用関連で叫びながらベンダーのドキュメント読みあさったり問い合わせしまくったり、
コンテンツ配信サーバを3S互換ストレージ Bayt への移設のEC側インフラ担当をやったりしていた。<sup id="fnref:4"><a class="footnote-ref" href="#fn:4">4</a></sup></p>
<p>しばらくすると、当時の東京支社はオンプレ環境からプライベートクラウドへの移設まっさかりで、
そのとき比較的フットワークが軽い状況であった私はヘテムルやグーペの助っ人として幾つかのチームに傭兵のごとくジョインさせてもらい
多分1年やそこらでは到底体験できないようなとてつもなく濃い経験をさせてもらった。
日報で適当にぼやいてたグーペの「ビックバンメンテ」という言葉が拾われて後のテックカンファでも語られるようになったのは個人的に非常に感慨深い。</p>
<p>ペパボのインフラエンジニアの方は皆さんサービス思考が非常に高く、
またそれを支える確かな得意分野をそれぞれ持たれていて、一緒に仕事をさせていただいて本当に学びが多かった。
単純な技術そのものもそうだけれども、インフラエンジニアとして事業に関わるということの感覚を磨くことができて本当に良かった。</p>
<h2>2年目</h2>
<p>そんな感じで最初の1年位は過ごしていたのだけど、日々の業務でペパボ社内ではレアな Python を使って色々やっているところを拾われたのか、
2年目はCTO の<a href="https://twitter.com/kentaro">あんちぽさん(@kentaro)</a>のもと <sup id="fnref:5"><a class="footnote-ref" href="#fn:5">5</a></sup> 、
技術支援という形で当時はグループ会社であったペパボオーシーさんのプロダクト tetote に<a href="https://twitter.com/kenchan">けんちゃんくんさん(@kenchan)</a> とともにフルコミットする形となった。tetote は Python 製のプロダクトである。</p>
<p>そんなことから2016年はペパボでは非常にレアな Pythonista 時々インフラところによりフロントエンドみたいな感じで日々の業務を行うことになった。
Web 界隈に来て念願だった Web アプリケーション開発に自分の好きな Python で直接コミットできる機会が得られ、結構ヘビーながらも楽しく仕事をしていた。
PyCon JP 2015 のときに当てた PyCharm の Pro 版ライセンスがこれでもかというくらい役に立ってむしろあれが完全なフラグだったんじゃないかなとも思ってる。</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">じゃんけんで PyCharmPro ライセンスもらったからもっとpython書かないと <a href="https://twitter.com/hashtag/pyconjp?src=hash">#pyconjp</a></p>— Kei IWASAKI (@laugh_k) <a href="https://twitter.com/laugh_k/status/653132298137681921">October 11, 2015</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>tetote で一緒だった けんちゃんくんさん とは結果としてペパボ在籍時、一番長い間一緒に仕事をさせていただいた。
くんさん には技術者としてプロダクトに対して向き合う姿勢/手法をこれでもかと言わんばかり見せつけられて、
それまで私は個人的な経験上「アジャイル」「スクラム」といった言葉から連想される、所謂スクラムマスター的な役割に対する一種の不信感があったのだけど、非常にいい意味でぶっ壊された。
言葉と技術という手法を使って問題に切り込んで行く「技術者としての振る舞い」を横で学ばせていただき、本当に一緒に仕事することができてよかったと思っている。</p>
<p>またペパボのデザイナであちこちで詩のアウトプットを行っている <a href="https://twitter.com/shikakun">@shikakun</a> ともデザイン面で色々とお世話になった。
詩と言いつつもデザインを形成する基本的な理論を学ばせてもらって、勝手にデザイナさん向け勉強会に顔を出していただけだけどコラボすることができて本当によかった。</p>
<p>その後は tetote から離れ、
再び EC に戻り、インフラではなくサーバサイド開発の手伝いをさせていただいていた。</p>
<h2>自分の技術的視点の変化</h2>
<p>ペパボにジョインする際は主軸とすると技術はWeb系のインフラスキルで、
Python はその際の手段として好んで使っているだけだった。
けれども様々な業務の傍らで手を動かしたりコミュニティの集まりに顔を出すようになっていった結果
自分の一番主軸にしたい技術は Python だなと考えるようになった。</p>
<p>2年目からは実際業務でメインで扱うものも Python になり、
<a href="https://pyhack.connpass.com/">Python mini hack-a-thon</a> にはこれまで以上にべったり関わるようになったし、PyCon JP でもトークをする機会もいただけた。</p>
<p>これまで自分が少しずつでも地道にやってきたことがようやくつながり始め
自分が関わるサービスやコミュニティーにどうやって寄与していこうかという事を、業務に無理やりねじ込む頃よりもより突っ込んで考えるようにもなっていった。</p>
<h2>退職</h2>
<p>様々な事情で tetote にコミットし続けることができなくなってしまい、
結果 Python を主軸として仕事をやり続けるのが困難な状況になってしまった。
これに関しては様々なサービスを運営する会社としては避けられない流れから発生しているもので、
私自身もそのような状況になった事自体は納得している。</p>
<p>ただ前述したような背景もあり、もはや自分の今一番主軸にしたい技術は Python だなと考えるようになっていた。
やっと形になり始めた自分の技術的なバックグラウンドをより高めていくには
Python のコードを書きつづけるなり、Python 製プロダクトの実運用におけるリアルなノウハウを磨いていく必要があると強く感じていた。</p>
<p>そのような思いがあり、「自分が納得できる選択はどこにあるか?」を求めて
PyCon JP のスポンサーを中心に「まずは話を聞きに行く」という行動を起こし始めた。
それがちょうど9月になるタイミング。</p>
<p>これがそのままきっかけとなり、転職することを決めた。</p>
<p>正直なところ、ペパボは今各サービスでCTL<sup id="fnref:6"><a class="footnote-ref" href="#fn:6">6</a></sup>が誕生してよりバーンと行く体制が整って来ているし、
ペパポ研究所<sup id="fnref:7"><a class="footnote-ref" href="#fn:7">7</a></sup>が中心に進めている「なめらかなシステム」は本当に面白そうで、
そういった状況に中の人間として関われなくなってしまうのは非常に残念なのだけど、それを差し置いてでもやっぱり自分の限りある人生のなかで挑戦していきたいことを優先することにした。</p>
<p>結果として、様々なめぐり合わせと方向性の違いの結果によって
今回の私の転職は発生したのかなと思っている。</p>
<h1>最後に</h1>
<p>こんな感じで今年は新たな環境で新たな挑戦がはじまりました。
不安も無いわけではないけれど、まずは決済を通じて価値の交換をシンプルな世界をめざすべくやってくぞという気持ちです。</p>
<p>例のリストとやらも置かせてもらいます。よろしくお願いします。</p>
<ul>
<li><a href="http://amzn.asia/azHFKAV">Wish List</a></li>
</ul>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p>実はもう一つ目に止まったところが表参道にある。 <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:2">
<p>参考: <br/> - <a href="http://tech.pepabo.com/2016/10/18/engineer-training-2016/">GMOペパボの新卒エンジニア研修の様子 & テキストを公開します - ペパボテックブログ</a>, <br/> - <a href="http://blog.hifumi.info/2015/11/16/pepabo-cycle-ojt-2015/">ペパボ新卒エンジニア研修2015・サイクルOJTが(とっくに)始まっています | blog: takahiro okumura</a> <a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:3">
<p>その後2回ほど飲み会の席で同席させていただくことができた。感極まりなかった。 <a class="footnote-backref" href="#fnref:3" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
<li id="fn:4">
<p>参考: <br/> - <a href="http://www.slideshare.net/lamanotrama/mogilefsprivate-s3">MogileFSをバックエンドとしたPrivate S3の作り方</a> <br/> - <a href="http://www.slideshare.net/hiboma/mogilefs-private-s3-api">MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編</a> <br/> - <a href="http://www.slideshare.net/masatakakono1/10webftps3">10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話</a> <a class="footnote-backref" href="#fnref:4" title="Jump back to footnote 4 in the text">↩</a></p>
</li>
<li id="fn:5">
<p>入社前にインターネットで見たサンタの格好したおじさんがまさか自分の直の上司になるとは... というのが正直な感想。世の中何があるかわかったものではない。参考: <a href="http://pb-recruit.jugem.jp/?eid=2">インフラエンジニアを採用したい! | ペパボ採用担当ブログ</a> <a class="footnote-backref" href="#fnref:5" title="Jump back to footnote 5 in the text">↩</a></p>
</li>
<li id="fn:6">
<p>参考: <a href="http://blog.kentarok.org/entry/2016/09/05/000512">技術組織をスケールするためのCTL = チーフテクニカルリード - Kentaro Kuribayashi's blog</a> <a class="footnote-backref" href="#fnref:6" title="Jump back to footnote 6 in the text">↩</a></p>
</li>
<li id="fn:7">
<p>参考: <a href="http://rand.pepabo.com/">ペパボ研究所</a> <a class="footnote-backref" href="#fnref:7" title="Jump back to footnote 7 in the text">↩</a></p>
</li>
</ol>
</div>2016年買ったものを振り返る2016-12-31T00:00:00+09:002016-12-31T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2016-12-31:/articles/2016-12-31-look-back-2016-what-bought/<p>年の瀬なので今年買ったものを振り返ってみようと思う。
こういうエントリ書くのは初めて。
全部ではないのだけど、生活環境に変化をもたらしたレベルのものをあげてみる。</p>
<p>年の瀬なので今年買ったものを振り返ってみようと思う。
こういうエントリ書くのは初めて。
全部ではないのだけど、生活環境に変化をもたらしたレベルのものをあげてみる。</p>
<h2>ECサイト利用状況</h2>
<p>利用した EC サイトの状況は↓な感じ</p>
<p>|
-----------|-
Amazon | 63回
ヨドバシ | 6回
モノタロウ | 2回
楽天 | 1回</p>
<p>ダントツでAmazonで、ヨドバシもモノがあれば使っているという感じ。<br>
あとはネジとか工具関連についてはモノタロウが非常によい。</p>
<h1>食洗機</h1>
<p>|
-|-</p>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B01FLOBEYU&linkId=f933b1f8064fb16a81d9b313554811ef"></iframe>
<p>|
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B007FPSM30&linkId=541f750af7b9129216e8c278b19677b2"></iframe>
</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="【楽天市場】\タイムセール/木製 ラック リベルテ 5段 幅60 liberte木天板ラック 連結可能タイプ シェルフ ラック 木製 60 5段 北欧 ディスプレイラック オープンラック 棚 liberte 送料無料 木製ラック【D】【取寄せ品】:Rack World" src="https://hatenablog-parts.com/embed?url=http://item.rakuten.co.jp/rackworld/9110360/" frameborder="0" scrolling="no"></iframe>
<p>これはほんとに買ってよかったやつ。</p>
<p>取付工事のとかの関係で本体はネットではなくて電気屋で買ったのだけど、
分岐水栓は Amazon のほうが安いので「自分で準備するからいい」という感じにするのがいい。
(ここでピックアップしている分岐水栓はあくまで私の家のタイプとあっていたものなので、購入の際は自分の家の水道とあっているかは要確認。)</p>
<p>ただ設置する棚には注意が必要で、流しよりも高い位置に食洗機をセットできるものでないといけなかったけどのこの辺知らずに低いものを用意していたので買い直す羽目になってしまった...</p>
<h1>配線周り</h1>
<p>| |
-|-|-</p>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B0000A41W1&linkId=03c89e2f6128ae00179ed11a1d17262b"></iframe>
<p>|
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B0001CQ5GK&linkId=641cfea6ae6e3a6783d1967368791dfe"></iframe></p>
<p>|
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B0001CQ5E2&linkId=cdca38c4eb8d0f171087b794484ba9d1"></iframe></p>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B0001CQ5FQ&linkId=aa0a182232c0c56379e7bdeee792e288"></iframe>
<p>|
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B0001CQ5EW&linkId=fb1c71ccf3addba951c1906e1ed208d6"></iframe></p>
<p>|
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B00DHZP2FS&linkId=69e76315a5aff6340eb7440f5d9a6810"></iframe></p>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B0097LRR36&linkId=d3a369b0642c887227644eec8d77e7ec"></iframe>
<p>|
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B00BBQ523W&linkId=318debaaaba3fdca09e075c84faaf852"></iframe></p>
<p>|<br>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B00D747POK&linkId=58873754a4c2ade85808182272970a5c"></iframe>
</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="3×25 (+)皿小ねじ (SUS316L)(パック品) 1パック(17個) 大阪魂 【通販モノタロウ】 41700206" src="https://hatenablog-parts.com/embed?url=https://www.monotaro.com/p/4170/0206/" frameborder="0" scrolling="no"></iframe>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="M3 6×1.6 板ナット(ステンレス)(パック品) 1パック(10個) 大阪魂 【通販モノタロウ】 42114186" src="https://hatenablog-parts.com/embed?url=https://www.monotaro.com/p/4211/4186/" frameborder="0" scrolling="no"></iframe>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="3.2×13×1.2 丸ワッシャー 特寸(ステンレス) 1パック(25個) 大阪魂 【通販モノタロウ】 42169617" src="https://hatenablog-parts.com/embed?url=https://www.monotaro.com/p/4216/9617/" frameborder="0" scrolling="no"></iframe>
<p>去年末に今の部屋に引っ越してきたのだけど、回線を引き込める場所がキッチンしか無くて色々試行錯誤していった。
ひとまずモデムを薄型ミニマガジンにおさめて、そこから糞長いLANケーブル無理やり別の部屋の自分の机まで這わせてた。</p>
<p>あと机の上を少しでもスッキリさせるためにL型フックをネジ止めしてラップトップ置き場を DIY したりもした。
ネジとか工具関連は細かなサイズを確認しながら買うのでアレばモノタロウが一番買いやすいなと思った。</p>
<p>それとサンワサプライの机用電源タップが地味にUSBの口もついてて便利。</p>
<h1>カバン</h1>
<p>|
-|-</p>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B00J082HU4&linkId=1306e9a33a37e6fc804de22f82ba350b"></iframe>
<p>|
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B00E3NY6VY&linkId=2d34067925a793d8eaabe69f6d398a9e"></iframe>
</p>
<p>カバン周り、安くてそこそこなリュックと高校生の時から使ってたボストンバッグがいい加減限界に来てたのでこの辺買い替えた。</p>
<p>thule のリュックはそれなりに重量あったりもするのだけど、ラップトップを入れるのも前提になっていて容積もかなり大きいので大量に入る割に背負っているときに感じる負担が少なくなって非常に移動が楽になった。しょっちゅうPC持ち歩くんだとやっぱリュックはいいやつにしたほうがいいなと思った。</p>
<p>GRANDSTONE のバッグはキャスター付きでリュックにもなるので自転車乗りつつ電車で移動なんて用途にはすごく捗る。
キャスターは方向転換には対応してない感じなのでちょっと面倒なときもあるけど、この値段だし十分許容範囲。
雑に荷物をボンボンぶっ込めるボストンバックっぽい感じで使えるのも良くてこれも買ってよかったなと思ってる。</p>
<h1>ガジェット系</h1>
<h2>XPS15</h2>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="InfinityEdgeディスプレイ搭載XPS 15 9550ハイパフォーマンスノートパソコン | Dell 日本" src="https://hatenablog-parts.com/embed?url=http://www.dell.com/jp/p/xps-15-9550-laptop/pd" frameborder="0" scrolling="no"></iframe>
<p><a href="/2016/05/13/get-xps15-9550.html">DELL XPS15 9550 (late 2015) を手に入れて Arch Linux とデュアルブート環境で使ってる</a>
で書いていたやつ。</p>
<p>今年イチバンの買い物。<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup>
元々メモリ16GB 以上積めるラップトップで US 配列選べていい感じのないかなーとい感じで選定して
4月時点でスペック的にも申し分ないという感じで購入した。</p>
<p>ローンの手数料がきつくて無理やり一括で支払って大きな出費にはなったけど、
パフォーマンス的に大満足で使ってる。個人的にはラップトップならフルHD対応してればまあいいかなーという感じだったけど、
15インチ4K対応は出先でも広い画面で作業ができるのですごくよい。</p>
<p>Linux で HiDPI 関連がまだ完全じゃないところもあって一部で 「laugh_k 病」なんて言われるようにもなってしまったけど、
総じて満足度は高い。</p>
<h2>持ち運び用のラップトップスタンド</h2>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="Amazon.co.jp: GPG2 ノートパソコン用 折りたたみ 軽量 スタンド ノートPC 持ち運び デスク MacBook対応 熱対策 (ブラック): パソコン・周辺機器" src="https://hatenablog-parts.com/embed?url=https://www.amazon.co.jp/GPG2-%25E3%2583%258E%25E3%2583%25BC%25E3%2583%2588%25E3%2583%2591%25E3%2582%25BD%25E3%2582%25B3%25E3%2583%25B3%25E7%2594%25A8-%25E6%258A%2598%25E3%2582%258A%25E3%2581%259F%25E3%2581%259F%25E3%2581%25BF-%25E3%2583%258E%25E3%2583%25BC%25E3%2583%2588PC-MacBook%25E5%25AF%25BE%25E5%25BF%259C/dp/B00KL5G666/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=laughk-22&linkId=316d50d56bd7262527e29d5eddb29a26" frameborder="0" scrolling="no"></iframe>
<p>XPS15 購入に付随して購入。
もともとは仕事で使ってた MacBookPro 用に使ってた <a href="http://amzn.to/2hVAjyc">Bluelounge Kickflip</a> が排気口の位置の関係で XPS15 では使えず<sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup> 、
出先でも視線上げて使えるラップトップスタンドほしいなーと Amazon を色々ウォッチングして見つけたもの。</p>
<p>安いし失敗してもいっかーくらいの軽いノリで買ったけど、結果的に大当たり。
Kickflip に比べると角度が高いのだけど、タイプに支障が出るほどではないし視点がいい感じに高いところに上がっていい感じ。
折りたたむとほんとに薄っぺらでめちゃめちゃ軽いので持ち運びにも便利だしこれは買ってほんとに良かった。</p>
<h2>シガーライターUSB充電のやつ</h2>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="Amazon | RAVPower USBカーチャージャー 2ポート (24W 4.8A 、12V・24V車対応) iPhone Android スマホ タブレット 急速充電 iSmart機能搭載 | シガーソケットチャージャー | 車&バイク" src="https://hatenablog-parts.com/embed?url=https://www.amazon.co.jp/RAVPower-USB%25E3%2582%25AB%25E3%2583%25BC%25E3%2583%2581%25E3%2583%25A3%25E3%2583%25BC%25E3%2582%25B8%25E3%2583%25A3%25E3%2583%25BC-%25E3%2580%258112V%25E3%2583%25BB24V%25E8%25BB%258A%25E5%25AF%25BE%25E5%25BF%259C%25EF%25BC%2589-Android-iSmart%25E6%25A9%259F%25E8%2583%25BD%25E6%2590%25AD%25E8%25BC%2589/dp/B01B4AW9P8/ref=as_li_ss_tl?ie=UTF8&linkCode=ll1&tag=laughk-22&linkId=00b2b0a3cc74f128e8a31ffe1d1ea8dd" frameborder="0" scrolling="no"></iframe>
<p>今年になって10年ぶりに車の運転を再開してちょくちょくカーシェアリングで乗るようになったので購入。
やっぱ移動しながら各種ガジェットの充電できるのは便利。</p>
<h2>ZenFone 2 laser</h2>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="Amazon | エイスース SIMフリースマートフォン ZenFone 2 Laser(Qualcomm Snapdragon 410/メモリ 2GB)16GB ゴールド ZE500KL-GD16 | スマートフォン本体 通販" src="https://hatenablog-parts.com/embed?url=https://www.amazon.co.jp/SIM%25E3%2583%2595%25E3%2583%25AA%25E3%2583%25BC%25E3%2582%25B9%25E3%2583%259E%25E3%2583%25BC%25E3%2583%2588%25E3%2583%2595%25E3%2582%25A9%25E3%2583%25B3-Laser%25EF%25BC%2588Qualcomm-Snapdragon-2GB%25EF%25BC%258916GB-ZE500KL-GD16/dp/B017R3BJX4/ref=as_li_ss_tl?ie=UTF8&linkCode=ll1&tag=laughk-22&linkId=c8dbf19391d57f5793b025839be04a5a" frameborder="0" scrolling="no"></iframe>
<p>これまで使ってた Xperia Z3C がバッテリー拡張問題に遭遇してしまってメニューバーに触れなくなってしまったので泣く泣く購入。
単純に安いからということで仕事関連専用で使うサブ機として買った。そんなハイスペックではないけど、でかすぎずに持ちやすいサイズだし、Slack 見たり OneLogin や Authy 使ったりする分には特に不自由なく使えている。</p>
<p>最近は会社関連のものも2要素認証必須になったりでそれ用にスマフォが必要になるケースもあるけど、
少なくとも私は個人的にプライベートの端末をそういった用途には使いたくないのでサブ機を用意してそちらにやらせている。</p>
<h2>Zenpad 3S 10</h2>
<p>| |
-|-|-</p>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B01MEHLOHD&linkId=2abf0ab32862fca6b5d901e3bc8f17d7"></iframe>
<p>|
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B00U25RP38&linkId=2aad845c37b427af4e68876f5d8e43cc"></iframe></p>
<p>|
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B01HRPVOK0&linkId=3642c75e06e5eb72847048b1a4152ed8"></iframe>
</p>
<p>電子書籍を読むのと、座学系のカンファレンス勉強会に向けて用意したセット。
Nexus7 (2013) を普通に動く状態でもってはいたのだけど、そろそろ厳しそうだなということとちょうど次のタブレット買おうと検討し始めた時期に Zenpad 3S 10 が発売になったので購入した。キーボードはそれなりにしっかししてそうで英語配列やつがいいなーと探していて値段的にもちょうど良くて Anker のウルトラスリムを選んだ。</p>
<p>使ってみて、高解像度で 4:3 の画面てこんな見やすかったんだな... と正直すごく感動した。
動作もかなりサクサクだしKindle、PDFの電子書籍は Nexus7 (2013) に比べるとかなり快適に読める。
ついでに指紋認証も非常に便利で microSD も指せるのでコスパはめちゃめちゃいいと思う。</p>
<p>座学系の勉強会用途だと Builderscon, ペパボテックカンファレンス に行ったときに試しに Bluetooth キーボードとタブレットセットだけで臨んでみたけどだいたい目論見通りで、
タブレット特化のTwitterクライアントの <a href="https://play.google.com/store/apps/details?id=net.wakamesoba98.sobacha&hl=ja">Sobacha</a> でハッシュタグの状況を追いかけつつ、メモは Google Keep にボンボンぶっこむ感じで過ごしてて特に問題なかったし、バッテリーの持ちはラップトップよりも遥かにいいので今後もこのスタイルは続けようかなと思う。</p>
<p>最初はキーボード一体型のケースでないと膝の上で使うのは厳しいかなーと思ったりしてたのだけど、
タブレット向けのスタンドにもなるケースとある程度しっかりした作りのキーボードであれば割と問題なく使えた。</p>
<h2>Edgerouter X</h2>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="Amazon|Ubiquiti Networks Edgerouter ER-X(日本国内)|パソコン・周辺機器ストア オンライン通販" src="https://hatenablog-parts.com/embed?url=https://www.amazon.co.jp/Edgerouter-ER-X-Ubiquiti-Networks-ER-X-%25E6%2597%25A5%25E6%259C%25AC%25E5%259B%25BD%25E5%2586%2585/dp/B010MZFH5A/ref=as_li_ss_tl?ie=UTF8&linkCode=ll1&tag=laughk-22&linkId=af49948a5b376985854c93cf62673f5f" frameborder="0" scrolling="no"></iframe>
<p>これは後日別途エントリを書こうかなと思ってるのだけど、ちょっと前に話題になった Edgerouter X を購入した。
最初は個人輸入しようと思ったけど送料やら関税やらなんやらの手間を考えると十分ありだなと判断できるところまで値段が下がってたので Amazon で買った。</p>
<p>先週くらいに家のルーターとDNSキャッシュサーバを shuttle ベアボーンの KVM 母艦に載せている VyOS から Edgerouter X に移行。
おかげでキッチンの薄型ラックに全部収まったし、サーバも減らせて大分快適になった。</p>
<p>Web UI からネットワークの状況見れるのもいい。</p>
<h1>課金系</h1>
<p>モノではないけど以下もある</p>
<ul>
<li>Google Play Music</li>
<li>PyCharm ライセンスアップデート</li>
<li>Enpass Pro (Android環境のみ) <sup id="fnref:3"><a class="footnote-ref" href="#fn:3">3</a></sup></li>
<li>Rebuild supporters</li>
<li>inoreader Professional</li>
</ul>
<hr>
<p>こんな感じ。買ったもの適当にピックアップするつもりがアヤシイアフィリエイトサイトのような雰囲気になってしまった。
1月くらいに買ったのを見ると「これ今年だったんだな...」と思うくらい、1年すぎるのがあっという間だっんだなと思った。</p>
<p>来年はどうなるんだろうなー。</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p>ちなみに納品日が娘が生まれた日だった。そういう意味でも今年イチバンな気がする。 <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:2">
<p>本来 mac で使うことが前提にされてるので当たり前っちゃ当たり前なのだけど。 <a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:3">
<p><a href="https://memo.laughk.org/2016/12/28/0001.html">続・ラフなラボ – パスワード管理ツールを Keepass から Enpass へ移行した</a> <a class="footnote-backref" href="#fnref:3" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
</ol>
</div>パスワード管理ツールを Keepass から Enpass へ移行した2016-12-28T00:00:00+09:002016-12-28T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2016-12-28:/articles/2016-12-28-change-enpass-from-keepass/<p>これまでパスワード管理ツールは <a href="http://keepass.info/">Keepass (version 2系)</a> を使っていたのだけど、
最近たまたま Enpass って言う別のクロスプラットフォームのものがあることを知り、試してみていい感じだったの移行した。</p>
<p><img alt="screenshot01" src="/images/2016/12/2016-12-28_01.png"/></p>
<p><a href="https://www.enpass.io/">Best password manager for iOS, Android, Windows, Linux, Mac | Enpass</a></p>
<p>これまでパスワード管理ツールは <a href="http://keepass.info/">Keepass (version 2系)</a> を使っていたのだけど、
最近たまたま Enpass って言う別のクロスプラットフォームのものがあることを知り、試してみていい感じだったの移行した。</p>
<p><img alt="screenshot01" src="/images/2016/12/2016-12-28_01.png"></p>
<p><a href="https://www.enpass.io/">Best password manager for iOS, Android, Windows, Linux, Mac | Enpass</a></p>
<p>Enpass はマルチプラットフォーム対応なパスワード管理ツールで、Windows や macOS はもちろん Linux 版もあるし Android、iOS にも対応している。(他にも WindowsPhone や BlackBerry, Chrome OS にも対応してる)</p>
<h1>経緯</h1>
<p>この手のツールだと今ではおそらく <a href="https://1password.com/">1password</a> が一番メジャーなんじゃないかと思うけど、
あいにく私は PC のメインの環境が ArchLinux であることと、少なくともパスワード管理マネージャを使い始めた当時はまだ 1password の Android 版がなかった気がするので要件に見合うものとしてずっと Keepass を使っていた。 <sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup></p>
<p>Keepass を使い始めてからはパスワード管理は捗ってたし、特別な不満は感じてなかった。
実際 Android の <a href="https://play.google.com/store/apps/details?id=keepass2android.keepass2android&hl=ja">keepass2android</a> は良く出来てると思う。</p>
<p>ただ唯一不便と言うか、「これができたらもっと便利なんだけどなー」というのに PC でのブラウザ連携があって、
Linux 環境だと firefox/chroem の拡張の導入がことごとく大変でしかもまともに動かずで、結局は毎回パスワードを入力の際は別の keepass ウィンドウからせっせと対象を検索して手動でコピペしてた。</p>
<p>この使い方でも「まあいっかな。パスワードちゃんと管理できるのは便利だし」と思ってそのまま5年くらいは使ってたのだけど
ノリで Enpass を試してみたらこの辺が Linux でもアッサリと、そしてしっかり動いた上に各サイトのパスワード変更もいい感じにマージしてくれたりと「ブラウザ連携めちゃめちゃ便利じゃん!」となって移行を決断。</p>
<h1>Keepass から Enpass の移行</h1>
<p>雑にメモっとく。<br>
ちなみに私は好みでUIを英語にしているけれど普通に日本語対応はしている。<sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup></p>
<h2>Enpass のインストール</h2>
<p>まずは Enpass のインストール。
基本的には以下のページからそれぞれのプラットフォームに合わせてインストールすればOK.</p>
<p><a href="https://www.enpass.io/downloads/">Downloads | Enpass</a></p>
<p>ArchLinux の場合は <code>enpass-bin</code> という名前で AUR に登録されてるので以下のコマンドで入る。便利。</p>
<div class="highlight"><pre><span></span><code>yaourt -S enpass-bin
</code></pre></div>
<p>初回起動の際大体以下の流れ</p>
<ol>
<li>既存のデータを持っているかどうか聞かれるけど無いので 「I am a new Enpass user」を選択。</li>
<li>Set Password で管理するパスワード一覧にアクセスするためのパスワードを求められるので設定する。忘れないように注意。</li>
<li>そうするとメインの画面があがってくる</li>
</ol>
<p>これで Enpass のインストールはOK。</p>
<h2>Keepass からのデータの移行</h2>
<p>Enpass は様々なツールからのインポートにも対応している。
Keepass からの場合は xml か csv 形式から選ぶことになるけれど、Linux 版の KeepassX の export が csv のみの対応だったようで
csv に一度データをエクスポートした上で Enpass からインポートした。 <sup id="fnref:3"><a class="footnote-ref" href="#fn:3">3</a></sup></p>
<p><img alt="screenshot02" src="/images/2016/12/2016-12-28_02.png"></p>
<p>インポートが完了するとそのままな「import (インポート)」というカテゴリに全部放り込まれてる。
ブラウザ連携で URL から自動的に必要なパスワード情報を探してくれて全く困ってないし、この辺の整理は気が向いたらやろうかなという感じではある。</p>
<p>また別の環境への同期のために</p>
<p>「Tools (ツール)」 -> 「Settings (設定)」 -> 「Sync (同期)」タブ -> 「sync with (と同期する)」</p>
<p>のところででお好みのクラウドストレージを介した同期ができるので設定しておく。
Dropbox だけじゃなく OneDrive や Google Drive 、 Box とか ownCloud まで選択できるのもいい感じ。
これをやっておけばスマフォなり別の PC に Enpass を入れても初回起動時で同期の設定ができる。</p>
<p><img alt="screenshot03" src="/images/2016/12/2016-12-28_03.png"></p>
<h1>Keepass から Enpass にうつってみて</h1>
<p>大体以下のような感じ。</p>
<ul>
<li>Enpass そのものが各種クラウドストレージを介した同期に対応してるので、パスワードDBファイルを意識しなくてよくて楽。</li>
<li>管理できるフィールドのカスタマイズができて、ログインに3項目以上入力しなければいけないサイトなんかの情報管理も楽。</li>
<li>ブラウザ連携が Linux 環境でもすぐにちゃんと動く。</li>
<li>モバイルアプリで PIN コード or 指紋認証が使えるのが便利。</li>
<li>当然だけどクリップボードへのコピーなどの キーバインド にちょっと違和感あり。まあ慣れの問題だと思う。</li>
<li>モバイル版はプラットフォームごとの課金なので、Android だけなら1回課金すればずっとProプランOKみたい。(多分 iOS も一緒)</li>
<li>モバイルのトライアルは20項目制限でアクセス可能な項目はコントロールできないので、状況によってはそんな「お試し」はできないかも。</li>
</ul>
<p>大分長いこと Keepass で慣れてしまった部分からのギャップもあるのだろうけど、概ねよさそうな感じ。
モバイルは昨日 Pro プランにうつったばっかでそんな使い込んでないのでこれから色々出てきそうな気もするけど。</p>
<hr>
<h1>おまけ</h1>
<p>そういえば年末なのかクリスマスなのかはわからないけど、今 Enpass の Pro プランが 50% off になってるようなので
試して良さげなら今のうちに買っておくのはアリかも。</p>
<p><a href="https://www.enpass.io/pricing/">Enpass: The Most cost effective password manager | Enpass</a></p>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p>Linux 版が出ない以上、多分今後も 1password は使う機会はないかな... <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:2">
<p>システム環境が日本語であればデフォルトは日本語になっていると思う。 <a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:3">
<p>ちなみに生成された csv を覗いてみると既に使ってない情報が結構残ってたので、そのあたりの掃除をしてからインポートした。(インポートしてから消すのはめんどいので) <a class="footnote-backref" href="#fnref:3" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
</ol>
</div>Linux の MS Onedrive のクライアントで新しいものが出ていたので変更してみた2016-12-22T00:00:00+09:002016-12-22T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2016-12-22:/articles/2016-12-22-onedrive-client-for-linux/<h2>tl;dr</h2>
<p><a href="https://github.com/skilion/onedrive">onedrive</a> っていうそのままな名前のLinux向け MS Onedrive 非公 …</p><h2>tl;dr</h2>
<p><a href="https://github.com/skilion/onedrive">onedrive</a> っていうそのままな名前のLinux向け MS Onedrive 非公式クライアントが出ていたのでそっちに変えたよって話</p>
<p>ちなみにこのエントリでは名前がややこしいので</p>
<ul>
<li>「MS Onedrive」 -> マイクロソフトのサービス <a href="https://onedrive.live.com">Onedrive</a> のこと</li>
<li>「onedrive」 -> 今回紹介している非公式の MS Onedrive クライアント</li>
</ul>
<p>と表記しております。</p>
<hr>
<p>メインPCの環境が Linux で MS Onedrive を使いたいって場合、
非公式の何らかのクライアントを使うことになるのだけど、たまたま以下のものを見つけた。D言語で実装されてる。</p>
<div class=iframely>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="skilion/onedrive: Free Client for OneDrive on Linux" src="https://hatenablog-parts.com/embed?url=https://github.com/skilion/onedrive" frameborder="0" scrolling="no"></iframe>
</div>
<p>ちょっと前までは Linux で MS Onedrive を使いたい場合、 <a href="https://github.com/xybu/onedrive-d-old">onedrive-d</a> を使うのがほとんどだったんじゃないかなーと思うのだけど、 こちらはGithubのリポジトリの状況がコロコロ変わったり、バージョンによってインストール手順が結構違ったり、ドキュメントどおりに動かないところがあったりと不安定な印象があったので乗り換えてみた。</p>
<h2>手順</h2>
<h3>onedrive-d を消す</h3>
<p>既に onedrive-d を使っている状況だったのでまずは消す。
といっても私の場合は Archlinu 環境で AUR 経由で入れていたので動いているプロセスを止めて消すだけ。</p>
<div class="highlight"><pre><span></span><code><span class="c1"># 動いている onedrive-d プロセスを止める</span>
onedrive-d stop
<span class="c1"># onedrive-d を消す</span>
yaourt -R onedrive-d-git
</code></pre></div>
<p>あと、既に使っている <code>~/Onedrive</code> ディレクトリを引き続き使うのだと 2016-12-22 時点では onedrive では既存のファイルをいい感じにマージして同期とかはやってくれないので適当にリネームするなり潔く消すなりする。</p>
<div class="highlight"><pre><span></span><code><span class="c1"># 以下はリネームする場合、削除は自己責任で。</span>
mv -v ~/Onedrive<span class="o">{</span>,.bakup-<span class="sb">`</span>date +%Y%m%dT%H%M%S<span class="sb">`</span><span class="o">}</span>
</code></pre></div>
<h3>onedrive をインストール & セットアップ</h3>
<p>基本的には <a href="https://github.com/skilion/onedrive/blob/master/README.md">README</a> に従ってやってくのだけれども Archlinux の場合は既に AUR に上がっているのでそちらから入れられる。便利。<br>
特に不都合なければデフォルトの構成でインストール。</p>
<div class="highlight"><pre><span></span><code>yaourt -S onedrive
</code></pre></div>
<p>これで README の Installation 相当のところまでは完了するので configuration をやってく。
AUR 経由だとファイルのパスが微妙に違うけれど、基本的にやることは一緒。
必要に応じて設定ファイルの中身は編集。(特に問題なければ編集しなくてもよし。デフォだと <code>~/Onedrive</code> に同期される。)</p>
<div class="highlight"><pre><span></span><code><span class="c1"># ユーザー用の設定ファイルをディレクトリ掘ってセットする</span>
mkdir -pv ~/.config/onedrive
cp -v /etc/onedrive.conf ~/.config/onedrive/config <span class="c1"># ... ここがREADME と違う</span>
</code></pre></div>
<p>設定ファイルをおいたら初回起動。単純に以下のコマンドを実行。</p>
<div class="highlight"><pre><span></span><code>onedrive
</code></pre></div>
<p>すると以下のような感じで一旦ブラウザから認証する必要がある。</p>
<ol>
<li><code>Authorize this app visiting:</code> に表示されてるURLにアクセスする。</li>
<li>別のURLにリダイレクトされるので、アドレスバーからコピー。</li>
<li>コピーしたURLを <code>Enter the response url:</code> のところに入力する</li>
</ol>
<p>というながれ。認証が通ればそのまま同期が開始される。ただこの時点では動悸されたことが確認できたら一旦 <code>Ctrl+C</code> とかで一旦中断する。<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup></p>
<p><img alt="onedrive 起動時のログ" src="/images/2016/12/2016-12-22_01.png"></p>
<p>最後に自動起動の設定。 AUR経由で入れた場合、既に <code>/usr/lib/systemd/user/</code> 配下に <code>onedrive.system</code> ファイルが設置されるので素直に systemd でやるのが良さそう。以下の用にユーザーのサービスとして有効にして自動起動するようにする。</p>
<div class="highlight"><pre><span></span><code>systemctl --user <span class="nb">enable</span> onedrive
systemctl --user start onedrive
</code></pre></div>
<p>起動したかどうかも一応確認しておくと安心感がありそう。</p>
<div class="highlight"><pre><span></span><code>journalctl --user-unit onedrive -f
</code></pre></div>
<hr>
<p>とりあえずは安定して動いてそうなのでこれでしばらくはこれで様子を見てみることにします。</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p>ちなみに私は firefox でアクセスしたのだけどリダイレクト先のURLにはどういうことかアクセスができなかったけど、同期する分には問題なかった。 <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>PyCon JP 2016 トークセッションスピーカーとして参加してきた #pyconjp2016-09-25T00:00:00+09:002016-09-25T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2016-09-25:/articles/2016-09-25-report-pyconjp-2016/<p>今年も去年に続き <a href="http://pyconjp.connpass.com/event/30692/">PyCon JP 2016</a> (カンファレンスのみ) に参加してきたのでその時のレポート的なメモ書きを残しておきます。去年はLTに参加させていただきましたが、今回はトークセッションでお話させてもらいました。</p>
<p><img src="/images/2016/09/report-pyconjp-2016-01.jpg" width="30%"/></p>
<p>今年も去年に続き <a href="http://pyconjp.connpass.com/event/30692/">PyCon JP 2016</a> (カンファレンスのみ) に参加してきたのでその時のレポート的なメモ書きを残しておきます。去年はLTに参加させていただきましたが、今回はトークセッションでお話させてもらいました。</p>
<p><img src="/images/2016/09/report-pyconjp-2016-01.jpg" width="30%"></p>
<h1>話してきたトークの内容</h1>
<p>こんなトークをしてきました。</p>
<h2>たった一ファイルの python スクリプトから始める OSS 開発入門</h2>
<blockquote>
<p>1ファイルのスクリプトを書き捨てる程度でしかコードを書かなかったところから、書いたコードを公開するようになってによって起こった技術的な視野の広がりについて、実際の体験を元にお話します。</p>
</blockquote>
<p>https://pycon.jp/2016/ja/schedule/presentation/41/</p>
<h3>スライド<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup></h3>
<iframe src="//www.slideshare.net/slideshow/embed_code/key/bqo46KEOiCZzUs" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe>
<div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/laughk/python-oss-pyconjp-2016slide" title="たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016" target="_blank">たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016</a> </strong> from <strong><a target="_blank" href="//www.slideshare.net/laughk">Kei Iwasaki</a></strong> </div>
<h3>動画</h3>
<iframe width="560" height="315" src="https://www.youtube.com/embed/BtOCoo7-sF8" frameborder="0" allowfullscreen></iframe>
<h3>Togetter</h3>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="OSS開発してみませんか? インフラエンジニアがPythonを通じてコードを書きはじめ、公開するまで #pyconjp #pyconjp_202 - Togetterまとめ" src="https://hatenablog-parts.com/embed?url=https://togetter.com/li/1027133" frameborder="0" scrolling="no"></iframe>
<h3>トークについての雑記</h3>
<p>入門と言っておきつつもなんというか、どこかキャリアキーノート<sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup>ならぬ「俺の Python キーノート」みたいなトークになって大丈夫かなと不安な面が正直ありました。ただ、まとめていただいた Togetter、公開したスライドのアクセス状況を見る限りでは結構反応いただけていたようでひと安心しています。</p>
<p>このトーク・スライドを通じて少しでもコードを書いていきたい、公開してみたいけどうまくできてないという方へ「こんな感じでやってるやついるんだし、やってみようかな」というきっかけになることができると幸いです。(実際、思うようにコードを書いて公開していくきっかけが掴めないでいた過去の自分に対するメッセージという面も結構盛り込んでいたりします。)</p>
<p>当日の感想としては今回は初めてのトークセッションにもかかわらずまさかの45分枠。
しかも大きめな場所で「うおおおお!マジか!!!w」という状況。流石に去年のLTとは違う緊張感で自分の番が終わるまでは本当に吐きそうでしたし、カンファレンスに来て初めて「ぼっちになりたい...」と思ったくらいでした(おかげで1日目のお弁当の記憶がほぼない...)。</p>
<p>発表の際は XPS15 の USB-TypeC 経由の VGA 出力を現地のプロジェクタが認識してくれずに一時どうなるかと思いましたが、たまたま仕事用の MacBookPro を持っていたのでデータを転送して難を逃れるなんてハプニングもありました。動作確認大事ですね。(おかげで直前に無理して購入した USB-TypeC 変換ケーブルを買った意味がなくなってしまいましたが...)</p>
<h1>PyCon JP 2016 その他感想とか</h1>
<ul>
<li>
<p>モノタロウ侍に今年も会えた</p>
<p>1日目会場についてモノタロウ侍を見かけたときは「あーーー!また会えた!!」と嬉しくなったのと同時にトーク前の緊張が少し和らぎました。またモノタロウさんのブースのくじで2等を当ててmicroSDカードを頂いた。それと「Pythonやるならモノタロウ」。</p>
</li>
<li>
<p>Youtube でトークの内容が共有されるありがたみを別の視点で実感</p>
<p>今回はスピーカーとして参加させていただき、自分が話す前は全然頭に入ってこない状況だったわけですがそんな状況だったとしても後からどんなトークだったのかを振り替えれるのはありがたいなと思いました。最も自分の場合はトークでパワーを使いすぎて1日目は全体的にへばってしまってましたが... そういう視点で非常にありがたいなとおもいました 。</p>
</li>
<li>
<p>Wifi/電源</p>
<p>今回はネット環境も電源もかなり厳しかった印象がありました。この規模のカンファレンスだと運営するのもかなり大変だろうとは想像がつくのですが、流石にネットワークがうんともすんとも言わない状況になるとは... という感じです。電源もトークセッションを聞く際は席によって全く取れない状況だったので空き時間に少しでも充電しておかないとPCは厳しかったです(特に XPS15 はスペック重視でバッテリーの持ちが全然良くないので本当にキツかった...)。 </p>
<p>だだ去年も似たような事を書いたと思うけれど、トークセッション中のメモはスマフォ(Nexus6)で Google Keep にボンボン投げてたら案外大丈夫だったし、ハッシュタグを並行で追いかけられる Twitter クライアント (<a href="https://play.google.com/store/apps/details?id=me.b0ne.android.apps.beeter">beeter</a> とか) で状況はまあ追いかけられたので、ワークショップに参加するなどで PC が必要になるケースが無いのであれば、大規模のカンファレンスはタブレット+キーボードのスタイルで臨んだほうがいいのかもしれません。モバイルバッテリーで電源なくても充電できますし。</p>
</li>
<li>
<p>パーティー</p>
<p>1日目のパーティーの際には「トークでこんなこと話してました」という感じで話題にすることができましたし、2日目の Well Done パーティーにもご招待いただけ、2日間通して普段なかなか交流することのない Pythonista の方々とも交流できました。この時間が本当に楽しかった。</p>
<p><img src="/images/2016/09/report-pyconjp-2016-02.jpg" width="30%"></p>
</li>
<li>
<p>全体的に</p>
<p>自分のトークが1日目午後一発目の比較的早めの順番だったというのは初回として本当にありがたかったのですが、思いの外そこで体力を使い切ってしまって他のトークとかがそこまでしっかり回りきれておりませんでした... どちらかといえばパーティーなんかの交流を楽しんだ感じです。いくつか聴いておきたいなーと思っていたトークは後ほどスライドと動画で追っかけようと思います。</p>
<p>自分が喋った後で完全燃焼してしまった感が大きくて、もう少し余裕を持って準備できるとよかったなーということが心残りではあります。また来年も(ちゃんと準備をしながら)トーク応募できればいいな。</p>
</li>
</ul>
<p>雑な感じだけれども以上。<br>
PyCon JP 2016 カンファレンス本当に楽しかったです!運営スタッフの皆様お疲れ様でした、そしてありがとうございました!</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p>ちなみにこのスライドは Mac の keynote ではなく <a href="https://github.com/gnab/remark">remark.js</a> という js 製の Markdown でスライド作成できるものを使っていて、Chrome で PDF エクスポートをしたものをアップロードしてます。本当は直接ホスティングしようかなとも思いましたが、出来上がるのがギリギリ過ぎてどこにホスティングしようとか、効果測定に Google Analytics あたりは仕込まないとなーととかそのへんの準備が間に合わず、無難に SlideShare を使った感じです。ここは結構知見が溜まったので別途ブログエントリを時間があるときに書こうかなーと思ってます。 <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:2">
<p>キャリアキーノートについては <a href="http://blog.hifumi.info/2016/06/20/career-keynote/">キャリアキーノートとはなにか | blog: takahiro okumura</a> を参照 <a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
</ol>
</div>Django の QueryDict で dict 型みたいに更新した状態で urlencode するメモ2016-09-09T00:00:00+09:002016-09-09T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2016-09-09:/articles/2016-09-09-django-querydict-update-memo/<p>Django の QueryDict の挙動でちょっとこんがらがってしまったのでメモ書き。</p>
<p>Django の QueryDict の挙動でちょっとこんがらがってしまったのでメモ書き。</p>
<p>Django の QueryDict は単純に <code>update</code> した場合。
キーが被るものに関しては通常の dict 形式の様に上書き更新するのではなく、値のリストに追加される仕様。ということで以下の様な挙動になる。</p>
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="n">sample_dict</span> <span class="o">=</span> <span class="n">QueryDict</span><span class="p">(</span><span class="s1">'aaa=xxx&bbb=yyy'</span><span class="p">,</span> <span class="n">mutable</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="o">>>></span> <span class="n">sample_dict</span>
<span class="o"><</span><span class="n">QueryDict</span><span class="p">:</span> <span class="p">{</span><span class="sa">u</span><span class="s1">'aaa'</span><span class="p">:</span> <span class="p">[</span><span class="sa">u</span><span class="s1">'xxx'</span><span class="p">],</span> <span class="sa">u</span><span class="s1">'bbb'</span><span class="p">:</span> <span class="p">[</span><span class="sa">u</span><span class="s1">'yyy'</span><span class="p">]}</span><span class="o">></span>
<span class="o">>>></span> <span class="n">sample_dict</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">'aaa'</span><span class="p">:</span><span class="s1">'AAA'</span><span class="p">})</span>
<span class="o">>>></span> <span class="n">sample_dict</span>
<span class="o"><</span><span class="n">QueryDict</span><span class="p">:</span> <span class="p">{</span><span class="sa">u</span><span class="s1">'aaa'</span><span class="p">:</span> <span class="p">[</span><span class="sa">u</span><span class="s1">'xxx'</span><span class="p">,</span> <span class="s1">'AAA'</span><span class="p">],</span> <span class="sa">u</span><span class="s1">'bbb'</span><span class="p">:</span> <span class="p">[</span><span class="sa">u</span><span class="s1">'yyy'</span><span class="p">]}</span><span class="o">></span>
</code></pre></div>
<p><code>get</code> で単純にキーを指定して値を出す場合は最新の値を一つだけ出してくれるのでいいのだけど
この状態で <code>urlencode</code> すると全部の情報が出てきてしまう。</p>
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="n">sample_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'aaa'</span><span class="p">)</span>
<span class="s1">'AAA'</span>
<span class="o">>>></span> <span class="n">sample_dict</span><span class="o">.</span><span class="n">urlencode</span><span class="p">()</span>
<span class="sa">u</span><span class="s1">'aaa=xxx&aaa=AAA&bbb=yyy'</span>
</code></pre></div>
<p>重複せず最新のものを採用して <code>urlencode</code> してほしかったので一旦 dict で処理して回避した。
(けどもっとうまい方法無いかな...)</p>
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="n">current_queries</span> <span class="o">=</span> <span class="n">QueryDict</span><span class="p">(</span><span class="s1">'aaa=xxx&bbb=yyy'</span><span class="p">)</span><span class="o">.</span><span class="n">dict</span><span class="p">()</span>
<span class="o">>>></span> <span class="n">current_queries</span>
<span class="p">{</span><span class="s1">'aaa'</span><span class="p">:</span> <span class="s1">'xxx'</span><span class="p">,</span> <span class="s1">'bbb'</span><span class="p">:</span> <span class="s1">'yyy'</span><span class="p">}</span>
<span class="o">>>></span> <span class="n">add_queries</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'aaa'</span><span class="p">:</span> <span class="s1">'AAA'</span> <span class="p">}</span>
<span class="o">>>></span> <span class="n">add_queries</span>
<span class="p">{</span><span class="s1">'aaa'</span><span class="p">:</span> <span class="s1">'AAA'</span><span class="p">}</span>
<span class="o">>>></span> <span class="n">current_queries</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">add_queries</span><span class="p">)</span>
<span class="o">>>></span> <span class="n">current_queries</span>
<span class="p">{</span><span class="s1">'aaa'</span><span class="p">:</span> <span class="s1">'AAA'</span><span class="p">,</span> <span class="s1">'bbb'</span><span class="p">:</span> <span class="s1">'yyy'</span><span class="p">}</span>
<span class="o">>>></span> <span class="n">query_dictionary</span> <span class="o">=</span> <span class="n">QueryDict</span><span class="p">(</span><span class="s1">''</span><span class="p">,</span> <span class="n">mutable</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="o">>>></span> <span class="n">query_dictionary</span>
<span class="o"><</span><span class="n">QueryDict</span><span class="p">:</span> <span class="p">{}</span><span class="o">></span>
<span class="o">>>></span> <span class="n">query_dictionary</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">current_queries</span><span class="p">)</span>
<span class="o">>>></span> <span class="n">query_dictionary</span>
<span class="o"><</span><span class="n">QueryDict</span><span class="p">:</span> <span class="p">{</span><span class="s1">'aaa'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'AAA'</span><span class="p">],</span> <span class="s1">'bbb'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'yyy'</span><span class="p">]}</span><span class="o">></span>
<span class="o">>>></span> <span class="n">query_dictionary</span><span class="o">.</span><span class="n">urlencode</span><span class="p">()</span>
<span class="s1">'aaa=AAA&bbb=yyy'</span>
</code></pre></div>
<h3>参考:</h3>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="Request and response objects | Django documentation | Django" src="https://hatenablog-parts.com/embed?url=https://docs.djangoproject.com/ja/1.10/ref/request-response/#querydict-objects" frameborder="0" scrolling="no"></iframe>#pyhack 夏山合宿に行ってきた2016-09-05T00:00:00+09:002016-09-05T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2016-09-05:/articles/2016-09-05-pyhack-training-camp-in-summer/<p>今年も去年に引き続き <a href="http://pyhack.connpass.com/">python mini hack-a-thon</a> の夏山合宿に2日間参加してきた。合宿の参加はこれで二回目。今回は日々の疲れを癒やすのと関東の夏の暑さから逃れるために行ってきた感が強い。
去年は特にブログとか書いてなかったけど、記録に残しておきたいなーということでダラダラ書いてみる。</p>
<p><img alt="image" src="/images/2016/09/pyhack-training-camp-in-summer01.jpg"/></p>
<p>今年も去年に引き続き <a href="http://pyhack.connpass.com/">python mini hack-a-thon</a> の夏山合宿に2日間参加してきた。合宿の参加はこれで二回目。今回は日々の疲れを癒やすのと関東の夏の暑さから逃れるために行ってきた感が強い。
去年は特にブログとか書いてなかったけど、記録に残しておきたいなーということでダラダラ書いてみる。</p>
<p><img alt="image" src="/images/2016/09/pyhack-training-camp-in-summer01.jpg"></p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="Python mini hack-a-thon 夏山合宿 2016 - connpass" src="https://hatenablog-parts.com/embed?url=https://pyhack.connpass.com/event/29999/" frameborder="0" scrolling="no"></iframe>
<h1>1日目</h1>
<p>合宿場所は長野の山奥にあるマウンテンパパというペンション。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="菅平 峰の原高原 ペンション マウンテンパパ ラグビー応援、登山、観光に。 - テラスでバーベキュー、セミナー、塾、合宿など貸切も。 手作りお料理の美味しい宿" src="https://hatenablog-parts.com/embed?url=https://www.mtpapa.jp/" frameborder="0" scrolling="no"></iframe>
<p>新幹線で上田駅まで行き、そこからバスで1時間ほど移動。そこからオーナーさん(通称パパさん)に車で迎えに来ていただいて行く感じ。大体上田駅に昼ゴハン時に到着した人たちで刀屋という蕎麦屋さん行くのが恒例</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="刀屋 (かたなや) - 上田/そば [食べログ]" src="https://hatenablog-parts.com/embed?url=https://tabelog.com/nagano/A2004/A200401/20000113/" frameborder="0" scrolling="no"></iframe>
<p>ここ(というより上田あたりの地域では?)の蕎麦は量の感覚がちょっと違っていてとりあえず多い。事前情報があったうえで今回は普通盛のざる蕎麦にしたのだけどドカンとやってくる。下手に大盛りを頼むとえらい目に合いそうだ。</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">これが普通盛り...!! <a href="https://t.co/wBftFsdkBL">pic.twitter.com/wBftFsdkBL</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/771554173661786112">September 2, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>食事が終わったら上田駅まで戻ってバスに乗る。今回別の合宿に行きそうな団体と被ってしまって全く座れず。1時間立ちっぱなしになってしまって結構しんどかった。(信州菅平・峰の原高原あたりは結構な合宿地になっているようでテニスやラグビー、ブラスバンドなんかの合宿もやってるっぽい)</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">移動で完全にグロッキーてビール飲んで寝たい <a href="https://twitter.com/hashtag/pyhack?src=hash">#pyhack</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/771587779322978304">September 2, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>そしてこの有様。</p>
<p>ペンションについたら、1Fにある食堂スペースみたいな場所で各々好きなように過ごす。
大体の人はここでPCを出して各自やりたいことモクモクし始める。人が集まってきたら部屋割を決めて決まった部屋に荷物を置きに行って、そこからはご飯の時間みなさん以外に自由に過ごす。<br>
そのまま食堂スペースに残り続けて飲んだりモクモクしたりカードゲームやボードゲームで盛り上がったり。</p>
<p>自分は <a href="https://pycon.jp/2016/ja/schedule/presentation/41/">PyCon JP 2016 のトークプロポーザル</a> の資料を作るために <a href="https://github.com/gnab/remark">remark</a> や CSS を触りつつ、食事が終わって風呂に入って落ち着いたあとは酒を飲みつつ色々ディープな話をしていたような気がする。
気がついたら3時位になってて慌てて寝た。</p>
<h1>2日目</h1>
<p>前日遅くまで飲んでたのと最近あまり睡眠の質が良くない状況が相まって午前中はほぼ寝ていた。
涼しくて空気のよい環境で眠れるのは最高だった。
ちなみに朝ごはんはちゃんは食べた。(時間になると強制的にパパさんに起こされるので寝坊はない)
飯食ったあとに二度寝した。</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">二度寝してたらお昼 <a href="https://twitter.com/hashtag/pyhack?src=hash">#pyhack</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/771902468766654464">September 3, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>午後は基本的に前日と同じで PyCon JP の準備。
周りでも「remark すげー!」と盛り上がっていて<a href="https://twitter.com/hirokiky">kyさん</a>や<a href="https://twitter.com/c_bata_">カレーメシ先輩</a>も remark を使ってやってく感じになってた。このあたりワイワイやり取りして単純に markdown でプレゼンできるだけじゃなくて、ウィンドウをクローンしたりプレゼンノートも書いておけたりタイムキープの機能もあったり、とホントにプレゼンテーションするのに必要な機能が揃っててスゲー!という発見があってよかった。</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">そういえば散歩してねー!!ってなって急いで外をふらふら散歩してきた。いい感じの気温でよかった。 <a href="https://twitter.com/hashtag/pyhack?src=hash">#pyhack</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/771981289993871362">September 3, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>あとは夕方になろうかというタイミングでハッと思い立って散歩にでかけた。せっかくなかなか来ない山の中に来たのにこもってるだけだともったいない!</p>
<p><img alt="image" src="/images/2016/09/pyhack-training-camp-in-summer02.jpg"></p>
<p><img alt="image" src="/images/2016/09/pyhack-training-camp-in-summer03.jpg"></p>
<p>そういえばマウンテンパパがポケモンジムになっていたことも確認した。</p>
<hr>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">この合宿最大のイベントが始まる!! <a href="https://twitter.com/hashtag/pyhack?src=hash">#pyhack</a> <a href="https://t.co/7dRhkl4CRR">pic.twitter.com/7dRhkl4CRR</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/771982743169228801">September 3, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet" data-lang="en"><p lang="und" dir="ltr"><a href="https://twitter.com/hashtag/pyhack?src=hash">#pyhack</a> <a href="https://t.co/6CSIsp2Qxt">pic.twitter.com/6CSIsp2Qxt</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/771983317197479937">September 3, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>夕方はメインイベントのBBQ。外でやるので暗くなる前にということで夕方5時から開始。たらふく肉と野菜を食らう。あとビール。ここでは量に限りがあるけど琥珀エビスの樽が飲めるのでビール好きにはほんとにたまらない。旨い酒と旨い飯に囲まれる至福の時だった。</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">琥珀エビスの樽、もう無くなったので味わって飲む <a href="https://twitter.com/hashtag/pyhack?src=hash">#pyhack</a> <a href="https://t.co/bMsmoHneGP">pic.twitter.com/bMsmoHneGP</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/771989662554476544">September 3, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>ちなみに琥珀エビスは開始30分くらいでなくなったようだ</p>
<p>ペンションの中に戻るときにkyさんにめっちゃ星キレイだよーと言わてペンションの敷地外の道まで出てみたけど、周りに何も明かりがない分本当に星がめっちゃキレイに見えて最高だった。スマホカメラでは全く何も捉えることはできなかったのでひたすら目に焼き付けた。</p>
<p>本当に天気に恵まれてよかった。</p>
<p>BBQが終わったあとは1日目と一緒でフリータイム。なんだか動物のツムツムで盛り上がってた気がする。
自分は今年になって新しくできたというジャグジーに浸かったあとに1日目同様に PyCon JP の準備をしていた。
大体2時くらいに寝た。</p>
<h1>3日目</h1>
<p>最終日。2日目同様に朝ごはんをいただき、そのあとは基本的に精算しつつ解散の流れ。
何か喋りたいことがある人はモニターを使って発表していく通常の #pyhcak スタイルも同時進行。</p>
<p>バイクや車、自転車の人なんかは自分のタイミングで帰っていく。
新幹線を使う場合は行く時同様にパパさんにバス停まで送っていただく。
希望すればランチもいただける。</p>
<p>という感じで本当に人それぞれの動きになってくる。</p>
<p>今回は午前中にペンションを出て早めに帰ることにした。途中帰りの道で事故が起こってバスの中で30分くらい足止め食らってしまうトラブルもあったけど無事に新幹線に乗って無事帰路についた。</p>
<h1>感想</h1>
<p>去年よりちょこっと暖かくてギリギリ半袖で大丈夫かなーくらいの気温ですごく快適に過ごすことができた。
それだけでほんとに行った価値はあったし、最近は家庭環境も変わってきてなかなか家で思うように集中する時間も取りづらくなっていたのでやりたい作業も勧められてよかった。(進捗がいいわけではないけど)</p>
<p>今回実はスライドのサンプルコードでFizzBuzz書いてみたくらいしか python を触ってなかったけど普段 pyhack で一緒のひとたちといつも以上に深い話ができたり盛り上がれたりして過ごせてほんとに楽しく過ごせた2日半だった。来年も行けるなら行きたいなー。</p>DELL XPS15 9550 (late 2015) を手に入れて Arch Linux とデュアルブート環境で使ってる2016-05-13T00:00:00+09:002016-05-13T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2016-05-13:/articles/2016-05-13-get-xps15-9550/<p>これまでプライベートでは <a href="http://www.dell.com/jp/p/xps-13-l321x-mlk/pd">DELL XPS13 l321x(eary 2012)</a> (以下 XPS13)を使ってきたのだけど
<a href="http://www.dell.com/jp/p/xps-15-9550-laptop/pd">DELL XPS15 9550(late 2015)</a> (以下 XPS15) を購入した。</p>
<p>ArchLinuxとWindows10のデュアルブートで使ってる。</p>
<p><img alt="image01" src="/images/2016/05/image01.jpg"/></p>
<p>これまでプライベートでは <a href="http://www.dell.com/jp/p/xps-13-l321x-mlk/pd">DELL XPS13 l321x(eary 2012)</a> (以下 XPS13)を使ってきたのだけど
<a href="http://www.dell.com/jp/p/xps-15-9550-laptop/pd">DELL XPS15 9550(late 2015)</a> (以下 XPS15) を購入した。</p>
<p>ArchLinuxとWindows10のデュアルブートで使ってる。</p>
<p><img alt="image01" src="/images/2016/05/image01.jpg"></p>
<h2>ざっくり経緯</h2>
<p><a href="https://laugh-labo.blogspot.jp/2013/04/linuxmintultrabook.html">XPS13を購入して</a>から3年が経過して保守切れたのに加えて
最近自分が扱う用途が以前にもましてどんどん広がっていって、調べものしたりVM複数台上げた状態で作業をしているとPCごと固まって落っこちるような状況がちょくちょく発生。</p>
<p>普段使いにはまだまだいけるのだけども、技術者として使い続けるPCとしては限界を感じて
最低でも4年以上は使うことを想定してコミコミスペックのXPS15を購入した。</p>
<p>ちなみにVAIO Z クラムシェルのコミコミとかなり悩んだけど実機の持ち運びやすさよりもスペック(i7-6700HQ)を優先した。</p>
<h2>環境構築のメモ</h2>
<p>やったことが大分多岐にわたっているので細かいところは以下のGithubレポジトリのIssueにまとめている。
これからもなんかあったら追加でIssueにメモを残していくつもり。</p>
<iframe class="hatenablogcard" style="width:100%;height:155px;margin:15px 0;max-width:680px;" title="laughk/dell-xps15-9550: Windows10 と ArchLinux でデュアルブートで使ってる DELL XPS15 9550 (late 2015) に関する情報をまとめるためのレポジトリ" src="https://hatenablog-parts.com/embed?url=https://github.com/laughk/dell-xps15-9550" frameborder="0" scrolling="no"></iframe>
<p>ArchLinuxインストール、デュアルブート環境構築は XPS13 と同じようなノリで行けるかなーと最初は思ってたのだけど流石に3年前のモデルとは大分事情が変わっていた。
ざっくり書くと</p>
<ul>
<li>出荷状況に戻す手段の確保 ( <a href="https://github.com/laughk/dell-xps15-9550/issues/4">laughk/dell-xps15-9550#4</a> )<ul>
<li>最近のモデルは出荷状況に戻すためのメディアをDVD-Rなどに完全に外出ししておくことができないみたいで本体SSDに必ずリカバリ領域を残しておく必要があるっぽい</li>
<li>リカバリするためのメディアがUSBメモリ(16GB以上)でないと作成できなくて焦った。(Windows10から? BD-Rもだめだった) </li>
<li>ということで保守に入っている場合は極力デュアルブートにしてWindows環境も残したほうが良さそう。</li>
</ul>
</li>
<li>HW 的な Boot まわりの設定もちゃんとやる必要あり ( <a href="https://github.com/laughk/dell-xps15-9550/issues/5#issuecomment-213950760">laughk/dell-xps15-9550#5(comment)</a> )<ul>
<li><code>高速スタートアップ</code>, <code>Secure Boot</code> は Off に</li>
<li>SATA Operation が RAIDモードだと Linux で起動した際にボリュームを認識できないので、BIOS Setup から AHCI に変更する。</li>
<li>SATA Operation を変更するるとそのままでは Windows領域が認識できなくなるので、変更後はWindowsを一度リカバリメディアからの初期化する必要あり。</li>
</ul>
</li>
<li>ArchLinux 環境<ul>
<li>GRUB では UEFI での XPS15 との相性が悪くうまくデュアルブートできず。systemd-boot を使ったら一発でうまくいった。</li>
<li><code>/boot</code> は標準の起動領域(FAT32でフォーマットされてるパーディション)をフォーマットせずそのまま使うのが無難。(破壊しないように注意) ( <a href="https://github.com/laughk/dell-xps15-9550/issues/5#issuecomment-213983976">laughk/dell-xps15-9550#5(comment)</a> )</li>
<li>タッチパネルなんかはGNOME3だと特に何もせずに使えた。4Kディスプレイだが文字が小さくなりすぎることもなくいい感じにしてくれる。</li>
<li>とはいえグラフィック周りは <a href="https://wiki.archlinux.org/index.php/Dell_XPS_15">Arch wiki の XPS15 まとめ</a> にあるようにあまり安定してるとは言いにくく、外付けディスプレイに繋いで使うとかだと <code>linux-lts</code> を入れて LTS カーネルを使っていたほうが無難(2016-05-13 時点では) ( <a href="https://github.com/laughk/dell-xps15-9550/issues/11">laughk/dell-xps15-9550#11</a> )</li>
</ul>
</li>
</ul>
<h2>使ってみて</h2>
<p>まだ2週間ちょっとしか経ってないけど今の所だいたい以下のような感じ。</p>
<ul>
<li>
<p>マシンパワー</p>
<p>コミコミにした関係でかなりいい値段はしたけどスペックは本当に申し分なし。
作業中にPC全体が固まってしまうこともなくなったし、VirtualBoxでWindows10を起動しながらでも余裕で全然ストレスなく使えてめちゃめちゃ快適。</p>
</li>
<li>
<p>ディスプレイ</p>
<p>15インチで4Kなディスプレイはかなりキレイ。現状は今まで使っていたPrincetonのディスプレイがあるから合わせて使っているけど、
もしかしたらそのうち外部ディスプレイはいらなくなるかもと思うくらい。とはいえ個人的には初フルHDラップトップのXPS13購入時に比べるとディスプレイに対する感動はそこまででもないかも。
また本当は解像度だけ4Kでタッチパネルは必要ないと思っていたのだけど、使えると案外便利かもなとは思っている。
あとは、そのままでは写り込みと反射がきついのでアンチグレアフィルムは貼ったほうがいいと思う。私は以下のものを利用中。</p>
<p><iframe src="https://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B017EU6IL8" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
</li>
<li>
<p>15インチラップトップ</p>
<p>XPS15 (9550) のレビューを見ると15インチにしては「薄い」とか「軽い」とかのコメントが結構あるけど
これまで基本的に13インチを超える大きさのラップトップを全く使ってこなかった身からするとどうしてもデカく感じるし「ちょい重いよなー」とは感じる。
ただ持ち運びそのものに致命的な問題になってるわけでもないし、個人的には全然許容範囲。
デカ目のディスプレイのほうがいい身としては、15インチという大きなディスプレイサイズの環境を持ち運べるメリットは大きいかなとも思う。</p>
</li>
<li>
<p>キーボード・トラックパッド</p>
<p>キーボードはいつもどおり英語配列にしたけれど、これまで使っていたXPS13の使いやすさそのままという感じ。
XPS13では結構安っぽさがあったトラックパッドに関しては地味にかなり改善されてると思う。仕事ではMacbookProを使ってるがそちらと比べてもそこまで劣っているとは感じない。</p>
</li>
</ul>
<p>「うーむ。なるほどね」と思うところが無いわけじゃないけれど、 全体的に満足度はめちゃめちゃ高い。
これなら4年は全然使えそうな感じだし、むしろ宝の持ち腐れにならないように自分自身もっとやってかないと!と思うのでした。</p>PelicanテーマHSSを公開した2016-02-03T00:00:00+09:002016-02-03T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2016-02-03:/articles/2016-02-03-publish-pelican-hss/<p><a href="/2016/01/27/blog-renewal.html">前回</a>の続き<br/>
公開はしていたのですが、このブログ用に作っていた<a href="http://getpelican.com/">Pelican</a>のテーマが大体形になったかなーという段階まで来たので改めて。</p>
<p><a href="/2016/01/27/blog-renewal.html">前回</a>の続き<br>
公開はしていたのですが、このブログ用に作っていた<a href="http://getpelican.com/">Pelican</a>のテーマが大体形になったかなーという段階まで来たので改めて。</p>
<p>リポジトリはこちらです。(前回のエントリから変わってます)</p>
<ul>
<li><a href="https://github.com/laughk/pelican-hss">laughk/pelican-hss: HSS is responsive and single page design theme for Pelican.</a></li>
</ul>
<p>もともとは自分のブログ用にハックしてパブリックに置いておけばいいかな程度でやってたのですが、<br>
「こうしたい、ああしたい」といじりまくり、更には最近参加している社内のHTML5/CSS3モダンコーディング勉強会<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup>で得た知識を使いたい!と熱が入りまくり、気がついたら見た目がほとんど別物にまでなっていました。</p>
<p>そんな経緯で、元の作者に可能な限り経緯を示しつつHSSと名前を変えて公開しています。
見た目はこのブログそのもので大体以下のものが追加できたりします。(READMEにも説明をつけたのでこちらではざっくりと)</p>
<ul>
<li>作者ロゴのURL指定</li>
<li>Google Analytics の埋め込み</li>
<li>Google Adsense (レスポンシブのみ) の埋め込み</li>
<li>Disqus の埋め込み</li>
<li>ソーシャルボタン (twitter, facebook, pocket, はてぶ)</li>
</ul>
<p>他にも自分で足りないと思うものがあったら足すかもしれませんが、大体これくらいで一段落かなーとい感触はあります。</p>
<p>すでに Pelican を使っている人も、これから静的サイトジェネレーターでブログをやろうと思っている方も、よろしければご活用ください。 <br>
また、MITライセンスで公開していますので「微妙にここが気に食わない!」などありましたらご自由にフォークしてカスタムもお好きなようにどうぞ!</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p><a href="http://www.amazon.co.jp/gp/product/B0176GNY26/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B0176GNY26&linkCode=as2&tag=laughk-22">HTML5/CSS3モダンコーディング フロントエンドエンジニアが教える3つの本格レイアウト スタンダード・グリッド・シングルページレイアウトの作り方</a> を進めてます。わかりやすくて良いです。 <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>ブログをリニューアルした2016-01-27T00:00:00+09:002016-01-27T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2016-01-27:/articles/2016-01-27-blog-renewal/<p>リニューアルといっても <a href="http://docs.getpelican.com/">Pelican</a> のテーマを変えただけなのだけど。</p>
<p>リニューアルといっても <a href="http://docs.getpelican.com/">Pelican</a> のテーマを変えただけなのだけど。</p>
<p>今回は今までと違って既存のテーマをforkしてガシガシいじってる。 </p>
<ul>
<li><a href="https://github.com/laughk/pelican-svbhack">laughk/pelican-svbhack</a></li>
</ul>
<p>このブログは <a href="http://docs.getpelican.com/">Pelican</a> でビルドした静的ファイルを gihubpages にホスティングする形で使っていて、<br>
Pelican自体は結構豊富な種類のテーマが用意されている</p>
<ul>
<li><a href="http://www.pelicanthemes.com/">Pelican themes</a></li>
</ul>
<p>なのだけど、あまりシングルレイアウトでいい感じのものがなかったのと<br>
フォントとかデザインがあまり日本人向けじゃないかなーと個人的に感じるところが多くて中途半端なカスタムを加えたりとかしていた。</p>
<p>ただ自分で非公式にハックしてるのもメンテが大変だし、色々あまりよろしくは無いと思っていて、
比較的シンプルなデザインだった <a href="https://github.com/gfidente/pelican-svbhack">gfidente/pelican-svbhack - HTML</a> がMITライセンスだったこともありありがたくフォークさせてもらうことにした次第。</p>
<p>まだ「これで完成かなー」というところまで全然こぎつけてないけど
大体自分が使いたかったレイアウトで安定はしてきたかなというところでブログに適用してみた。<br>
デザインの細かな調整や配色、READMEとかも合わせてまだまだ整備していく予定。</p>エンジニアの朝活にスポーツジムはいかがでしょう?2015-12-15T00:00:00+09:002015-12-15T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2015-12-15:/articles/2015-12-15-shall-we-sports-gym/<p>日付が変わってしまいましたが、<br/>
この記事は <a href="http://qiita.com/advent-calendar/2015/pepabo">Pepabo Advent Calendar 2015 - Qiita</a> の15日目の記事です。前回は... buty4649さん...!</p>
<p>今回はちょっと息抜き記事として、<br/>
エンジニアも朝活を利用して適度に体を動かす習慣を作ってみるのはいかがでしょうか?<br/>
ということを私個人がやっていることを紹介ながら書いてみようと思います。</p>
<p>日付が変わってしまいましたが、<br>
この記事は <a href="http://qiita.com/advent-calendar/2015/pepabo">Pepabo Advent Calendar 2015 - Qiita</a> の15日目の記事です。前回は... buty4649さん...!</p>
<p>今回はちょっと息抜き記事として、<br>
エンジニアも朝活を利用して適度に体を動かす習慣を作ってみるのはいかがでしょうか?<br>
ということを私個人がやっていることを紹介ながら書いてみようと思います。</p>
<h1>やってること</h1>
<p>ペパボに入ってからずーっと、<br>
毎朝会社近くのスポーツジムに寄ってから出社しています。なんやかんやで1年3ヶ月ほどでしょうか。</p>
<h1>なんでそんなことしてるの?</h1>
<h3>もともとスポーツジムには行ってた</h3>
<p>私はいわゆるWeb系のインフラエンジニアとして働いていますが<br>
時間外のエスカレーションは一番受けやすく、オンプレ環境があるとデータセンター作業があったりと実は結構体力勝負なところも多いです。</p>
<p>基本的にはいつでも対応できるコンディションを整えておきたいと思っていて、<br>
そのためにはある程度の体力付けておきたいなということから前職にいた時から当時の自宅近くのジムに通っていました。</p>
<h3>なんで朝?</h3>
<p>結構Web系の会社は業務開始が遅めのことが多く、ペパボも例外ではなく東京本社はAM10:00が始業時間。
そのため就業後だと20時開始とかになり、定時でもジムが終わるのが22~23時とかなってしまって個人的にはなかなかしんどいです。
特にペパボに入社した段階では住んでいる場所も変わっていて、就業後に自宅近くで... となると更に厳しい感じでした。</p>
<p>他にも就業後の時間だと勉強会や飲み会などのイベントも入りやすい時間で、リズムが崩れたりすることも多く、<br>
なんとかうまくやりくりできないかと考えて気がついたのが朝、就業前の時間でした。</p>
<p>定時が遅いということは逆に言えば朝の時間に余裕があります。
調べてみると朝早い時間帯でもやっているジムは結構あって<br>
時間を絞ったモーニングコースとかで会員登録するとなかなかお得だったりもします。</p>
<p>ということで職場に近いところで見つけて通い始めたのでした。</p>
<h1>やってみてどうなの?</h1>
<p>マイナス面はなさそうだし、今の自分のライフスタイルにあっていると思っていて、<br>
今だと朝体動かさないと気持ち悪いくらいにはなってます。
また、仕事前にバテるということも思いの外ほとんどないです。</p>
<p>もちろんジムでやることはできる範囲にはしていて、<br>
基本は30分程度のランニングがベースでキツ目の筋トレとかは毎回やっているわけではないです。</p>
<p>他にも単純に体を動かす以外にのいいこともあります。</p>
<h3>一日を始める敷居が下がっている</h3>
<p>朝起きたら「ジム行って体動かす」とだけ思って鞄片手に家を出ればいいので、余計なことを考えずに済んで気が楽です。<br>
特にスポーツジムの場合はシャワーなど水回りもちゃんとしてるので、「朝の準備もそっちですりゃいいやー」となるのも大きいです。</p>
<p>また会社のそばのジムにしたので、仕事前にシャワーが浴びれてリフレッシュして仕事に入れます。
特に夏場の通勤時にかいた汗も一緒に流せるのはうれしいですね。</p>
<h3>朝の時間を有効に使おうと思うようになった</h3>
<p>前述している様に確かに一日を始める敷居を下げていると感じつつも、<br>
やっぱりどうしても行けないケース(出張、ジムがお休みなど)があります。</p>
<p>それでも、いつも朝仕事をする間に時間をとることが習慣になるので<br>
副作用的にジムに本来行っている時間を別の事にもスッと当てられるようになりました、</p>
<p>たとえば</p>
<ul>
<li>早めに出社して集中して作業する時間を作る</li>
<li>役所に寄って手続きを済ませてから出社する</li>
</ul>
<p>みたいな感じに。</p>
<h1>まとめ</h1>
<p>そんなわけで朝活の活用例として、スポーツジム通いで体力を強化をしてみるもいかがでしょうか。<br>
朝が苦手でない。が前提条件にはなってしまいますが定期的に体を動かしてリフレッシュもできますし、オススメです。</p>ペパボっぽい Libreoffice Impress のテーマっぽい何か2015-10-25T15:40:00+09:002015-10-25T15:40:00+09:00Kei Iwasakitag:memo.laughk.org,2015-10-25:/articles/2015-10-25-pepabo-libreoffice-impress-theme/<h2>tl;dr</h2>
<ul>
<li>ペパボっぽい Libreoffice Impress のテーマっぽいものを勢いで作って公開してみた話</li>
</ul>
<h2>tl;dr</h2>
<ul>
<li>ペパボっぽい Libreoffice Impress のテーマっぽいものを勢いで作って公開してみた話</li>
</ul>
<hr>
<p>最近自分もちょくちょくスライドを書く機会が出てきて、<br>
社内関連のものとかは <a href="https://twitter.com/kenchan">@kenchan</a> くんさんの <a href="https://github.com/kenchan/keynote-theme">ペパボっぽいkeynoteテーマ</a> をよく使わせていただいていた。</p>
<p>ただ自分がプライベートでメインで使ってる環境が ArchLinux で、<br>
先日の PyConJP 2015 のLTの時なんかのように外部の資料を作るときにわざわざサブのMacの環境使うのもなーと思い始めていたので Libreoffice impress 用にそれっぽいものを勝手に作って公開してみた。</p>
<p><a href="https://github.com/laughk/libreoffice-impress-theme">laughk/libreoffice-impress-theme</a></p>
<ul>
<li>フォントは英字がArialで、日本語がM+フォントを使うことが前提。</li>
<li>Linux版 Libreoffice 4.4, 5.0 でのみ表示を確認済。</li>
</ul>
<p>Libreoffice impress が keynote みたいにスライドを追加するときに複数の候補からスライドのスタイルを追加するみたいなことができなくて、「とりあえずそれっぽい形のスタイルのスライドを実際に追加しといたので適宜コピーするなり消すなりして使ってね」というしょぼい作りにはなってしまったけど、まあ個人的な要件は満たせそうなので良しとする。</p>
<p>Libreoffice impress、もう少しテンプレート作りやすくなって公開されるテーマ増えないかなー。</p>PyConJP 2015 で 「3分でサーバオペレーションコマンドを作る技術」というタイトルでLTしてきた #pyconjp2015-10-20T00:00:00+09:002015-10-20T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2015-10-20:/articles/2015-10-20-pyconjp2015-lt-report/<p>大分遅れましたが、自分用の記録としてまとめときます。</p>
<p><img alt="2015-10-14 09 02 12" src="/images/2015/10/2c67a9e2-75e7-11e5-8cb5-128a3542e9a4.jpg"/></p>
<h2>tl;dr</h2>
<ul>
<li>PyConJP 2015 でLTしてきたという話</li>
<li>大規模なカンファレンスで発表するの、メリットしか無いしみんなまず手を上げてみればいいんじゃないかなと思った話</li>
</ul>
<p><em>PyConJP 2015 に参加した際の全体的なメモに関してはこちらをご参照ください <a href="/2015/10/18/pyconjp2015-report.html">PyConJP 2015 に行ってきた #pyconjp</a></em></p>
<p>大分遅れましたが、自分用の記録としてまとめときます。</p>
<p><img alt="2015-10-14 09 02 12" src="/images/2015/10/2c67a9e2-75e7-11e5-8cb5-128a3542e9a4.jpg"></p>
<h2>tl;dr</h2>
<ul>
<li>PyConJP 2015 でLTしてきたという話</li>
<li>大規模なカンファレンスで発表するの、メリットしか無いしみんなまず手を上げてみればいいんじゃないかなと思った話</li>
</ul>
<p><em>PyConJP 2015 に参加した際の全体的なメモに関してはこちらをご参照ください <a href="/2015/10/18/pyconjp2015-report.html">PyConJP 2015 に行ってきた #pyconjp</a></em></p>
<h2>どんなLTしたの?</h2>
<p>こんなLTです</p>
<ul>
<li>PyConJP2015 公式の案内 <a href="https://pycon.jp/2015/ja/schedule/presentation/93/">プレゼンテーション:3分でサーバオペレーションコマンドを作る技術 | PyCon JP 2015 in TOKYO</a></li>
<li>Togetter <a href="http://togetter.com/li/885072">「3分でコマンド」「PyCon Canada」「チャット通知ライブラリ」「pandas」「Dask」LT そして初日のクロージング #PyConJP_C #pyconjp - Togetterまとめ</a></li>
</ul>
<p>当日使ったスライドはこちら</p>
<iframe src="https://www.slideshare.net/slideshow/embed_code/key/CGmYFzkoDWcFHn" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe>
<div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/laughk/3-53764813" title="3分でサーバオペレーションコマンドを作る技術" target="_blank">3分でサーバオペレーションコマンドを作る技術</a> </strong> from <strong><a href="//www.slideshare.net/laughk" target="_blank">Kei Iwasaki</a></strong> </div>
<p>このLTで伝えたかったこと、持って帰っていただけるといいなと思ったのは</p>
<ul>
<li>fabricっていう、SSH経由のオペレーションをいい感じにしてくれるツールがあるよ</li>
<li>fabricを知っている人はデプロイツールのイメージが強いかも知れないけど、ライブラリとして使ってもいい感じだよ</li>
<li>コマンドラインツールを作るときはClick使うと便利だったんでみんな使えばいいよ</li>
<li><strong>今日紹介した内容なら、そこまでpython詳しくなくても始められるよ</strong></li>
<li><strong>普段コードを書かないWeb系インフラエンジニアと呼ばれるサーバ管理者/オペレータの人でも手軽に始められるよ。</strong></li>
</ul>
<p>といったものです。 </p>
<p>実はLT募集の前に <a href="https://pycon.jp/2015/ja/proposals/vote/42/">10年続くWebサービスでも使えるOpsのためのfabric入門</a> というタイトルでTalkプロポーザルの応募をしていて、<br>
実際に業務の隙間時間や<a href="http://pyhack.connpass.com/">#pyhack</a>に参加した際にコマンドラインツールを作成して、一部実際に業務で利用する環境に導入し始めている話までできればよかったのですがこちらはリジェクトという結果になりました。
それでも多少なりともWeb系のシステム運用側から何か話ができないかなという思いでLTで出来る限りの内容でお話させていただいた次第です。<S>(結果3分とタイトルに入れておきながら5分で話せる情報量の限界にトライする形になってしまった。)</S></p>
<p>そのため、前提にあったレガシー環境(主にCentOS4以下がまだ結構な数で現役<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup>)だらけでansibleが使えなかった話や、脆弱性対応で fabric を使ってみてチーム無いから「便利だけどワンライナーでもっと使いやすければすごく便利そう」といった反応を受けて実際にLTで紹介した内容を元に実際に作成したサービスに特化したWebオペレーションコマンドラインツールのお話なんかは飛んでしまった部分はあります。</p>
<h2>PyConJPでLTをやってみて思ったこと</h2>
<ul>
<li>緊張はかなりするし、資料を用意するのはパワーが必要ではある。</li>
<li>PyConJPの場合は登壇者は自然に撮影してもらえる <S><strong>Facebookとかにドヤ顔で挙げれる素晴らしい写真が手にはいる</strong></S></li>
<li>会場に居る時に自分は何をやっている人なのか?の説明がぐっとやりやすくなる。</li>
<li>Partyなどで登壇した時のネタを元に話ができる。</li>
</ul>
<p>など、登壇してみて思うのは基本的に <strong>メリットしか無いです</strong>。<br>
特に私の場合、今回技術的にそこまでテクニカルな内容でも無ければ、機械学習などのとりわけpython界隈の今アツい分野の話でもありません。<strong>普段Pythonやっててこんなのがよかったんですでど、どうでしょう?</strong> といった感じでした。 </p>
<p>それでも大人数の人の前で発表する機会も得られたし、<br>
なにより各種SNS、Twitter、そしてPartyなど会場で直接様々なフィードバックが得られます。</p>
<p>「fabric 知らなかった」「Click便利」「もっと詳しく聞きたかった」「便利なコマンド作りたい」
と思ったなどフィードバックいただけて本当にLT応募してみてよかったと思うし、何か些細なネタでもとりあえずみんな手を上げてみればいいよと思いました。</p>
<p>すでに気が早いですが、来年はTalkプロポーザルでなにかお話ができればいいなと「次に向けてやるぞ!!」と思えました。</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p>現在絶賛リプレース中です <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>PyConJP 2015 に行ってきた #pyconjp2015-10-18T09:10:00+09:002015-10-18T09:10:00+09:00Kei Iwasakitag:memo.laughk.org,2015-10-18:/articles/2015-10-18-pyconjp2015-report/<p>少し遅れちゃいましたが、先週末に行われた <a href="https://pycon.jp/2015/ja/">PyConJP 2015</a> のカンファレンスに参加したのでその時のメモ書きをまとめます。<br/>
1日目のLTで「<a href="https://pycon.jp/2015/ja/schedule/presentation/93/">3分でサーバオペレーションコマンドを作る技術</a>」というタイトルで登壇させていただいたのですが、そちらはまた別途まとめます。</p>
<p><strong>2015-10-20 追記</strong> LTのまとめ書きました<br/>
* <a href="http://memo.laughk.org/2015/10/20/pyconjp2015-lt-report.html">PyConJP 2015 で 「3分でサーバオペレーションコマンドを作る技術」というタイトルでLTしてきた #pyconjp</a></p>
<p><img alt="image" src="/images/2015/10/c4858f3a-75b7-11e5-9638-779c754c2825.jpg"/></p>
<p>少し遅れちゃいましたが、先週末に行われた <a href="https://pycon.jp/2015/ja/">PyConJP 2015</a> のカンファレンスに参加したのでその時のメモ書きをまとめます。<br>
1日目のLTで「<a href="https://pycon.jp/2015/ja/schedule/presentation/93/">3分でサーバオペレーションコマンドを作る技術</a>」というタイトルで登壇させていただいたのですが、そちらはまた別途まとめます。</p>
<p><strong>2015-10-20 追記</strong> LTのまとめ書きました<br>
* <a href="http://memo.laughk.org/2015/10/20/pyconjp2015-lt-report.html">PyConJP 2015 で 「3分でサーバオペレーションコマンドを作る技術」というタイトルでLTしてきた #pyconjp</a></p>
<p><img alt="image" src="/images/2015/10/c4858f3a-75b7-11e5-9638-779c754c2825.jpg"></p>
<h2>すでにあるまとめとか</h2>
<p>当日の様子は下記のリンク先にまとめられているのでそちらを見るのが良いと思います。</p>
<ul>
<li><a href="http://togetter.com/li/885210">【スライド・動画・実況全部入り】PyCon JP 2015 まとめまとめ #PyConJP - Togetterまとめ</a></li>
<li><a href="https://techstars.jp/blog/pycon15-1/">もう確認した?PyCon JP 2015、公開済み全スライドまとめ #pyconjp</a></li>
</ul>
<h2>カンファレンス 1日目</h2>
<p>午前中は基調講演(内容は <a href="http://ox.cx/b">ox.cx/b</a> )から <a href="https://pycon.jp/2015/ja/schedule/presentation/47/">強くなるためのプログラミング ープログラミングに関する様々なコンテストとそのはじめ方ー</a> を聞いてという流れ。<br>
基調講演はホスティングのインフラに絡む話で個人的に「おお!PyConでインフラ絡みの話も聞けるとは!」という印象。<br>
その中でもメトリクスを監視について平均値だけ見てると情報が流れてくので微分して瞬間的な傾向も追っかけてるという話が興味深かった。<br>
あと地味にここで <strong>uWSGIのuってμのことだったのか!</strong> と地味に初めて知った...</p>
<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">メトリクスに数学的なアプローチ確かにできれば便利そうだよね。普段Muninやらmackerelやら見てるが、そう言えばあまり意識してないなー <a href="https://twitter.com/hashtag/pyconjp?src=hash">#pyconjp</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/652653625747992577">2015, 10月 10</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p><a href="https://pycon.jp/2015/ja/schedule/presentation/47/">強くなるためのプログラミング ープログラミングに関する様々なコンテストとそのはじめ方ー</a> では分野別のコンテストに関する情報が満載で、 「興味が湧いた分野でとりあえずなんかやってみたい」もそうだし「なんかコード書きたいんだけど何すりゃいいのかよくわからん」という人も<a href="http://www.slideshare.net/cocodrips/pyconjp">くーむさんの資料</a>見れば強くなるきっかけが掴めそうだと思ったし自分もなんか新境地広げたい時にもっかい見ておこうと思った。</p>
<p>そんな感じで午前中は過ごしお昼の時間に、<a href="http://plone.jp/plone-symposium-tokyo-2015">Ploneシンポジウム</a>でもランチがかなり美味しくて期待していたけど案の定期待通り、美味しかった。</p>
<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">ランチ。ガパオご飯とグリーンカレー <a href="https://twitter.com/hashtag/pyconjp?src=hash">#pyconjp</a> <a href="http://t.co/gHGJ521fxx">pic.twitter.com/gHGJ521fxx</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/652683232207499264">2015, 10月 10</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>ただこの時はLTに登壇する際のイメージがまだ掴みきれてなかったりとかして、
サッとランチを食べてイメージ固めてる最中に <a href="https://twitter.com/wolf20xx">@wolf20xx</a> さんに声かけて頂いて大分緊張が和らいだ。その節は本当にありがとうございました。 </p>
<p>またお昼に<a href="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4774177075">Python ライブラリ厳選レシピ</a>の先行発売が行われていて、価格も少しお得になっていたのでAmazonで予約していたがその場で購入。著者の皆様からサインも頂いてホクホクだった</p>
<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">:memo: amazonで予約してたのキャンセルしておく。(先行発売のものゲット) <a href="https://twitter.com/hashtag/pyconjp?src=hash">#pyconjp</a> <a href="http://t.co/20vbq7o7eo">pic.twitter.com/20vbq7o7eo</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/652734194355859456">2015, 10月 10</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>午後は<a href="https://pycon.jp/2015/ja/schedule/presentation/53/">オープンデータプラットフォームを作る話</a>と<a href="https://pycon.jp/2015/ja/schedule/presentation/51/">Tornado/ElasticSearchで実現する大量ツイートのリアルタイム関連文書判定</a>の話を聞いて適当にオープンスペースでだべりつつそのままコーヒーブレイクへ。気がついたら近くに <a href="https://twitter.com/kitak">@kitak</a> がいてビビったのを覚えてる。</p>
<p>その後は<a href="tse - Pythonによるテキスト整形ユーティリティ">tseというsedやawkのような処理をpythonでできるツールのお話</a>と<a href="https://twitter.com/aodag">@aodag</a>さんの<a href="https://pycon.jp/2015/ja/schedule/presentation/46/">Packaging最前線</a>を聞いていた。特にPackaging最前線の話は、最近妙にpipのアップデートが多いなと思っていたのでそのあたりのまとまった話が聞けてよかった。</p>
<p>そしてその後はカンファレンスホールでLT開始。<br>
実は前日までどのタイミングで自分がやるかわかっていなかったけど、なんと一番最初でした。<br>
ただ変に後回しにされるよりも「俺がトップバッターだ!!!」と開き直れたので結果的に良かったです。<br>
そのへんは冒頭にも書いたようにまた別エントリとして書きます。</p>
<p>LT後はすっかり腑抜けになってしまってしばらく記憶が曖昧になってしまってましたが、<br>
一気に安心したことは覚えています。その後のパーティーでは料理、ビールが美味かったりいくつかLTのフィードバックをいただけたりで非常に良かったです。</p>
<h2>カンファレンス 2日目</h2>
<p>この日も午前中から参加
基調講演からそのまま同じ場所に残ってJob Fairを聞いていた。</p>
<p>基調講演はBeProudの佐藤治夫さん。<br>
BeProudという会社/組織をどうやって作ってきたかという話だった。<br>
全体通して非常に良い話だったのだけど個人的に「感動すると創造的になれる」という下りのところが一番響いて、python限らず働いているうちは忘れずに大切にしたいなと思った。</p>
<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">「感動すると創造的になれる」 いい話。感動し続けたい。 <a href="https://twitter.com/hashtag/pyconjp?src=hash">#pyconjp</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/653021669766774784">2015, 10月 11</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Job Fair に関しても、最初は転職が絡んだ話かな?と思っていたけどパネルディスカッションが聞いていておもしろかった。
特に「入口をもっとつくらないといけない。日本の何処かにいる「アイデアだけ持っている人」が検索した時に出てくるのはだいたい Rails というのが現状。」とう下りからのぐぐったらパイを増やすことの重要さ、志の低い人がいないと志の高い人が出てこないという話はなるほどな。と思ったし、自分が隙なことに関してアウトプットしていく大切さを実感した。</p>
<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">「志の低い人が居ないと志の高い人が生まれてこない。」 <a href="https://twitter.com/hashtag/PyConJP_C?src=hash">#PyConJP_C</a> <a href="https://twitter.com/hashtag/pyconjp?src=hash">#pyconjp</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/653040423221399552">2015, 10月 11</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">ググった時のパイを増やすの確かに大事。アウトプットちゃんと増やさないとな... <a href="https://twitter.com/hashtag/pyconjp?src=hash">#pyconjp</a> <a href="https://twitter.com/hashtag/PyConJP_C?src=hash">#PyConJP_C</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/653042388579909633">2015, 10月 11</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>ランチは2日目も基本的に前日同様4種類から選択できてよかったし美味かった。</p>
<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">今日も旨そう! <a href="https://twitter.com/hashtag/pyconjp?src=hash">#pyconjp</a> <a href="http://t.co/RmSDMYoWME">pic.twitter.com/RmSDMYoWME</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/653055208893714432">2015, 10月 11</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<hr>
<p>午後からは <a href="https://pycon.jp/2015/ja/schedule/presentation/70/">uWSGI/Dockerを利用したWebサービス運用事例</a>、 <a href="https://pycon.jp/2015/ja/schedule/presentation/67/">野球Hack!~Pythonを用いたデータ分析と可視化</a>、
<a href="https://pycon.jp/2015/ja/schedule/presentation/71/">PyPIデビュー 2015</a>の話を聞いた。</p>
<p>uWSGI/Docker の話はなかなかuWSGIで運用しているという話を聞いたことがなかったので新鮮だった。<a href="http://laugh-labo.blogspot.jp/2012/08/pythondjango-nginx-uwsgi-on-ubuntu.html">昔Tracを動かしたとき</a>にちょこっと触っただけだったので、今後PythonでWeb絡みの何かやる際は触ってみようかなと思った。 </p>
<p><a href="https://twitter.com/shinyorke">@shinyorke</a>さんの野球Hack!は <a href="http://pyhack.connpass.com/">#pyhack</a>で度々見ていた野球Hack!のPyCon版を是非見たくて行ってみたけど、<strong>好きなことを好きな技術でやっているロールモデルとして非常によかった。</strong>自分は野球がそれほど好きとかではないのだけど非常に楽しめた。 </p>
<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">野球hack、俺は特別野球好きとかではないけど純粋に好きなことを技術で楽しんでる感があってすごく良かったし来年も聞きたい。 <a href="https://twitter.com/hashtag/pyconjp?src=hash">#pyconjp</a> <a href="https://twitter.com/hashtag/PyConJP_1?src=hash">#PyConJP_1</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/653105825783746560">2015, 10月 11</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>最後は<a href="https://pycon.jp/2015/ja/schedule/presentation/71/">PyPIデビュー2015</a>。前日のPackaging最前線では全体的なトレンドの話だったけど、こちらは今現在の段階で具体的に何を使ってパッケージを作るのが良いか。という視点のお話。<a href="http://memo.laughk.org/2015/06/07/kite-string-release.html">最近自分がPyPIに初めてパッケージをアップロードした際</a>は、ググッても出てくる情報の書かれた時期で内容がバラバラで手探りでどうにかするしかなかったのが正直なところだったこともあり、2015年時点での情報はこれだ!というこの話は非常に良かった。 <a href="https://tiwtter.com/tell_k">@tell_k</a>さんの当日のスライドは保存版だと思う。 ( スライド -> <a href="http://tell-k.github.io/pyconjp2015/">PyPIデビュー2015</a> )</p>
<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">PyPIデビュー2015, setup.py の書き方とかその辺、ググると古い情報とごちゃ混ぜな感じだったのでこういうまとまった知見非常にありがたかった。 <a href="https://twitter.com/hashtag/pyconjp?src=hash">#pyconjp</a> <a href="https://twitter.com/hashtag/PyConJP_C?src=hash">#PyConJP_C</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/653115480832524288">2015, 10月 11</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>最後はLTからクロージング
LTは自分の番がすでに終わっていたので大分リラックスして聞けた。特に印象に残ったのが<a href="https://pycon.jp/2015/ja/schedule/presentation/91/">Diversity in Brazil</a>で、ブラジルでのPythonコミュニティの話(Ruby+Python = RuPy の話や PyLedies の規模だったり) やウミガメの甲羅を3Dプリンタで作ってった話など、自分の知らない視点からの話で面白かった。英語力がもっとあればな...</p>
<p>最後のクロージングでは抽選も行われ、すっかりPyConJP 2015のアイドルと化していたモノタロウ侍とのじゃんけん大会。<br>
なかなか勝てなかったけど、最後の方でなんと <a href="https://www.jetbrains.com/pycharm/whatsnew/">PyCharm</a> のProライセンスを頂いた。結構いい値段するものなので、いいものをいただけた。</p>
<h2>全体を通した感想</h2>
<ul>
<li><a href="https://twitter.com/monotarosamurai">モノタロウ侍</a>かわいい</li>
<li>
<p>電源確保がなかなか厳しい</p>
<p>これはPyConJPに限らずだけど、この規模のカンファレンスだと会場の場所も限られるだろうし必ずしも電源が豊富に用意できるわけではないだろうから
Twitter見ながらメモとったりするんだとラップトップよりモバイルバッテリーが使えるスマホ+タブレットをもっと積極的に使ったほうがいいのかも。とは思った</p>
<p>Android だと検索結果をタブに追加できる<a href="http://beeter.io/">beeter</a>が個人的に使いやすかった。モバイルでも同等の機能持ってるTwitterクライアント使うとラップトップなしでも案外大丈夫そうだなという手応えがあった</p>
</li>
<li>
<p>一部でWifiが切れるとい情報が流れていけど、個人的にそこまでひどいなーという状況には出くわさなかった</p>
</li>
<li>ElasticSearch の話題が多かったなと感じた。ここ最近のPythonでアツいところの機械学習やデータ解析とも絡んでるんだろうなと思った</li>
<li>
<p>英語、国際カンファレンス感</p>
<ul>
<li>海外からの方も多数居てものすごく国際カンファレンス感があってよかった</li>
<li>英語力がホントに足りない。今年、来年くらいにかけて段階的にマジで英語勉強しようと思った。もっともっと楽しめるように</li>
</ul>
</li>
<li>
<p>食べ物周りが全体的によい</p>
<ul>
<li>ランチは人数分あってしかも4種類のなかから選べるのがよかった。近くにスッとご飯食べに行けそうな場所もなさそうでこれ大事</li>
<li>ランチやパーティーのご飯おいしい、ビールがプレモルなの非常によかった</li>
</ul>
</li>
<li>
<p>最後のじゃんけんで <a href="https://www.jetbrains.com/pycharm/whatsnew/">PyCharm</a> のProライセンスもらったしもっとpython書けというお告げだと思って頑張ろう (<S>内容の通知はまだ、気長にお待ちしてます。</S>ライセンス情報いただきました!ありがとうございます!)</p>
<p><blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">じゃんけんで PyCharmPro ライセンスもらったからもっとpython書かないと <a href="https://twitter.com/hashtag/pyconjp?src=hash">#pyconjp</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/653132298137681921">2015, 10月 11</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
</li>
</ul>kite-string(凧糸)というtakosanクライアントを公開してPyPIデビューしていた2015-06-07T00:00:00+09:002015-06-07T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2015-06-07:/articles/2015-06-07-kite-string-release/<h2>TL;DR</h2>
<ul>
<li><a href="https://github.com/kentaro/takosan">takosan</a> 向けの簡単なコマンドラインクライアントをpythonで書いてみた</li>
<li>ついでに PyPI デビューもできてよかった</li>
</ul>
<h2>TL;DR</h2>
<ul>
<li><a href="https://github.com/kentaro/takosan">takosan</a> 向けの簡単なコマンドラインクライアントをpythonで書いてみた</li>
<li>ついでに PyPI デビューもできてよかった</li>
</ul>
<hr>
<p>会社のチャットツールがSlackになってからは通知面ですっかりお馴染みになったSlack版ikachanの<a href="https://github.com/kentaro/takosan">takosan</a>。<br>
特に最近では <a href="https://github.com/kentaro/takosan/pull/5">dojinekoさんの素晴らしいPR</a>が取り込まれてHTTPリクエストだけでかなりいい感じの通知ができるようになりました。</p>
<p>ただパラメタが増えて今まで通りコマンドラインで <code>curl</code> で色々やるときに結構面倒になってきたので、同じようなノリで使える雑なCLI wrapperをpythonで作ってみました。</p>
<ul>
<li><a href="https://github.com/laughk/kite-string">laughk/kite-string</a></li>
<li>PyPI: <a href="https://pypi.python.org/pypi/kite-string">https://pypi.python.org/pypi/kite-string</a></li>
</ul>
<h3>使い方とかInstall方法とか</h3>
<p>PyPIに公開していますので以下のとおりでインストールできます。<br>
あまり細かく動作確認はできていませんが、python2.6以降(3系も含む)なら動きます。
(python環境は必要に応じて <code>virtualenv</code> なりと組み合わせてください)</p>
<div class="highlight"><pre><span></span><code>$ pip install kite-string
</code></pre></div>
<h3>できること</h3>
<ul>
<li><a href="https://github.com/kentaro/takosan/pull/5">dojinekoさんのPR</a>のサンプル内にある key にそのまま対応するオプションを用意してます。( ただし field 周りはまだ実装できてないので未対応です。)</li>
<li><code>--channel</code> オプションを複数指定すれば複数チャンネルに同時にポストすることも出来ます。</li>
</ul>
<h4>使用例</h4>
<div class="highlight"><pre><span></span><code>$ kite <span class="se">\</span>
> --channel<span class="o">=</span><span class="s2">"@laughk"</span> <span class="se">\</span>
> --message<span class="o">=</span><span class="s2">"*Hello* \`shachikun\`"</span> <span class="se">\</span>
> --icon<span class="o">=</span><span class="s2">":ocra:"</span> <span class="se">\</span>
> --name<span class="o">=</span><span class="s2">"shachikun"</span> <span class="se">\</span>
> --color<span class="o">=</span><span class="s2">"#3498db"</span> <span class="se">\</span>
> --pretext<span class="o">=</span><span class="s2">"Tell you about slack :ocean:"</span> <span class="se">\</span>
> --author-name<span class="o">=</span><span class="s2">"Slack"</span> <span class="se">\</span>
> --author-icon<span class="o">=</span><span class="s2">"https://slack.global.ssl.fastly.net/272a/img/icons/favicon-32.png"</span> <span class="se">\</span>
> --author-link<span class="o">=</span><span class="s2">"https://slack.com/"</span> <span class="se">\</span>
> --title<span class="o">=</span><span class="s2">"Slack (software)"</span> <span class="se">\</span>
> --title-link<span class="o">=</span><span class="s2">"http://ja.wikipedia.org/wiki/Slack_(software)"</span> <span class="se">\</span>
> --text<span class="o">=</span><span class="s2">"Slack is a team communication tool co-founded by Stewart Butterfield, Eric Costello, Cal Henderson, and Serguei Mourachov. Slack began as an internal tool used by their company Tiny Speck in the development of Glitch, the defunct online game. Slack was launched in August, 2013, and signed up 8000 customers within 24 hours of launch."</span> <span class="se">\</span>
> --image-url<span class="o">=</span><span class="s2">"https://slack.global.ssl.fastly.net/558b/img/slack_logo.png"</span> <span class="se">\</span>
> http://takosan.example.com:4979
</code></pre></div>
<p><img alt="image" src="/images/2015/06/70f30678-038d-11e5-829f-05f898c4e4f2.png"></p>
<h4>補完</h4>
<p>bashは<a href="http://click.pocoo.org/4/bashcomplete/">clickの補完生成</a>で、zshは<a href="https://pypi.python.org/pypi/genzshcomp/0.5.2">genzshcomp</a>で生成して completion も用意してみました。</p>
<p><a href="https://github.com/laughk/kite-string/tree/master/data">https://github.com/laughk/kite-string/tree/master/data</a></p>
<ul>
<li>
<p>bash</p>
<p><img alt="image" src="/images/2015/06/5d4522a0-038d-11e5-9ff6-8f7e46e5d63e.jpg"></p>
</li>
<li>
<p>zsh</p>
<p><img alt="image" src="/images/2015/06/640292da-038d-11e5-9f5c-ea691de49f89.jpg"></p>
</li>
</ul>
<hr>
<h3>ついでにPyPIデビューもできた</h3>
<p>この kite-string は元も「オレオレ便利ツールにして社内GH;E環境くらいにとどめとうこうかな」と思ってたのですが
よくよく考えると takosan そのものがオープンなツールなわけで別に公開しない理由もなさそうと思ったので、<code>setup.py</code> の書き方を調べてPyPIに登録するところまでやってみました。</p>
<p>そのあたりを調べるときにdistributeなど古い情報が多数引っかかってしまってなかなかほしい情報が出てこなかったのですが、<a href="https://github.com/fabric/fabric">fabric</a>など普段お世話になっているモジュールの<code>setup.py</code>の中身を読んでみたりすると非常に参考になりました。</p>
<p>またpythonプロフェッショナルプログラミング(第2版)にパッケージ作成の解説があり、そちらも非常に参考になりました。</p>
<iframe src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B00XZTYMG6&internal=1" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
<hr>
<p>kite-string 本当にシンプルにtakosanのURL向けにリクエストを投げることしかしない雑なツールではあるのだけど、
新卒の頃からずっと「コード書いて自分でツールを作って公開してみたい」と思い続けてきた目標がひょうんなことから達成することができました。</p>
<p>これまで頑張ってコード書いてみても公開したりするのが億劫でなかなか一歩踏み出せないところもあったけど、<br>
少なくともPyPIに登録することに対する抵抗は大分なくなったし、精神的にひとつの壁を越えられた感じがあってこれからは隙あらばどんどん自分で作ったコードを出していこうという気持ちになれたので kite-string は公開してみて本当に良かったと思います。</p>ブログのデプロイにWerckerを使って楽に投稿できる環境にした2015-04-05T18:47:00+09:002015-04-05T18:47:00+09:00Kei Iwasakitag:memo.laughk.org,2015-04-05:/articles/2015-04-05-blog-build-ci-by-wercker/<p>先週くらいに<a href="http://wercker.com/">wercker</a>を導入してこのブログのビルドを全自動にしたのでその時のメモ書き</p>
<p>先週くらいに<a href="http://wercker.com/">wercker</a>を導入してこのブログのビルドを全自動にしたのでその時のメモ書き</p>
<h2>これまで</h2>
<p>このブログはこれまでは新しくエントリを書くときに以下の様な感じでやってました。</p>
<ol>
<li>bitbucketのプライベートレポジトリでMarkdownかReSTで書かれた元のエントリを管理</li>
<li>新しくエントリを書いたら <a href="http://blog.getpelican.com/">pelican</a> でビルド</li>
<li><code>python -m http.server</code> とかでローカルで軽く表示の確認</li>
<li>githubpages のレポジトリにコミットして push</li>
</ol>
<h2>今</h2>
<p>CIができるサービスだと Travis CI や Circle CI をよく目にしますが<br>
今回は個人用途ということで、フリーでbitbucketのプライベートレポジトリまで使える wercker を導入しました。<br>
すると以下のとおり。</p>
<ol>
<li>ブログエントリとなる Markdown ファイルを bitbucket のレポジトリにコミットする</li>
</ol>
<p>以上。</p>
<p>後は wercker が自動でビルドしてくれて、<br>
特に問題なければそのまま githubpages のレポジトリにコミットして push してくれます。<br>
これまでエントリを書いた後が結構面倒だったのですがめっちゃ楽になりました。</p>
<p>イメージとしては以下のような感じ。
<code>git push</code> だけ自分でやれば後は wercker がよしなにやってくれます。</p>
<div class="highlight"><pre><span></span><code><span class="nb">+--------+</span><span class="c"> git push </span><span class="nb">+-----------+</span><span class="c"> webhook </span><span class="nb">+----------------+</span><span class="c"> deploy </span><span class="nb">+-------------+</span><span class="c"></span>
<span class="c">| laptop | </span><span class="nb">----------</span><span class="nv">></span><span class="c"> | bitbucket | </span><span class="nb">---------</span><span class="nv">></span><span class="c"> | wercker(build) | </span><span class="nb">--------</span><span class="nv">></span><span class="c"> | githubpages |</span>
<span class="nb">+--------+</span><span class="c"> </span><span class="nb">+-----------+</span><span class="c"> </span><span class="nb">+----------------+</span><span class="c"> </span><span class="nb">+-------------+</span><span class="c"></span>
</code></pre></div>
<h1>導入の流れのメモ</h1>
<h2>wercker の設定</h2>
<p>アカウントを登録してから <code>ADD APPLICATION</code> をしていく流れまでは情報が既に多数あるので割愛。<br>
(最初は wercker.yml ファイルに関して一旦そのままにして進んだほうが楽かも)</p>
<h3>Applications に登録ができたらデプロイターゲット情報を追加</h3>
<h4>自動デプロイの設定</h4>
<p><img alt="" src="/images/2015/04/blog-build-ci-by-wercker01.jpg"></p>
<ul>
<li><code>Deploy target name:</code> は管理しやすい任意の名前で登録</li>
<li><code>Auto deploy</code> にチェックを入れて、bitbacket管理のソースレポジトリでhookしたいブランチ名を指定。シンプルにmasterにした。</li>
</ul>
<h4>デプロイ先のgithubpagesレポジトリの情報を追加</h4>
<p><img alt="" src="/images/2015/04/blog-build-ci-by-wercker02.jpg"></p>
<ul>
<li><code>Deploy pipeline</code> に githubpages 用のレポジトリ情報を持たせておくと wercker.yml 側でpushに必要なtoken情報を持たせなくて良くなるので便利</li>
<li>github のレポジトリは <code>https://<API_TOKEN>@github.com/<USER>/<REPOSITORY>.git</code> と指定すればそのままpushできるので、気をつけながら使えばかなり便利</li>
<li>ただし、TOKENなどの外部に漏れちゃまずい情報はProtectedにチェックを入れるのを忘れずに</li>
</ul>
<h3>wercker.yml ファイルの準備</h3>
<p>2015-04-05現在は以下の様な感じで落ち着いています。<br>
<code>pip-install</code>, <code>virtualenv:</code> あたりの詳細はこちらを確認するのが確実。 <a href="https://github.com/wercker/step-pip-install">wercker/step-pip-install</a></p>
<div class="highlight"><pre><span></span><code><span class="n">box</span><span class="o">:</span><span class="w"> </span><span class="n">wercker</span><span class="o">/</span><span class="n">python</span><span class="w"></span>
<span class="n">build</span><span class="o">:</span><span class="w"></span>
<span class="w"> </span><span class="n">steps</span><span class="o">:</span><span class="w"></span>
<span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">virtualenv</span><span class="o">:</span><span class="w"></span>
<span class="w"> </span><span class="n">python_location</span><span class="o">:</span><span class="w"> </span><span class="sr">/usr/bin/</span><span class="n">python3</span><span class="o">.</span><span class="mi">4</span><span class="w"></span>
<span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">pip</span><span class="o">-</span><span class="n">install</span><span class="w"></span>
<span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">script</span><span class="o">:</span><span class="w"></span>
<span class="w"> </span><span class="n">name</span><span class="o">:</span><span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="n">python</span><span class="w"> </span><span class="n">informatoin</span><span class="w"></span>
<span class="w"> </span><span class="n">code</span><span class="o">:</span><span class="w"> </span><span class="o">|</span><span class="w"></span>
<span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="s2">"python version $(python -V) running"</span><span class="w"></span>
<span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="s2">"from location $(which python)"</span><span class="w"></span>
<span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="s2">"pip freeze: $(pip freeze)"</span><span class="w"></span>
<span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">script</span><span class="o">:</span><span class="w"></span>
<span class="w"> </span><span class="n">name</span><span class="o">:</span><span class="w"> </span><span class="n">update</span><span class="w"> </span><span class="n">pelican</span><span class="o">-</span><span class="n">plugins</span><span class="w"></span>
<span class="w"> </span><span class="n">code</span><span class="o">:</span><span class="w"> </span><span class="o">|-</span><span class="w"></span>
<span class="w"> </span><span class="n">cd</span><span class="w"> </span><span class="n">pelican</span><span class="o">-</span><span class="n">plugins</span><span class="w"></span>
<span class="w"> </span><span class="n">git</span><span class="w"> </span><span class="n">submodule</span><span class="w"> </span><span class="n">update</span><span class="w"> </span><span class="o">--</span><span class="n">init</span><span class="w"></span>
<span class="w"> </span><span class="n">cd</span><span class="w"> </span><span class="o">..</span><span class="w"></span>
<span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">script</span><span class="o">:</span><span class="w"></span>
<span class="w"> </span><span class="n">name</span><span class="o">:</span><span class="w"> </span><span class="n">build</span><span class="w"> </span><span class="n">blog</span><span class="w"> </span><span class="n">by</span><span class="w"> </span><span class="n">Pelican</span><span class="w"></span>
<span class="w"> </span><span class="n">code</span><span class="o">:</span><span class="w"> </span><span class="n">make</span><span class="w"> </span><span class="n">html</span><span class="w"> </span><span class="n">publish</span><span class="w"></span>
<span class="n">deploy</span><span class="o">:</span><span class="w"></span>
<span class="w"> </span><span class="n">steps</span><span class="o">:</span><span class="w"></span>
<span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">virtualenv</span><span class="o">:</span><span class="w"></span>
<span class="w"> </span><span class="n">python_location</span><span class="o">:</span><span class="w"> </span><span class="sr">/usr/bin/</span><span class="n">python3</span><span class="o">.</span><span class="mi">4</span><span class="w"></span>
<span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">pip</span><span class="o">-</span><span class="n">install</span><span class="o">:</span><span class="w"></span>
<span class="w"> </span><span class="n">requirements_file</span><span class="o">:</span><span class="w"> </span><span class="s2">""</span><span class="w"></span>
<span class="w"> </span><span class="n">packages_list</span><span class="o">:</span><span class="w"> </span><span class="s2">"ghp-import"</span><span class="w"></span>
<span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">script</span><span class="o">:</span><span class="w"></span>
<span class="w"> </span><span class="n">name</span><span class="o">:</span><span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="n">python</span><span class="w"> </span><span class="n">informatoin</span><span class="w"></span>
<span class="w"> </span><span class="n">code</span><span class="o">:</span><span class="w"> </span><span class="o">|</span><span class="w"></span>
<span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="s2">"python version $(python -V) running"</span><span class="w"></span>
<span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="s2">"from location $(which python)"</span><span class="w"></span>
<span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="s2">"pip freeze: $(pip freeze)"</span><span class="w"></span>
<span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">script</span><span class="o">:</span><span class="w"></span>
<span class="w"> </span><span class="n">name</span><span class="o">:</span><span class="w"> </span><span class="n">Configute</span><span class="w"> </span><span class="n">git</span><span class="w"></span>
<span class="w"> </span><span class="n">code</span><span class="o">:</span><span class="w"> </span><span class="o">|-</span><span class="w"></span>
<span class="w"> </span><span class="n">git</span><span class="w"> </span><span class="n">config</span><span class="w"> </span><span class="o">--</span><span class="n">global</span><span class="w"> </span><span class="n">user</span><span class="o">.</span><span class="na">email</span><span class="w"> </span><span class="s2">"**********+wercker@gmail.com"</span><span class="w"></span>
<span class="w"> </span><span class="n">git</span><span class="w"> </span><span class="n">config</span><span class="w"> </span><span class="o">--</span><span class="n">global</span><span class="w"> </span><span class="n">user</span><span class="o">.</span><span class="na">name</span><span class="w"> </span><span class="s2">"Wercker"</span><span class="w"></span>
<span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">script</span><span class="o">:</span><span class="w"></span>
<span class="w"> </span><span class="n">name</span><span class="o">:</span><span class="w"> </span><span class="n">Setup</span><span class="w"> </span><span class="n">github</span><span class="w"> </span><span class="n">pages</span><span class="w"> </span><span class="n">repository</span><span class="w"></span>
<span class="w"> </span><span class="n">code</span><span class="o">:</span><span class="w"> </span><span class="o">|-</span><span class="w"></span>
<span class="w"> </span><span class="n">git</span><span class="w"> </span><span class="n">remote</span><span class="w"> </span><span class="n">add</span><span class="w"> </span><span class="n">ghp</span><span class="w"> </span><span class="n">$GHP_REPOSITORY</span><span class="w"></span>
<span class="w"> </span><span class="n">git</span><span class="w"> </span><span class="n">fetch</span><span class="w"> </span><span class="n">ghp</span><span class="w"></span>
<span class="w"> </span><span class="n">git</span><span class="w"> </span><span class="n">branch</span><span class="w"> </span><span class="n">gh</span><span class="o">-</span><span class="n">pages</span><span class="w"> </span><span class="n">ghp</span><span class="o">/</span><span class="n">master</span><span class="w"></span>
<span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">script</span><span class="o">:</span><span class="w"></span>
<span class="w"> </span><span class="n">name</span><span class="o">:</span><span class="w"> </span><span class="n">Deploy</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">github</span><span class="w"> </span><span class="n">pages</span><span class="w"></span>
<span class="w"> </span><span class="n">code</span><span class="o">:</span><span class="w"> </span><span class="o">|-</span><span class="w"></span>
<span class="w"> </span><span class="n">ghp</span><span class="o">-</span><span class="k">import</span><span class="w"> </span><span class="o">-</span><span class="n">b</span><span class="w"> </span><span class="n">gh</span><span class="o">-</span><span class="n">pages</span><span class="w"> </span><span class="o">-</span><span class="n">m</span><span class="w"> </span><span class="s2">"Update by wercker"</span><span class="w"> </span><span class="n">output</span><span class="o">/</span><span class="w"></span>
<span class="w"> </span><span class="n">git</span><span class="w"> </span><span class="n">push</span><span class="w"> </span><span class="n">ghp</span><span class="w"> </span><span class="n">gh</span><span class="o">-</span><span class="n">pages</span><span class="o">:</span><span class="n">master</span><span class="w"></span>
</code></pre></div>
<p>以下の点を意識した</p>
<ul>
<li>標準の box-python にも python3.4 はインストールされているので virtualenv で環境を作って使うように<br>
(参考: https://github.com/wercker/box-python )</li>
<li>pelican-plugins は submodule で管理するのでビルド前に <code>git submodule update --init</code> するのを忘れずに</li>
<li>デプロイの際はビルドの際に使うモジュールは破棄されるので <code>ghp-import</code> の改めてのインストールは忘れずに</li>
</ul>
<h2>設定は以上</h2>
<p>これだけやれば準備は完了。<br>
wercker.yml を作る際に最初だけは色々試行錯誤しますが、1度出来てしまえば
bitbucket レポジトリに純粋にブログエントリを書いた Markdown をコミットするだけでブログの更新が完了します。</p>
<hr>
<p>python 環境系の情報があまりな印象でしたがやってみたらそれほど苦労せずに出来ました。 </p>
<p>ここまで持ってくれれば自分で静的ページを生成してホスティングするやり方のブログでも<br>
Bitbucket の Web 画面から直接 Markdown ファイルを追加してブログ更新出来たりとかで、書いた後の煩わしさから開放されそうです。</p>
<p>はてなブログやらTumblrやらQiitaやら使えよって話かもしれませんが、<br>
やっぱり元のエントリはちゃんと自分でgit管理しておきたいし、CIを実際に触って便利感を実感できたのでよしとします。</p>tmux 内で SSH した時のロギングを自動でやる2014-12-09T00:00:00+09:002014-12-09T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2014-12-09:/articles/2014-12-09-tmux-ssh-logging/<p>この記事は <a href="http://qiita.com/advent-calendar/2014/pepabo">Pepabo AdventCalendar 2014</a> の9日目の記事です。<br/>
前日は<a href="http://blog.inouetakuya.info/entry/2014/12/08/214435">inouetakuya</a>さんでした!
明日は<a href="http://qiita.com/tnmt">tnmt</a>さんです!</p>
<p>今年まさかアドベントカレンダーに参加することになるとは思っていませんでしたが、<br/>
今朝社内IRCにてチーム内で反響があった tmux で作業をする際の tip を紹介したいと思います。</p>
<p>この記事は <a href="http://qiita.com/advent-calendar/2014/pepabo">Pepabo AdventCalendar 2014</a> の9日目の記事です。<br>
前日は<a href="http://blog.inouetakuya.info/entry/2014/12/08/214435">inouetakuya</a>さんでした!
明日は<a href="http://qiita.com/tnmt">tnmt</a>さんです!</p>
<p>今年まさかアドベントカレンダーに参加することになるとは思っていませんでしたが、<br>
今朝社内IRCにてチーム内で反響があった tmux で作業をする際の tip を紹介したいと思います。</p>
<hr>
<h2>今朝のチームのIRCの一幕</h2>
<p>私はいちいち手動で作業ログを取得するのが面倒なので普段から踏み台サーバの tmux で pip-pane を使ってほぼ自動的にやっているのですが、
今朝以下を zipper さんに発見されたのをきっかけにすこし盛り上がりました。</p>
<div class="highlight"><pre><span></span><code>laughk 11803 0.1 0.0 74852 1496 ? Ss 10:23 0:00 tmux -2
laughk 11804 0.1 0.0 65764 3200 pts/3 Ss+ 10:23 0:00 \_ -bash
laughk 11861 0.0 0.0 54660 2756 pts/9 Ss+ 10:23 0:00 \_ ssh db002.******************
laughk 11863 0.0 0.0 63824 1124 ? S 10:23 0:00 \_ sh -c cat >> /home/laughk/.tmuxlog/db002.****************/2014-12/09/102348.log
laughk 11864 0.0 0.0 58888 532 ? S 10:23 0:00 \_ cat
</code></pre></div>
<p>IRCログ</p>
<div class="highlight"><pre><span></span><code>10:26:21 zipper | 全然関係ないけど、いわっちさー作業ログってどうやって取ってるの?
10:26:48 iwasaki | お
10:26:51 zipper | http://ghe.**********/gist/zipper/30d0d4a03553bab1d70e
10:26:54 zipper | これ気になる
10:26:56 zipper | cat >> ?
10:27:09 iwasaki | ああ
10:27:51 iwasaki | tmux pipe-pane って機能使ってやってる感じです。
10:28:07 iwasaki | せっかくなのでgistに書き起こしてみます
10:28:31 zipper | pipe-paneか
10:28:36 zipper | 使ってる使ってる
10:28:51 zipper | pipe-pane使うとフォークするんだなぁってことを知った
10:28:56 zipper | そりゃそうだ感あるけどw
10:28:56 Bob_tani | おれも、いわっちの話きいてまねしていれた。
10:30:05 iwasaki | http://ghe.**********/gist/laughk/cd3e1755bffcd899efc9
<span class="cp">10:30:05 </span><span class="k">-- </span><span class="s">| </span><span class="c">Notice(zipper): bind-key H command-prompt -p "logname:" "pipe-pane 'cat >> $HOME/logs/%%.log' \; display-message</span>
| 'Started logging to $HOME/logs/%%.log'"
<span class="cp">10:30:05 </span><span class="k">-- </span><span class="s">| </span><span class="c">Notice(zipper): bind-key h pipe-pane \; display-message 'Ended logging'</span>
10:30:11 zipper | ↑こんな感じで入れてた
10:30:17 tora | ほうほう
10:30:19 zipper | っても、glidenoteさんのパクリな気がする
10:30:21 tora | さっそくパクろう
10:30:21 iwasaki | 相当強引ですが、↑ を bashrc に書いてますねー
10:30:26 zipper | なるほど
10:30:37 iwasaki | tmux 内で ssh すれば自動的にロギング開始です
10:30:40 zipper | tmuxならdefault-commandあたりでできそうな気がする
10:30:43 zipper | おお
10:30:46 zipper | かっこいい
10:31:03 tora | 自動!
10:31:14 tora | ログイン先にログがでるのはいいすね
10:31:41 iwasaki | いちいちロギング有効にしたりするのがダルかった+忘れることが多かったので頑張って見た感じです
<span class="cp">10:31:43 </span><span class="k">-- </span><span class="s">| </span><span class="c">Notice(tora): やっぱりそうなるよねぇ > /home/laughk/bin/tmux</span>
10:31:57 zipper | tmuxバージョンあげよう計画
10:32:01 zipper | ってか、rpm作ろうw
10:32:11 zipper | *****-repoにうpればよい
10:32:42 zipper | みんな俺俺tmux入れるのはツライ
10:34:11 zipper | RHEL Client relase …?
10:34:21 zipper | Tikango
10:34:26 zipper | Tikanga
<span class="cp">10:36:42 </span><span class="k">-- </span><span class="s">| </span><span class="c">Notice -> #**********: なんかアドベントカレンダーのネタこっちのほうが良さげ (tmux 自動ロギング)</span>
10:37:04 zipper | 両方書けばいいんだよ!!!
<span class="cp">10:37:11 </span><span class="k">-- </span><span class="s">| </span><span class="c">Notice -> #**********: weechat ネタ8割がたすでに書いてる...</span>
<span class="cp">10:37:17 </span><span class="k">-- </span><span class="s">| </span><span class="c">Notice -> #**********: はっ</span>
10:37:28 zipper | 別に1つである必要はないのだよ!
<span class="cp">10:37:35 </span><span class="k">-- </span><span class="s">| </span><span class="c">Notice(tora): じゃあ僕の回で代わりに書いて下さい。</span>
<span class="cp">10:37:39 </span><span class="k">-- </span><span class="s">| </span><span class="c">Notice(zipper): それはダメw</span>
<span class="cp">10:37:44 </span><span class="k">-- </span><span class="s">| </span><span class="c">Notice -> #**********: ちょw</span>
<span class="cp">10:37:46 </span><span class="k">-- </span><span class="s">| </span><span class="c">Notice(tora): えっ</span>
10:38:23 zipper | 12/25空いてるよw
10:38:27 iwasaki | wwww
10:38:35 zipper | http://qiita.com/advent-calendar/2014/pepabo
10:38:55 iwasaki | ちなみにアドベントカレンダーでtmuxのロギングネタ書くとしたら、今のIRCのやりとり引用してもよいです?
10:39:37 zipper | 私はいいよ
10:39:38 tora | 開かれたチャンネルなので引用に断りはいらないとおもわれ
10:39:48 zipper | そうね
10:39:48 iwasaki | 了解っす!
10:40:33 zipper | 既知かもしれないけど、私の設定の元ネタこれね https://github.com/glidenote/dotfiles/blob/master/.tmux.conf#L53
10:40:38 zipper | パクったった
<span class="cp">10:40:47 </span><span class="k">-- </span><span class="s">| </span><span class="c">Notice(zipper): けど、bind Hはめんどい</span>
<span class="cp">10:40:52 </span><span class="k">-- </span><span class="s">| </span><span class="c">Notice(zipper): 変えたいと思っている</span>
10:41:08 iwasaki | 実は自分もこれをパクった後頑張って自動で走らせるようにしました!w
10:41:13 zipper | だよねーw
</code></pre></div>
<h2>やっていること</h2>
<p>やりかたは様々ありそうですが、私の場合は <code>~/.tmux.conf</code> をいじるのではなく、<br>
<code>~/.bashrc</code> または <code>~/.zshrc</code> に以下の関数を定義してssh コマンドに細工をしています。</p>
<div class="highlight"><pre><span></span><code><span class="c1">## Tmux + SSH --------------------------------------------------------</span>
<span class="k">function</span> ssh_tmux<span class="o">()</span> <span class="o">{</span>
tmux set-option default-terminal <span class="s2">"screen"</span> <span class="se">\;</span> <span class="se">\</span>
new-window -n <span class="k">$(</span><span class="nb">echo</span> <span class="nv">$@</span> <span class="p">|</span> perl -ple <span class="s1">'s/(^|\s)-[^\s] *[^\s]+//g'</span> <span class="p">|</span> cut -d<span class="s2">" "</span> -f2 <span class="k">)</span> <span class="s2">"exec ssh </span><span class="k">$(</span><span class="nb">echo</span> <span class="nv">$@</span><span class="k">)</span><span class="s2">"</span> <span class="se">\;</span> <span class="se">\</span>
run-shell <span class="s2">"[ ! -d </span><span class="nv">$HOME</span><span class="s2">/.tmuxlog/#W/</span><span class="k">$(</span>date +%Y-%m/%d<span class="k">)</span><span class="s2"> ] && mkdir -p </span><span class="nv">$HOME</span><span class="s2">/.tmuxlog/#W/</span><span class="k">$(</span>date +%Y-%m/%d<span class="k">)</span><span class="s2">"</span> <span class="se">\;</span> <span class="se">\</span>
pipe-pane <span class="s2">"cat >> </span><span class="nv">$HOME</span><span class="s2">/.tmuxlog/#W/</span><span class="k">$(</span>date +%Y-%m/%d/%H%M%S.log<span class="k">)</span><span class="s2">"</span> <span class="se">\;</span> <span class="se">\</span>
display-message <span class="s2">"Started logging to </span><span class="nv">$HOME</span><span class="s2">/.tmuxlog/#W/</span><span class="k">$(</span>date +%Y-%m/%d/%H%M%S.log<span class="k">)</span><span class="s2">"</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">[[</span> <span class="nv">$TERM</span> <span class="o">=</span> screen <span class="o">]]</span> <span class="o">||</span> <span class="o">[[</span> <span class="nv">$TERM</span> <span class="o">=</span> screen-256color <span class="o">]]</span> <span class="p">;</span> <span class="k">then</span>
<span class="nb">alias</span> <span class="nv">ssh</span><span class="o">=</span>ssh_tmux
<span class="k">fi</span>
</code></pre></div>
<p>これを仕込むことでtmux上でのsshコマンドが以下のようになります。</p>
<ul>
<li>新しい window で <code>TERM=screen</code> でリモートセッションが始まる。</li>
<li>作成された window 名が接続先のホスト名またはIPアドレスになる</li>
<li><code>~/.tmuxlog/(接続先ホスト名またはIPアドレス)/YYYY-MM/DD/HHMMSS.log</code> というファイルに接続先での作業のロギングをする。</li>
</ul>
<p>個人的にはログを保存するディレクトリはホストごとに分けたいし、<br>
window名はホストと同じにしてどこにログイン中なのかわかるようにしておきたい。<br>
あとは<code>screen-256color</code>が有効なまんまだとリモート先で悪さされることが結構あるのでよしなにしたい<br>
といった思いからこんな感じになっております。 (強引だとは思うのでもっといい方法あったら知りたい...)</p>
<p>これを普段踏み台で使っているサーバに仕込んでおけば、tmuxを起動するだけでロギングするのを忘れずにすみます。
上記IRCログにあるようにtmuxが古いと使えなかったり、地味にtopをやりっぱなしにしておくとログがとんでもなく肥大したりしますが概ね快適に使えています。 </p>
<p>取得したログを確認したい場合は<code>script</code>コマンドで取得したもの同様にエスケープシーケンスも入っているので <code>less -r</code> や <code>less -R</code> で確認するといい感じです。</p>
<h2>参考という名の偉大なる元ネタ様</h2>
<ul>
<li><a href="http://blog.glidenote.com/blog/2013/02/04/tmux-pipe-pane-logging/">tmuxのpipe-paneを利用してリモートサーバでの作業ログをローカルに記録する - Glide Note - グライドノート</a></li>
<li><a href="http://blog.repl.info/2011/12/03/ssh-with-tmux-and-zsh/">tmux内でコマンドを実行する際に新しいウィンドウやウィンドウを分割して実行する | うどん駆動開発</a> </li>
<li><code>man tmux</code></li>
</ul>TwitPicに上げてる画像をシェル芸で救出してみた2014-10-26T19:20:00+09:002014-10-26T19:20:00+09:00Kei Iwasakitag:memo.laughk.org,2014-10-26:/articles/2014-10-26-get-twitpic-img-by-shellart/<!-- 冒頭 -->
<h2>概要</h2>
<p>最近になって twitpic が終わったり終わらなかったりな状況で<br/>
今後どうなるかもわからないし、昔あげていた画像を救出するのにシェル芸でやってみた話。</p>
<!-- 冒頭 -->
<h2>概要</h2>
<p>最近になって twitpic が終わったり終わらなかったりな状況で<br>
今後どうなるかもわからないし、昔あげていた画像を救出するのにシェル芸でやってみた話。</p>
<h2>結果</h2>
<p>とりあえず、結果からのせると以下のような感じ。<br>
(追記) <code>png</code> を考慮するの漏れてたので修正しました。(追記おわり)</p>
<div class="highlight"><pre><span></span><code>% <span class="nb">cd</span> /path/to/put_dir
% <span class="nv">TWITPIC_URL</span><span class="o">=</span><span class="s2">"http://twitpic.com/photos/laugh_k"</span>
% seq <span class="m">1</span> <span class="k">$(</span> curl -s <span class="si">${</span><span class="nv">TWITPIC_URL</span><span class="si">}</span> <span class="p">|</span> perl -nle <span class="s1">'if(/<a href="\?page=([0-9]+)">Last<\/a>/){ print $1, "\n" }'</span> <span class="k">)</span> <span class="p">|</span> <span class="k">while</span> <span class="nb">read</span> page <span class="p">;</span> <span class="k">do</span> curl -s <span class="s2">"</span><span class="si">${</span><span class="nv">TWITPIC_URL</span><span class="si">}</span><span class="s2">?page=</span><span class="si">${</span><span class="nv">page</span><span class="si">}</span><span class="s2">"</span> <span class="p">|</span> grep <span class="s1">'<a href="/'</span> <span class="p">|</span> tail -n +8 <span class="p">|</span> head -20 <span class="p">|</span> perl -nle <span class="s1">'if(/\/[^"]+/){ print "http://twitpic.com/$&" }'</span> <span class="p">;</span> <span class="k">done</span> <span class="p">|</span> <span class="k">while</span> <span class="nb">read</span> img_page <span class="p">;</span> <span class="k">do</span> curl -sL <span class="s2">"</span><span class="si">${</span><span class="nv">img_page</span><span class="si">}</span><span class="s2">"</span> <span class="p">|</span> perl -nle <span class="s1">'if(/<img src="(https:\/\/[^.^"]+\.cloudfront.net\/photos\/large\/[^"]+)"/){ print $1 }'</span> <span class="p">;</span> <span class="k">done</span> <span class="p">|</span> <span class="k">while</span> <span class="nb">read</span> img_url <span class="p">;</span> <span class="k">do</span> <span class="nv">img_name</span><span class="o">=</span><span class="k">$(</span> <span class="nb">echo</span> <span class="s2">"</span><span class="si">${</span><span class="nv">img_url</span><span class="si">}</span><span class="s2">"</span> <span class="p">|</span> grep -o -E <span class="s1">'[^/]+\.(jpe?g|png|gif)'</span> <span class="k">)</span> <span class="p">;</span> wget -O <span class="si">${</span><span class="nv">file</span><span class="si">}</span> <span class="s2">"</span><span class="si">${</span><span class="nv">img_url</span><span class="si">}</span><span class="s2">"</span> <span class="p">;</span> <span class="k">done</span>
</code></pre></div>
<p>流石にこれだとわかりづらいんでちょっと形成すると以下のような感じ</p>
<div class="highlight"><pre><span></span><code>% <span class="nv">TWITPIC_URL</span><span class="o">=</span><span class="s2">"http://twitpic.com/photos/laugh_k"</span>
<span class="c1">### さすがに長ったらしいので、最後のページ情報取得は一旦分ける</span>
% <span class="nv">LAST</span><span class="o">=</span><span class="k">$(</span> curl -s <span class="si">${</span><span class="nv">TWITPIC_URL</span><span class="si">}</span> <span class="p">|</span> perl -nle <span class="s1">'if( /<a href="\?page=([0-9]+)">Last<\/a>/ ){ print $1, "\n" }'</span> <span class="k">)</span>
% seq <span class="m">1</span> <span class="si">${</span><span class="nv">LAST</span><span class="si">}</span> <span class="p">|</span> <span class="k">while</span> <span class="nb">read</span> page
> <span class="k">do</span>
> curl -sL <span class="s2">"</span><span class="si">${</span><span class="nv">TWITPIC_URL</span><span class="si">}</span><span class="s2">?page=</span><span class="si">${</span><span class="nv">page</span><span class="si">}</span><span class="s2">"</span> <span class="p">|</span>
> grep <span class="s1">'<a href="/'</span> <span class="p">|</span>
> tail -n +8 <span class="p">|</span>
> head -n <span class="m">20</span> <span class="p">|</span>
> perl -nle <span class="s1">'if(/\/[^"]+/){ print "http://twitpic.com/$&" }'</span>
> <span class="k">done</span> <span class="p">|</span>
> <span class="k">while</span> <span class="nb">read</span> img_page
> <span class="k">do</span>
> curl -sL <span class="si">${</span><span class="nv">img_page</span><span class="si">}</span> <span class="p">|</span>
> perl -nle <span class="s1">'if(/<img src="(https:\/\/[^.^"]+\.cloudfront.net\/photos\/large\/[^"]+)"/){ print $1 }'</span>
> <span class="k">done</span> <span class="p">|</span>
> <span class="k">while</span> <span class="nb">read</span> img_url
> <span class="k">do</span>
> <span class="nv">img_name</span><span class="o">=</span><span class="k">$(</span> <span class="nb">echo</span> <span class="s2">"</span><span class="si">${</span><span class="nv">img_url</span><span class="si">}</span><span class="s2">"</span> <span class="p">|</span> grep -o -E <span class="s1">'[^/]+\.(jpe?g|png)'</span> <span class="k">)</span>
> wget -O <span class="si">${</span><span class="nv">img_name</span><span class="si">}</span> <span class="s2">"</span><span class="si">${</span><span class="nv">img_url</span><span class="si">}</span><span class="s2">"</span>
> <span class="k">done</span>
</code></pre></div>
<h3>気にした点</h3>
<ul>
<li>
<p>ページャーになってるんで最後のページ情報どうするか</p>
<p>=> ユーザーページトップにLASTのリンクがあったのでそこからひっぱった</p>
</li>
<li>
<p>各画像のページのURLをどうやってピンポイントで出すか </p>
<p>=> レイアウト的にどのリンクが引っかかるかわかったんで、<code>head</code>,<code>tail</code>でゴリ押し</p>
</li>
<li>
<p>最終的にCloudfrontのリンクが取れるが、まんまwgetするとファイル名が大変なことになるので、その辺よしなに保存したい </p>
<p>=> <code>sed</code> 使っても良かったけどパターン的に抽出のほうが楽そうだったので <code>grep -o -E</code> でファイル名を直接引っこ抜き</p>
</li>
</ul>
<h2>最後に</h2>
<p>わざわざ画像取得するのにWindows起動するのも面倒だなとなって「よろしいならばシェル芸だ」とやってみたら意外にすんなり行けた。<br>
糞長いし、ゴリ押し感半端無いし、もっとよさ気な方法あるかもだけど問題が解決できたのでよしとする。<br>
Twitpicからの画像データ救出、他の言語の練習題材としてもよさ気な感じですね。 </p>GitLab でマージリクエストのマージができなくなってハマった話2014-10-13T15:53:00+09:002014-10-13T15:53:00+09:00Kei Iwasakitag:memo.laughk.org,2014-10-13:/articles/2014-10-13-gitlab-cannot-merge-mergerequest/<hr/>
<p>紛らわしい箇所を修正しました(タイトル修正, 利用中GitLabのバージョン明記)</p>
<hr/>
<h2>背景</h2>
<p>所用で最近個人的に<a href="https://about.gitlab.com/">GitLab</a>を使い始めたが、
マージリクエストをブラウザ越しにマージする際に、ボタンをクリックしても何故か画面が先に進まず、
延々とマージされない状況が続くという事態に陥ってしまった。</p>
<p>※ GitLab 7.3.2 での話です</p>
<hr>
<p>紛らわしい箇所を修正しました(タイトル修正, 利用中GitLabのバージョン明記)</p>
<hr>
<h2>背景</h2>
<p>所用で最近個人的に<a href="https://about.gitlab.com/">GitLab</a>を使い始めたが、
マージリクエストをブラウザ越しにマージする際に、ボタンをクリックしても何故か画面が先に進まず、
延々とマージされない状況が続くという事態に陥ってしまった。</p>
<p>※ GitLab 7.3.2 での話です</p>
<h2>原因</h2>
<p>ひとまずログを調査したところ、<code>githost.log</code> に以下の文言を発見。</p>
<div class="highlight"><pre><span></span><code><span class="n">October</span><span class="w"> </span><span class="mi">13</span><span class="p">,</span><span class="w"> </span><span class="mi">2014</span><span class="w"> </span><span class="mi">15</span><span class="o">:</span><span class="mi">21</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">ERROR</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Command</span><span class="w"> </span><span class="n">failed</span><span class="w"> </span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">:</span><span class="w"> </span><span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">bin</span><span class="o">/</span><span class="n">git</span><span class="w"> </span><span class="o">--</span><span class="n">git</span><span class="o">-</span><span class="n">dir</span><span class="o">=/</span><span class="n">path</span><span class="o">/</span><span class="n">to</span><span class="o">/</span><span class="n">git</span><span class="o">/</span><span class="n">gitlab</span><span class="o">-</span><span class="n">satellites</span><span class="o">/</span><span class="n">hoge</span><span class="o">/</span><span class="n">huga</span><span class="o">/</span><span class="p">.</span><span class="n">git</span><span class="w"> </span><span class="o">--</span><span class="n">work</span><span class="o">-</span><span class="n">tree</span><span class="o">=/</span><span class="n">path</span><span class="o">/</span><span class="n">to</span><span class="o">/</span><span class="n">git</span><span class="o">/</span><span class="n">gitlab</span><span class="o">-</span><span class="n">satellites</span><span class="o">/</span><span class="n">hoge</span><span class="o">/</span><span class="n">huga</span><span class="w"> </span><span class="n">push</span><span class="w"> </span><span class="n">origin</span><span class="w"> </span><span class="n">master</span><span class="w"></span>
<span class="nl">remote</span><span class="p">:</span><span class="w"> </span><span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">local</span><span class="o">/</span><span class="n">apps</span><span class="o">/</span><span class="n">ruby</span><span class="mf">-2.1.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">ruby</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="mf">2.1.0</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="n">bundler</span><span class="mf">-1.7.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">bundler</span><span class="o">/</span><span class="n">spec_set</span><span class="p">.</span><span class="n">rb</span><span class="o">:</span><span class="mi">92</span><span class="o">:</span><span class="k">in</span><span class="w"> </span><span class="err">`</span><span class="n">block</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">materialize</span><span class="err">'</span><span class="o">:</span><span class="w"> </span><span class="n">Could</span><span class="w"> </span><span class="n">not</span><span class="w"> </span><span class="n">find</span><span class="w"> </span><span class="n">rake</span><span class="mf">-10.3.2</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">any</span><span class="w"> </span><span class="n">of</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">sources</span><span class="w"> </span><span class="p">(</span><span class="n">Bundler</span><span class="o">::</span><span class="n">GemNotFound</span><span class="p">)</span><span class="w"> </span>
<span class="nl">remote</span><span class="p">:</span><span class="w"> </span><span class="n">from</span><span class="w"> </span><span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">local</span><span class="o">/</span><span class="n">apps</span><span class="o">/</span><span class="n">ruby</span><span class="mf">-2.1.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">ruby</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="mf">2.1.0</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="n">bundler</span><span class="mf">-1.7.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">bundler</span><span class="o">/</span><span class="n">spec_set</span><span class="p">.</span><span class="n">rb</span><span class="o">:</span><span class="mi">85</span><span class="o">:</span><span class="k">in</span><span class="w"> </span><span class="err">`</span><span class="n">map</span><span class="o">!</span><span class="err">'</span><span class="w"> </span>
<span class="nl">remote</span><span class="p">:</span><span class="w"> </span><span class="n">from</span><span class="w"> </span><span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">local</span><span class="o">/</span><span class="n">apps</span><span class="o">/</span><span class="n">ruby</span><span class="mf">-2.1.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">ruby</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="mf">2.1.0</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="n">bundler</span><span class="mf">-1.7.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">bundler</span><span class="o">/</span><span class="n">spec_set</span><span class="p">.</span><span class="n">rb</span><span class="o">:</span><span class="mi">85</span><span class="o">:</span><span class="k">in</span><span class="w"> </span><span class="err">`</span><span class="n">materialize</span><span class="err">'</span><span class="w"> </span>
<span class="nl">remote</span><span class="p">:</span><span class="w"> </span><span class="n">from</span><span class="w"> </span><span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">local</span><span class="o">/</span><span class="n">apps</span><span class="o">/</span><span class="n">ruby</span><span class="mf">-2.1.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">ruby</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="mf">2.1.0</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="n">bundler</span><span class="mf">-1.7.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">bundler</span><span class="o">/</span><span class="n">definition</span><span class="p">.</span><span class="n">rb</span><span class="o">:</span><span class="mi">132</span><span class="o">:</span><span class="k">in</span><span class="w"> </span><span class="err">`</span><span class="n">specs</span><span class="err">'</span><span class="w"> </span>
<span class="nl">remote</span><span class="p">:</span><span class="w"> </span><span class="n">from</span><span class="w"> </span><span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">local</span><span class="o">/</span><span class="n">apps</span><span class="o">/</span><span class="n">ruby</span><span class="mf">-2.1.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">ruby</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="mf">2.1.0</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="n">bundler</span><span class="mf">-1.7.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">bundler</span><span class="o">/</span><span class="n">definition</span><span class="p">.</span><span class="n">rb</span><span class="o">:</span><span class="mi">177</span><span class="o">:</span><span class="k">in</span><span class="w"> </span><span class="err">`</span><span class="n">specs_for</span><span class="err">'</span><span class="w"> </span>
<span class="nl">remote</span><span class="p">:</span><span class="w"> </span><span class="n">from</span><span class="w"> </span><span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">local</span><span class="o">/</span><span class="n">apps</span><span class="o">/</span><span class="n">ruby</span><span class="mf">-2.1.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">ruby</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="mf">2.1.0</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="n">bundler</span><span class="mf">-1.7.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">bundler</span><span class="o">/</span><span class="n">definition</span><span class="p">.</span><span class="n">rb</span><span class="o">:</span><span class="mi">166</span><span class="o">:</span><span class="k">in</span><span class="w"> </span><span class="err">`</span><span class="n">requested_specs</span><span class="err">'</span><span class="w"> </span>
<span class="nl">remote</span><span class="p">:</span><span class="w"> </span><span class="n">from</span><span class="w"> </span><span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">local</span><span class="o">/</span><span class="n">apps</span><span class="o">/</span><span class="n">ruby</span><span class="mf">-2.1.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">ruby</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="mf">2.1.0</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="n">bundler</span><span class="mf">-1.7.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">bundler</span><span class="o">/</span><span class="n">environment</span><span class="p">.</span><span class="n">rb</span><span class="o">:</span><span class="mi">18</span><span class="o">:</span><span class="k">in</span><span class="w"> </span><span class="err">`</span><span class="n">requested_specs</span><span class="err">'</span><span class="w"> </span>
<span class="nl">remote</span><span class="p">:</span><span class="w"> </span><span class="n">from</span><span class="w"> </span><span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">local</span><span class="o">/</span><span class="n">apps</span><span class="o">/</span><span class="n">ruby</span><span class="mf">-2.1.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">ruby</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="mf">2.1.0</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="n">bundler</span><span class="mf">-1.7.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">bundler</span><span class="o">/</span><span class="n">runtime</span><span class="p">.</span><span class="n">rb</span><span class="o">:</span><span class="mi">13</span><span class="o">:</span><span class="k">in</span><span class="w"> </span><span class="err">`</span><span class="n">setup</span><span class="err">'</span><span class="w"> </span>
<span class="nl">remote</span><span class="p">:</span><span class="w"> </span><span class="n">from</span><span class="w"> </span><span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">local</span><span class="o">/</span><span class="n">apps</span><span class="o">/</span><span class="n">ruby</span><span class="mf">-2.1.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">ruby</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="mf">2.1.0</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="n">bundler</span><span class="mf">-1.7.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">bundler</span><span class="p">.</span><span class="n">rb</span><span class="o">:</span><span class="mi">121</span><span class="o">:</span><span class="k">in</span><span class="w"> </span><span class="err">`</span><span class="n">setup</span><span class="err">'</span><span class="w"> </span>
<span class="nl">remote</span><span class="p">:</span><span class="w"> </span><span class="n">from</span><span class="w"> </span><span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">local</span><span class="o">/</span><span class="n">apps</span><span class="o">/</span><span class="n">ruby</span><span class="mf">-2.1.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">ruby</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="mf">2.1.0</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="n">bundler</span><span class="mf">-1.7.3</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">bundler</span><span class="o">/</span><span class="n">setup</span><span class="p">.</span><span class="n">rb</span><span class="o">:</span><span class="mi">17</span><span class="o">:</span><span class="k">in</span><span class="w"> </span><span class="err">`</span><span class="o"><</span><span class="n">top</span><span class="w"> </span><span class="p">(</span><span class="n">required</span><span class="p">)</span><span class="o">></span><span class="err">'</span><span class="w"> </span>
<span class="nl">remote</span><span class="p">:</span><span class="w"> </span><span class="n">from</span><span class="w"> </span><span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">ruby</span><span class="o">/</span><span class="mf">1.9.1</span><span class="o">/</span><span class="n">rubygems</span><span class="o">/</span><span class="n">custom_require</span><span class="p">.</span><span class="n">rb</span><span class="o">:</span><span class="mi">36</span><span class="o">:</span><span class="k">in</span><span class="w"> </span><span class="err">`</span><span class="n">require</span><span class="err">'</span><span class="w"> </span>
<span class="nl">remote</span><span class="p">:</span><span class="w"> </span><span class="n">from</span><span class="w"> </span><span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">ruby</span><span class="o">/</span><span class="mf">1.9.1</span><span class="o">/</span><span class="n">rubygems</span><span class="o">/</span><span class="n">custom_require</span><span class="p">.</span><span class="n">rb</span><span class="o">:</span><span class="mi">36</span><span class="o">:</span><span class="k">in</span><span class="w"> </span><span class="err">`</span><span class="n">require</span><span class="err">'</span><span class="w"> </span>
<span class="n">To</span><span class="w"> </span><span class="o">/</span><span class="n">strage</span><span class="o">/</span><span class="n">home</span><span class="o">/</span><span class="n">git</span><span class="o">/</span><span class="n">repositories</span><span class="o">/</span><span class="n">node</span><span class="o">-</span><span class="n">setagaya</span><span class="o">/</span><span class="n">private</span><span class="o">-</span><span class="n">docs</span><span class="p">.</span><span class="n">git</span><span class="w"></span>
<span class="w"> </span><span class="o">!</span><span class="w"> </span><span class="p">[</span><span class="n">remote</span><span class="w"> </span><span class="n">rejected</span><span class="p">]</span><span class="w"> </span><span class="n">master</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">master</span><span class="w"> </span><span class="p">(</span><span class="n">pre</span><span class="o">-</span><span class="n">receive</span><span class="w"> </span><span class="n">hook</span><span class="w"> </span><span class="n">declined</span><span class="p">)</span><span class="w"></span>
<span class="w"> </span><span class="nl">error</span><span class="p">:</span><span class="w"> </span><span class="n">failed</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">push</span><span class="w"> </span><span class="n">some</span><span class="w"> </span><span class="n">refs</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="err">'</span><span class="o">/</span><span class="n">path</span><span class="o">/</span><span class="n">to</span><span class="o">/</span><span class="n">git</span><span class="o">/</span><span class="n">repositories</span><span class="o">/</span><span class="n">hoge</span><span class="o">/</span><span class="n">huga</span><span class="p">.</span><span class="n">git</span><span class="err">'</span><span class="w"></span>
</code></pre></div>
<p>私は Ubuntu14.04サーバ上の <code>/usr/local/apps/ruby</code> 配下にコンパイルしたrubyを使っていたはずなのだが、
<code>apt</code>経由で入ってしまっていた<code>ruby1.9.1</code>も参照していた模様。<br>
(どうやら <code>vim-nox</code> を入れた際に一緒に入ってしまっていた。。)</p>
<p>また、このエラーに関して調べてみたら以下のIssueも上がっていた模様<br>
<a href="https://github.com/gitlabhq/gitlabhq/issues/7230">Could not find rake-10.3.2 in any of the sources #7230 </a></p>
<h2>解決策</h2>
<p>解決方法はシンプルで、<code>apt</code>経由での<code>ruby1.9.1</code>を削除したらブラウザからもマージできるようになった。</p>
<div class="highlight"><pre><span></span><code>% sudo aptitude purge ruby1.9.1
</code></pre></div>
<p>依存関係で<code>vim-nox</code>は消えるが、最近のUbuntuサーバは <code>vim.basic</code> を入れれば最低限 <code>vim</code> は使えるし、
<code>lua</code>とか使いたいならコンパイルすればいいのでそれほど問題ではない。<br>
(そもそもGitLabサーバなんだからバリバリ作業したりもないだろうからそこまでしなくてもいい気がする。)</p>GMOペパボに入社した2014-09-07T13:00:00+09:002014-09-07T13:00:00+09:00Kei Iwasakitag:memo.laughk.org,2014-09-07:/articles/2014-09-07-join-pepabo/<p>先月8月末で主に監視障害対応を請け負うインフラエンジニアとして勤務していた都内の某MSP業社を退職し<br/>
9月1日から<a href="http://pepabo.com/">GMOペパボ株式会社</a>にインフラエンジニアとして入社しました。</p>
<p>[注意]<br/>
いわゆる転職エントリーというもので、個人的な日記です。<br/>
苦手な方はそっとブラウザバックを押していただくこと推奨です。</p>
<p>先月8月末で主に監視障害対応を請け負うインフラエンジニアとして勤務していた都内の某MSP業社を退職し<br>
9月1日から<a href="http://pepabo.com/">GMOペパボ株式会社</a>にインフラエンジニアとして入社しました。</p>
<p>[注意]<br>
いわゆる転職エントリーというもので、個人的な日記です。<br>
苦手な方はそっとブラウザバックを押していただくこと推奨です。</p>
<h2>転職の経緯とか</h2>
<p>これまでのMSPとしての監視運用を中心とする業務を通じて、</p>
<ul>
<li>より運用改善をガッツリやってみたい</li>
<li>ひとつのサービスに特化した運用を経験してみたい</li>
<li>バリバリコーディングをしてレイヤを問わずに問題を解決できるようになりたい</li>
<li>運用の際に発生する痛みを解消出来るだけの知見を身につけたい</li>
</ul>
<p>という思いが日に日に強くなっていたこと</p>
<p>加えて、割と最近までは個人で色々勉強会に行ってみたりで少しずつは回収できていたのですが<br>
今年に入って結婚して生活環境が大幅に変わり、
これまでの「個人で勉強会に行ってネタを仕入れて職場にちょっとずつ導入」のペースだと
モチベーション的にも体力的にも持たなくなると感じたことが大きいです。</p>
<h2>GMOペパボ</h2>
<p>そんな中でGMOペパボを選んだ理由としては、だいたい以下のものが該当します。</p>
<ul>
<li>勉強会で中の人と話をしたり、中の人の発表内容やブログをみていてまさに自分がやりたいと思っていた運用改善を積極的に行っていた</li>
<li>エンジニアの制度に関するブログを見ていても、インフラ側も含めて考えていて、自分のポジションからでも会社を盛り上げるチャンスがあると思ったから</li>
<li>転職を本格的に考える段階になった時に出ていた募集要項内容を見て、今この機会を逃したら確実に後悔すると思ったから</li>
</ul>
<p>入社してまだ1周間程度しか経っていませんが
社内のアウトプット内容を見ているだけでもエンジニアとして尊敬できる方が多く、当初の考えは間違っていなかったと感じています。</p>
<h2>これから</h2>
<p>正直なところまわりの方々と今の自分の技術力のギャップはかなり感じていて、
「ちゃんとついていけるかな...」と不安に思うところもあります。</p>
<p>ただ逆に言えば、自分のエンジニアとして今までこれまで伸ばせていなかった部分を存分に成長させるチャンスでもあります。
まわりにいらっしゃる方々から色んな物を吸収しながら、前向きに、転職時に抱いた思いを実現させるべく頑張っていこうと思います。</p>YAPC::Asiaに初参加してきた #yapcasia2014-09-07T02:10:00+09:002014-09-07T02:10:00+09:00Kei Iwasakitag:memo.laughk.org,2014-09-07:/articles/2014-09-07-yapcasia2014-repo/<p>先週末、初めて<a href="http://yapcasia.org">YAPC::Asia</a>に参加してきたので簡単にレポート。<br/>
0日目は一人で、1日目以降は <a href="https://twitter.com/tkr0429">@tkr0429</a> さんと二人で参加した。</p>
<blockquote class="twitter-tweet" lang="ja"><p>yapcasia前夜祭来てみたら予想以上にいろいろもらえたw すげーw <a href="http://t.co/gygtkJ7d4h">pic.twitter.com/gygtkJ7d4h</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/504923405821296640">2014, 8月 28</a></blockquote>
<script async="" charset="utf-8" src="//platform.twitter.com/widgets.js"></script>
<p>先週末、初めて<a href="http://yapcasia.org">YAPC::Asia</a>に参加してきたので簡単にレポート。<br>
0日目は一人で、1日目以降は <a href="https://twitter.com/tkr0429">@tkr0429</a> さんと二人で参加した。</p>
<blockquote class="twitter-tweet" lang="ja"><p>yapcasia前夜祭来てみたら予想以上にいろいろもらえたw すげーw <a href="http://t.co/gygtkJ7d4h">pic.twitter.com/gygtkJ7d4h</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/504923405821296640">2014, 8月 28</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<h2>0日目</h2>
<p>前夜祭ということでLT祭り。
初めてでビールとかもらえるのを知らずに普通にコンビニで飲み物を買ってから会場に行ってしまったのはやや失敗だった。</p>
<p>LTからすでにPerl関係なくフリーダムな感じで、非常に面白かった。<br>
特に wri.pe なんて普通に自分が使いたいサービスとしていいなって思ったし、「プライベートで3年間チーム開発した話」は本当に好きでやっている感があってすごく良かった。
ただ最後のクイズを支える技術に全部持って行かれた感は否めない。デモが面白すぎた。</p>
<h2>1日目</h2>
<p>セッションをまわりつつ、無限コーヒーをいただいたり。<br>
YAPC::Asia ってこんな感じなんだなーということを感じながらすごしていた。</p>
<p>セッションは私も@tkr0429さんもインフラエンジニアなのでそれに関するものを選んだ傾向が強い。<br>
特に<a href="https://twitter.com/studio3104">@studio3104</a>さん の「インフラエンジニア(狭義)は死んだ」はちょうど自分自身がほぼ同様ののことを色々と考えていたこともあり、非常に響いた内容だった。</p>
<blockquote class="twitter-tweet" lang="ja"><p>コードかけない/読めないと運用屋は死ぬってのはひしひしと感じていた... <a href="https://twitter.com/hashtag/yapcasia?src=hash">#yapcasia</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/505166130357338112">2014, 8月 29</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>その時のTLの反応とか見ていると、「コードかけない奴が死んでいくのは何もインフラエンジニアに限ったことじゃなくインターネットで仕事しているエンジニア全般に言えることでは?」みたいなものが流れていた気がするし、実際そうだと思う。
ただ、自分がいた環境からは少なくとも「いやいや、仕事インフラの方だからコードとか関係ないし」みたいな
どこか他人事のような意識を持ってしまっている人は結構多いんじゃないかなと感じていて、
そういった人たちにはぜひ聞いてほしいなと思えるような内容で、個人的にすごくよかった。
また「カンファレンスとか来ても自分が何をやっているのかということを話せないとなかなか仲良くなりづらい。ブログ書きましょう。アウトプットしよう」というのはホントだなと感じた。アウトプットがんばろう。</p>
<p>お昼のセッションでもらえたお弁当は美味しかったり、
イベントホールで休んでいるとライブコーディングが始まってワイワイしたりと本当にお祭りという感じだった。</p>
<blockquote class="twitter-tweet" lang="ja"><p>開封 <a href="https://twitter.com/hashtag/yapcasia?src=hash">#yapcasia</a> <a href="http://t.co/FBBGype6sk">pic.twitter.com/FBBGype6sk</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/505190141661429761">2014, 8月 29</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>残念ながら懇親会から溢れてしまっていたことと、
次の日は朝からセッションに行きたいと思っていたのでこの日は早めに退散。(この時はHubが開放されてるの知らなかったのが最大の失敗)</p>
<h2>2日目</h2>
<p>2日目も基本的には1日目と同様の流れですごしてみて、
キーノートからHubに流れた感じ。</p>
<blockquote class="twitter-tweet" lang="ja"><p>旨そうである <a href="https://twitter.com/hashtag/yapcasia?src=hash">#yapcasia</a> <a href="http://t.co/MEKG7UL0ST">pic.twitter.com/MEKG7UL0ST</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/505552486778683392">2014, 8月 30</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>2日目もお弁当ゲット。実際うまかったけど、思った以上に卵たっぷりボリュームたっぷりで若干胃がやられた感はある。</p>
<hr>
<p>この日聞いたセッションでは<a href="https://twitter.com/koemu">@koemu</a>さんの「<a href="http://www.koemu.com/etc/yapcasia2014/#/">突然ITインフラを任された人のための…監視設計入門</a>」
がMSPでインフラをやっていた人間としては非常に共感もでき、まだまだ意識が足りないところもあったなという気付きもあった(監視サーバの場所、処理フローからの逆算など)。これはインフラをやっている人はもちろん、Web系の技術者の方なら一度は絶対に聞いてほしいなと感じた。あと、デモで利用していたshioriは個人的にちょっと使ってみたいなと思った。</p>
<blockquote class="twitter-tweet" lang="ja"><p>誤報なれは確かに怖い。通知受けてもまたアレかって感覚になっちゃうし <a href="https://twitter.com/hashtag/yapcasia?src=hash">#yapcasia</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/505535267826978816">2014, 8月 30</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet" lang="ja"><p>障害時の意思決定ホント大事だわ. 事前に決めとかないといざという時ホントに泣きを見る... <a href="https://twitter.com/hashtag/yapcasia?src=hash">#yapcasia</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/505536101864312832">2014, 8月 30</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet" lang="ja"><p>IaaSの障害の時は確かに登録IDとか本人確認とか色々聞かれるからどこに情報あるか認識合わせておくのすごく大事 <a href="https://twitter.com/hashtag/yapcasia?src=hash">#yapcasia</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/505536763733884928">2014, 8月 30</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>また、<a href="https://twitter.com/mackee_w">@mackee_w</a>さんの「趣味開発のためのVPS/クラウド活用術」は20分の時間で全体の話までは聞けなかったけど<a href="https://vultr.com">VULTR</a>というサービスは知らなかったのでちょっと試してみようと思った。</p>
<p>あとこの日は特に事前受付などはしていなかったけど、Bot作ってみるとか面白そうだなと思ってPerl入学式に飛び入りで参加させてもらえた。最近あまりPerlは触れていなかったけど、<a href="https://twitter.com/__papix__">@__papix__</a>さん中心とした講師陣の説明がとにかく丁寧でお題にもいい感じで取り組むことができた。雰囲気も非常によくてPerlというか、とりあえずプログラミング始めたい!って人はPerl入学式行ってみればいいと思った。</p>
<blockquote class="twitter-tweet" lang="ja"><p>とりあえず「ぬるぽ」って入れたら「ガッ」してもらうようにした <a href="https://twitter.com/hashtag/yapcasia?src=hash">#yapcasia</a> <a href="https://twitter.com/hashtag/Perl%E5%85%A5%E5%AD%A6%E5%BC%8F?src=hash">#Perl入学式</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/505590125808459776">2014, 8月 30</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>クライマックスのLT祭りも面白く、特に<a href="https://speakerdeck.com/onigra/twitterqu-dong-tuo-chu-xin-zhe-number-yapcasia">TDD(Twitter Driven Datsu-Syoshinsya) / Twitter駆動脱初心者 #yapcasia</a>がよかった。</p>
<p>最後の<a href="https://twitter.com/typester">@typestar</a>さんのキーノートに関しては、
エンジニアとしての生き方みたいな話でいろんな人との関わりだったり、技術者としての強みをもつことだったり。
本当に今後の生き方を考えさせられた。
特に、「受託を行うことで自分が知らない技術に出会える」ということに関しては、
確実に技術者としての強み、仕事で関わる人通しのつながり・信頼がないと到達できないだろうなと思った。</p>
<blockquote class="twitter-tweet" lang="ja"><p>20代残り少ないけどまだまだがんばらにゃって思った。いい話だった。 <a href="https://twitter.com/hashtag/yapcasia?src=hash">#yapcasia</a></p>— Kei Iwasaki (@laugh_k) <a href="https://twitter.com/laugh_k/status/505647071173431297">2014, 8月 30</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>最後は「これで2日間終わりかー」という感じでお祭りの終わりみたいな雰囲気があった。</p>
<hr>
<p>メインのセッションが終了したところで会場の下の階にあったHubが開放されているので立ち寄ったが、
こちらはまだまだお祭りのまっただ中という感じ。</p>
<p>たまたまテーブルで一緒に座った<a href="https://twitter.com/do_aki">@do_aki</a>さんとYAPCに関して色々お話できたり、
「インフラエンジニア(狭義)は死んだ」の<a href="https://twitter.com/studio3104">@studio3104</a>さんと直接お話しできたり
会場のネットワークのCONBUの方のYAPC会場のネットワーク品質に対する情熱トークが聞けたり...</p>
<p>本当に濃い3日間だった。</p>
<h2>全体的な感想</h2>
<p>YAPC::Asiaは去年あたりからすでにPerlメインで使ってない人でも楽しめる!みたいな感じな話は目にしていて、
今年は事前に募集されていたトークの内容からして「IT技術者なら誰でも楽しめそうなものがゴロゴロしてそう」という感じで初参加してみた。</p>
<p>実際参加してみると、ホントにガチガチなカンファレンスという感じではなく、
会場の至るところに参加者の方がフラフラしていていい意味でゆるい感じでいいな思った。</p>
<p>ただ、参加人数が人数なだけに
基本的にセッション聞くのは床に座るのがほぼ当たり前になって、そうなってしまうとなかなかスライドが見えなかったりで
会場のキャパとしては結構キツイものがあるのかなという感じはした。(とはいえ、これだけの人数のカンファレンスなので、仕方ない部分もあるとは思う)</p>
<p>なので、YAPC::Asiaの醍醐味としてはセッショントークやイベントスペースで発生する催しもあるけどやっぱり、
セッションやっている人だったりHUBなりに居る人と直接いろんな話ができることなのかなと勝手に思った。</p>
<p>1つだけ間違いないと思うのは、YAPC::Asia はITに関するエンジニアの方なら誰でも楽しめる
「エンジニアのお祭り」なんだなということ。来年もまた参加したい!</p>ブログジェネレータをTinkererからPelicanに移行した2014-08-10T21:30:00+09:002014-08-10T21:30:00+09:00Kei Iwasakitag:memo.laughk.org,2014-08-10:/articles/2014-08-10-tinker2pelican-repo/<p><strong>2014/09/06</strong>
一部タイポと文言を修正しました</p>
<hr/>
<p>これまでしばらくSphinxベースの<a href="http://tinkerer.me/">Tinkerer</a>を使って<code>ReST</code> -> <code>HTML</code> 変換を行いGithubpageにホスティングする形でやっておりましたが、Tinkererの部分を<a href="https://github.com/getpelican/pelican">Pelican</a>に移行しました。</p>
<p>移行の際にやったことをメモしておきます。</p>
<p>ちなみに、以下のものはすでに使えることを前提にします。</p>
<ul>
<li>pyenv, pyenv-virtualenv</li>
<li>git</li>
<li>githubpage</li>
</ul>
<p><strong>2014/09/06</strong>
一部タイポと文言を修正しました</p>
<hr>
<p>これまでしばらくSphinxベースの<a href="http://tinkerer.me/">Tinkerer</a>を使って<code>ReST</code> -> <code>HTML</code> 変換を行いGithubpageにホスティングする形でやっておりましたが、Tinkererの部分を<a href="https://github.com/getpelican/pelican">Pelican</a>に移行しました。</p>
<p>移行の際にやったことをメモしておきます。</p>
<p>ちなみに、以下のものはすでに使えることを前提にします。</p>
<ul>
<li>pyenv, pyenv-virtualenv</li>
<li>git</li>
<li>githubpage</li>
</ul>
<h2>Pelicanのインストール</h2>
<ol>
<li>
<p>python2.7系最新をインストール(3系の対応が完璧でないっぽいため) </p>
<div class="highlight"><pre><span></span><code><span class="c1"># 最新版を確認</span>
% pyenv install -l <span class="p">|</span> grep <span class="m">2</span>.7
% pyenv install <span class="m">2</span>.7.8
% pyenv virtualenv <span class="m">2</span>.7.8 pelican
</code></pre></div>
</li>
<li>
<p>作業ディレクトリを適当に作成</p>
<div class="highlight"><pre><span></span><code>% mkdir -p ~/work/blog
% <span class="nb">cd</span> ~/work/blog
% pyenv <span class="nb">local</span> pelican
</code></pre></div>
</li>
<li>
<p>Pelicanをインストール</p>
<div class="highlight"><pre><span></span><code><span class="c1">## Pelican 本体をインストール</span>
% pip install pelican
<span class="c1">## Markdown も使いたいのでインストール</span>
% pip install markdown
<span class="c1">## plugin, themeもクローン</span>
% git clone https://github.com/getpelican/pelican-plugins.git
% git clone https://github.com/getpelican/pelican-themes.git
</code></pre></div>
<p>これで <code>~/work/blog</code> 配下で pelican コマンドが使えるようになります。</p>
</li>
<li>
<p><code>pelican</code>コマンドが使えるようになったら <code>QuickStart</code> しておきましょう。</p>
<div class="highlight"><pre><span></span><code><span class="o">%</span><span class="w"> </span><span class="n">pelican</span><span class="o">-</span><span class="n">quickstart</span><span class="w"> </span>
<span class="n">Welcome</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="n">pelican</span><span class="o">-</span><span class="n">quickstart</span><span class="w"> </span><span class="n">v3</span><span class="mf">.4.0</span><span class="p">.</span><span class="w"></span>
<span class="n">This</span><span class="w"> </span><span class="n">script</span><span class="w"> </span><span class="n">will</span><span class="w"> </span><span class="n">help</span><span class="w"> </span><span class="n">you</span><span class="w"> </span><span class="k">create</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Pelican</span><span class="o">-</span><span class="n">based</span><span class="w"> </span><span class="n">website</span><span class="p">.</span><span class="w"></span>
<span class="n">Please</span><span class="w"> </span><span class="n">answer</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">following</span><span class="w"> </span><span class="n">questions</span><span class="w"> </span><span class="n">so</span><span class="w"> </span><span class="n">this</span><span class="w"> </span><span class="n">script</span><span class="w"> </span><span class="n">can</span><span class="w"> </span><span class="n">generate</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">files</span><span class="w"></span>
<span class="n">needed</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">Pelican</span><span class="p">.</span><span class="w"></span>
<span class="o">></span><span class="w"> </span><span class="k">Where</span><span class="w"> </span><span class="n">do</span><span class="w"> </span><span class="n">you</span><span class="w"> </span><span class="n">want</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="k">create</span><span class="w"> </span><span class="n">your</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">web</span><span class="w"> </span><span class="n">site</span><span class="vm">?</span><span class="w"> </span><span class="o">[</span><span class="n">.</span><span class="o">]</span><span class="w"> </span>
<span class="o">></span><span class="w"> </span><span class="n">What</span><span class="w"> </span><span class="n">will</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">title</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="n">this</span><span class="w"> </span><span class="n">web</span><span class="w"> </span><span class="n">site</span><span class="vm">?</span><span class="w"> </span><span class="n">続</span><span class="err">・</span><span class="n">ラフなラボ</span><span class="w"></span>
<span class="o">></span><span class="w"> </span><span class="n">Who</span><span class="w"> </span><span class="n">will</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">author</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="n">this</span><span class="w"> </span><span class="n">web</span><span class="w"> </span><span class="n">site</span><span class="vm">?</span><span class="w"> </span><span class="n">Kei</span><span class="w"> </span><span class="n">Iwasaki</span><span class="w"></span>
<span class="o">></span><span class="w"> </span><span class="n">What</span><span class="w"> </span><span class="n">will</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="k">default</span><span class="w"> </span><span class="k">language</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="n">this</span><span class="w"> </span><span class="n">web</span><span class="w"> </span><span class="n">site</span><span class="vm">?</span><span class="w"> </span><span class="o">[</span><span class="n">en</span><span class="o">]</span><span class="w"> </span><span class="n">ja</span><span class="w"></span>
<span class="o">></span><span class="w"> </span><span class="n">Do</span><span class="w"> </span><span class="n">you</span><span class="w"> </span><span class="n">want</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="n">specify</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">URL</span><span class="w"> </span><span class="k">prefix</span><span class="vm">?</span><span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="n">g</span><span class="p">.,</span><span class="w"> </span><span class="nl">http</span><span class="p">:</span><span class="o">//</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="w"> </span><span class="p">(</span><span class="n">Y</span><span class="o">/</span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="n">n</span><span class="w"></span>
<span class="o">></span><span class="w"> </span><span class="n">Do</span><span class="w"> </span><span class="n">you</span><span class="w"> </span><span class="n">want</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="n">enable</span><span class="w"> </span><span class="n">article</span><span class="w"> </span><span class="n">pagination</span><span class="vm">?</span><span class="w"> </span><span class="p">(</span><span class="n">Y</span><span class="o">/</span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="n">n</span><span class="w"></span>
<span class="o">></span><span class="w"> </span><span class="n">Do</span><span class="w"> </span><span class="n">you</span><span class="w"> </span><span class="n">want</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="n">generate</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">Fabfile</span><span class="o">/</span><span class="n">Makefile</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="n">automate</span><span class="w"> </span><span class="n">generation</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">publishing</span><span class="vm">?</span><span class="w"> </span><span class="p">(</span><span class="n">Y</span><span class="o">/</span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="n">Y</span><span class="w"></span>
<span class="o">></span><span class="w"> </span><span class="n">Do</span><span class="w"> </span><span class="n">you</span><span class="w"> </span><span class="n">want</span><span class="w"> </span><span class="n">an</span><span class="w"> </span><span class="n">auto</span><span class="o">-</span><span class="n">reload</span><span class="w"> </span><span class="o">&</span><span class="w"> </span><span class="n">simpleHTTP</span><span class="w"> </span><span class="n">script</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="n">assist</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="n">theme</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">site</span><span class="w"> </span><span class="n">development</span><span class="vm">?</span><span class="w"> </span><span class="p">(</span><span class="n">Y</span><span class="o">/</span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="n">Y</span><span class="w"></span>
<span class="o">></span><span class="w"> </span><span class="n">Do</span><span class="w"> </span><span class="n">you</span><span class="w"> </span><span class="n">want</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="n">upload</span><span class="w"> </span><span class="n">your</span><span class="w"> </span><span class="n">website</span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">FTP</span><span class="vm">?</span><span class="w"> </span><span class="p">(</span><span class="n">y</span><span class="o">/</span><span class="n">N</span><span class="p">)</span><span class="w"> </span><span class="n">N</span><span class="w"></span>
<span class="o">></span><span class="w"> </span><span class="n">Do</span><span class="w"> </span><span class="n">you</span><span class="w"> </span><span class="n">want</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="n">upload</span><span class="w"> </span><span class="n">your</span><span class="w"> </span><span class="n">website</span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">SSH</span><span class="vm">?</span><span class="w"> </span><span class="p">(</span><span class="n">y</span><span class="o">/</span><span class="n">N</span><span class="p">)</span><span class="w"> </span><span class="n">N</span><span class="w"></span>
<span class="o">></span><span class="w"> </span><span class="n">Do</span><span class="w"> </span><span class="n">you</span><span class="w"> </span><span class="n">want</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="n">upload</span><span class="w"> </span><span class="n">your</span><span class="w"> </span><span class="n">website</span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">Dropbox</span><span class="vm">?</span><span class="w"> </span><span class="p">(</span><span class="n">y</span><span class="o">/</span><span class="n">N</span><span class="p">)</span><span class="w"> </span><span class="n">N</span><span class="w"></span>
<span class="o">></span><span class="w"> </span><span class="n">Do</span><span class="w"> </span><span class="n">you</span><span class="w"> </span><span class="n">want</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="n">upload</span><span class="w"> </span><span class="n">your</span><span class="w"> </span><span class="n">website</span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">S3</span><span class="vm">?</span><span class="w"> </span><span class="p">(</span><span class="n">y</span><span class="o">/</span><span class="n">N</span><span class="p">)</span><span class="w"> </span><span class="n">N</span><span class="w"></span>
<span class="o">></span><span class="w"> </span><span class="n">Do</span><span class="w"> </span><span class="n">you</span><span class="w"> </span><span class="n">want</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="n">upload</span><span class="w"> </span><span class="n">your</span><span class="w"> </span><span class="n">website</span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">Rackspace</span><span class="w"> </span><span class="n">Cloud</span><span class="w"> </span><span class="n">Files</span><span class="vm">?</span><span class="w"> </span><span class="p">(</span><span class="n">y</span><span class="o">/</span><span class="n">N</span><span class="p">)</span><span class="w"> </span><span class="n">N</span><span class="w"></span>
<span class="o">></span><span class="w"> </span><span class="n">Do</span><span class="w"> </span><span class="n">you</span><span class="w"> </span><span class="n">want</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="n">upload</span><span class="w"> </span><span class="n">your</span><span class="w"> </span><span class="n">website</span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">GitHub</span><span class="w"> </span><span class="n">Pages</span><span class="vm">?</span><span class="w"> </span><span class="p">(</span><span class="n">y</span><span class="o">/</span><span class="n">N</span><span class="p">)</span><span class="w"> </span><span class="n">y</span><span class="w"></span>
<span class="o">></span><span class="w"> </span><span class="k">Is</span><span class="w"> </span><span class="n">this</span><span class="w"> </span><span class="n">your</span><span class="w"> </span><span class="n">personal</span><span class="w"> </span><span class="n">page</span><span class="w"> </span><span class="p">(</span><span class="n">username</span><span class="p">.</span><span class="n">github</span><span class="p">.</span><span class="n">io</span><span class="p">)</span><span class="vm">?</span><span class="w"> </span><span class="p">(</span><span class="n">y</span><span class="o">/</span><span class="n">N</span><span class="p">)</span><span class="w"> </span><span class="n">y</span><span class="w"></span>
<span class="n">Done</span><span class="p">.</span><span class="w"> </span><span class="n">Your</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">project</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">available</span><span class="w"> </span><span class="k">at</span><span class="w"> </span><span class="o">~/</span><span class="k">work</span><span class="o">/</span><span class="n">blog</span><span class="w"></span>
</code></pre></div>
<p>するとだいたい以下のような感じでファイルが生成されると思います。</p>
<div class="highlight"><pre><span></span><code>~/work/blog
├── content
├── develop_server.sh
├── fabfile.py
├── Makefile
├── output
├── pelicanconf.py
└── publishconf.py
</code></pre></div>
</li>
</ol>
<h2>TinkererからReSTファイルを移行</h2>
<p>PelicanはReST、Markdownともにサポートしてますし、TinkererはSphinxベースのツールで元々ReSTはサポートしています。
ただ、微妙に方言に違いがあってTinkererで使ってた<code>*.rst</code>ファイルをそのままPelicanでビルドしようとすると落っこちます。
また、デフォルト設定だとTinkerer管理のような <code>content/YYYY/MM/DD/<slug>.rst</code> の形式も日付や生成されるファイルのパス情報として読み込んでくれないかったり、画像ファイルを各日付ごとのディレクトリにおいても特に面倒は見てくれません。
そのへん自力でなんとかする必要があります。(軽く調べた感じ、特に移行ツールなどは見つかりませんでした...)</p>
<h3>ReSTファイルのコンバート, 画像ファイルの移動</h3>
<p>一部ファイル書き換え程度ならシェル芸でさくっと行けたかもしれないですが、
ファイルの内容を違う行に移動させるのが流石にしんどかったので、今回はやっつけなpythonスクリプトを書きかました。<em>※pyenv-virtualenv 環境に合わせるため2.7系で書いてます。</em></p>
<p><a href="https://github.com/laughk/tinker2pelican-rst">laughk/tinker2pelican-rst</a></p>
<p>基本的にこちらの<code>README.md</code> に従っていけば、とりあえずコンテンツの移行はできると思います。</p>
<h3>Githubpage向けのファイルを移行</h3>
<p>Githubpage を利用してホスティングする際に必要な静的ファイルも移行します。
<code>output</code> ディレクトリ配下を git 管理することになるので私の場合はHTMLを生成する際に一緒に生成されるようにしています。</p>
<p>そのため以下のような感じでファイルを置き、<code>pelicanconf.py</code> の設定をしています。</p>
<ul>
<li>
<p>ファイル</p>
<div class="highlight"><pre><span></span><code>~/work/blog/content/extra
|---- empty (空ファイル, Githubpage用 .nojekyllとして利用する。)
|---- gitignore (output用のgitignore)
|---- CNAME (Githubpage用の CNAMEファイル)
`---- gooleXXXXXXXX (GoogleAnalytics用のの静的HTMLファイル。テンプレート扱いされないように拡張子はなし)
</code></pre></div>
</li>
<li>
<p>pelicanconf.py</p>
<div class="highlight"><pre><span></span><code><span class="n">EXTRA_PATH_METADATA</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">'images'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'path'</span><span class="p">:</span> <span class="s1">'images'</span> <span class="p">},</span>
<span class="s1">'extra/CNAME'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'path'</span><span class="p">:</span> <span class="s1">'CNAME'</span> <span class="p">},</span> <span class="c1"># for original domain</span>
<span class="s1">'extra/empty'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'path'</span><span class="p">:</span> <span class="s1">'.nojekyll'</span> <span class="p">},</span> <span class="c1"># for Githubpage</span>
<span class="s1">'extra/gitignore'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'path'</span><span class="p">:</span> <span class="s1">'.gitignore'</span> <span class="p">},</span> <span class="c1"># for Githubpage</span>
<span class="s1">'extra/gooleXXXXXXXX'</span><span class="p">:</span>
<span class="p">{</span><span class="s1">'path'</span><span class="p">:</span> <span class="s1">'gooleXXXXXXXX'</span> <span class="p">},</span> <span class="c1"># for google analytics</span>
<span class="p">}</span>
</code></pre></div>
</li>
</ul>
<h3>試しにブログを生成してブラウザから見てみる</h3>
<p>ここまできたら、一度HTMLファイルを生成してローカルでプレビューしてみます。</p>
<div class="highlight"><pre><span></span><code>% pelican content -S pelicanconf.py -o output
<span class="c1">## pelican-quickstartの際に Makefile を生成していた場合は以下でもOK</span>
% make html
% <span class="nb">cd</span> output <span class="o">&&</span> python -m SimpleHTTPServer
</code></pre></div>
<p>この状態で http://localhost:8000 にアクセスすれば、生成されたブログをブラウザから確認できます。</p>
<h2>設定をいじって自分好みにカスタムしていく</h2>
<p>データの移行ができたらあとは純粋にPelicanを自分用に作りこんでいきます。
詳細なカスタマイズに関しては今回は割愛しますが、公式のドキュメントが充実していたり、テーマも充実しているので色々試してみるのがいいと思います。</p>
<ul>
<li>公式ドキュメント <a href="https://pelican.readthedocs.org/en/3.4.0/">Pelican 3.4.0 — Pelican 3.4.0 documentation</a></li>
<li>テーマ <a href="https://github.com/getpelican/pelican-themes">getpelican/pelican-themes</a></li>
</ul>
<h2>その他テーマをいじっていた時のメモ</h2>
<p>この辺はざっくりと。</p>
<ul>
<li>完全に気に入るようなものは Pelican の充実したテーマの中でも見つからないんで、結局カスタム。</li>
<li><code>pelican-bootstrap3</code> が一番カスタムしやすそうだったので、ベースに導入。</li>
<li><a href="http://www.addthis.com/">Addthis</a> でソーシャルボタンが一発で行けるかと思いきやURLに勝手に <code>#xx-xxxxxxx</code> ってつけられてキモいので削除、自力でテンプレ作成。</li>
<li>広告入れる場合はレスポンシブデザインか小さいサイズにしておかないと思わぬところでデザインが崩れる。</li>
<li>画像もレスポンシブ対策をCSSにしないとデザインが崩れる。</li>
<li><code>pulishconf.py</code> に <code>RELATEVE_URLS = False</code> 入れておかないとホスティングの際にDISCUSのコメント欄が死ぬ (相対パスになっちゃったSITEURLがDISCUS用のJSのパラメータに渡っちゃうため)</li>
<li>生成に必要な部分と生成物はこれまで違うレポジトリで管理していたけど、<code>ghp-import</code> なるものがあったので、生成物を<code>gh-pages</code>ブランチ、設定ファイルや元のMarkdown,ReSTファイルなどは<code>master</code>ブランチという形でレポジトリを統合。</li>
</ul>
<h2>最後に</h2>
<p>単純にTinkererからPelicanに移す場合はReSTの方言に気をつければそこまで手間がかかることではないかもしてませんが、テーマを作りこんだりPelicanそのものの使い勝手がよくわからずはまってしまったり、せっかくの機会だからブランチを意識して一人プルリクフローで作っていったり、各ブランチに違うレポジトリ追加して管理方法を変えてみたりとやっていたら想像以上に大掛かりな作業になってしまいました。。(まるまる4日間)</p>
<p>ただ、Pelicanはテーマも充実していますしMarkdownも使えたり、一部<code>iframe</code>を埋め込もうとするとビルドが落っこちるとかはないので非常によいですね。
MarkdownとReSTの混合状態でもいい感じでビルドしてくれます。MarkdownのGFM対応がちょっと中途半端な感じがあるのが残念ですが、概ね Tinkerer より個人的にしっくり来ています。</p>第一回Ansible勉強会でLTさせてもらった2014-08-10T11:00:00+09:002014-08-10T11:00:00+09:00Kei Iwasakitag:memo.laughk.org,2014-08-10:/articles/2014-08-10-ansible-study01-repo/<ul>
<li><a href="http://ansible-users.connpass.com/event/5968/">Ansible 勉強会 #1</a></li>
<li><a href="http://togetter.com/li/678544">Ansible勉強会 #1 まとめ - Togetterまとめ</a></li>
</ul>
<p>すでに開催から2ヶ月近く経とうとしていますが、自分用の記録として今更書いておきます。
なんかゴメンナサイ。</p>
<ul>
<li><a href="http://ansible-users.connpass.com/event/5968/">Ansible 勉強会 #1</a></li>
<li><a href="http://togetter.com/li/678544">Ansible勉強会 #1 まとめ - Togetterまとめ</a></li>
</ul>
<p>すでに開催から2ヶ月近く経とうとしていますが、自分用の記録として今更書いておきます。
なんかゴメンナサイ。</p>
<p>LTの際に使ったスライドはこちら</p>
<div style="width: 65%">
<script async class="speakerdeck-embed" data-id="604718d0d2c40131cd584eace499ef8a" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>
</div>
<p>実は <a href="http://qiita.com/advent-calendar/2013/ansible">Ansible Advent Calendar 2013</a> で投稿させてもらった以下のものが元ネタだったりします。</p>
<p><a href="http://memo.laughk.org/2013/12/10/ansible_with_infrastructure_engineer.html">あるインフラエンジニアとAnsibleの付き合い方</a></p>
<p>内容としてはあまり突っ込んだことよりも、MSPな人間でも現実的に使えそうで嬉しいよみたいな感じでお話させてもらったつもりです。
踏み台越えの話のところで反応頂いたりしていたようで、当日gkbr状態で緊張しながらもお話させた頂いて本当に良かったなと思っております。</p>
<p>内輪の勉強会では色々話をしていますが、ここまで多数の方の前でお話させていただいたのは初めてで非常に良い機会となりました。
また、実際にAnsibleを運用の現場で使われている話も多数聞くことができて実際のところ自分もまだまだ使いこなせていない部分が多いなとも痛感しました。
個人的には<a href="https://github.com/livedoor/yabitz">Yabitz</a>の存在を知ることができたことも大きかったです。</p>
<p>この2ヶ月の間にも関連の記事もかなり増えてきたり、本が出たりとAnsibleかなり盛り上がってきている感がありますね。
今後はちょっと仕事の関係で使う機会が減るかもしれないですが、ある程度使い慣れている部分もあるので自宅マシンの構成管理とかにはこれからも引き続き使っていきたいです。</p>Arch Linux はじめました2014-05-25T00:00:00+09:002014-05-25T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2014-05-25:/articles/2014-05-25-start_archlinux/<img alt="" src="/images/2014/05/25/screenshot1.png"/>
<div class="line-block">
<div class="line"><tt class="docutils literal">Ubuntu14.04</tt> のリリース情報もあり、</div>
<div class="line">これまでDELL XPS13で使ってきた <tt class="docutils literal">Linux Mint16</tt> 環境をどうしようかなと思っていましたが、</div>
<div class="line">いろいろ考えて <tt class="docutils literal">Linux Mint17</tt> へのアップグレードは行わず、思い切って1週間ほど前に <tt class="docutils literal">ArchLinux</tt> に引っ越しました。</div>
<div class="line">概ね安定して使えてる感じがあります。</div>
<div class="line"><br/></div>
<div class="line">今回はインストールの際の簡単なメモとか、1周間ほど使ってみた感想とか。</div>
<div class="line"><tt class="docutils literal">ArchLinux</tt> は基本的な作業部分は公式 <tt class="docutils literal">Wiki</tt> 見ればほとんど解決できるのであまりそういうことは書かないです。</div>
</div>
<img alt="" src="/images/2014/05/25/screenshot1.png" />
<div class="line-block">
<div class="line"><tt class="docutils literal">Ubuntu14.04</tt> のリリース情報もあり、</div>
<div class="line">これまでDELL XPS13で使ってきた <tt class="docutils literal">Linux Mint16</tt> 環境をどうしようかなと思っていましたが、</div>
<div class="line">いろいろ考えて <tt class="docutils literal">Linux Mint17</tt> へのアップグレードは行わず、思い切って1週間ほど前に <tt class="docutils literal">ArchLinux</tt> に引っ越しました。</div>
<div class="line">概ね安定して使えてる感じがあります。</div>
<div class="line"><br /></div>
<div class="line">今回はインストールの際の簡単なメモとか、1周間ほど使ってみた感想とか。</div>
<div class="line"><tt class="docutils literal">ArchLinux</tt> は基本的な作業部分は公式 <tt class="docutils literal">Wiki</tt> 見ればほとんど解決できるのであまりそういうことは書かないです。</div>
</div>
<div class="section" id="virtualboxos">
<h2>VirtualboxのゲストOSにして練習</h2>
<div class="line-block">
<div class="line">実は1年ほど前にも <tt class="docutils literal">ArchLinux</tt> にはトライしていたのですが、</div>
<div class="line">ちょうど <tt class="docutils literal">sytemd</tt> への以降の時期だったのか公式 <tt class="docutils literal">wiki</tt> の内容が実物とだいぶずれてしまっている感があり</div>
<div class="line">その時は <tt class="docutils literal">GUI</tt> 画面を見ることなく挫折してしまっていました。。</div>
</div>
<div class="line-block">
<div class="line">今回はそういった背景もあり、流石に <tt class="docutils literal">XPS13</tt> にいきなりインストールするのは怖かったので</div>
<div class="line"><tt class="docutils literal">Virtualbox</tt> で実際にインストールを行い、 <tt class="docutils literal">Gnome3</tt> が動くところまで確認。</div>
<div class="line">現在は公式 <tt class="docutils literal">Wiki</tt> に従っていけばだいたい間違いないということを確認できたので、</div>
<div class="line">実機にインストールする踏ん切りがつきました。</div>
</div>
<div class="line-block">
<div class="line">ちなみ、 <tt class="docutils literal">ArchLinux</tt> だと公式リポジトリに <tt class="docutils literal"><span class="pre">virtualbox-guest-addition</span></tt> が用意してあるようで非常にお手軽に試せました。</div>
<div class="line">これさえ入れとけばドライバ周りで引っかかることもないようですし。インストールも以下のような感じでOKでした。</div>
<div class="line">( 詳細は公式 <tt class="docutils literal">wiki</tt> を見るのが一番いいと思います -> <a class="reference external" href="https://wiki.archlinux.org/index.php/VirtualBox_%28%E6%97%A5%E6%9C%AC%E8%AA%9E%29#Arch_Linux_.E3.82.92.E3.82.B2.E3.82.B9.E3.83.88.E3.81.AB.E3.81.99.E3.82.8B">VirtualBox (日本語) - ArchWiki</a> )</div>
</div>
<div class="highlight"><pre><span></span>$ sudo pacman -S virtualbox-guest-utils
$ sudo sh -c <span class="s1">'cat >> /etc/modules-load.d/virtualbox.conf << EOF</span>
<span class="s1">vboxguest</span>
<span class="s1">vboxsf</span>
<span class="s1">vboxvideo</span>
<span class="s1">EOF'</span>
$ <span class="nb">echo</span> <span class="s1">'/usr/bin/VBoxClient-all'</span> >> ~/.xinitrc
</pre></div>
</div>
<div class="section" id="xps13osgui">
<h2>XPS13実機へのOSインストールからGUIインストールまで</h2>
<div class="section" id="os">
<h3>OSのインストール</h3>
<div class="line-block">
<div class="line"><tt class="docutils literal">Arch Linux</tt> は基本的な <tt class="docutils literal">OS</tt> インストールはコンソール越しのコマンドラインで行います。</div>
<div class="line">DVDまたはCDブートがうまくいってネットワーク接続が確保できれば、</div>
<div class="line">基本的には公式 <tt class="docutils literal">Wiki</tt> のインストールガイド( <a class="reference external" href="https://wiki.archlinux.org/index.php/Installation_Guide_%28%E6%97%A5%E6%9C%AC%E8%AA%9E%29">Installation Guide (日本語) - ArchWiki</a> に従えば、基本的な <tt class="docutils literal">Unix</tt> 系のコマンドライン知識で十分行える範囲だとは思います。</div>
</div>
<div class="line-block">
<div class="line">ネットワークに関してはXPS13は物理NICが付いていないのですが、</div>
<div class="line"><tt class="docutils literal">BUFFALO <span class="pre">LUA3-U2-ATX</span></tt> でUSB経由でLANをつないだところ問題なく認識されました。</div>
<div class="line">( 基本的に <tt class="docutils literal">Mac</tt> も対応しているUSB NICであれば認識してくれそうな感じはあります。)</div>
</div>
<iframe src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=laughk-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B002IT5ZPG&internal=1" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe><!-- .. amazonjp:: http://www.amazon.co.jp/gp/product/B002IT5ZPG -->
<div class="line-block">
<div class="line">インストール作業時は <a class="reference external" href="https://wiki.archlinux.org/index.php/Dhcpcd_%28%E6%97%A5%E6%9C%AC%E8%AA%9E%29">dhcpcd (日本語) - ArchWiki</a> の手動起動部分を参考にとりあえず <tt class="docutils literal">DHCP</tt> でインターネットへの接続を確保してしまうのが一番楽だと思います。</div>
<div class="line"><tt class="docutils literal">interface</tt> がわからない場合は <tt class="docutils literal">ls /sys/class/net</tt> するのがいいでしょう。(by <a class="reference external" href="https://wiki.archlinux.org/index.php/Network_configuration">Network configuration - ArchWiki</a>) 。</div>
</div>
<div class="line-block">
<div class="line">ネットワークにつながったら <tt class="docutils literal">Install Guide</tt> を元に基本的なパッケージをどんどん突っ込んでいくことになりますが</div>
<div class="line">とりあえず、これやっときゃいい的なものが知りたい場合、以下の記事がシンプルにまとまっていてわかりやすいです。</div>
<div class="line"><br /></div>
<div class="line"><a class="reference external" href="http://blog.volment.com/?p=47">実は簡単Arch Linuxのインストール手順! | volment</a></div>
</div>
</div>
<div class="section" id="gui">
<h3>GUIインストール</h3>
<div class="line-block">
<div class="line"><tt class="docutils literal">GUI</tt> は <strong>ディスプレイマネージャー</strong> (ログイン時にパスワードを聞かれる画面)と <strong>デスクトップ環境</strong> (<tt class="docutils literal">Gnome</tt> とか <tt class="docutils literal">KDE</tt>)のインストール・設定作業になります。</div>
<div class="line">今回私は <tt class="docutils literal">GDM</tt> と <tt class="docutils literal">Cinnamon</tt> の組み合わせでインストールをしました。</div>
</div>
<div class="line-block">
<div class="line">基本的に <tt class="docutils literal">pacman <span class="pre">-S</span> <displaynamager_name> <desctop_name></tt> でインストールすればOKなのですが、</div>
<div class="line">この際に他にも必要になりそうなものは入れておくといいかもしれません。</div>
<div class="line">特にトラックパッドを使いたい場合、ちゃんとドライバを入れとかないとマウスポインタが使えないんで要注意です。</div>
<div class="line">(参考: <a class="reference external" href="https://wiki.archlinux.org/index.php/Touchpad_Synaptics_%28%E6%97%A5%E6%9C%AC%E8%AA%9E%29">Touchpad Synaptics (日本語) - ArchWiki</a> )</div>
<div class="line">また、 <tt class="docutils literal">Ubuntu</tt> 等他のディストリビューションでは <tt class="docutils literal">GUI</tt> 環境にほぼデフォルトで <tt class="docutils literal">Terminal エミュレータ</tt> が付属されていますが、</div>
<div class="line">少なくとも <tt class="docutils literal">ArchLinux</tt> インストールの際はついてこないので、各環境で利用できる <tt class="docutils literal">Termin エミュレータ</tt> も入れとかないと <tt class="docutils literal">GUI</tt> ログインしてからいろいろ面倒なことになります。</div>
<div class="line">使えそうなものは <tt class="docutils literal">pacman <span class="pre">-Ss</span> terminal</tt> などで探してみるのがいいでしょう。</div>
</div>
<div class="line-block">
<div class="line">あとは一般ユーザーの作成がまだだった場合は、 <tt class="docutils literal">GUI</tt> インストール前に追加しておきましょう。</div>
<div class="line">必要であれば同時にこの段階で <tt class="docutils literal">sudo</tt> 権限も付与しときましょう。</div>
</div>
</div>
<div class="section" id="gui-1">
<h3>GUIインストール後の基本的なところ</h3>
<p><tt class="docutils literal">GUI</tt> ログインができるようになったら、あとは基本的な環境構築をやってく感じで
この辺から他のディストリビューションとの難易度的な差がなくなってきます。
むしろ公式 <tt class="docutils literal">Wiki</tt> が充実しているのでかえって楽にさえ感じてくるかもしれないです。
だいたいやったことを上げてみると</p>
<ul>
<li><p class="first"><tt class="docutils literal">Cinnamon</tt> の設定からいじれるように <tt class="docutils literal">NetworkManager</tt> をインストール&有効化</p>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">Openvpn</tt> の追加</dt>
<dd><p class="first last">GUIから設定できるように <tt class="docutils literal"><span class="pre">networkmanager-openvpn</span></tt> を入れる。詳細はこちら <a class="reference external" href="https://wiki.archlinux.org/index.php/NetworkManager_%28%E6%97%A5%E6%9C%AC%E8%AA%9E%29">NetworkManager (日本語) - ArchWiki</a></p>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">AUR</tt> を利用するため <tt class="docutils literal">yaourt</tt> をインストール。</dt>
<dd><p class="first last"><a class="reference external" href="https://wiki.archlinux.org/index.php/Yaourt_%28%E6%97%A5%E6%9C%AC%E8%AA%9E%29">Yaourt (日本語) - ArchWiki</a> を参照</p>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>半透明に設定したいツールの対応。</dt>
<dd><div class="first line-block">
<div class="line"><tt class="docutils literal"><span class="pre">Gnome-Terminal</span></tt> が最新だと <tt class="docutils literal">Transparent</tt> オプションがなくなってしまっていたので <tt class="docutils literal">devilspie</tt> を導入。 <tt class="docutils literal"><span class="pre">~/.devilspie/opacity.ds</span></tt> とかを作って以下のように記載。</div>
<div class="line">あとは <tt class="docutils literal"><span class="pre">~/.xprofile</span></tt> なり <tt class="docutils literal">Cinnamon</tt> の自動起動するアプリケーションなりにログイン時に <tt class="docutils literal">devilspie</tt> を起動するようにしておけばOK。</div>
<div class="line">(ついでに <tt class="docutils literal">Gvim</tt> も一緒に対応)</div>
</div>
<div class="last"><div class="highlight"><pre><span></span><span class="p">(</span><span class="k">if</span><span class="w"></span>
<span class="w"> </span><span class="p">(</span><span class="nv">matches</span><span class="w"> </span><span class="p">(</span><span class="nv">window_class</span><span class="p">)</span><span class="w"> </span><span class="s">"Gnome-terminal"</span><span class="p">)</span><span class="w"></span>
<span class="w"> </span><span class="p">(</span><span class="nv">opacity</span><span class="w"> </span><span class="mi">90</span><span class="p">)</span><span class="w"></span>
<span class="p">)</span><span class="w"></span>
<span class="p">(</span><span class="k">if</span><span class="w"></span>
<span class="w"> </span><span class="p">(</span><span class="nv">matches</span><span class="w"> </span><span class="p">(</span><span class="nv">window_class</span><span class="p">)</span><span class="w"> </span><span class="s">"Gvim"</span><span class="p">)</span><span class="w"></span>
<span class="w"> </span><span class="p">(</span><span class="nv">opacity</span><span class="w"> </span><span class="mi">85</span><span class="p">)</span><span class="w"></span>
<span class="p">)</span><span class="w"></span>
</pre></div>
</div></dd>
</dl>
</li>
<li><p class="first">日本語入力をするため <tt class="docutils literal"><span class="pre">mozc-ut</span></tt> をインストール</p>
</li>
<li><dl class="first docutils">
<dt>日本語対応フォントをインストール</dt>
<dd><ul class="first last simple">
<li><dl class="first docutils">
<dt><tt class="docutils literal">UI</tt> 周り</dt>
<dd><tt class="docutils literal">Takaoフォント</tt>, <tt class="docutils literal">IPAフォント</tt>, <tt class="docutils literal">MSフォント</tt> とか</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>作業環境</dt>
<dd><tt class="docutils literal">Ricty</tt>, <tt class="docutils literal">Dejavu Sans</tt>, <tt class="docutils literal"><span class="pre">aur/powerline-fonts-git</span></tt> とか( <tt class="docutils literal"><span class="pre">powerline-font</span></tt> があるのが地味に嬉しい )</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>絵文字関連</dt>
<dd><tt class="docutils literal"><span class="pre">ttf-symbol</span></tt>, <tt class="docutils literal"><span class="pre">ttf-freefont</span></tt> とか (これでも一部化ける。。)</dd>
</dl>
</li>
</ul>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>キーバインド変更</dt>
<dd><p class="first last">右Altで入力言語の切り替えをしたかったので <tt class="docutils literal"><span class="pre">~/.Xmodmap</span></tt> を編集して <tt class="docutils literal">Alt_R</tt> を <tt class="docutils literal">Zenkaku_Hankaku</tt> にバインド。
<tt class="docutils literal"><span class="pre">~/.xprofile</span></tt> なりに <tt class="docutils literal">xmodmap <span class="pre">$HOME/.Xmodmap</span></tt> を追記するのを忘れずに。</p>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>ビットマップフォントのアンチエイリアスを有効化</dt>
<dd><div class="first line-block">
<div class="line">個人的にビットマップフォントまんまは見づらい。。ここは公式の情報を漁ってみるもいいものに出会えず。</div>
<div class="line"><a class="reference external" href="http://archlinux-blogger.blogspot.jp/2013/08/arch-linux.html">普段使いのArch Linux: Arch Linuxで日本語フォントを設定 | 日本語フォントのインストール&見やすく表示する設定</a> を参考にさせてもらったところうまく行った。</div>
<div class="line">以下の内容の <tt class="docutils literal"><span class="pre">~/.config/fontconfig/fonts.conf</span></tt> を追加する感じで。</div>
</div>
<div class="last"><div class="highlight"><pre><span></span><span class="cp"><?xml version="1.0"?></span>
<span class="nt"><fontconfig></span>
<span class="nt"><match</span> <span class="na">target=</span><span class="s">"font"</span><span class="nt">></span>
<span class="nt"><edit</span> <span class="na">mode=</span><span class="s">"assign"</span> <span class="na">name=</span><span class="s">"embeddedbitmap"</span><span class="nt">></span>
<span class="nt"><bool></span>false<span class="nt"></bool></span>
<span class="nt"></edit></span>
<span class="nt"><edit</span> <span class="na">mode=</span><span class="s">"assign"</span> <span class="na">name=</span><span class="s">"hintstyle"</span><span class="nt">></span>
<span class="nt"><const></span>hintnone<span class="nt"></const></span>
<span class="nt"></edit></span>
<span class="nt"></match></span>
<span class="nt"></fontconfig></span>
</pre></div>
</div></dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">VMware Player</tt> のインストール</dt>
<dd><div class="first last line-block">
<div class="line"><a class="reference external" href="https://my.vmware.com/jp/web/vmware/downloads">公式</a> から64bitバイナリ を取得して、インストール。</div>
<div class="line">注意点があるので、そこは <a class="reference external" href="https://wiki.archlinux.org/index.php/VMware">VMware - ArchWiki</a> を参照しながらやればOK</div>
<div class="line">ただし、現状ゲストの <tt class="docutils literal">Windows8.1</tt> を一回起動すると <tt class="docutils literal">Super</tt> キーがホールドされてるようなおかしな状態になってしまう。。 (解決法調査中)</div>
</div>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">VirtualBox</tt> のインストール</dt>
<dd><p class="first last"><tt class="docutils literal">pacman</tt> の <tt class="docutils literal">community</tt> レポジトリにあったのでコマンド一発でOK。</p>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>その他普段使いのツールたち</dt>
<dd><ul class="first last simple">
<li><dl class="first docutils">
<dt><tt class="docutils literal">Gvim</tt></dt>
<dd>メインで使ってるエディタ</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">Atom</tt></dt>
<dd><tt class="docutils literal">Github</tt> 的なあれ。 <tt class="docutils literal">AUR</tt> に <tt class="docutils literal"><span class="pre">atom-editor</span></tt> という名前ですでに登録済みでびっくり。</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">Dropbox</tt></dt>
<dd><tt class="docutils literal">Cinnamon</tt> レポジトリにもあるけど、そちらはインストールがコケるので通常レポジトリのものでOK</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">firefox</tt></dt>
<dd><tt class="docutils literal">Web</tt> ブラウザ</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">Chromium</tt></dt>
<dd><tt class="docutils literal">Web</tt> ブラウザ</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">Google Chrome</tt></dt>
<dd><tt class="docutils literal">Web</tt> ブラウザ、 <tt class="docutils literal">AUR</tt> を使うと最新の <tt class="docutils literal">deb</tt> からインストールしてくれる</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">KeepassX2</tt></dt>
<dd>マルチプラットフォームなパスワード管理ツール。
<tt class="docutils literal">AUR</tt> にある2系対応 <tt class="docutils literal">KeepassX</tt> 。 アルファ版らしいが十分実用レベルで問題なし</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">Synapse</tt></dt>
<dd><tt class="docutils literal">Linux</tt> 版の <tt class="docutils literal">Alfred</tt> 的なランチャー。多分こいつが現状開発が活発っぽい</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">Zeal</tt></dt>
<dd><tt class="docutils literal">Linux</tt> 版の <tt class="docutils literal">Dash</tt> 的なドキュメントブラウザー</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">Growl for Linux</tt></dt>
<dd><tt class="docutils literal">weechat</tt> の通知を受けたいので必須。 <tt class="docutils literal">AUR</tt> にある</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">Remina</tt></dt>
<dd><tt class="docutils literal">Windows</tt> サーバにリモデする際に必要</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal"><span class="pre">gnome-screenshot</span></tt></dt>
<dd>スクリーンショットツール
<tt class="docutils literal">Cinnamon</tt> 単体だと入ってないので必須</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">evince</tt></dt>
<dd><tt class="docutils literal">PDF</tt> ビュワー</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">gThumb</tt></dt>
<dd><tt class="docutils literal">jpg</tt> 、 <tt class="docutils literal">png</tt> などの画像ファイルビュワー</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">GIMP</tt></dt>
<dd>定番画像加工ツール。</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">Inkscape</tt></dt>
<dd>定番お絵かきツール。</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">LibreOffice</tt></dt>
<dd>定番フリーのオフィスツール。
<tt class="docutils literal">VM</tt> の <tt class="docutils literal">Windows</tt> を使うまでもないときはやっぱ必要</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">Rhythmbox</tt></dt>
<dd>ローカルの音楽ファイル再生用</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">p7zip</tt></dt>
<dd><tt class="docutils literal">7zip</tt> 扱うときに</dd>
</dl>
</li>
</ul>
</dd>
</dl>
</li>
</ul>
<p>こんなところでしょうか。</p>
</div>
</div>
<div class="section" id="section-1">
<h2>感想とかいろいろ</h2>
<div class="line-block">
<div class="line">ディストリ変更の理由としては、普段使いには <tt class="docutils literal">Mint</tt> 使いやすいなーとは思うのですが、</div>
<div class="line">最近だと <tt class="docutils literal">VMware</tt> 環境があったり、 <tt class="docutils literal">tmux</tt> や <tt class="docutils literal">git</tt> の最新を追っかけるの関係であまり <tt class="docutils literal">apt</tt> 経由でアプリを入れる機会も減ってきていたこと</div>
<div class="line">あと、やはり <tt class="docutils literal">OS</tt> のバージョンが上がるたびにクリインストールするのもいい加減しんどいなというあたりがあります。</div>
<div class="line">だいぶ前に <a class="reference external" href="http://laugh-labo.blogspot.jp/2013/04/linuxmintultrabook.html">ラフなラボ: いい感じのLinuxMintなUltrabook環境を手に入れた</a> を書いた時もこのあと1週間後にはバージョンアップのためにクリインストールしてたりとかします。</div>
</div>
<div class="line-block">
<div class="line">実際インストールしてみると結構面倒な作業を通過しなければいけないですが、</div>
<div class="line">今までデスクトップ、サーバ含め <tt class="docutils literal">Linux</tt> を使ってきて気に入っているものを自分で寄せ集めて環境つくりやすい面では <tt class="docutils literal">ArchLinux</tt> よいですね。</div>
<div class="line"><tt class="docutils literal">AUR</tt> レポジトリを見ているとかなり最新のものも含まれていたりするので、パッケージの管理も非常にやりやすそうな感じです。</div>
<div class="line">かといって定番のパッケージなども公式のレポジトリに含まれているので <tt class="docutils literal">pacman</tt> 経由でさくっとインストールでき、非常に使いやすい印象もあります。</div>
<div class="line"><tt class="docutils literal">Ubuntu</tt> や <tt class="docutils literal">Mint</tt> を使っていても結局カリカリに自分の環境を作りこんでいく方は <tt class="docutils literal">ArchLinux</tt> いいんじゃないかなと思います。</div>
<div class="line">( そいうった意味では <tt class="docutils literal">Gentoo Linux</tt> も魅力的ですね。)</div>
</div>
<div class="line-block">
<div class="line">デスクトップ環境は <tt class="docutils literal">Cinnamon</tt> なのでぶっちゃけ見た目はそれほど変わってないですが</div>
<div class="line">試したいツールや、最新の状態に保っておくにはかなりやりやすそうな感じがあって今の私のニーズ的にはいい感じです。</div>
<div class="line">今後はしばらく <tt class="docutils literal">XPS13</tt> は <tt class="docutils literal">ArchLinux</tt> + <tt class="docutils literal">Cinnamon</tt> 行ってみようと思います。</div>
</div>
</div>
シェルスクリプトが '> $logfile 2>&1' だらけにならなくて済んだ話2014-04-24T00:00:00+09:002014-04-24T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2014-04-24:/articles/2014-04-24-shell_exec_log/<dl class="docutils">
<dt>※ 2014-04-26</dt>
<dd><div class="first last line-block">
<div class="line">追記並びに一部コマンド部分の修正を行いました。( <tt class="docutils literal">></tt> => <tt class="docutils literal">>></tt> に変更 )</div>
<div class="line">個人用のチラシの裏のつもりが予想以上に反響いただいていたようで非常にびっくりしております。</div>
</div>
</dd>
</dl>
<div class="line-block">
<div class="line">ちょっとしたバッチ処理的なものはさくっとシェルスクリプトでやっています。</div>
<div class="line">で、ログをとっておくべくリダイレクトを噛ますわけですが、</div>
<div class="line">スマートに書く方法を調べたのでメモ。</div>
</div>
<div class="line-block">
<div class="line">元ネタは <a class="reference external" href="https://twitter.com/sechiro">@sechiro</a> さんの <a class="reference external" href="http://sechiro.hatenablog.com/entry/2013/08/15/bash%E3%81%AE%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E7%BD%AE%E6%8F%9B%E6%A9%9F%E8%83%BD%E3%82%92%E6%B4%BB%E7%94%A8%E3%81%97%E3%81%A6%E3%80%81%E3%82%B7%E3%82%A7%E3%83%AB%E4%BD%9C%E6%A5%AD%E3%82%84%E3%82%B9">bashのプロセス置換機能を活用して、シェル作業やスクリプト書きを効率化する</a> でございます。</div>
<div class="line">本当に参考になりました。ありがとうございます。</div>
</div>
<dl class="docutils">
<dt>※ 2014-04-26</dt>
<dd><div class="first last line-block">
<div class="line">追記並びに一部コマンド部分の修正を行いました。( <tt class="docutils literal">></tt> => <tt class="docutils literal">>></tt> に変更 )</div>
<div class="line">個人用のチラシの裏のつもりが予想以上に反響いただいていたようで非常にびっくりしております。</div>
</div>
</dd>
</dl>
<div class="line-block">
<div class="line">ちょっとしたバッチ処理的なものはさくっとシェルスクリプトでやっています。</div>
<div class="line">で、ログをとっておくべくリダイレクトを噛ますわけですが、</div>
<div class="line">スマートに書く方法を調べたのでメモ。</div>
</div>
<div class="line-block">
<div class="line">元ネタは <a class="reference external" href="https://twitter.com/sechiro">@sechiro</a> さんの <a class="reference external" href="http://sechiro.hatenablog.com/entry/2013/08/15/bash%E3%81%AE%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E7%BD%AE%E6%8F%9B%E6%A9%9F%E8%83%BD%E3%82%92%E6%B4%BB%E7%94%A8%E3%81%97%E3%81%A6%E3%80%81%E3%82%B7%E3%82%A7%E3%83%AB%E4%BD%9C%E6%A5%AD%E3%82%84%E3%82%B9">bashのプロセス置換機能を活用して、シェル作業やスクリプト書きを効率化する</a> でございます。</div>
<div class="line">本当に参考になりました。ありがとうございます。</div>
</div>
<div class="section" id="section-1">
<h2>今までは</h2>
<p>こんなことやってたわけです。</p>
<div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span>
<span class="nv">LOGFILE</span><span class="o">=</span>/tmp/script-log
command1 >> <span class="nv">$LOGFILE</span> <span class="m">2</span>><span class="p">&</span><span class="m">1</span>
command2 >> <span class="nv">$LOGFILE</span> <span class="m">2</span>><span class="p">&</span><span class="m">1</span>
... >> <span class="nv">$LOGFILE</span> <span class="m">2</span>><span class="p">&</span><span class="m">1</span>
... >> <span class="nv">$LOGFILE</span> <span class="m">2</span>><span class="p">&</span><span class="m">1</span>
... >> <span class="nv">$LOGFILE</span> <span class="m">2</span>><span class="p">&</span><span class="m">1</span>
... >> <span class="nv">$LOGFILE</span> <span class="m">2</span>><span class="p">&</span><span class="m">1</span>
</pre></div>
<p>まあ1,2行くらいならいいのですが、これが5行超えてくるともう編集するのも読むのも嫌になってきます。
この辺調べてみると、 <tt class="docutils literal">exec</tt> コマンド <span class="strike">によるプロセス置換 で</span> で出力を変更してあげると良いようです。</p>
<dl class="docutils">
<dt><tt class="docutils literal"><span class="pre">2014-04-26</span></tt> 追記</dt>
<dd>下の例で出しています <tt class="docutils literal">awk</tt> によるフィルタリングはプロセス置換にあたるようですが、
単純なログのリダイレクト部分については <tt class="docutils literal">bash</tt> の組み込みコマンド <tt class="docutils literal">exec</tt> によるリダイレクト指定の際の挙動のようで
プロセス置換とは別物のようです。勉強不足ですみません。。</dd>
</dl>
</div>
<div class="section" id="exec">
<h2>execで解決</h2>
<div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span>
<span class="nv">LOGFILE</span><span class="o">=</span>/tmp/script-log
<span class="nb">exec</span> <span class="m">1</span>> ><span class="o">(</span>cat >> <span class="nv">$LOGFILE</span><span class="o">)</span>
<span class="nb">exec</span> <span class="m">2</span>> ><span class="o">(</span>cat >> <span class="nv">$LOGFILE</span><span class="o">)</span>
command1
command2
...
...
...
</pre></div>
<div class="line-block">
<div class="line">こんな感じで書けます。</div>
<div class="line">さらに <tt class="docutils literal">awk</tt> も使って以下のようにすると、ログの各行の先頭に</div>
<div class="line"><tt class="docutils literal"><span class="pre">[YYYY-mm-dd</span> HH:MM:SS]</tt> のようにタイムスタンプも付けられます。</div>
</div>
<div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span>
<span class="nv">LOGFILE</span><span class="o">=</span>/tmp/script-log
<span class="nb">exec</span> <span class="m">1</span>> ><span class="o">(</span>awk <span class="s1">'{print strftime("[%Y-%m-%d %H:%M:%S] "),$0 } { fflush() } '</span> >> <span class="nv">$LOGFILE</span><span class="o">)</span>
<span class="nb">exec</span> <span class="m">2</span>> ><span class="o">(</span>awk <span class="s1">'{print strftime("[%Y-%m-%d %H:%M:%S] "),$0 } { fflush() } '</span> >> <span class="nv">$LOGFILE</span><span class="o">)</span>
command1
command2
...
...
...
</pre></div>
<div class="line-block">
<div class="line"><tt class="docutils literal">tee</tt> コマンドを使えば出力を保ちながらロギングとかもできそうです。</div>
<div class="line">ただしこの出力の変更は <tt class="docutils literal">bash</tt> の機能らしく、シバンを <tt class="docutils literal"><span class="pre">#!/bin/sh</span></tt> にすると</div>
<div class="line"><tt class="docutils literal">Syntax error: redirection unexpected</tt> が返って来てうまく処理が動かないので</div>
<div class="line"><tt class="docutils literal"><span class="pre">#!/bin/bash</span></tt> と書く必要が有ります。</div>
</div>
</div>
<div class="section" id="section-2">
<h2>最後に</h2>
<p>ちょこちょこ処理が増えてきてしまうと
すぐに <tt class="docutils literal">>> $logfile <span class="pre">2>&1</span></tt> まみれになってしまっていたシェルスクリプトがようやくスッキリ書けるようになりました。
<tt class="docutils literal">exec</tt> によるプロセス置換は他にも応用が効きそうなのでもっと調べると色々捗りそうです。</p>
</div>
<div class="section" id="section-3">
<h2>2014-04-26 追記</h2>
<p>コメントにて更に素敵な方法を紹介していただけました。
<tt class="docutils literal">exec</tt> 利用でもさらにシンプルな記載ができ、 また <tt class="docutils literal">{}</tt> を使った記載方法もあるようです。</p>
<ul>
<li><dl class="first docutils">
<dt>もっとシンプルな <tt class="docutils literal">exec</tt></dt>
<dd><p class="first"><tt class="docutils literal">awk</tt> などと組み合わせてフィルタリングするのは厳しいですが、単純に出力先を指定するにはこちらがよさそうです。</p>
<div class="last"><div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span>
<span class="nv">LOGFILE</span><span class="o">=</span>/tmp/script-log
<span class="nb">exec</span> >><span class="s2">"</span><span class="nv">$LOGFILE</span><span class="s2">"</span>
<span class="nb">exec</span> <span class="m">2</span>><span class="p">&</span><span class="m">1</span>
command1
command2
...
...
...
</pre></div>
</div></dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">{}</tt> を使った方法</dt>
<dd><p class="first">この方法はコメントでご指摘いただくまで全く知りませんでした。。 こちらの記載方法のほうが汎用性が高そうで使いやすそうですね。</p>
<div class="last"><div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span>
<span class="nv">LOGFILE</span><span class="o">=</span>/tmp/script-log
<span class="o">{</span>
command1
command2
...
...
...
<span class="o">}</span> >> <span class="s2">"</span><span class="nv">$LOGFILE</span><span class="s2">"</span> <span class="m">2</span>><span class="p">&</span><span class="m">1</span>
</pre></div>
</div></dd>
</dl>
</li>
</ul>
<p>状況に応じて使い分けていければシェルスクリプトがもっと捗りそうです。</p>
</div>
#qpstudy 2014.04 に参加してきたんで自分用まとめとか2014-04-21T00:00:00+09:002014-04-21T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2014-04-21:/articles/2014-04-21-qpstudy_20140419_report/<div class="line-block">
<div class="line">だいぶ出遅れてしまいましたが、先週末 <a class="reference external" href="http://www.zusaar.com/event/4897007">qpstudy 2014.04</a> に一般枠で参加させてもらってきたので</div>
<div class="line">感想や学びになったことのまとめをメモしておきます。</div>
</div>
<div class="line-block">
<div class="line">だいぶ出遅れてしまいましたが、先週末 <a class="reference external" href="http://www.zusaar.com/event/4897007">qpstudy 2014.04</a> に一般枠で参加させてもらってきたので</div>
<div class="line">感想や学びになったことのまとめをメモしておきます。</div>
</div>
<p>他にもまとめている方が多いですが、セッションごとのスライドは以下の通り。</p>
<dl class="docutils">
<dt>第1セッション 構築作業の全体フェーズ</dt>
<dd><a class="reference external" href="http://www.slideshare.net/sho7650/ss-33703096">qpstudy 2014.04 インフラエンジニアとは、なんだ</a></dd>
<dt>第2セッション 今回の想定アーキテクチャとアーキテクチャ設計の勘所</dt>
<dd><a class="reference external" href="http://www.slideshare.net/sechiro/qpstudy201404">Qpstudy201404 インフラ設計の勘所</a></dd>
<dt>第3セッション ハードウェア設計の勘所</dt>
<dd><a class="reference external" href="http://www.slideshare.net/TakeshiHasegawa1/qpstudy201404-dist">qpstudy 2014.04 ハードウェア設計の勘所</a></dd>
<dt>第4セッション ネットワーク/OS設計の勘所</dt>
<dd><a class="reference external" href="http://www.slideshare.net/yktko/20140419qpstudyosnw">20140419【qpstudy】OSとNW設計の勘所</a></dd>
<dt>第5セッション ミドルウェア(Web、Ap、DB)設計の勘所</dt>
<dd><a class="reference external" href="https://www.slideshare.net/nekoruri/4-33705917">qpstudy 2014.04 ミドルウェア設計の勘所</a></dd>
<dt>第6セッション 今後のインフラエンジニアとは</dt>
<dd>heartbeats <a class="reference external" href="https://twitter.com/netmarkjp">馬場さん(@netmarkjp)</a> によるプレゼン。こちらだけスライドは非公開</dd>
<dt>また当日の <tt class="docutils literal">Togetter</tt> がまとめられておりました。</dt>
<dd><a class="reference external" href="http://togetter.com/li/657194">qpstudy 2014.04 〜俺の屍を超えて行け、でも踏まないで〜 #qpstudy</a></dd>
</dl>
<div class="section" id="section-1">
<h2>全体的な感想をつらつらと</h2>
<div class="line-block">
<div class="line">各セクションの詳細だったりは他の方のブログや、すでに共有されているスライド、</div>
<div class="line"><tt class="docutils literal">Togetter</tt> を見てもらえれば大丈夫そうなので割愛します。(今更感有りまししね。。)</div>
</div>
<div class="section" id="section-2">
<h3>本編側</h3>
<div class="line-block">
<div class="line">私自身、 <tt class="docutils literal">MSP</tt> の業務をやり始めてまだ2年半程度でとても経験豊富と言えるわけでもないため、</div>
<div class="line">今回の新人向けに企画していただいた各セッションはどれもスライドを何度も見返してしまうような刺さる内容ばかりでした。</div>
</div>
<div class="line-block">
<div class="line">その中でも特に最後の馬場さんのセッション内容は本当に基本的な部分でありながらも、</div>
<div class="line">時代が変わろうとも絶対変わらないだろうコアな部分を再認識出来ました。</div>
</div>
<dl class="docutils">
<dt>「段取り力」</dt>
<dd>過去にこれでコケて失敗してしまうことが何度もありました。何しても、何かをやる際はそのバックグラウンドを正しく見積もって段取りをしっかりやらなければいけないですね。</dd>
<dt>なんか合った時にシャっとうごいて成果を出す。</dt>
<dd>ローカルにフォーカスして、「隙間」を見つけてみようという視点は得意不得意があるかもしれませんが
確かに生き残っていく手段としては非常に大事な視点だと思いました。
同じ部署内でも、みんながなかなか手をつけられない、付けたがらないことにグイグイ首を突っ込んでいけると
自ずと振られる仕事もそちらの方面に持っていける傾向は確かにあるなと。
ただ、部署のカルチャーなども考慮すると、単純に「何の評価もされずに使い潰されて終わり」という状況にもなりかねないのでさじ加減は難しいところもあるかなとは感じました。</dd>
<dt>宿題が良かった</dt>
<dd>「さくらVPS+お名前ドットコムあたりの環境で、 <tt class="docutils literal">PHP</tt> や <tt class="docutils literal">Ruby</tt> でなにかサービスを作って動かして <tt class="docutils literal">qpstudy</tt> で仲良くなった人たちに公開して運用してみよう」というものでした。
実は私が新卒で1年目だったあたりにも(状況は違ったでしょうが、、) 個人で利用できレンタルサーバーやDNSサービス自体はあったのだとは思いますが、当時私はその情報までたどり着けませんでした。
周りにそのノウハウや <tt class="docutils literal">Tips</tt> を語ってくれる先輩等はいなかったというのが一番の原因では有りますが、具体的なサービス名を出してもらえると
業界に入りたての方でも最悪「とりあえずこのキーワードをググって...」から色々な可能性にトライしていけるのではないでしょうか。
なんだかんだで、多少業務で使ってるディストリビューションとズレがあったとしても、自分で管理できるサーバを実際に「運用」してみると、手っ取り早く色々なものを得ることができると思います。(私もそうでした)</dd>
</dl>
</div>
<div class="section" id="section-3">
<h3>ビアバッシュ、懇親会</h3>
<div class="line-block">
<div class="line">雰囲気としては、<tt class="docutils literal">qpstudy</tt> 自体は今回が2回めの参加となりましたが、</div>
<div class="line">なんとなく前回参加させていただいた際にちらっと耳にした「今回はなんかみんなおとなしい」の意味がわかった気がしました。w</div>
<div class="line">ビアバッシュが本当にカオスな感じで、みんなでビール飲みながらLTをやりながらワイワイ色々言い合ったりで、</div>
<div class="line">はじめの方は戸惑ったものの、十二分に楽しむことが出来ました。</div>
<div class="line"><br /></div>
<div class="line">今回は非公式の2次会まで参加させてもらいましたが、</div>
<div class="line">今自分が業務で扱っている仕事やら興味がある技術的な話を利害関係など関係なく</div>
<div class="line">話ができる人と出会えるのは本当にいいですね。</div>
</div>
</div>
</div>
NODE-SetagayaでTerminalのTips的なものを話してきた2014-04-13T00:00:00+09:002014-04-13T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2014-04-13:/articles/2014-04-13-node_setagaya9_repo/<p>しばらくの間参加できていなかった <tt class="docutils literal"><span class="pre">NODE-Setagaya</span></tt> に参加& <tt class="docutils literal">Terminal</tt> の <tt class="docutils literal">Tips</tt> 的なものを話してきました。
当日利用したスライドはこちら。</p>
<div style="width: 65%">
<script async="" class="speakerdeck-embed" data-id="d7cfa250a4ef0131c78c4612bbd7ec99" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>
</div><p><a class="reference external" href="https://speakerdeck.com/laughk/cli-mini-hack-number-1-terminaltofalseqin-mu-woshen-meyou">Cli mini Hack!#1 ~Terminalとの親睦を深めよう~</a></p>
<s>Embed しようとすると Tinkerer のビルドが何故かコケるのでリンクのみ共有です。。</s><p><tt class="docutils literal">Pelican</tt> に以降したらコケなくなったので埋め込みました!</p>
<p>しばらくの間参加できていなかった <tt class="docutils literal"><span class="pre">NODE-Setagaya</span></tt> に参加& <tt class="docutils literal">Terminal</tt> の <tt class="docutils literal">Tips</tt> 的なものを話してきました。
当日利用したスライドはこちら。</p>
<div style="width: 65%">
<script async class="speakerdeck-embed" data-id="d7cfa250a4ef0131c78c4612bbd7ec99" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>
</div><p><a class="reference external" href="https://speakerdeck.com/laughk/cli-mini-hack-number-1-terminaltofalseqin-mu-woshen-meyou">Cli mini Hack!#1 ~Terminalとの親睦を深めよう~</a></p>
<s>Embed しようとすると Tinkerer のビルドが何故かコケるのでリンクのみ共有です。。</s><p><tt class="docutils literal">Pelican</tt> に以降したらコケなくなったので埋め込みました!</p>
<div class="section" id="teminal">
<h2>Teminalの使い方の話をしようと思ったわけ</h2>
<div class="line-block">
<div class="line">これまで <tt class="docutils literal"><span class="pre">NODE-Setagaya</span></tt> で話をする機会があった際は</div>
<div class="line">「やってみたいんだけど、時間やきっかけなくてなかなか手が付けられてなかったものを扱うかなー」</div>
<div class="line">という感じでテーマを選んでいたことが多かったのですが、今回はちょっと視点を変えてみました。</div>
</div>
<div class="line-block">
<div class="line">そこそこの期間この業種で仕事してきたけど、案外自分の身の回りに <tt class="docutils literal">Twitter</tt> 界隈とかにいそうな</div>
<div class="line">「ザ・ <tt class="docutils literal">Terminal</tt> 大好き!」って人がなかなか自分の周りにいないなーと思っていたところと、</div>
<div class="line">割と自分自身では仕事を通じて <tt class="docutils literal">Terminal</tt> で作業していると落ち着いくなーという人間になったので</div>
<div class="line">現状の「俺こうやってるけどみんなどう?」って感じのものを出してみればどんな反応があるのかな?</div>
<div class="line">という興味から今回のテーマを選んでみました。</div>
</div>
</div>
<div class="section" id="section-1">
<h2>感想とか</h2>
<div class="line-block">
<div class="line">「これは知っている!」</div>
<div class="line">だったり</div>
<div class="line"><tt class="docutils literal">vim</tt> のあたりでは「おー!これすげー!!」</div>
<div class="line">と反応してもらえたり</div>
<div class="line">「普段は面倒で調べるのが後回しになってた」</div>
<div class="line">などなど、参加メンツからは反応があり、</div>
<div class="line">テーマとしてはよいものが選べたかな。という手応えが有りました。</div>
</div>
<div class="line-block">
<div class="line">ちょっと直前にゴタゴタした状況で作ってしまい、</div>
<div class="line">かなり多めに時間を余してしまった点や、スライド自体がちゃんと閉められてなかったのは</div>
<div class="line">今回の反省点だったとは思います。</div>
</div>
<div class="line-block">
<div class="line">最初はやりたい内容を一度に全部流してしまうと、</div>
<div class="line">自分自身も結構しんどいし、そもそも参加しているみんながついてこれるか不安だったので</div>
<div class="line">今回の内容も人まずは基本的なところをピックアップした半分程度にとどめましたが、</div>
<div class="line">機会があったら、<tt class="docutils literal">DEMO6</tt> の内容や今回扱いきれなかった部分を中心に</div>
<div class="line">また <tt class="docutils literal">CLI mini Hack</tt> はやってみたいかなと思いました。</div>
</div>
</div>
久々に第10回記念シェル芸勉強会行ってきたんでまとめとか2014-04-10T00:00:00+09:002014-04-10T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2014-04-10:/articles/2014-04-10-shell_lian_tower/<div class="line-block">
<div class="line">ブログ更新自体がかなりお久しぶりです。</div>
<div class="line">何とか生きてました。身の回りの環境が最近がらりと変わったわけですが、</div>
<div class="line">そのへんはまた近々別のエントリにでもしたいと思います。</div>
</div>
<div class="line-block">
<div class="line">今回は久々にシェル芸勉強会に行ってきたのでそのまとめを。</div>
<div class="line">といいつつも、実際の会場の様子は以下の <tt class="docutils literal">Togetter</tt> を見てもらったほうが早いかと。</div>
</div>
<ul class="simple">
<li><a class="reference external" href="http://togetter.com/li/651837">第10回記念シェル芸勉強会@シェルリアンタワー&第28回場所が未定だったが決まったぞ定例会 - Togetterまとめ</a></li>
</ul>
<div class="line-block">
<div class="line">ブログ更新自体がかなりお久しぶりです。</div>
<div class="line">何とか生きてました。身の回りの環境が最近がらりと変わったわけですが、</div>
<div class="line">そのへんはまた近々別のエントリにでもしたいと思います。</div>
</div>
<div class="line-block">
<div class="line">今回は久々にシェル芸勉強会に行ってきたのでそのまとめを。</div>
<div class="line">といいつつも、実際の会場の様子は以下の <tt class="docutils literal">Togetter</tt> を見てもらったほうが早いかと。</div>
</div>
<ul class="simple">
<li><a class="reference external" href="http://togetter.com/li/651837">第10回記念シェル芸勉強会@シェルリアンタワー&第28回場所が未定だったが決まったぞ定例会 - Togetterまとめ</a></li>
</ul>
<div class="line-block">
<div class="line">過去のシェル芸勉強会ブログではいちいち自分の <tt class="docutils literal">Tweet</tt> 拾って引用したりと面倒な真似してましたが、</div>
<div class="line">今回からは実際に自分で実行したコマンドたちは <tt class="docutils literal">gist</tt> にまとめてみました。</div>
</div>
<script src="https://gist.github.com/laughk/10381390.js"></script><p>最終問題についてはお察しください。</p>
<div class="section" id="section-2">
<h2>収穫とか</h2>
<p>せっかくなので今回の収穫とか</p>
<ul>
<li><dl class="first docutils">
<dt><tt class="docutils literal">sed <span class="pre">'s/./&\n/g'</span></tt> より <tt class="docutils literal">grep <span class="pre">-o</span> .</tt> が便利。</dt>
<dd><p class="first">会場でたちまち <tt class="docutils literal">grep</tt> ブームが発生しておりましたが、純粋にマッチ部分だけ抜き出す <tt class="docutils literal"><span class="pre">-o</span></tt> で縦表示にするテクニックがあるのに今まで気づかず目からウロコものでした。</p>
<div class="last"><div class="highlight"><pre><span></span>$ <span class="nb">echo</span> aabbcdabbcccdd <span class="p">|</span> grep -o .
a
a
b
b
c
d
a
b
b
c
c
c
d
d
</pre></div>
</div></dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">grep <span class="pre">-q</span></tt> で結果を表示しない。</dt>
<dd><p class="first">これは個人的に地味にいいなと思ったしらなかったオプションで、今までシェルスクリプトを書くときなんかに「ファイル内に文字列があるかないか判定したいだけ」のときなんかリターンコードを見るためだけにわざわざ <tt class="docutils literal">grep</tt> して <tt class="docutils literal">/dev/null</tt> に捨てるような無駄なことをしていたのですが、これからはスッキリ書けそうです。</p>
<div class="last"><div class="highlight"><pre><span></span>$ grep huga file2
huga
$ grep -q huga file2
<span class="c1">## なにも表示されない</span>
</pre></div>
</div></dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal">xargs</tt> で余計なレイアウトを取っ払える。</dt>
<dd><p class="first">もはやシェル芸の定番と思っていた <tt class="docutils literal">xargs</tt> もこの使い方は知らなかったです。具体的には以下のような感じ。</p>
<div class="last"><div class="highlight"><pre><span></span>$ cat toi2.txt
<span class="m">1</span>
<span class="m">2</span> <span class="m">3</span>
<span class="m">4</span> <span class="m">5</span>
<span class="m">6</span> <span class="m">7</span>
<span class="m">8</span> <span class="m">9</span>
$ cat toi2.txt <span class="p">|</span> xargs
<span class="m">1</span> <span class="m">2</span> <span class="m">3</span> <span class="m">4</span> <span class="m">5</span> <span class="m">6</span> <span class="m">7</span> <span class="m">8</span> <span class="m">9</span>
</pre></div>
</div></dd>
</dl>
</li>
</ul>
<div class="line-block">
<div class="line">大きかったのはこのあたりです。他にも <tt class="docutils literal">awk</tt> で <tt class="docutils literal">$0</tt> をうまく置き換えることによって <tt class="docutils literal">print</tt> を省略できたりとかありそうでしたが、</div>
<div class="line">この辺は色々試しながらものにしていきたいものです。</div>
</div>
</div>
<div class="section" id="section-3">
<h2>感想とか</h2>
<div class="line-block">
<div class="line">勉強会自体、最近全然顔を出せていませんでしたが、</div>
<div class="line">シェル芸勉強会は私みたいな泥臭いインフラ運用なんかをやってる人間にとってはすぐに仕事に活かせそうな <tt class="docutils literal">Tips</tt> がごろごろ転がってて</div>
<div class="line">楽しみながら習得できる感じが相変わらず良いですね。</div>
<div class="line">今回は懇親会まで行けませんでしたが、また次回参加したいですね。</div>
<div class="line">(といっても確か次回は大阪だったはず..orz)</div>
</div>
</div>
あるインフラエンジニアとAnsibleの付き合い方2013-12-10T00:00:00+09:002013-12-10T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2013-12-10:/articles/2013-12-10-ansible_with_infrastructure_engineer/<p>この記事は <a class="reference external" href="http://qiita.com/advent-calendar/2013/ansible">Ansible Advent Calender 2013</a> 10日目の記事です。</p>
<p>私は普段MSPな一応インフラエンジニア的なことをやっている人間ですが、
少しずつ今の仕事で <tt class="docutils literal">ansible</tt> を利用し始めているのでその導入の際に障壁になったことや利用しているシーンを紹介したいと思います。</p>
<p>この記事は <a class="reference external" href="http://qiita.com/advent-calendar/2013/ansible">Ansible Advent Calender 2013</a> 10日目の記事です。</p>
<p>私は普段MSPな一応インフラエンジニア的なことをやっている人間ですが、
少しずつ今の仕事で <tt class="docutils literal">ansible</tt> を利用し始めているのでその導入の際に障壁になったことや利用しているシーンを紹介したいと思います。</p>
<div class="section" id="root">
<h2>障壁1 / root権限</h2>
<div class="line-block">
<div class="line">CentOSなどのRedHad系を中心に運用している場合は意外と <tt class="docutils literal">su -</tt> が使えても <tt class="docutils literal">sudo</tt> が使えない。という状況があるかもしれません。</div>
<div class="line"><tt class="docutils literal">fabric</tt> の場合は無理やりprefixを弄って <tt class="docutils literal">su <span class="pre">-c</span> 'command'</tt> をやることができなくもないですが <a class="footnote-reference" href="#fabric-su-prifix" id="footnote-reference-1">[1]</a></div>
<div class="line"><tt class="docutils literal">ansible</tt> の場合は公式で特に対応されるような気配はなく、モジュールを作るしかなさそうですがなんだか割に合わないような気もします。</div>
</div>
<blockquote>
<ul class="simple">
<li><a class="reference external" href="https://github.com/ansible/ansible/pull/744">added su capability by willthames · Pull Request #744 · ansible/ansible · GitHub</a></li>
</ul>
</blockquote>
<div class="line-block">
<div class="line">私の場合もこの辺は完全に解消できているわけではないですが、極力自社で手が出せる範囲であったり</div>
<div class="line">新規構築の際に予め自動化の一環として説明して、少しずつ <tt class="docutils literal">sudo</tt> を使える環境を増やしている状況です。</div>
<div class="line">ここは <tt class="docutils literal">ansible</tt> に限らず他の <tt class="docutils literal">Provisioning</tt> / <tt class="docutils literal">Orchestration</tt> 系のツールを導入する際にも必要な最低ラインなんで、頑張って確保していくしかないと思います。</div>
</div>
</div>
<div class="section" id="section-1">
<h2>障壁2 / 踏み台を超える</h2>
<div class="line-block">
<div class="line">ここも <tt class="docutils literal">ansible</tt> に限った話ではないですが、</div>
<div class="line">お客さんの環境の運用を行っている場合、</div>
<div class="line">踏み台を経由しないとSSHアクセスができず、更に踏み台に勝手にツールを導入することができない。</div>
<div class="line">というケースが多いかと思います。イメージとしては以下のような感じ。</div>
</div>
<img alt="" src="/images/2013/12/10/graph.png" />
<div class="line-block">
<div class="line">残念ながら <tt class="docutils literal">fabric</tt> のように踏み台サーバ指定のオプションは無いようです。</div>
<div class="line">以下のPullリクエストがありながら取り込まれていないところを見ると今後もコマンドや <tt class="docutils literal">hostファイル</tt> , <tt class="docutils literal">playbook</tt> で管理できる状況になる可能性は低いかもしれません。</div>
</div>
<blockquote>
<ul class="simple">
<li><a class="reference external" href="https://github.com/ansible/ansible/pull/2970">added support for ssh tunneling using ssh&#39;s ProxyCommand option by rodlogic · Pull Request #2970 · ansible/ansible · GitHub</a></li>
</ul>
</blockquote>
<p>しかしながらヒント(というより答え)は↑のページにあります。</p>
<blockquote>
<div class="line-block">
<div class="line">There already is ANSIBLE_SSH_ARGS where you can specify all of SSH flags</div>
<div class="line">and override any Ansible may set by default, FWIW.</div>
</div>
</blockquote>
<div class="line-block">
<div class="line">ということで環境変数 <tt class="docutils literal">ANSIBLE_SSH_ARGS</tt> に <tt class="docutils literal">ssh</tt> コマンドのオプションを渡すことができるようで、</div>
<div class="line">実際これに <tt class="docutils literal">ANSIBLE_SSH_ARGS=' <span class="pre">-F</span> sshconfig.project'</tt> みたいな感じで渡してあげれば sshconfig ファイルを使って</div>
<div class="line">各お客さんごとであったり、プロジェクトごとの踏み台環境を整えることができます。</div>
</div>
<div class="line-block">
<div class="line">これだけあれば、自社内の開発サーバだったり、</div>
<div class="line">最悪自分のPCのVM上などに環境を作ってしまえばなんとか使えるところまで持っていけます。</div>
</div>
<p>具体的には以下のように <tt class="docutils literal">sshconfig</tt>, <tt class="docutils literal">host</tt> ファイルを作っていけばOKです。</p>
<div class="section" id="sshconfig-project">
<h3>sshconfig.project</h3>
<p>踏み台、内側ネットワークでそれぞれ作成
(<tt class="docutils literal">Proxycommand</tt> で <tt class="docutils literal"><span class="pre">-F</span></tt> で自分自身を指定するのを忘れずに)、</p>
<div class="highlight"><pre><span></span><span class="c1">## 踏み台サーバ</span>
Host gateway
User login_user
IdentityFile /path/to/identity
HostName xxx.xxx.xxx.xxx
<span class="c1">## 接続先のLAN、ログイン情報</span>
Host <span class="m">192</span>.168.0.*
User login_user
Identityfile /path/to/identity
Proxycommand ssh -F sshcondig.project gateway nc -w <span class="m">120</span> %h %p
</pre></div>
</div>
<div class="section" id="host-project">
<h3>host.project</h3>
<p>必要に応じて作成</p>
<div class="highlight"><pre><span></span><span class="o">[</span>web<span class="o">]</span>
web01 <span class="nv">ansible_ssh_host</span><span class="o">=</span><span class="m">192</span>.168.0.11
web02 <span class="nv">ansible_ssh_host</span><span class="o">=</span><span class="m">192</span>.168.0.12
<span class="o">[</span>db<span class="o">]</span>
db01 <span class="nv">ansible_ssh_host</span><span class="o">=</span><span class="m">192</span>.168.0.21
</pre></div>
</div>
<div class="section" id="playbook-project-yml">
<h3>playbook-project.yml</h3>
<div class="line-block">
<div class="line">あとは <tt class="docutils literal"><span class="pre">playbook-project.yml</span></tt> などの名前で playbook を作成したら以下のような感じで実行するだけ</div>
<div class="line">状況によって内容は変わるんで今回は割愛します。</div>
</div>
</div>
<div class="section" id="section-2">
<h3>実行</h3>
<p>ここまでできたら環境変数に気をつけて実行するだけです。</p>
<div class="highlight"><pre><span></span>% <span class="nb">export</span> <span class="nv">ANSIBLE_SSH_ARGS</span><span class="o">=</span><span class="s1">' -F sshconfig.project'</span>
% ansible-playbook playbook-project.yml -i host.project
</pre></div>
</div>
</div>
<div class="section" id="section-3">
<h2>利用シーンなど</h2>
<div class="line-block">
<div class="line"><tt class="docutils literal">Provisioning</tt> / <tt class="docutils literal">Orchestration</tt> に関するツールでは冪等性の話もかなり目にしますが、</div>
<div class="line">私の場合は複数の会社の人間が管理しているケースが多いため、</div>
<div class="line">構成の管理というよりは、多数のホストに同様の作業を行う場合に恩恵を受けるケースが多いです。</div>
<div class="line">そのため利用シーンは現状では以下のものに大体とどまっています。</div>
</div>
<blockquote>
<ul class="simple">
<li>全く同じ構成のサーバを複数構築する場合</li>
<li>お客さん側で環境全体に同じユーザーが必要になった場合 (ldapとか使えよって話かもですが、、)</li>
<li>複数台にドライバや診断ツールなどのベンダー配布のツールをインストールする場合</li>
</ul>
</blockquote>
<div class="line-block">
<div class="line">最近ではコールドスタンバイ的な用途をしているサーバに対して</div>
<div class="line">playbook で構成を管理しておくと結構うれしいことが多いんじゃないかなんて考えていますが</div>
<div class="line">まだ実現に至っていません。</div>
</div>
</div>
<div class="section" id="section-4">
<h2>最後に</h2>
<div class="line-block">
<div class="line">今回は具体的な <tt class="docutils literal">playbook</tt> を載せたりとかはなかったですが、</div>
<div class="line"><tt class="docutils literal">ansible</tt> はやはりymlで手軽に <tt class="docutils literal">task</tt> を定義していけるんで非常に使いやすいのが気に入っています。</div>
<div class="line">またお客さんの環境を複数持っている場合、この手のツールは様々な事情で思うように導入できないケースも多いですが、</div>
<div class="line">クライアント側は <tt class="docutils literal">ssh</tt> (CentOS5以下だと <tt class="docutils literal"><span class="pre">python-simplejson</span></tt> も必要) だけで使えるのというのも <tt class="docutils literal">ansible</tt> の強みだと思います。</div>
<div class="line"><br /></div>
<div class="line">インフラ側からも十分利用価値のあるものですので、台数が多い環境の運用をされてる方なども利用を検討してみるとうれしいことがあるかもしれません。</div>
</div>
<p class="rubric">脚注</p>
<table class="docutils footnote" frame="void" id="fabric-su-prifix" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td><a class="reference external" href="http://stackoverflow.com/questions/12641514/switch-to-different-user-using-fabric">python - switch to different user using fabric - Stack Overflow</a></td></tr>
</tbody>
</table>
</div>
快適Terminal環境計画 - IRC -2013-11-21T00:00:00+09:002013-11-21T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2013-11-21:/articles/2013-11-21-irc_setup_in_terminal/<div class="line-block">
<div class="line">前から tmux と組み合わせて irc bouncer 的な使い方をしていた weechat ですが。</div>
<div class="line">いい加減本格的に移行したのでメモ。</div>
<div class="line">ちなみに私は今のところ Ubuntu13.10 な 24時間起動のサーバ立てて使っとります。</div>
</div>
<div class="line-block">
<div class="line">前から tmux と組み合わせて irc bouncer 的な使い方をしていた weechat ですが。</div>
<div class="line">いい加減本格的に移行したのでメモ。</div>
<div class="line">ちなみに私は今のところ Ubuntu13.10 な 24時間起動のサーバ立てて使っとります。</div>
</div>
<div class="section" id="section-1">
<h2>インストール</h2>
<p>ググって出てくる情報見るとapt版だとISO-2022-JPガーみたいな話あるようですが、最近は特に問題ないようです。</p>
<div class="highlight"><pre><span></span>sudo aptitude install weechat
</pre></div>
</div>
<div class="section" id="section-2">
<h2>プラグインとか</h2>
<div class="line-block">
<div class="line">デフォで起動してもいいかもしれないですが、ここは先人の知恵に従って便利なプラグインを導入します。</div>
<div class="line">今のところは最低限以下のものだけ入れるだけでもだいぶ違います。</div>
</div>
<ul class="simple">
<li><dl class="first docutils">
<dt>weeget</dt>
<dd>weechatのプラグインを管理できるプラグイン</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>growl</dt>
<dd>ハイライトしたキーワードをネットワーク経由でGrowl通知してくれる。</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>highmon</dt>
<dd>ハイライトしたキーワードのレスだけを流してくれるバッファができる。</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>buffers</dt>
<dd>横に接続中のサーバ、入室中のチャンネルなどバッファの一覧を出してくれる。</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>go</dt>
<dd>指定したチャンネルにダイレクトにジャンプできる。関係ないチャンネルを既読にしないで飛べるので地味に便利。</dd>
</dl>
</li>
</ul>
<div class="line-block">
<div class="line">まずはweegetを導入して、他のプラグインを入れてあげればいい感じです。</div>
<div class="line">手順はこちらに従え問題無いかと -> <a class="reference external" href="http://blog.glidenote.com/blog/2012/02/11/weechat-plugins/">Weegetを利用して、WeeChatのPlugin管理を楽にする</a></div>
</div>
</div>
<div class="section" id="section-3">
<h2>起動/設定</h2>
<div class="section" id="weechat-logger-conf">
<h3>~/.weechat/logger.conf</h3>
<div class="line-block">
<div class="line">ロギングはしときたいんでloggerの設定を以下のように変更します。</div>
</div>
<div class="highlight"><pre><span></span><span class="nv">mask</span> <span class="o">=</span> <span class="s2">"%plugin.</span><span class="nv">$name</span><span class="s2">/%Y%m%d.weechatlog"</span>
</pre></div>
</div>
<div class="section" id="tmux-conf">
<h3>~/.tmux.conf</h3>
<div class="line-block">
<div class="line">tmux 内であげっぱなしにするので以下の設定も追加しときます。これをやっとかないと表示がおかしくなります。</div>
<div class="line">基本的にIRC内で流れていることは常にキャッチしておきたいのです。(まあbouncer使えよって話かもしれないですが)</div>
</div>
<div class="highlight"><pre><span></span><span class="nb">set</span> -g default-terminal <span class="s2">"screen-256color"</span>
</pre></div>
</div>
<div class="section" id="section-4">
<h3>起動</h3>
<div class="line-block">
<div class="line">このあたりでtmux -> weechatを起動</div>
</div>
<div class="highlight"><pre><span></span>tmux
weechat-curses
</pre></div>
</div>
<div class="section" id="section-5">
<h3>設定</h3>
<div class="line-block">
<div class="line">接続先の設定</div>
</div>
<div class="highlight"><pre><span></span>## 普通のIRCサーバの場合
/server add example1 irc.example1.com/6667
## SSL かつ 起動時に自動で接続するように
/server add example2 irc.example2.com/6667 -ssl -autoconnect
</pre></div>
<div class="line-block">
<div class="line"><br /></div>
<div class="line">オレオレ証明書(自己署名証明書)なSSLな場合は以下も実行します。</div>
<div class="line"><br /></div>
</div>
<div class="highlight"><pre><span></span>/set irc.server.example.ssl_verify = off
</pre></div>
<div class="line-block">
<div class="line"><br /></div>
<div class="line">自分の名前とか拾いたいワードをhighlightに追加しときます</div>
<div class="line"><br /></div>
</div>
<div class="highlight"><pre><span></span>/set weechat.look.highlight *iwasaki*,*laughk*
</pre></div>
<div class="line-block">
<div class="line"><br /></div>
<div class="line">growl プラグイン接続先も追加</div>
<div class="line">当然クライントPCにGrowlが入っていることが条件。ネットワーク経由での通知もできるようにしとく。</div>
<div class="line"><br /></div>
</div>
<div class="highlight"><pre><span></span>## 通常使うクライアントPCのIP情報
/set plugins.ver.python.growl.hostname 192.168.xxx.yyy
## クライアント側のGrowlパスワード
/set plugins.var.python.growl.password ****************
</pre></div>
<div class="line-block">
<div class="line"><br /></div>
<div class="line">go プラグインのキーバインドもやっとく。</div>
<div class="line">ひとまずバッティングしなさそうだった Alt+g で</div>
<div class="line"><br /></div>
</div>
<div class="highlight"><pre><span></span>/key bind meta-g /go
</pre></div>
<div class="line-block">
<div class="line"><br /></div>
<div class="line">iso-2022-jp なチャンネルは文字コードの設定も忘れずに。</div>
<div class="line">特にweechatは結構いい感じに文字コード直してくれたりするんで自分では化けてることに気づかないケースもあります。</div>
<div class="line"><br /></div>
</div>
<div class="highlight"><pre><span></span>## 対象のチャンネルで
/charset iso2022jp
</pre></div>
<div class="line-block">
<div class="line"><br /></div>
<div class="line">他の細かいところなども <a class="reference external" href="http://www.weechat.org/doc/">公式のドキュメント</a> 見ながら設定をして</div>
<div class="line">大体いいかなというところで変更を保存します。</div>
<div class="line"><br /></div>
</div>
<div class="highlight"><pre><span></span>/save
</pre></div>
<div class="line-block">
<div class="line"><br /></div>
<div class="line">こんな感じ。まあほぼ見せられないのでモザイクだらけですが</div>
<div class="line"><br /></div>
</div>
<img alt="" src="/images/2013/11/21/shot2013-11-23_1.png" />
<div class="line-block">
<div class="line"><br /></div>
<div class="line">Yea!!</div>
<div class="line"><br /></div>
</div>
</div>
</div>
ブログ移転2013-11-18T00:00:00+09:002013-11-18T00:00:00+09:00Kei Iwasakitag:memo.laughk.org,2013-11-18:/articles/2013-11-18-hello_new_blog/<p>これまでたまに <a class="reference external" href="http://laugh-labo.blogspot.com">ラフなラボ</a> の方でブログを書 …</p><p>これまでたまに <a class="reference external" href="http://laugh-labo.blogspot.com">ラフなラボ</a> の方でブログを書いてましたが
もう少し効率良くアウトプットしたいこともあって、
tinkerer + githubpage のこちらの環境に移行しました。
やっぱりReSTで書き留めたものをそのままBlogとして公開できるのは楽でいいですね。
(Octopress使わなかったのはMarkdownよりもReST使いたいから)</p>
<p>旧ブログを始めた頃に比べると大分目指すべき方向性も違ってきてしまっていたし、
まあ調度良いかなと。</p>
<p>このブログを立てる際の作業ログも後ほどまとめる予定。
ほとんど自分で面倒見なければいけないのはなかなか手間がかかった、、</p>