作成者別アーカイブ: serima

Mac の Chrome で、キーボードのフォーカスをページに戻したい

Mac の Chrome では、Cmd + l で、アドレスバーにフォーカスされるようになっていますが、逆の動作はしないようになっています。つまり、フォーカスをページに戻したくても、Cmd + l 押しても戻らない。
ページをクリックすればもちろん戻るけど、当然ながら、キーボードだけで完結させたいじゃないですか。
特に vimium とか入れてれば尚更。vimmer としては、Esc 押下すればページにフォーカスされるのが一番自然なんですが、それは API のコントロール外にあるらしく変更できないらしい。

で、みんなどうしているのか…とググッてみたところ出てきましたよ。やっぱり悩んでる人はいるらしい。

http://superuser.com/questions/324266/google-chrome-mac-set-keyboard-focus-from-address-bar-back-to-page

簡単に言うと、アドレスバーに「javascript:」って打ってエンター押すと、ページにフォーカス戻るよ。この機能を使って、検索エンジン追加して、「u」を入力してエンターしたら「javascript:」って打ったことにできるよということですね。

なんという hack。これぞ hack って感じですね。

やり方は以下。

1. chrome://settings 開く
2. 検索 の「検索エンジンの管理」開く
3. こんな感じのを追加
chromesearchengine

4. アドレスバーに u と打つとこんなふうに出てきてくれるので、すかさず enter

chromesearchengine2これで、完了です。u じゃなくて、なんでもいいと思いますが、とりあえず僕も前例に倣っておきました。

Google に bug report っていうか issue は出してるみたいだけど長らく放置されてるのかな(よく読んでない)

「良い戦略、悪い戦略」読後メモ。

久々にビビッと来るビジネス本に出会えたので、すこしばかり引用を。

それは「われわれの基本戦略は、顧客中心の仲介サービスを提供することである」というものである。「仲介サービス」というのはなかなか響きの良い言葉だが、要は金を預かって貸し出すということで、銀行の本業にほかならない。「顧客中心」は最近の大流行の言葉で、サービス業なら改めて言うまでもないことである。ひょっとすると、より良いサービスを提供して顧客拡大をめざすという意味かもしれないが、そうだとしてもどこでもやっていることで、これだけで差異化が図れるとは思えない。要するに「顧客中心の仲介サービス」はまったく中身のない言葉である。この銀行の戦略から厚化粧をはがせば、「われわれの基本戦略は銀行であることである」となってしまう。

痛快。顧客中心ってバズワードになっているが(今はもう落ち着いたかな?)、よくよく考えたら顧客中心じゃないビジネスっていったい何なんだという話。
ただ、いままで顧客中心なビジネスをしていなかった業界に斬りこむ場合もあるので、そういうときに差異化になるのかな。

がんばることは人生において大事ではあるが、「最後のひとふんばり」をひたすら要求するだけのリーダーは能がない。リーダーの仕事は、効果的にがんばれるような状況を作り出すことであり、努力する価値のある戦略を立てることである。

その通り、という感じ。

分権化が進んだ企業の場合、新製品が投入されると、製品群の位置づけや棲み分けは曖昧になりやすい。

権限委譲のデメリットのひとつ。意識しないとなー。

シャーロック・ホームズがワトソンによく言うように、「見ているだけではだめだ、観察しなければいけない」。

これはかっこいいなと思ってメモった。

目先のことや最初の思いつきに迷わされずに自分の考えを導くためには、三つの習慣をつけるとよい。第一は、近視眼的な見方を断ち切り、広い視野を持つための手段を持つこと。たとえばリストは良い方法である。第二は、自分の判断に疑義を提出する習慣をつけること。自分からの攻撃に耐えられないような論拠は、現実の競争に直面したらあっさり崩壊してしまうだろう。第三は、重要な判断を下したら記録に残す習慣をつけることである。そうすれば、事後評価をして反省材料として活用できる。

第三が特に気になった。失敗を推奨する会社はこのところ多いけども、きちんと振り返りを行わないと会社としてのノウハウとして積み上がっていかない。

最近読んだ本リスト

このところ、割と時間があったのでいろいろと本を読んだ。以下の本を読んだのですが、この周辺に興味ある人とディスカッションしたい。

  • 「納品」をなくせばうまくいく
  • ワーキングカップルの人生戦略
  • ザッポス伝説
  • トヨタ生産方式
  • 入門 組織開発
  • チームの力
  • ALLIANCE
  • スーパーエンジニアへの道
  • ライト、ついてますか
  • 良い戦略、悪い戦略
  • WORK RULES!
  • 弁護士ドットコム 困っている人を救う僕たちの挑戦
  • メンバーの才能を開花させる技法

しばらくしたらまたブログ書きます。

Laravel のログインパッケージ Confide のパスワードリセット通知メールをテキストメールとして送信する

仕事で関わっているプロジェクトで Laravel のログインパッケージ Confide を使用しているのですが、パスワードリセット操作をした際にユーザに送信されるメールは、デフォルトだと Content-Type: text/html で送信されてしまいます。
これだとなにがまずいかというと、ユーザが @softbank.ne.jp などのキャリアメールを使用している場合に本文が添付ファイルとして送信されてしまいます。
さらに、charset が UTF-8 に設定されているため文字化けしていて読めないメールが届いてしまいます。

そこで、パスワードリセットの通知メールなんて、Content-Type: text/html で送るほどでもないので、text/plain に変えたいなーと思いました。

最初は、メール送信をしているメソッド ConfideUser#forgotPassword をオーバーライドしないとダメかなーと思っていたのですが、コードをよくよく読んでいくと config 変更するだけでいけそうということでやってみました。

結局、Confide も Swift Mailer を使ってメールを送信しているだけなので、渡す view の中身に気をつけてやればよしなにやってくれるということでした。

関係しそうなコードはこのへん。

https://github.com/Zizaco/confide/blob/master/src/Confide/EloquentPasswordService.php#L176
https://github.com/illuminate/mail/blob/master/Mailer.php#L328-L330

というかんじでした。
もちろん、text/html メールを送りたければ key の名前を html にすれば良いと思います。

なお、Confide の導入については @localdisk さんのLaravel のログインパッケージ Confideの解説(実践編)がとても親切です。

忘備録も兼ねてのポストでした。

VPN接続後、Vagrantに立てたホストにブラウザ経由でアクセスできなくなる問題

VPN クライアントは、Cisco AnyConnect Secure Mobility を使用しているのですが、
VPN 切断後に毎回 Vagrant に立てた環境に ssh はできるもののブラウザからアクセスできなくなってしまい、こうなってしまうと、vagraht halt -> vagrant up しても問題が解決せず、毎回 PC を再起動していました。

状況としてはこんなかんじ。

vagrant up -> (ブラウザアクセス可能) -> VPN 接続 -> VPN 切断 -> (ブラウザアクセス不能)

これだと本当に不便だし面倒なので良い解決策はないのかとググってみたところ、バッチリな回答が見つかりました。

http://stackoverflow.com/questions/24281008/vagrant-box-not-reachable-after-vpn-connection

I have the same problem – the only solution I got so far is to:

$ sudo ifconfig vboxnet0 down
$ sudo ifconfig vboxnet0 up

vboxnet0 というのは VirtualBox のホストオンリーネットワークというもので、仮想マシンを動作させているホストと、仮想マシンをつなぐネットワークインターフェースです。
(詳しくは、このあたりをご覧ください。)

http://kledgeb.blogspot.jp/2012/10/ubuntu-virtualbox-11.html

僕の環境では、これだけでは足りず vboxnet1 も同様に down up を行なうことで解消しました。

Laravel 4 から Slack へメッセージを投げる

この記事は Laravel Advent Calendar 2014 の 24日目のエントリーです。

はじめに

11月から、仕事で Laravel 4 と 話題の Slack を使うようになりました。

ChatOps の第一歩として、 Slack の Integrations の機能を使って、メンバーの Commit / pullreq を #github channel に垂れ流すようにしました。
これがとっても便利で、他のエンジニアの方が何をしているか可視化されることで、業務効率も上がりました。
なにより、単純に楽しいということが大事ですよね。

こうなってくると、プロダクトのアラートメールなども一元的に Slack で受け取れるようにしたいな…と思ってきてしまいました。

Slack API の Incoming WebHooks

Slack は API を提供しており、自由に外部サービスからメッセージを投げることができたりします。
Incoming WebHooks を登録すると、token 込みの WebHook URL を取得できるので、それを使って、まずは試しに自分の Team の #general channel にメッセージを投げてみましょう。

webhookbot

こんな感じでメッセージが投げられたでしょうか。

Laravel 4 から メッセージを投げてみる

PHP から Slack へメッセージを投げるプラグインは、このページを見る限りでもずいぶんたくさんあります。
https://api.slack.com/community

この中でも、Laravel 4 で一番使いやすそうな maknz / slack を使わせてもらうことにしました。

インストールは README を見れば簡単にできます。
試しに Laravel から送信してみるための artisan command を書いてみました。
Webhook URL は、別途 Config から取得するようにしています。

README を見ればわかると思いますが、以下のように chaining して書くこともできます。

アラートメールの代替手段としての Slack

Slack の API は、1 request / sec までのリクエストしか受け付けてません。
厳密にコントロールされているかは分かりませんが、大量に送るのは考えものです。

https://api.slack.com/docs/rate-limits

今回は、アラートメールの代替手段として考えていたので、デプロイ直後などにアラートが飛びまくる可能性があることも念のため考慮しました。

以下のような感じで、 SlackHelper クラスを作ってしまい、Slack へのメッセージングはここで管理するようなイメージです。
連投を防ぐ手段としては、Slack にメッセージを投げるたびに /tmp/postslack という空ファイルを touch して、その最終更新日時を見ることで、メッセージを投げていいか判定しています。

エラーハンドリングは、 Laravel のドキュメントにある通り、ログリスナーを登録する形で行っています。
http://laravel.com/docs/4.2/errors#logging

Slack 最高

これで無事にアラートが Slack に投げられるようになりました。
アラート以外にも他の通知系でメールを使用している部分も少しずつ Slack に寄せたいなと思ったりしています。

余談

この package ですが、 json_encode の UTF-8 問題で、最初は日本語文字列が含まれている場合 false が返ってきてしまう不具合があり送信できなかったのですが、 issue 登録したら、すぐに対応してくれました!

https://github.com/maknz/slack/issues/4

さいごに

明日はついに最終日ですね!
@localdisk さんのポエムに期待しつつ、みなさん良いクリスマスを!

UNIX/Linux環境でcsv/tsvにクエリを投げることができるqが便利すぎて生きるのが辛い

UNIX/Linux環境でSQLコマンドが使えたらいいのに、と思ったことはありませんか?
私はあります。

10万〜100万行レベルのデータを集計したいけど、わざわざDBにぶっ込むほどではない。
そんな時は、awk, join, grep, paste, wc, uniqなどなどの各種コマンドを駆使して集計しています。

ちなみに、joinコマンドに関してはここに大変お世話になりました。
本当に便利すぎて生きるのが辛いです。

◆joinコマンドが便利過ぎて生きるのが辛い
http://d.hatena.ne.jp/yutakikuchi/20120907/1346975281

ただ、これが複数ファイルにまたがって処理をしたりして、複雑になってくるとだんだん何のデータを操っているか混乱してきます。
そんなときに、カジュアルにtsv, csvファイルに対してqueryを投げられたらいいのになぁと感じていました。

そんなときに、これを見つけました。

◆q – Treating Text as a Database
https://github.com/harelba/q

q という超絶短いコマンドのため、単語のググラビリティ(単語のググられやすさ/ググりやすさ。)が悪すぎて、あまり発見されないかもしれません。

俺が求めていたのはコレだぁ!
ということで、実務でも使っています。

もっと普及して欲しいので、インストール手順からちょっとした実行サンプルを紹介します。

久々に見てみたら、brewでインストールできるようになってました。下記インストール手順参照のこと。(2015/07/24 追記)
http://harelba.github.io/q/install.html

必要環境はPython 2.5以上か、SQLite3モジュールがインストールされているPython 2.4以上です。
(Python 2.5は、SQLite3が標準バンドルされています)

中身を見てみると、1行目にインタプリタの指定があります。
自分の環境は、2.4.3と2.7.1の両バージョンがインストールしてあるため、2.7.1で実行されるように変更します。

実行してみます。

動きました。

PATHを通します。

.zshrcに以下を追記。

パスが通りました!

Examplesが載っているので、試しにそのまま入力してみます。

おー!
素晴らしい。

% seq 1 1000

1
2
3
4
5
(略)
1000

を出力して、
これを標準入力として q に渡す。
c1というのが、カラムの1番目という意味なので、
avg(c1)で、1〜1000の総和の平均
sum(c1)で、1〜1000の総和が出力されています。

こんな風にgroup byも使える!

ちなみにawkでやろうとするとこうですか。

joinも書けます。

SQLに馴染みのある人はqを使ったほうがサクッと書けていいですね。

terminal

ChromeのCtrl-Tabの動きをOSのCmd-Tabみたいに直近開いたタブを選択できるようにする

Macでのお話です。Windowsユーザはすみません。

Google Chrome の Ctrl-Tabを押すと、開いているタブを順次選択していきますが、シーケンシャルな動きをするので効率が悪いなぁと思っていました。
OS の Cmd-Tab は最近開いていたウィンドウを行ったり来たりできるので、それを Chrome でも実現できないかなと思ったのがきっかけ。

で、結論からいうと Chrome 拡張の Recent Tabs と KeyRemap4MacBook で実現できます。
まだお持ちでない方は先に下記からインストール。

  • Recent Tabs
  • KeyRemap4MacBook
  • KeyRemap4MacBookのPreferencesから、Open private.xmlを開いて独自のカスタマイズ設定を記述します。
    Extension のデフォルトのショートカットキーは Ctrl-Qですがその設定をオーバーライドしてしまいたいので、以下のように設定します。

    KeyRemap4MacBook

    Reload XML を押すと今保存した設定が現れますのでそれにチェックを入れます。

    スクリーンショット 2013-12-15 16.55.28

    これで、望み通りの動きになりました。めでたしめでたし。

    Macbook Proのメモリを16GBに増設した

    Macbook Pro 15-inch, Late 2011を使っているのですが、買った時からメモリは4GBでした。
    最近、ウェブブラウジングしてるだけでもChromeが重くてもっさりしてきたので、いっそのことメモリをがつんと増設してしまおうと考えました。

    調べてみると、すでにやっている人はたくさんいて資料となるページはたくさんあるし、Appleのサポートページにも細かくやり方が書いてありました。

    3000円でできたMacBook Proのメモリ増設。2GBから8GBに!わかりやすい解説

    【メモリMAX!】MacBook Proのメモリを16GB(8GB × 2枚)に増設 ~新春Macパワーアップ大作戦w
    Apple – MacBook Pro:メモリの取り外し方法と取り付け方法

    上海問屋でこれを買いました。送料込みで7600円ほどでした。
    http://www.donya.jp/item/21283.html

    静電気に十分気をつけ、作業自体は15分くらいで完了。
    改めて起動してみると、むっちゃサクサク。
    こんなことならもっと早くやっておけばよかったかなーと思いました。

    ストレングスファインダーをやってみた

    同僚の先輩が、前職ではメンバー全員がストレングスファインダーというものをやって公開しあっていたという話を聞いた。
    ストレングスファインダーとは、ストレングス(強み)をファインドするってことですよ。
    公開しあうということで、お互いの価値観などが知れるため、とてもいい試みだなと感じた。

    というわけで、まず自分はどんなものなのかと知ることにしましたのでこの本を買ってみました。
    この本を新品で買うと、コードがついてきます。そのコードをWEBで入力していろいろな質問に答えていくと、自分の内なる価値観が判定できるという具合ですね。

    親密性

    親密性という資質は、あなたの人間関係に対する姿勢を説明します。 簡単に言えば、親密性という資質によって、あなたは既に知っている人々とより深い関係を結ぶ方向に引き寄せられます。あなたは必ずしも未知の人たちと出会うことを避けているわけではありません――事実、知らない人と友人になるスリルを楽しむような他の資質を、あなたは持っているかもしれないのです――しかし、あなたは親しい友人のそばにいてこそ、大きな喜びと力を得るのです。あなたは親密であることに心地よさを感じます。一旦最初の関係ができあがると、あなたは積極的にその関係をさらに深めようとします。あなたは彼らの感情、目標、不安、夢を深く理解したいと思っています。そして、彼らにもあなたを深く理解してもらいたいと願っています。あなたは、このような親密さがある程度の危険性を含んでいることを知っています――あなたは利用されるかもしれないのです――しかし、あなたはその危険性を解かった上で受け入れます。あなたにとって人間関係は、それが本物である時のみ価値を持ちます。そして、それが本物であるかどうかを知る唯一の方法は、相手に身を委ねることです。互いの気持ちを共有すればする程、お互いの危険性も大きくなります。お互いの危険性が大きくなればなる程、自分たちの意思が本物であることを、よりはっきりと証明できるのです。これらが真の友情を築き上げるための一つひとつのステップであり、あなたはそのステップを喜んで進んで行きます。

    運命思考

    偶然に起こることは一つもありません。あなたは絶対にそう思っています。それは、人々が互いに結びついていることを、心底から確信しているからです。確かに人々は自分の行動を自分で決めることができる、自由な意志を持っている個別の人間です。とはいっても、私たちは何かもっと大きな存在の一部なのです。それをある人は人生の神秘と呼ぶかもしれません。それを精神あるいは生命力と呼ぶ人もいるでしょう。しかし何と呼ぶかは問題ではありません。私たちは互いから隔絶されているわけではなく、地球や地球上の生命から切り離されてもいないと知っていることで、あなたは安心感を得るのです。この運命思考という考え方には一定の責任感が付随しています。もし人々すべてがもっと大きな存在の一部であるなら、人は他人を傷つけてはいけないのです――なぜなら、自らを傷つけることになるからです。人から搾取してはいけません――なぜなら、結局自分自身に返ってくることになるからです。このような責任に対する認識が、あなたの価値体系を作り上げています。あなたは思慮深く、思いやりがあり、受容力があります。人々は皆同じであると確信しているあなたは、異なる文化を持つ人々の間で架け橋の役割を果たします。見えない力を敏感に感じ取り、平凡な日常生活の中に意味があるという安心感を他の人に与えることができます。あなたの信念は、あなたの育ちや文化によって決まりますが、それは強固なものです。理屈では説明できないことに直面した時、それは、あなたやあなたの親しい友人を支えてくれます。

    ポジティブ

    あなたは人をよく誉め、すぐに微笑みかけ、どんな状況においても常にポジティブな面を探します。あなたのことを陽気と言う人もいます。あなたのように楽天的になりたいと思う人もいます。しかし、いずれにしても、人々はあなたの周りにいたいと思います。あなたの熱意は人に伝染するので、あなたの近くにいると彼らには世界がより良いもののように見えてくるのです。あなたの活力と楽天性がないと、人は、自分の毎日は同じ事の繰り返しばかりで単調であるとか、最悪の場合、プレッシャーを重く感じてしまいます。あなたは、彼らの気持ちを明るくする方法を必ず見つけます。あなたはどんなプロジェクトにも情熱を吹き込みます。あなたはどんな進歩も祝福します。あなたはどんなことでも、よりエキサイティングで、より生き生きとしたものにする方法をたくさん考え出します。一部の懐疑的な人たちは、あなたの活発さを否定するかもしれませんが、あなたはめったにそれに引きずられることはありません。あなたの積極性がそれを許さないのです。あなたは、生きていることは素晴らしいという信念、仕事は楽しいものにできるという信念、どのような障害があろうと人は決してユーモアの精神を失ってはならないという信念から、どうしても逃れられないのです

    分析思考

    分析思考という資質を持つあなたは、他の人に「証明しなさい。あなたの主張がなぜ正しいのか示しなさい」と強く要求します。このような詰問を受けると、自分の素晴らしい理論がもろくも崩れ落ちるのを感じる人もいます。これがまさしく、あなたの意図するところです。あなたは必ずしも他人のアイデアを壊したいわけではないのですが、彼らの理論が堅固であることを強く求めます。あなたは自分自身を、客観的で公平であると考えています。あなたはデータを好みます。データは人々の考えに左右されず、ありのままだからです。あなたはデータを見ると、パターンと関連性を捜し出します。一定のパターンが互いにどのように影響するのか、どのように結びつくのか、結果はどのようなものかを理解しようとします。そしてその結果が、提示されている理論や目の前の状況にふさわしいかどうかを知ろうとします。これがあなたのやり方です。あなたはこれらの点を一つずつ明らかにして、根本的な理由を探し当てます。人はあなたのことを論理的で厳格であると見ます。その人達は、いつかあなたのところにやって来て、誰か他の人の「非現実的な考え」あるいは「整理されていない考え」を話し、あなたの研ぎ澄まされた思考から見た考えを聞くでしょう。あなたの分析結果を伝える時、できれば決して厳し過ぎないようにしましょう。さもないと、その「非現実的な考え」が彼ら自身の考えである場合、その人はあなたをわざと避けるようになります。

    活発性

    「いつ始めようか?」これはあなたの人生で繰り返される質問です。あなたは動き出したくてうずうずしています。分析が有用であるとか、ディベートや討論が貴重な洞察を生み出す場合があることをあなたは認めるかもしれませんが、心の奥深くでは、行動だけが有意義であると知っています。行動だけが何かを起こすことができるのです。行動だけが功績につながります。決断が下されると、あなたは行動を起こさずにはいられません。他の人は「まだ知らないことがあるのに」と戸惑うかも知れませんが、あなたのペースを遅くすることはなさそうです。そのうえあなたの考え方では、行動と思考は互いに相容れないものではありません。事実、活発性という資質によって、あなたは、行動は最良の学習手段であると考えています。あなたは決断し、行動し、結果を見て、そして学びます。この学習方法によって、あなたは次の行動、そしてさらに次の行動へと導かれるのです。もし行動しなかったら、どうやって成長できるでしょう? あなたは、行動がなければ成長できないと考えています。あなたは、危険を冒してでも行動し続けなければなりません。次の行動を起こさなければなりません。思考を常に活き活きと豊かにしておく方法が、他にあるでしょうか? 発言したことや考えたことによってではなく、実行したことによって判断されるということを、あなたは知っています。これが重要なのです。あなたはこれを恐れることはありません。あなたにとって、これが喜びなのです。

    分析思考かつ活発性だと、知らない間に活発性を殺してしまっているのではないか?
    現にそう思うところがある時期もあった。変に足踏みしているような期間。
    そういうときは、もう行動しちゃえってことのほうが強いんだな。

    あとは、ポジティブ。まぁなんとかなるでしょ。
    今の日本でどんだけ無茶しようが、死にはしないよ。(新歓のときの一気飲みは死ぬのでやめましょう)

    周りにいいことがあったらどんなちょっとしたことでも褒めちゃう。
    やったねって思う。天気が良くても褒めちゃう。

    ということで、大体あたってる。
    これをいかに利用していくかってところがポイントだね。