2013/02/25

[SublimeText2]Goto Documentationでドキュメントジャンプ

kemayo/sublime-text-2-goto-documentation · GitHub
フォーカスの当たった単語のドキュメントに飛ぶためのコマンドを提供するプラグイン。
以下のプログラミング言語をサポートしている。
  • PHP
  • JS / CoffeeScript
  • Python
  • Clojure
  • Go
  • Smarty
  • Ruby on Rails
作者はプラグインが自動的にキーバインドを追加するのは嫌いらしいので自分で追加する必要がある。
key Bindings - User に以下のように書けば良い。
{ "keys": ["super+shift+h"], "command": "goto_documentation" }
だんだん使い勝手が良くなってきた。

追記

中身見たら拡張が簡単そうだったのでCSSのドキュメントジャンプ関数を追加した。
def css_doc(self, keyword, scope):
    open_url('http://docs.webplatform.org/wiki/css/properties/%s' % keyword.lower())
例えば opacity の上で実行するとhttp://docs.webplatform.org/wiki/css/properties/opacityに飛ぶ。
まだドキュメントはアルファ版らしいけど今後に期待ということで飛べるようにしておく。
2013/02/24

PHP5.3の無名関数がcreate_function関数より便利!

PHPで配列から特定の値を除去する関数を作っていたのだけど
create_functionに値を渡して判定してarray_filterで除去するのが良いかと思った。
が、create_functionに値を渡すことができなかった…!

参考
無名関数(クロージャ) « PHP6.jp
無名関数/クロージャ基礎 | PHPサンプル実験室
Tricorn Labs » PHP 5.3を使ってみました。の機能1. クロージャ(無名関数)

PHP: 無名関数 - Manualでも混同されているけど無名関数とクロージャは別物なので注意。

ということで作った関数がこちら。
function array_remove_all($array, $value){
    $callback = function($v) use($value){
        return $v !== $value;
    };
    return array_filter($array, $callback);
}
use を使うことで外からの変数を無名関数に渡すことができる。
array_filterでコールバック関数にcreate_functionを指定すると
変数と処理を文字列で記述しなくてはならなかったので IDEの支援なしで複雑なものを書くのは厳しかった。
せいぜい簡単なワンライナーで書ける処理だけだったので無名関数でPHPのコードとして書けるのは嬉しい。
今度から無名関数を使っていきたい。
2013/02/23

コードを試しに実行できるideone.comが最強すぎる件

ideone.com
Ideone.com | Online IDE & Debugging Tool >> C/C++, Java, PHP, Python, Perl and 40+ compilers and interpreters

ideone.comとは

画像を見てもらえばわかるようにコードを投稿して実行することのできるサイトです。シンプル!
標準入力にも対応しているので競技プログラミングのテストにも良いです。

実行することのできるプログラミング言語は50種類以上!

バージョン・コンパイラなどの違いを含めると現在65種類もあります。
しかも増え続けていて、バージョンも結構新しいのに上がっているという凄さ!
個人的にPHPのバージョンが5.4になって DateTime が使えるようになったのが嬉しいです。
サポートしているプログラミング言語とそのバージョンは以下のページから確認できます。
http://ideone.com/faq#faq_supported_langs
一般的なプログラミング言語のサポートはもちろん、
アセンブラ、統計解析用のR言語、SQL、ネタ言語のBrainf**k、Whitespaceまでサポートしています!

アカウントを作成するメリット

アカウントを作成すると以下のページに書いてあるようなメリットが得られます。
http://ideone.com/account/register
抜粋すると非公開の投稿ができるようになったり、投稿履歴が見れるようになったりします。
しかし、一番は投稿後にソースコードを編集できるようになるのことですね。
よく使うのでその場で編集できるのは便利です。

オススメなので使ってみてね!
2013/02/16

[SublimeText2]SublimeCodeIntelで更にIDE化

Kronuz/SublimeCodeIntel · GitHub
ユーザー定義変数/関数の補完や定義元ジャンプができるようになる。

定義元ジャンプ: Command + F3 または Alt押しながらクリック
ジャンプ前の場所に戻る: Command + Alt + Ctrl +

標準関数について定義元ジャンプを実行するとステータスバーに関数の説明が出る。
出来ればドキュメントに飛んでくれたら嬉しいけどまぁ十分。
2013/02/12

[SublimeText2]PHPDoc形式のコメントを補完してくれるPhpDoc

SublimeText/PhpDoc · GitHub
Docコメント/**を入力すると改行した時に次の行に * が補完される。
PHPDocのタグ(Tags - PHPDoc - Wikipedia, the free encyclopedia)の補完も
サポートしているようで@を入力してctrl + spaceを押すと
アノテーションの一覧が出るのでtabで確定すると色々補完される。
IDE でもここまでの補完はしてくれないかも?PHPを使う人は入れておくと便利。
2013/02/11

[SublimeText2]SublimeLinterでSublimeTextをIDE化

SublimeText2で他のIDEを置き換えようとしているのだが
まず初めにエラー表示は基本だよねーということで導入してみた。
SublimeLinter/SublimeLinter · GitHub

Package Control から Install Package で SublimeLinter を探してインストール。
Perl, PHP, Ruby なら特に何もしなくてもたぶん使える。
保存するだけでエラーチェックしてくれる。

ショートカットキー

任意実行: command + ctrl + l
次のエラー: command + ctrl + e
前のエラー: command + ctrl + shift + e

設定

{
    // If true, lines with errors or warnings will have a gutter mark.
    "sublimelinter_gutter_marks": true,

    // Set to true to highlight annotations
    "sublimelinter_notes": true
}
行数のところにマークつけるのと TODO, README, FIXME をハイライトするのだけ変えた。
エラー箇所ポップアップは保存するたびにポップアップしてきてウザったかったのでやめておいた。

Color Scheme

User Color Scheme の array タグの中に以下を入れると設定が反映される。
Annotations は 緑背景の黒字にした。オレンジ系にしたかったけど変なアウトラインの色が入るから微妙だった。
他はSublimeLinter/SublimeLinter · GitHubに載っていたまま。
<!-- SublimeLinter -->
    <dict>
        <key>name</key>
        <string>SublimeLinter Annotations</string>
        <key>scope</key>
        <string>sublimelinter.annotations</string>
        <key>settings</key>
        <dict>
            <key>background</key>
            <string>#339966</string>
            <key>foreground</key>
            <string>#000000</string>
        </dict>
    </dict>
    <dict>
        <key>name</key>
        <string>SublimeLinter Error Outline</string>
        <key>scope</key>
        <string>sublimelinter.outline.illegal</string>
        <key>settings</key>
        <dict>
            <key>background</key>
            <string>#FF4A52</string>
            <key>foreground</key>
            <string>#FFFFFF</string>
        </dict>
    </dict>
    <dict>
        <key>name</key>
        <string>SublimeLinter Error Underline</string>
        <key>scope</key>
        <string>sublimelinter.underline.illegal</string>
        <key>settings</key>
        <dict>
            <key>background</key>
            <string>#FF0000</string>
        </dict>
    </dict>
    <dict>
        <key>name</key>
        <string>SublimeLinter Warning Outline</string>
        <key>scope</key>
        <string>sublimelinter.outline.warning</string>
        <key>settings</key>
        <dict>
            <key>background</key>
            <string>#DF9400</string>
            <key>foreground</key>
            <string>#FFFFFF</string>
        </dict>
    </dict>
    <dict>
        <key>name</key>
        <string>SublimeLinter Warning Underline</string>
        <key>scope</key>
        <string>sublimelinter.underline.warning</string>
        <key>settings</key>
        <dict>
            <key>background</key>
            <string>#FF0000</string>
        </dict>
    </dict>
    <dict>
        <key>name</key>
        <string>SublimeLinter Violation Outline</string>
        <key>scope</key>
        <string>sublimelinter.outline.violation</string>
        <key>settings</key>
        <dict>
            <key>background</key>
            <string>#ffffff33</string>
            <key>foreground</key>
            <string>#FFFFFF</string>
        </dict>
    </dict>
    <dict>
        <key>name</key>
        <string>SublimeLinter Violation Underline</string>
        <key>scope</key>
        <string>sublimelinter.underline.violation</string>
        <key>settings</key>
        <dict>
            <key>background</key>
            <string>#FF0000</string>
        </dict>
    </dict>
<!-- /SublimeLinter -->
2013/02/10

[競技プログラミング][PHP][AtCoder]アキレスと亀

B - アキレスと亀

時間制限 : 2sec / スタック制限 : 16MB / メモリ制限 : 64MB

問題文

高橋君は、カメが大好きです。高橋君は L メートル先にカメを見つけたので、
このカメを追いかけて、捕まえようと思いました。
ですが、カメは高橋君が苦手です。
カメは、高橋君から追いかけられ始めた瞬間、高橋君と反対の方向に逃げていきます。
高橋君の追いかける速度は秒間 va メートルで、カメの逃げる早さは秒間 vb メートルです。

ここで高橋君はふと疑問に思いました。
高橋君が、今カメのいる場所までたどり着いた時、カメはさらに少し先に進んでいます。
そのカメがいる場所まで高橋君がたどり着くと、カメはその少し先にまた進んでいます。
これでは何度繰り返しても永遠にカメに追いつかないのではないでしょうか。

高橋君は、この事実を調査するため、
この動作を N 回繰り返した時に、カメと高橋君の距離がどれだけ縮まっているかを調べたいです。
高橋君とカメの距離を出力するプログラムを作成してください。
なお、高橋君はカメがいるところまでまっすぐ最短距離を進みます。
また、動作を開始した時点でカメがいたところまで高橋君が移動することを 1 回の移動として数えるので、
それぞれの移動にかかる時間が異なることに気をつけてください。

入力

入力は以下の形式で標準入力から与えられる。
N va vb L
1 行目に、高橋君の移動回数を表す整数 N(1≦N≦100) 、高橋君の秒間移動距離を表す整数 va(1≦va≦100)、
カメの秒間移動距離を表す整数 vb(1≦vb<va)、高橋君とカメの最初の距離を表す整数 L(1≦L≦100) が、
空白区切りで与えられる。

出力

カメのいる場所に高橋君が移動する動作を N 回行った後の、高橋君とカメの距離を出力せよ。
出力は標準出力におこない、末尾には改行をいれること。
出力は絶対誤差あるいは相対誤差の少なくとも片方が 10−6 以下であれば許容される。

出典

B: アキレスと亀 - AtCoder Regular Contest #012 | AtCoder

回答

AtCoder/arc012_2.php at master · wada811/AtCoder · GitHub
入力例1でよく考えれば簡単。

[競技プログラミング][PHP][AtCoder]週末

A - 週末

時間制限 : 2sec / スタック制限 : 16MB / メモリ制限 : 64MB

問題文

高橋君は、週末が大好きです。
高橋君は英語のデジタルカレンダーを使っているのですが、高橋君は英語の曜日を読むことができません。
カレンダーに表示されている曜日が与えられるので、
あと何日で週末かを計算するプログラムを作成してください。

入力

入力は以下の形式で標準入力から与えられる。
day
1 行目に day が与えられる。
day は曜日を表す文字列で Sunday(日曜日)、Monday(月曜日)、Tuesday(火曜日)、
Wednesday(水曜日)、Thursday(木曜日)、Friday(金曜日)、Saturday(土曜日) のいずれかである。

出力

週末までの日数を出力せよ。なお、週末とは、土曜日および日曜日のことを表す。
もし、すでに週末であれば、 0 と出力すること。
出力は標準出力におこない、末尾には改行をいれること。

出典

A: 週末 - AtCoder Regular Contest #012 | AtCoder

回答

AtCoder/arc012_1.php at master · wada811/AtCoder · GitHub
結果を配列を持っていて出力するだけ。

[Git][GitHub]やっておくと地味に便利なこと2つ

全てのリポジトリで .gitignore で無視するファイルを指定しておく

Ignoring files · github:help
git config --global core.excludesfile ~/.gitignore_global
# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so

# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip

# Logs and databases #
######################
*.log
*.sql
*.sqlite

# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
Icon?
ehthumbs.db
Thumbs.db

GitHub への push 時にアカウント名とパスワードを聞かれないようにする

~/.netrc にユーザ名/パスワードを書く

machine github.com
login wada811
password xxxxxxx

タグ(RSS)