無線部開発班は、コンテスト自動集計システムを手掛ける、東京大学アマチュア無線クラブのソフトウェア開発部門です。

関数型言語を自作します。パーサコンビネータも手作り。計算論の基礎とチューリング機械を学ぶ。

記事 実装
((f)=>((x)=>f(x(x)))((x)=>f(x(x))))((f)=>(n)=>(n==0)?1:n*f(n-1))(10)

30年以上にわたって多くのアマチュア無線家が愛用するコンテスト用ロギングソフトの最新版です。

最新版

アマチュア無線家を納得させる使い勝手はそのままに数多の拡張機能でzLogをカスタマイズします。

マーケットプレイス 発表資料 実装
package main

func init() {
	OnLaunchEvent = onLaunchEvent
}

func onLaunchEvent() {
	HandleButton("MainForm.CWPlayButton", onButton)
	HandleEditor("MainForm.CallsignEdit", onEditor)
}

func onButton(num int) {
	DisplayToast("click CWPlayButton")
}

func onEditor(key int) {
	DisplayToast(Query("QSO with $B"))
}

アマチュア無線のコンテスト運営を支援。集計結果をリアルタイムに把握し、作業効率を高めます。

記事 ALLJA1コンテスト リアルタイムコンテスト
<?xml version="1.0" encoding="UTF-8"?>
<list xmlns:qxsl="qxsl.org">
	<item qxsl:time="2017-06-03T16:17:00Z" qxsl:call="QV1DOK" qxsl:band="14000" qxsl:mode="CW">
		<rcvd qxsl:rstq="599" qxsl:code="120103"/>
		<sent qxsl:rstq="599" qxsl:code="100110"/>
	</item>
	<item qxsl:time="2017-06-04T00:01:00Z" qxsl:call="QD1QXB" qxsl:band="21000" qxsl:mode="CW">
		<rcvd qxsl:rstq="599" qxsl:code="110117"/>
		<sent qxsl:rstq="599" qxsl:code="100110"/>
	</item>
</list>

汎用的なドメイン特化言語であらゆる書式の交信記録の処理とコンテストの得点計算に対応します。

API ElvaLISP allja1.lisp
; scoring
(defmacro result (score mults names)
	`(block
		(setq mults (length (quote ,mults)))
		(setq names (length (quote ,names)))
		(ceiling (/ (* ,score mults) names))))

線型回帰からサポートベクターマシンまで主要な機械学習を手作りします。情報科学を究める喜び。

記事 実装
class AdaDelta(r: Double = 0.95, e: Double = 1e-8) extends SGD {
	var eW, eE = 0.0
	def apply(dE: Double) = {
		lazy val v = math.sqrt(eW + e) / math.sqrt(eE + e)
		this.eE = r * eE + (1 - r) * math.pow(1 * dE, 2.0)
		this.eW = r * eW + (1 - r) * math.pow(v * dE, 2.0)
		this.w -= v * dE
	}
}

並列処理系を自作。私たちの生活に浸透したメニーコアプロセッサを極限まで使い切る技術を学ぶ。

記事 実装
int dmm_dawn(int i1, int i2, int j1, int j2, int k1, int k2, int grain) {
	auto axes = [i2 - i1, j2 - j1, k2 - k1];
	if(axes.maxElement <= grain) {
		dmm_leaf(i1, i2, j1, j2, k1, k2);
	} else if(axes.maxIndex == 0) {
		auto t1 = sched.fork!dmm_dawn(i1, (i1+i2)/2, j1, j2, k1, k2, grain);
		auto t2 = sched.fork!dmm_dawn((i1+i2)/2, i2, j1, j2, k1, k2, grain);
		sched.join(t1);
		sched.join(t2);
	} else if(axes.maxIndex == 1) {
		auto t1 = sched.fork!dmm_dawn(i1, i2, j1, (j1+j2)/2, k1, k2, grain);
		auto t2 = sched.fork!dmm_dawn(i1, i2, (j1+j2)/2, j2, k1, k2, grain);
		sched.join(t1);
		sched.join(t2);
	} else if(axes.maxIndex == 2) {
		auto t1 = sched.fork!dmm_dawn(i1, i2, j1, j2, k1, (k1+k2)/2, grain);
		auto t2 = sched.fork!dmm_dawn(i1, i2, j1, j2, (k1+k2)/2, k2, grain);
		sched.join(t1);
		sched.join(t2);
	}
	return 0;
}

クレイ社が贈る最高に洗練された並列プログラミング言語を網羅的に解説する日本語初の資料です。

記事

プログラミング言語処理系の自作で不可欠な型推論とガベージコレクションを手作りする予定です。