Home

Shin x blog

[告知] 第2回CakePHP勉強会を行います。

この記事の所要時間: 038

[2008/02/08] 申込を開始しました。

告知です。第2回CakePHP勉強会を都内で行います。

第2回CakePHP勉強会

  • 日時: 2008/2/20(水) 夜(19:00 or 20:00~?)
  • 場所: 都内(会場は調整中です)

日程はほぼ決まりなのですが、会場の最終調整を行っているところです。決まりましたらまたこのblogにてご連絡します。

今回は事例発表などもあり、かなり楽しみな内容になりそうです。またLT枠も設けるのでネタをお持ちの方是非ご参加下さい。

前回のレビュー等々はhttp://events.php.gr.jp/event.php/event_show/30から辿れます。

Twitterのキーワードをグラフで見るTwitterTrendをリリースしました。

この記事の所要時間: 136

Twitterで、あるキーワードがどれくらい投稿されているかをグラフ化するTwitterTrendをリリースしました。

TwitterTrend

なにをするの?

キーワードを入力して「集計」ボタンをクリックすると直近1ヶ月でキーワードが含まれた投稿数をグラフで表示します。

流行のキーワードがどの程度反応されているかを見ることができます。

例えば最近物議を醸しているあの話題で集計すると↓のようになります。

TwitterTrend : PHP – .php

キーワード

キーワードはTwitter検索と同じ検索式が使えます。

また3つまでなら複数のキーワードを指定することもできます。この場合それぞれのキーワードについてグラフが表示されるので、投稿数を比較することができます。それぞれのキーワードは[,](カンマ)で区切ります。

TwitterTrend : ラーメン,うどん,そば

集計対象

集計されるのは前日から直近1ヶ月間の日本語ユーザの投稿です。

Twitterでの伝播

今回はblogでリリースを出す前にTwitterでURLを投稿してみました。ものの数分でサーバにアクセスが来だして、はてブにブックマークが付きました。1h経過した頃には10users程度になってました。その後予定があったので外出したのですが、帰ってきた頃には30usersが付いていました。

Twitterで呟いたサービスがどんどん広がっていく様は、改めて驚きました。情報の伝達スピードがハンバじゃないですね。

TwitterやSBMで速攻で反応が返ってくるのはわくわくしますね。この感覚はやみつきになりそうですw。

# ちなみにこのサービスは今話題のPHPで作ってます。

# id:moto0915さん、はてぶで不具合報告ありがとうございました!「OR」の件は修正しましたー。

給与所得の源泉徴収票等の法定調書

この記事の所要時間: 114

今年も給与所得の源泉徴収票等の法定調書提出の季節がやって参りました。

結局今年も自分でやる羽目になったので、手順やらをメモしときます。

提出書類

  • 給与所得等支給状況内訳書[税務署]
  • 給与所得の源泉徴収票[市区町村に2枚、税務署に1枚、給与受給者に1枚]
  • 給与所得の源泉徴収票等の法定調書合計表[税務署]
  • 給与支払報告書[市区町村]

・給与所得等支給状況内訳書

国税庁のサイトからExcelファイルをダウンロードして作成しました。

セル内に必要な内容を入力すると合計値などは自動計算してくれるので便利です。

・給与所得の源泉徴収票

税務署から送付されてきた用紙に記載して作成しました。この用紙は4枚でワンセットとなっており、一枚目にボールペンで記載すると以降3枚にカーボンコピーされます。

念のためe-taxソフトで作成しておいて、その内容を書き写しました。

4枚の内、上2枚を受給者(給与を貰う方)の市区町村へ、1枚を税務署へ、1枚を受給者へ提出します。

・給与所得の源泉徴収票等の法定調書合計表

e-taxソフトで作成しました。給与所得等支給状況内訳書で作成した内容を入力するだけでokでした。

・給与支払報告書

税務署から送付されてきた用紙に記載して作成しました。受給者の市区町村へ提出します。

やれば

簡単なのですが(少人数なんでw)、年一回だと忘れるので。さあ来月は確定申告だ。。。

CakePHP 管理者サイトでBasic認証を簡単に行うコンポーネント

この記事の所要時間: 226

CakePHPの管理者向けサイトにBasic認証を簡単に追加するコンポーネントです。

1.2系で動作しますが、ちょこちょこっといじれば1.1でも動くかと。

1. Routing.adminを有効にする

そもそもこれをやらないと意味がありません。[app/config/core.php]でRouting.adminを有効にします。

これにより[http://example.com/admin/~]のURLで管理者用アクションにアクセスできます。

   Configure::write('Routing.admin', 'admin');

2. 認証コンポーネントを設置

認証コンポーネントを[app/controllers/components/admin_auth.php]に設置します。

[2008/05/29] 継承元をComponentからObjectへ変更しました。(janさんありがとうございます!)

<?php
class AdminAuthComponent extends Object {
  /**
   * before filter
   */
  public function startup(&$controller) {
    if (!preg_match("/^" . Configure::read('Routing.admin')  . "_/i", $controller->action)) {
      return;
    }

    $user = env('PHP_AUTH_USER');
    $pass = env('PHP_AUTH_PW');

    if (empty($user) || empty($pass)) {
      $this->unauthorized($controller);
    } else {
      if (!$this->auth($user, $pass)) {
        $this->forbidden($controller);
      }
    }
  }

  /**
   * unauthorized
   *
   * @param  object Controller $controller
   */
  protected function unauthorized($controller) {
    header("WWW-Authenticate: Basic realm=\"Please Enter Your Password\"");
    $controller->redirect(null, 401, false);
    echo "Authorization Required";
    exit;
  }

  /**
   * forbidden
   *
   * @param  object Controller $controller
   */
  protected function forbidden($controller) {
    $controller->redirect(null, 403, false);
    echo "Authorization Required";
    exit;
  }

  /**
   * auth
   *
   * @param  string $user
   * @param  string $pass
   * @return boolean
   */
  protected function auth($user, $pass) {
    $hash = sha1($user . $pass . Configure::read('Security.salt'));
//debug: var_dump($hash);
    return $hash === ADMIN_AUTH_HASH;
  }
}
?>

3. AppControllerで読み込む

AppControllerの$componentsでAdminAuthComponentを読み込むだけでokです。これで[/admin/]なURLにアクセスされるとBasic認証を行い、認証が通った場合のみアクションを実行します。

<?php
class AppController extends Controller {
  public $components = array('AdminAuth');
}
?>

認証情報

上記ソースでは簡易的にユーザ名+パスワード+Security.saltでsha1ハッシュを生成して、それを定数ADMIN_AUTH_HASHと比較して認証を行っています。

ADMIN_AUTH_HASHは[app/config/core.php]等で定義しておけばokです。

ちなみにハッシュ値を簡単に作成するには、AdminAuthComponent#auth()でコメントアウトしているvar_dump()を有効にします。これでブラウザからアクセスしてユーザID・パスワードを認証ダイアログで入力すればハッシュ値が出力されます。

ハッシュ生成後はvar_dump()の行は削除する or コメントアウトするようにしましょう。

拡張とか

ここでは単純な実装になっていますが、AdminAuthComponentを変更すれば以下のような拡張が考えられます。

  • ハッシュ値では無くDBの値で認証
  • HTTPからのアクセスはHTTPSへリダイレクト
  • Basic認証を他の認証に変更

ちなみにRouting.adminのURLは単純にapache側で認証をかけるとすり抜けられる可能性があります。(@see:CakePHP URLマッピング修正パッチ)

このコンポーネントを使えばいかなるURLでアクセスされても、管理者用アクションを(初回)実行する際は認証を通過させることができます。

2007年ふりかえり&2008年は

この記事の所要時間: 453

あけましておめでとうございます。本年もよろしくお願いいたします。

年は明けてしまいましたが、自分のため;-)に2007年のShin x blogをふりかえってみます。

2007年は自分にとって大きな出来事が多くありました。これまでただ想像することしか無い世界を体験することができました。

CakeInfo

名前そのままでCakePHPのMVC等の設定内容をphpinfo()風に表示するスクリプトです。

これまでblogでは幾つかのTipsをソース付きで書いていたのですが、名称を付けてライブラリ・パッケージとして公開したのでは初でした。

sdozonoさんに英語記事で取り上げて頂いたおかげでCakePHP本家コミュニティでも紹介されました。海外のサイトで取り上げられたのは新鮮で嬉しかったです。

スクリプトを設置するだけで使えるので一度お試しを。

PEAR::Services_Rakuten

楽天ウェブサービスAPIをPHPから利用するPEARパッケージです。

PHPユーザとしてはいつかPEARパッケージを作りたいという思いがあったので、非公式ながら実際に形にできたのは良かったです。

楽天ウェブサービス自体が更新されていっているのでそれに伴いメンテナンスを続けています。

Twitter検索

Twitterでの投稿を検索するウェブサービスです。

Twitterをはじめた当初から海外に検索サービスがあったのですが、日本語が通らない・パフォーマンスが悪い状況でした。ちょうどCakePHPでサービスを作ってみたかったので軽いノリでパパッと作りました。

正直ここまで皆さんに使って頂けるサービスになるとは想像もしていませんでした。:-DニュースサイトやPC系雑誌、書籍等々で紹介して頂いたのも貴重な経験でした。

アクセス増・データ増により改良を続けていっています。

CakePHPガイドブック

CakePHPの解説本を共著で執筆しました。

初めて自分の書いたモノが出版されるということでとても貴重な体験でした。

システム開発というのは業界外の人にはなかなか理解されないのですが、そういった人にも示せる成果が上げられたのはとても大きかったです。(システムとは無縁な両親が喜んでくれたのが嬉しかったり;-))

またこういった機会があれば取り組んでみたいと思います。

勉強会

1月に参加したPHPセミナーを筆頭に幾つかの勉強会に参加しました。今年はただ参加するだけでなく設営のお手伝いから、開催する側・発表する側を経験できました。

勉強会での様々な出会い・触れ合いは日常には無い大きな刺激を受けました。こういった所での刺激がblogやサービスなどに生かされ、さらにそれにより勉強会に参加するという良い循環がありました。

あと仕事で上京する機会が増えたのも、イベントへの参加を促してくれました。

2007年は勉強会参加への心理的な障壁が大きく下がりました。今後も色々な勉強会・イベントに参加していきたいと思います。

SBM数・購読数

2006年から比べると見て頂く・反応して頂くことがかなり増えました。

購読数が3ケタとかホッテントリに入るとか全く別世界の事だと思っていたので、今冷静に振り返るとよくここまで来れたなーと思います。もちろん上から見れば全然大したことないですが、一年前の自分からすれば信じられない数字です。

これはほんと見て頂いてる方々に感謝感謝です。

2007年は

「出会い」の年でした。本・サービス・ライブラリとの出会いもありますが、blog・twitter・勉強会・イベント・仕事等々で例年に無いくらい多くの方との出会いがありました。(それまでの出会いが少なすぎたという話しもありますが:-p)

こういった出会いが派生していって、上で挙げたような成果が現れてきたのかなと思います。

今後もこういった「出会い」は継続していきたいです。

2008年は

これまで作ってきたモノを発展させつつ、さらに新たなサービス・システムを作っていきたいと思います。具体的にはオープンソースシステムを何か公開したいです。

あと近いところではTwitter検索のパフォーマンス改善がほぼほぼ落ち着いたので、携帯からの検索とかも実装したいですね。

勉強会やイベントにももっと参加していきたいです。東京のイベントももちろんですが、関西のイベントも盛り上げていきたいですね。できれば海外のイベントにも行ってみたいです!(パスポートすら持ってませんが…)

というわけで、勉強会等で会う方、サービス・ライブラリを利用して頂いている方、blogを読まれている方、皆さん今後ともよろしくお願いいたしますー。

楽天オークション系対応-PEAR::Services_Rakuten-0.2.2リリース

  • 2007-12-23 (日)
  • PHP
この記事の所要時間: 122

楽天ウェブサービスに楽天オークション系APIが追加されたので、これに対応する「PEAR::
Services_Rakuten-0.2.2」をリリースしました。

今回の主な変更点は以下です。

  • 楽天オークション系API対応
  • 各APIを2007/12/23 現在のバージョンに更新

インストール・アンインストール

インストール方法は以下です。

$ pear install --alldeps /blog/download/Services_Rakuten-0.2.2.tgz

インストール時に「Failed to download pear/XML_Serializer within preferred state “stable”」といったエラーが発生した場合は以下のコマンドでXML_Serializerをインストール後、Services_Rakutenをインストールして下さい。

$ pear install --alldeps XML_Serializer-beta

アンインストール方法は以下です。

$ pear uninstall __uri/Services_Rakuten

楽天オークション系APIを使う

基本的な使い方は0.2.1と変わりません。Services_Rakuten::factory()で使用するAPIを指定するだけでokです。

<?php
require_once('Services/Rakuten.php');
define('DEV_ID', 'xxxx');
define('AFF_ID', 'xxxx');

// 楽天オークション商品検索
$api = Services_Rakuten::factory('AuctionItemSearch', DEV_ID, AFF_ID);
$api->execute(array('keyword' => 'ブログ'));
var_dump($api->getLastUrl());
var_dump($api->getResultData());

// 楽天オークション商品コード検索
$api = Services_Rakuten::factory('AuctionItemCodeSearch', DEV_ID, AFF_ID);
$api->execute(array('itemCode' => 'i:aaa:1234567'));
var_dump($api->getLastUrl());
var_dump($api->getResultData());
?>

CakePHP勉強会を開催しました

この記事の所要時間: 244

CakePHP勉強会を開催します。従来のPHP勉強会では一般化した内容しか取り扱えない面もある為、特化したイベントの開催を企画しました。

CakePHPを実際に使っている人、CakePHPに興味がある人で語らいましょう!

events.php.gr.jp

12/7に東京で開催したCakePHP勉強会は無事に終了しました。

参加された方々、発表を行ったyandoさん、akiyanさん本当にありがとうございました。

私もわたわたしながらも何とか発表を行うことができました。役立つかどうかは分かりませんwが、発表で使ったスライドをアップしておきます。

CakePHPを業務で導入する shin1x1

  • 開始直前に内容から判断して順番を変えていただきました。
  • ここ最近バタバタで手が付けられず、結局新幹線でスライドを作りました。
  • な感じなのでいまいちパッとしない内容だったかもしれません。。。
  • ただダメなりに自身は学べた事が多々あったのでとても楽しかったです。
  • 皆さんから色々意見を聞けたのは収穫でした!
    もっと議論を誘発するような発表もアリかな。

参加された皆さんとのやりとりで

  • bakeは予想以上に誰も使っていなかった:-p
  • CakePHP1.2はまだ様子見の人が多かった
  • CakePHPを業務で使っている人が意外に多くてびっくり
  • CakePHPガイドブック保持者がかなり多くてびっくり(本当にありがとうございます_O_))

CakePHPをさらにDRYにする、ドライケーキレシピ akiyanさん

  • 高橋メソッド+akiyanトークでテンポ良いプレゼンでした。
  • 立って説明しつつ片手でマウスを持ってスライドを進める。なるほど。
  • DRY Cake++
  • SQLを連想配列を駆使して作り上げる視点。
  • こういう実践的なTipsはどんどん共有したいですね。

CakePHP1.1 to 1.2 yandoさん

  • いつもながら、さすがのプレゼンでした。
  • Garrett Woodworthの写真w
  • 1.1システムを1.2へ移行するデモ++
  • やはり最後はもちろんいつものでしたw

懇親会

  • ほとんどの方が懇親会に参加!
  • CakePHPやらその周辺の話を色々と。
  • おそらくこれだけCakePHPの話を他の人としたのは人生初w
  • もっともっと話したかったし、聞きたかった。
  • 軽くリクルーティングw
  • かなり皆さんネタを持っているもよう。第2回もある?
  • 名刺持って行くのを忘れるという大失態><名刺を頂いた皆さんスミマセン。。。

てな感じで

楽しくてあっという間に終わった勉強会でした。

今回初めて勉強会を開催する側、発表する側に回ったのですが、やはり楽しいですね。特に今回はyandoさん・akiyanさんと3人で進めていったのでチームで物事を進める楽しさがありました。

個人的にもお会いしたかった方々と少しですがお話ができ、嬉しかったです。

またこういった機会があれば是非参加したいと思います。

皆さんお疲れ様でした&ありがとうございました。

# アンケートご協力ありがとうございました!見るのが楽しみなような怖いような;-)

PHP SAPIにはどんなのがあるか

  • 2007-12-02 (日)
  • PHP
この記事の所要時間: 147

昨日参加したPiece Network1でSAPIごとに読み込むiniファイルを変える話がありました。

SAPIってどんなのがあるのかな、と思いPHP5.2.5のソースをざっくり調べてみました。

PHP_SAPIやphp_sapi_name()で取得できるSAPI名は、[sapi/]にある各インターフェイスのソースにて定義されています。それらを一覧にしたのが↓です。

ソースディレクトリ name pretty name
sapi/aolserver aolserver AOLserver
sapi/apache*1
sapi/apache_hooks
apache Apache
sapi/caudium caudium Caudium
sapi/apache2handler apache2handler Apache 2.0 Handler
sapi/cgi*2 cgi-fcgi
cgi
CGI/FastCGI
CGI
sapi/cli cli Command Line Interface
sapi/isapi isapi ISAPI
sapi/milter milter Sendmail Milter SAPI
sapi/nsapi nsapi NSAPI
sapi/phttpd phttpd PHTTPD
sapi/pi3web pi3web PI3WEB
sapi/roxen roxen ROXEN
sapi/thttpd thttpd thttpd
sapi/tux tux tux
sapi/webjames webjames WebJames

*1 apacheは[sapi/apache]と[sapi/apache_hooks]で同じ値が定義されています。
*2 [sapi/cgi]ではPHP_FASTCGIが定義されていれば上段が、それ以外は下段が設定されます。

こう見ると色々ありますね。

ちなみにphp.net見ると2003年時点でのSAPI一覧が残っていました。以前はjava_servletやactivescriptなど今より多くのSAPIがあったようです。

Piece Network 1に参加してきました。

この記事の所要時間: 259

12月1日(土)に新大阪にてPiece Project主催のイベントPiece Network 1を開催します。

| Piece Framework – An Application Framework for Essential Development Practices

名前からPiece Framework関連のイベントかと思ったのですが、発表内容を見るとPHP全般を扱った内容だということで参加しました。

内容はとても興味深いものでお三方の発表はそれぞれ学ぶ点があり、楽しかったです。参加されて皆さんお疲れさまでした。

勉強会のメモをざっくりとまとめます。

1. ローカルマシン上に構築するPHP開発環境 久保敦啓さん

なるほどと思ったのが、SAPIごとにphp.iniを変えるお話でした。何となくPHPマニュアルで認識はしていたもののあまり活用していませんでした。

php-cli.phpやphp-apache.iniなどSAPIごとの設定ファイルを設置できます。

読み込むiniファイルについてはこちら

ちなみに普段は/etc/php.iniなどに共通設定を書き、httpd.confにWebサイト固有の設定を書いています。

この手の話しは人それぞれのノウハウがあるでしょうから聞いていて面白かったです。

2. PHPマニュアルの読み方 高木正弘さん

  • 高木さんはMac
  • PHPマニュアルは量が膨大!(ZFは500P,PostgreSQLは1900P,PHPは3600P!)
    全部読むのはムリ・・・
  • ポイントを絞って読む。言語リファレンスはしっかり読んだ方が良い。
  • PHP製のドキュメント生成ツールがある(PhD http://doc.php.net/wiki/phd)
  • ドキュメントを作るのに必要なのは日本語だけ。英語はなくても良い。
    日本語訳した文章の校正作業とか。これも大事な作業。
  • ドキュメントを作る人募集中!
  • 本当にやりたい人は翻訳したり校正したドキュメントをPHP-docのMLに投げると誰か見てくれるみたい
    #うーん、やりたいかも。

3. SPL入門 関山隆介さん

  • 関山さんもMac!
  • PHP5組み込みインターフェイス、SPLについての解説
    # SPL関係ではじめてきちんとした解説を聞いた気がする。
  • LogicExceptionはPHPではあまり意味が無いかも(たいがい投げられるのはRuntimeException)
  • RecursiveIteratorIteratorは口語にしづらい
    #nativeな人は平気なんだろうか
  • SPLじゃないとできない事は無い。でもあると便利。
  • #SPLまた真面目に使いたくなりました。

4. 無名関数、配列リテラル等パッチデモ 関山隆介さん

時間が余ったので話題の関山さん作パッチのデモを見せて頂きました。

phshでデモされていたのですが、実際に動作しているのを見ると「おおー」といった感じですね。これは使いたいです。今後は本家へ働きかけるとのことなので、是非取り込まれることを願ってます!

てな感じで

勉強会のあとは懇親会。今回は色々な方とお話ができました。内容は・・・まあ濃い話です;-)。

こんな面白い勉強会が関西で行われたことがとても嬉しいです。CakePHPの勉強会を大阪でやれば?といったお話も頂いたので何らかの形で実現したいと思います。

主催されたPiece関係な方々ありがとうございました。また遊びに行かせて頂きます。

CakePHP勉強会を開催します

この記事の所要時間: 023

申込については近日中に行う予定ですので、またお知らせいたします。しばしお待ちを。

CakePHP勉強会を開催します[告知] | Shin x blog

先日告知したCakePHP勉強会の申込を開始しました。

events.php.gr.jpから申込できますのでCakeな皆さんは是非ご参加下さい。

しかしうえちょこさんshimookaさんエントリ早すぎです;-)

Home

検索
フィード
メタ情報

Return to page top