なんか書いていこうぜー.com

Let's write something good

awesome-wm でアプリを指定タグで起動させるために調べた

指定したタグで起動させるには、下記のように rc.lua に記載すればよい。 以下は、tag1 に Terminator、tag2 にGoogle Chrome、… という風にレイアウトされる。

awful.rules.rules = {
    { rule = { class = "Terminator" },
      properties = { screen = 1, tag = "1" } },
    { rule = { class = "Google-chrome" },
      properties = { screen = 1, tag = "2" } },
    { rule = { class = "Atom" },
      properties = { screen = 1, tag = "3" } },
    { rule = { class = "Franz" },
      properties = { screen = 1, tag = "4" } },
}

で、ここで class に指定する名前が何かわからない。これを知るためには、GitHub にある awesome の 90-FAQ.md にあるように xprop を使う。

yaourt xorg-xprop 等でインストールし、下記のコマンドを打ってclass名を知りたいアプリのウインドウをクリックすると、コンソールに以下のように出力されるので、この WM_CLASS を利用する。

$ xprop WM_CLASS WM_NAME
WM_CLASS(STRING) = "google-chrome", "Google-chrome"
WM_NAME(UTF8_STRING) = "awesome/90-FAQ.md at master · awesomeWM/awesome - Google Chrome"

起動時に上記のlayoutにアプリを配置させるためには、予め起動時にこれらを起動させておく必要がある。 私は以下のようなものを書いて起動させている。ArchWiki の awesome にある Auto プログラム を参考にしている。 English のページはやり方が変わっているので、そちらのほうがよいのかもしれない。

function run_once(prg)
  awful.util.spawn_with_shell("pgrep -u $USER -x " .. prg .. " || (" .. prg .. ")")
end

do
  local cmds =
  {
    "atom",
    "franz-bin",
    "terminator",
    "google-chrome-stable",
  }

  for _,i in pairs(cmds) do
    run_once(i)
  end
end

毎回 Win + R 入力して、かつ、アプリ名入力して Enter、配置のために Win + Shift + 番号 打つの面倒だったからすっきりした。

夏休みに思ったこと

なんか連休前後に複数の人と会話していて思ったことを書きたい気がしたけど、XP白本にある「完璧にやる」が全てを表しているので書くことがなくなってしまった。

完璧にやる

手を抜くのはそもそも完璧にやってないし(レビューで手を抜いてるのわかるし、レビュー負荷あがってよくないし)、割り当てられた作業についても「それは目的を達成するための最小の手数ですか?本当にそうですか?」って自問して作業していれば無駄をなくして時間あたりの作業としては最大限のことをやっていることになるだろうし。

(プログラマに対して「手を抜く」って表現使うのムズカシイ…怠惰も同じ…サボる・妥協する・なんも考えてないって表現するのが正解なのかな?)

見積もりがだいたいできて、作業が最小の手で実現できていれば、プロジェクトでソコソコ活躍できると思う… さすがに仕事で解決しないといけない問題に対しては真摯に対応しないと信頼貯金が貯まらないので、自分の首締まるだけ

Team Geek を読んだ

以前からよいと聞きつつも読めていなかったので、お休みと移動時間を利用して『Team Geek』を読んだ。

感想

読み終わったときに思ったのは、「よくできてる」ということ。 何らかのプロジェクトに参加しつつチームで作業している場合に感じる、ちょっと面倒な問題が実際に書かれている。開発コミュニティ運営を実際にしている人が実体験を(おそらく読めるように:sweat_smile:)書いてくれているので、「あるある」感を感じる。

「チーム」を作る場合だけではなく、新加入メンバーをルーキーと捉えれば育成の参考にもなるんではなかろうか。

と書いたところで、割と「自分でコミュニティやプロジェクトを進められる」立場から書かれているものだな、と気づく。前述の新加入メンバーやルーキー側の視点からはあまり書かれていないかも。(もしかしたら読み込むと載っているのかもしれないけど…)

ミッションステートメント同様に何回か読んで、初心に戻って現状を見つめなおすお供によいかもしれない。何度も読むタイプの本なのではないかな、と思った。

Arch Linux のライブラリアップデート後に Wifi に接続できなくなった場合

yaourt -Syua とかやっているとたまに急に Wifi が down するときが 2 回発生(2 out)したのでメモ。

結論

ip link して表示された無線LAN デバイス が DOWN している、かつ、rfkill list して Wireless LAN が Soft Blocked: yes の場合は、 rfkill unblock wifi すれば直る。

参照: Rfkillによるブロック

追ってみてみる

yaourt -Syua してライブラリアップデートをしながらネットサーフィンしていたら急に「インターネットにつながりません」 そして、デスクトップの無線LANマークが未接続になったことに気がつく。

コンソールで↓のコマンドをうってNICの状態を確認した。

$ ip link

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: wlp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000
    link/ether f0:d5:bf:68:56:b4 brd ff:ff:ff:ff:ff:ff

2 の状態が DOWN になっている。そこで下記コマンドをうったが状況変わらず。

$ sudo ip link set wlp4s0 up
$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: wlp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000
    link/ether f0:d5:bf:68:56:b4 brd ff:ff:ff:ff:ff:ff

そういえば以前に、rfkill あたりをうって解決した記憶が…ググってみると、Rfkillによるブロック に当たった。 そこで書かれているように rfkill list をうってみる。一箇所 yes になっている箇所がある。

$ rfkill list
0: tpacpi_bluetooth_sw: Bluetooth
        Soft blocked: no
        Hard blocked: no
1: phy0: Wireless LAN
        Soft blocked: yes
        Hard blocked: no
2: hci0: Bluetooth
        Soft blocked: no
        Hard blocked: no

これか…ということで Soft blocked を no に変更する。

$ sudo rfkill unblock wifi
$ rfkill list
0: tpacpi_bluetooth_sw: Bluetooth
        Soft blocked: no
        Hard blocked: no
1: phy0: Wireless LAN
        Soft blocked: no
        Hard blocked: no
2: hci0: Bluetooth
        Soft blocked: no
        Hard blocked: no

気がつくと、デスクトップのWifi接続通知が接続済みになっていた。

感想

何故にアップデートしていると rfkill が有効になって Wifi が繋がらなくなるのかわからんけど、急に繋がらなくなった場合はこいつを確認しよう。

RedDotRubyConf 2017 に参加してきました

初海外!初海外イベントへの参加:airplane: RedDotRubyConf 2017 に参加してきた。

海外、初めて知ることが多く、また、イベントもこういうやり方もあるのね、というのを感じることができたのでなかなかよい体験だった :smile:

内容としては、硬軟併せ持った幅広い感じで、Ruby処理系をがっつりいじっているものから、プログラマに知っておくべき人間心理とか、大規模開発の事例、mrubyで車椅子動かした話、Ruby に限らないテストや改善の話まで、シンガポールという土地にマッチした感じ(いろんな人種がいて、各宗教の寺院が密集していたりする)だと思った。

多分、Ruby 自体の改善の話は RubyKaigi でも語られるであろうから RubyKaigi までにどう変わっているのかすごい楽しみになったし、Shopify の事例は、大人数で開発するときにこういう問題はあるよね〜というもののちょっと想像超えてきた感じだった。普段少人数での開発が多いから、n百人レベルの開発者がいてみんなdeploy権、masterマージ権をもっているとこんな問題が出てくるんやな…というのを知った。参考にしよう。

RedDotRubyConf は、朝・昼・ティータイムにお食事がブッフェ形式で提供される(ビックリ:exclamation:) ので、:rice: の心配しなくてよいから会に集中できるっていうのはかなりよかった。日本にいてもお昼探すのも一苦労だから…

懇親会(ドリンクアップみたいな感じ)も体験できてよかった :beers: 拙い英語で会話してだいぶ酔っぱらった。それにしてもみんな盛り上がっていた :sweat_drops: 19:00 開始で23:00過ぎてもまだかなりの人数残ってたし :sweat_smile: 普段いない人たちがいるので、話は尽きないってことかな。

Matzとめちゃ話したし、五倍紅寶石 の方々ともいっぱい話した。Aaron さんに感想を伝えられたし、いつも隅っこにいる私としてはかなり満足した懇親会だった。

RedDotRubyConf の開催初日に cuzic さんに教えてもらった シンガポール日本エンジニアの会の飲み会 に飛び入りで参加してきた。現地情報が大量に手に入ってたいへんお土産や会話の参考になった。ありがとうございました :pray:

まとめ

RedDotRubyConf 2017 に参加してシンガポールの雰囲気と、海外カンファレンスの一端を感じてきました。たいへん勉強になりました。シンガポールの日本人エンジニアの会にも参加していろんな情報をいただきました。RedDotRubyConf 2017, 日本人エンジニアの会の方々には感謝の言葉しかありません。ありがとうございました。

RedDotRubyConf 2017 への参加を支援してくれた 永和システムマネジメント アジャイル事業部 と、稼働に穴をあけることを許可してくださったお客様とプロジェクトメンバー、なにより引率していろいろサポートしてくださった 角谷信太郎 顧問に感謝します。ありがとうございました:exclamation:

[解決]Arch Linux で使っている atom の editor の領域が半分になった

発生した問題

一昨日、atom をアップデートしたら、ここにあるような状態 になった。 editor のエリアが縦に split されて、右半分が使えない感じの状態。

解決方法

さきほどのリンク、 https://discuss.atom.io/t/where-did-this-empty-space-come-from-how-do-i-get-rid-of-it/30226?source_topic_id=43196 にあるように

$ atom --clear-window-state

で起動すると直った。

再インストール、~/.atom の退避、package の無効化を試したけど直らなかったので困っていたが、ドンズバの解決策がみつかってよかった :smile:

データ分析用次世代データフォーマットApache Arrow勉強会 に参加してきた

関西Ruby会議2017の翌日に須藤さん主催でApache Arrow勉強会が開催されるとのことで、懇親会で申し込んでキャンセル待ちだったが、繰り上がったので参加した。

Apache Arrow は、”データ分析用次世代データフォーマット” ということで、各種分析ライブラリ?アプリ?が対応を始めているもので、シリアライズ・パースが不要、メモリやCPUの利用効率がよいカリッカリにチューニングされたフォーマットらしい。

勉強会では、コントリビュータを増やす、という目的のもと、概要・現状・貢献方法の紹介があった。

Apache Arrow

機械学習とかビッグデータ分析とかの分野に全く疎いので、どういうかたちでデータをツール側に送るのか(配列だってのはわかってる)理解していないのでアレなのだが、データソース側にいるアプリがクライアントソフトを使って(なければ作って)Apache Arrow を使って分析ツール側に送信することになると思うので、送信したデータと分析時のコストは下がるものの、Apache Arrow への変換コストというか変換スピードみたいなものが重要になってきたりしないのかな?とか思って聴いていた。(大量データをなんとか変換して捌く、というので苦労しているので…)

Apache Arrow 自体への貢献、各言語向けのクライアントライブラリを作る・直すことへの貢献、がありそうですね。

まず、そのビッグデータだ、機械学習だ、ってところから学習するのがよさそう :sweat_smile:

関西Ruby会議2017に参加してきた

CFP 採択されて、発表してきました。初の30分発表 & ド緊張であまりに拙すぎてご迷惑おかけしました :bow: 関西に元いた者としては、採用されて参加できてたいへんうれしかったです。ありがとうございました。

参加者の顔ぶれには懐かしい人もいましたが、私がこちらに来て以降に参加し始めた人や新しく来た人が多かったんじゃないかな? CoderDojoとかOSS Gateも別の階でやっていたとのことで、ちょっと覗いてみたかったけど、全く余裕がなかった。

社内の開発コンテストでスライドアプリを作った

社内で開催している開発コンテストでスライドアプリをElectronで作成してみた。

muryoimpl/slippr

作ったもの

テキストエリアに markdown かいたら preview 画面に変換されたHTMLが表示されて、全画面表示にするとスライド表示されて、前後のスライドに移動できるというもの。 おまけで、タイマー機能、rabbit のような現在のスライドと残りの表示、PDF印刷機能をつけている。

以下がこれを使って社内で雑にwebpackについて紹介したときのスライドをPDF印刷機能を使って出力したもの。

作った動機としては、frontend 周りの自主練をしていた時期に作ろうと思って止まっていたものを開発コンテストを理由に新たにReact, Redux使って作り始めた。 Linux で使えて、特にネットワークが必要なく、凝ったものを作る必要がないときにパッと作れるアプリが欲しかった、がスライドアプリを作ろうと思った動機。

作り始めてから marp なるものがあることを知ったけど、React, Reduxの勉強兼ねて作ってるからいっかー:innocent:という気持ち。

雑にLTするぶんには使えるかな、と思う。なんとか動くところまでもっていけた。

作ってみて

実際に開発してみると、以前frontendの開発を避けていたときより、思ったより簡単に実現できるんだな、と思った。 勿論、ツールが揃ってきたいい時代というのが大きいのだけれども、苦手意識を持たずに調べて実装すると意外にできるものだな。

しかし不慣れなもので、CSSとかちょっとした動きつけるのとか結構たいへんだった。テストをつけられなかったのが心残り。

ちょうど webpacker が話題にあがっていたときに babel, webpack に触れていたのはただの偶然。更にお仕事でもちらっとReact, Redux使うことになったのも偶然。 いろんなものに触れておくのは大事ということを体験した。どこから何が起こるかはわからない。

開発コンテストについて

社内の開発コンテストは、以下のいくつかの動機で始めたもの。

ちょっと運営に噛んでいるので、エントリ数を増やすために私は個人参加してるのですが :sweat_smile:

このあたりの話は、関西Ruby会議2017 で話しすることになりそう。

で、来週から社内で投票を行って競う予定になっているので、それなりの結果がでるといいな。

IE11 でbabel-polyfillが入ってなくて画面が真っ白になる

社内のesaに書いたものをちょっと改変して掲載。

React + Redux + material-ui な SPA で、IE11 で表示しようとすると画面が真っ白、開発者ツール?を見てもなんのエラーも書いてなかった…という現象に遭遇した。

少し調べるとstackoverflowのこれ に当たったので、先のページの内容と併せて ES2016 絡みっぽいのでもしや polyfill 入ってないのでは?と思ってみたら入ってなかった。 babel公式サイトのpolyfillのページ を参考に入れたら解決した。

これって実は webpacker 使って固めたアプリにも影響あったりするかも?と思いつつ、まだ確認できていない。(というのも、Windows がないのであった…)