メイン

2008年05月31日

IronRuby and Rails

覚書程度の記事。。。

IronRuby and Rails

普通 Ruby on Rails と言って 「and」 ではなく 「on」 なんだが。。。

IronRuby とは、.NET(「ドットネット」、Micorosoftのあれね)環境で動く Ruby 実装。

それで Rails を動かせる、とのこと。

メモリも沢山喰うらしいが。。。

個人的に深く思うことはさほど無いのだが、コメント欄も盛り上がっているようだし、興味ある方おられましたらご参考までに。



広ブロっち♪ d(^-^)

2008年05月05日

Hello World!

下記サイトを見つけた。Hello World! の実装例を 366 のコンピュータ言語、ついでに 58 の人間が喋る言語(日本語、英語、等)を紹介している。これだけの数の言語を調べたのも凄い。

The Hello World Collection

ちなみに Hello World! とは、プログラミングの世界でよく使われる表現。どう言う意味かと言うと、言葉自体は読んだまま、「こんにちは、世界!」を意味するのだが、新しいプロジェクトを開始する時とか、今まで使ったことのない言語を学びだす時等、新たな環境で最初に実行するプログラムで、文字通り「Hello World!」と画面に出力させるだけ。

つまり、最初からあれやれこれや作業に取り掛かるのではなく、まずは1行だけ、「こんにちは、世界!」と出力し、環境が最低限整っていることを確認する作業のことを言う。

別に「Hello World!」と言う文字列でなくてもいいんだが、合言葉みたいになっていて、環境構築が上手くいかない時等、「Hello World! すら出来ないんだよ」と言うと、この世界の人間なら何を意味しているのか大体わかってくれるはず。

で、上記サイトで自分が知っている言語とか、Scala とか Lisp 等、以前から興味のある言語でも調べてみる。なるほど、こう書くのか。。。

言語によってコーディングの量が全然違ったりするのが興味深い。

コンピュータ言語って沢山あるなぁ。。。

話が大幅に変わるが、下記、米 Google 本社の内部の写真。

http://u-i.cc/metropolismag.com/insideGoogleOffice

図書館か!?(←タカトシ風)



広ブロっち♪ d(^-^)

2007年12月07日

RSSリーダー

最近やっとRSSリーダーを使いこなせるようになった。

RSSリーダーとは、と言う説明は今時古過ぎるとも言えるかもしれない。

あえて説明すると、RSSリーダーとは気になるブログの数々を「リーダー」(指揮者と言う意味ではなく、「読むヤツ」と言う意味)に登録すればいちいち各ブログサイトを見にいかなくても更新情報がすぐわかると言うソフトウェア。サーバーサイドのも端末で動くのもある。

何年も前からRSSリーダーはあると思うが、私の場合、2年ぐらい前に巷で話題になった時に一度は使おうとはしたモノの、たまたまその時選んだRSSリーダーのサイトが閉鎖されたから、と言うのも言い訳に過ぎず、どちらにしても殆ど使わず仕舞いだった。

ここ最近になってやっとではあるが毎日RSSリーダーを使っている。何がきっかけ、と言うのも特にないのだが、しいて言えばTwitterかなぁ。。。Twitterで追っかけている人のブログの最新情報が欲しくて頻繁に使い出したのがきっかけで他のブログも少しずつ登録するようになってき、まともなRSSリーダーになってきた今日この頃。

余事の余談:Twitter

おかげさまで「痛いニュース」の最新情報もすぐわかるようになってきた(笑)。後、最近はやたらと海外のサイトにも訪問するようになった。まぁ、当たり前だが日本と言う島国は何だかんだ地球規模で見れば小さなモノで日本以外でも日々色んなことが起きている。特にソフトウェア関連はあちら様の方が先進しているとも言える。

ちなみに私が今使っているのはライブドア・リーダー。何故、と言う深い理由はない。VIMのショートカットとか使えるらしいが私は普通にマウスをクリックしながら使っているだけ(笑)。

今更RSSリーダーとは、遅いと言えば遅いんだが、これが私のタイミングなんだろう。先週末、急いでいた電車に乗り遅れた時に残念がる自分に言い聞かせたことにも共通するかもしれない。

「次の電車でもちゃんと着く」

焦りすぎて我を失いかけている私を見かけたら是非そう言ってほしい(笑)。



広ブロっち♪ d(^-^)

2007年11月12日

週末何やったかと言うと

先週末何をやったかと言うと結構前にRuby言語で作ったスパムメールブロッカーをサーバー移転して認証プログラムと合体させた。

Rubyをつつくのがひさしぶりだったのと、自分で作ったプログラムそのものがひさしぶりだったのと、移転前と移転後の文字コード、クラス構造、ディレクトリ構造を変更したりしてちょっと手間取ってしまった。

何よりも一番手間取ったのがセッション管理。

セッションとは、あるユーザがサイトに一度ログインしたらサイト内どこに遷移してもログインしたことをサーバー側で管理してくれる機能。セッションが無ければショッピングカートもmixiも楽天もアマゾンも機能しない、実に重要。

そのセッションがRubyではかなり手間だ。どれぐらい手間かと言うと頭がどよよんとするぐらい手間。Rubyは大好きだけど初心者がブラウザでHello Worldしてログイン、画面遷移、ログアウト出来るようになるには結構な時間がかかると思う。

日曜は終日客先に行く予定だったが午前中で終わったため、午後どっぷりRuby出来ると思い、ウキウキしていたが、結局セッション管理で数時間かかってしまい、解決出来ぬまま夜は結婚一周年祝いに食事に行く。

話逸れるが、行った店(廿日市郊外)は写真の店、民家を改良して作ったらしく、料理も非常に美味しく、雰囲気も良く、大変和風エレガントなひと時だった。

家に帰ってからももうちょっとRubyをつついていたらやっとセッション管理が上手くいった。

往生しながらも何とかセッション管理出来るようになったので達成感を満喫する。ホントはスパムメールを駆除するロジックをもっと改良したかったが、まぁ、まぁ、まぁ、良しとしよう。

機能がもっと充実してきたら無料で公開する予定。



広ブロっち♪ d(^-^)

2007年10月26日

覚書:CentOS5にて、iptablesを有効にした状態でyumを使う方法

CentOS5(Linuxの一種)でiptables(ファイヤーウォル)を有効にしているとyum(私は「ヤム」と読むがパートナー会社の方は「ユム」と読んでいた、パッケージ一括管理ソフト、Windowsには無いかもしれない)が使えない。

誰も遭遇しない問題なのか、ありえないように思うがGoogle先生に尋ねても

1.iptablesを無効にしてyumしましょう
  (毎回!?有効にし直すのを忘れるべ!)
2.海外のサイトにて、質問者を茶化してスレ終了
3.DNS等の設定間違い

ぐらいしかない。1.で妥協しないといけないのか、でもカッコ内にあるようにどうも納得いかない。

色々試してみたところどうやらyumを利用する際にリモートから戻ってくるパケットが毎回異なるもよう。断言はしかねるが、まず、INCOMINGのTCPパケットに対して全てのポートを開くと上手く行くが、どのポート番号かがどうやっても特定できない(情報も見当たらない)。それと、ログでも確認出来たのだが下記ログのSPTが毎回80なのに対し、DPTの数値が毎回異なる。SPTとDPTの意味は定かではないが、かなり怪しい・・・。

kernel: IN=eth0 OUT= MAC=**:**:**:**:**:**:**:**:**:**:**:**:**:** SRC=72.21.40.11 DST=192.168.**.** LEN=** TOS=**** PREC=**** TTL=** ID=** DF PROTO=TCP SPT=80 DPT=2807 WINDOW=**** RES=**** ACK SYN URGP=0

で、結局2.の海外のサイトの茶化した人のコメントをヒントに更に探っていって見つけた答えでやっと上手くいった。必要なのは下記1行。

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

ようは自分が出したリクエストに対して戻ってきたパケットは受け付けるようにする設定。この1行には苦労した。。。まるで0対0、延長12回表にやっと入った1点のように。

ちなみに下記が答えが記述されていたサイト。

How can I block every PING / ICMP traffic? - JaguarPC Web Hosting Forums

茶化した人にもサンクス。彼から得たヒントが答えに繋がった。



広ブロっち♪ d(^-^)

2007年10月23日

覚書:CentOS5 で Samba 設定

技術系はネットで公開・非公開は自由だが何らかの形で記録を取るべし。

Sambaを設定するのは3年ぶり2度目だが、初めて往生した時の記録が無いためふたたび往生することに。

SambaとはUnix系OSの中身をWindowsエクスプローラで閲覧操作可能にするソフトウェア、社内LAN環境でよく使われる。

と言うわけで下記覚書。設定ファイル系は全て最初にバックアップを取ることと、自己責任で行うこと。

次回から5分以内で設定できることを自分自身に期待する。

sudo yum -y install samba
#Sambaをインストール(良い子になってやっとsudoを使うことにした、以下、sudoは省略)

vi /etc/samba/smb.conf
#設定ファイルを編集
#--------------------------------------
[global] #共通設定
security = share #共有するように
dos charset = CP932 #Windows側の文字コード
unix charset = UTF-8 #Unix側の文字コード
display charset = UTF-8 # 〃
workgroup = ワークグループ名 #Windows端末と同じワークグループ名
hosts allow = 192.168.○. 127. #許可するIPアドレスの上部(127は不要に思うが・・・)

[Windows側に表示される名前]
path = /home/共有するディレクトリ名
writable = yes #書き込み可能
guest ok = yes #誰でもOK(ネットワーク内なら)
guest only = yes #ゲストのみとする
#--------------------------------------

mkdir /home/共有するディレクトリ名
#共有するディレクトリを作成

chmod -R 777 /home/共有するディレクトリ名
chown nobody:nobody -R /home/共有するディレクトリ名
#全てのユーザに読み書き実行権を与える(後者は不要かも)

chkconfig smb on
#サーバ起動時にSambaサービスが立ち上がるように設定

/etc/rc.d/init.d/smb start
#サービスを起動
SMB サービスを起動中: [ OK ]
NMB サービスを起動中: [ OK ]

#________________________________
#既存のSambaがIPアドレスではなく、マシン名で
#名前解決されているのでこちらもがんばる。
#--------------------------------

vi /etc/sysconfig/network
#ネットワークの設定変更(マシン名のところのみ)
#--------------------------------------
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=マシン名.localdomain
#--------------------------------------

vi /etc/sysconfig/network-scripts/ifcfg-eth0
#イーサネットカードの設定?変更
#--------------------------------------
DEVICE=eth0
BOOTPROTO=none
HWADDR=マックアドレス(触らない)
ONBOOT=yes
DHCP_HOSTNAME=マシン名.localdomain
IPADDR=192.168.○.○
NETMASK=255.255.255.0
GATEWAY=192.168.○.○
#--------------------------------------

/etc/rc.d/init.d/network restart
#ネットワーク再起動

#________________________________
#ここまではまぁ順調。この後でひっかかる。
#答えから言いましょう、IPTablesとSELinux。
#--------------------------------

#--------------------------------
#IPTablesから
#--------------------------------
#最初にまずポリシーを決める
#INPUTは全て許可
#OUTPUTは全て許可
iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

#ルールをひとまずクリア
iptables -F

#pingと自端末からの入力を許可
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

#名前解決に必要
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT

#WebとSSHに必要なポートを許可
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#Sambaに必要なポートを許可
iptables -A INPUT -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -p udp --dport 137 -j ACCEPT
iptables -A INPUT -p udp --dport 138 -j ACCEPT

#残りは破棄
iptables -P INPUT DROP

#ルールを保存
/etc/init.d/iptables save
ファイアウォールのルールを /etc/sysconfig/iptables に保存中[ OK ]

#IPTablesを再起動
service iptables restart
ファイアウォールルールを適用中: [ OK ]
チェインポリシーを ACCEPT に設定中filter [ OK ]
iptables モジュールを取り外し中 [ OK ]
iptables ファイアウォールルールを適用中: [ OK ]
iptables モジュールを読み込み中ip_conntrack_netbios_ns [ OK ]

#--------------------------------
#SELinuxの設定
#社内サーバの場合は不要と思いつつも勉強がてら
#--------------------------------
cat /etc/sysconfig/selinux
#--------------------------------
SELINUX=enforcing
#enforcingをdisabledにしてサーバ再起動でも良い
#今回はenforcingのままでそのままファイルを閉じる

setsebool -P samba_enable_home_dirs true
#設定は上記コマンドのみ。手強いヤツのわりには1行だけ

shutdown -r now
#サーバ再起動

Windowsのマイネットワークから表示、操作確認。

パチパチパチ



広ブロっち♪ d(^-^)

2007年10月04日

symfonyの本がやっと出た

待望の(って待つ暇無いけど;)symfonyの本が出ました。

ちなみにsymfonyとはPHP言語で作られたWEBアプリケーションフレームワークのことで、PHPの親方フレームワークであるMojaviを継承し、Ruby on Railsの影響を大きく受けていて、一言で言うと「強力」。日本語版のsymfony単独本は初めてです。

Symfony × PHP

10月2日に販売されていることを弊社そろおが発見、早速amazonで購入しました。

経費で買えばいいと言ったのに個人的に欲しいとのこと。会社でも1冊欲しいので購入、隣の会社も1冊購入。

amazonの本紹介ページで在庫3冊と書いてあったのが「お、symfonyの本が出てる」とそらおが言って5分後には在庫ゼロになってしまいました。決して買い占めるつもりではありませんでした。お許しください。

隣の会社の社長に「そう言えばsymfuldazeって更新しよるん?」

私JavaJavaな日々ですから~~(頼むから「斬り!」は言わないでって?@古すぎ)

10月1日から弊社は第3期を迎えました。おっと、そう言えば今日は法人化2周年記念です(笑)。

こっちを記事の本題にするべきでしたが、まぁ、既にここまで書いてしまったので良しとしましょう。

今期も一所懸命がんばりたいと思います。いつもお世話になっている皆様、いつもいつもありがとうございます。これからも引き続き宜しくお願い致します。

m(_ _)m



広ブロっち♪ d(^-^)

2007年09月30日

リスクマネジメント

プロジェクトマネジメントとはリスクマネジメントである。

信号待ちの時とかに今読んでいるプロジェクトマネジメントについての本に書いてあった一言。

何とまぁタイムリーな。。。理由は割愛する(笑;)。

近頃の私の興味はプロジェクトマネジメント。

プロジェクトマネジメントはソフトウェア開発等のプロジェクト工程を管理するスキルであり、個人的な見解だが、その内容は会社経営にも応用できるスキルだと認識している。

冒頭の言葉を会社経営に照らし合わせれば「会社経営とはリスクマネジメントである」。まぁ、全くナンセンスな言葉のつなぎ合わせと言うわけでもない。

そもそもプロジェクトマネジメントとはソフトウェア開発に限られていることではなく、元々は大規模建設プロジェクトで使われていたノウハウが基盤にあるらしい。会社経営もある意味1つのプロジェクトと捉えることも出来なくもない。

現在進行中の仕事ではプロジェクトマネジメントとまでは言えないにしても、私としては初めて自分がプログラミングの実装をせず管理に徹する立場で進められている。

もちろんプログラミング実装が好きでこの業界に入ったんだが、管理する側の仕事も内容は全く異なれど、これはこれでやりがいを感じている。

不慣れなところが多い中、業界の先輩にもあたるチームメンバ達に大きく大きく助けられている。メンバを編成していく時の流れの中で自然とリスクマネジメント体制が整った、とでも言えるのだろうか、そう、自分自身に対するリスクマネジメント(笑;)。

自虐発言はさておき、冒頭の言葉をもう少し早く知っていれば。。。たらればたらればを想像する自分がいる。

次に生かそう。先輩の方々に心より感謝する。



広ブロっち♪ d(^-^)

2007年08月26日

トラバ・テスト

大体私はブログ記事をそのままmixi日記に貼り付けているんだが、今回はブログのみの投稿。

ちなみに知り合いは殆どがマイミクの今日この頃、mixiのみの投稿はあるんだがブログのみは初めてかな?不思議なもんだ。。。

さて、昨年ぐらいだったか、何が引き金だったのかは不明だが、突然トラックバックスパムが「テレビの力」の受付電話のようにジャンジャン来てしまった。管理人画面をリロードしたら新しいトラバが登録されている、と言う始末。

あまりにもひどい事態に色々と仕掛けをかけたおかげでピタリと止まったのだが、1ヶ月程前にそれは対策をしていた、と言うわけではなくトラバを送信不能にしてしまっていたことが発覚。orz

なので、たちまちは仕掛けを外していたのだが、また最近ポツポツ着始めた。

こりゃまた何かせにゃ、と思って今朝またソースをいじる。

と言うわけで前回とは違う方法で対策することにした。ついでにテスト送信することに。

どの記事にしようかな。。。まぁ、同じスパム繋がり、と言うことで下記記事にしよう。

MTスパム対策

上手くいくことを願うなりぃ~~。

話変わるが先日いつもお世話になっている取引先のエリートさま2人にブログの更新頻度が低いことを指摘される。

はい、もう少し上げれるよう励みたいと思いますっ;

なるべくっ!w



広ブロっち♪ d(^-^)

2007年08月16日

ノスタルジックな日々~symfonyでsymfuldaze

盆休みは可能な限りPHPのフレームワーク、symfonyをいじってました。

楽しかった(笑)。もっと出来てたらもっと嬉しいんですが、まぁ、個々の実力の限界なのでしょうか、出来る限り出来たことを喜ぶべきなのかもしれません。

素人ながらも下記サイトを立ち上げました。

symfonyでsymfuldaze
http://www.nextren-development.com/symfuldaze/

デザインのデの字もなく、コンテンツもまだまだ少なくて恐縮ですが、少しずつ発展出来ればと思っています。

尚、本来なら自社ドメイン、で立ち上げたかったのですが、あいにくこちらはまだPHP4なのでたちまちは開発支援サーバーにしました。PHP5に上げ次第移行をしようと思います。

星の数ほどある、と言われているPHPのフレームワーク。全部経験したわけでは決してありませんが、Ruby on Railsと出会った時に似た衝撃をsymfonyに感じました。今後のPHP案件は可能な限りsymfonyで開発していきたいと願います。(もちろんsymfonyでなければいけないわけではありませんし、何より、肝心なことですが、PHP5限定です)。

symfonyとの出会いに導いてくれた方々に深く感謝します。

※ symfuldaze = Simple days をsymfonyライクにした造語。



広ブロっち♪ d(^-^)

2007年08月12日

訂正:symfonyでURLを.htaccessでRewriteする方法

大人気の「symfonyでURLを.htaccessでRewriteする方法」シリーズと言ったら失笑ってやつですか、まぁ訂正です。

続きを読む "訂正:symfonyでURLを.htaccessでRewriteする方法" »



広ブロっち♪ d(^-^)

2007年08月04日

簡易版:symfonyでURLを.htaccessでRewriteする方法

エントリー「symfonyでURLを.htaccessでRewriteする方法」をもう少し簡潔に書いてくれ、と言う激しい要望に答えて簡易版です(笑)。

※「広島ブログ」の増永さんからの紹介で新しい機能の追加です(ちと苦労した;)

dp_SyntaxHighlighter-コード表示に役立つJavaScript - WEBデザイン BLOG


symfonyでURLを.htaccessでRewriteする方法

2段階に分けます。
・http://symfony.hoge/projectname/web/ で表示させる。
・http://symfony.hoge/projectname/ で表示させる。

・http://symfony.hoge/projectname/web/ で表示させる。
1.askeetの手順を使わない、使っていたら元に戻してapacheを再起動
2.PEAR\data\symfony\web\sfの中身を全部www配下任意のフォルダにコピペ
    (.htaccessだと公開ディレクトリ以外の参照はアクセスエラーになるため)
    ここではwww直下のsfディレクトリとします。
3.symfony/projectname/web/.htaccess を修正。
    RewriteRuleの部分を環境に合わせて調整。

    を #RewriteBase のすぐ下あたりに追加。
    これでsymfonyが提供するお洒落な404が表示されます。

ここで第1段階終了。続いて第2段階。

・http://symfony.hoge/projectname/ で表示させる。
4.symfony.hoge/projectname/直下に.htaccess を作成。
    下記のようにする。RewriteBaseの行は各環境に合わせる。

5.projectname/apps/appname/lib/
    に
    myFrontWebController.class.php
    と言うクラスを生成。
    PEAR\symfony\controller\sfWebController.class.php
    のgenUrl関数をオーバーライドするため
    アプリごとに行わなければいけないのが課題。

6.projectname/apps/appname/config/factories.yml を修正

7.キャッシュをクリアして完了。

以上。


広ブロっち♪ d(^-^)

2007年07月29日

symfonyでURLを.htaccessでRewriteする方法

私の週末は十数行程度のコード修正と数え切れないsymfonyソースコードのCtrl+Z(元に戻す)に集約される。。。

symfonyのチュートリアルでは開発環境がどうであれ

http://askeet/

のようにプロジェクト名をURLにしてアクセスするように進められているが、まず、他のシステムを動かすためにわざわざhttpd.confとhostを書き換えてApacheを再起動するのは面倒だし、前回の文字化け投稿と同様、納品先のことも考慮したらhttpd.confでの設定が出来ないことも考慮する必要が出てくる。

と言うわけでhttpd.confを使わずに

http://localhost/symfony/projectname/

で表示させる方法。

まず、

http://localhost/symfony/projectname/web/

これはすぐに出来る。つーか、彼らの http://askeet/ にする設定を外せばいいだけ。

只、そうするとsymfonyが提供するお洒落なJava Scriptタブやエラー画面が表示されなくなる。どうでもいい魚の骨。

httpd.confでの設定ではPEARディレクトリへの参照パスは許されているが、.htaccess では権限エラーになってしまう。Windowsでそこの設定を変更するのを調べるのは面倒なので、htdocs配下に

PEAR\data\symfony\web\sf

の中身全部をコピー(突っ込み歓迎)。ちなみに私は htdocs/symfony/ 配下にコピー。

symfony/projectname/web/.htaccess を修正。

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^sf/(.*)$ /symfony/sf/$1 [L]

を #RewriteBase のすぐ下あたりに追加。

へい、mod_rewriteです。簡単に説明すると

RewriteCond %{REQUEST_FILENAME} !-d

はリクエストファイルの文字列がディレクトリでは無い場合

RewriteCond %{REQUEST_FILENAME} !-f

はリクエストファイルの文字列がファイルでは無い場合

つまり、そこに存在しない場合(と私は解釈@突っ込み歓迎)

その存在しないリクエストファイルの文字列が「sf/」で始まり、任意の1文字が0回以上ある集合体で終わる場合(カッコで囲むので$1と言う変数で認識してくれる)

/symfony/sf/

の後ろに$1を付け足し

そいつらの在りかをそこで探しておくれ

で、[L]はこのリクエストファイルの文字列でのrewriteはここで終了、と言う意味。

以後のmod_rewriteの説明は割愛。

魚の骨が取れることを確認。

次に

http://localhost/symfony/projectname/web/

ではなく、

http://localhost/symfony/projectname/

で表示できるようにがんばることにする。そこからまた苦労が始まる。。。

もちろん、webの中身を一個上のフォルダに移動すればそれだけで完了だ。しかしそこには生きる上での喜びがない(私の場合)。

と言うわけで、まずは

symfony/projectname/

.htaccess

を作成。つーか、私はsymfonyさんのをコピーした。理由:共通性を図るため。理由:手間を省くため。

で、

Options +FollowSymLinks +ExecCGI


  RewriteEngine On
  #RewriteBase /

以外は全部消す。下のErrorDocumentは消しても残してもどちらでも良い。

そこで凄いことに気付く。

http://localhost/symfony/projectname/

としたら

ディレクトリ構造丸見えじゃん!

いかんざき!

つーわけで

Options +FollowSymLinks +ExecCGI

の下に

Options -Indexes

を追加。見んなよ、と言う意味。

RewriteBaseのコメントを外し

RewriteBase /symfony/projectname/web/

とする。書き換える時はこれを頭につけておくれ、と言う意味。

その下に

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)\.php/(.*)$ $1.php/$2 [QSA,L]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php/$1 [QSA,L]

と追加。4行目はファイル名を指定していない時( 例:http://hogehoge.nk/ )に必要。

これで

http://localhost/symfony/projectname/

で表示されるようになった。

のに・・・。

困ったことに。。。

リンク先が

http://localhost/symfony/projectname/web/

になっている。。。

普通にHTMLで組んだら

http://localhost/symfony/projectname/

なのに

link_to関数を使うとどうしても'web'がついてしまう。

そして私は更なるsymfonyソースコードの森の奥へ、長い放浪の旅に出ることになる。。。

解決案。

symfony/projectname/apps/appname/lib/

myFrontWebController.class.php

と言うクラスを生成。

PEAR\symfony\controller\sfWebController.class.php

genUrl関数をこちらのクラスでオーバーライドする(sfFrontWebController.class.phpはsfWebController.class.phpを継承している)。

最初に

$url = parent::genUrl($parameters, $absolute);

として親の関数を実行してから追加処理を加える。下記ソース。牡蠣ソース。

class myFrontWebController extends sfFrontWebController
{
  public function genUrl($parameters = array(), $absolute = false)
  {
    $url = parent::genUrl($parameters, $absolute);
    
    //切り取りたい文字列
    $cut_str = 'web/';

    if((preg_match('/\.php/', $url) ||
        preg_match('/index\.php/', $_SERVER['SCRIPT_NAME'])) &&
        (!preg_match('/^http/', $url) ||
         preg_match('/'.$_SERVER['SERVER_NAME'].'/', $url)))

      $url = substr($url, 0, strpos($url, $cut_str)).
             substr($url, strpos($url, $cut_str) + strlen($cut_str));

    return $url;
  }
}

if文の理由はCSSやJavaScriptファイルを'web'配下を参照のままで良いため。

で、

symfony/projectname/apps/appname/config/factories.yml

を修正。

all:
  controller:
    class: myFrontWebController

13行目から3行分コメントアウトし、「sf」のところを「my」に変更。

以上。

コンソールで

symfony cc

を忘れないように。

表示確認。画面遷移確認。データ修正処理確認。

パチパチパチ~~。

今のところアプリ単位やらなければならないようなのでそこはちと手間。

後、ホントは

symfony/projectname/apps/appname/lib/myWebRequest.class.php

にし

class myWebRequest extends sfWebRequest
{
  public function getScriptName()
  {
    $pathArray = $this->getPathInfoArray();
    
    $scriptName = $pathArray['SCRIPT_NAME'];
    
    //切り取りたい文字列
    $cut_str = 'web/';
    
    if(preg_match('/\.php/', $scriptName))
      
      $scriptName = substr($scriptName, 0, strpos($scriptName, $cut_str)).
                    substr($scriptName, strpos($scriptName, $cut_str) + strlen($cut_str));
    
    return $scriptName;
  }
}

とした方がカッコ良かったんだが、何故だ!CSSやJSの連中もこの影響を受ける。な~ぜ~~

後、当初は

symfony/projectname/apps/appname/config/config.php

の終わりに

sfConfig::set('sf_web_dir_name', '');
sfConfig::set('sf_web_dir', sfConfig::get('sf_root_dir'));
sfConfig::set('sf_upload_dir', sfConfig::get('sf_root_dir').DIRECTORY_SEPARATOR.sfConfig::get('sf_data_dir_name'));

で済むと思っていたのだが、どうやらこいつら定数は・・、ゴミ??変更しても全く影響ないので消すことにしよう。

さて、ここまで読んだ人は果たしているのだろうか。ここまで読んでくれた方にとってもいいネタを提供しよう。

debug_backtrace()

と言うPHP関数がある。

出来ればもっと昔から知っておきたかった。

この関数を使って

print_r(debug_backtrace());

とすればそのポイントでの関数の呼び出し元を全部吐き出してくれる。.NETでのスーパー機能をPHPでも再現できることを知った私はもはや喜び組。

ちなみに似たような関数、Rubyにもあるのかな??

最後に、PEARにsymfonyが入っていないレンタルサーバーで動かすには

開発環境のPEAR内のsymfonyグッズを

symfony/projectname/lib

内に突っ込んで

symfony/projectname/config/config.php

// symfony directories
$sf_symfony_lib_dir  = '/hoge/php/pear/symfony';
$sf_symfony_data_dir = '/hoge/php/pear/data/symfony';

を修正するだけ、・・・だと思う。

納品はまだ全然先なのでその点の検証はしばらく保留することに。



広ブロっち♪ d(^-^)

2007年07月28日

symfonyを使って文字コードUTF-8でDB操作をする方法

何時間さまよったことやら、答えは1行でした。。。(笑;)

symfonyと言うPHP言語で作られたRuby on Railsライクなフレームワークをつついているのだが、文字コードをUTF-8にしてデータベースにデータを挿入したり更新するのに何時間も手こずってしまいました。

「symfony 文字コード UTF-8 MySQL」みたいな組み合わせで色々ググってもなかなか解決案が出てこない。なんで???

mixi名マジヘンに「MySQLの文字コードの設定を全部UTF-8にしたらいいですよ」と言われたのだが、この方法は採用しかねる。

理由は同じ環境内に異なる文字コードのシステムがあるため、symfonyだけのためにDBサーバー全てのコードを変えるわけにはいかないから。ちなみにcharacter_set_server以外を全部UTF-8にはしてみたがダメだった。

my.cnfを編集する、と言う方法もあるがこれも却下。理由は弊社の場合、納品先がレンタルサーバーの可能性が高いため、my.cnfは編集できないのを前提に対策を考える必要があるため。

色々往生した結果、面白いことに本家サイトにて、ある開発者がある日本人のサイトを参考にした解決案、と言う記事があり、
http://www.symfony-project.com/snippets/snippet/37
自分もその日本人のサイトは既に知っていたのだが、コード内容がちょっと古いようだったので他を探していたところで、その記事のコメントにsymfonyを開発したFabienさんご本人があっさり一言、「それ、databases.ymlに1行追加で出来るぜ」だって(笑)。

ならもっとググられるようなところに記述してくれよー。てか、このコメントにその1行書けよー(笑)。結局更なるググりんこ(笑)。

とまぁたった1行のために苦労しましたが、下記が答えです。あ、Propelを使うことが前提ですよー。

プロジェクト名/config/databases.yml

にて、下記のように「encoding: utf8」と言う記述を追加。

all:
  propel:
    class:      sfPropelDatabase
    param:
      phptype:  mysql
      host:     localhost
      database: プロジェクト名
      username: ユーザー名
      password: パスワード
      encoding: utf8



広ブロっち♪ d(^-^)

2007年07月20日

RubyでのModuleとClassの違い

覚書です。

RubyでのModuleとClassの違い。

一つ ModuleはClassをincludeすることができない
      (他のModuleはincludeできる)
一つ Moduleには継承がない
一つ Moduleはインスタンスを生成できない

ですか。

他は?



広ブロっち♪ d(^-^)

2007年07月15日

MTスパム対策

MTとはMovable Type(ムーバブルタイプ)の略。サーバー上でインストールするブログソフトで、それ系では恐らく世界一のシェアではないかと思う。米Six Apart社の製品。略してエム・ティー。

世界一のシェア、いや違った、調べてみたら英語圏ではWordPressに負けて2位らしい。。。まぁ、どちらにせよメジャーな製品だけあってスパムコメントやスパムトラックバックも相当なモノ。

そのスパム対策に泣かされる管理人も少なくないように思う。現に私もMTユーザー、管理人画面をリロードする度に新しいスパムトラバ(トラックバック)が登録されている、と言う悲惨な事態も過去に経験している。

そこで先日見出したスパムコメントの対策法をネットで紹介するのは例え日本語圏内だとしても油断は出来ないのだが、まぁ、これが破られたらまた次の手段を考えるさ。

せめて日本語で書こう、ちょっとわかりにくくなるが。日本人を信じる、と言うより、何と言うか、まぁ、気持ちの問題(笑)。

1.サブミット時に外部ジャヴァ・スクリプト・ファイルでポスト先を変更させるように
    テンプレートを修正(テンプレートの修正方法はここでは割愛)

    formタグのonSubmitに「自作メッソド名(this)」と記述し、
    ↓↓↓こんな感じ↓↓↓
    <form action略 onSubmit=”j略s略:自作メッソド名(this);デフォメソッド後略
    ↑↑↑こんな感じ↑↑↑
    JSファイル(サーバー上任意の場所に配置)の方で
    function 自作メソッド名(element){
     element.action = '新しいポスト先'
    }
    とする

2.MTインストール先ディレクトリ直下にある
    mt-comments.cgi
    を新しいポスト先に指定した名前に変更する

3.サイト内全ての再構築、以上

ここ数日これでさっぱり収まったので、絶対ではないかもしれないがご参考までに。と言うのもこれで上手くいくと思われる根拠があって、何故かと言うとスパムロボット(と呼べばいいのか)は一度GETリクエストでサイトに訪問し、ソースからformの送信先を読み込んで再度POSTリクエストでスパムコメントを送ってくる。

だからonSubmit後のポスト先はロボットにはわからないだろう、と言うのが私の根拠。

いかがでしょう??

当然手動スパム(@内職!?)みたいなのには対応できていないが、これが破られたらもはや残る道はPerlハックのみ(笑)。

ちなみにトラックバックスパムはCSSのdisplay:noneとか使えば何とかなると思うが
/lib/MT/ConfigMgr.pm

[’TrackbackScript’, { Default => ’mt-tb.cgi’ }],
にCSSを記述では上手くいかないのが昨日発覚、ここ1年程だったか、スパムは来てはいなかったが逆に善意のトラバも貼れてなかったもよう・・・。A(^_^;)~~
テンプレートの方で修正すれば上手く行くと思うのでこれはまた後日対応することに。

ちなみにコメントはテスト送信確認済みですっ!



広ブロっち♪ d(^-^)

2007年06月23日

PHPで画像を描こう、じゃなくて加工

月末納期の仕事に画像をサーバーにアップロード、と言う機能がある。

続きを読む "PHPで画像を描こう、じゃなくて加工" »



広ブロっち♪ d(^-^)

2007年06月15日

どっと・えっち・てぃー・あくせす

.htaccessと言うファイルがある。「どっと・えっち・てぃー・あくせす」と読む、多分。

ちなみにchmodを「ちょもど」と読んで個人的にかなり納得しているんだが同じようにchownを仕方なく「ちょおうん」と読みながら「そりゃねぇだろう」と内心思っている自分がいる(両方UNIX系のコマンド名)。何か、「ちょおうん」じゃないような気がする。。。

話がそれた。.htaccessと言うファイルはWEB系の仕事をされている人なら聞いたことがあったり、いじったりしたこともあるかと思うが、ようはホームページ等が置かれているWEBサーバーの設定をカスタマイズするファイル。一応これも隠しファイルになるんだが、レンタルサーバー等、WEBサーバー本体の設定をいじれない時や、このディレクトリだけこういう設定にしたい、と言う時にディレクトリ直下に置くファイル。

今日は月末納期の納品先レンタルサーバーにて、その.htaccessの設定で丸一日かかった。かなり悪戦苦闘、周りの風景がピカソの青の時代の絵のようだった。。。

丁度昨日作業にかなり遅れが生じているのをしんみりと自覚したばかりだったので、このタイミングでこれだけ往生したくは無かった。まぁ、逆に考えれば月末ギリギリでなくて良かったのかな。

がんばったおかげで収穫が2つ程。

1.mod_rewrite(もっど・りらいと)と言う機能がまぁ、ちょっとばかり上達した。
    URL自動書き換え機能で、実はこいつの制覇はRubyの次に、と言っても過言だ。
    マニーと呼ばれても仕方が無いかもしれないが、例えば

    http://www.hoge.com/hogehoge.rb?hensuA=3&hensuB=36&hensuC=2558

    と言うURLもmod_rewriteを上手く使えば

    http://www.hoge.com/hogehoge/3/36/2558

    と記述して表示できるようになる。何か良くねぇ?(笑)
    ちなみに検索エンジンに対してもこちらのような記述の方が好まれる。

2.SSHログインの出来ないレンタルサーバーだが、PHPスクリプトで
    SSLのディレクトリにシンボリックリンク(Windowsで言うショートカット)を
    作ることに成功。つまり、同じファイルをSSLと非SSLに2つあげなくても済むわけだ。
    ちなみにセキュリティ面でも問題無い(SSLに問題が無いと言える以上)。
    SSLでアクセスしてきた場合はサーバー内では非SSL領域のデータを
    参照しているがプロトコルはあくまでもSSL通信なのだ。

とまぁ、個人的にはかなり満足している収穫2つ程だが、この2つの組み合わせにかなり往生して延々と丸1日かけてしまった。SSLからのmod_rewriteの挙動がかなりおかしく、相当苦戦した。。。

今日やったことの覚書?まぁ、また今度にでも(笑)。昨日と引き続き、喜びの声を表明したかったなり。



広ブロっち♪ d(^-^)

2007年05月31日

Subversion の svnserve をサーバー起動時に起動させる方法

弊社新事務所4日目にしてやっとauカードの私以外の全員がインターネットに繋がりました(汗;)。
ホームランバッターがバット無し状態で何日も練習するようなモンです。A(^_^;)~~

続きを読む "Subversion の svnserve をサーバー起動時に起動させる方法" »



広ブロっち♪ d(^-^)

2007年05月13日

覚書:PHP5導入、PHP4との共存、Ethna、PEAR、Smarty

往生したために覚書することにしたんだが、実際はリアルタイムには記録せず、思い出しながらなのであまり参考にならないかもしれない。その場合は申し訳ない。

続きを読む "覚書:PHP5導入、PHP4との共存、Ethna、PEAR、Smarty" »



広ブロっち♪ d(^-^)

2007年05月02日

牢獄でRuby

なんとまぁ。。。(笑)

真面目な話、とある刑務所で刑務作業にプログラミング言語のRubyを使ったソフトウェア開発を就労支援の一環として実施されるそうです。

民間刑務所で Ruby によるソフトウェア開発者を養成、アウトソーシング業務を
Rubyだから牢獄ではなく、牢獄に入ってまでもRubyと言うわけでは決してありませんが、まぁ、こんな話もあるんですな。。。

面白いことにどうやら担当の方は事前にはてなの人力検索でアンケート調査をされてからRubyを選ばれたそうです。

プログラマーの方に質問です。

しかしRubyできるのって再就職するのにホントに役立つのかなぁ、ちょっと疑問。。。

============================================

面接官:「どんな言語の経験ありますか?」

志願者:「Lispです。」

面接官:「・・・・」

============================================

面接官:「どんな言語の経験ありますか?」

志願者:「Haskellです。」

面接官:「・・・・」

============================================

面接官:「どんな言語の経験ありますか?」

志願者:「Pythonです。」

面接官:「・・・・」

============================================

面接官:「どんな言語の経験ありますか?」

志願者:「Rubyです。」

面接官:「・・・・」

============================================

面接官:「どんな言語の経験ありますか?」

志願者:「アセンブラです。」

面接官:「・・・・」

============================================

面接官:「どんな言語の経験ありますか?」

志願者:「.NETです。」

面接官:「君、採用決定です。」

============================================

とまぁ、思ったわけで。。。まぁ、地方のソフトウェア業界の今時の一般論に過ぎませんが。。。

それにしても人力検索もさすがでして色んな言語が出てきます。「なでしこ」と言う日本語のプログラミング言語もあるみたいで

日本語プログラム言語「なでしこ」公式ページ

if~else文の場合

もし、天気が「晴れ」ならば
    「洗濯物を干す」と表示。
違えば
    「洗濯物は干さない」と表示。

となるそうな。。。

A(^o^;)~~

やっぱ、Rubyっすかね!?(笑)



広ブロっち♪ d(^-^)

2007年02月24日

急遽Ruby勉強会

本日、弊社事務所にて急遽Rubyの言うコンピュータ言語の勉強会を開催。

続きを読む "急遽Ruby勉強会" »



広ブロっち♪ d(^-^)

2007年01月12日

環境構築

仕事の実装に向けて環境構築を行っている。

続きを読む "環境構築" »



広ブロっち♪ d(^-^)

2007年01月06日

新年早々技術の話

とまぁ、自分の素人ぶりも暴露しつつ。。。(笑;)

続きを読む "新年早々技術の話" »



広ブロっち♪ d(^-^)

2006年12月05日

18歳未満はこちら

最近投稿が無い旨を指摘されたので掲載ギリギリネタを1つ(笑)。

続きを読む "18歳未満はこちら" »



広ブロっち♪ d(^-^)

2006年10月26日

聖なる再起動

本日スタッフのパソコンで不具合発生。

続きを読む "聖なる再起動" »



広ブロっち♪ d(^-^)

2006年09月16日

あわじ島の香司 日本を代表する線香の生産地、淡路島淡路市一宮地区の線香職人達の紹介

この度納品させていただいたサイトです。瀬戸内海淡路島の線香を作る職人の方々のサイトで、題して「あわじ島の香司 日本を代表する線香の生産地、淡路島淡路市一宮地区の線香職人達の紹介」。

AJAXをサイト制作に初めて導入しました。正直な感想として、ブラウザ別の不具合の可能性とかがまだあって現時点ではまだちょっと消極的かもしれません。

簡単なところから取り組んでみればいいんですが、どうしても欲が出てきてしまって。。。

それでもやっと弊社のスタイルが確立しつつあります。AJAXもそうですが、裏の環境としても弊社初めてのRuby on Railsでのシステムとなります。この調子でこれからもがんばります♪

あわじ島の香司 日本を代表する線香の生産地、淡路島淡路市一宮地区の線香職人達の紹介



広ブロっち♪ d(^-^)

2006年08月22日

CoLinux構築覚書2

明日から2泊3日の九州ツアーに備えてずっとそのままにしていたCoLinuxをいじることに。

続きを読む "CoLinux構築覚書2" »



広ブロっち♪ d(^-^)