基本情報技術者試験を受けてみた

基本情報技術者試験を受けてみました!

■会場
札幌の会場は道都大学。JRから徒歩15分くらいです。
受験票に地図があるし近くまでいけばデカデカと看板があるのでわかりやすいです。
構内に入ってからの誘導もスムーズ。けど食堂ありって書いてあるのに試験当日は休みなのはちょっと困っちゃいますね。

■受験者層
ほぼ大学生。もしかしたら社会人なのかもしれないけど、見た目はみんな大学生。
女性の受験者もちらほら。大学のクラスよりもやや比率はでかい気がします。

■午前問題
マークシート
テクノロジの問題は参考書の演習問題よりやや難しい印象でした。知識問題は細かいところも聞かれます。計算問題は過去問通りかややひねり。
マネジメントとストラテジは簡単な問題が多くて、知識がなくても常識で解けるものもいくつか。

■午後問題
マークシート
知識・思考問題は大問7つから5つ好きなのが選べるので、苦手分野をすっ飛ばしていいのは楽です。午前と同じくやや難しい感じ。状況に対していかに知識を活用するかっていう問題が多いので、実経験の差が出そうな感じです。マネジメント・ストラテジは相変わらずやさしめな印象。やっぱり常識で解ける問題もあるので、苦手でも時間があまったなら解いてみる価値はありそう。やらなかったけど笑
必須の大問はコードレビューに関する話題で、先輩PGと後輩PGの会話穴埋め式。難易度はやや易。プログラムを書いていれば日常的に使う知識です。プログラムを書かない人は解きづらいと感じるのかも。
最後にプログラムの大問5問から1問選択。
自分はJavaを解いたけど簡単でした。問題文は長く状況設定も複雑なので日本語力は必要だけど、問題自体はその複雑な状況がほとんど絡んでこない平易なものです。コードを読んで理解する力とちょっとした知識で解けます。ただこれもプログラムをやらない人には厳しいのかも。

■総じて
時間はふつうにとけば余ります。
知識のあるなしが大きく響くけど、その知識は勉強よりも実践で得られるものが多い感じかな。

タブ譜用のCSS書いてみた

はてな記法にはウクレレ記法なんてものがありますが、弦楽器をやる人にとってTAB譜をどのフォーマットで表示・印刷するのかというのはちょっと悩ましい問題です。PDF とか タブ譜作成ソフトの専用ファイル形式を使うとかいろいろあると思うのですが、今回は一つの解決法としてブラウザで表示・印刷できる CSS タブ譜を作ってみました。

こんな感じ↓
http://simplepage.sakura.ne.jp/tab/tab000.html

Firefox3 と IE7 ではちゃんと表示されています。それ以外は無保証。
5弦バンジョー用のタブ譜なんであまり需要はないね、きっと。

ソース↓
http://simplepage.sakura.ne.jp/diary/tab_css.zip

Sonar でギターのコード入力を簡単にするサンプル

拙作 Sonarプラグイン JFilter を使ってギターのコード入力を簡単にやるサンプルです。前準備としてJFilter をインストールしておいてください。

1、スクリプトファイルをダウンロード

まず、JFilter で使用するスクリプトファイルをダウンロードします。(下のリンクを右クリック→対象をファイルに保存)
guitar.js

2、コードのルート音を単音で入力

C なら ド、D ならレ、という風に入力します。マイナーの時はルート音+ひとつ上の音を重ねて入力します。Cm ならドド#みたいなかんじ。セブンスには未対応…だけど、スクリプトをちょっといじれば対応できます。興味のあるひとは挑戦してみてください。

3、JFilter でコードに変換

入力したノートを選択したあと、「プロセス」→「MIDI FX」→「JFilter」とメニューをたどり JFilter の画面を出します。さっきダウンロードしたスクリプトファイルを指定して、OK を押すと単音がギターコードに変換されます。



4、別のやりかた

トラックにプラグインとして挿入しておけば、そのトラックの単音がすべてコードでなるようになります。

このままだと「じゃーん」「じゃーん」ってなるだけなのであまり使えませんが、後にアルペジエーターをはさんだりすると応用の幅が広がります。

5、スクリプトファイル

今回使ったスクリプトファイルは以下のようになっています。腕に覚えのある人は、発音のタイミングをばらけさせたり、低音のベロシティを下げ目にできるように、改造すると楽しいですよ!

//
// ギターパターン
//

var code = [];
for(var i=0; i<12; i++) code[i] = [[],[]];

code[0][0] = [40,48,52,55,60,64];   // C
code[0][1] = [43,48,55,60,63,67];   // Cm
code[1][0] = [44,49,56,61,65,68];   // C#
code[1][1] = [44,49,56,61,64,68];   // C#m
code[2][0] = [45,50,57,62,66];      // D
code[2][1] = [45,50,57,62,65];      // Dm
code[3][0] = [55,58,63,67];         // D#
code[3][1] = [54,58,63,66];         // D#m
code[4][0] = [40,47,52,56,59,64];   // E
code[4][1] = [40,47,52,55,59,64];   // Em
code[5][0] = [41,48,53,57,60,65];   // F
code[5][1] = [41,48,53,56,60,65];   // Fm
code[6][0] = [42,49,54,58,61,66];   // F#
code[6][1] = [42,49,54,57,61,66];   // F#m
code[7][0] = [43,47,50,55,59,67];   // G
code[7][1] = [43,50,55,58,62,67];   // Gm
code[8][0] = [44,51,56,60,63,68];   // G#
code[8][1] = [44,51,56,59,63,68];   // G#m
code[9][0] = [40,45,52,57,61,64];   // A
code[9][1] = [40,45,52,57,60,64];   // Am
code[10][0] = [41,46,53,58,62,65];  // A#
code[10][1] = [41,46,53,58,61,65];  // A#m
code[11][0] = [42,47,54,59,63,66];  // B
code[11][1] = [42,47,54,59,62,66];  // Bm

function clone(obj) {
    var newobj = [];
    for(var name in obj) newobj[name] = obj[name];
    return newobj;
}

function onEvents(from, to, list) {
    var list2 = [];
    var last = null;
    for(var i=0; i<list.length; i++) {
        if(last==null || last.time!=list[i].time) {
            list2.push(list[i]);
            last = list[i];
            last.count = 0;
        } else {
            last.key = Math.min(last.key, list[i].key);
            last.count++;
        }
    }
    var list3 = [];
    for(var i=0; i<list2.length; i++) {
        var c = code[list2[i].key%12][Math.min(list2[i].count,1)];
        if(c==null) continue;
        var event;      
        // チャ
        for(var j=0; j<c.length; j++) {
            event = clone(list2[i]);
            event.key = c[j];
            list3.push(event);
        }
    }
    return list3;
}

Next をコミットしたよ!

みんなで使える ActionScript ライブラリを集めている Spark Project に拙作 Next をコミットさせていただきました!
http://www.libspark.org/wiki/hidachinoiro/Next
Next は ActionScript で非同期処理を簡素に書くために作られたライブラリです。

// もっとも簡単な例
// 画像ロードが終了したらディスプレイオブジェクトに追加
N.load("image.png").then = function(loader:Loader):void {
    addChild(loader);
}

非同期処理のライブラリは様々あるのですが、このライブラリはできるだけコードの記述量が減り、しかも簡素に書けるように設計してみました。ビューとコントローラを完全に分離し、かっちりした設計を目指す Thread(という有名な非同期処理ライブラリがあります)とは別の思想の元に作られたライブラリです。

ActionScript でゲームとか作るときに役立つと思います。興味のある方はぜひリンク先を覗いてみてくださいね!

JFilter 1.0.1

JFilter をバージョンアップしました。JFilter は MIDI イベントを JavaScript でごにょごにょできる MFX-Plugin(Sonarとかで使える)です。
http://simplepage.sakura.ne.jp/software/jfilter101.zip
今回のバージョンアップの変更点は以下のとおりです。

  • スクリプトファイルの再読み込みで落ちるバグを修正
  • onEvents の戻り値が Array ではないときに落ちるバグを修正
  • ソフト名を間違っていたのを修正

JScripter 1.0.0

JScripter というものを作りました。MIDI ノートイベントを JavaScript でごにょごにょする Sonar 用のプラグインです。
http://www.vector.co.jp/soft/winnt/art/se470118.html

既存のプラグインSonarMIDI 操作コマンドでは実現できない細やかな加工を自作のスクリプトで行えます。コードのルート音をギターストロークに変換したり、ベロシティに味付けしたり、発音タイミングをずらして人間っぽい味を出したり、機械的な入力の補助につかったり、スクリプト次第でなんでもできちゃいます。

Sonar で打ち込みやっている方はぜひお試しください!

(といっても Sonar で打ち込みやってる人ってどれくらいいるんだろ…?