2014年8月29日金曜日

Jmeterが使用するヒープサイズを上げる方法

Jmeter自体のインストール方法はこちら

上記の方法でインストールしたとすると

vim /usr/local/bin/jmeter/bin/jmeter

HEAP="-Xms512m -Xmx512m"
↓
HEAP="-Xms10240m -Xmx10240m"

でHEAPサイズを変更できます
修正しているファイルは実行シェルなので、インストールしたパスが違う場合でも実行シェルを編集してしまえばOKです
また、Xmx > Xms を満たしていれば Xmx と Xms を同値にする必要がありません

2014年8月24日日曜日

ZabbixAPIを使ってホストを登録するPHPスクリプトを書いた

作りました
https://gist.github.com/kakakikikeke/199a75e7802acec72cdfa

使い方は
  1. $group_id に追加するホストが所属するグループIDを指定
  2. $template_ids に追加するホストに紐付けるテンプレートIDを指定
  3. $host_info に追加するホストのホスト名とIPの配列を定義
  4. 実行

になります
$host_infoは配列で定義した分が追加されます

2014年8月21日木曜日

ZabbixAPIを使ってテンプレートをコピーするPHPスクリプトを書いた

ZabbixのWebUIからはテンプレートを複製する機能がありますが、どうやらAPIにはコピーのAPIがないので各種取得を実行してから作成系のAPIをコールすることでコピーを実現しています

ソースコード
https://gist.github.com/kakakikikeke/b7d6fe1bb671297b921f

簡単に実行の流れを説明すると
  1. ソース内の冒頭、configurationの部分を適宜設定
  2. コピー元になるテンプレートIDをconfigurationで設定したテンプレート名を元に取得
  3. 取得したテンプレートIDを元にテンプレートに設定してあるアイテムの情報を取得
  4. 同様に取得したテンプレートIDを元にトリガーの情報を取得
  5. コピー元のテンプレート名を元に新たにテンプレートを作成(同一テンプレート名は作成できないのでコピー元のテンプレート名を一部置換して作成)
  6. 新たに作成したテンプレートと取得したアイテムの情報を元に新規にアイテムを登録(ここでもアイテム名を一部置換)
  7. 新たに作成したテンプレートと取得したトリガー情報を元に新規にトリガーを登録(ここでもトリガー名を一部置換)

といった流れになっています
置換している部分は個人的に必要なロジックだったので使っているだけで必要に応じて削除してもらって大丈夫です

ZabbixのWebUIのソースを見ていないので何とも言えませんが、WebUIでも同じようなことをしているのだろうか

2014年8月19日火曜日

Zabbixでリカバリメッセージを送信しないようにする方法

ポイントは2つ

  1. アクションの設定でアクションの実行条件から「トリガーの値 = "障害"」を追加する
  2. アクションの設定でリカバリメッセージのチェックをOFFにする

よくありがちなのはリカバリメッセージのチェックをOFFにしただけで通知が飛ばないと思いがちですが、
「トリガーの値 = "障害"」が入っていないと「復旧」のときにもアクションが発生してしまい
リカバリメッセージでないデフォルトの件名とデフォルトのメッセージによる通知が発生してしまいます

その通知がstatus=OKで飛んでくるのであたかもリカバリメッセージに見えるわけです
うーん、わかりずらい

2014年8月16日土曜日

Chefを使ってCentOSにLVMを自動構築してみた

chefでLVM環境を自動構築するレシピを書いてみました
最近のchefの流行りはresourceを提供しているライブラリをinclude_recipeして自分でレシピを実行するのが流行りなんですかね

https://github.com/kakakikikeke/cookbooks-create-lvm

2014年8月15日金曜日

Windows版のJenkinsで起動ポートを8080から変更する方法

インストールは公式で配布されているインストーラを使って実施しているものとします
またWindowsは2008R2を想定しています

  1. インストールディレクトリ配下の jenkins.xml の「--httpPort=8080」を変更
  2. Jenkins起動後「Jenkinsの管理」->「システムの設定」->「Jenkinsの位置」のポート部分を変更したポートに変更
  3. 管理ツール -> サービス でJenkinsを再起動

これで次にアクセスするときに8080以外のポートでアクセスできるようになります

2014年8月14日木曜日

Rubyでグラフを描画してみた

Graphviz というAT&Tが開発したオープンなグラフを描画する仕組みを使ってグラフを描画してみました
dot言語という独自の言語で記述します
せっかくなので自分の身の回りのツールやシステムを可視化してみました
やっぱりソースコードで管理できるというのはいいですね

■環境
Mac OS X 10.8.5
Ruby 2.1.2p95
Gem 2.2.2n


■graphvizのインストール
http://www.graphviz.org/pub/graphviz/stable/macos/mountainlion/graphviz-2.36.0.pkg
からgraphvizをダウンロードします
ダウンロードが完了したらpkgファイルを実行してインストールしてください
利用規約に同意する以外、特に気にする部分はないと思います

インストールが完了すると /Applications/Graphviz.app/ が作成されていると思います

■gvizのインストール
gem install gviz

■サンプルコード
# -*- coding: utf-8 -*-
# sample.rb
require 'gviz'

gv = Gviz.new
gv.graph do
  # グラフ全体のレイアウトを定義
  global layout:'dot', overlap:false

  # 共通のサービスを宣言
  cloud_storage_services = [:Dropbox, :GoogleDrive, :Evernote, :Github, :codeBreak]
  local_storage = [:disk200a, :disk200b]
  net_services = [:Twitter, :Facebook, :Blogger, :Cacoo]

  # 起点となるノードからのつながりをここで定義
  ## ここですべてを定義しなくても後からedge等を使ってつながりを作成することは可能
  route :yoshi0 => [:Internet]
  route :yoshi1 => [:yoshi0] + cloud_storage_services + net_services + local_storage
  route :yoshi2 => [] + cloud_storage_services + net_services
  route :yoshi3 => [] + cloud_storage_services

  # すべてのノードに対するルールを定義
  nodes color:'black', fillcolor:'white', style:'filled'
  # 特定のノードに対するルールを定義
  cloud_storage_services.each {|k|
    node k, fillcolor:'green'
  }
  node :yoshi0, fillcolor:'gray99', label:'yoshi0\n(gateway)'
  node :yoshi2, label:'yoshi2\n(Jenkins)'
  node :fndb, fillcolor:'orange'
  net_services.each {|k|
    node k, fillcolor:'lavender'
  }
  node :Internet, fillcolor:'lavender'

  # 特定のエッジに対するルールを定義
  ## routeで定義したつながりを「_」で区切ることでエッジを特定して設定できる
  edge :yoshi1_yoshi0, color:'lightslateblue', label:'wi-fi'
  edge :yoshi1_yoshi2, style:'dotted', label:'rdp'
  edge :yoshi1_yoshi3, style:'dotted', label:'ssh'
  edge :yoshi2_yoshi3, style:'dotted', label:'ssh'
  edge :yoshi2_Github, style:'dotted', label:'git clone'
  edge :yoshi2_codeBreak, style:'dotted', label:'git clone'
  edge :yoshi2_fndb, style:'dotted', label:'xmlrpc'
  edge :fndb_Twitter, style:'dotted', label:'api-tweet'
  edge :fndb_Facebook, style:'dotted', label:'api-post'

  # ノードをグループにまとめる
  subgraph do
    global label:'cloud'
    node :yoshi2
    node :yoshi3
  end
  subgraph do
    global label:'home_net'
    node :yoshi0
    node :yoshi1
  end
end

gv.save :my_system, :png

■実行
ruby my_system.rb

と実行するとmy_system.dot と my_system.png というファイルが作成されます
pngを直接開いても問題ないですが、dotファイルを開いてもgraphvizが立ち上がりグラフを見ることができます

もしdotファイルを開いたときにgraphivzで開かない場合にはFinderでsample.dotのところまで開き
Cmd+i でファイルの情報を開き「このアプリケーションで開く」の部分をGraphvizに変更してください

※クリックすると拡大します

簡単に凡例を説明すると(完全にUMLは無視していますが。。)
  • 点線のつながりはTCP接続
  • 緑はストレージサービス的な
  • 薄い青はWebサービス的な
  • 白はマシンノード
的な感じを表しています

■Tips
gviz man
gviz man layouts
で各メソッド名を指定すればそのメソッドで指定できる属性情報を調べることができます
使用できる命令はほぼこれで網羅できると思います

■参考サイト

2014年8月13日水曜日

Jenkinsを1.573にアップデートしたらSimple Theme Pluginが動いてなかった

プラグイン自体は問題なく動作するのですが
JenkinsのCSSやHTMLが変わっているようで独自定義したCSSの設定を変更する必要があるようです
前回、自分が紹介した記事では以下のようにCSSを設定するようにしていました
@charset "utf-8";

#main-table {
  background-image: url(jenkins_logo.png) !important;
}

#top-panel {
  background-image: url(topbar.png) !important;
}

これだとうまくヘッダーの画像とJenkinsおじさんの画像が変わらないようです
そして1.573では左下に表示されていたJenkinsおじさんがヘッダーのアイコン部分に移動してしまったので変更が厳しいです
なので
@charset "utf-8";

#header {
  background-image: url(topbar.png) !important;
}

みたいな感じでヘッダーの画像を設定するだけとなります
たぶんサイズがうまく合わないと思いますので、うまく合わせてあげてください

どうしても左上のJenkinsおじさんを変更したい場合はJavaScriptでHTMLを動的に変更するか
/static/c41db97a/images/jenkins-redbg.png
というファイルが存在すると思いますのでこれを自分の好みに合わせて直接変更しちゃってください
画像サイズは40x40みたいです

2014年8月11日月曜日

MacでbluetoothのiPhoneテザリングに自動接続する方法

いちいちメニューバーからbluetoothアイコンをクリックしてテザリング中のiPhoneに接続しなければいけないのが面倒で

↑これをいちいち選択するのが非常に面倒

Macを閉じて開くと自動で接続するように設定してみました
本当はbluetoothが通信できる範囲に来たら接続するようにしたかったのですがあきらめました

■環境
Mac OS X 10.8.5
EasySIMBL 1.6
LidSyncPAN 0.8

■EasySIMBLのインストール
  1. EasySIMBLをダウンロード
  2. ダウンロードしたzipをファイルを解凍
  3. EasySIMBL.appを/Applicationsに移動
  4. Finderで「アプリケーション」に移動し「EasySIMBL」をクリックし表示されたダイアログ上の「EasySIMBLEを開く」を押して起動
  5. 起動したら左上の「Use SIMBL」にチェックを入れCmd+qで終了


■LidSyncPANのインストール
  1. http://hitoriblog.com/wp-content/uploads/2014/01/LidSyncPAN-0.8.zip からLidSyncPANをダウンロード
  2. ダウンロードしたzipファイルを解凍
  3. LidSyncPAN-0.8を/Applicationsに移動
  4. 解凍してできた「LidSyncPAN-0.8/DoubleClickToInstall/LidSyncPAN.bundle」をクリックし起動
  5. するとダイアログが起動するので右上の「EasySIMBLで開く」をクリック
  6. 表示されたリストの中にLidSyncPANがチェックされていることを確認し終了

起動時にreplaceうんぬんかんぬんの警告が出た場合はreplaceしてOKです

■LidSyncPANPrefのインストール
  1. 「LidSyncPAN-0.8/DoubleClickToInstall/LidSyncPANPref.prefPane」をクリックし起動
  2. 右上の「システム環境設定で開く」を選択
  3. LidSyncPANPrefのインストールが促されるのでインストール(インストール範囲はどちらでもOKです)
  4. インストールするとLidSyncPANPrefの設定ダイアログが起動するので左上の「LidSyncPANを有効にする」をチェック
  5. もしGrowlがインストールされているのであれば「Growlによる通知を有効にする」もチェック
  6. 「Bluetooth PAN 接続対象メニュー名」に自動接続するbluetoothの名称を入力
  7. 入力が完了したら終了し、一旦Macをログアウトし再ログイン


■システムの設定を変更
  1. ツールバー -> リングマーク -> システム環境設定 を開く
  2. アクセシビリティ -> オーディオ -> 補助装置にアクセスできるようにする のチェックをON

おそらくこの段階でLidSyncPANが有効になっているので一度bluetoothを解除した状態でMacのディスプレイを開け閉めすれば自動で接続してくれると思います
とりあえず開け閉めで自動接続できるようになりましたが、やはり近くに来たら自動で接続してくれると更に嬉しいですね

P.S
デフォルだと再接続を実行するのが10秒間ネットワークに接続がなかった場合みたいでそんなに待ってられない場合は5秒に変更できるのでその手順も記載します
  1. cd Downloads
  2. wget http://hitoriblog.com/wp-content/uploads/2014/01/LidSyncPAN.bundle-5sec-delay.zip
  3. unzip LidSyncPAN.bundle-5sec-delay.zip
  4. mv /Applications/LidSyncPAN-0.8/DoubleClickToInstall/LidSyncPAN.bundle{,.back}
  5. mv LidSyncPAN.bundle /Applications/LidSyncPAN-0.8/DoubleClickToInstall/
  6. FinderでアプリケーションからEasySIMBLを開きチェックを確認し終了
  7. FinderでアプリケーションからLidSyncPANPref.prefPaneを実行してシステム環境設定で開き「置き換え」を実行

で再接続時間が5秒になるはずです
ダメな場合は再ログインしておしてみてください

■参考サイト

2014年8月8日金曜日

チケット駆動開発について今更考えてみた

概要

1年弱くらいチケット駆動開発をして来て感じたことがあったので今更ながらメリット・デメリットの観点でまとめてみました

チケット駆動開発とは

作業をタスクに分割しBTS(Bug Tracking System/バグ管理システム)のチケットに割り当てて管理を行う開発スタイル

Wikipediaより一部を抜粋

要するに「やること」や「やりたい」ことをチケットという単位で管理し開発を進める手法
Githubのissueみたいな感じ、Closeされれば終了

また今回、私はBTSにRedmineを使いましたのでRedmineでの話を中心に記載したいと思います

どんな使い方をしていたか

特殊な使い方をしていたつもりはないので至って普通かと思いますがコンテキストをまとめておいたほうがいいと思うので簡単に記載します

  • チケット
    • チケットの発行(開発タスク、bugfix、ツール開発、テスト実施、次期開発、やりたいこと、調査依頼等々何かあれば発行)
    • チケットへのカテゴリ付与(必須)
    • チケットへのトラッカー付与(必須)
    • チケットのステータスの活用(終わった場合は必ず終了にする)(必須)
    • チケットを担当者に割り当てる(必須)
    • 本文、タイトルは基本フリーフォーマット、開始日、進捗率も特にルールはなし(任意)
    • 子チケット、関連チケットも自由に作成可能(任意)
  • wiki
    • 基本はフリーフォーマット
    • 記事録、ノウハウ、検証記録等を記載していく
    • 記載する際の基準はない(このタイミングで、これを書いてねみたいなのはない)
  • 文書管理
    • ルールは特に無し、置きたいものを自由に置く

基本的には上記の機能を使うことが多かったです
上記を踏まえて運用した上でのメリット・デメリットを考えてみました

メリットとかイケてるところ

  • 進捗を把握しやすい
    全てはチケット管理なのでシンプルかつ明確にタスク管理することができると思います
    進捗率や期日も設定できるのでガントチャート的な見え方もできてGood
    優先度を駆使すれば今やるべきことがすぐわかる
    子チケットを駆使すればタスクのカテゴライズができて把握しやすい

  • マネージメントが簡単
    日本の会社のようにヒエラルキー型の会社にはがっつりハマると思います
    上の人がチケット切って「はい、これやって、これやって」とホイホイ下の人に割り当てればいいだけなのでマネージメントはめちゃくちゃ簡単
    アサインしている人ごとにチケットも見れるのでリソースの空き状況もすぐに把握できる
    チケットさえちゃんと作成できていればという点はあるが

  • ルールが勝手に出来上がる(出来上がった)
    これはいい事象かなと思ってます
    例えば、文書管理のフォルダ名とかwikiのタイトルとかは全くルールがない状態で初めたんですが、初めに誰かが作成した命名規則的なものを次の人がそれに沿って「いい感じ」に作ってくれるようになりました
    例えば、wikiページは必ずYYYYMMDD_で始まるように記載していたら、他の人もそれに合わせて書いてくれるようになったりとか、文書管理のフォルダ名もはじめに00_hogehogeとか数字をつけるようにしていたら次のフォルダ名が01_barbarとかになって自然にルールができていたのはいいなと感じました

  • 通知機能
    チケットを更新するとメール通知できるので他の人の作業内容が把握しやすいです
    自分はgrowlと組み合わせて担当者が自分にアサインされるとgrowlで通知してくれる機能を作ってチケットの見落としを防いでいました

  • 低学習コスト
    かなり個人的な間隔もありますが、そこまで勉強しなくても使えると思います
    ツールにもよりけりですが、Redmineに関しては低いと思います
    ただ、機能は本当にたくさんあるので使い込もうとするとそれなりのコストがかかると思っていただければと思います

デメリットとイケてないところ

  • クローズされない亡霊のようなゾンビチケットができあがってしまう
    「よし、絶対やるぞ!」とその場の勢いで作成したチケットが半年後に誰にもアサインされずに残り続けてしまう
    残り続けてしまうこと自体は「やるべきこと」なのでいいのですが、誰にもアサインされず「いや、これ誰がやるんだよ・・・」的な感じでみんなから無視され続けてクローズもされず、ほっとかれる現象が発生してしまう
    こうなってしまうと一生消化されることがなく「やっほうがいいのかな・・・でも他に優先度高いことあるし・・・今更そんなのやってるなよとか言われそうだし・・・」とか、精神衛生上もよくない、疑心暗鬼、そわそわしちゃう
    なのでそんなチケットが出来ちゃわないために「6ヶ月以上更新のないチケットはクローズして別チケットを発行して誰かにアサインする」とか「アサインを外して対応保留カテゴリに割り当てる」などルールを作ることが必要かなと感じた
    ルールでどうにもならないときには「カンバン機能」や「API」もあるので可視化、自動化でシステムに解決してもらうのがいいと思います

  • チケットの粒度
    なんでもかんでもチケットが切れる状況だったので、開発者それぞれでチケットの粒度が統一されていないのが微妙でした
    これも「ルール」の問題なので事前に粒度のルールを決めておけばいい話なのですが、そもそも粒度をルール化するのは難しいという問題点もあります
    やるとしたら粒度のルールというよりかはチケットを発行できる人を制限する感じかと思いますが、それもそれで開発者の自由を縛るようなルールなのでやるのは微妙かと思います
    私の場合はだんだん各人が粒度を「暗黙的に」理解したので徐々によくなりましたが、最初のほうは1つのチケットにいろんな作業記録をコミットメントしまくってカオスな状況でした

  • 検索機能が弱い
    デフォルト提供されている検索がそこまで賢くないのが残念でした
    せっかくチケットやwikiに貯めたノウハウもうまく取り出せないんじゃ意味がありません
    検索が微妙だった分カテゴリやトラッカーを適切に付与してカバーしてましたが、さすがに規模が大きくなると検索なしでは厳しかったです
    また、文書管理にあるファイル名と説明までは検索対象にできるのですが、ファイルの中までは検索対象にならないので、なるべく文書管理にノウハウを貯めるようなことは避けるようにしました
    よくある設計書にオフィス製品を使っちゃう問題もありましたが、極力ドキュメント類はコードに落とすか、wikiに記載するようにしました

その他アンチパターン

  • wikiに動的に変化する情報を記載する
    なるべくwikiには普遍的な情報を記載する
    よくwikiにサーバ構成図などを書くが例えば頻繁にサーバが追加されたり削除されたりすると更新を忘れて管理が破綻する

まとめと所感

  • GoodかBadかで言うとGood
    100点満点な開発方法ではないと思いますが、10点とか20点でもないです
    man powerで解決しなければいけない面(ルールとか縛りとか)もありますが、システム的に解決できる部分もあるので、なんとかなります
    全然、開発手法が決まっていなくてどうしたらいいかわからんときには、とりあえずチケット駆動にしておけばなんとかなると思います

  • チケットエンジニア
    簡単に言うとチケットの進捗とか状況とかを管理する人
    ゾンビチケットやアサインされていない人を見つけたときに適切にアサインしたりする人
    マネージャではないので進捗管理とかタスク割り当てをするわけではなく、チケット駆動が回るために適切に振る舞う人
    的な人がいると更によくなるとは思うが、そこまでしてやるかというのと
    そもそも、そこにリソースを割り当てる人がいないという問題があるので正直やる価値はないと思うが、なんとなく思ったので記載

  • ツールは
    今回はRedmineを例に話を進めましたが、それ以外にもめちゃくちゃあります
    参考 -> バグ管理システム
    「決定版はどれだ」という議論をするときっとキリがないのでここではしませんが、正直どれでもいいと思います
    あえて進めるならオープンソースでまだ開発が続いているツールにするのがいいと思いますあとは、拡張機能が作れるとか

文字ばかりですが、以上です
これからもチケット駆動を続けるのでまた何かあれば別ポストでもして、今回と見比べて解決してる点とかしてない点とか比較すると面白いかなと思いました

2014年8月7日木曜日

Jenkins+serversepc で結果を見やすくする

serverspecのテスト結果を見せれば、そのインフラ構成がわかる
が、結果がそもそも見づらい環境はよくないんじゃないかと思ってちょっとでも見やすくしてみました
目grepというか可視性を上げることは大事だと思います

■serverspec側でやること
gem install colorize

をして spec ファイル内の必要な部分で

require 'colorize'

...

puts "Start server-spec ".colorize(:color => :red, :background => :blue) + `hostname`.colorize(:color => :red, :background => :blue)

...
puts 

的なことをしてあげます
colorize は String クラスのobjectに対してANSIのカラーシーケンスを追加することができるライブラリです
puts することで serverspec の実行結果に必要な情報を出力してあげます
詳細は https://github.com/fazibear/colorize をご覧ください

そして、serverspec を実行する際に以下のオプションを指定してください
SPEC_OPTS="-fd"

こうすることで実行結果が自然言語っぽくなります

■Jenkins側でやること
AnsiColor Plugin をインストールします

Jenkinsの管理 -> プラグインの管理
から「AnsiColor Plugin」を検索してインストールします

インストール後に特に設定することはないですが
AnsiColor Plugin 自体のカスタマイズをすることはできるのでやりたい方は以下を参考に実施してみてください
https://wiki.jenkins-ci.org/display/JENKINS/AnsiColor+Plugin

また、Simple Theme Pluginがインストールされているなら実行結果を黒背景にするともっと見やすくなると思います
(参考にさせていただいきました -> http://kyamada.hatenablog.com/entry/2012/10/12/191723
Simple Theme Plugin の設定方法に関してはこちらを御覧ください

emacs /path/to/userContent/sample.css
pre {
    white-space: pre-wrap;       /* css-3 */
    white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
    white-space: -pre-wrap;      /* Opera 4-6 */
    white-space: -o-pre-wrap;    /* Opera 7 */
    word-wrap: break-word;       /* Internet Explorer 5.5+ */
    margin: 0;

    background-color:black;
    color:white;
}

.CodeMirror pre {
    color:black !important;
}

下の「.CodeMirror pre」の定義はジョブの説明を設定する際に文字色を黒にする設定です
preのcssの定義に引っ張られて文字色まで白になってしまい説明文がわからないので黒に設定します

Jenkinsのcssを直接変更しても対応可能です
CSSファイルを変更後はJenkinsの再起動は不要です(反映されない場合は、編集するcssが間違っているか Simple Theme Plugin の設定がうまくいってないと思います)

■Jenkinsのジョブに対してやること
serverspec を実行するジョブの設定を開きます

ビルド環境の設定項目に「Color ANSI Console Output」という項目が追加になっているのでチェックします
セレクトボックスでは出力する色の定義を選択できます
デフォルトでいろいろと用意されているのお好みに合わせて変更してください


また serverspec側でやること で記載した通りJenkinsから serverspec を実行するときのパラメータに SPEC_OPTS="-fd" を追加してください

■結果
上記の設定を実施した上でserverspec のジョブを実行しコンソール出力を見ると以下のような感じにすることができます


ちょっと見やすくすることができたと思います
まだまだ改善の余地はあると思うのでもっと見やすくできたらいいなーと思っています
以上

2014年8月6日水曜日

Parse.comにPHPのSDKが出たので早速試してみた

■環境
CentOS 6.3
PHP 5.4.16 ( PHP は 5.4.0 以上をサポートしているようです )
composer e77435cd0c984e2031d915a6b42648e7b284dd5c

composer のインストール方法はこちら

■クイックスタート
cd work
touch composer.json
emacs composer.json
{
  "require" : {
    "parse/php-sdk" : "1.0.*"
  }
}
composer install
で Parse.com SDK for PHP をインストールします

touch sample_parse.php
emacs sample_parse.php
<?php
require 'vendor/autoload.php';

date_default_timezone_set('Asia/Tokyo');

use Parse\ParseClient;
use Parse\ParseObject;
 
ParseClient::initialize('Application ID', 'REST API Key', 'Master Key');

$testObject = ParseObject::create("TestObject");
$testObject->set("foo", "bar");
$testObject->save();

Parse.com のダッシュボードにログインしてサンプルをアプリを1つ作成して
Settings -> Application keys -> Application ID, REST API Key, Master Key をそれぞれ入力してください

php sample_parse.php

何も表示されなければ成功です
Parse.com のダッシュボードにログインし
Data Browser -> TestObject と選択すると foo というフィールドに bar という情報が登録されていることがわかると思います

■所感
・めちゃくちゃ簡単に使える(これが大きいと思う)

・PHP なのでサーバサイドから Parse.com を簡単に使うことができるようになった
これまでは、おそらく REST を直接コールするのが主流だった?っぽいので PHP SDK で出ることで更に簡単にコールできるようになったと思う
また、バッチ処理も簡単に実装できるようになったので、データ登録系の非同期処理やプッシュ通知の定期配信(これはサーバがなくても Parse.com だけでできますが)などアプリ側で手の届かなかった痒いところにも手が届くようになったと思う

・IaaSサービスとのシナジー
サーバサイドが絡んできたのでIaaSとのシナジーも生まれそう
IaaSのインスタンスでParse.comと連携してデータ登録を行って、アプリ側で登録されたデータを表示する
みたいなアプリの流れが簡単に実装できるようになる(というかなってる)

・Parse.com を使用した PHP アプリを簡単に作成することができるようになった
例えばWebアプリの裏側に使うとかもできる、WebViewのアプリであれば PHP だけでもスマホアプリが作れる(アプリ側の開発も多少必要だが)

・他の PHP SDK とのシナジー
Parse.com は Facebook に買収されたのもあり Facebook SDK for PHP と組み合わせて使うことができそうです
もちろん composer や pear でインストールしたサードパーティ製のライブラリも一緒に使うことができると思います(未検証)

・OpenSourceProjcetなのがうれしい
Githubで公開してます
https://github.com/parseplatform/parse-php-sdk

■参考サイト

2014年8月5日火曜日

Cygwin上でpercolをインストールして使ってみた

pipからインストールする方法を紹介します
pipが使えるようになるまでが大変でした

■環境
Windows7 64bit
Cygwin 1.7.30
pt-cyg 0.59
Python 2.7.5
easy_install 0.6.34
pip 1.4.1

■インストール
Cygwin, apt-cyg のインストールまでは済ませておいてください

apt-cyg install python python-setuptools
easy_install https://pypi.python.org/packages/source/p/pip/pip-1.4.1.tar.gz
pip install percol
mkdir ~/.percol.d
touch ~/.percol.d/rc.py
emacs ~/.percol.d/rc.py

percol.view.PROMPT  = ur"Let's percol > %q"

# Emacs like
percol.import_keymap({
    "C-h" : lambda percol: percol.command.delete_backward_char(),
    "C-d" : lambda percol: percol.command.delete_forward_char(),
    "C-k" : lambda percol: percol.command.kill_end_of_line(),
    "C-y" : lambda percol: percol.command.yank(),
    "C-t" : lambda percol: percol.command.transpose_chars(),
    "C-a" : lambda percol: percol.command.beginning_of_line(),
    "C-e" : lambda percol: percol.command.end_of_line(),
    "C-b" : lambda percol: percol.command.backward_char(),
    "C-f" : lambda percol: percol.command.forward_char(),
    "M-f" : lambda percol: percol.command.forward_word(),
    "M-b" : lambda percol: percol.command.backward_word(),
    "M-d" : lambda percol: percol.command.delete_forward_word(),
    "M-h" : lambda percol: percol.command.delete_backward_word(),
    "C-n" : lambda percol: percol.command.select_next(),
    "C-p" : lambda percol: percol.command.select_previous(),
    "C-v" : lambda percol: percol.command.select_next_page(),
    "M-v" : lambda percol: percol.command.select_previous_page(),
    "M-<" : lambda percol: percol.command.select_top(),
    "M->" : lambda percol: percol.command.select_bottom(),
    "C-m" : lambda percol: percol.finish(),
    "C-j" : lambda percol: percol.finish(),
    "C-g" : lambda percol: percol.cancel(),
})

ポイントはpipが1.4.1でないとインストールできない点でした
理由はわかりませんが、1.5.6の2014/08/01時点での最新版はインストールに失敗します

あとはpercolでgrep中のキーバインドをemacs風にする設定とプロンプトの表示をカスタマイズしています
キーバインドとプロンプトのカスタマイズはお好みで実施してください

2014年8月4日月曜日

Package `emacs-24.1' is unavailable

emacs24以上にはデフォルトでpackage.elがインストールされています
emacsをバージョンアップした等でタイトルのエラーが出る場合には
独自でインストールした package.el を移動(もしくは削除)してあげる必要があります

独自でインストールした package.el が使われているかどうかは
M-x load-library RET package.el
でパスが表示されると使われていることになります
また、package-list-packages 等のコマンドでパッケージが2種類表示されている場合でも両方の package.el が効いているので独自でインストールしたほうを移動(もしくは削除)してください

~/.emacs.d/site-lisp
mv package.el /var/tmp/

find したところ以下のパスにビルトイン用の package.elc がありこれを使っているようです
/usr/share/emacs/24.3/lisp/emacs-lisp/package.elc

独自でインストールした package.el を移動したからといってインストールしたパッケージが削除されることはなかったです

2014年8月2日土曜日

WindowsにChocolateyをインストール

■環境
Windows7 64 bit
Chocolatey 0.9.8.27

■インストール
コマンドプロンプトを使ってインストールします
インストールは素直にコマンドプロンプトを使ってください
Cygwin等のWindows用ターミナルアプリでもできなくはないと思いますがいろいろハマると思いますので素直にコマンドプロンプトを使うことをおすすめします

コマンドプロンプトを開いたら以下をコピペで貼り付けてください
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin

貼り付けたら実行してインストール完了です
ログは以下のような感じです



C:\ProgramData\chocolatey にインストールされ
ChocolateyInstall が環境変数に追加されます
コマンドプロンプト上で choco /? と入力してヘルプが表示されればOKです

■各種コマンド
choco list
インストール可能な全パッケージを表示

chco list -lo
インストール済みのローカルパッケージを表示

choco install cygwin
パッケージ名を指定してインストール

choco uninstall cygwin
パッケージ名を指定してアンインストール

■`Cygwinでの操作、設定
cmd /c choco '/?'
でヘルプを表示することができます

.bashrcに以下を追加しておくとCygwin上でも操作しやすくなると思います
if [[ "$OSTYPE" =~ "cygwin" ]];then
  # Chocolatey
  alias choco='cmd /c choco'
  alias cinst='cmd /c cinst'
  alias cup='cmd /c cup'
  alias cuninst='cmd /c cuninst'
fi

■Tips
インストールに失敗するパッケージやインストールできてもうまく動作しないパッケージが多数存在するようです
例えば自分が経験したのはrabbitMQのインストールでパッケージに「rabbitmq」と「RabbitMQ.Server」というのがあり「rabbitmq」側をインストールしようとすると
Write-Error : RabbitMQ did not finish successfully. Boo to the chocolatey gods!
と言うエラーが発生します
かと言ってRabbitMQ.Serverの方をインストールしようとするとインストールはうまくいくがコマンドからの起動がうまくいかず
結局公式で配布しているexeを使ってインストールを実施しました

Cygwin上でヘルプを表示する場合は
choco '/?'
とシングルクオートで引数を囲う必要があります