‘未分類’ カテゴリーのアーカイブ
イケテルEngineYard勉強会に参加してきました。
- 2011/07/12
- yoshida
RBCによる主催イベント「イケテルEngine Yard勉強会」に参加してきました。
メインイベントは米EngineYard社のCEOであるJohn Dillon氏によるトーク。
開催時刻から、John氏が来られるまでの間はビジネス勉強会。お題は「ソフトウェア会社を作る。ただしエンジニアコミュニティとどう付き合って会社を育てていくか。」というもの。4班に別れて会社名、業務内容、エンジニアコミュニティとの付き合い方を議論し、模造紙に書きだしていき、最後に各班発表となりました。
で、なんでこういう内容だったかと言うと、Engine Yard社そのものがコミュニティとともに発展してきた会社からなのだと。で後半のJohn氏のトークが始まったのであります。抜粋すると
- 製品を作って、それと半分近くのコストを掛けて営業マンセールス、マーケティングを行うといった従来のセールス手法は変わっていく。
- Engine Yard社は売上の20%(間違ってたらごめんなさい)をコミュニティに投資している。
- コミュニティへの投資、そしてそのコミュニティが製品・サービスを利用してくれる。
- 当然オープンソースにもコミットしている(パッチの公開など)
- 顧客にサービスを使ってもらうように営業するのではなく、サービスを使う手助けをする。
全てを弊社に適応できるものではないかもしれませんが、ききいってしまう内容でした。
サンブリッジのアレン氏の話は、ズバッと要約すると「シリコンバレーいけ」というものでした。日本でやってることなんて世界の誰も見てない。残念ながらそうなんですよね。
勉強会後は、交流会の場まで用意してもらいました、感謝です。John氏に「普段どんな時間の使い方をしているのか」という質問投げかけるべく、チャンスを狙ってましたが、なんせ人気者ですので最後の最後で捕まえて質問投げた瞬間、ジ・エンドとなってしまいましたが、おかげで円陣の際にはJohn氏の隣をゲットするというある意味幸運さを発揮しました。まあ少しでも話せて良かったです。
スタッフの皆様本当にお疲れさまでした。
なんかすごくまとまってない文章ですが、お許しくださいませ。
MacでPPTP(VPN)接続しつつ、通常の接続も行えるようにする方法
Mac OS X 10.5でPPTP接続する方法
MacでPPTP使ってVPN接続するようになって、いろいろと面倒だったことが解決して良かった。
と思っていたのですが、PPTPの方の優先度を上げないといけない場合は、通常の接続が駄目になってしまうようです。
VPN側にインターネットへの制限が掛かっていたりしたら、残念なことになります。
ローカルなネットワークにPPTPに繋ぎながら、それ以外は通常の経路で通信ということで下記にて解決しました。
方法としては、PPTPの優先度は通常のインターネット接続より下げておいて、特定のネットワークアクセスの場合のみPPTPインターフェースを使うようにしてあげればいいようです。VPNを接続した後、ターミナルで下記コマンドを実行すればOK。
sudo route -nv add -net 192.168.13 -interface ppp0
ただ毎回ターミナル上げるのは面倒臭いです。 ちょっと調べると、PPTPが開始するときに実行されるスクリプト(参考)があるじゃないですか。ということで
sudo vi /etc/ppp/ip-up
#!/bin/sh
if [ "$1" = "ppp0" ]; then
/sbin/route -nv add -net 192.168.13 -interface ppp0
/sbin/route -nv add -net 192.168.15 -interface ppp0
fi
のような感じで、route add するスクリプトを書きました。
sudo chmod Cheap Adobe Photoshop CS5 744 /etc/ppp/ip-up
するのをお忘れなく。
もっと楽、シンプルな方法があったら教えてください。
行事
- 2011/06/15
- aoyama
クリスマスもお正月も過ぎてしまって、いろいろと書くタイミングを逃していまいましたが、
改めて、今年もどうぞよろしくお願い致します。
行事といえば、今はランタンですね。
あまりこういった祭りには参加しないのですが、先週はちょっとお誘われしたので行ってみることに。
なんだかんだ初ランタンかな~
こういうのを間近で見ると、やっぱり感動しますね。
あとはランタン行った証拠みたいなのが欲しかったので、角煮まん買ってほくほくしてました。
まあいつでも買えるんですけどね。笑
あ、今年のバレンタインデーも、社長の奥様からお菓子(プリン)を頂いちゃいました!
ありがとうございます。
女性である私が毎年楽しみにしてます(笑 this
CakePHP で debug.log にクエリを出力する(手抜き版)
シェル書いてる時とか Web でも Ajax のときとか
「画面にクエリだされても見えないし、困る〜」
ってときありますよね?
「つーか、なんで画面にだすんだ?ログファイルに出してくれればいいのに 」
とか思いません?
で、調べたらみなさんDBのドライバを拡張して対応されてるようです。
ですが、常にクエリをログに書いて欲しいわけでもないし、ドライバ拡張とか面倒。
クエリを画面にだしてるとこどうなってるのかなぁ、と思って調べたら
cake/libs/view/elements/sql_dump.ctp
にゴリゴリに書いてありました。
これマネしてapp_model.phpにでもメソッド作ればいいんじゃないかなーってことで、作りました。
/**
* 通常画面に表示されるログを取得してdebug.logに出力する。
*/
function sqlToLog(){
$db =& $this->getDataSource();
if ($db->isInterfaceSupported('getLog')){
$this->log($db->getLog(), LOG_DEBUG);
}
}
元のログ表示と違って明示的に呼び出すものなのでgetLogインターフェースの確認とか要らない気がしますが、一応。
このメソッドを実行すると debug.log にそれまでに実行されたクエリやら付帯情報(画面に表示されてますよね)が書き出されます。注意点として、画面に出すデータを横取りしているのでログに書き出されたものは画面には表示されません。
配列を print_r で出力した形式なので見やすくはないですが、まぁ、十分かな。
VB.NETのMy.Application.Logを使う
My.Application.Logを使用してトレースする、ログに書き込む
で詳しく説明されているのでメモ程度で。
まず、My.Application.Logを使うためにアプリケーション構成ファイルであるapp.configを編集します。(ない場合は[プロジェクト] > [新しい項目の追加]からアプリケーション構成ファイルを選択)
app.configがプロジェクトに追加された時点でMy.Application.Logに関する記述があるので楽です。
しかし、このまま何も触らずにプログラム内で
My.Application.Log.WriteEntry("コントロールの初期化")
'Try~Catch内などで
My.Application.Log.WriteException(New Exception("エラー!"))
とするだけでも
DefaultSource Information 0 コントロールの初期化
DefaultSource Error 2 エラー!
と出力され使うことができます。
ちなみに出力先のデフォルトは
ユーザーのApplication Dataフォルダ\CompanyName\ProductName\ProductVersion\ProductName.log
ですが、Vista以降はフォルダ構成が変わっているので
ユーザーのAppData\Roaming\CompanyName\ProductName\ProductVersion\ProductName.log
になっています。
ぼっちBazaar
5/21(土)、『NAGASAKI-IT hands-on Spring 2011』に参加して、ライトニングトークしてきました。
弊社の吉田くんが
「ひとりぎっと 〜ひとりで使うバージョン管理システム導入編〜」
というGitのハンズオンをやるとのことだったので、それにからめて
「ぼっちBazaar 〜ぼっちを感じるバージョン管理〜」
というわけです。
今回、HTML Slidyでスライドを作りましたのでそのまま貼り付けます(slideクラスのdivには枠を付けました)。
目論見としてはスライド自体をBazaarでバージョン管理して編集しながら実演するつもりだったのですが、残念!
時間がたりませんでした(5分枠で何しようとしてるんだという意見多数)。
CakePHP でシェルを書くときに最初にやったこと(親クラス作り)
CakePHP にはデバッグで便利な pr() って関数があります。
出力の前後に pre タグ を付けてくれる print_r() のラッパーです。当然Web用。
シェルにも欲しいです。てなわけで作りました。
function pr($obj){
$pr = print_r($obj, true);
$this->out($pr);
}
簡単。こんな感じで使います。
$popopopooon = array('こんにちわ' => 'こんにちワン', 'ありがとう' => 'ありがとウサギ');
$this->pr($popopopooon);
このようにコンソールに出力されます。
Array
(
[こんにちわ] => こんにちワン
[ありがとう] => ありがとウサギ
)
print_r() は第2引数に true を渡すと出力せずに結果を返してくれるのでオブジェクト構造をログに出したりするときにも便利です。
でもコレ、全部のシェルに書きたくない。
どこに集約したらいいのか悩んだのですが、実際に実行するシェルの親クラスを作成して継承することにしました。継承の段数が増えるのはあまりすきじゃないのですが、Shellクラス をそのまま継承するよりも1段増やしといたほうがいいかな?って気もしたので。
appbase.php
class AppbaseShell extends Shell {
function initialize() {
parent::initialize();
}
function startup() {
//ウェルカムメッセージを消すためにオーバーライド
}
/**
* デバッグ用
*/
protected function pr($obj){
$pr = print_r($obj, true);
$this->out($pr);
}
}
ついでに startup() をオーバライドしてウェルカムメッセージを消しました。
こういう事やるには1段あいだに入ってるほうがいいですね。
実際に起動するシェルは AppbaseShellクラス を継承します。
aisatu.php
App::import('Shell', 'Appbase');
class AisatuShell extends AppbaseShell {
function initialize() {
parent::initialize();
}
function main() {
$popopopooon = array('こんにちわ' => 'こんにちワン', 'ありがとう' => 'ありがとウサギ');
$this->pr($popopopooon);
}
}
サンプルコードは今テキトーに書いたのでちょっとあやしいかも。
最後にオチを。
このprメソッド、実際に作ったんですが普通に print_r() すればコンソールに出力されるんですよねー。「そりゃそうだ」と後で気づいたわけで。
CakePHP のシェルでは $this->out() でコンソールへの出力をすることになってますが、開発中にしか使わないし print_r() をそのまま使えばいいかなと。親クラスは機能の集約に役立ってます。