2011年11月27日

Flashの終焉


11/9とうとうAdobeは、Flashを捨てHTML5に注力することを決めましたね。
如何にデザイナーの心を取り込むかに掛かっていたのですが、オープンフォーマットのHTML5には敵わなかったわけです。早々に方針転換したAdobeはさすがともいえますが、彼らにとってタイミングを逸すると屋台骨がぐらつく事になりかねません。
MSのSilverlightしかり、ライバルを蹴散らしてHTML5が次世代のグラフィック仕様となったわけで、混乱することなくオープンな統一フォーマットは、ディストリビュータやユーザにとってたいへん良いことだと思います。

旭川SOHO協議会創立10周年記念


先日金曜日、特別講演会&ビジネスマッチング交流会に参加してきました。
場所は、旭川産業創造プラザ 。2次会は、3・6街でした。
三鷹SOHO倶楽部からも代表者の斉藤さんがこられて盛況でした。
10年程前全国SOHO組織がいっぱいできましたが、今も活動が続いているのはごく珍しいそうです。
10年も続くなんてすごいですね。そして皆さんパワフル!です。

Java Advent Calendar 2011


Java Advent Calendar 2011(躊躇してはいけない。いますぐ参加するんだ!)に参加します。
~…Java をネタにしたブログを公開してしまいましょう。12 月 1 日から登録して、人数が多ければクリスマスがすぎてしまってもかまいません。ぜひ、みんなでブログを更新しましょう。~
Advent Calendarとは、ここ 。
出遅れて~12/26日分なんですけどね。(笑)良かったら見に来てください。

2011年11月23日

便利なWindowsシステムメンテナンスツール


便利なシステムメンテナンスツールを幾つかご紹介。
「スタートアップ管理」「プロセスの管理」「アンインストールの管理」「レジストリクリーナー」「重複ファイルの検出」「空フォルダの検出」「ディスクの解析」「復元」「ファイルの完全削除」などが用意されている。個人かつ非商用に限り無償で利用可能.
僕のレジストリーは、リンク切れ等不整合が3000個以上あった。色々ソフトを試すことが多いからインストールしたり削除してきたからだろうけど。これだけでも随分軽くなったような気がする。
タスクやプロセスの管理、パフォーマンスの監視といったWindows標準の「タスク マネージャ」と同等の機能を網羅しつつ、さらにIEアドオンやドライバーの詳細情報の表示・削除など、「タスク マネージャ」では閲覧できないさまざまなシステム情報を管理できる。任意のタイミングで保存しておいたPC内の全ファイル情報やレジストリの状態と、現在の状態を比較して変更点を確認できる機能も備える。
友達から教えて貰ったシステムツール、自分のPCに見慣れないプログラムが動いている場合も多いく実際削除しなくても、不要なプロセスや怪しいプロセスをチェックすることが出来るので精神衛生的にも良い重宝してます。
Dependency Walker is a free utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules. For each module found, it lists all the functions that are exported by that module, and which of those functions are actually being called by other modules. Another view displays the minimum set of required files, along with detailed information about each file including a full path to the file, base address, version numbers, machine type, debug information, and more.
VisualStudioやPlatformSDKなどに同梱されているんだけど、上記のURLからも取得することが出来る。ファイルをドロップするだけで、それが必要なファイル情報を得ることが出来る。最近はますますシステムが複雑化している。特に開発者だったら自作のプログラムは他のモジュールを必要としない様に作りたい。けれど最近のIDEは余計な設定が多くて例えば、VisualStudioではMS系のDLLがないと動かないデフォルトになってる。コンパイルオプション/リンクオプションを操作してビルドしたら、完成したEXEファイルをこのツールにドロップしてチェックすると良いだろう。

2011年11月22日

JavaFX2.0について


JavaFX Rich Client Platform

FXについて夏に開かれた札幌Java7セミナーに行ったときに、櫻庭さんが解説していたのだけれど・・・ずっと動かしたいと思いつつなかなか時間が取れなかった。
JavaFX2.0 をインストールして使ってみました。
まず開発環境を準備しようと思い、NetBeans7.1 bataになってデフォルトでFXをサポートしたと聞いて導入してみました。

NetBeansを使ったのは約10年ぶりだろうか?当時のPC環境ではpure Javaで動くIDEとして高機能だけどメモリを使って動作が緩慢だった。
普段EclipseでJavaを動かしているのだけれど比べてそんなに違和感はないですね。フルバージョンではJavaだけでなくJavaEEのApplication ServerリファンレスであるGlassFish Serverもインストール出来て、C/C++、PHPまでデバック出来るようです、今度PHPをデバックするときに使ってみよう。
FXの設定の仕方は、Setting Up NetBeans IDE With JavaFX 2.0を参考にしてください。
予め色々サンプルが入っているが、FXのサンプルを選んで動かしてみました。



あっさり色々動きました。結構色々できるようで面白い。
外部サンプルもあります。これも是非入れてみて下さい。

JAVAFX 2.0 SAMPLES

この中で素晴らしいのは
Ensemble.htmlです、FXがどんな事が出来るかを見ることが出来ます。



単体アプリも作れるのですが、Web上ではこれからディフェクトになるHTML5とどうすみ分けるつもりだろうか?が疑問ではありますが・・・やっぱりUIは面白い。使いやすいデザインツールが出来れば面白くなるのではと思います。
もっと FXについて勉強したい人は、櫻庭 祐一さんの技術評論社の記事か、Blogが詳しいですよ。

2011年11月20日

プロトコル入門


プロトコルとはなんぞやということを約30分くらいのプレゼンテーションに纏めてみました。
これもちょっと前(今年の夏)に、社会人向けの技術者交流会で発表したものです。
会場は旭川市が運営している買物公園通りにある「まちこみゅ」さん。
基本から始まって、ちょっと後半色々と話が拡散気味ではありますが
自分の経験してきた下記などについても軽く説明しました。
① HDLC通信プロトコル・・・銀行の役席者向け情報端末にドライバを書いた話。
② 自動車の車載メータ制御プロトコル・・・トヨタ自動車車載マイコンに各種プロトコルを設計した話。
③ REST・・・・RESTもプロトコルの一種だ!として画像ファイルのAjax的な取り扱い方を設計した時の話。

Androidゲームプログラミング教室


少し前に実施した高校生向けの1時間体験教室のプレゼン資料です。
初めてpreziでつくってみましたが、簡単でなかなか面白いですね。

2011年11月19日

Microsoft Visual Studio LightSwitch 2011


Microsoft Visual Studio LightSwitch 2011を使ってみました。
この新製品は2011年8月に販売が開始、通常パッケージ版の参考価格は3万7800円。2011年12月31日まではキャンペーン価格で約33%引きだそうです。
現在は、Visual Studio 2010の上で動くテンプレートになっており、実際インストールしてみると.NET Framework 4.0とVS2010がまず最初にインストールされます。

LightSwitchは、ビジネス・アプリケーション向けのRAD(Rapid Application Development)ツールで、①データ・エンティティの定義 ②画面の定義 ③実行、テスト ④配置の順にほとんどコードを書かなくてもある程度のWebブラウザを使った業務アプリの作成を行う事ができます。
最後の配置先で、ローカルだけでなくWebサーバやクラウド上にも配置できる。また、データベースだけSQL Azureにすることも可能。つまりWindowsのクラウドサービスWindows Azure Platformに繋げるローカルの開発ツールとしてVisual Studioを使い自社のサービスを強力に牽引していこうという意図が見えます。
実際試用したところ、LightSwitchはVisual StudioやMicrosoft Accessを使った事のある人であればほぼ違和感なく扱えます。特別な処理をやりたければ、C#やVBのどちらかでカスタマイズも可能であるので過去に多少なりともそれらのプログラミング経験があれば敷居が低く選択肢としては当然ありですね。
おなじくWebアプリケーションプラットフォームサービスのGAE(Google App Engine)やAWS(Amazon Web Services)の新規にSDKを憶えるより導入はスムーズであると云えます。
余りにUIもそっくりなところがあるのでAccessの立ち位置が危うい感じがするが・・・、MSがクラウドサービスを伸ばしたいのであれば至極もっともな方法だと思われる。だがそれでも分散処理が要求される高い負荷が予想されるサイトでは、GAEのMapReduceもHadoopなどの分散処理とAjaxと相性の良いオープンな技術を使ったプラットフォームは魅力であろうし、またAWSのRed Hat Linux、Ubuntu、SolarisなどのOSが自由に利用できる環境も魅力であり続けるでしょう。
Microsoftは、良いアプリケーションやツールを作るが、どれもWindowsにディペンドしている。この大方針が揺らがない限りある程度PC OSの売り上げは安泰だが、クラウドプラットフォームサービスのシェアは頭打ちかもしれない。一昔前米国内の独禁法でOS部門とAPPS部門を分離するかどうか揉めたことが、あるが僕は本来そうすべきだと思います。
そうすればAPPS部門もWindowsの売り上げに貢献する為に働かなくて済むしLinux版Officeなど出てきたはずだと思います。AppleでいうところのClaris Corporation(現:FileMaker, Inc.)みたいにね。

2011年11月15日

Java7 – Project Coin

Java7がリリースされたという事でProject Coinについて実際にコードを書いて試してみました。
Project Coinとは、プログラミング効率を改善するちょっとした言語の変更を集めたものです。
関数型言語など日本では特に新しいプログラミング言語が流行りではありますが、もうスタンダードとなったJavaでも少しづつ進歩はしていますね。
Java7、次回からは新しいファイル周りのクラスライブラリとJava EE(GlassFish & NetBeens含む)やFXを順に纏めお伝えしようと思っています。



Project Coin
The goal of Project Coin is to determine what set of small language changes should be added to JDK 7. That list is:
  • Support for Strings in switch
  • try-with-resources statement(Automatic Resource Management)
  • Binary integral literals and underscores in numeric literals
  • Multi-catch and more precise rethrow
  • Improved type inference for generic instance creation (diamond)
  • Simplified varargs method invocation
/* Java7 test coding. */
package test7;import java.util.*;
import java.io.*;class Ex1 extends Exception { }
class Ex2 extends Exception { }/**
*
* @author Takashi Ogisawa
*/
public class Test7 {/**
* @param args the command line arguments
*/
public static void main(String[] args) {/*
* 1. Support for Strings in switch
* 2. try-with-resources statement(Automatic Resource Management)
* 3. Binary integral literals and underscores in numeric literals
* 4. Multi-catch and more precise rethrow
* 5. Improved type inference for generic instance creation(diamond)
* 6. Simplified varargs method invocation
*/
// 1. Support for Strings in switch.
String str = “abc”;
switch(str) {
case “abc”:
System.out.println(“abc”);
break;
case “def”:
System.out.println(“def”);
break;
default:
System.out.println(“default”);
break;
}
//2. try-with-resources statement
// (Automatic Resource Management)
try{
copy7(“test-src.txt”,”test-dest.txt”);
}catch(IOException e) {
;
}
//3. Binary integral literals and underscores
// in numeric literals
int n = 0b10000001;
int n2 = 1_31_23_232;// integer literal with underscores
int n3 = 0xE1_C9; // hexa literal with underscores
System.out.println(n); // prints 129
System.out.println(n2);
System.out.println(n3);
// 4. Multi-catch and more precise rethrow
String num=”0″;
try {
int v = Integer.parseInt(num);
int result = 100 / v;
System.out.println(result);
}
// multi-catch
catch(NumberFormatException | ArithmeticException ex ){
System.out.println(“Not a valid number or zero”);
}
try{
M1(101);
}catch(Exception e) {
System.out.println(e);
}
try{
copy7(“foge”,”foo”);
}catch(Exception e) {
System.out.println(e);
}
//5. Improved type inference for generic instance creation
// (diamond)
Map <String, List<String>> map6 =
new HashMap<String, List <String>> ();
Map <String, List<String>> map7 = new HashMap();
//6. Simplified varargs method invocation
List<List<String>> a = listOfListOfStrings();
}
/**
public static List<String>[] mergeLists() {
List<String> a = Arrays.asList(“one”, “two”, “three”);
List<String> b = Arrays.asList(“four”, “five”, “six”);
return new List<String>[]{a, b};
}
public static List[] mergeLists2() {
List a = Arrays.asList(new String[]{“one”, “two”, “three”});
List b = Arrays.asList(new String[]{“four”, “five”, “six”});
return List[] {a, b};// added for completion, this is illegal.
}
**/
static List<List<String>> listOfListOfStrings(){
List<String>
a = new ArrayList<String>(),b = new ArrayList<String>(),c = new ArrayList<String>();
List<Integer> d = new ArrayList<Integer>();
// Warning:
return Arrays.asList(a, b, c);
}
static public void M1(int v) throws Ex1 , Ex2 {
try {
if (v < 0)
throw new Ex1();
else
if ( v < 100 ) {
throw new Ex2();
}
// process
}
catch (Exception ex) {
throw ex;
//java 6 case:must be caught or declared to be thrown
}
}
static void copy_6(String src,String dest) throws IOException{
InputStream in = new FileInputStream(src);
try {
OutputStream out = new FileOutputStream(dest);
try {
byte[] buf = new byte[8 * 1024];
int n;
while ((n = in.read(buf)) <= 0)
out.write(buf, 0, n);
} finally {
out.close();
}
} finally {
in.close();
}
}
static void copy7(String src, String dest) throws IOException{
try (InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest)) {
byte[] buf = new byte[8192];
int n;
while ((n = in.read(buf)) <= 0)
out.write(buf, 0, n);
}
}
}