goo blog サービス終了のお知らせ 

コトハノチカラ

ビジュアル的センスが0の左脳人間が、
どこまで言葉だけで自分を表現できるか、
やれるとこまでやってみるブログです。

SVNで古いリビジョンのファイルをコミットする。

2011-03-08 22:52:20 | ITなお話
今の現場ではSubversionをバリバリと使っている。

そんなわけで、自分もバリバリとSubversionを使えるのかというと、実はそんなことはない。

今までの現場では何故かシャレオツなバージョン管理ソフトを使うことはなく、自分でローカルにバックアップをとったりする形だった。

なので今は実際にSubversionを使いながら勉強をしているのだけど、今日、少々困った事態が発生し、それをなんとか自分で解決できた。

Subversionを日常的に使っている人からすると簡単なことでも、自分的にはかなりの大事件だったので、ちょいとブログに書いておきます。

まずちょっとしたトラブルがあって、SVN管理下のファイルを昔のリビジョンの物に戻し、それをコミットする必要が出てきてしまった。

とりあえずは
svn update -r 101 hoge.php
などとして前のバージョンの物を取得して
svn commit -m 'hoge' hoge.php
としたのだけど、ダメだと怒られる。

コミットしようとしているhoge.phpよりも、SVN上のhoge.phpのほうが新しいから、ダメだよんと言われてしまうのだ。

とりあえず、
cp hoge.php hoge.php.bk
として、
svn revert hoge.php
で、
rm hoge.php
mv hoge.php.bk hoge.php
とした後に
svn commit -m 'hoge' hoge.php
としるのだけど、それでもやっぱり同じエラーが・・・

で、色々考えた結果、要するに最新のリビジョンのものよりも新しくすればいいということに気付き、
svn update hoge.php
rm hoge.php
mv hoge.php.bk hoge.php
としたあとに
hoge.phpの中のコメントなどをちょろっと変更して、その後
svn commit -m 'hoge' hoge.php
としたところ、見事成功した。

本当はもっとエレガントなやり方がある気がするのだけど、とりあえず結果としては意図したことが出来たので、ま、ヨシとするのです。

もう少しでSVNと仲良くなれそうな気がしている、誕生日直前のただすけなのでした。

Gmailが便利すぎるお話

2011-03-02 14:16:39 | ITなお話
Googleのアカウントはかなり前に取得していたのだけど、主に使っていたのはYahooのフリーメールで、Gmailはほとんど使っていなかった。

だけども、ケータイをXperiaにしたのをきっかけにGmailについて色々調べてみたり設定をいじってみたりしたところ、あまりの便利っぷりに驚いた。

自分の場合、定期的に使うPCのメールアドレスが3つある。

個人用のGmailのアドレス。
所属会社のメールアドレス。
現場のメールアドレス。

しかも、それらのメールを読んだり書いたりするPCにいたっては、
自宅のデスクトップ
所属会社のデスクトップ
現場のデスクトップ
持ち歩いているネットブック
と4台ほどあり、もはやごっちゃごちゃの状態。

今まではどうにか、サーバからメールを削除するタイミングを1週間後とかにして対応していたのだけども、それでも全てのPCでメールを受信することは現実的に厳しい。

さらに、送信メールに至っては確認することがほぼ不可能な状態で、BCCに自分のメールアドレスを設定してどうにかこうにか使っていたという状況だった。

が、しかし、Gmailの設定を色々といじくることで、そんな悩みを完璧に解決することができた。

Gmailでは、Gmail以外のPOPサーバから、メールを自動で持ってきてくれる機能がある。

自分の場合、上記の所属会社のPOPサーバ、現場のPOPサーバの設定をしてやれば、後はメールクライアントなどは使わずに、全てをGmailで受信することができる。

こうしてやれば、PCが変わろうとメールを読むのはインターネット上のGmailのWebページになるので、何も困ることがない。

さらにメールの送信についても、Gmail経由で送信元のアドレスを指定して送ることができるので、送信履歴はGmailのWebページで確認すればOKということになる。

どう、便利でしょ?

後はケータイのメールの送受信もGmail経由でできればパーフェクトなんだけど、やっぱりそれは無理っすか?

PHPで独自フレームワークを作る!!

2010-02-02 10:27:03 | ITなお話
タイトルで大袈裟なことを書いておりますが、別にそれほどのことではないのです。

現在、PHP+Zendで色々と作ったりしているのですが、DB周りの設計が、けっこう面倒だったりするのです。

特に今は細かい仕事が多いので、進行が割とグダグダで、プログラムを書きながら設計を考えるなんてこともしばしば。

DBのテーブルにカラムが増えたり減ったりなんて、日常茶飯事なわけです。

で、そうなったときにできるだけプログラムの方は修正したくない。

さらに、DBとの接続も、できるだけ汎用的な設計にして、作業を楽にしたいという希望もある。

というわけで、今はDB周りのフレームワーク的なものを作ろうかと考えているのです。

流れとしては、
DBのテーブルを作成(修正)

自動的に設定ファイル(iniファイル)を作成

設定ファイルを元にデータ取得(更新)

現在のフェーズは脳内設計書がそろそろ出来上がるというレベル。

今度の土日にでも作ってみようかと思っているわけです。

ブログに公開したら、使ってくれる人いるかな?

Ubuntuと仲良くなり始める。

2009-11-12 18:25:26 | ITなお話
前のブログにも書いたとおり、現在、NetBookにUbuntuをインストールし、色々と悪戦苦闘している。当初は躓くことが多くて、

「ぶっちゃけ、Windowsでよくね?」

なんていう悪魔の囁きに負けそうになったこともあったけど、やっとこさ仲良くなれてきた気がする。

今は無線LANも問題なく繋がるし、イー・モバイルもばっちりOK。clipseも普通に動くし、ネットの閲覧はFirefoxと、仕事で使うにも何も不自由していない。

scpをどうするか悩んだけど、一度シェルを組んでしまえば、CUIでやるほうがかえって楽ちんだったりする。

昨日はかなりドッキドキしながら、Ubuntuを9.04から9.10にアップデートしたのだけど、今のところ問題なく動いている。

というわけで、このUbuntu、かなりお勧めです。

といっても、誰にとってもというわけでなく、ワタクシ的に考える「Ubuntu向き」の人は、以下のような方々。

・何事も形から入る
・人と違うモノが好き
・基本的にパソコンを触るのが好き
・ちょっとM

「それって、私のこと?」とか思った人は、是非Ubuntuにするべきです。

色々見た目をいじりまくって、今はこんな感じに。

どう?かっちょよくない?


デスクトップ


Eclipse


OpenOfficeのcalc

EeePc S101購入

2009-11-06 17:12:46 | ITなお話
ついにNet Bookを購入してしまった。

色々考えた末に選んだのは、EeePc S101。

こだわったのは、ハードディスクドライブではなくて、SSDということ。

あまりハード関係は詳しくないので、具体的にどう違うのかとかはわからないのだけど、ようするにSSDはハードディスクに比べて読み込み、書き込みが早く、衝撃に強い。

今回購入するのはNet Bookなわけで、持ち運ぶことが多いわけだから衝撃に強いのはもってこいだし、CPUなどのマシンパワーが低いので、読み込みが早いのは嬉しいところ。

難点としては、容量が極めて少なくて、僕が購入したモノで16ギガ。メインに使うPCで考えるのであればかなり心許ないけども、サブノートとして使うにしては申し分ない。

特に今は、家のPCに外部から接続できる状況だしね。


というわけで購入したのが、このEeePcS101。

しかも、そのまま使うのはつまらないってことで、思い切ってOSを入れ替える。

標準で付いてくるのがWindwosXPなのだけど、これをUbuntu9.04 netbook remixにする。

Ubuntuのインストール自体は簡単なのだけど、やっぱり公式にサポートしているモノではないので、何かをやるたびにトラブルが出たりして、けっこう面倒くさい。

だがしかし、これでも一応はプログラマー。

「えっ?モバイルノートですか?もちろん持ってますよ。今時Windowsなんて古いですから、OSはもちろんUbuntuですけど、何か?」

なんて言ってみたい。

なので、悪戦苦闘しながら、頑張っているのであります。

MySQLに音楽ファイルをインストールする

2009-10-21 11:10:10 | ITなお話
現在、いわゆるLAMP環境にてWebページの作成をしている。

そこで、音楽ファイルをMySQLにインストールする必要が出てきてしまった。

色々と面倒なこともあったので、ここで大公開しちゃいます。


まずはHTML側にて、以下のように記述。
<form enctype="multipart/form-data" action="hoge" method="POST">
<input type="file" name="data">
<input type="submit" name="btn_upload" value=" アップロード ">
</form>

PHP側はこんな感じ。
$fp = fopen( $_FILES['data']['tmp_name'], "rb" );
if ( $fp == FALSE ) {
die( 'アップロードしたファイルを開けません。' );
}
$Data = fread( $fp, filesize( $_FILES['data']['tmp_name'] ) );
fclose( $fp );

あとはこの$Dataを該当のテーブルにインサートするだけなのだけど、早速エラー発生。
どうもPHP側にてアップロードするファイルのサイズに制限をかけているらしい。

というわけで、php.iniを修正。
upload_max_filesize = 10M

これでいけるかと思いきや、またもエラー発生。
さらに調べてみると、今度はMySQLのほうで、ファイルサイズの制限があるらしい。

これも設定ファイルmy.cnfを書き換えればいいらしいのだけど、どこを探してもmy.cnfが見つからない。

う~む・・・

さらに調べてみると、どうやらこのMySQLの設定ファイルは、自分で作成するものらしいのだ。
というわけで、以下の場所にmy.cnfを作成。
/usr/local/mysql/var

my.cnfの中身はこんな感じ
[mysqld]
set-variable = max_allowed_packet=10M

この設定が反映されているかどうかは、MySQLにて以下のように入力するとわかるらしい。
SHOW VALIABLES;

ズラズラと設定一覧が表示されるのだけど、肝心のmax_allowed_packetの値が1048576。
1Mってことだから、反映されていない。

やっぱり設定ファイルを修正したわけだから、MySQLを再起動しないといけないのだろう。

だけど、MySQLの再起動ってどうやってやるんだ?

/etc/init.d/の中には、mysqlは存在しない。

色々調べてみたところ、mysql.server stopとやるのが正解らしい。
/usr/local/mysql/share/mysql/mysql.server stop
/usr/local/mysql/share/mysql/mysql.server strt

これで再起動成功。

先ほどの要領で設定が反映されているか調べたところ、以下のように表示された。
max_allowed_packet | 10485760

ばっちり10M。

これで再度試したところ、しっかり音楽ファイルのインサートができました~♪

いや~、結構苦労したけど、色々勉強になりましたとさ。


不安的中・・・ 自宅サーバにアクセスできない…

2009-10-06 13:57:51 | ITなお話
今日の午前中までは問題なく外部からアクセスできていた自宅のサーバに、急にアクセスできなくなってしまった・・・

考えられる原因としては、自宅のサーバに繋がっているLANケーブルを、飼い犬が喰いちぎったというのも有り得なくはないのだけど、現実的に考えると、IPアドレスが変わってしまって、それを上手く動的DNSサーバに通知できていないのだろう…

こればっかりは、外部からはどうすることもできないし…

かなりショボ~ン。。。

動的DNSを使って、自宅にサーバをたてる

2009-10-06 13:40:49 | ITなお話
久々の日記更新。

今現在、Webアプリを開発している。

社内だけで使うものであればよいのだけど、社外の人にも見せる必要があるため、完成したページを外部にも公開する必要が出てきた。

本来であれば、専用のIPアドレスを取得しなければならないのだが、作成中の段階でそこまでやるのはちょいと面倒。

というわけで、動的DNSというのを使うことにした。


まずは「私的DNS」というサイトで、ドメインを取得し、公開するマシンのグローバルIPアドレスを設定。

設定したIPに接続されているPCが一台であればこれだけで問題なのだけど、実際には複数のPCが接続されているため、ポートフォワーディングという仕組みを利用する。

ようするに、外部からアクセスがあった場合、どのPCに接続させるのかを、ルータで制御してやるのだ。

というわけで、気合で設定を行って、無事にアクセス成功。とりあえず22番ポートだけを空けて、SSHでの接続ができるようにする。

これさえできておけば、何かトラブルがあっても外部から対応できるし。


で、めでたく終了かと思いきや、実はまだ設定が必要。

現在の環境は固定IPを取得していないので、何かの拍子にグローバルIPが変更にしてしまう可能性がある。

そうなると、ドメインとの紐付けが壊れてしまうので、外部からアクセスができない。

バイブルの『Fedora11で作る最強の自宅サーバー』を参考に、fetchmailというソフトを使って、10分置きに動的DNSサーバに対して自分のIPアドレスを通知するようにしてやる。

こんどこそ、確実に完成!!

若干、最後に設定したfetchmailが不安なんだけども、とりあえずはこれでやってみますわ。

Zend_Logにて出力形式のフォーマット

2009-09-18 09:43:54 | ITなお話
さてさて、相変わらずZendにてWebアプリの製作中。

実際にプログラミングをしたことがある人なら分かると思うのだけど、ひたすらプログラムを書いていって、それをエイヤッと実行したところで、一発で動くことはまず無い。

「お前のスキルが低いから」と言われてしまえばそれまでなのだけど、まぁ、だいたいの場合、バグが出るわけですよ。

バグと一口に言っても内容は千差万別で、簡単なスペルミスから、テストデータのミス、さらには環境構築の際のミスもあったりして、なかなか一筋縄にはいかない。

例えば、最初の画面で入力した文字が、次の画面で出力されるはずなのに出力されないというバグ。

これだけのバグだったとしても、考えられる要因としてはいくつもある。

・最初の画面で入力された文字を取得できていない。
・次の画面に文字を出力できていない。
・入力された文字が出力される前に、上書きされてしまっている。
・意図した画面とは別の画面に遷移してしまっている。
などなど

で、かなり長い前置きになってしまったのだけど、こんな時のために、デバッグログがあると、かなり便利だ。

ようするに、プログラムの要所要所で、任意の文字をログファイルに出力するのだ。

さっきの例でも、入力された文字の内容とか、出力する文字の内容をログファイルに出力しておけば、どのタイミングで値がおかしくなってしまったのか、容易に判断できる。

で、このログを出力するための機能が、Zendには用意されている。

使い方はこんな感じ。

// ログ出力するための、ライターを生成
$writer = new Zend_Log_Writer_Stream( 'hoge.log' );
// Streamライターを含んだログオブジェクトの生成
$o_log = new Zend_Log( $writer );
// ログクラスにログレベルによるフィルタを適用
$o_log -> addFilter( new Zend_Log_Filter_Priority( Zend_Log :: DEBUG ) );
// ログ出力
$o_log -> log( $message, Zend_Log :: DEBUG );

実際に出力されるログはこんな感じ

2009-09-18T10:02:25+09:00 DEBUG (7): ログメッセージ


まあ、これでもダメではないんだけど、ぶっちゃけてちょっと見づらい。

特に、最初の日付のところが、タイムスタンプ型になっていて、実際の運用の時にアクセスログなどとして使うにはいいのだろうけど、デバッグログとして使うにはかなりイマイチ。

ということで、フォーマットを変更できないか調べてみる。

結果として、思うようにはできなかった。

タイムスタンプ型の日付を出力しないようにすることはできたので、とりあえずはそれで対応する。

こんな感じ。

// ログ出力するための、ライターを生成
$writer = new Zend_Log_Writer_Stream( 'hoge.log' );
// フォーマット設定
$format = new Zend_Log_Formatter_Simple( '(%priority%) %message%' . PHP_EOL );
// フォーマット割り当て
$writer -> setFormatter( $format );
// Streamライターを含んだログオブジェクトの生成
$o_log = new Zend_Log( $writer );
// ログクラスにログレベルによるフィルタを適用
$o_log -> addFilter( new Zend_Log_Filter_Priority( Zend_Log :: DEBUG ) );
// ログ出力
$o_log -> log( date( 'Y-m-d h:i:s' ) . "\t" . $message, Zend_Log :: DEBUG );


結果はこんな感じ

(7) 2009-09-18 10:09:40 ログメッセージ


さっきよりは、だいぶ見やすくなった。


後は、このログファイルを見るためのテキストビューについてちょっと書きたいのだけども、かなり長くなったので、とりあえずのとこはこんな感じで終了。

PHPにて、オブジェクトをSESSIONで受け渡す

2009-09-04 13:19:03 | ITなお話
PHP5.2.10 + ZendFramework1.9.2にてWEBアプリを製作中。

少し前までJavaにてプログラムをしていたこともあって、オブジェクト指向的な設計にしている。

そこで、少々問題が発生。

行いたかったことは、オブジェクトをSESSIONに登録し、後で受け取るということ。

【a.php】
$testBean = new TestBean();
$testBean -> setId( '1234' );
$session = new Zend_Session_Namespace( 'testNamespace' );
$session -> testBean= $testBean;

【b.php】
$session = new Zend_Session_Namespace( 'testNamespace' );
$testBean = $session -> testBean;
print( $testBean -> getId() );


a.phpにてSESSIONの登録を行って、b.phpにて'1234'が出力されてくれれば成功なんだけども、エラーが発生してしまう。

また、そのエラーメッセージが凄まじくわかりにくく、原因がさっぱりわからない。


というわけで、google先生にて色々調べてみたところ、以下のようなページを発見。
PHP:オブジェクト(クラス)をセッションで受け渡しする方法:serialize():シリアル化

これを参考に、以下のように修正する。
【a.php】
$session -> testBean= serialize( $testBean );

【b.php】
$testBean = unserialize( $session -> testBean );

これで、めでたく'1234'が出力。

serializeについては、完璧に理解したとは言いがたくて、どんなときに必要で、どんなときに必要でないのかまだわかっていないのだけど、かなりスケジュールがヤバめなので、とりあえず先に進みます!!