powを別マシンから使う時に出てきたxip.ioがクッソ便利なことに今更気づいた。

% ping 192.168.0.1.xip.io
PING 192.168.0.1.xip.io (192.168.0.1): 56 data bytes

xip.ioの前にIPつけるとそのIPを返してくれる。

ってことはvagrantデフォルトの192.168.33.10を返すようにしたら便利だ。

% ping 192.168.33.10.xip.io
PING 192.168.33.10.xip.io (192.168.33.10): 56 data bytes

その前にIP以外のものを付けても同じIPを返してくれる。

% ping foo.192.168.33.10.xip.io
PING foo.192.168.33.10.xip.io (192.168.33.10): 56 data bytes

ってことは設定無しで好きなIPでVirtualDocumentRootが使えるってことだ。

Macに複数サイトに対応したPHP環境を簡単に作る - komagata

screenで絵文字が出ない問題もあってターミナルマルチプレクサを見なおしてみた。

screenで絵文字を表示できない - komagata

tmuxに移行しようかと思ったけどpaneやwindowの概念がscreenと違うし、そもそも俺は同じディレクトリでTerminalが開きたいってだけで、画面分割はvimでしか使ってないのでNew tabs open with: Same Working Directory(同じワーキングディレクトリで新規タブを開く)でいいやってことになりました。

これはMacのbash用の設定なので独自に下記の設定で、単に最後にいたディレクトリで開くようにした。

# ~/.zshrc:
function save_cwd() { pwd > ~/.cwd }
autoload -Uz add-zsh-hook
add-zsh-hook precmd save_cwd
cd `cat ~/.cwd`

vimで画面分割した時日本語がズレる問題とか、若干重い問題とかもついでに解消された。ターミナルマルチプレクサ通さない直接vimは速い気がします。

@mgikenさんにvimmer向けのやり方を教えていただきました。

参照:Vim/ファイルを暗号化する [俺の基地]

要はDropboxディレクトリ内のpasswordというテキストファイルにパスワードを書いて暗号化したいので我々vimmerにとってはvimでサクッとできるとありがたい。

$ vi ~/.vimrc
set cryptmethod=blowfish
$ vi foo
$ cat foo
VimCrypt~02!q?@?qTn&?1F_
$ vi foo

1passwordのsecure noteの動作がいまいち信用できないんでこっちで行こう。

単にテキストファイルを暗号化してDropboxのPrivateに乗せておきたい。

gpgを使うのが一般的っぽい。デフォルトではCAST5(CAST128)というアルゴリズムで暗号化されるらしい。

$ brew install gpg

暗号化。

$ echo unk > password 
$ gpg -c password
パスフレーズを入力: 
パスフレーズを再入力: 
$ cat password.gpg 
?B??ڼ?`?"?F?V?u",
                 ???B%U?$?m?3?%{In?+}??

復号化。

$ gpg password.gpg 
gpg: CAST5暗号化済みデータ
gpg: 1 個のパスフレーズで暗号化
gpg: 警告: メッセージの完全性は保護されていません
$ cat password
unk

警告が気になるが・・・。

見られたくないものはカジュアルに暗号化していきたい。

追記:

@yagi_に教えていただきました。

gnupg - How do I fix "WARNING: message was not integrity protected" when using GPG symmetrical encryption? - Super User

「AES(Advanced Encryption Standard)がもっと強力で標準の暗号化方式としてできたんだからそれを使うべきそうすべき」だそうです。

暗号化。

$ echo unk > password
$ gpg -c --cipher-algo AES256 password 
パスフレーズを入力: 
パスフレーズを再入力: 
$ cat password.gpg
?       EBr?eε?`?A?bH??<9?s?"!???2ա?W?{?>?5??H???????ř X?{?&h??`U?
                                                                  p????

復号化。

$ gpg --cipher-algo AES256 password.gpg 
gpg: AES256暗号化済みデータ
gpg: 1 個のパスフレーズで暗号化
パスフレーズを入力: 
$ cat password
unk

~/.gnupg/gpg.confcipher-algo AES256と書いておけばオプションを付ける必要がなくなります。復号時に何で暗号化されてるか表示してくれるので「何で暗号化したんだっけ?」となることがなくなってよいですね。

現時点の最新版であるRails4.2.1以下MySQLデフォルトだと絵文字が保存できません。コンシューマー向けサービスのコメント欄など今どきは普通に絵文字を入力されるのですぐに問題になります。(Incorrect string valueエラーになる)

実直な対応方法はmysqlでutf8ではなくutf8mb4を使うというものです。4byteのunicodeも保存できるようになるので絵文字も問題無しです。絵文字の種類が増えても問題無いでしょう。

ActiveRecordをutf8mb4で動かす - Qiita

穏便な解決方法

rails + mysqlデフォで動かないのと、一部のカラムでだけ対応したいこと、全テーブルのインデックスが長くなるとパフォーマンスに影響でそう、mysqlが古いと対応してない、など後ろ向きの理由があって、怖話ではDBに格納するときだけhuman friendlyな文字に変換し、出すときに戻すという実装にしました。

前向きの理由としては、画像への変換と組み合わせて怖話独自の絵文字を追加し易いという点があります。(LINEスタンプ的なのやりたかった)

実装

class Comment
  def body=(text)
    write_attribute(:body, Rumoji.encode(text))
  end
    
  def body
    text = read_attribute(:body)    
    Rumoji.decode(text) if text.present?
  end
end
mysql> select body from comments order by id desc limit 1;
+-----------------------------------------+
| body                                    |
+-----------------------------------------+
| テスト:poop::thumbsup::musical_note:    |
+-----------------------------------------+
1 row in set (0.00 sec)

rumojiはまさにそのために作られたgemでとっても簡単です。

絵文字共通化問題

非対応プラットフォームでも表示できるよう、画像に変換するというのはまた別のお話・・・。

カラー絵文字ライセンス問題 - komagata

怖話でコメント欄に絵文字を使えるようにしました。

コメントに絵文字が使えるようになりました - 怖話からのお知らせ

で、疑問に思ったのが、githubとかで画像として使われてるAppleのカラー絵文字ってライセンス大丈夫なの?ってこと。

結論としては使っちゃいけないらしい。

Emoji licensing: :cry:

しかし、Appleにメールした人によれば2014年03月12日の時点で決まったライセンスが無いらしい。

ios - License of "Apple Color Emoji.ttf" - Stack Overflow

どっちにしろ危ねえ感じです。

TwitterやGoogleなど出してるオープンソースのカラー絵文字入りフォント由来のものを使うのが安全だと思います。

ここんとこレガシーPHP改善日記がらみで仮想化技術や構成管理ツールをいじってました。(Xen、VirtualBox、Chef、Ansible、Dockerとか)

結局、"ほぼすべてを使ってみて、そして全て捨てたあとでさあどうしよう"という感じです。こんな苦労はしたくなかった。

全体的な傾向

古いものは大がかりで新しいものは無駄が少ない。

  1. 実用的な機能を備えたツールが出る
  2. パワーアップ版が出る
  3. ミニマル版が出る

イメージ方式(別名秘伝のタレ方式)とレシピ方式がある。

これはプログラム言語でいうとイメージ方式のSmalltalk vs レシピ方式のC言語みたいな構図にある。

イメージ方式は作成が楽で自由度が高い反面、分割再利用が難しい(秘伝のタレ化)。また成果物がデカイ。

レシピ方式は分割再利用が容易な反面、作成が辛い。また成果物は小さいが実行する必要があるので遅い。

現実

  • 他人のイメージ/レシピはなぜか使わない。(書き方をパクって自分のレシピに入れることはする)
  • 結局全部自分で作る/書くことになる。
  • PCセットアップ時に一回取ってくるぐらいなのでサイズどうでもいい。

結論

こと開発環境については何を選んでも苦しみはなくならない。ブッチギリの優位性もない。なので好きなの使え。(環境を導入する側が楽なツールが比較的良いですねぐらい)

UI考(番外編) AppleWatchについて、あまり語られてない視点 | fladdict

Android + Android Watch + Nexus PlayerというGoogle信者状態でいうのもなんですが、この間飲み会で話してて出た話。

Apple WatchはすごくないけどSiriはすごい。そんでSiriの凄さを最も発揮できて現実的なガジェットはBluetoothヘッドセットなんじゃないかってこと。

Bluetoothヘッドセットっていっても↑こういうちっちゃいやつ。

自転車でツーリングに出かけるときにこういうの付けてるんですが、すごい便利。

ふたてに別れた後も特に切る理由が無いのでしばらく俺は家の中で相手が整体行ってる音とか聞いてました。(良いトランシーバーアプリあればいいんですが、知らないのでLINEとかHangout使ってます)

「どの辺を重点的にやりますか?」

「肩を、この辺をお願いします。」

俺「混んでますか?YESなら咳払いを1度、NOなら2度してください」

みたいなことを家で言ってて笑えます。片耳のBluetoothヘッドセットって小さいやつはすごく小さいので補聴器と変わらんし、付けてても意外とみんな気にしません。(整体師は特に気にしてないらしい)

攻殻機動隊の電脳通信みたいですげー便利だなと思います。

電脳通信と違って不便に感じるのが、声に出して発声しないといけないところ。信号待ちで発声したら前にいる人振り返りますから。でもまあスーツの人が使ってると「忙しそうな人だなあ」と認識できるし、海外ドラマだと嫌な弁護士役とかがよく使ってるよねって話してました。普及すれば当たり前になるのかも。

Apple Ear(by beats)が最強のガジェットなんじゃない?通信にiPhoneは必須だからApple損しない。もっと進化したSiriで全ての命令をし、通知は音声で受け取る。

Bluetooth4.0で大幅に省電力になったのでちょっと高価なやつにすれば日中外出中ずっと(10時間ぐらい)バッテリー持つのできると思います。

キラーアプリはイイ感じで相手とタイミングをフィルターできる複数人ボイスチャットと本当のバーチャルアシスタントと化したSiri。

グラスと違ってファッションに与えるギャップが少ないし、片耳なので法的な問題も少なそう。

飲み会でも「最近のSiriは結構すごい」とみんな話してましたが(俺はGoogle Nowしか知らん)一般の人でも問題無いほどSiriが進化した時、Apple Earが出たら便利なんじゃない?こう使うべし、こういうライフスタイルにせよ!という提案ベースのガジェットがいいよなあと思った次第です。

かの文豪、夏目漱石は"I love you"を「月が綺麗ですね」と訳したそうです。

コードレビューで"LGTM"と聞きかじった英語でばかり書いていた俺は猛省し、きちんとした日本語で書くことにしました。八紘一宇、玉と砕けよ!

Initial content

$ CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl` --with-readline-dir=`brew --prefix readline`" rbenv install 2.2.1

debianだと2.1.2から2.2.1にアップデートするのに必要なpackageにlibffi-devが増えてるので注意。