投稿日:

Tutorial for Go lang

備忘録。以下、Echo より
—–

package main

import (
   "os";
   "flag"; // command line option parser
)

var omitNewline = flag.Bool("n", false, "don't print final newline")

const (
   Space = " ";
   Newline = "\n";
)

func main() {

   flag.Parse();   // Scans the arg list and set up flags

   var s string = "";

   for i := 0; i < flag.NArg(); i++ {
      if i > 0 {
         s += Space
      }
      s += flag.Arg(i)
   }

   if !*omitNewline {
      s += Newline    // 改行
   }
   os.Stdout.WriteString(s);   // 文字列出力

}

—–

コマンドラインで渡されたパラメータを出力するだけのプラグラム。
主に使われているパッケージは以下の通り。日本語はかなり適当。

func Bool(name string, value bool, usage string) *bool
Bool defines a bool flag with specified name, default value, and usage string. The return value is the address of a bool variable that stores the value of the flag.
Boolは指定された名前は、デフォルト値、および使用状況の文字列でboolのフラグを定義します。戻り値はbool変数のアドレスは、フラグの値を格納します。

func Parse()
Parse parses the command-line flags. Must be called after all flags are defined and before any are accessed by the program.
Parseはコマンドラインフラグを解析します。後にすべてのフラグと定義される前に、任意のプログラムによってアクセスされる必要があります。

func NArg() int
NArg is the number of arguments remaining after flags have been processed.
NArgはフラグが処理された後に、残っている引数の数です。

func Arg(i int) string
Arg returns the i’th command-line argument. Arg(0) is the first remaining argument after flags have been processed.
Argはi番目のコマンドライン引数を返します。 フラグが処理された後、Arg(0)は最初の残っている引数。

あとfor文に括弧を付けない(CでもPHPでも付けるのに)ことに違和感を感じてしまった。
シンプルだなー go lang

投稿日:

Go lang 使ってみました

とは言っても、 Google の新プログラミング言語 Go をMac OSX にインストール に記載された通りに
インストールとサンプルプログラムを実行してみただけです。

コンパイルは確かに早いというか(コンパイル)されたの?と感じました。

bin ディレクトリ作成

cd $HOME
mkdir bin

以下の内容で .bashrc を作成

# Google Go
export GOROOT=$HOME/go
export GOOS=darwin
export GOARCH=386
export PATH=$PATH:$HOME/bin


env | grep ‘^GO’

で確認。すると結果は以下の通り(※私の環境の場合)


GOARCH=386
GOROOT=/Users/junji/go
GOOS=darwin

mercurialをインストール

sudo easy_install mercurial

その後

$ hg clone -r release https://go.googlecode.com/hg/ $GOROOT

結構時間がかかります。
以下省略・・・

hello.go を作成し「hello, go.」を出力するプログラムを作成

8g hello.go
8l hello.8
./8.out

コンパイルして、リンクさせて実行する。

結果は以下の通り。

hello, go.

今後どのように展開されるのかひっそり見守りたいと思います。

参考:The Go Programming Language

投稿日:

ATND for WordPressを公開しました

サイドバーに表示
こんなかんじ

まだまだ自分専用(ブログ下部に表示させています)ですが、必要最低限の機能を追加して取りあえず使ってもらえる状態にしました。
プラグイン用のページを設けましたので使い方はそちらを見て下さい。

ATND for WordPress

あと、主催者や参加者でもイベントが取られるみたいなので、

○○さん主催のイベント
私の参加しているイベント

とか表示するのも面白いですね!

プラグインの自動アップロード方法とか全然わかっていないので
今後のメンテ方法とか次回の WP勉強会で聞いておかねば。。
ソースはcodecheck.inにおいておきます。

それとそれと、ただいま一緒に働いてくれる人を募集しているので興味ある方は是非。(くどい)

投稿日:

ATND for WordPress を作ってみた

今津の海岸
先月の、WordPressプラグインLogpi for WordPressを作ってみた に引き続き、ATND用のプラグインを作って見ました。まだ公開できるレベルではありませんが、もう少し設定項目増やして公開しようかなと。
ちなみに作った理由は、少し前までは、調整さんでイベントの出欠取っていたイベントが多かったのですが、最近はATNDがほとんど占めていること。もう一つはAPIを提供していること。最後に「あーもう終わったのね、参加したかったのに。」をなくしたかったとこ。

まだ作成中なのですがとりあえず自分のブログに張ってみました。今は、福岡をキーワードにイベント情報を表示しています。完全自分用ですね。。

ATNDってまだIT・技術系でしか使われていない(きがする)ようですが、ワークショップとか参加型のイベント等に広まると面白くなるんでしょうね。mixiIDでログインできるのがすごく◎

写真(ケータイです..)は家の近くの海岸。左側に見える島は玄海島。いい気分転換になります。

それとそれと、ただいま一緒に働いてくれる人を募集しているので興味ある方は是非。

投稿日:

WordPressプラグインLogpi for WordPress

週末のWordBench福岡のノウハウが冷めないうちに、初めてのプラグインを作ってみました。とは言ってもかなり雑です。

WordPressのプラグインは公式サイトに登録されているものだけでも6000以上、未登録のものを含めると約10000は超えると言われています。当然同じ物を作っても仕方がないので、ログピの書き込みを表示するプラグインを作ろうと思いました。昨日。

しかし、一から作るのは大変だろうし、まだプラグイン作成の知識が乏しいので、そこで見つけたのが Twitter for WordPress これをログピ用に作り直しました。それが、Logpi for WordPress です。以下のURLよりダウンロードできます。

Logpi for WordPress ダウンロード

使い方は非常に簡単。だと思う。

1. ZIP形式のプラグインを展開し、wp-content/plugins にインストールします。
2. プラグインを有効にする事で利用可能となります。

プラグイン管理画面
プラグイン管理画面

3. ウィジット管理画面を表示して、Logpi#1をサイドバーにドラッグ・ドロップします。
4. 表示したいユーザー名、件数を設定します。

ウィジット管理画面
ウィジット管理画面

5. サイドバーに表示されます。

サイドバーに表示
サイドバーに表示

よろしければどうぞー。

作り終わった後、ログピ公式のブログパーツがあることに気が付きました。。

それとただいまサーバーエンジニア募集しているので興味ある方は是非。

投稿日:

WordPress セミナー in 福岡 AIP カフェ #2 に参加しました

間伐
間伐

朝は庭に森の木々がめちゃ侵入してきていたので間伐(許可済み)。そして午後からは、wordbench主催のWordPress セミナーに行ってきました。

以下は完全に自分用の備忘録です。

WordBenchの目的
・地域コミュニティが中心として活動、wordpressの活性化。
・wordpressでの疑問、気になる事など気兼ねなく共有していきたい。
・福岡のコミュニティについて、東京に次いでメンバーが多い
・福岡では9月から積極的に活動開始

今回のテーマ『プラグイン作成』
・講師は、ContactForm7の作者Miyoshi氏
・公開プラグイン6,796
・未公開含めると10,000は超える
・プラグインの怖い所。プラグイン=単なるPHP
・簡単にDB削除、アカウント追加、パスワード変更も簡単にできる
・現在審査等も行っていない(これは大きい)
・とっさに調べてみたら
 例えばこれとか http://ja.forums.wordpress.org/topic/1485
・とりあえず公式サイト
http://wordpress.org/extend/plugins/ が今のとこ安心して使える
 ポピュラーな物を使いましょう。
 必ずどのようなプラグインか見ましょう。
 突起してDL数があがっているのは注意しましょう。(自演の可能性)

フィルターとアクション (フック) の使い方
・フィルター
フィルターは、データベースに追加する前やブラウザのスクリーンに送り出す前にさまざまなタイプのテキストを改造するために WordPress が起動させるフック。

wp-include/plugin.phpを見てみる
—–
function add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
global $wp_filter, $merged_filters;

$idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority);
$wp_filter[$tag][$priority][$idx] = array(‘function’ => $function_to_add, ‘accepted_args’ => $accepted_args);
unset( $merged_filters[ $tag ] );
return true;
}
—–
default は 10。 _wp_filter_build_unique_id でソートしている。
第4引数まである。

・アクション
アクションは、実行中の特定のポイントもしくは特定のイベント発生時に WordPress のコアが起動させるフック機能。
例えばおなじみの wp_footer もたどれば do_action を読んでいた。
勉強会中何気に、core.trac.wordpress.org 見てみると、昔はこんな書き方だった。

今は php wp_footer(); と書いていると思いますがその先は、、
—–
function wp_footer() {
do_action(‘wp_footer’);
}
—–
を読んでいるんですね。(なるほど)
ちなみにアクション、フィルターの初期設定は、wp-settings.php で行っている。
—–
$wp->init(); // Sets up current user.

// Everything is loaded and initialized.
do_action(‘init’);
—–

・逆に、remove_filter、remove_action という使い方もある。
・default_filter をどうしてもいじりたい場合
・とは言っても、default_filter.php をカスタマイズってのはできれば避けたい。(ですよね)
・そんなときに使うのが remove_filter

以下は default_filter.php の wpautop を無効にする場合。
—–
remove_filter(‘the_content’,’wpautop’);
—–

懇親会も楽しかったです。どうせ作るならケータイ絡みのプラグインが良いな。

それとただいまサーバーエンジニア募集しているので興味ある方は是非。

投稿日:

DistributedHoge

codecheck.in 主催の 分散なんとか(DistributedHoge)に行ってきました。場所はいつもお世話になっている Fusic さん。(会社のすぐ近く)
内容は以下の通り。

・ [CakePHP][MySQL]動画サービスの負荷分散 (rytich)
・ [LVS]負荷分散してみたよって話をメインにだらだらと (pudding)
・ [lifehacks]「技術とは、人生と似たようなものだ」 (pudding)
・ [CouchDB] (cohtan)
・ [Git] (cohtan)
・ [github] (k1LoW)
・ [git-svn] (k1LoW)
・ ハンズオン

今回は、CouchDB と git が個人的にかなりきました。githubを使ったハンズオンは不完全燃焼に終わった..
git push がまだできてません >< configファイル作ったんだけどなー。

[CouchDB]
・オープンソースのドキュメントデータベース。
・RDBで言うクエリーの部分はMapReduceを利用
・RESTを通じたWeb API経由でデータ取得ができる
・結果はJSONで受け取る
・言語を問わず広く利用可能

[Git][github]
・ソースコード管理を行う分散型バージョン管理システム
・動作速度に重点が置かれている
・Linuxカーネルのソースコード管理を目的として、リーナス・トーバルズ氏によって開発.現在のメンテナンスはJunio C Hamano氏が担当
・git-svn を使って管理は svn、ローカルは git で良いとこ取りな開発環境が良さそう
・DB-Press vol.50 は要確認!

今回の勉強会のまとめは 気が向いたら で詳しくまとめてくれています。
さて、DB-Press みて復習しよ。

投稿日:

Zend_Translateで多言語対応

多言語対応のちょっとしたサービス?を作っているのですが練習がてら奥さんのサイト(フレームワークはCodeIgniter使用)を一部多言語化してみました。ZendFramework の Zend_Translate クラスが色んなパターンでの多言語化アプローチがあるようなので使ってみました。
このアプローチというのは Zend_Translate のアダプタ の事なのですがこれがまた沢山ありまして、、以下一部抜粋。

  • Array — 簡単ですが柔軟性に欠け、contollerに書いちゃうのでプログラマしか扱えない。
  • Csv — シンプルなテキスト形式で高速ですがUnicode 文字で問題が発生するかもしれない。
  • Gettext — linux における GNU の標準形式。
  • Ini — シンプルなテキスト形式で高速。Csvと似てますね。
  • Tmx — アプリケーション間での翻訳の業界標準。XML フォーマット。

などなどと全部で9種類アダプタ。もちろん自作アダプタクラスの組み込みもOK。今後はSQLにも対応するようです。何が良いのか正直分かりませんね。笑
何となくXML形式のフォーマットが良いのでしょうか。

で、今回は簡単なArrayアダプタで。。

1.Front controller
都度コントローラーでインクルードは面倒なので、フロントコントローラー(index.php) に以下の記述を追加する。ロードの直前で良いと思います。

// Zend framework へのインクルードパス設定
ini_set(‘include_path’, PATH_SEPARATOR . APPPATH . ‘libraries/’ );
// Zend_Translate コンポーネントの読み込み
require_once ‘Zend/Translate.php’;

2.Controller
コントローラー側の実装ですがこんな感じです。かなり省略しましたが動くと思います。ロケーションの設定が上手く行かない場合は、$translate->getLocale(); を使って手順を踏めばいけると思います。

// 翻訳ソースの作成
// アダプタarray
$ja = array(
‘title’ => ‘仕事|イラストレーション’,
‘contents’ => ‘仕事’,
);
$en = array(
‘title’ => ‘Works|Illustration’,
‘contents’ => ‘Works’,
);

//Zend_Translateオブジェクト生成(翻訳アダプタの生成)
$translate = new Zend_Translate(‘array’, $ja, ‘ja’);
$translate->addTranslation($en, ‘en’);
$translate->addTranslation($en, ‘en-us’);
$translate->addTranslation($en, ‘ko’);

// 翻訳された値の取得と表示
$translate->setLocale(“auto”);

3.View
最後は表示部。これは簡単。

echo $translate->_(‘title’);
echo $translate->_(‘contents’);

うまく実装できれば以下のようになります。まずは通常。
capcha0

ブラウザで言語設定を 英語(en) に変更。
capcha1

リロードすると英語になります。(肝心なメニューが日本語なのがアレですが・・・)
capcha2

Zend_Translate を使えば容易に多言語化させる事ができます。Zend はもちろんCakePHP、Codeigniter でライブラリとして使えるのでWEBサービスを作る時は是非多言語対応で作ると良いと思います。日本語だけだと正直弱い。ガラパゴスっていわれる所以では・・・。
この辺の事を書くと長くなりそうなので今日はこの辺で(すでに長い!)

投稿日:

CakePHP勉強会@福岡

CakePHP勉強会@福岡に行ってきました。メモレベルなので誤字脱字は気にしない。

『CakePHPでPostgreSQLを使おう』清末氏
・一般的にはmysqlを使用した開発
・今回はpostgresqlでのcakeのセットアップのお話

発表する時はトラブっても良いようにhtdocs毎リネームしとけば良いのか
XAMMP、MAMPにポスグレ入っていれば良いのになと思った

『cakeを焼い(bake)てみよう!』藤田氏
・cake/console
・cakeでアプリ作る際コマンドラインで全て設定できる
・MVCを順に作っていく
・簡単なアプリはまずbakeで焼く

実際焼いているの見たの初めてで、率直な感想はすごく感動した。
こんなんでアプリのスケルトンができちゃうんですねー。

 『CakePHP+PostgreSQLでの失敗談と解決策?』安元氏
・複数テーブルを検索(参照) 
・3つ以上のテーブルを使うと結構厳しい
・4つとなると不便
・view table 使うと便利
・使いたくないとき->IN使おう

ですよね、分かりますと言った内容。
我流さんより質問。これcodeigniterだとできるのかな?
個人的にも興味ある内容なのであとで調べてみる。

 『今こそプラグイン』 yandod
・1.2.1脆弱性の告知(気を付けろ!)
・comporment controllerに対する共通化
・behavior modelに対する共通化
・helper viewに対する共通化
・debug_kitの紹介
・api_generator
・PHP界隈ではまだ浸透が遅れている。git使おう!

さすが話が上手かったー。
debug_kit これは超便利ですね。

「CakePHP Console Application 拡張Tips」 k1LoW
・CakePHP他言語化機能の話
・Console Applicationは回線の都合上demoできず

「pgpool-IIとSlony-IでCakePHP」 shin1x1

「CakePHPをもっと便利に」発表者名 ichikawa
・Outo_Slq_Explain チューニングですこしでも楽する

「TDDひとりでできるもん」 rytich
・少人数のなかでいかに低コストにTDDを行うか
・cakephp.vimの話

投稿日:

PHP in Fukuoka 勉強会で話しました

PIFの勉強会で喋ってきました。内容は Zend_Service on CodeIgniter です。
何気に Zend_Service で色々楽しそうな事ができるなーと思って、メタ検索サイト作ってみました。特に目新しくないのですが、書いたコード数はかなり少なくできたと思います。
約300行です。phpDocument を除けば実コードは250行位。・・そもそも少なくないのかな?


でき上がったサンプルはココ
今回のサンプルコードはいつも通りcodecheck.in
にコミットしています。(明日にでも最新にします)

今回はピザとビールを飲みながらやりまして、先に debility さんが、スピーカーだった訳もあり、僕の出番の時は、軽く酔ってまして、自然と面白く喋らせて頂きました 笑

日本CodeIgniterユーザ会では「第2回 デザイナーのためのプログラミング入門」など行われています。CodeIgniter は本当に入り易いので、特にデザイナーには良いのではないかなーと思います。

サンプルコードをアップデートしました。
http://trac.codecheck.in/share/browser/lang/php/zend_service