データベース利用時のキーをbigintにする必要があるか

2011/10/31 | データベース

結構これに悩む開発者は多いのではなかろうか。

そもそもこういうことに悩むのが間違いの元だと思う。システム開発者たるもの、事前の想定があってそれに対しての開発をするわけで、適当に「将来増加するかもしれないから」なんてことだけで開発してはいけない(とは言っても・・・とも思うけれど)。

MySQLで主キーにauto_incrementを設定すると仮定する。カラムの型がintegerでunsignedの場合最大約42億まで値を確保できる。42億、というと実際には手に届かないが、接したことのある数字である(算数の計算とかの話)。「億」という言葉が問題なのかもしれない。じゃあ「兆」は、「京」はみたいなことをいうと切りがない。なので、まず実際に使用すると思われる量を計算しなくてはならない。

42億というと1日1件の処理で値が1増加すると仮定すれば、約1150万年も使えるわけだ。その頃には人類は絶滅しているんじゃないかと思うので、すでに考えなくていい。

1日100件の処理が行われるとすると、約1万1千年使えるわけだ。人類が絶滅していなかったと仮定してもMySQLは存在しないだろう。じゃ、やっぱり考えなくていい。

1件あたりの処理で値が100増えるとすれば(1日100件の処理で)、101年となるわけだ。さすがに人類はまだ絶滅していなさそうだし、ひょっとしたらMySQLもまだあるかもしれない。でも100年前のシステムの考え方が通用するだろうか。そもそもそれを使う会社が100年先も存在するだろうか(ま、発注者にはそんな事言えないけど)。となれば、これでも考えなくていい。

といった具合に、見積もりを立てれば問題ない。そしてそれを仕様書にまとめて提出する(できれば「こういう仕様でいきます」という事前確認をしておくほうがいい)。

csvファイルをダブルクリックで正常に開く

2011/10/28 | その他

基本的に、WindowsPCならよっぽどこのことがない限り表計算ソフトとしてエクセルをインストールしていることが多いのではないだろうか。

そして、表計算ソフト用として、ウェブからデータをダウンロードする際に多いファイル形式はcsvだろう。

プログラムで出力する際、csv形式でダウンロードさせることが多いが、エクセルとcsvの関係をよくわかっていないと、文字化けしたり、区切り文字が正常に認識されなかったりすることがあるので要注意だ。

まず一番問題ないのが「カンマ区切り、ダブルクォーテーションで値を囲む、文字コードシフトJIS」だ。ダブルクォーテーションで囲むのは各値にカンマが入ってしまうと変なところでセルが分割されるので、それを防ぐためだ。ちなみに各値にダブルクォーテーションが含まれる場合は事前にダブルクォーテーションでエスケープしておく必要がある。

しかし「シフトJIS」というのは日本語用の文字コードであって、例えば中国語などは表現できない。そこで文字コードとしてはUTFな環境をつかいたいわけなのだが、単にUTF-8にするだけではダメだ。

そもそもUTFにはいろいろあって、UTF-7、UTF-8、UTF-16BE、UTF-16LEがある。そしてUTF-7をのぞく3つの形式にはそれぞれBOM付とBOM無があるので、合計7つのUTFが存在するというわけだ。実はこのうち適切に設定するとファイルをダブルクリックすることでエクセルで正しく表示させることが出来る文字コードが存在する。その答えはこうだ。

「タブ区切り、UTF-16LE(BOM付)」

囲み文字のダブルクォーテーションはあってもなくてもよい。ちなみにエクセル2002でも大丈夫。そして「メモ帳」でも文字化けせずに開くことが出来る。知っていると便利だ。

アンケートASPサービスCubeQueryの有料提供開始

2011/10/27 | その他

今月(2011年10月)、ようやくアンケートASPサービスCubeQueryの有料化を実現した。アンケートの基本機能としては無償版と同様とし、有償版ではSSLの適用と回答画面のカスタマイズを提供した。有償版の機能が無償版と同等というと聞こえが悪くて嫌なのだけれど、基本機能についてはたとえ無償といえどもアンケートシステムを使ってもらいたいので、そのまま公開することにした。

無償版は昨年と比較するとアクセス数で約1.5倍の伸び率。毎日回答が数百件あるわけで、システムとしては安定稼働している。毎日数千件程度の回答数でも問題なさそうだ。

今後もアップデートを大量に予定している。

  • アンケート編集機能の大幅改善
  • 二重回答防止機能のオンオフ設定
  • クロス集計
  • 回答集計結果グラフをよりかっこよく

そしてサービスとしても現在のアンケート1件あたりの課金だけでなく、月額固定料金での課金によるサービスを2012年より開始予定(リクエストを頂いたので)。その後独自ドメインによるアンケートASPも予定している。あとは体力とやる気の問題・・・だな。

ImageMagickのインストール

2011/10/14 | PHPの基本

インストール、というか、PHPからImageMagickが使えるようにしたくて作業した際のメモ。基本的になるべく余計なことはしたくないのだが、ImageMagickをPHPから使えるようにするための単一パッケージは存在しないようだ(CentOSで)。peclコマンドを使わないといけないらしい(仕方なし)。

  • とりあえずyumでImageMagickをインストールしてみた。これがほんとうに必要かどうか分からないけれど。
  • 以下のコマンドを実行してみた。
    pecl install imagick
  • エラーが出た。どうやらpeclコマンドがインストールされていないようだ。
  • php-pearをyumでインストール(勝手にphp-devel他インストールされた)。
  • httpd-develをyumでインストール(ウェブでそう書いてあったからとりあえず)。
  • 再度peclコマンド実行。
  • extension=imagick.soの記述をPHPの設定ファイルに追加

結果として、phpinfo()で有効になっていることを確認できた。

SESSIONの有効時間

2011/10/12 | PHPの基本

セッションの有効時間の設定ってどうやるんだっけ、と毎回調べるのでメモする。

セッション時間の根本的な設定として、以下の3項目がある。

  1. session.gc_maxlifetime
    ガベージコレクションされるまでの時間(秒)
    デフォルト値:1440
  2. session.gc_probability
    ガベージコレクション時に、ガベージコレクションする確率を設定する(分子)
    デフォルト値:1
  3. session.gc_divisor
    ガベージコレクション時に、ガベージコレクションする確率を設定する(分母)
    デフォルト値:100

上記3つは、以下の文章で表すことが出来る。

セッションは少なくとも(1)で指定した時間はキープされる。(1)で指定した時間が経過すると、(2)を(3)で割り算した値(確率)で破棄される。デフォルト値でいうと、1440秒間は間違いなくセッションが有効だが、それを過ぎると1/100の確率でセッションが破棄される、ということになる。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net