ダメ人間オンライン

あまり信用しないほうがいい技術メモとか備忘録とかその他雑記

やったー!超キュートなHiveロゴを愛でながらブラウジングできるChrome拡張できたよー\(^o^)/

f:id:dameninngenn_owata:20130613014858p:plain
http://www.apache.org/

事の発端

@tagomorisさんがHiveロゴがプリントされたTシャツを着てた

背中側が狂気に満ちてると感じた

kowai

夢に出てきた

起きたらHiveロゴがとても愛おしく感じるようになってた

もっと長い時間眺めていたい!

どのページ見てもHiveロゴが目に入るようにすればええんや!!

@tagomorisさんが着てたTシャツのデザインはこちら
Hadoop Conference Japan 2013 Winter にいってきた&しゃべってきた - tagomorisのメモ置き場

⊂二二二( ^ω^)二⊃

dameninngenn/chrome-ext-bu-------n · GitHub

やったー!かーわーいーいー!!

ただ大量に発生させすぎるとCPUがウォーーーってなってファンがファーーーーーってなる。。

余談

ライセンスの話

Hiveロゴのライセンスってどうなってるんだろうと思って調べてみたけど明記されてるとこ見つからなくてtwitterで聞いてみたら教えてもらえた。


なるほど。

読んでみると、

You needn't ask us for permission to use Apache's graphics logos (the versions published on individual project's websites) on your own website solely as a hyperlink to the specific Apache project website or to www.apache.org. All other uses of Apache Foo (and similar) graphic logos must be approved in writing by VP, Apache Brand Management or a designee.

Apache Trademark Policy

って書いてあって、www.apache.orgへのリンクと共にウェブサイトで掲載する分には特に許可とかとらなくてやっちゃっていいけどそれ以外の用途なら別途聞いてねみたいな感じだったのでメールで問い合わせた。

poor Englishで申し訳なく思いながらやりとりして、キャプチャとって見てもらったりしてこんな感じですねん!ロゴとしてそのまま使うんじゃなくてソフトウェア内での要素の一つとして使いたいですねん!って説明してokをもらった。

ポイントとしては
1. Apacheのロゴを個人的なプロダクトであれロゴとして使ってはいけない。Chrome拡張で言えばアイコンにロゴは使ってはいけない。
2. 利用者が勘違いすることなく「このグラフィックはApacheのものである」と認識できるよう注意書きを表示しなければいけない。
ということ。

なので拡張を入れた時点では機能はOFFで必ず設定画面を開いてONにしないと動かないようにしてそこに説明書きを表示するようにした。あとはREADMEにも。

当たり前のことだけどブランドをすごく大事にしてるんだなーっていうのをやりとりしてて特に感じた。

Thank you Shane Curcuru.

requestAnimationFrame

フレーム毎に動かすのをsetTimeoutでやってたけどrequestAnimationFrameっていうのがあるっていうのを知ってそれを使うようにした。

一番のメリットだと思ったのはブラウザのタブが非表示になってる時は処理をしないところ。今回のだと作りが雑ってのもあってすごいCPUが頑張る感じになってるので全部のタブでブンブン飛び回ってる状態だと大惨事になる。なので非表示にしてるやつの処理をしないと表示してるのだけ頑張る感じなので大惨事まではいかず惨事ぐらいまでにおさまる。

けど使い方を間違ってる感はあるので(CPU頑張る感じになってる部分でお察し)こういうアニメーションまわりのところとかjsの根本的なリソースまわりのこととかもうちょっとちゃんと勉強したい。マサカリ飛んでくる。kowai

Chromeのバグ

Chrome27からかわかんないけどImage()を使ってなんやかんやしようとしたら

returns Uncaught TypeError: Type error

みたいなエラーが出てよくわからず「????」ってなって悩んでたけどどうやらChrome側のバグだったらしい。

Issue 238071 - chromium - Using canvas drawImage in chrome extension content script returns type error - An open-source project to help move the web forward. - Google Project Hosting

unite.vim + perldoc.vim

unite-perldoc

perldoc.vim 便利ですよね。僕も愛用させてもらってます。

モジュール名の上にカーソルがある状態で K を入力するとドキュメントが見れるし

:Perldoc HogeFuga

としても同じように見れる。しかも補完も効く。ステキ。

カーソルがモジュール名の近くにあるか、調べたいモジュール名がはっきりわかってる場合にサッとドキュメントをひけるってわけですね。

けど上記を満たさない場合だと若干手間取ってしまう。例えば、

my $nanntoka = SugokuOboeduraiNamaeNoModuleDesuyo->new();

...
# 上のモジュール名が見えなくなるぐらいの行数を間に挟んでから
$nanntoka->shiran_method( 'hanage' );

みたいな時に「あー、このshiran_method()ってなんやろー。モジュール名なんやっけ、えっと、、、」ってなって上にスクロールして戻って「そうそうこういうモジュール名やった」って言いながらperldocで引くみたいな感じになってサッと引けないことがある。

今となってはそんなことが本当にあったのかどうかも疑わしいけどあったということにしとく。

ので今開いてるファイルでuseしてるモジュール名をunite.vimで一覧表示してそこからperldoc引けたらサッとできそうってことでやってみた。

dameninngenn/unite-perldoc · GitHub
f:id:dameninngenn_owata:20130426021332p:plain

正規表現でuse なんとかを引っ掛けてそれを:Perldocに渡してるだけです。requireはとりあえず考慮してない。vimの正規表現こわい。

とりあえずそれっぽくできたので満足した。

ref.vim

ref.vimというperlだけに限らず他の色んな言語のリファレンスを引ける便利なプラグインがあって、それだと標準でuniteから使えるみたいな感じだったので試してみた。

特に何も設定なし
f:id:dameninngenn_owata:20130426021335p:plain

let g:ref_perldoc_complete_head = 1
f:id:dameninngenn_owata:20130426021323p:plain

という表示になって候補となるモジュール名をpathを走査して一覧表示してるっぽい感じ(ちゃんと確認したわけではないですが)で今開いてるファイルに含まれるモジュール名を表示するっていうやりたい事とはまた別の用途な気がした。uniteのインターフェースで絞り込んだりして引きたいって場合に便利そう。

unite.vimでbuffer一覧表示をシュッとさせたかった

\前回のラブライブ!/

neobundleの導入ついでに使ってたプラグインが軒並みアップデートされたけど、:Unite buffer した時の表示がなんか賑やかになってたのでもうちょっとシンプルに表示するようにしたいと思ったのでした。

f:id:dameninngenn_owata:20130314042658p:plain

converter

unite.vimのバージョンは5.0。ドキュメントには簡単にそこの表示を変更できるような感じのことは書いてなかったのでググってみたところ unite.vim buffer buffer_tab のバッファ番号表示を消す でできそうだったので真似をした。

dameninngenn/unite-converter-buffer-simple · GitHub

少し違うのは、ドキュメントの unite#custom_filters の項目を見ると

Note: This function is deprecated. Please use
unite#custom_source() instead.

となっていたので unite#custom_filters じゃなくて unite#custom_source を使った

結果

f:id:dameninngenn_owata:20130314042738p:plain

少しみやすくなった。ハイライトまわりも見直す。

すぐに超エキサイティンになれるGoogle Chromeの拡張をシュウウウウウウウウウウウウ

生きていればつらいことがある。
しかし、つらいからと言って簡単に投げ出す事は出来ないということも多い。

みなさんもつらまってる時、よくなんとかドームで遊ぶと思う。
当然のごとく僕もそうである。

最近つらい事がよくある。
そんな時のために、なんとかドームを素早くプレイできる必要があった。
なので、なんとかドームをすぐプレイできるGoogle Chromeの拡張を作った。

「だめだ。もうやってらねー」って時は、右にあるアイコンをクリックすればすぐなんとかドームをプレイできる。最高。超エキサイティン。

f:id:dameninngenn_owata:20130312005330p:plain
dameninngenn/chrome-ext-nanntoka-dome · GitHub

まんをじしてneobundle.vimに乗り換えてみた

今までpathogen.vimを使っていたのをneobundle.vimに乗り換えてみました。
Vundleとかneobundle.vim使ってなかったのはpathogenで今そんな困ってないしなーって思ってたうえに、試しにやってみよっかなーって思った時になんかめんどくさそうだったからですね。

でneobundleの解説とか読んだりしてると今の環境より恩恵得られそうだったので重い腰をあげて移行した。

移行作業

~/.vim/bundle/ 下を全部消して、.vimrcのpathogenの設定消して、~/.vim/bundle/ の下にneobundle.vimもってきて、.vimrcにneobundleの設定書いて:NeoBundleInstallでフィニッシュした。

変わったこと

pluginインストールの管理がgit submoduleから.vimrcへの記述になった。これがなにげに嬉しい。
.vim/以下もgithubで管理してるのですがpublicなプラグイン以外に社内だけで使うプラグインとかもあって、もちろん公開できないのでそこのリポジトリに含めることができない。今まではローカル環境でブランチ分けて更新があったらうまい具合にマージしてとかなんかそんなめんどくさいやり方で運用してた。

この運用は間違ってgithubに社内用のプラグインとか含めてしまってコミットとかしたらいけないとか考えつつの精神的負担が結構大きかった。結局社内で使う分にはsshじゃなくてgitプロトコルのにしたからその心配はなくなったけど。

でneobundleだと個別環境用の.vimrc.local(.vimrcから読み込むやつ)に社内用のプラグインを書いておくだけで綺麗に分けられるのでだいぶシュッとした。管理部分に無駄なコスト払わなくて済むようになったので嬉しい。

あと~/.vim/bundle/下をリポジトリに含めないようにした。環境毎にupdateして使えば良い。

困ったこと

neobundle自体の管理をどうしようか少し考えた。

というのもまっさらなとこに環境構築する時に最初にneobundleが入ってないと他のプラグインはインストールすることができない。bundleの下はリポジトリに含めないようにしたので違うpathにsubmoduleとして入れておこうかなと思ったけど、neobundle自体もbundle下に入れてupdateとかできるようにしときたい。問題はこの初回時のみ。

で結局この問題は.vim/とか.vimrcで解決するのではなくて.vimのセットアップ用スクリプトのほうで解決するようにした。いつもdot_filesまわりの設定とか.vim/やらvim本体のインストールとかを簡単にできるようにするために用意してるスクリプト。

.vim/のセットアップ部分だと

#!/bin/sh

cd
if [ -d ./.vim ]; then
    echo "already exists! $HOME/.vim"
    exit;
fi
git clone git://github.com/dameninngenn/.vim.git

cd .vim
git submodule init
git submodule update

mkdir bundle
cd bundle
git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
vim +NeoBundleInstall +q

cd
if [ ! -d ./tmp ]; then
    mkdir tmp
fi
echo "finished setup vim plugins"

こんな感じでとりあえず初回時にneobundleをbundleの下に放り込んでNeoBundleInstall走らせる。

他の人がどうしてるのかは気になる。

ニッコリ

submoduleでの管理だとプラグインのupdateとかなんか気が進まない感じだったけど何か解放された感がある。

色々気楽になった感じがするので捗りそう。