※おかげさまで、素敵な方に来て頂けることになったのでエンジニアの募集は終了しました。(デザイナーは激しく募集中!)

※給料の割に敷居が高いと指摘を頂いたので加筆修正しました。

僕が働いているアクトインディ株式会社でエンジニアとデザイナーの募集を始めました。(デザイナーに関してはデザイナーのmachidaさんが募集要項を書いてくれると思いますが、僕のところへ連絡をいただいても大丈夫です。)

大学院を半年休学してアルバイトとして参加してくれたShu MASUDAさんの残された時間が後1ヶ月ちょっとなので、早めに募集を開始しました。

社員かアルバイトの方を募集しています。

(LinuxやWeb開発を覚えたい学生の方も歓迎です)

  • 仕事でやること
    • 自社Webサービス開発
      • Ruby/Rails(ほとんどコレ)
      • PHP
      • CommonLisp
      • Scheme(サーバー管理系で一部)
    • サーバー構築
      • CentOS
      • Debian
    • 社内システム管理
  • 募集条件
    • 3ヶ月以上、週3日以上働ける方(アルバイト)
    • 五反田のオフィスに通勤可能な方
    • PC持込推奨(さもないと会社に転がってるThinkPad X32に・・・)
    • OS自由
    • 服装自由
    • ガチ鬱可(治療を受けていれば可)
    • 18歳以上の方
    • 何らかのプログラミング経験(実務/趣味問わず)
  • 待遇
    • 時給1000円以上(社員の方は別。最長6ヶ月間の試用期間があります)
  • 応募方法
    • komagata@gmail.com か recruit@actindi.net までメールをください。また下記の物も送っていただけるとありがたいです。
      • 履歴書(プレーンテキストでかまいません)
      • ブログのURL
      • 何らかの動くプログラムのソースコード(Webアプリ、バッチファイル、ユーティリティープログラムなんでもOK)

ブログやプログラムのソースコードを見せていただきたいというのは、「仕事外で趣味のコードを書くのが楽しい」という人なのかどうかを知りたいということだけです。凄いコードをかかなくちゃ駄目とかそういうのではないです。

「RailsやLinuxを覚えたい」という方や「Railsを駆逐してSmalltalkの素晴らしさを啓蒙したい」という野望をお持ちの方などをお待ちしています。

本当のところ、「プログラミングが好き」であり「僕たちと楽しく仕事ができる」方であれば大歓迎です。

今回からRailsなどのWebアプリやLinuxの経験が無い方向けに1ヶ月の研修期間を用意しています。

おすすめポイント

  • Rails等のWebアプリ開発、Linuxが覚えられる。
  • 自由な社風(ゆるふわガチ鬱ワープアニート)
  • 手段としての技術的な細部は自由。 (僕がかかわるまでRubyのコードは1行も社内に存在しませんでした。単に僕にとって手っ取り早い技術だったのでRailsのアプリケーションが増えました。1人が1サイトを担当することも多く、目的が達成されるのであればどんな技術を使ってもかまいません。他のメンバーがそれに合わせて勉強します。実際にシステム部のブログはCommonLispで構築されている。)
  • Redmine、Subversionなどのオープンソースを積極的に活用しているため、汎用性の高い開発手法が習得できる。
  • マネタイズやSEO、Web集客、営業など、Webサービスが勉強ができる。 (営業は営業の人がいますが)
  • PHPをやりたくない人でもOK。 (社内でPHPはオッサン=俺の仕事ということになっています。個人的にPHP書ける人大歓迎・・・。)
  • 週1リリースしているRailsプロジェクトが4個あるので嫌って程Rails書けます・・・。
  • 会社の隣に立正大学があるので何食わぬ顔して安い学食が食える。

エンジニア/デザイナーブログも作ったのでこちらから電波も発信して行きたいと思います。

なお、例によって決まった方には“横山光輝 史記 第七巻”と“勇午 洞爺湖サミット編 第二巻”をお贈りします。

参照:アクトインディ技術部隊報告書

こちら(PHP プログラマが @ を使うべきでない 5 つの理由 – 肉とご飯と甘いもの @ sotarok)発、下記の記事、

PHPでエラー抑制演算子@を正当に使ってるなぁと思ったケース – それ図解で。・・・tohokuaikiのチラシの裏

includeって、正当に読み込んだかどうかの結果を返してるんですよね。

これ知らなかったです。

既にこちら(includeの返り値について – 受難系 – sideport)で触れられていますが、includeは先のファイルのreturnを引数に受けるので要注意ですね。

参照:includeは返り値を取る – p0t

マニュアルにもちゃんと書いてあります。

PHP: include – Manual

例5 include()とreturn()文

return.php
<?php
$var = 'PHP';
return $var;
?>

noreturn.php

<?php
$var = 'PHP';
?>

testreturns.php

<?php
$foo = include 'return.php';
echo $foo; // 'PHP'と出力されます
$bar = include 'noreturn.php';
echo $bar; // 1が出力されます
?>

perlのpackageも慣習的に最終行にreturnすら略して、

1;

と書きますよね。(最近は違うのかな?)

それを裏切って、以前の僕のエントリーの様にincludeのreturnの積極的な利用と@のエラー抑制とphpの複雑な型比較を組み合わせると、混沌とカオスが両方そなわり最強に見える。暗黒が持つと逆に頭がおかしくなって死ぬ。

そういうところを乗りこなそうと四苦八苦するのも好きです。

デフォルトでapache2のvariantが入るらしい。

sudo port install php4 +mysql5 +postgresql8
--->  Activating php4 @4.4.9_6+apache2+macosx+mysql5+postgresql8
To customize php, copy
/opt/local/etc/php4/php.ini-dist (if this is a development server) or
/opt/local/etc/php4/php.ini-recommended (if this is a production server) to
/opt/local/etc/php4/php.ini and then make changes.

If this is your first install, you need to activate PHP in your web server.

To enable PHP in Apache, run
  cd /opt/local/apache2/modules
  /opt/local/apache2/bin/apxs -a -e -n "php4" libphp4.so
* copy  /opt/local/etc/php4/pear.conf.sample to  /opt/local/etc/php4/pear.conf
--->  Cleaning php4

sudo cp /opt/local/etc/php4/php.ini{-recommended,}
cd /opt/local/apache2/modules
/opt/local/apache2/bin/apxs -a -e -n "php4" mod_php4.so
sudo vi /opt/local/apache2/conf/httpd.conf
LoadModule php4_module modules/mod_php4.so

懇切丁寧に教えてくれるので助かる。助かるが、これもやっといてくれないかな・・・。

オペラシティでお昼を食べたついでにINTER COMMUNICATION CENTERのオープンスペースの展示を見に行って来ました。

ICC ONLINE | オープン・スペース 2009

メディア・アートの展示をやってます。何も知らずに行ったんですが、すごく面白かった。無料だし開催期間も長いのでおすすめです。

僕は情報系の専門学校にいってそのまま20歳からひたすら、

「コンピューターを使っていかに儲けるか」

系の泥臭い仕事ばかり(嫌いじゃないですが)やってきたので、アートやらサイエンスやらは無縁。

僕のはじめての仕事は、

「本を倉庫から出荷する時にその一覧をOracleから引っ張って来てVBでプリンタで出力する。」

というものでした。(確か“自動倉庫システム”というプロジェクト名)

メディア・アートとは要するにコンピューターを使って素敵な画像や動画や音楽やテキストでやる芸術の事みたいです。

何か、コンピューターを使って、「儲ける」とかじゃなくて、単に「素敵な音楽」とか「楽しいグラフィック」というだけで存在しているコンピューターっぽいものはとても癒される。

全くそういう意識になかった、セルオートマトンのライフゲームやワイアーワールド、フラクタルなどはアルゴリズムがどうとか抜きで動きがわいいなあなどとボーッと見れました。

一番大きな展示が《My%20Desktop OSX10.4》

巨大なプロジェクターに投影されたMacのデスクトップでひたすら操作されてて、エラー音や警告音、スピーチの声とかが狂った調子で繰り返されてる。

無響室も不思議な体験だった。音が無くなるというより普段意識してない音の音圧が凄くて圧迫してきて、うるさく感じる。

コンピューターの作る変な絵とか、音とか変なハードとか、仕事抜きで好きなんだなぁと癒されて会社に戻りました。

戻って待っていたのはさいかのバグ修正。

「PHPのin_array関数は便利だな〜」

とかすっごいリアルで現実に引き戻されました。バグは直ってよかったです・・・。

自己紹介が面倒なのでプロフィールをエントリーにまとめておきます。

プロフィール

名前
駒形 真幸
写真
性別
男性
現住所
東京都渋谷区
出身地
東京都八王子市
生年月日
1978年5月13日
趣味
読書, ゲーム, インターネット, ダイエット
職業
プログラマ
似ている芸能人
  1. 昔の山のフドウ
  2. 大黒シズオ
  3. 牛股権左衛門
生まれ変わったらなりたいもの
  1. 佐藤浩市
  2. M.ナイト.シャマラン
  3. 姜尚中(ハスキーボイス)
好きな本・マンガ
MASTERキートン、団地ともお、血だるま剣法
好きな言葉
焼け石に水
連絡先
    Email:
    komagata@gmail.com
    mixi:
    179970
    Windows live Messenger
    komagata@hotmail.co.jp
    Skype
    komagata1111
    Twitter
    komagata

ドキュメント

p0t
ガチ鬱プログラマー日記
大東亜戦争従軍記
戦争時の祖父の手記をブログ化
ちゃりんちゃりん生活
Webのマネタイズについて
Mr.T
渋谷区本町六号通り商店街にあるMr.Tの謎を追う
アクトインディ技術部隊報告書「komatata」
アクトインディ株式会社在籍時の技術ブログ
ウノウラボ: 検索結果:「komagata」
ウノウ株式会社在籍時の技術ブログ

動画

GemCasts
便利なRubyGems紹介
生放送しながらWebサービスを作る
Help me, hackers!というWebサービスをゆるいおっさん二人が作ります。

サービス

Plnet
フィードアグリゲーションサービス
Mojavi Japan
PHPのWebアプリケーションフレームワークMojaviの各種リソースと日本語コミュニティ

ツール

win32-aques_talk
AquesTalk rubyバインディング
saimaa
継続的インテグレーションを助けるコマンド
Talkedbun
日本語テキストトゥースピーチサーバー
Darjeeling
ちょっと見易いRedmineのテーマ
Cloister
Rails簡単ブログ
DNSBL::Client
荒らし対策DNSブラックリストクライアント
ssl_requirement_paranoid
IEでSSL移動時警告が出ないようにするRailsプラグイン
Widget.Dialog
標準のalert, confirm, promptを置き換えるようなシンプルなJavaScriptライブラリ
AwesomeFramework
PHP4, PHP5(多分6も・・・)対応のとてつもなくシンプルなWebアプリケーションフレームワーク
Raw Template Engine
PHP4, PHP5対応のとてつもなくシンプルなテンプレートエンジン

メディア

イベント・カンファレンス

所属

駒形真幸
個人事業主
FJORD, LLC(合同会社フィヨルド)
代表社員
スペイシーズ
外部取締役

出社

フィヨルド
平日
スペイシーズ
月1

仕事でやってること

  • コード書く
  • サーバー作る
  • BTS書く(Redmine)
  • リリースする(デプロイ)
  • ミーティングする

仕事で作ってるもの

この前書いたこの問題。

長いので以下ステージング環境認証問題と言うことにします。

(ステージング環境についてはこちら

元エントリーにもコメントをいただき、大変参考になりました。僕の場合、3日考えて良い解決法が見つからない時は大抵1ヶ月かかっても見つからないのでブログに書いたり人に助けを求めたりします。(サーセン・・・)

今回もそれを実行したところid:dandasoにナイスアイデアを頂きました。(Thanks!)

皆様方におかれましては、

「そんなに悩むところか?」

感が否めないかもしれませんが、僕と同じく悩んだ方がいて、参考になったりすれば幸いです。

ステージング環境認証問題対応方法

一言で言うと、「クッキーの値で認証する」ということです。

fooというアプリがあるとして、まず、下記のようなBASIC認証をがかかった認証用クッキーを設定するプログラムを見えないとこに置きます。(PHPが便利でした)

<?php
$user = 'foo';
$pass = 'bar';
$realm = 'foo';

if ($_SERVER['PHP_AUTH_USER'] === $user and $_SERVER['PHP_AUTH_PW'] === $pass):
    setcookie($realm, sha1($pass));
    header('Location: /');
else:
    header("WWW-Authenticate: Basic realm=\"{$realm}\"");
    header("HTTP/1.0 401 Unauthorized");
?>
<html>
  <head>
    <title>Authentication</title>
  </head>
  <body>
    <h1>Authentication</h1>
    <p>正しいユーザー名とパスワードを入力してください。</p>
  </body>
</html>
<?php endif ?>

本来、問題になっているアプリ「foo」に上記のアプリのAliasを張ります。(上記をfooのリポジトリに入れたくないので)

<VirtualHost *:80>
  ServerName foo
  Alias /auth /path_to/auth.php
...(snip)...
</VirtualHost>

fooのアプリのApplicationControllerでlogin_required(本来のBASIC認証)より先にcookieを見て認証します。(認証失敗したらさっきのPHPにリダイレクトする)

require 'digest/sha1'

class ApplicationController < ActionController::Base

...(snip)...

  before_filter :cookie_auth_required if $STAGING

  def cookie_auth_required
    redirect_to "/auth" unless cookies["foo"] == Digest::SHA1.hexdigest("bar")
  end
end

ステージング環境でのみこの認証を追加したいので、capの設定ファイルにステージング環境用フラグを追加するタスクを書きます。(フラグの書き方、もっとキモくない方法しりたいです・・・)

config/deploy/staging.rb:

namespace :deploy do
  desc 'Added staging flag in production.rb'
  task :before_restart do
    run "echo '$STAGING = true' >> #{current_path}/config/environments/production.rb" 
  end
end

これで http://foo/auth というURLと foo / bar というID/PASSをお客さんに教えることでステージング環境を認証有りで確認してもらうことができました。

お客さんの手間と本来のアプリのリポジトリの影響を最小限にしたいがためにこんな形になりました。

ブラウザを閉じるまでの間、cookie内にパスワード(のハッシュ)があるので大事な認証に使うのは辞めた方がいいと思います。利便性とのトレードオフで今回の自分ような、見られても致命的な影響が無いものならいいかなと思いました。

Apacheの設定とかでcookieの値を見てはじければ、fooから認証コードが取れてもっとよさげです。そういうモジュールとか無いのかな?引き続き模索してみます。

参照

参考になるCakePHPのアプリのソースを探してCakeforgeのCheesecake Photoblogというのをインストールしてみました。

CakeForge: Cheesecake Photoblog: Project Info

A simple to setup and use Photoblog using cake which has theming, tags, comments and archive browsing using several options. more information on http://cheesecake-photoblog.org

CakeforgeでCakePHP自身の次にダウンロードされてるそうです。最新安定板である1.5.1 Stableを使ってみました。

Quick Start

1. Untar and upload the entire contents of the tarball in a folder of your liking on your website 2. Go to http://yourdomain.com/path_to_your_cheesecake_install/install/ and follow the instructions on screen

インストール方法はREADMEの通り簡単ですが、下記を直さないと画面真っ白です。

diff app/views/layouts/default.thtml{,.org}
15c15
< <script type='text/javascript'></script>
---
> <script type='text/javascript'>

cheeseCake </del> alpaka mini

普通のフォトブログですが、テーマをサポートしてたり、CakePHPをベースにオープンソースソフトを作る参考になりそうです。

The Gift of 1.2 final (Articles) | The Bakery, Everything CakePHP

Today, the history of the CakePHP grows stronger. December 25, 2008 will be remembered as one of the most important points in this history. After exactly 2 yrs from the first development release, we can happily say we have the most stable and powerful web framework available. Please enjoy our big present to you, CakePHP 1.2 stable [1]. For this release, we have removed the test files from the build, and created a tag in SVN.

クリスマスにCakePHPの1.2がリリースされた。

1.1で作り始めたばかりの俺にとっては悪夢。

年末持ち帰ったCakeアプ... <del> 赤さん </del> はてなセリフ

まさに外道。

Creole – Trac

The Creole Project is Dead

Note: Creole is no longer being maintained.

ちょwww、PHP5用のDB抽象レイヤーのCreoleが終了!?(via id:shimooka

Rails3の決断が早いっつー話があったけどOSS(特にLL系)は引き際も早いですなぁー。

ユーザーにとっては引き際早過ぎて嬉しいところ無しw

ぷろぺる(Propel)とかどーなんの?

自分で作ったAPI(Rails)用のライブラリ(PEAR)+それを使ったサイト(CakePHP)を作ることになりました。

(とにかく最も幅広い環境でWordpress並みに簡単に動作することが目標です。CakePHP初めて使いますが、一番メジャーなんじゃないかとの判断。) (Wordpress並み=PHP4,5対応、ターミナル必要無し)

PHP4, 5両方対応でXMLをパースするには何がいいのかさっぱり分からなかったんでTwitterで聞いてみました。

Twitter / Masaki Komagata: PHP4, 5対応のXMLパーサって何があるのか誰か …

komagata PHP4, 5対応のXMLパーサって何があるのか誰かおしえて!

すると色々な人から回答が。

PEAR XML_Serializerの中にあるXML_UnserializerとCakePHPの中にあるXmlモジュール?が良いらしい!

CakePHPのやつの方が便利そうだけどライブラリ単体でも使える形にしたかったのでXML_Unserializerを使ってみました。

<?php
require_once 'XML/Unserializer.php';

$us = new XML_Unserializer(array(
    'parseAttributes' => true,
    'encoding'        => 'utf-8',
    'forceEnum'       => array('item')
));
$us->unserialize('foo.xml', true);
$struct = $us->getUnserializedData();
print_r($struct);

forceEnumってオプションは気付かないと罠ですなー。

何故か俺のTwitterのログから消えてるんですが、教えてくださった皆さんあざーす!(shin1×1, nekoya, p4life

こんなヘボイ投げかけに答えてくれるPHPの民はやさしいス。