2011年11月28日月曜日

大量のファイルを複数のディレクトリに分散して格納する方法

最近はハードディスクもテラバイトクラスの容量なので、大量のファイルを作ることができる。

以前、linux上でPHPを使いウェブサイトのプログラムを書いた。
それは、使っているとファイルがどんどん増えてくるシステムだ。
linuxの場合、ひとつのディレクトリに作れるファイルは最大3万とか、そういう値だったと思う。
いずれにしてもひとつのディレクトリに何万もファイルがあれば、いい加減多すぎるし、何かの時に問題が起こりかねない。
そこで、増えてくるファイルを複数のディレクトリに分散する形をとることを思いつく。

最初はディレクトリ「00001」にファイルを入れていく。1万個まで達したら、次は「00002」というディレクトリを作ってそちらに入れる。というような手法だ。
これでは、ディレクトリにいくつファイルが入っているか、どこまでディレクトリを作ったか等の管理が必要になる。例えばそのカウンターをデータベースに記録しておくといったようにだ。その場合、ウェブシステムなら連番管理の排他制御も考えなければならないかもしれない。

少し面倒なので別の方法を考えた
まず年でディレクトリを作り、その下に月日でディレクトリを作る。実際のファイルはその月日ディレクトリの下に入れる。一日に数千個程度までのファイル数であれば、これで対処できる。まだ無理なら時刻でサブディレクトリを作っても良い。
ファイル名は時刻やuniqid()を使う。

しかしながら、このことは今のシステムを作ってから思いついた。
よく考えず、別の方法で作ってしまったのだ。
たぶん大丈夫だと思うが、自分の納得のいかない状態になっているのが、ちょっと気分が悪い。

無駄な会議にはノートパソコンがあると便利

仕事によっては無駄な会議に出なければならないことがある。
今日の私の定例の会議もまた、部署の長となる立場の人間が奥の席に座り、それを取り囲むように数十人が席に座るという、よくある日本の会議の風景となった。
数ページにわたる細かく書かれたドキュメントが配られて、関係あるのかないのか分からないようなことを、ひとつひとつ進めていく。

何枚にもなるような資料なんか、どうせ参加者の頭に入るわけがない。
資料を作るとしたら1枚がちょうど良い。要点を3項目程度にまとめ。それに箇条書きででも説明をつければ程良い形になる。
細かい数字もいらない。「売上は、1,400,000千円の目標に対して、実績は1,103,897千円。296,103千円不足している。」等とするより、「売上は、14億円の目標に対して、実績は約11億円。3億ほど足りない。」とでもした方がピンとくる。

会議に出席する側の気持ちになって考えてみよう。
何枚もの資料を目の前に出された時など、ため息が出るだけだ。
退屈な会議など眠たいだけで、何も残らず、全員にとって無駄な時間にしかならない。
翌日、内容を聞いてもほとんど覚えてなんかいない。

しかし、人の愚かなのは、人のふり見て・・・ということもあるので、まあ参考にすればよい。
そういうくだらない建て前や、セレモニーの中に付き合わされるときなどは、ノートパソコンがあると便利だ。
パソコンを使っていても会議に耳は傾けておけるので、あまり問題はない。
キーボードのタイプ音に注意はいるが、効率的な時間を過ごせるし、暇つぶしにもなる。

2011年11月25日金曜日

PHPでFTPアップロードする

PHPをcronで実行して、ロリポップのサーバーにFTPでファイルをアップロードする必要があって、その時に行ったPHPによるFTP処理の技術資料。

$connId = ftp_connect("ftp.aaa.com"); // 接続
ftp_login($connId, "user", "password"); // ユーザー名とパスワードでログイン
ftp_pasv($connId, true); // パッシブモードにする
ftp_chdir($connId, "upload"); // アップロード先のディレクトリに移動
ftp_put($connId, "filename", "/usr/local/filename", FTP_BINARY); // アップロード開始
ftp_close($connId); // FTP終了
こんな感じで一連の処理が行えます。
テキストファイルの場合は、ftp_putの第4引数に FTP_ASCII を指定します。
サーバーに既にファイルがあった場合は上書きされます。
ちなみにダウンロードは ftp_get です。

フリーソフトウェア、シェアウェアの公開方法

フリーソフトウェアやシェアウェアを作ったは良いが、次にどうやって公開するかが問題になる。
現在、これが簡単にできない世の中になっている。

順当なのは、Vectorに登録することだ。
Vectorは、そこそこ有名なサイトなので、作ったソフトウェアの宣伝になるし、ダウンロードする側に安心感を与えられる。
公開するのがシェアウェアなら、送金の代行もやってくれる。

ただ、Vectorはいざ使おうとすると不便な面もある。
ひとつは、登録時のチェックに日数がかかること。昔、ウィルス混入騒ぎがあったため、今はウィルス等のチェックが厳重に行われているからだと思うが、これに数日かかる。新規登録したときだけでなく、バージョンアップで差し替えるたびにチェックが行われる。
例えば、付属ドキュメントの記載に不正確な点があって、その部分をわずかに修正してアップロードしなおしただけでも、そのたびごとに公開まで待たされる。
また、紹介文の文字数や、紹介画像数に制限があるので、複雑なソフトウェアでは十分な紹介ができないかもしれない。
シェアウェアでは、シェアレジに登録することで代金支払いを仲介してくれるのだが、そのために郵送で書類のやり取りが必要なので手軽にすぐ始めるとはいかない。ソフトウェアの登録とは異なるシェアレジ用のアカウントが発行され、アカウント管理が二重になるのも少々煩雑に感じてしまう。
そして、シェアレジの手数料は結構重い。作者と購入者、両方に手数料がかかる。商品代金1,000円だとしても購入者は手数料と消費税で1,155円を支払い、作者側も別途手数料が引かれて、受け取るのは892円になる。
実質、購入者は作者が受け取る金額に30%上乗せした金額を支払うことになる。

Vectorを使うことで、自分でウェブサイトを用意する必要がなく、ほとんどほったらかしで公開できる。
Vectorの欠点は欠点として、利点を活かして、有効に利用させていただくのが一番賢い。

次に自分でウェブサイトを作る方法がある。
無料のホームページサービスの中には容量1GBとかと謳っているところもあって、問題なく使えそうに見えるが、実際は1ファイルのサイズやアップロードできるファイルの種類、HTMLファイルとデータファイルの比率、転送量等に制限がある。
実際のところ無料ホームページスペースでソフトウェアのダウンロード環境を作るのは難しい。
ダウンロードはVectorへリンクする方法で、無料ホームページではソフトウェアの紹介を詳細にするという活用はできる。
また、シェアウェアならPayPalや銀行振込等、別の支払い方法を紹介したり用意しておくためにも使えそうだ。

シェアウェアで、そこそこ売れるのなら有料のホームページスペースを使っても良いが、シェアウェアはほとんど売れるものではないし、フリーソフトウェアだったら収益は0。広告を掲載しても良いが、ある程度アクセスを集められるものでなければ、ホームページスペースの費用をまかなえないかもしれない。寄付というのも成立しないのは目に見えている。

ソフトウェアを作っても公開するのすら難しい。

Googleのサービスが無料なのは本当に良いことなのか

ずいぶん前に読んで、興味深かったブログ記事「Googleがネットを無料化する目的
Googleが無料でサービスやアプリケーションソフトウェアを提供するのは、広告スペースを広げるためであるという見方だ。
特に「ユーザは目先の利益しか考えないので…」という表現は、私も同じように考えそうなので、おもしろく感じた。そして、この記事に興味を持った本質的なところだと思う。

私は、このところGoogleには、以前のマイクロソフトのように独占による問題が頭をよぎる。
というのは、最近Googleのサービスを色々(Gmail、Analytics等)使っているとIEではレイアウトが崩れたりして、きれいに表示されないことが多いのだ。
Chromeを使え、ということなのだろうが、Chromeでは文字化けして、まだうまく表示されないウェブサイトがあったりするのと、シェアという意味ではまだまだIEが多いので、自分のウェブサイトを日常的に確認できるためにデフォルトブラウザをIEにしておきたいという事情がある。
Googleのサービスは優秀で、なにより無料で使える。だから使ってしまう。そしてウェブブラウザもChromeに変えざるを得なくなってくる。Googleの思う壺だ。

本来、ウェブサイトのコンテンツもアプリケーションソフトウェアも、制作するのに手間や費用がかかるはずである。にも係わらずインターネットでは無料が当たり前のようになっている。
コストを回収するには一見無料に見える広告でしか成立しない世界になってしまっている。しかし、広告は収益の効率があまりよくない。
有料にすれば、見向きもされないし、無料でやるには、儲からない広告でやるしかない。
コンテンツ提供者とユーザーの間に立つGoogleが中間搾取することで、コンテンツ提供者とユーザーは余計な費用を支払う構造になっている。
Googleの収益は、自然に湧いたものではない。どこかから生まれたものだ。それは突き詰めればユーザーからだ。

誰でも無料の方がありがたい。
だが「ただほど高いものはない」
よく裏を考えておかないと、実は大損をすることもある。

しかし、Googleが悪者と決め付けるつもりはない。広告代理店も価値あるサービスのひとつだ。
むしろ私はいつもGoogleのお世話になっている。このブログもGoogleのbloggerを使っているし。

元記事「Googleがネットを無料化する目的」に興味を引かれた本質や、こうした文章を書いているのは、何が正しいか間違っているかを言いたいのではない。これを考えることで何かを変えるつもりもない。本能や目先の利益だけではなく、元記事の筆者のように広い視野を持っておきたいということである。

lsのディレクトリ名が暗い青色で読めない

linuxのコマンドラインでlsコマンドを打つと、ディレクトリ名等の文字が色分けされて表示されるが、ディレクトリ名が暗い青色で表示されて、よく見えない。
顔を近づけて見るとなんとか読めるが、不便なので色を変更したい。

/etc/DIR_COLORS をホームディレクトリにコピーする。
# cd
# cp /etc/DIR_COLORS .dir_colors

次にコピーしたファイルを編集する。
# vi .dir_colors

以下の行を編集する。
DIR 01:34 # directory

例えば下のように 34→44に変更する。44は青色の反転表示。
色の種類はすぐ上のコメントに英語で書かれている。
DIR 01:44 # directory

変更を反映するために、evalコマンド実行。
# eval `dircolors .dir_colors -b`

このように読みやすくなった。

.dir_colorsファイルの設定しだいで、他にもファイルの種類や、zip、jpg等の拡張子で色分けできたり、太字、ブリンク等の修飾も可能。

2011年11月24日木曜日

MySQL Connector 64bitでMS-AccessからMySQLにテーブルリンクを作成できない

Linux上に構成したMySQLをMS-Accessから見られると便利だ。
MySQL Connector/ODBC でそれができる。
ODBC経由で接続して、MS-Accessからテーブルを表示したり、編集したりできる。

Windows 7の64bit版を使っているので、MySQLのサイトから
「Windows (x86, 64-bit), MSI Installer」
という64bit版のプログラムをダウンロードした。バージョンは5.1.9だ。
しかし、MS-Access上でテーブルへのリンクが作成できなかった。

どうやってもできなくて
「Windows (x86, 32-bit), MSI Installer」
という32bit版に入れ替えると、使うことができた。

それで使えているから別にいいのだが、Windows 7の64bit版なので、MySQL Connectorも64bit版が正しいような気が…なぜ?