投稿

4月, 2008の投稿を表示しています

【PHP】プログラムでPath(パス)をセットする

PEAR(ペア)などの外部ライブラリを使うときは、そのディレクトリにパスを設定しときたいことが多々あります。php.iniに設定できれば問題ないですが、レンタルサーバの場合はプログラム上で一時的に設定するやり方があります。PHP 4.3 以上では
set_include_pathバージョンを気にしたくない場合は
ini_setを使います。例↓set_include_path(get_include_path() . PATH_SEPARATOR . '/usr');ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . '/usr');PATH_SERPARATORを使うのはwindowsとlinuxで区切り文字が違うから。ちなみに.htaccessに設定するやり方もあります。php_value include_path ".:/usr"

【ADO.NET】DB接続後closeをしないと駄目なのか

この続きで、64bitのWindows Server上のIISで動かすと「アプリケーションプールの制限値を越えました」と怒られる現象ですが、原因はSQL Serverに接続後、ちゃんとcloseしていなかった(箇所がある)ため接続プールがクリアされなかったのが原因でした。私の認識ではたとえcloseを実行しなくても.NETが自動的に切断(プールを解放)してくれるものだと思ってました。もちろんできるだけcloseするようプログラミングしますが。ここにSQL Serverの接続プールに関しての説明があります。これにはcloseとdisposeを使って接続を終了することを強く勧めていますが、接続が長時間アイドル状態のときは.NETが自動的に接続を切断するという記述もあります。64bitのバグ?実際32bitだといくらやってもエラーとなりませんでした。でも、必ずcloseするよう癖をつけといた方がよいみたいです。ここに実際にオブジェクト破棄を保証するコードのサンプルがあるので参考に。さらに.NETの自動メモリ管理(ガベージコレクション)について知りたい時はここ

【ASP.NET】IISの動作モードを32bitと64bitで切り替える

64bitのWindows Serverをインストールして32bitで動いていたASP.NETのアプリケーションを64bitのIISで動かすとうまく動いてくれないことがあるようです。そんなときは32bitで動作させたくなります。ここにそのやり方が。困っていたのは、64bitのIISで動作させるとアプリケーションプールがうまくリサイクルされずに、複数端末で接続すると「アプリケーションプールサイズの制限値を越えました」というようなサーバエラーが返される現象です。この現象はリンクにあるやり方で32bitモードで動かしても直らなかったのですが、32bitのWindows Serverでは起きませんでした。つづく・・・

社内パッケージ「somfa」を使ったLDAPサーバ接続

ここで、PHPを使ったLDAPサーバに接続する方法を書きましたが、社内のPHPで書かれたDB接続パッケージ「somfa」を使ってLDAPサーバに接続する方法をアニキが教えてくれました。ここ。社内で使う分には使い慣れたインターフェイスでプログラミングできるので、こっちの方が便利かも。検索スピードが変わらないようなら、somfaを使うのもありかも。社外の人にとっては全く縁のない話ですね。

【.NET】AUの携帯にメール送信すると件名が文字化けする

.NETにあるSystem.Net.Mailでメール送信をしていますが、これが結構くせものだということが分かりました。分かったのはAUの携帯にメール送信すると件名が文字化けする現象に遭遇したからです。しかも件名によっては文字化けしたりしなかったり。ここでSystem.Net.Mailが駄目な理由を解説してくれてます。この場合メールの件名には「?iso-2022-jp?Q?xxxxxxx」と表示されます。これはQuoted-Printableという形式でエンコードされているようです。こちら。緊急回避策として、auの携帯だけShift-JISでエンコードして送信するようにしました。ただし、Thunderbirdでそのメールを受信しても文字化けします。Outlookでは大丈夫なようです。あとでQuoted-Printableもちゃんとデコードできるように対応しましたが、メールの送受信って結構大変ですね。市販のツールを使った方が便利なような気がします。BASP21とか(これはフリー)。

PHPのコーディング規約

PEAR(PHP Extension and Application Repository)「ペア」のドキュメントを読んでいたら、PEARのコーディング規約をみつけました。あとでいろいろ参考になりそうなのでメモ。PEARとは?PEARの標準コーディング規約長い間プログラミングしていると独自のコーディング規約が既に確立してしまいますが、開発メンバー全員が規約に従わないと意味がないので、自分流となっていた部分は少しづつ直していこうと思います。ifの次は半角スペースをいれるとか・・・。

POP3とSMTPのコマンド一覧

メールの送受信テストをするときやプログラムを開発する際に直接メールサーバにアクセスしてメールを送信したり確認したりします。アクセスはtelnetをつかってWindowsならコマンドプロンプトから
# telnet <server_name> 110
↑POP3
# telnet <server_name> 25
↑SMTPPOP3のコマンドはここをみれば分かりやすい。SMTPのコマンドはここ

Google Spreadsheetsを簡易SQL DBに

前から試してみたかったんだけど、時間がなくて先送りになってるのがこれ。Goolge Spreadsheetsを簡易的なSQL DBとすることができるらしい。記事1記事2記事3このブログで紹介されているのはJavaScriptでGoogle DocsのAPIにアクセスする方法ですが、PHPでアクセスする方法もあるはず(たぶん)。これができれば、SQL DBなしでシステムを構築することができるんじゃないか?簡単なWikiとかなら、いちいちDB用意しなくていいから便利かも。そのうち作ってみよう。

【SQL Server】変数を利用したTOPで動的に絞り込む

ストアドプロシージャを書いていると、変数を使って動的にSELECTする値を絞り込むようなことをしたくなります。そんなとき検索してみつけたのはここにあるサンプルコードライブラリ。SQL CLRをやり始めるときやT-SQLのTipsなど結構参考になりました。変数を使う方法は括弧を使うとすんなりできます。 declare @countnumber int set @countnumber = 10 select top (@countnumber) * from person.contact

GmailのAPIを使ってPHPで操作する。

Google Appsのメール設定をプログラムから「POP受信を許可」に変更したくて、実現可能かどうかを調査。Gmail(***@gmail.com)では、APIが公開されていて、これを使えばできるみたい。libgmailerリファレンス。libgmailerを使うためにはCurlをインストールしないといけない。
$ apt-get install curlあと/etc/php5/php.iniの
allow_call_time_pass_reference = On
を設定する。でも独自ドメインの場合のGmail用APIは見つからず。このソースを元に変更すれば可能は可能そうだけど、・・・誰か作って

PHPでLDAPサーバに接続して検索

イメージ
まずは必要なモジュールをインストール(相変わらずvineなのでapt)
# apt-get install php5
# apt-get install php5-ldap適当なユーザをLdap adminで登録しといて下記サンプルコードを実行すれば、結果が出力される。
# php5 ./sample.php↓Ldap Adminの画面↓サンプルコード。ここを参考にちょっと書き直した。<?php
// LDAP の基本シーケンスは、接続、バインド、検索、検索結果の解釈、
// 接続のクローズです。 echo "<h3>LDAP query test</h3>";
echo "Connecting ...";
$objConnect = ldap_connect("localhost");  // 有効な LDAP サーバーに違いない!
echo "connect result is " . $objConnect . "<br />"; if( $objConnect ){     //バインド
    echo "Binding ...";
    $bBind=ldap_bind( $objConnect );     // これは "匿名" バインドで、通常は読みこみのみのアクセスとなります。
    echo "Bind result is " . $bBind . "<br />";     // エントリを検索
    $sPerson = "";
    echo "Searching ...";
    $sDN = "ou=Users, o=exbridge, c=JP";
    $sFilter = "(|(sn=$sPerson*)(giv…

【ASP.NET】携帯かPCからのアクセスかを判別する

ユーザーエージェントを参照して判断できる。簡単に書くとこんな感じImports System.Text.RegularExpressions''' <summary>
''' 携帯電話でアクセスしているかどうか
''' </summary>
''' <returns>携帯電話:<c>True</c>。それ以外:<c>False</c></returns>
''' <remarks>
''' http://www.futomi.com/lecture/env_var/http_user_agent.html
''' http://noongoro.main.jp/note/note0035.html
''' </remarks>
Public Function isMobile() As Boolean
    Dim sAgent As String = HttpContext.Current.Request.ServerVariables("HTTP_USER_AGENT")
    'Dim sRemoteHost As String = HttpContext.Current.Request.ServerVariables("REMOTE_HOST")
    Dim bReturn As Boolean = False
    'HttpContext.Current.Response.Write(sAgent)
    'Docomo
    If Regex.IsMatch(sAgent, "DoCoMo") Then
        bReturn = True
    End If
    'AU
    If Regex.IsMatch(sAgent, &quo…

【.NET】CLR(Common Language Runtime)のバージョンを調査

SQL Server 2005のSQL CLRの開発で壁にぶち当たって、そのとき調査したメモ。SQL CLRで開発したモジュールは結局.Net FrameworkのCLR(Common Lanuage Runtime)で動く(と思う)ので、そのバージョンの取得方法。//【C#】
string clrVersionBuildtime = System.Reflection.Assembly. GetExecutingAssembly().ImageRuntimeVersion; '【VB.NET】
Dim clrVersionBuildtime As String = System.Reflection.Assembly. GetExecutingAssembly().ImageRuntimeVersionちなみに現時点では「v2.0.50727」だった。
問題解決にはならなかったけど、CLRの問題ではなさそうなのは分かった。

【SQL CLR】DBから外部リソースにアクセスするための設定

イメージ
【SQL Server 2005】 SQL CLRを利用してストアドプロシージャからPOPサーバにアクセスするプログラムを書いたときのメモ。POPアクセスのコードはここを参考に。ストアドプロシージャでSQL CLRを利用する場合、.NETで実現できることは基本できるようですが、外部のPOPサーバにアクセスしないといけないので、気にしないといけないのがセキュリティ権限。SQL CLRの作り方はここを参考に。データベースから外部へのアクセス権限に関して参考になるのが、ここここ。最初はコンパイル時に下のようなエラーが出てきたけど、よく分からず。アセンブリ 'SqlServer_dbPOP' の CREATE ASSEMBLY が失敗しました。 PERMISSION_SET が EXTERNAL_ACCESS の場合、アセンブリ 'SqlServer_dbPOP' は許可されません。 アセンブリが許可されるのは、データベース所有者 (DBO) に EXTERNAL ACCESS ASSEMBLY 権限があり、 データベースの TRUSTWORTHY データベース プロパティが有効になっている場合、 または、アセンブリが証明書または非対称キーで署名されており、 それに対応するログインに EXTERNAL ACCESS ASSEMBLY 権限がある場合です。 このデータベースを復元またはアタッチした場合は、 データベース所有者がこのサーバー上の正しいログインにマップされていることを確認してください。 マップされていない場合は、sp_changedbowner を使用して問題を解決してください。調べた結果、まずデータベース側の設定はManagement Studioでデータベースを右クリック→プロパティで「信頼可能」が「True」になっている必要がある。GUIで変更できなかったので、下記SQLを実行してTrueにする。データベースから外部にアクセスするときにはこの設定が必要。ALTER DATABASE (データベース名) SET TRUSTWORTHY ON次はVisual Studio側でSQL CLRプロジェクトのプロジェクト→プロパティでアクセスの許可レベルを外部に設定。…

Visual Studio 2005のキーバインドを変更

今までの開発でXyzzyを使っていると、Visual Studio 2005のキーバンドが苦痛。Xyzzyでコードを書くこともできるけど、やっぱりIntelliSenceは便利なので使いたい・・・ということで、Visual Studio 2005のキーバインドを変更することにしました。Visual Studioではかなり柔軟にキーバインドを変更することが可能です。
ツール→オプション→環境→キーボードでいろいろ設定。デフォルトでEmacsのキーバインドに変更できるスキームが用意されているけど、これを適用するとクリップボードにコピーしたときの挙動がおかしいし、使いにくいので既定の設定から自分用のキーバインドを追加することをおすすめします。キーボードでのカーソル移動とCtrl-Gを選択範囲のキャンセルに割り当てれば、まずまず使いやすくなります。あとは適宜必要になったときに追加。ある程度設定したら、
ツール→設定のインポートとエクスポート
でオプション.環境.キーボードを選択して設定の保存をしとくと安心。

Sunbirdに日本の祝日と天気予報を表示

Sunbirdのバージョン0.8日本語版がリリースされました。速度面やバグなども修正されているため、過去のバージョンを使っている人はアップグレードをおすすめします。予定検索を非表示にすると立ち上がりが早い。なぜかSunbirdの更新確認では新しいバージョンを見つけてくれませんでした。ここからダウンロード。旧バージョンを削除しなくてもインストーラ実行で大丈夫です。<日本の祝日を追加>
Googleが公開してくれているICALを利用します。プレビュー
ICALアドレス
http://www.google.com/calendar/ical/japanese__ja%40holiday.calendar.google.com/public/basic.ics<天気予報を表示>
livedoorが公開してくれているICALを利用します。ここから。
私の場合はGoogleカレンダー経由で参照してます。

【VMware】CentOSを仮想SCSIディスクにインストールする方法

イメージ
VMware ServerにCentOSをインストールしようとしましたが、SCSIハードディスクでゲストOSを構成するとハードディスクが認識しない・・・。検索してみると仮想ハードディスクをIDEとすればできるみたいだけど、ここを参照するとIDEだと遅くなるみたいなので嫌。なんとかしてSCSIにインストールできないもんかなーと思っていじってみたら、すんなりできました。やり方はゲストマシンを作成するときにTypicalではなく、Customを選択。もろもろ入力したあとSCSI Adapterを選択するダイアログでLSI Logicを選択するとCentOSのインストール時でもハードディスクを認識してくれるようになりました。

BigTableにアクセスできる「App Engine」のプレビュー版公開

昨日BigTableに関して書きましたが、なんとGoogleからApp Engineというサービスのプレビュー版が公開されました。記事これは、Googleのリソースを使ってwebアプリケーション(サービス)を開発、公開することができます。今はプレビュー版なのでGoogleのサーバでサービスを公開できるのは先着1万名までらしいです。記事を読んで早速登録しましたが、どうやら1万名の中に入れなかったみたいです。ただ登録だけしとけば、利用できるようになった時点でGoogleからメールが送られてくるようです。App Engineについてはここを読めばなんとなく理解できそう。特徴はストレージの上限500MCPUは一日あたり2億MHz転送量は一日(双方向で)10GB制限を超えなければ無料で利用可能今のところ開発言語はPythonのみ(今後増える予定)Googleのサーバに配置できないけど、SDKを利用すればローカルで開発と動作検証はできる実際に作られたアプリケーションを触ってみましたが、Googleアカウントで必ずログインしないと駄目みたい(?)。誰でもアクセスできるようにはできないのかな?まだ謎がいっぱいですが、暇があったら試してみよう。PHPに早く対応してほしい・・・

GoogleのBigtableでデータベースもオンライン化

ここの記事でGoogleが「Bigtable」という名のデータストレージサービスを公開するかもというのを知りました。Googleさんのことだから数GBまでは無料で提供されるんではないでしょうか?普通のユーザは使い道がないので、おそらくGoogle Appsのサービスの一つとして提供されそうな予感。すでに超強力なGmailを提供しているGoogle。今後社内のメールとファイルとデータは全てオンラインでGoogleにお任せという企業も出てきそうな感じです。
・・・それはないか・・・しばらくしたらBigtableを使ったシステムを提案してるかも。非常におもしろそうな技術なので今後も注目です。

携帯用エミュレータの置き場所

【ASP.NET】auの携帯だと文字化けするのを回避する方法

ASP.NETで携帯サイトを開発していて、auだけ文字化けするのに気がつきました。回避する方法はweb.configのsystem.web内に下記コードを追記するだけ。<!-- AUの携帯の場合は下記指定がないと文字化けする -->
<globalization requestEncoding="shift-jis" responseEncoding="shift-jis" enableBestFitResponseEncoding="true"/>ここを参考に。←携帯向けサイトの開発について有用なコメントがあります。開発環境
Visual Studio 2005
ASP.NETのVB.NET
.Net Framework 2.0 SP1

.NET Framework 2.0 用 SP1

Microsoftのサイトで.NET Framework 2.0 用 Service Pack 1が公開されてます。主にセキュリティの強化 .NET Framework 3.5 のサポート が変更されてます。日本語で使用する場合は日本語Language Packも追加でインストールが必要。以前のService Pack1がインストールされている場合は削除してからインストールしないと駄目らしい。Windows Updateで更新すればこの辺自動でやってくれるのかな?怖いから試してないけど。

【Visual Studio 2005】ASP.NETの規定ブラウザを変更

Visual Studio 2005でASP.NETプロジェクトを開発し始めたときは、規定のブラウザがFirefoxだったので、デバッグ実行するときはFirefoxが起動していた。だけど、
Firefoxは調査(検索)用
IEは開発用
としたいので、規定のブラウザをIEに変えてみたけどVS2005で立ち上がるブラウザは変わらない・・・。なんで?と思って検索してみたら、ここの人が教えてくれました。使うブラウザはプロジェクトごとに覚えているみたいなので、ファイル→ブラウザの選択で変更できるらしい。

Ldapから検索する上限値を設定

Ldapに大量にデータを追加して検索していますが、Ldapから検索するとデフォルトで上限500までしか取得できない。これを解除するには/etc/openldap/slapd.confにsizelimit -1を追記する。-1は無制限。
その他の設定はここを参考に。

今日は創立記念日

4月1日は会社の創立記念日で、みんなでバーベキュー。 飲み過ぎて頭が痛い。 でも楽しかったです。 また明日から頑張りますか。