TJSで遊ぶ #01

何だか知らないけど、このブログは報告とかしかなくてツマラナイなーって思ったので、少しずつ技術よりなことも書いていきます…


吉里吉里ではTJSというスクリプト言語が動きます

TJSはJavaScriptっぽい感じの言語で、JSとかを書いたことがある人ならさほど苦にならない感じで組むことが出来ます

文法的な話はググれば沢山出てくるし、書籍などもあり、僕が下手に書くのはヨロシクないような気がするので、ここでは実際にコードを書いて僕が悩んでることとかを書いておこうと思います…


文法をひと通り勉強した直後に書いたエラトステネスの篩

var MAX_NUM = 100;
var arr = [];
for(var i = 2; i<MAX_NUM; i++){
	arr[i] = 0;
}
for(var i = 2; i<MAX_NUM; i++){
	if(arr[i] == 0){
		for(var j = 2; i*j < MAX_NUM; j++){
			arr[i*j] = 1;
		}
		Debug.message(i);
	}
}

ガーッと書いて、特に躓くところは無かったんですが、ビミョーに配列の辺りで「う~ん」って感じはしました

僕的には

var arr = new Array(100);

って書きたいんですが、こうやるとSyntax Errorを吐かれる…

仕方がないので

var arr = [];
for(var i=0; i<100; i++){
    arr[i] = 0;
}

と書いているのですが…

もっと良い書き方はないのか…?


次にKAGとTJSでクイックソートを書いてみました

クイックソート書いてみた[l][r]
元の配列データ[r]
6, 3, 1, 7, 0, 4, 8, 5, 2, 9[l][r]

@eval exp="f.num = [6, 3, 1, 7, 0, 4, 8, 5, 2, 9]"

@iscript
function q_sort(numbers, left, right){
	var pivot, l_hold, r_hold;

	l_hold = left;
	r_hold = right;
	pivot = numbers[left];
	while(left < right){
		while((numbers[right] >= pivot) && (left < right)){
			right--;
		}
		if(left != right){
			numbers[left] = numbers[right];
			left++;
		}
		while((numbers[left] <= pivot) && (left < right)){
			left++;
		}
		if(left != right){
			numbers[right] = numbers[left];
			right--;
		}
	}

	numbers[left] = pivot;
	pivot = left;
	left = l_hold;
	right = r_hold;
	if(left < pivot){
		q_sort(numbers, left, pivot-1);
	}
	if(right > pivot){
		q_sort(numbers, pivot+1, right);
	}
}

function quickSort(_numbers, arraySize){
	q_sort(_numbers, 0, arraySize-1);
}

quickSort(f.num, f.num.length);
for(var i = 0; i<f.num.length; i++){
	Debug.message(f.num[i]);
}

@endscript


@r
ソート後の配列データ[l][r]
[emb exp="f.num[0]"], [emb exp="f.num[1]"], [emb exp="f.num[2]"], [emb exp="f.num[3]"], [emb exp="f.num[4]"], [emb exp="f.num[5]"], [emb exp="f.num[6]"], [emb exp="f.num[7]"], [emb exp="f.num[8]"], [emb exp="f.num[9]"]


クイックソートに関しては特に悩むことはありませんでしたが、最後に配列データをKAGで表示する際に、一々書いてるのがアホらしい…

何かforとかでぶん回して書きたいんですけど、どうやってやれば良いんだろう…?

探してみます…



最後にNクイーン問題

var n = 8;
var pos = [], row = [], up = [], dw = [], count = 0;

for(var _i=0; _i<n; _i++){
	row[_i] = 0;
}

for(var _i=0; _i<2*n-1; _i++){
	up[_i] = dw[_i] = 0;
}

function nqueen(c){
    if(c == n){
        count++;
        return;
    }
    for(var r = 0; r < n; r++){
        if( row[r] == 0 && up[c + r] == 0 && dw[ (c - r) + (n - 1) ] == 0 ){
            pos['col' + c] = r;
            row[r] = up[c + r] = dw[ (c - r) + (n - 1) ] = true;
            nqueen(c + 1);
            pos['col' + c] = row[r] = up[c + r] = dw[ (c - r) + (n - 1) ] = 0;
        }
    }
}

nqueen(0);
Debug.message('解は' + count + '個');

何度か書き直したんですが、最初のほうに書いてたコードだと4×4でさえ処理が帰ってこないくらい重くて…

これでも14×14くらいから「う~ん」って感じなんですが、仕方ないのかなー…?


今のところ書いたのはこれくらいです
今週中くらいにはKAG+TJSでオセロくらいは作りたいなーって思います…

定例会 #01

マネジメント部門のtettiriです

年明け前頃から動き始めていましたが、3月となり本格的に活動を開始しました

6月まで実際の成果を発表することはないと思うのですが、着々と進捗を出しているのでこの調子が頑張って行きたいと思います


さて、本格的に活動を開始するにあたって、当然のことながらメンバー内で情報をやりとりしたり、相談などを行うことが必要になります

基本的に各部門でSlackのグループがあるので、そこでやりとりしているのですが、全体での相談や決定などを行うために隔週で定例会を行うことになっています

隔週日曜日に行われているのですが、3月1日の定例会で話し合った内容について簡単に纏めておこうと思います


基本的には今後のスケジュールの確認というか、実際のタスクについての話でした

部門で大凡の開発計画を作成し、マネジメントに提出していたものについて、例えばParserでのモジュールとIDEでのモジュールが重複しているのを誰が何時までに組むのかだとか、シンタックスのハイライトはどこまでサポートするのかだとか、細かい仕様に関してだったりを話し合いました

また、予算に関してだったり、開発環境の使用方法をひと通り確認したり、サーバの設定などをおさらいしたり…



今週末に学会があるメンバーなどもいるため完全に足並みが揃ったわけではありませんが、これまでの準備期間を終え、ようやく本格的な作業に入ります

これまで以上に気を引き締めて、着実に実装を行っていきたいと思います

WebADV 企画会議 #02

昨日のことですが、13日の続きということで会議を行いました


全体で話し合った内容は

・どうやって進捗管理するか
・中間成果発表までに作りたいもの
・最終的な着地点
・2月中に終わらせて欲しいタスク

です


進捗管理に関してはかなり長いこと話し合いまして、これまではRedmineとGitLabを使うという流れだったのですが、Backlogを使ってみようということになりました

Backlog [バックログ] - チームではたらく、すべての人のためのプロジェクト管理ツール

というのも、支援を頂いてるConoHaのサーバは今後のテスト環境であったり、公開場所など様々な部分で利用させて頂く予定なので、なるべくそれ以外の部分で無駄遣いしたくないなーということになりまして…

多少機能が制限されていようと、SaaSで利用できるものがあればそれを利用させてもらおうということになり、Backlogを利用することになりました


中間成果発表までに作りたいものと最終的な着地点ですが、これを今ここで公にするのは面白く無いので割愛します


2月中に終わらせて欲しいタスクについては、各部門WBSの作成であったり、タスクの設定など色々と話し合いましたが、まぁ無事完了するでしょう


他にも定期的な進捗報告や予算の管理、会計処理などについてもありますが、それらは省略させて頂きます



会議の後、全体で吉里吉里に関する勉強会を行いました

内容に関しては、勉強用のプログラムを実際に動作させながらスクリプトファイルを読むような感じで、全体である程度の知識は付いたのではないかと思います

互換を担当する部門では積極的に勉強を行っているようで、今後も全体で勉強会を行っていきたいと思います



また、最後にコンテンツデータの保護について話し合いました

現状存在しているサービスを例に挙げ、このサービスはこうしてコンテンツを保護をしているだとか、こうしたサービスではこういうことが想定されるのでどうやって対策を練るべきかなど、実際に手を動かして勉強を行いました



昨日の会議で話し合ったことは大凡以上のとおりです

現在はインフラ部門で開発に利用するサーバの構築をしていたり、会計担当が2月分の処理を行っていたり、IDE部門がWebサイトやロゴマークを作成していたりします


やっと本格的にプロジェクトが始動することになります

初めてのことや慣れないことで手間取っている部分は多々ありますが、この調子で頑張っていこうと思います

WebADV 企画会議 #01

初めまして、第7期のプロジェクトのメンバーの一人の tettiri です
本プロジェクトではマネジメントを担当します
よろしくお願いします


先日、新メンバーの顔合わせも兼ねて、第7期のプロジェクトの初会議が行われました
それぞれの開発担当や今後の予定について話し合いを行いました


プロジェクト名は「WebADV」となりました
サイトはこちらです

WebADV


簡潔に説明すると、本プロジェクトはWeb上で動くADVを開発するためのエンジンとそのIDEの開発が目的です

詳細な仕様に関しては6月の中間成果発表以降に公表する予定ですが
現在予定されている主な仕様は以下のとおりです

・Web上で動くADVを開発するエンジンとIDEを開発する
Chromeをターゲットに開発を行いますが、多くのブラウザに対応させる予定です

吉里吉里2と互換性を持つ
吉里吉里2で作成された既存のゲームがそのまま動くようにする予定です

OSSとして公開する
GitHubで公開する予定です

・フリーな開発が可能である
⇒会員登録や公開場所の制限等は一切ありません

期間は2015年3月1日~9月30日
6月中に中間成果発表を行う予定です


arcktyとしてはこれまでにない規模のプロジェクトになります
色々と拙いこともあると思いますが、頑張っていきたいと思います


また、本プロジェクトからarcktyはConoHaのコミュニティ支援を利用することになりました
ConoHaのみなさん、改めてお礼申し上げます


私はプログラミングに関しては素人ですが
マネジメント面で本プロジェクトを成功させるために力を尽くしていきます

ConoHaの支援プログラムを利用させて頂くことになりました

ConoHaと言えば大変利用しやすいコンパネと、このはちゃんが最高に可愛いことで有名ですが、arcktyでも支援プログラムを利用させて頂くことになりました


ConoHa支援プログラム - ConoHa

ConoHaの皆さん、本当にありがとうございます!!


まずはarcktyのホームページとプロジェクトのページを作成する予定です

(これから3月までにサーバの建て直し等を行うので、
メールはLiveメール等に送っていただけると幸いです)

というわけで、気を引き締めて頑張っていきますm(__)m

第7期のプロジェクトに関して

今月13日に会議がありますが、その前に現状で決まっていることを纏めておこうと思います

第7期のプロジェクトはarcktyとしては初めてのOSSなWebアプリケーション開発です
また、久々にarckty以外の方々を交えて開発を行います

期間は2015年3月1日から9月30日までを予定していて、6月中に中間発表を行います
(中間発表の前後で最終的な仕様について書くつもりです)

本プロジェクトを端的に表すと「Web上で動作するADVを開発するゲームエンジンとそのIDEの開発」です
ポイントとなりそうな部分を幾つか挙げると
・Web上で動作するADVを開発するエンジンとIDEを開発する
吉里吉里2と互換性を持つ
・他のWeb上で動作するADVエンジン及びIDEとは異なる要素を持つ

吉里吉里は依然として確固たるシェアを持っていると思っています
私たちの一番最初のプロジェクトは4年半ほど前ですが、吉里吉里を利用したゲームの開発でした
そうした知識を活かすことが出来れば良いなと思っています

また、他のプロジェクトと異なる要素があると書きましたが、大凡これを実現するための企画というか、既存のモノでは満足出来ないから作ろうという声が上がりました
明確に挙げることは避けますが、(私たちとしては)納得いかないというか、満足出来ない部分を何とかしたいということです


今回のように比較的大きなプロジェクトはarcktyとしては久々で、メンバーの大半が初めてのことになります
様々な問題が予想されますが、メンバー一同全力を尽くして頑張りたいと思います

第6期総括

arcktyは本日をもちまして第6期を終了し、明日から第7期となります
ということで、第6期の活動をひと通り纏めておこうと思います

arcktyとして開発したもの

redpa

f:id:arckty:20150131224641p:plain
プログラムやzipファイルを開く際にReadmeを表示するパッカーです
多くの人がReadmeを読んでくれるようにすることが目的です
U22プログラミングコンテストに向けて作成していましたが、完成が間に合わず…



AProS

f:id:arckty:20150131225037p:plain
Windows上で任意のタイミングでプログラム等を実行するプログラムです
ログイン画面上で任意のプログラムを実行したり、シャットダウンを検知してファイルを保存するなどが可能になります
ICT Challenge+Rに応募しました



dongli

USBを使ってWindowsにログインするプログラムです
認証プロセスをバイパスしているので、パスワード流出のリスクがなく、USBを唯一のログイン手段にすることが可能です
ログイン画面にはGMOの美雲このはちゃんが表示されます
マスコットアプリ文化祭 2014 - kkrnt




arcktyメンバーが個人的に開発したもの

ブロック崩しやパターンロックでWindowsにログインする(HSP版)


今日のアレについて - kkrnt

Windowsにログインするためのモジュール(C版)


Unlocker C移植版 - kkrnt

MINDに自動でログインするプログラム


MIND自動ログインプログラム - kkrnt

Felicaを利用してWindowsにログインする(C++版)


Windows Login by Felica - kkrnt

Windowsのデスクトップ上の情報を取得する(C++


デスクトップアイコン情報と64bitアプリケーション - kkrnt



他にも多くのプログラムがありますが、省略します





参加したイベントや勉強会

第1回CTF for Beginners


CTF for Beginners - kkrnt

ICT Challenge+R 2014


#あいちゃれ 2014 立命館全国高校・大学ソフトウェア創作コンテスト

ABPro2014

ABPro 2014

ABPro2014に参加しました - kkrnt

MSCC交流会


MSCC交流会と日米サイバーセキュリティシンポジウム - kkrnt

日米サイバーセキュリティシンポジウム
マスコットアプリ文化祭 2014


マスコットアプリ文化祭 2014 - kkrnt

このべん 第4回


このべん第4回「ConoHa VPSとHAProxyでロードバランサーを構築してみよう!」 - kkrnt

総括

今期はメンバーの大学進学や受験組の離脱などがあり、万全の体制とは言えない状況で夏までバタバタしてしまいましたが、秋からはその環境に慣れ、徐々に開発がスムーズになっていったように思えます

振り返ってみると、今期もWindows向けのソフトウェアのみを開発し、中でもログイン処理をターゲットにしているものが多くあります
もともとセキュリティに感心があるメンバーが多いため、そういう傾向になることは予想されていましたが、もう少しバリエーションを増やしていきたいとも思います

また去年の反省にも書きましたが、作業し始めるまでに時間が掛かり過ぎていたり、全体が統一して書ける言語がC/C++しかないこと、開発環境の整備不足などを来期は解消してたいと思います

第7期について

第7期のはじめに行うプロジェクトはWebアプリケーション開発です
arcktyとしては初のWebアプリケーション開発ですが、期間は半年、メンバーはarckty以外にも多数を予定しています
(詳しいことは今後書いていく予定です)

Windowsというプラットフォームに限らず、多くの環境でユニークなソフトウェアを開発していきたいと思います



今期は大変多くの方にお世話になりました
本当にありがとうございました
引き続き第7期もよろしくお願い致します