Journal of Hamradio Informatics

アマチュア無線は次世代の体験へ

icon

automatic tabulation system for hamradio contests, parallel computing framework, programming language processors, machine learning, etc.

Scalaで自作するプログラミング言語処理系

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

((f)=>((x)=>f(x(x)))((x)=>f(x(x))))((f)=>(n)=>(n==0)?1:n*f(n-1))(10)

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"))
}

リアルタイムコンテスト

令和の時代に新たなアマチュア無線の姿を模索。ありのままの得点状況を、全参加者に配信します。

{
  "14MHz": [
    {"call": "JA1ZLO", "score": 200, "total": 2200},
    {"call": "JA1YWX", "score": 100, "total": 2100}
  ]
}

書類受付・自動集計システム ATS-4

アマチュア無線のコンテストの集計作業を自動化。様々なコンテストに対応。楽しく開催できます。

ATS-4 UI

以下のコンテストに導入されています。

<?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>

電子ログ自動集計ライブラリ QxSL

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

; scoring
(defmacro result (score mults names)
	`(block
		(setq mults (length (quote ,mults)))
		(setq names (length (quote ,names)))
		(ceiling (/ (* ,score mults) names))))

Scalaで実装するパターン認識と機械学習

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

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
	}
}

D言語で実装する並列スケジューラ入門

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

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;
}

うさぎさんでもわかる並列言語 Chapel

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