Subscribe RSS

Archive for 9月, 2007

windows環境でのmysql5 9月 25

xamppというLAMPパッケージのお気楽セットをwindowsに開発環境として導入したが、なんだかmysqlで日本語がまともにとおらない。
最近、コマンドラインの人なのでDOS窓から仕事をするとしたらsjis中心にするしかない。
mysqlの日本語ってどうなってんの?といろいろ調べていたら、「実はみんなよくわかっていない。」windows上でutf-8はUnicodeだからOK, といってみたり, 4.1までの事実上、文字コードを気にしてない実装がよかった!などと自分の低スキルをたてに怒ってる人までいる。データベースマネージメントシステムは文字コード変換を吸収するのが機能のひとつなのに。。。まともな解説の決定版はきっとここ だろうな。ここを参考に備忘録

mysql文字コードおさらい

sjis
windowsが主に使う。
ujis
Unix向け。sjis+補助漢字
cp932
sjis+NEC特殊文字など((株)問題他、日本語問題対処。sambaでおなじみ)
eucjpms
ujis+NEC特殊文字
utf8
各国言語が使用可能
ucs2
各国言語が使用可能(Mysql 4.1はucs2を介して文字変換する)
latin1
MySQLデフォルトキャラクターセット

これらを自動変換しようとするからややこしいことになる。

mysqlでどう指定するか

次にmy.cnf(xamppの場合、xampp/mysql/bin内)でのセットパラメータを見る。

character_set_client
クライアントから入力される文字コード
character_set_connection
テーブルアクセスのないサーバ処理の文字コード
character_set_results
返された結果をクライアントに表示する文字コード
chaaracter_set_server
Createte Databaseのデファルト文字コード
character_set_database
Create tableのデフォルト文字コード

例:サーバー側[mysqld] default-characer-set=sjis クライアント側 [mysql] default-character-set=sjis
しかし、これではクライアント側データベースアクセス用モジュールは変更できない。これがいろんな問題を起こす。

mysqlが直接関係しているモジュールに正しく定義する方法は、

  • コンパイル ./configure –with-characterset=xxxx
  • 接続直後に SET NAMES xxxx;
  • mysql起動オプション –skip-character-set-client-handshake (my.cnfに記述可)

ちなみに、あちこちでinit-connect=SET NAMESで変えられるとあるが、絶対に試してないね。できませんでした。
上記の方法でもPHPがどう扱うかは、別の問題のようだ。

なお、(株)問題、ラウンドトリップ問題に対処するにはcp932が推奨されている。。らしい。

その他

メッセージの日本語化は[mysqld] language=japanese-sjis

Category: Windows  | Leave a Comment
玄箱バックアップ・リストア 9月 18

★バックアップ

EMモードで立ち上げる。(# echo -n ‘NGNG’ > /dev/fl3 して、shutdown)

mount /dev/hda1 /mnt
mount /dev/hda3 /mnt2
cd /mnt
tar cvf /mnt2/bkup.tar .

これで/dev/hda1がbkup.tarにバックアップされる。

★リストア

EMモードで起動
好きなサイズにリサイズ
[パーティション作成]
/sbin/mfdisk -e /dev/hda -> パーティションの削除
/sbin/mfdisk -c /dev/hda -> パーティションをメニュー形式で作成
n
p
Partition number (1-4): 1
First cylinder (1-20023, default 1):エンたーキーを押してデフォルト指定
Using default value 1 ここでパーティションナンバーを指定するみたい。下の表を参照
Last cylinder or +size or +sizeM or +sizeK (1-20023, default 20023): +10000M
(シリンダサイズ指定よりMB指定がわかりやすいので、そちらで指定)
この作業を必要な回数繰り返す。下の構成表を参考。

以下のパーティション構成とした。
パーティションNo     マウント予定ポイント    サイズ
1             /mnt(debian化の/になる)      +10000M(10GB)
2             (swap)              +1000M(1G)
3             /mnt2(debian化の/mntになる)   デフォルト(残りすべて)

/dev/hda2はswapなので、’t'でシステムIDを’82′に
‘w’でパーティションテーブルを書き込んで終了

おまじないのSYNC

EMモードのままで以下の処理を継続。

作成したパーティションをフォーマット
mke2fs -j /dev/hda1    ext3でフォーマット
mkswap /dev/hda2     スワップ
mke2fs -j /dev/hda3    ext3でフォーマット

tarボールを
cd /mnt
tar xvf /mnt2/bkup.tar

最後にEMモード解除コマンド(# echo -n ‘OKOK’ > /dev/fl3)

を入れて
reboot
debianモードで起動するのを確認。
以上で終わり。

スワップ領域の設定
/etc/fstabで設定されているのでこの処理は不要だとおもうが、念には念を入れて。
debian化モードに移行して
swapon /dev/hda2
reboot
cat /proc/swaps でスワップ領域の確認

ソフト的なEMモード化 Debianモード>EMモード

※debian2.4化の場合では
echo -n “NGNG” > /dev/fl3
reboot

※2.6化パッチのカーネルでは
echo -n “NGNG” > /dev/mtdblock2
reboot

ハード的なEMモード移行方法その1
玄箱の背面にあるリセットボタンの動作設定
(ボタン長押しでEM化の動作を行うようにする設定)
エディタで書き換え

vi /etc/kuroevtd/resetpress

以下は2.6化を行った際の設定。変更前のデフォルトでは2.4化対応のはず。
#! /bin/sh
/usr/sbin/write_ng > /dev/mtdblock2
shutdown -h now

ハード的なEMモード移行方法その2
玄箱のカーネル差し替えをミスって、起動しなくなっちゃった時等!?
リセットボタンを押しながら電源を入れると、フロントLEDがすべて点滅してビビルが、実はこの点滅のまま使用すると・・・EMモードで動作している。
これでもダメな場合はHDDを取り出して、windowsでフォーマットして再度取り付けて、起動するとEMモードで起動する。

EMモード化された玄箱へのログイン時の注意
EMモード化すると内臓LINUXで起動するため
ネットワーク内にDHCPサーバがあればIPは自動割当てされる 。
(EMモードの時にLAN内にDHCP鯖が無い場合は、192.168.11.150
IPが解らない場合は、玄人志向のファームウェア書き換えツールを起動してIP確認。
ログインに必要なIDとパスは
HG ID:root pass:kuroadmin

EMモードからの復帰 EMモード>Debianモード

※2.4化パッチのカーネルでは
echo -n “OKOK” > /dev/fl3
reboot

※2.6化パッチのカーネルでは(/dev/fl3は不要かもしれませんが、用心のために)
echo -n “OKOK” > /dev/mtdblock2
echo -n “OKOK” > /dev/fl3
reboot

Category: Linux  | Leave a Comment
WEB上カレンダ(Datenator) 9月 13

PHPで動くDatenatorっていうカレンダーソフトがある。日本語化するファイルを作った。「Japanese.zip」をダウンロードして、Datenatorの中のLanguagesディレクトリに入れたら、adminで言語を切り替えられます。どうぞ。

Web2.0はプログラマを復権させる 9月 09

Web2.0を実現するのは誰か?

ここのところ気になることがある。ビジネス雑誌とかにやたらとマッシュアップとか、Web2.0とか、出てる。そんなもんを素人に読ませてどうするのかわからない。
マッシュアップを取り上げると、GoogleのGISに関するAPIとAJAXと他の会社のデータベースをくっつけて新しいサービスを作り出すことなどをいう。それをやっているのはほとんどが「個人的な動き」とビジネス書では説明する。
ふ?ん、「個人的」ねぇ。なら、この記事を書いた人は個人的にそーゆーことができるんだろうか?この記事を読んだどれだけの人が自分でできるのだろうか?「簡単にできます」っていう情報自体聞き書きだろ。
いまインターネットで起きていることは、すべてプログラムがあっての話だ。

フリーウェアの黎明期などからそうで、フリーウェアは多数あるように見えるだろうけれど、それは参照できるところがベクターしかないからそう見えるだけで、書くプログラマーはもの凄く少ない。きちんと調べていないが、体感的に数千人だと思う。

そして、プログラムは書きやすくなっているが、むつかしくなっている。Javaを勉強しただけではプログラムは動かない。TCP/IP, XML, SOAPなどを知らないと他のプログラムとの会話ができない。そして、そこまで勉強するプログラマーはそんなにいない。仕事じゃ、そんなところまで要求されないから。
ろくでもない仕様書の「業務を知り、行間を読め」なんていう理不尽な要求でバグだらけのプログラムをでっちあげるのがせいぜいだ。中国やインドを高い目線からバカにするのは、論理的な仕様書を書けるようになってからにしろよな。

なにも知らないオピニオンリーダ

普通の人は「また、そんなこといって。もっとみんなきちんとしてるよ。」と思ってるだろ。嘘だと思うなら某(どこでもいい)有名インテグレータに「当然、マッシュアップくらい作れますよね?」と聞いてみればいい。わけのわからん専門用語を並べて、うやむやにされる。ほんとうは書けないのだよ。

IT業界で声のでかい人間に限って、ローテク(VB6+ODBC+Oracle)に安住してきて、新しい技術は「リスクが高い、経験がない、会社として受けられない」と平気でいう。彼らによれば大好きなVB6を超えたドットネットも「よく検証しなければならない」そうだ。でもその「検証」の実態はフリーのライターが書いたハウツー市販本をその会社のSEが同じことをやって動きました、というに過ぎない。要に市販本が出なければ「その技術のリスクは高い」と平気でいう会社はたくさんある。(逆も真で、市販本がないプロダクトは売れない。よく覚えておきましょう。)

お客が払っている価値は技術だ、ってことはきれーいに忘れてるか、生産性が高いと損すると思ってる、のか。いやいや、自称経験があるものだって、クズのようなコードを大量に書き散らかし、テストでバグをつぶして、なんとか動くように見せかけたローテクなのかもしれない。
無知、不勉強を意識的か無意識にか、言いつくろう癖のついた人々がIT産業の価値を下げてきたと思う。システムインテグレーションなどでも「コスト把握が大事」とかいってCOCOMOとか、FP法とか、プログラマーをバカにしきった方法論で「生産性」を測定し、当たったとかはずれたとかいっている。この考えの中に「賢いプログラマーほど早く、バグは少なく、ダメプログラマーほど遅く、バグは多い」という定理はカケラもない。現場のPMはよくわかっているから、賢いプログラマー集団を手放さない。これも現場を知らない人間が作り出す机上の空論のひとつだ。

低レベルなスケジューリング、コスト推定の方法しか知らないから、結局、仕事の評価は机に坐っている時間と書いたコードの量となる。これは、ダラダラと効率の悪いプログラムを書くことが評価されるメカニズムだ。

似たようなどうしよーもない類に、プログラムを評論するヤツがいる。そいつらはプログラムを「目利きする」そうだ。この言葉を某会社で聞いたときは卒倒しそうになった。プログラムは鯛や平目みたいな天然の産物かい?あまりにもプログラム作成の現場を知らないから、次々に出てくるものが天然資源にでも見えるんだろうなぁ。まちがいなく「目利き」する奴は、その言葉からしてドシロートを証明している。プログラムを書くということは、それだけの理由があるから書くわけで、ドシロートの一方的な濁った目の観点で書くわけじゃない。せいぜいいえることは、「私の要件にあわない」であり、「このプログラムはダメ」じゃないだろう。

プログラマーの地位

世の中がオープンソースだといったところでコードを書くことで貢献できる人間は、ほんの一握り。そして悲しいことにそいつらは日本社会からまるで評価されていない。「たかがプログラマー」とドシロートの「目利き」にまで、いわれる。

これは推測だが、一昔前、COBOLとかFORTRANとかPL/Iとかで単純な処理を大量に書いていた時代のプログラマは、あまり頭脳は必要なかった。どちらかというとコーダーでよかった。
設計する人が偉くみえた。しかし、オープンソースになって様相はかわった。仕様書をコードにするだけのコーダーはいるにはいるが、小さい案件、逆にものすごく専門的な案件ではプログラマーじゃないと裁けないものが増えてきた。ところが世の中の人には「コーダー」と「SE」と「(真の)プログラマー」と「単なる評論家」の区別がつかない。これが悲劇なのではないだろうか。

かくいう俺はどうかというと、普段はビジネスをしているが、時間さえあれば、(もうトシだが)プログラミング技術を追いかけている。このblogにメモ書きをたくさん書いているとおりだ。自分の書きたいプログラムを書けるプログラマーが、これからの「神」になるはずだと、ビジネスも知ったエンジニアとして思う。現役をとうに過ぎてるが、大事な投資や苦労して作ったプログラムの価値を知るためにはブラッシュアップするしかない、と思ってる。プログラムを書けない人間のプログラムに対する評価なんか聞きたくない。

Web2.0とはプログラムの時代

繰り返す。Web2.0とかマッシュアップの本質はプログラムのことだ。決して、なにも知らない素人の個人ができるものではない。もう「知が力」の時代はそこまできている。知自体には善悪はない。PSPをハックするのもLinuxの新しいパッケージングを作るのも、p2pのファイル配布プログラムを書くのも、JavaAppletとWebサーバの連携プログラムを書くのも同じ分野とセンスの必要な技術だ。

そして多くのマッシュアップが証明したことは、個人プログラマーが「おもしろいかな」と思ってやったことがビジネスに即、かわるということだ。自分でやるのなら、なんのコストも発生しないで、いくらでも試せる。いくらでも羽ばたいていける。

真のプログラマー諸君よ、あなたにその日が来るまで、決して投げ出さず楽しいと思うことを試み続けてほしい。

私がこうした文章を書くのも、時々、プログラミングを他人に教えてみて、プログラマーの才能を持つ人がいかに少ないか、知っているからだ。才能ある人が、プログラムをおもしろいと思ってプログラマーになったのに、安い給料、貶められた地位にいることが長年、残念で悲しかったから。しかし、ようやく、ようやく、Web2.0は違う時代になりそうだ。

ただ、、、、英語は勉強しろよ。

顔が命は吉徳の雛人形だけじゃないようだ 9月 07

いやぁ、この記事 に笑ってしまった。もともと、こういうサイト があるにもかかわらず、芸能人は整形なんかしていない、顔のとおり心もきれい!などという都市伝説を信じているヤツが多いことに驚いたことがある。
しかし、整形した上に4時間の化粧、いや、そりゃもう顔を創作してるんでしょう。さすが、芸能人はアーティストだわ。もう、顔は輪郭だけあればいいんだろうな。

ところで、伊達杏子っていうバカなタレントがセカンドライフとかいうゲームの中で復活したそうだ。セカンドライフって電通さんが手をかえ品をかえ流行らせようとがんばっているサイトらしい。オレは見に行かないけどね。忙しいもん。誰かに「セカンドライフで金儲けしたい。」って聞かれたから「じゃぁ、神社作って賽銭箱置いとけ」って教えてあげたけどね。

俺がそこになんで未来を見ないかっていうと、アメリカじゃeverquest(日本語版)というソニーがやってるオンラインゲーム(中世時代を模した仮想サイト)がすでに有名で、自殺者は出るし、ヒッキー続出。アカウントごとオークションでガンガン売られてる。オンラインゲームが社会問題になっているにもかかわらず、日本では明るい面ばかりが取り上げられる。
ときおり、韓国でゲームやりすぎて自殺したとか、中国でゲーム中毒者を軍隊に放り込むなんてことが報道されるが、対岸の火事って感じだ。でもそれは絶対におかしい。もともと依存心の強い国民性の日本でそんなことが起きていないハズがない。年に3万人も自殺する国だぜ。

報道の偏りに作為を感じないIT系のプロはいないだろ。まったく報道されないところに胡散臭さが漂うと思わない? ゲーム会社ってマスコミの大スポンサーだもん。ネガティブな報道は当面出てこないんだろうね。まるで公害や薬物汚染が広まる前のように。

Mac OSX パッケージツール 9月 07

Mac OSX 10.3.9を使っている。購入して半年たった時に次のバージョンが出た。Blogに「アップグレード処置もないなんて、ひどい」と書いたら、自称「正しいことを教えてくれる人」達(俺から見たら単なるアップル・マンセー人)から、「アップルにお金を払って黙って買うのが正しい道です。つべこべいうな」とたくさんご意見をいただいた。非常に多くの人にソフトのアップグレードに金を払わんのはバカといわれた。それ以来、俺の考えは間違ってるのだろう、と思っていた。

が、世の中はそう思ってない人も多いようだ。OSXのベースはDarwinというApple独自のOSだがFree BSDを基盤としている。そのFree BSDにはパッケージ管理ツールportというものがある。Linux, Free BSDではパッケージ管理ツールで次のバージョンへグレードアップできる。使いたいものを導入し用済みソフトは削除できる。それが今のUNIX,Linux界のデファクト・スタンダードだ。WindowsやMacが時代遅れだ。 もっともOSX版パッケージ管理ツールを作った人々もおり、ツール名をMacportという。
もっともアップル・マンセー人からすれば、OSXにそういうパッケージ管理ツールがついていないことも、Appleが正しく、カネ払ってGNUソフトを買いたいんだろう。アップル・マンセー人からするとMacportは天敵かも知れない。あやうし、Macport。狂信者につぶされないことを祈る。

さて禁断のツールであるMacportの使い方だが、
どこかのアングラ(ウソ)サイトからインストールしてください。次に

export PATH=/opt/local/bin:/opt/local/sbin/:$PATH
export MANPATH=/opt/local/man:$MANPATH

を.bashrcに書いておく。そして、
sudo port selfupdate
sudo port  sync
をやっとく。ソフトウェアリストは定期的にアップデートするべく、syncはしょっちゅうやったほうがいい。

rubyの古いバージョンはOSXにふくまれているが、アップデートはされていない。portコマンドでやれば簡単に更新できる。(Javaは少し古いタイミングでアップデートされるよね。)

sudo port search ruby

で探せる。

インストールは、

sudo port install ruby

アンインストールは

sudo port uninstall ruby

こうやってきれいにライブラリーの管理ができるのだ。Appleが放置しているソフトウェア管理をportはやってくれる。ちなみになにいれたかわかんなくなったら、

sudo port installed

すでに導入されているパッケージには重要なものがいーぱいあるから消さないようにね。
さて、rubyを削除してPHPを導入するか。

mysql操作(1) 9月 06

データベース作る
create database hogedb ;

確認
show databases;

ユーザー作る
grant select,insert,delete,update,create,drop,file,alter,index on *.* to hogeuser identified by ‘パスワード’;
flush privileges;

ユーザーを消す
use mysql;
delete from user where user=’ユーザー名’ and host=’localhost’;
delete from db where user=’ユーザー名’ and host=’localhost’;
delete from tables_priv where user=’ユーザー名’ and host=’localhost’;
delete from columns_priv where user=’ユーザー名’ and host=’localhost’;
flush privileges;

テーブル作成
(作れる属性)

  • int / integer    4 バイト整数
  •     smailint         2 バイト整数
  •     bigint / int8    8 バイト整数
  •     float            浮動小数点
  •     double / real    倍精度浮動小数点
  •     date             日付
  •     time             時間
  •     timestamp        日付時間
  •     char(文字数)     固定長文字列  (最大 256 文字)
  •     varchar(文字数)  可変長文字列  (最大 256 文字)
  •     text             ラージ文字列  (最大 65535 文字)
  •     mediumtext       ラージ文字列  (最大 1677215 文字)
  •     largetext        ラージ文字列  (最大 4294967295 文字)
  •     blob             ラージバイナリ(最大 65535 bytes)
  •     mediumblob       ラージバイナリ(最大 1677215 bytes)
  •     largeblob        ラージバイナリ(最大 4294967295 bytes)

create table hogetable (
   key1           char(008)     primary key,
   data1          int8,
   data2          int8,
   data3          int8
 ) type=InnoDB;

削除
drop table hogetable;

データインポート
load data infile’~/import.dat’ into table hogetable fields terminated by ‘,’ lines terminated by ‘\n’;

 

PHPバッチ 9月 06

Perlは素晴らしい言語だと思う。なによりも多くのCGIが書かれ、テキスト処理がなされ、システム運用がなされている。前提となるソフト(依存性)が少ないことが多くの場面で使われる理由の隠されたひとつだと思う。
しかし、先発だけに苦しい点もあるオブジェクト指向、関数の実装はけっこう苦しいと思う。データベースの接続も、なかなか苦労してるように思う。
最近の私は、やっぱりPHPのほうが書きやすい。後発の強みだとは思う。なので、PHPでテキスト処理などもしたくなる。
PHP5-CLIというパッケージが、Debianにはある。ありがとう。これでPHP5をバッチで動かすことができる。