2013年7月4日木曜日

iOS7の新機能

私も今、流行りのiPhoneを持っていますが、老眼になった年寄りにとっては、Androidに比べて画面が小さくて、文字が見にくいのが、難点です。
先日、アップルのワールドデベロッパーカンファレンスのビデオを見ましたが、iOS7のsafariから、新しくwebのレイアウトを指定するスタイルシートが、加わるようです。
既存のhtmlウェブページに手をくわえず、スタイルシートだけ追加するだけで、対応可能になります。
iPhoneなどでは、このレイアウ情報を使って、文章レイアウトに沿って自在に文字を大きくできるのではないかと思っています。
iPhone5は、iOS7にアップグレード可能だそうなので、9月が楽しみです





2013年2月11日月曜日

ジョブスの実像

スティーブジョブスは、コンピュータ業界のカリスマとしてマスコミを賑わすことが多いですが、エンジニアとしては、たくさんの失敗を繰り返しました。この事が書かれているのがPHPビジネス新書の「スティーブ・ジョブス失敗を勝利に変える底力」です。
このなかには、アッピル社から離れることになった経緯やピクサーの成功、マイクロソフトとの戦いなど、私がコンピュータ業界を見ていて知っていることだけでなく、そんな事があったのかと改めて知ることが書かれていました。
この本は、スティーブジョブスだけでは、パソコン業界の栄枯盛衰が書いており、大変参考になりますので、一読しては如何でしょうか?

2013年1月20日日曜日

Webのgetメソッドで文字コード取得方法

ブラウザのURLから「http://localhost:8080/Yawdba1.0/Test?a=漢字」などと入力した指示を、サーブレットで処理する場合、パラメータaの値を解析する場合、上のように日本語文字が含まれていると、処理する文字コードが、ブラウザ毎にshiftJISだったり、unicodeだったりして文字化けが発生します。くわしくは、私のブログの以下をご覧下さい。Servletでのパラメータ解析(1)Servletでのパラメータ解析(2)Servletでのパラメータ解析(3)
これは、WebブラウザはURLに日本語文字コードを含む場合、URLエンコーディング(%xx形式)を施してWebサーバに送信します。このときのエンコーディング形式がshiftJISだったりunicodeだったりすることから、javaプログラムでは、以下の文字コード変換をしないと適切にパラメータを取得することはできません。
 
しかし、HTML formからのgetメソッド発行と異なり、直接ブラウザのURLから指定した場合には、各ブラウザ種別毎にの文字コードが異なります。例えば、OperaではJISコード、chromeでは、UTF-8, firefoxでは、shiftJISになっていたりします。

通常は、次のようなjavaプログラムで対応することが一般的かと思います。

     String p = req.getParameter("a");
  String v = new String(p.getBytes("iso-8859-1"),"JISAutoDetect");

これは、パラメータaの値が格納されているjavaの文字列変数であるname、自動的に文字コード(shiftJISやunicode)を判断して、java文字列に変換するものです。しかし、一体どの文字コードで変換されているか完全に判断することは不可能です。
そこで、ブラウザによらず文字コードを自動的に判断する方法を考えました。

この方法は、自動的に文字コードを判断するために、文字コードを判断するためのパラメータをgetメソッドに追加しました。例えば、

    http://localhost:8080/Yawdba1.0/Test?cs=あ&a=漢字

 のようにします。サーブレットサイドでは、getParametercでcsと言うパラメータの値を調査します。そのパラメータの値は、日本語の「あ」と取り決めておき、その値が実際どのコード体系で表現できるか判断することで、入力された文字コード体系の判別が可能となります。
ちなみ、Yawdba1.0では、以下コードで判別しています。

  String  value =  req.getParameter("cs");
  String  v     = "";

  /* value文字列内の%xx文字列を1バイト文字に変換する */
  for(int i=0; i < value.length();) {
    char ch1, ch2;
    if(value.charAt(i) == '%' &&

       i+2 < value.length()) {
      ch1 = value.charAt(i+1);
      ch2 = value.charAt(i+2);       

     v += (ch1 <='9'?(ch1-'0'):(ch1-'A'+10))*16 +
       (ch2 <='9'?(ch2-'0'):(ch2-'A'+10));
      i += 3;
    }
    else {
      v += value.charAt(i);
      i++;
    }
  }
  if(v.equals("\202\240"))     /* 82 A0 */
    char_set = "shiftjis";    // シフトJIS 
  else if(v.equals("\343\201\202"))  /* E3 81 82 */
    char_set = "utf8";         // UTF-8
  else if(v.equals("\244\242"))/* A4 A2 */
    char_set = "euc" ;         // EUC
  else if(v.equals("\033\044\102\044\042\033\050\102"))
                               /* $B  24 22 (B */
    char_set = Code.jis;       //JISコード


あとは、判別した文字コードにしたがって、
    String v = new String(p.getBytes("iso-8859-1"),"Windows-31J");
のように文字コード変換します。
 
 

2013年1月15日火曜日

Windows8 Metroアプリって将来の業務ソフト?

10月にWindows8が販売開始されました。私は、MacbookAirのVirtualBoxにWindows8のReleaseCandidateで動作を確認しています。
ちなみに、現在のVirtualBoxのバージョンは、4.2.6ですが、これが一番相性が良いようで、MacBook Airの画面サイズでWindows8を表示することもですますし、外部ディスプレイで解像度を上げても、正しく表示することができます。
Windows8では、従来のデスクトップ上のアプリケーションと異なるメトロアプリと呼ばれる新しい形のアプリケーション開発環境が登場しました。従来の開発環境では、VBやVCなどのプログラム言語を中心でしたが、メトロアプリでは、従来からの開発方法に加えてHTML5とJavascriptによる開発方法が追加されました。
これは、従来のパソコン内でしか動作しないアプリケーションから、ネットワーク上のWebからサービスを提供する形態に変わることを目指したように思われます。Windows8のメトロUIは、WindowsXPデスクトップに慣れ親しんだ企業ユーザーには評判は良くないように思われますが、パソコン自体が企業内のツールとしてパソコンの形態からタブレットの形態に変われば、このUIも使われるようになるのかも知れません。
いずれにしても、現状では、業務システムのメトロアプリケーションは、少ないようですが、業務ASPサービスなどの業務アプリケーションがまず提供されるようになるまもしれません。
今後、どのような業務アプリケーションが出てくるのか楽しみです。


2013年1月10日木曜日

AppleⅡについて

先日のブログでMacについて書いたので、昔、アメリカ出張した際に買ったAppleについて書きたいと思います。
非常に昔の事なので、いくらだったかは覚えていませんが、1ドル230円のレートでフロッピーが1台10万円、本体が40万円くらいしたと思います。当時は、アメリカ出張で会社からの出張費がたくさん出たので買えたものでした。

当時のパソコンとしては、ROM上に搭載されたBasic言語のゲームを楽しむものでしたが、Appleには、表計算ソフトやPasicalシステム開発環境までも揃っていました。
確か、マニュアルにはCPU命令やOSのコードも一部公開されていたと思います。
このような事から、コンピュータマニアの間でAppleを使ったシステムが、多く開発されました。詳しくは、ここをご覧下さい。
私が、買ったAppleは、英語版でしたが、その後日本語版Applrが販売されました。日本語版では、半角カタカナが表示されるようになりました。半角カタカナを表示するために、文字コードの範囲を7ビットから、8ビットに拡張する必要があります。私のブログのパソコン昔話に関連する内容があります。
英語版のAppleでは、キーボードからの信号データである1バイトのうち先頭1ビットをチャタリングビットと言ってキーが押された状態かどうか調べるビットになっていたので、日本語化には、回路設計が必要だったと聞いています。昔は、日本語対応するだけでも結構難しかったようです。
思えば、C言語のcharも、その昔は、signed charとなっていて、負の場合には、無効となっており実質7ビット表現となっていました。英語版では、文字コードとして7ビットの範囲で済むので、昔は、残りの1ビットをチャタリングビットとして利用していたかもしれません。。

2013年1月6日日曜日

Linux/Macについて

iPhoneなどのアプリケーションの開発を勉強するために、昨年の7月にMacBook Airを買いました。昔に、Mac関連のソフト開発をしたことがありましたが、そのころの開発環境とは全く異なり、様々なツールキットがあるようです。
構造も昔のMacというよりは、Linux/Unixに近いようです。
昔、ウィンドウシステムを開発するには、LinuxやUnixのようなプロセス起動方式は不向きであり、Macのようなスレッドを使ったシステムの方が向いていると書かれた論文もあったようです。新しいUnixなどでもスレッドを使っているのか分かりませんが、Windows開発環境以外には、Liunxの開発環境も熟知する必要があるかも知れません。
VirtualBoxなどの仮想環境でLinuxも動かすことが可能ですから、MacBookで確認したいと思います。

2013年1月4日金曜日

長く休眠していましたが再開したいと思います。

後1年ちょっとで定年になるのを期に、このブログを再開したいと思います。以前、YawdbaというWebデーターベースシステムを開発していることを書きましたが、その後のWeb開発状況が変わってきたので、Yawdbaについて方向性が変わってきています。
以前の話では、javaのサーブレットで、ブラウザに返すHTMLによりテーブル表示など行うようにしていましが、Ajaxの有効性が判明したり、その後HTML5が公開されたことから、Web画面表示をHTMLベースからJavascriptベースの変えようと思っています。
そのため、Yawdbaで表示する数値フィールドや日付フィールド、テーブル表示などをjavascriptの関数で生成できないか考えています。そこで、javascriptによるWeb部品生成プラットフォームを開発しています。
4.1.Yawdba JavaScript Toolにインタフェース仕様を書き出しました。できれば、グラフ表示のプラットフォームなどについても開発したいと思います。良かったらご覧ください。

また、このブログでは、今までコンピュータに関する話を多く書いていましたが、それ以外の話題でも書いていきたいと思います。よろしくお願いします。