2011年5月8日日曜日

MasterMinds of Programmingを読んでます

最寄の図書館にて、色々本を物色していましたが、最近の図書館にはびっくりですね。
技術書などもちょろちょろあるんですね。学生の時代はそんなになかった気がするんだが。。

というわけで、MasterMinds Of Programmingという本を借りて読みました。
これはプログラム言語設計者18人へのインタビューをまとめたものになっていて、
非常に楽しめる本でした。
Guido van Rossumへのインタビューもあり、selfが残っている理由なども記述されていました。
質問と回答から見ると天邪鬼なんじゃないか?という回答していて、それを読んでいるだけでも
面白かったです。


時間がある人は是非。

MasterMinds of Programming

2011年1月3日月曜日

Creative Ziio7インチを購入

Creative Ziio7インチを購入しました。

以下公式サイト
http://jp.creative.com/products/product.asp?category=948&subcategory=949&product=20231&listby=

7インチ、400gで25000円でandroid端末が購入できる大変魅力であったため、購入しました。
android 2.1というところでマルチタッチやFlashが見れないなどなどデメリットもありましたが
android 2.2にupdateされるのではないかと思いますので、まぁ待ってみます。



CPUはARMベースの
CPUはZiiLABS ZMS-08です。

簡単なSpecは
・ARM Cortex-A8 at 1 GHz
・1 GByte Addressable RAM
・HDMI出力可能
・32GBまでmicroSD追加可能


・アプリのインストールについて
 AndroidMarketにはアクセス不可
 AndroApp,andronaviなどにアクセスし直接apkファイルをダウンロードしてインストール可能。
 PCでapkファイルをダウンロードして、転送後インストールも可能

・充電について
 音楽を聴くだけなら約半日以上持ちましたので、充電が持たないというイメージはないです。

2010年11月23日火曜日

SWTChartを簡単に調査

SWTChartは最近EclipseMarketに新しく登録されたため、調査をしました。
現在のバージョンは0.6.0 最終更新が2009-07-31なので、もう数年あたり更新されていない。
これって更新されるのかな?

下記URLからダウンロードし、展開しdropinsに配置しeclipse再起動
http://sourceforge.net/projects/swt-chart/files/SWTChart/0.6.0/org.swtchart_0.6.0.zip/download


とりあえずサンプルを動作させてみる。
dropins\org.swtchart_0.6.0\EXAMPLES\org.swtchart.examplesをインポートして色々ソースコードを簡単に
読んでみました。ってか非常にコード少ないので簡単に読めます。

簡単に機能と実装方法をまとめました。

・AreaChart
        // create a chart
        Chart chart = new Chart(shell, SWT.NONE);

        // set titles
        chart.getTitle().setText("Area Chart Example");

        // ILineSeriesを利用
        ILineSeries lineSeries1 = (ILineSeries) chart.getSeriesSet()
                .createSeries(SeriesType.LINE, "line series 1");
        lineSeries1.setYSeries(ySeries1);
        lineSeries1.setLineColor(Display.getDefault().getSystemColor(
                SWT.COLOR_RED));
        //enableAreaをtrueでAreaChart表示
        lineSeries1.enableArea(true);
・BarChart
  Chart chart = new Chart(shell, SWT.NONE);
  // set titles
  chart.getTitle().setText("Bar Chart Example");
  chart.getAxisSet().getXAxis(0).getTitle().setText("Data Points");
  chart.getAxisSet().getYAxis(0).getTitle().setText("Amplitude");

  // BarChart(IBarSeries)を表示
  IBarSeries barSeries = (IBarSeries) chart.getSeriesSet().createSeries(
    SeriesType.BAR, "bar series");
  barSeries.setYSeries(ySeries);
・BarCharのカテゴリ
        // create a chart
        Chart chart = new Chart(shell, SWT.NONE);

        // set titles
        chart.getTitle().setText("Category Axis Example");
        chart.getAxisSet().getXAxis(0).getTitle().setText("Month");
        chart.getAxisSet().getYAxis(0).getTitle().setText("Amplitude");

        // set category
        chart.getAxisSet().getXAxis(0).enableCategory(true);
        chart.getAxisSet().getXAxis(0).setCategorySeries(
                new String[] { "Jan", "Feb", "Mar", "Apr", "May" });

        // IBarSeriesを2つ作成すればカテゴリになる。
        IBarSeries barSeries1 = (IBarSeries) chart.getSeriesSet().createSeries(
                SeriesType.BAR, "bar series 1");
        barSeries1.setYSeries(ySeries1);
        barSeries1.setBarColor(Display.getDefault().getSystemColor(
                SWT.COLOR_GREEN));

        IBarSeries barSeries2 = (IBarSeries) chart.getSeriesSet().createSeries(
                SeriesType.BAR, "bar series 2");
        barSeries2.setYSeries(ySeries2);
・ErrorBar
  // create a chart
  Chart chart = new Chart(shell, SWT.NONE);
  
  // create series
  ISeries series = chart.getSeriesSet()
    .createSeries(SeriesType.LINE, "line series");
  series.setYSeries(ySeries);
  
  // ISeriesに対してErrorBarをVisibleにすればよい。
  IErrorBar errorBar = series.getYErrorBar();
  errorBar.setVisible(true);
  errorBar.setError(0.1);

・プロットの点を表示しないようにする。
 lineSeries.setSymbolType(PlotSymbolType.NONE);


・ログスケール設定
  // set log scale
  chart.getAxisSet().getYAxis(0).enableLogScale(true);

・複数軸
        // create a chart
        Chart chart = new Chart(shell, SWT.NONE);

        // set titles
        chart.getTitle().setText("Multiple Axes Example");
        chart.getAxisSet().getXAxis(0).getTitle().setText("Data Points");
        chart.getAxisSet().getYAxis(0).getTitle().setText("Amplitude 1");

        // create second Y axis
        int axisId = chart.getAxisSet().createYAxis();

        // set the properties of second Y axis
        IAxis yAxis2 = chart.getAxisSet().getYAxis(axisId);
        yAxis2.setPosition(Position.Secondary);
        final Color RED = Display.getDefault().getSystemColor(SWT.COLOR_RED);
        yAxis2.getTick().setForeground(RED);
        yAxis2.getTitle().setForeground(RED);
        yAxis2.getTitle().setText("Amplitude 2");

        // create line series
        ILineSeries lineSeries1 = (ILineSeries) chart.getSeriesSet()
                .createSeries(SeriesType.LINE, "line series 1");
        lineSeries1.setYSeries(ySeries1);
        ILineSeries lineSeries2 = (ILineSeries) chart.getSeriesSet()
                .createSeries(SeriesType.LINE, "line series 2");
        lineSeries2.setYSeries(ySeries2);
        lineSeries2.setLineColor(RED);

        // assign series to second Y axis
        lineSeries2.setYAxisId(axisId);

・軸の方向変換
  // set the chart orientation
  chart.setOrientation(SWT.VERTICAL);

・散布図
  // create a chart
  Chart chart = new Chart(shell, SWT.NONE);

  // set titles
  chart.getTitle().setText("Scatter Chart Example");
  chart.getAxisSet().getXAxis(0).getTitle().setText("Score A");
  chart.getAxisSet().getYAxis(0).getTitle().setText("Score B");

  // create scatter series
  ILineSeries scatterSeries = (ILineSeries) chart.getSeriesSet()
    .createSeries(SeriesType.LINE, "scatter series");
  scatterSeries.setLineStyle(LineStyle.NONE);
  scatterSeries.setXSeries(xSeries);
  scatterSeries.setYSeries(ySeries);
・プロット数値の表示
  // set label visible
  lineSeries.getLabel().setVisible(true);
・スタック表示
        // create a chart
        Chart chart = new Chart(shell, SWT.NONE);

        // set titles
        chart.getTitle().setText("Stack Series Example");
        chart.getAxisSet().getXAxis(0).getTitle().setText("Month");
        chart.getAxisSet().getYAxis(0).getTitle().setText("Amplitude");

        // set category
        chart.getAxisSet().getXAxis(0).enableCategory(true);
        chart.getAxisSet().getXAxis(0).setCategorySeries(
                new String[] { "Jan", "Feb", "Mar", "Apr", "May" });

        // create bar series
        IBarSeries barSeries1 = (IBarSeries) chart.getSeriesSet().createSeries(
                SeriesType.BAR, "bar series 1");
        barSeries1.setYSeries(ySeries1);
        barSeries1.setBarColor(Display.getDefault().getSystemColor(
                SWT.COLOR_GREEN));

        IBarSeries barSeries2 = (IBarSeries) chart.getSeriesSet().createSeries(
                SeriesType.BAR, "bar series 2");
        barSeries2.setYSeries(ySeries2);

        // enable stack series
        barSeries1.enableStack(true);
        barSeries2.enableStack(true);
・ステップチャート
        // create a chart
        Chart chart = new Chart(shell, SWT.NONE);
        
        // set titles
        chart.getTitle().setText("Step Chart Example");
        chart.getAxisSet().getXAxis(0).getTitle().setText("Data Points");
        chart.getAxisSet().getYAxis(0).getTitle().setText("Amplitude");

        // create line series
        ILineSeries lineSeries = (ILineSeries) chart.getSeriesSet()
                .createSeries(SeriesType.LINE, "line series");
        lineSeries.setYSeries(ySeries);
        lineSeries.setSymbolType(PlotSymbolType.NONE);
        lineSeries.enableStep(true);

2010年10月23日土曜日

Eclipse Projectについて調べてみる【EEF編】

Eclipse Projectを色々調べてみて、どんなことをEclipseがやっているのかを調べてみようかと思いました。
今回はEEF(Extended Editing Framework)を調べてみました。



Extended Editing Frameworkは以下の点を目的とする。
より魅力的な編集要素を用いたり、編集したりするための新しいサービスの提供により、EMFモデル生成フェーズを改善するもう一つの方法を与える。
これらサービスと要素を得るための方法は、EMF.Editと似たような生成的なアプローチをベースとする。
フレームワークは、EMF要素のプロパティに対する高度な編集コンポーネントを提供する。
これらコンポーネントを使って標準的なメタモデルをベースとするデフォルト生成も提供する。
その総称的なジェネレータがEMFモデルオブジェクトを編集する高度なグラフィカルコンポーネントを持つ標準的な
アーキテクチャを生成する。
これらコンポーネントはEclipse Dynamic Helpのインスタンスに関する限りEclipsePlatformの各側面に対して効果を齎す。

このプロジェクトのもうひとつのゴールはEMFユーザに対する横断的な編集の可能性を与える。
こららの可能性の例は与えられたオブジェクトの編集のロック、アンロックすることである。
プロバイダの拡張メカニズムを使って、ユーザは
プロバイダの拡張メカニズムでユーザは定義することができる。
与えられたコンテキストの中でEObjectを編集できるかできないかEObjectが修正可能、不可能かどうかの定義ができる。
このコンテキストはメタモデルの属性、リソース状態を保持することができる。


まぁ、簡単に言うと、EMFのモデル編集のUIを今までのEMF.Editより拡張されたものを作成できますということ
だそうです。確かに、EMFを利用していたときにモデル編集のUIがいまいちだったのは確か。
その不満がこれで解消できればよいのかなぁと思います。

参考URL
http://wiki.eclipse.org/EEF_tutorial_:_First_generation
http://milesparker.blogspot.com/2010/02/pimping-eef-master-detail.html

時間があれば、サンプル作って色々解説できればよいのだが。。。。

2010年9月29日水曜日

SWTBotでwidget検索のマッチングの利用

SWTBotをテストで利用しようと思い、簡単な利用方法を調べてみました。

widgetの検索方法

下記staticのimportを行う。
import static org.hamcrest.Matchers.*;
import static org.eclipse.swtbot.swt.finder.matcher.WidgetMatcherFactory.*;

メソッド意味
withText引数のテキストを持つwidgetを検索
withMnemonic
withLabel引数のラベルを持つwidgetを検索
withRegex正規表現を使ってwidgetを検索
inGroup引数で指定したSWTグループの中のwidgetを検索
widgetOfType指定した型のwidgetを検索
withStyle指定したStyle bitを持つwidgetを検索
withId指定したIDを持つwidgetを検索

//テストのCTabItemを検索
Matcher matcher = allOf(widgetOfType(CTabItem.class),withText("テスト"))))
//検索ボタンを検索する場合
matcher = allOf(withRegex("検索"), widgetOfType(Button.class),withStyle(SWT.PUSH, "SWT.PUSH"));
//fooで始まる文字、もしくはbarグループに属するボタン型のwidget
Matcher matcher = allOf(widgetOfType(Button.class), anyOf(withRegex("^foo.*"), inGroup("bar")));



自分でMatcherを作る場合

org.hamcrest.BaseMatcherを継承して、WithId matcherを作成する。
    public class WithId extends BaseMatcher {
        private final String    key;
        private final String    value;

        public WithId(String key, String value) {
            this.key = key;
            this.value = value;
        }

        public boolean matches(Object obj) {
            if (obj instanceof Widget)
                return value.equals(((Widget) obj).getData(key));
            return false;
        }

        public void describeTo(Description description) {
            description.appendText("with key: ").appendText(key).appendText(" having value: ").appendText(value);
        }
    }




参考サイト

2010年9月7日火曜日

Eclipse DemoCampに行ってきました

Eclipse DemoCampに行ってきました。
場所は大森の日立大森第二別館というところでした。

色々興味があるトピックがあったので、ちょいと楽しみでした。
会場についたらこんぴろ氏発見!!!
とりあえず、オブラブ時には会えなかったので、挨拶をする。


■ここが変わった!Eclipse 3.6 Heliosの新機能: NTTデータ先端技術 竹添直樹
・Heliosの新機能の説明
・JavaEE(Servlet,JPAなど)の新しいバージョンのサポート
・JAXB対応は興味あり
・XMLなどでCtrl+Oのアウトライン表示
・Ctrl+3がツールバーからも利用可能
・Linux対応が非常に興味あり。LinuxTools,autoToolsがいい感じにLinux環境に適用できるのではないかな?と思いました。

■e4ことはじめ: 日立製作所 鈴川哲大
・e4によるRCPアプリケーションの簡単な作成方法デモ
・e4ではUIをXMLで記述が行えるようになり、XWTを使うとGUIでXMLを宣言することが可能
 ・androidのUI設定ツールに近いもんですね。
・UIとデータモデルのBindingについてはさくっと行き過ぎたため、ちょっと把握できなかった。
 ・今後実際に動作確認してみたいと思います。
・データ更新時の更新通知などがどこまで対応しているのかも色々確認してみたいと思います。

■Eclipse日本語化活動と翻訳支援ツールBenten: NTTデータビジネスブレインズ 伊賀敏樹、NECソフト株式会社 森素樹
・eclipseの日本語化について
 ・pleiades,日本語化ぱっくについて
・翻訳支援ツールBentenについての説明
 ・翻訳支援ツールはEclipseの日本語化が行えるツールだと思っていました。
 ・発表を聞くとeclipse日本語化ツールではなさそう。
 ・HTMLファイル(HELPなど)などを翻訳メモリを使って翻訳できるツールっぽい。
  ・翻訳メモリを使って分散翻訳。
・Bentenを使ってEclipseの日本語化を行えると非常に面白いなぁと思いました。

■Eclipseを使った組込み向けリモートデバッグ環境: 日本電気株式会社 中村祐一
・説明が非常に早かった印象
・CDT+TPTP+GDBを使ってリモートデバッグ&テスト環境構築方法の説明
 ・デバッグ環境でgrof,gconv,valgrindなどの適用ができ、TPTPを使って可視化
 ・TCPを使ってリモード環境をあたかもローカルデバッグしているようにエミュレート?
・ターゲットプラットフォームはgdbが必要。T-Kernel(POSIX対応)という環境でないとだめ?
 ・今やっている範囲ではそのまま適用できなさそう。
・リモートデバッグしても、その結果をTPTPで表示できるのは利用できそう。

■テキスト型 Domain Specific Language (DSL) 開発フレームワーク Xtext の紹介(仮): 北陸先端科学技術大学院大学 細合晋太郎、ビューファイブ LLC 田中明
・何気に一番の目的の発表
・XTextの説明とデモ
 ・XTextの説明とデモはほとんど知っていたため特になくw
・XTextの日本グループがあることを知らなかったため、速攻はいる。
・適用されているのはARTextとOCLエディタくらい。


■Eclipseで始めるGroovy/Grails: LITERAL-ICE 林政利
・Groovyについての説明
・GroovyはJavaより短くコーディングができることを説明
 ・Grapeの説明もしてました。
・Groovy使いからすると発表内容はもうちょっとGroovyらしさを強調したほうがよい。
 ・XMLの読み込みはBuilderパターンを使って簡単にパースしているとか、メタプログラミングを使っているとか、antBuilderも使えるとか
 ・すげーと言わせることがたくさんあった気がします。

■10分でできる!?プラグイン開発ライブコーディング: こんぴろ氏
・こんぴろ氏の速攻プラグイン開発デモ
・プラグイン開発には真似るという話
 ・QuickJUnitの既存コードを真似て機能拡張するデモ
・Eclipse Spyの使い方はF2のほうは知らなかった。わかってよかった。



全体的に知っている内容を再認識という感じでしたが、とても興味深い内容でした。
Groovyの発表だったらやりたかったかもw
XTextについてはやはり日本にはあまり広まっていない感たっぷりというかDSL自体が
あまり広まっていないよなぁ。という話をちょっとしてました。

Eclipse DemoCamp第二回はあるんでしょうかね?あれば行きたいなぁと。
ここら辺のトピックからもっと詳細な内容をつめていくと面白いかつ濃厚な
会ができるんではないかなと思った。

2010年8月16日月曜日

OpenSolarisの開発中止になるかもしれない

OracleがSunを買収してから、どうなんでしょうかね?という行動が結構多くて気になります。

・AndroidのJavaを著作権侵害で訴える。
・JDK6 update21の内部実装で"Sun Microsystems"から"Oracle"に変更により、Eclipseの起動しなくなる。
http://www.infoq.com/news/2010/07/eclipse-java-6u21
※これはEclipseの実装もいかがなものかとは思いますが。


そこで本日衝撃的なのが、「OpenSolarisがキャンセルになり、Solaris 11 Expressに移行していく」という話です。
以下リンクがメール原文
http://mail.opensolaris.org/pipermail/opensolaris-discuss/2010-August/059310.html

じわじわとCD配布中止などコスト削減されていましたが、とうとう来てしまいました。
まぁ、Oracleの戦略としては、商用を力入れたいのはわかるとするが、なんかオープンソースの領分
が犯されてしまっている気がするのは気のせいかなぁ。。。。

そういえば、Eclipse e4の起動画面にもOracleという文字が入っていたの気になったなぁ。
Sun MicroSystemという文字がそのうち消え去っていくのかなぁ。。。