IronRuby and Rails
覚書程度の記事。。。
普通 Ruby on Rails と言って 「and」 ではなく 「on」 なんだが。。。
IronRuby とは、.NET(「ドットネット」、Micorosoftのあれね)環境で動く Ruby 実装。
それで Rails を動かせる、とのこと。
メモリも沢山喰うらしいが。。。
個人的に深く思うことはさほど無いのだが、コメント欄も盛り上がっているようだし、興味ある方おられましたらご参考までに。
広ブロっち♪ d(^-^)
覚書程度の記事。。。
普通 Ruby on Rails と言って 「and」 ではなく 「on」 なんだが。。。
IronRuby とは、.NET(「ドットネット」、Micorosoftのあれね)環境で動く Ruby 実装。
それで Rails を動かせる、とのこと。
メモリも沢山喰うらしいが。。。
個人的に深く思うことはさほど無いのだが、コメント欄も盛り上がっているようだし、興味ある方おられましたらご参考までに。
下記サイトを見つけた。Hello World! の実装例を 366 のコンピュータ言語、ついでに 58 の人間が喋る言語(日本語、英語、等)を紹介している。これだけの数の言語を調べたのも凄い。
ちなみに Hello World! とは、プログラミングの世界でよく使われる表現。どう言う意味かと言うと、言葉自体は読んだまま、「こんにちは、世界!」を意味するのだが、新しいプロジェクトを開始する時とか、今まで使ったことのない言語を学びだす時等、新たな環境で最初に実行するプログラムで、文字通り「Hello World!」と画面に出力させるだけ。
つまり、最初からあれやれこれや作業に取り掛かるのではなく、まずは1行だけ、「こんにちは、世界!」と出力し、環境が最低限整っていることを確認する作業のことを言う。
別に「Hello World!」と言う文字列でなくてもいいんだが、合言葉みたいになっていて、環境構築が上手くいかない時等、「Hello World! すら出来ないんだよ」と言うと、この世界の人間なら何を意味しているのか大体わかってくれるはず。
で、上記サイトで自分が知っている言語とか、Scala とか Lisp 等、以前から興味のある言語でも調べてみる。なるほど、こう書くのか。。。
言語によってコーディングの量が全然違ったりするのが興味深い。
コンピュータ言語って沢山あるなぁ。。。
話が大幅に変わるが、下記、米 Google 本社の内部の写真。
http://u-i.cc/metropolismag.com/insideGoogleOffice
図書館か!?(←タカトシ風)
最近やっとRSSリーダーを使いこなせるようになった。
RSSリーダーとは、と言う説明は今時古過ぎるとも言えるかもしれない。
あえて説明すると、RSSリーダーとは気になるブログの数々を「リーダー」(指揮者と言う意味ではなく、「読むヤツ」と言う意味)に登録すればいちいち各ブログサイトを見にいかなくても更新情報がすぐわかると言うソフトウェア。サーバーサイドのも端末で動くのもある。
何年も前からRSSリーダーはあると思うが、私の場合、2年ぐらい前に巷で話題になった時に一度は使おうとはしたモノの、たまたまその時選んだRSSリーダーのサイトが閉鎖されたから、と言うのも言い訳に過ぎず、どちらにしても殆ど使わず仕舞いだった。
ここ最近になってやっとではあるが毎日RSSリーダーを使っている。何がきっかけ、と言うのも特にないのだが、しいて言えばTwitterかなぁ。。。Twitterで追っかけている人のブログの最新情報が欲しくて頻繁に使い出したのがきっかけで他のブログも少しずつ登録するようになってき、まともなRSSリーダーになってきた今日この頃。
おかげさまで「痛いニュース」の最新情報もすぐわかるようになってきた(笑)。後、最近はやたらと海外のサイトにも訪問するようになった。まぁ、当たり前だが日本と言う島国は何だかんだ地球規模で見れば小さなモノで日本以外でも日々色んなことが起きている。特にソフトウェア関連はあちら様の方が先進しているとも言える。
ちなみに私が今使っているのはライブドア・リーダー。何故、と言う深い理由はない。VIMのショートカットとか使えるらしいが私は普通にマウスをクリックしながら使っているだけ(笑)。
今更RSSリーダーとは、遅いと言えば遅いんだが、これが私のタイミングなんだろう。先週末、急いでいた電車に乗り遅れた時に残念がる自分に言い聞かせたことにも共通するかもしれない。
「次の電車でもちゃんと着く」
焦りすぎて我を失いかけている私を見かけたら是非そう言ってほしい(笑)。
先週末何をやったかと言うと結構前にRuby言語で作ったスパムメールブロッカーをサーバー移転して認証プログラムと合体させた。
Rubyをつつくのがひさしぶりだったのと、自分で作ったプログラムそのものがひさしぶりだったのと、移転前と移転後の文字コード、クラス構造、ディレクトリ構造を変更したりしてちょっと手間取ってしまった。
何よりも一番手間取ったのがセッション管理。
セッションとは、あるユーザがサイトに一度ログインしたらサイト内どこに遷移してもログインしたことをサーバー側で管理してくれる機能。セッションが無ければショッピングカートもmixiも楽天もアマゾンも機能しない、実に重要。
そのセッションがRubyではかなり手間だ。どれぐらい手間かと言うと頭がどよよんとするぐらい手間。Rubyは大好きだけど初心者がブラウザでHello Worldしてログイン、画面遷移、ログアウト出来るようになるには結構な時間がかかると思う。
日曜は終日客先に行く予定だったが午前中で終わったため、午後どっぷりRuby出来ると思い、ウキウキしていたが、結局セッション管理で数時間かかってしまい、解決出来ぬまま夜は結婚一周年祝いに食事に行く。
話逸れるが、行った店(廿日市郊外)は写真の店、民家を改良して作ったらしく、料理も非常に美味しく、雰囲気も良く、大変和風エレガントなひと時だった。
家に帰ってからももうちょっとRubyをつついていたらやっとセッション管理が上手くいった。
往生しながらも何とかセッション管理出来るようになったので達成感を満喫する。ホントはスパムメールを駆除するロジックをもっと改良したかったが、まぁ、まぁ、まぁ、良しとしよう。
機能がもっと充実してきたら無料で公開する予定。
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
茶化した人にもサンクス。彼から得たヒントが答えに繋がった。
技術系はネットで公開・非公開は自由だが何らかの形で記録を取るべし。
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のマイネットワークから表示、操作確認。
パチパチパチ
待望の(って待つ暇無いけど;)symfonyの本が出ました。
ちなみにsymfonyとはPHP言語で作られたWEBアプリケーションフレームワークのことで、PHPの親方フレームワークであるMojaviを継承し、Ruby on Railsの影響を大きく受けていて、一言で言うと「強力」。日本語版のsymfony単独本は初めてです。
10月2日に販売されていることを弊社そろおが発見、早速amazonで購入しました。
経費で買えばいいと言ったのに個人的に欲しいとのこと。会社でも1冊欲しいので購入、隣の会社も1冊購入。
amazonの本紹介ページで在庫3冊と書いてあったのが「お、symfonyの本が出てる」とそらおが言って5分後には在庫ゼロになってしまいました。決して買い占めるつもりではありませんでした。お許しください。
隣の会社の社長に「そう言えばsymfuldazeって更新しよるん?」
私JavaJavaな日々ですから~~(頼むから「斬り!」は言わないでって?@古すぎ)
10月1日から弊社は第3期を迎えました。おっと、そう言えば今日は法人化2周年記念です(笑)。
こっちを記事の本題にするべきでしたが、まぁ、既にここまで書いてしまったので良しとしましょう。
今期も一所懸命がんばりたいと思います。いつもお世話になっている皆様、いつもいつもありがとうございます。これからも引き続き宜しくお願い致します。
m(_ _)m
プロジェクトマネジメントとはリスクマネジメントである。
信号待ちの時とかに今読んでいるプロジェクトマネジメントについての本に書いてあった一言。
何とまぁタイムリーな。。。理由は割愛する(笑;)。
近頃の私の興味はプロジェクトマネジメント。
プロジェクトマネジメントはソフトウェア開発等のプロジェクト工程を管理するスキルであり、個人的な見解だが、その内容は会社経営にも応用できるスキルだと認識している。
冒頭の言葉を会社経営に照らし合わせれば「会社経営とはリスクマネジメントである」。まぁ、全くナンセンスな言葉のつなぎ合わせと言うわけでもない。
そもそもプロジェクトマネジメントとはソフトウェア開発に限られていることではなく、元々は大規模建設プロジェクトで使われていたノウハウが基盤にあるらしい。会社経営もある意味1つのプロジェクトと捉えることも出来なくもない。
現在進行中の仕事ではプロジェクトマネジメントとまでは言えないにしても、私としては初めて自分がプログラミングの実装をせず管理に徹する立場で進められている。
もちろんプログラミング実装が好きでこの業界に入ったんだが、管理する側の仕事も内容は全く異なれど、これはこれでやりがいを感じている。
不慣れなところが多い中、業界の先輩にもあたるチームメンバ達に大きく大きく助けられている。メンバを編成していく時の流れの中で自然とリスクマネジメント体制が整った、とでも言えるのだろうか、そう、自分自身に対するリスクマネジメント(笑;)。
自虐発言はさておき、冒頭の言葉をもう少し早く知っていれば。。。たらればたらればを想像する自分がいる。
次に生かそう。先輩の方々に心より感謝する。
大体私はブログ記事をそのままmixi日記に貼り付けているんだが、今回はブログのみの投稿。
ちなみに知り合いは殆どがマイミクの今日この頃、mixiのみの投稿はあるんだがブログのみは初めてかな?不思議なもんだ。。。
さて、昨年ぐらいだったか、何が引き金だったのかは不明だが、突然トラックバックスパムが「テレビの力」の受付電話のようにジャンジャン来てしまった。管理人画面をリロードしたら新しいトラバが登録されている、と言う始末。
あまりにもひどい事態に色々と仕掛けをかけたおかげでピタリと止まったのだが、1ヶ月程前にそれは対策をしていた、と言うわけではなくトラバを送信不能にしてしまっていたことが発覚。orz
なので、たちまちは仕掛けを外していたのだが、また最近ポツポツ着始めた。
こりゃまた何かせにゃ、と思って今朝またソースをいじる。
と言うわけで前回とは違う方法で対策することにした。ついでにテスト送信することに。
どの記事にしようかな。。。まぁ、同じスパム繋がり、と言うことで下記記事にしよう。
上手くいくことを願うなりぃ~~。
話変わるが先日いつもお世話になっている取引先のエリートさま2人にブログの更新頻度が低いことを指摘される。
はい、もう少し上げれるよう励みたいと思いますっ;
なるべくっ!w
盆休みは可能な限り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ライクにした造語。
続きを読む "訂正:symfonyでURLを.htaccessでRewriteする方法" »
※「広島ブログ」の増永さんからの紹介で新しい機能の追加です(ちと苦労した;)
dp_SyntaxHighlighter-コード表示に役立つJavaScript - WEBデザイン BLOG
私の週末は十数行程度のコード修正と数え切れない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';
を修正するだけ、・・・だと思う。
納品はまだ全然先なのでその点の検証はしばらく保留することに。
何時間さまよったことやら、答えは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
覚書です。
RubyでのModuleとClassの違い。
一つ ModuleはClassをincludeすることができない
(他のModuleはincludeできる)
一つ Moduleには継承がない
一つ Moduleはインスタンスを生成できない
ですか。
他は?
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(^_^;)~~
テンプレートの方で修正すれば上手く行くと思うのでこれはまた後日対応することに。
ちなみにコメントはテスト送信確認済みですっ!
.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の挙動がかなりおかしく、相当苦戦した。。。
今日やったことの覚書?まぁ、また今度にでも(笑)。昨日と引き続き、喜びの声を表明したかったなり。
弊社新事務所4日目にしてやっとauカードの私以外の全員がインターネットに繋がりました(汗;)。
ホームランバッターがバット無し状態で何日も練習するようなモンです。A(^_^;)~~
続きを読む "Subversion の svnserve をサーバー起動時に起動させる方法" »
往生したために覚書することにしたんだが、実際はリアルタイムには記録せず、思い出しながらなのであまり参考にならないかもしれない。その場合は申し訳ない。
続きを読む "覚書:PHP5導入、PHP4との共存、Ethna、PEAR、Smarty" »
なんとまぁ。。。(笑)
真面目な話、とある刑務所で刑務作業にプログラミング言語のRubyを使ったソフトウェア開発を就労支援の一環として実施されるそうです。
民間刑務所で Ruby によるソフトウェア開発者を養成、アウトソーシング業務を
Rubyだから牢獄ではなく、牢獄に入ってまでもRubyと言うわけでは決してありませんが、まぁ、こんな話もあるんですな。。。
面白いことにどうやら担当の方は事前にはてなの人力検索でアンケート調査をされてからRubyを選ばれたそうです。
しかしRubyできるのって再就職するのにホントに役立つのかなぁ、ちょっと疑問。。。
============================================
面接官:「どんな言語の経験ありますか?」
志願者:「Lispです。」
面接官:「・・・・」
============================================
面接官:「どんな言語の経験ありますか?」
志願者:「Haskellです。」
面接官:「・・・・」
============================================
面接官:「どんな言語の経験ありますか?」
志願者:「Pythonです。」
面接官:「・・・・」
============================================
面接官:「どんな言語の経験ありますか?」
志願者:「Rubyです。」
面接官:「・・・・」
============================================
面接官:「どんな言語の経験ありますか?」
志願者:「アセンブラです。」
面接官:「・・・・」
============================================
面接官:「どんな言語の経験ありますか?」
志願者:「.NETです。」
面接官:「君、採用決定です。」
============================================
とまぁ、思ったわけで。。。まぁ、地方のソフトウェア業界の今時の一般論に過ぎませんが。。。
それにしても人力検索もさすがでして色んな言語が出てきます。「なでしこ」と言う日本語のプログラミング言語もあるみたいで
if~else文の場合
もし、天気が「晴れ」ならば
「洗濯物を干す」と表示。
違えば
「洗濯物は干さない」と表示。
となるそうな。。。
A(^o^;)~~
やっぱ、Rubyっすかね!?(笑)
この度納品させていただいたサイトです。瀬戸内海淡路島の線香を作る職人の方々のサイトで、題して「あわじ島の香司 日本を代表する線香の生産地、淡路島淡路市一宮地区の線香職人達の紹介」。
AJAXをサイト制作に初めて導入しました。正直な感想として、ブラウザ別の不具合の可能性とかがまだあって現時点ではまだちょっと消極的かもしれません。
簡単なところから取り組んでみればいいんですが、どうしても欲が出てきてしまって。。。
それでもやっと弊社のスタイルが確立しつつあります。AJAXもそうですが、裏の環境としても弊社初めてのRuby on Railsでのシステムとなります。この調子でこれからもがんばります♪
「あわじ島の香司 日本を代表する線香の生産地、淡路島淡路市一宮地区の線香職人達の紹介