OSC2012 Kansai@Kyoto セミナー無事終了

盛況でした。ありがとうございます。

コンパイラのコアな改造の話をして峰松は満足そうでした(終了時間ブッチしてすみませんでした)。

明日もブース展示しておりますのでよろしくお願いします。

Facebooktwitterlinkedintumblrmail

LT『baserCMSでホームページをリニューアルしたときのアレコレ』のスライド

オープンソースカンファレンス2012 Kansai@Kyoto の「ライトニングトークfor Business」で話した『baserCMSでホームページをリニューアルしたときのアレコレ』のスライドです。

baserCMSでホームページをリニューアルしたときのアレコレ

書きすぎたとは思っていましたが、実際に話すと思ってた以上にボリュームありすぎでした。

5分なんだってば。失敗。

Facebooktwitterlinkedintumblrmail

明日(OSC2012 Kansai@Kyoto)のブース準備完了

前日に準備おわっちまったぜー。ワイルドじゃないだろ〜?

Facebooktwitterlinkedintumblrmail

baserCMSを2.0.1から2.0.3に更新

弊社サイトで使用しているbaserCMSのバージョンを2.0.1から2.0.3に更新しました。

あっさりサックリ上手く行ったのでホッとしたのですが、動作確認するとブログでの一覧表示でおかしな所が。「≫ 続きを読む」をクリックするまで隠れているはずの詳細が一覧で見えてしまっていました。

あれ〜?と思いつつbaserCMS公式にいくと関係しそうな解決済チケットがありました。

BlogHelper::getPostContent の挙動がおかしい

リビジョン a845999e から更新ファイルを取ってきてファイルを差し替えました。

さぁ〜、どうだ! あれ〜? なおらないな。

しばし悩む。 フォーラムを見に行ったりしつつ。

ああ、そうか。ブログのviewカスタマイズしてるからかも。 そうでした。

lancardというテーマ名の場合ですが、以下の2ファイルをリポジトリのindex.phpの変更内容に合わせて修正したらなおりました。
app/webroot/themed/lancard/blog/default/index.php
app/webroot/themed/lancard/blog/default/archives.php

修正内容はリポジトリの差分を見てもらうのが手っ取り早いですね。

index.phpの差分

$blog->postContent($post, false, true) と第2引数がfalseに変わってます。

Facebooktwitterlinkedintumblrmail

Mac で複数ファイルの一括置換ってどうしてます?パート2

<前置き>
 とある休日の午後、grepして置換したい場面が訪れた。
 (そういえば、macでgrepで置換ってどうするんだろう?)と思った。

 早速、googleで『mac grep 置換』で検索してみる。
 すると、なんということでしょう。我が社のブログが一番にヒットするではないですか。

Mac で複数ファイルの一括置換ってどうしてます?パート1

 読んでみて1秒後
 (なんだか難しい・・。)

 そして他の検索候補を見てみると「TextWrangler」を使うといいらしい。
 ということで、「TextWrangler」でgrepで置換する方法を試してみます。

<grepで置換する>
1.「TextWrangler」をインストールする。
 App Storeで検索してインストールします。

2.起動して対象のディレクトリを開く。

3.対象のディレクトリを選択後次のような画面になります。

4.メニューの「Search」→サブメニューの「Search in (選択したディレクトリ名)」を選択します。

5.次の内容でセッティングする。
①紫枠内に対象とする文字列を入力
②緑枠内に置換後の文字列を入力
③黄色枠内で対象のディレクトリが選択されているか確認
④赤枠内の「Replace All」ボタンを押下する。

6.次の内容で実行
①青枠内をチェックすると保存するたびに、ダイアログが出て保存するか聞いてくるので、はずしています。
②赤枠内のProceedで実行します。

7.最後に結果が表示されて完了

Facebooktwitterlinkedintumblrmail

このコマンドどのRPMに入ってたっけと言う時

rpm -q –whatprovides /bin/ls
等と打てばRPMを表示してくれます。
前の環境だとこのコマンドが使えたのにどのRPMを入れたら分からないと言った場合に便利です。

digがbind-utilsに入っているとは思わなかったのです。

Facebooktwitterlinkedintumblrmail

OSC2012 Sendai OpenCOBOLセミナーなう

峰松のセミナーが始まったところをパシャリ。

完全に教室ですね〜。懐かしい。 後ろの席に固まるのも変わらない(笑)

このあとも人が増えまして、事前登録の人数よりも多くの方に聞いていただいてます。
いつも事前登録よりも(なぜか)少なかったりしたのでうれしいです。

Facebooktwitterlinkedintumblrmail

Monster Debugger – Flex開発のお供に

この2週間ほどFlex4でクライアントサイド書いているわけですが、いくつか階層を重ねたコンテナの上部に、paddingTop=”0″にしているのに妙なpaddingが空いたりとかで、Firebug的なものが欲しいなーと思って探したらちょうど良いのがありました。

Monster Debugger 3 is here!

インストールしたらAirアプリケーションとして立ち上がります。

プロジェクトタイプなどを選んでExportすると必要なswcが出力されますので、それに対してFlexプロジェクトのライブラリパスを通してあげます。
後は、キャプチャにもあるように

ライブラリをインポートして

import com.demonsters.debugger.MonsterDebugger;

初期化するだけです。

MonsterDebugger.initialize(this);

MonsterDebuggerを開いた状態でプロジェクトを実行すると、デバッガに接続されてこんな感じになります。

Highlight & Inspectをクリックして、画面から要素を選択してオブジェクトのプロパティを確認したり、そのプロパティをLiveに変更したりなど。
またconsole.log的にオブジェクトのダンプも含めたログを吐いたりなどもさくっとできます。

MonsterDebugger.trace(this, "Hello World!");

いろいろと助かりそうです。感謝。

Facebooktwitterlinkedintumblrmail

「夏だ!Rubyだ!RBC Nightだ!!Rubyで作ったスマホアプリってどうなの??」な話

muraveです。Rubyビジネス・コモンズ(RBC)というコミュニティのスタッフもしています。

「夏だ!Rubyだ!RBC Nightだ!!Rubyで作ったスマホアプリってどうなの??」というイベントが6/22(金)の夕方から開催されました。RBCでは毎月土曜日に1日、または半日規模の勉強会を開催してきたのですが「もっとフランクにいろいろやっていこう」ということになりました。このイベントはその1回目です。

長崎から福岡での金曜日夕方のイベントへの参加はちょっとキビシイですが以前からリクエストしていたRhodesでのスマホアプリ開発ネタとなれば行くしかありません。

イベントでは実際にRohdesで開発された新感覚スマホ式カードラリー『る〜ら』について技術とビジネスのお話を聞くことができました。技術寄りのお話をしていただいた古川さんのスライドはslideshareで公開されています。

http://www.slideshare.net/purukyawa/rubyrbc-nightruby

苦労はされてますが「機能制限は必ずある」のだから「制限を理解して提案、設計」してちゃんとチューニングすれば「決して遅くない!!」とのこと。

最近だと機能優先で進めてから速度のチューニングをすることが多いですが、回線や端末の速度に制限があるスマホのような環境では最初から速度のことを考えつつ進めたほうがいいのかもしれないな、と思いました。

ビジネス寄りのお話では実際のユーザー数のお話、さらに懇親会では投下資金のお話などもでてエキサイティングでしたが、ココら辺は参加者特権ということ秘密。

次はRubyでスマホアプリの第2弾、ネイティブiPhoneアプリが開発できるRubyMotionについてのイベントを7/20に開催予定です。

あと、9月は私が担当でイベントをやる予定です。長崎で
まだ何をするか決めてませんがそのときはよろしくお願いします。

ところで、RBCのオフィシャルサイト、古いページがのこってしまっていてややこしいんですがfacebookのページがそうなんです。

http://www.facebook.com/rubybizcommons

最新情報については上記URLからお願いします。

Facebooktwitterlinkedintumblrmail

baserCMSの認証をカスタマイズ(WordPressのアカウントでログイン)

baserCMSのバージョンは2.0.1です。

現在弊社のサイトはbaserCMSとWordPress(スタッフブログ)が同居しています。

アカウントの管理を統一したかったのでbaserCMSにWordPressのアカウントでログイン可能なようにbaserCMSの認証をカスタマイズしました(先にWordPressを運用していたのでスタッフのアカウントがWordPressにありますので)。

次のような仕様にしました。

  • WordPressのアカウントでbaserCMSにログインした場合、事前に作成したstaffアカウントとしての操作になる。
  • 公開ページで表示される名前(氏名)はstaffとする。
  • ログイン中、氏名を「staff(WordPressアカウント)」とする。
  • 誰が操作したかの記録は欲しいのでダッシュボードの「最近の動き」に by 氏名 と付加して記録する。

 

baserCMSの認証はbcAuthComponent(baser/controllers/components/bc_auth.php)に切り出してありますので、このファイルをappディレクトリの同一階層にコピーしてそのファイルを修正します。元のbcAuthComponentは携帯の簡単ログイン対応になっていたのですが携帯でのログインは必要なかったので全部削除して書き直しって感じになりました。
app/controllers/components/bc_auth.php

App::import('Component', 'Auth', 'Sanitize');
class BcAuthComponent extends AuthComponent {
//WordPressアカウントでstaffとしてログイン murave
function login($data = null) {
$this->__setDefaults();
$this->_loggedIn = false;

$wordpress_id = null;

if (empty($data)) {
$data = $this->data;
}

$model =& $this->getModel();
$alias = $model->alias;
$cnt = $model->find('count', 
array('conditions' => array($this->userModel . '.' . $this->fields['username'] => $data['User']['name'])));
if($cnt == 0) {//baserCMSには存在しないユーザー
if($this->_wp_CheckPassword($_POST['data']['User']['name'], $_POST['data']['User']['password'])) {
$wordpress_id = $_POST['data']['User']['name'];
$staff_record = $model->find('first',
array('conditions' => array($this->userModel . '.' . $this->fields['username'] => 'staff')));

$username = $staff_record[$this->userModel][$this->fields['username']];
$password = $staff_record[$this->userModel][$this->fields['password']];
$data = array(
$this->userModel . '.' . $this->fields['username'] => $username,
$this->userModel . '.' . $this->fields['password'] => $password
);
}
}

if ($user = $this->identify($data)) {
if(!is_null($wordpress_id)) {
$user['real_name_2'] = '('.$wordpress_id.')';
}
$this->Session->write($this->sessionKey, $user);
$this->_loggedIn = true;
}
return $this->_loggedIn;

}

/**
 * WordPressユーザー認証を行う。
 */
private function _wp_CheckPassword($wordpress_id, $password) {
//WordPressの関数を使って認証を行ない結果をtrue/falseで返す処理です。
}

}

_wp_CheckPasswordがWordPressに認証させる処理で「肝心な所」ではあるのですが、環境によって異なるはずなので申し訳ありませんが割愛しています。
baserCMSにアカウントが無かったらWordPressに認証させて、WordPressで認証に成功したらstaffというアカウントでbaserCMS側は認証、その場合には $user[‘real_name_2’] = ‘(‘.$wordpress_id.’)’ とreal_name_2に設定してからセッションに書き込んでいます。real_name_1はstaffにしているので操作中の氏名は「staff(WordPressアカウント)」となります。

次に「最近の動き」への記録ですがBaserAppModelのsaveDbLogメソッドで行われていますのでこのメソッドの動作を変更します。baser/models/app_model.phpをappディレクトリの同一階層にコピーしてメソッドを定義すれば上書きできます。

app/models/app_model.php

class AppModel extends BaserAppModel {
function saveDbLog($message) {
// ログを記録する
App::import('Model', 'Dblog');
$Dblog = new Dblog();
$logdata['Dblog']['name'] = $message
.' by '.@$_SESSION['Auth']['User']['real_name_1'].@$_SESSION['Auth']['User']['real_name_2'];
$logdata['Dblog']['user_id'] = @$_SESSION['Auth']['User']['id'];
return $Dblog->save($logdata);
}
}

これで当初予定していたカスタマイズが一通り完了しました。baserCMSはカスタマイズしやすくていいですね。

Facebooktwitterlinkedintumblrmail