2013年12月12日木曜日

スタックポインタについて

ざっくりスタックポインタを調べてみた。

用語:
ベースポインタ:スタック領域の一番底

スタックの積み方

  • スタックポインタの演算タイミング
    • Full: 先に加減
    • Empty:後に加減
  • スタックポインタの進行方向
    • Descending:下降 利用するたびにSPが減算
    • Ascending:上昇 利用するたびにSPが加算される。
ほとんどのCPUについては、Full/Descending フル減算で実装されている。
ARMでは2*2=4パターンで実装が可能

  • ARMでは異なるソースファイル間での関数呼び出しなど全ての外部インタフェースに置いて、スタックを8バイト境界でアラインする必要がある。

関数呼び出しをする場合、呼び出し元がベースポインタの下に配置し、スタックを積んでいく。




  • 参考
    • http://hack.ninja-web.net/academy003-060.htm
    • http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ij/Cacbgchh.html




2013年5月3日金曜日

隠しファイルに対してFileOutputStream.open() でFileNotFoundException例外

隠しファイルに対してFileOutputStreamのopenメソッドでFileNotFoundExceptionが発生する。
jdk-b63で解決しているのだが、一応念のため書いておきます。

http://bugs.sun.com/view_bug.do?bug_id=6350200


Exception in thread "main" java.io.FileNotFoundException: sample.txt (アクセスが拒否されました。)
       at java.io.FileOutputStream.open(Native Method)
       at java.io.FileOutputStream.(FileOutputStream.java:179)
       at java.io.FileOutputStream.(FileOutputStream.java:131)
       at java.io.FileWriter.(FileWriter.java:73)
       at sample.FileAccessSample.main(FileAccessSample.java:22)


以下のようなコードで発生する。


import java.io.*;

public class HiddenFileTest {
    // Main function, launches JFileChooser to select a directory
    public static void main( String[] args ) {
        try {
            FileWriter fw = new FileWriter( "C:\\temp\\file1.txt" );
            PrintWriter out = new PrintWriter( fw );
            out.println( "This is a test 2" );
            out.close();
        } catch( IOException e ) {
            e.printStackTrace( System.out );
        }
    }

}

2013年4月7日日曜日

構成管理のBranching Patternについて


実践 反復型ソフトウェア開発 の中で構成管理についての話で以下の論文が紹介されていました。

Streamed Lines: Branching Patterns for Parallel Software Development


Abstractを簡単に説明すると。

"ソフトウエアのバージョン管理はブランチさせたり、マージさせたりすることに対してメカニズムを提供する。しかしながらこれらのメカニズムを使うためにはテクニック、ポリシー、ガイドラインがしばしば間違った適用されたり、十分に理解されなかったりする。
これは不幸な事である。ブランチ、マージの使い方が平行ソフトウェア開発を作ったり、壊したりしてしまう。Streamed Linesは適切にソースコードの変更の流れを発散、収束を開発の関連するラインに組織化するためのパターンランゲージである。"

まぁ、つまりブランチ、マージなどの構成管理のパターンランゲージを定義しているという事です。
デザインパターンと同じで、こんなケースの場合はこのパターンに当てはめていけばよい集みたいなものです。

すべてのパターンは読んでみたいと思うので、後々







Eclipse Process Frameworkを試してみる

開発プロセスを定義中であり、プロセス説明資料を作ろうと思ったときになんかいいフレームワークないかな?と探していたらEclipse Process Framework(EPF)を見つけたので使ってみようかと。
AUTOSARのプロセス定義もこれ使っているっぽかったので、それなら則ってやってみるかと。


検索しても日本語の情報が少なすぎる。。。。。と思ってサイトを見てみたら

EPFがMacに対応していないっぽい。。。。。

暫定解決策として
  • EPFのプラグインをEclipseのdropinsに突っ込む。
    • Eclipse3.6 をダウンロードしてどっかに展開する。
    • win32用のEclipse Process Frameworkをダウンロードして展開する。
    • dropinsにEPFのpluginフォルダ内の全プラグインをコピー。
  • 普通のEclipseだがウィザード等にEPFのメニューが表示される。

使い方については
EPFプラグインでらくらく開発プロセス管理 が十分分かりやすい記事だったので、それを参照しながら試してみる。



  • プロセスの定義はdiagramでできるため操作は簡単
  • プロセス定義すればHTML化されるため簡単に公開できる。
  • 設定のしにくさがすこしあるが慣れれば楽ではないか。(まだ慣れていません)


2013年3月1日金曜日

ecoreのオペレーションの実装について

EMFでecoreにeOperationを定義する際に、ソースコード生成を行うと、以下のように
UnsupportedOperationException()を返してしまう。

 /**
  * 
  * 
  * @generated
  */
 public void sample() {
  // TODO: implement this method
  // Ensure that you remove @generated or mark it @generated NOT
  throw new UnsupportedOperationException();
 }

これのデフォルト実装を行うためにはeOperationに対してeannotationを設定する必要がある。

 
      
        

対応方法は

  • eannotation
    • 属性名:source
      • 値http://www.eclipse.org/emf/2002/GenModel
  • detailタグ
    • 属性名:key
      • 値:body
    • 属性名:value
      • operationの実装


これでデフォルトの実装が出力される。
これにより、モデルですべて実装まで定義できるようになります。


2013年2月10日日曜日

Ext3でLinuxをインストールしたHDD をMacで認識させる

昔のHDDからデータをダンプさせるため、Ext3のディスクをつなげてみました。
まぁ、同じような記事は他にもあるんですが、備忘録として、書いておきます。


HDDからUSBでつなげるのに使ったのはこれ UD-500SA
コストパフォーマンスがよかったので。

Mac にインストールしたツールはこれ

あとは、下記ファイルを変更し、Write属性をつけてまうんとするように変更する。
/System/Library/Filesystems/fuse-ext2.fs/fuse-ext2.util

OPTIONS="auto_xattr,defer_permissions"
OPTIONS="auto_xattr,defer_permissions,rw+"

これだけで可能でした。


2013年1月27日日曜日

Eclipseプラグイン紹介[Markdown Editor plugin for Eclipse]


とりあえず今知っているMarkdownエディタのプラグイン。
他に知っているのがあれば教えてほしいのですが。。。。
本家のページで記述されているupdate siteのURLが間違っていて
アクセスできませんでしたが、feature.xmlからどうにかしてたどり着く事が
できました。

誤:http://www.winterwell.com/software/update-site/
正:http://www.winterwell.com/software/updatesite/


使ってみた感想。

  • リアルタイムで変換されない。
  • 入力補完がない。
  • アウトラインの階層化が見えるのはよい。

入力候補がでないのは記述に必要ないからかもしれないが、リアルタイムで変換されないのはちょっと痛いかもしれないけど、保存しながら確認すればよいかなぁとは思う。

【後書き】

保存時にプレビューを更新するようなプラグインを作りました。
https://github.com/ponta027/hello/tree/master/eclipse/com.ponta027.markdown.extension
これでかなり使いやすくなったかな。。。




2013年1月13日日曜日

Eclipseプラグイン紹介[LogViewer]

Eclipse Marketを見ていて気になったプラグインを紹介するというのをやってみたいと思っていたので、ちょっとがんばってやってみようと思います。

LogViewer 0.9.8.8

指定したログがコンソールでtailされて、設定した正規表現等にマッチングした行
に色を変えたりできるプラグインです。

テスト実施時でログファイルにエラーが出力されても気づかず続行する人がいたりするので、簡単に確認できる方法を探していて、見つけました。

使ってみた感想              
いまいち使えないと思いました。マッチした行の色が変わっただけだと、ログ見てない人に対してはあまり変わりないので、ポップアップなどができればベターなのかなと思いました。
ver.1.0でマッチしない行をフィルタかける対応は行われるようだが。。。。

ソースコードをマッチした場合ポップアップするようにしてしまえば、ありかなとは思います。なんかそれだったら、普通のスクリプトで簡単に作成してしまった方がよいきがするなぁ。。。




2013年1月12日土曜日

AstahScriptでアクティビティ図の遷移を出力してみる

仕事で作業フローをAstahでActivity Diagramで記述していました。
でも、Astahのままだとチェックリストとして機能としては使えないなぁ
と思ったので、AstahScriptでアクションをリストに落とせるようにしてみました。

JavaScriptはもう疎くなってしまったので、Groovyで書けばもっとすっきりする記述になります。


Astah API



//すべてのアクションの遷移を出力する
importPackage(com.change_vision.jude.api.inf.model)
//http://members.change-vision.com/javadoc/astah-api/6_6_3/api/en/doc/javadoc/index.html
seqs = astah.findElements(IActivityDiagram)
println("START")
var myObj = {};
for ( var i in seqs )
{
    var seq = seqs[i];
    var startNode = getStartNode(seq);
    getNext(seq,startNode)
//    getNext(seq,startNode.getOutgoings()[0].getTarget())
}
println("END")

function getNext(seq,tmp){
    var outgoings=tmp.getOutgoings();
    if(outgoings != 0){
        for(var index in outgoings)
        {
            var id = tmp + outgoings[index].getTarget();
            //Setがあれば置き換える
            if(myObj[id]=="SET"){
                continue;
            }
            myObj[id]="SET"
            //printNodeType(tmp)
            println(tmp+"->"+outgoings[index].getTarget())
            //【制限】前のアクションにもどる場合は無限ループになる。
            getNext(seq,outgoings[index].getTarget())
        }
    }
    return
}


function printNodeType(tmp){
        println("========")
        if( tmp instanceof IAction ){
            println("IAction"+tmp.getName())
            println(tmp.getInputs())
            println(tmp.getOutputs())
            println(tmp.isCallBehaviorAction())
            
        }else if (tmp instanceof IObjectNode ){
            println("IObjectNode"+tmp.getName())   
            println(tmp.getInState())   
            println(tmp.getBase())   
            
        }else if ( tmp instanceof IControlNode){
            println("ControlNode"+tmp.getName())
            println(tmp.isFinalNode())
            println(tmp.isForkNode() )
            println(tmp.isInitialNode() )
            println(tmp.isJoinNode() )
            println(tmp.isMergeNode() )
        }
        println("========")
}

function getStartNode(seq){
    var activities=seq.getActivity().getActivityNodes()
    var startNode;
    for ( var k in activities)
    {
        node = activities[k]
        if ( node instanceof IControlNode ){
            if( node.isInitialNode()){
                return node
            }
        }        
    }
    return null;
}

2013年1月5日土曜日

XLSBeansを軽く調査してみました。

Excelを読み込む処理の効率化のため、ExcelからEMFに変換するツールがなかったかな?とさがしていた所見つけて面白そうだったので、調査してみました。

概要
  • XLSBeansはAnnotationを用いて、JavaBeansとExcelをマッピングするライブラリ
  • ホームページはこちら
  • Amateras Projectで作成されているため、純日本製
  • 基本的な使い方はドキュメントに記述されているので、そのまま読めば使える。
  • データ取得方法の例
    • セル指定(row,column)
    • ラベル指定(label指定した隣のセルのデータ取得)
    • 縦レコード指定
      • 水平方向に連続するデータのマッピング
    • 横レコード指定
      • 垂直方向に連続するデータのマッピング
    • 繰り返しテーブル指定
      • テーブルが繰り返しあるケース
  • Annotationを使わずXMLで定義することも可能
    • ダイナミックアノテーションという機能
    • OGNL式で記述 参考ページ
    • OGNL式は現在MVELに移行されつつあるそうです。
  • FieldProcessor機能によりannotationの追加が可能
  • 取得したセルの位置を保持する機能

上記のような便利機能が使えるため、非常に簡単にExcelのパースが行えるようになります。


ちょっとネックな点
  • String型でしかできない?
    • FieldProcessorを拡張すれば可能。

サンプルプログラムはgithubのここ参照