[C++]C++のバイブルとISBN。
最近JavaからC++に移ったのだが、
Javaに比べて美しく書けないし、
CからC++に移った人のソースコードが読みにくい
(JavaからC++に移った人のソースは読みやすい)
これはJava書きとC書きの間に大きな隔たりがあるのじゃないだろうか?と考える。
昔関わったプロジェクトでC書きが納品したプログラムの修正をしたことがあったが、
読みづらく根を上げたことがあった。
(プロジェクトでは「古文書」と呼ばれていた)
あの時は、C書きの人のソースが汚いだけかと思っていたが、
もしかしたらC書きの間ではメジャーな書き方なのかもしれない。
やはりC++のバイブル的なものを一読しなかればいけないだろうと思い、
少し調べてみると、
Scott Meyersの「Effective C++」がバイブルだという話だ。
(Gofのデザパタ本も読んだほうがいいんだろうが、まずはコーディングバイブル)
さー買うぜ!って思い立ち本屋に直行。
見つけたEffective C++ なんだか More Effective C++ と書いてある、
気にせず購入しようとしたら、お金が足りない!
その時は購入をあきらめ、家に帰ってからAmazonで注文しようとすると、
どうもさっき本屋で見たものとは表紙が違う。
よくよくAmazonのコメント欄を見ていくと、
どうやらScotto MeyersのEffective C++は有名本でもあるらしく、
数人の訳者が訳本を出しているようだ。
中にはひどい訳本もあるらしく、私が買おうとしていたMore Effective C++は
かなり評判が悪い。
そういったコメントの中で吉川邦夫氏という名前が見つかる、
彼が訳者の本は評判が良いようだ。
検索し見比べてみると、Amazonの本に対する評価も彼の本だけ満点がついている。
よし、吉川邦夫氏訳本を買うぞーとAmazonで注文しようとするも在庫切れ、
う~ん、流石吉川邦夫(笑)
近所の書店で注文するために、
AmazonからISBNコードを抽出。
そういえば、ISBNコードって書籍出版物に対するIDコードなんだろうけど、
ISBN-10とISBN-13があるんだね。
どう違うのだろう?両方ともメモって書店に渡さないと分からないのだろうか?
気になって調べてみると
ISBN-10は旧コード体系
ISBN-13は新コード体系
ということだそうだ
どうやら旧コードの10桁ISBNでは足りなくなったので、
13桁にしたようだ。
よって13桁のほうを書店に持っていけば問題ない。
以下本当にどうでもよい記述。
-————————————————
ちなみに吉川邦夫氏のEffective C++ ISBNは
ISBN-10 : 4756118089
ISBN-13 : 978-4756118080
ISBN-10のコード体系は
A BBBB CCCC D
A = 言語コード(日本語だと4)
[Google]Google ChromeとV8エンジン
いつもどおりiGoogleでNEWS記事を確認しようとすると
変なリンクがGoogleのトップページに貼ってあることに気づいた。
Chrome?
検索BOXに投げ込み調べてみると、
新しくGoogleが開発したWebブラウザだそうだ。
おお、そんなものまで作ったのか!
と
え・・・またブラウザ増えるのか・・・やだなぁ
両方の感想がポっとでた。
とりあえず、インストールして触ってみて気になった点をいくつか
プロキシ設定などはIEと共有している。
GoogleツールバーをインストールしようとするとFireFox2と判断され、出来ない
(FireFox2のダウンロードを促される)
開発/管理の下にJavaScriptデバッガとコンソールが標準実装されている。
(もし使い勝手がよければFireFox3 + FireBugに変わる
JavaScript開発のディファクトスタンダートにとって代わるかもしれない。
JavaScriptエンジンはV8(Google独自エンジン)
GoogleGearsの設定がデフォルトで入っている。
シークレットモードがある(ブラウザに履歴などを残さずにブラウジングすることが出来る)
JavaScriptエンジンが滅茶苦茶早い。
個人的に気になったのは、JavaScript関係とシークレットモードかな
他にも色々機能はあるみたいだけど、
とりあえずこんなもの。
Chrome用Googleツールバーが出来るまでは、とりあえず乗り換える気はないかな。
あ、でもGoogleNoteBookやRSSリーダー使うときは使うかも。
とりあえずjavaScriptはべらぼうに早い。
画像のDLが重いようなAjaxアプリでは体感出来ないが、
処理に時間がかかるようなアプリ(GoogleDocsのスプレッドシート編集など)をしていると結構体感出来る。
JavaScriptが早いという証左に以下サイトがある。
Google ChromeのJavaScriptエンジンV8の性能評価
参照すると、爆速がうたい文句のFireFox3.0より9倍近く早い。
(といっても既存のネット上のAjaxアプリが軒並み早くなるわけじゃない。
DL速度+JavaScript処理速度=ユーザーが感じるAjax処理速度なのだから)
とここまでがそこそこ肯定的意見。
以下否定的
またブラウザが増える!(Web屋としての叫び)
最近の仕事はWeb屋じゃないから、多少他人事になってしまうけど。
LAMPだと基本全ブラウザ対応、
交渉次第でIE6~IE7とFireFox2.0とFireFox3.0対応が標準となる
イントラのStruts系フレームワークの業務アプリだとIEしばりもしくはIE7までしばり
イントラ系はまだいい、契約時に使用ブラウザを決定してしまえばいいんだから、
ただECサイトとかだと、顧客としては全ブラウザに対応してくれというし、
こちらもしてあげたい。
描画エンジンもJavaScriptエンジンも既存のものと違うとなると
怖いところはある。
ただjavaScriptエンジン(V8)に関しては、
今のままでいけるのではないだろうか。
現在prototype.jsなどで書かれている
IEとFireFox両方対応のJavaScript(※1)があるのだけど、
それをV8エンジンは理解してくれると思う。
理由としては
FireFoxとGoogleが今まで仲良くしていたこと。
FireFoxはW3C準拠であること、
Geekの集団GoogleがW3Cに準拠しないわけないこと
よってFireFoxで動くものはV8エンジンでも動く・・・と思う。(※2)
少なくとも動くようには動いていくはずだ、現行動かないとしてもバグリストに追記されるはず。
HTML解釈スタイルシートに関して、
こちらもFireFoxと同じようになると・・・信じたいが、
FireFoxにMozira独自のプロパティがあったりするのが少し怖い。
※1
テーブル要素操作などでIEとFireFoxで微妙な差異があるのだが、
prototype.jsはうまい具合に両方で動くものを書いている。
※2
IEだとActivXを使ってローカルファイルにアクセスすることが出来る。
FireFoxだと別のファイルストリームにアクセスする必要がある。
そんなわけで、全てのJavaScriptがChromeで動くわけではないが、
ほぼ全てといってもいいのではないだろうか。
Oracle 10g Express Edition でチト困った
Oracle 10g Express Edition は
AL32UTF8 WE8MSWIN1252 のみのCHARACTER SETしか使用できない
資料:
Oracle® Database Express Edition
10 Oracle Database XE Character and Language Configurations
これで非常に困った。
現在数社で連携をとってWebアプリを開発しているのだけど、
他社が作った機能の検証用テストデータとしてINSERT文が書かれたSQLファイルを送付してもらった。
いざINSERTしてみると、
ORA-12899:
列"hoge".“foo”.“bar"の値が大きすぎます
(実際: 60、最大: 40)
とOracleに怒られ、データが入らない箇所がある。
慌てて文字数をカウントしたが、データに間違いはない。
これはなんだ?と思ったところで、
思い当たったのが、DBモデルのバージョンが違うのではないか?ということ
誤解を招く言い方かもしれないので補足を書くと、
上記の違いとはDBのバージョンが違うという意味ではない、
今回のプロジェクトでは(あってはならないことなんだけども)、
客先要求の追加などで、テーブルの名前が変わったり、テーブル自体が消えてたりなどの数回のモデルチェンジが行われているのだ。
そして何度かデータの最大文字数も変更されている。
数社で連携をとって開発している中でのモデルチェンジだったので、
もしかしたら各社でバージョンが違うのではないのか?
そのバージョンでは文字数定義が違うのではないか?と思った。
細かい敬意を省くために結果を述べると**「モデルのバージョンは同じ」だった。
原因は弊社と他社のDBの差にあったのだ。
私の会社ではWindows版のOracle10gサーバーが見つからなかったので、
他社検証用として急いでOracle10g Express Editionを導入した。
無料で使える10gということでワクワクしながら環境構築していったのだが、
構築過程でサービス名が一つしか設定できないことを知る。
まぁこれは、今回プロジェクト限りで潰してもいいDBなので、問題はない。
それから上記の問題の発生である。
XEのインストールウィザードで文字コードの選択が出てこなかったので考えてなかったのだけど
(浅薄だなぁ・・・)
文字コードの差が問題だということが結果としてわかった。
現在Oracle10g正式版は何種類かの文字コードをカバーしている。
そしてデフォルトインストールすると、文字コードはSHIFT_JIS(JA16SJIS)になるのだが、
10gXEはUTF8(AL32UTF8)**がデフォルトだ、
仕様書 を見ると、WE8MSWIN1252というコードも選択出来るそうなのだがこの文字コード自体初見である。
じゃあ、何が困るのか?
プログラマな人はとっくに原因なんて分かっていると思うけど、
プログラマじゃない人も世の中にはいるわけで・・・説明を続けると、
どうやら今回のプロジェクトにおいて10gを使用している所はすべてSHIFT_JISで設計されている。
(日本国内のイントラネット的なWebシステムなのでこれはまぁ、いいんじゃないかな・・・怒る人もいるだろうけど)
そうすると型VARCHAR2での日本語全角20文字MAX文字数の設計のは
VARCHAR2 = 40[Byte]