電子趣味の部屋

電子系のガジェットやアプリ開発等の趣味の話題を書いてます

FreeCADを使えるようになる本

今まで3Dプリンタで出力するデータのモデリングはAutodesk Fusionを使用してました。
Autodesk Fusionは書籍やネット上に情報も多く使いやすいのですが、個人利用に限り無料で、営利目的の物を作ろうとすると有料になります。
価格も年間10万円近く(割引でも7万円くらい)かかります。
今の時点で販売できるものを作る予定は無いのですが、今後のためにオープンソースのFreeCADに慣れておきたいと思いました。
www.freecad.org

FreeCADはCADとしての概念やできることはFusion360と同じだと思いますが、操作方法が異なるので初めは使用方法も良くわからない状態でした。
ネットでも(日本語の)情報が少なく、書籍を2冊購入したので紹介します。

FreeCAD モデリングマスター


実際の操作の手順をスクリーンショットで説明しながら進めていくので、初めてFreeCADを触る際にお勧めできる本です。
実質的なトレーニングマニュアル的なもので、この本を順次進めていくとわかりやすいです。
実際にこの本のおかげでFreeCADが使えるようになりました。

FreeCAD入門 第2版


入門となっているのですが、操作方法は少々わかり辛いです。
初めに購入したのはこちらですが、後からFreeCAD モデリングマスターを購入して理解が進みました。
FreeCAD入門の方が少し高度なテクニックが紹介されてます。
ある程度分かるようになると、こちらで紹介されている方法が役に立ちます。

同じような本は新しい本を購入すると前のものは手放しがちですが、この2冊はお互いを補完できるような関係ですので、どちらも持っていて損は無いと思います。

FreeCAD入門 第2版

FreeCAD入門 第2版

Amazon

ハイドライドの話

SWITCHのEGGコンソールのPC88版ハイドライドがセール中だったので、まとめて123を購入しました。

ハイドライドはファミコンのハイドライドスペシャルから始めましたが、MSX入手後に123を一通り遊びました。
実際にクリアまで遊んだのはハイドライドスペシャルとハイドライド1だけです。両方とも雑誌か攻略本か思えてませんが、攻略情報を見ながらクリアしました。
2と3は未だにクリアしてませんが、世界観とシステムは好きで、何回も初めから遊んでます。

購入日に購入したチャレンジ!! パソコン アドベンチャーゲーム&ロールプレイングゲーム SP1に1と2の攻略情報があったので、これを機に2を始めて進めてます。

JavaScriptでSQL実行できるローカルDBライブラリ LocalDB.js

昔初めて購入したMacのG3 Mac B&W(Mac OS 8.6)で何か作りたいと思い、VisualBasicのような感覚でプログラミングできるMac用のBASIC開発環境を購入しました。確かREALbasicとかそんな名前でした。
この環境で便利なのが、組込みDBがあり、外部プログラム無しで実行ファイルにDBの機能も組込むことができ、SQLでデータ操作をすることができました。
これが便利だった思い出があり、のちにJavaScriptでSQL実行できるローカルDBライブラリを作り、個人で制作したもので使用してました。

この度、AIの力を借りて体裁を整えたので「LocalDB.js」として公開します。
元が10年以上前のものなのでClaude Codeで最近のトレンドに合わせた書き方にしたり、副問い合わせ等の元にはなかった機能の追加もしてます。
また、公開のためのコメントやドキュメント作成もClaude Codeで生成しました。
github.com

LocalDB.jsは、JavaScriptアプリケーション内で標準的なSQL構文を使用してデータを操作できるシンプルなライブラリです。すべてのデータはlocalStorageに自動的に保存されるため、ページをリロードしてもデータが失われません。

主な機能

1. SQL操作
  • CREATE TABLE - テーブルの作成
  • INSERT - データの挿入
  • SELECT - データの取得
  • UPDATE - データの更新
  • DELETE - データの削除
2. WHERE句と演算子
  • 比較演算子:=, !=, <>, >, <, >=, <=
  • LIKE - パターンマッチング
  • IN / NOT IN - リスト内の値チェック
  • BETWEEN - 範囲チェック
  • IS NULL / IS NOT NULL - NULL値チェック
3. SELECT句の機能
  • ORDER BY - 結果のソート(昇順・降順)
  • GROUP BY + HAVING - グループ化と集計
  • LIMIT + OFFSET - ページネーション
  • DISTINCT - 重複排除
4. 高度なSQL機能

JOIN機能:

  • INNER JOIN
  • LEFT JOIN
  • RIGHT JOIN
  • CROSS JOIN
5.サブクエリ対応:
  • IN / NOT IN サブクエリ
  • スカラーサブクエリ(比較演算子と組み合わせ)
  • 派生テーブル(FROM句内のサブクエリ)
  • EXISTS / NOT EXISTS(相関サブクエリ)
6. 集約関数

COUNT - 件数カウント
SUM - 合計
AVG - 平均
MAX - 最大値
MIN - 最小値

7. スカラー関数

UPPER / LOWER - 大文字・小文字変換
LENGTH - 文字列長
CONCAT - 文字列結合

使用方法

簡単ですが、実装例です。

// データベースインスタンスの作成
const db = new LocalDB('myapp');

// テーブルの作成
db.execute(`
  CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    name TEXT,
    age INTEGER
  )
`);

// データの挿入
db.execute(`
  INSERT INTO users (id, name, age) VALUES (1, 'Taro', 30)
`);

// データの取得
const result = db.execute(`
  SELECT * FROM users WHERE age > 25 ORDER BY age DESC
`);
console.log(result);

// データの更新
db.execute(`
  UPDATE users SET age = 31 WHERE id = 1
`);

// データの削除
db.execute(`
  DELETE FROM users WHERE id = 1
`);

github.com


JavaScript 第7版

JavaScript 第7版

Amazon

ティル・ナ・ノーグの話

最近久しぶりに6年ほど前に入手したMSX版のティル・ナ・ノーグを実機で遊んでました。
当時はマニュアルもあり、ディスクも問題なく使用でき、送料を合わせても2,000円以下なのでお買い得だったと思ってたのですが、現在の相場は少し上がって5,000円以上になってますね。

ティル・ナ・ノーグはシナリオジェネレータ搭載で無限(10億通り?)のシナリオが楽しめるRPGです。
とは言っても目的は魔王を討伐したり、姫を助けたりと数個しかないのですがね。マップやサブイベントがランダムに組み合わされて世界が作られます。

このティル・ナ・ノーグですが、PC98版発売当時に雑誌で見てすごくやりたいと思ってましたが、MSX版を発売したときは一番パソコンをやってなかった時期で特に買うことはありませんでした。
のちにPC-9801BXの時代にすでに発売から5年ほど経ってたPC98版をTAKERUで買ったのが初めてでした。
当時は律義に1で育てたパーティで2に移行して遊んでました。

その後Widows版がリメイクで発売されたときに久ぶりに遊んで、結局1~5まで全て発売のたびに購入しました。(たしかWindows版には2は無かったような)

しばらくしてPSP版で5(悠久の仁)が発売したときは携帯機ということもあり、結構やりこんでました。
PS VITA発売後はこれで遊ぶために、さらにダウンロード版も購入し、これは今でもたまに遊んでます。

ProjectEGGではPC98版の1と2とPC88版を購入しました。PC98版の1は今やるとまだイベントとかが本当に少なくてただの作業になるので、すぐに飽きてしまいます。だからと言って2を新規にやるとレベルが20から始まるのが嫌なんですよね。PC88版は2のシステムでレベル1から遊べるので何回か遊んでいます。

MSX版はPC88版の移植版で前から欲しいと思ってました。
通常はシナリオ作成に30分かかりますが、MSX turboRではディスク2を入れて起動すると高速モードになり、半分の15分で終わります。

Windows版以降のレビューではシナリオの薄さやシステムの古さでそんなに評価は良くないですが、昔から遊んでる人は十分楽しめる内容だと思います。シナリオが薄い分サクサク進めて何回も気軽に遊びたくなる部分もあると思います。

今でもやってると言いましたが、最近は数時間遊んでは飽きて、しばらく間を開けたらまたやりたくなって、やり始めるたびにシナリオを作って初めからやるので、全然エンディングを見てませんが、不思議とまた遊びたくなります。

ドラクエはオンラインの10以外は全てエンディングまで見て、1~3は色んな機種でクリアまで遊んで、さらにiPhoneで1~8まで全てクリアしてますが、ティル・ナ・ノーグシリーズの遊んだ総時間はドラクエシリーズより多いかもしれません。

シナリオが単純な分気軽に遊べるので、興味がある方はぜひ遊んでみてください。



ティル・ナ・ノーグ ~悠久の仁~

ティル・ナ・ノーグ ~悠久の仁~

  • システムソフト・ベータ
Amazon

Z88DKでMSX BASICのコマンドやファンクションと同じ感覚で使えるCライブラリ MSX BASIC Library for Z88DK公開しました

MSX BASIC Library for Z88DK
Z88DKでMSX BASICのコマンドやファンクションと同じ感覚で使えるCライブラリを公開しました。
github.com

MSX BASICのコマンドや関数をZ88DKのC言語から使えるようにしたライブラリを作りました。

元々は自分用でしたが、それなりに機能が揃ってきて面白いものができたので公開します。

数年前に作ったものを修正したソースをベースに、Calude codeで機能を追加したりバグを調査・修正して完成度を高めるといった手法で作りました。

MSX BASICでおなじみのSCREEN、COLOR、LOCATE、PRINTといった画面制御はもちろん、LINE、CIRCLE、PAINTなどのグラフィックス描画、PLAY文によるMML演奏、STICK/STRIGによるジョイスティック入力など、BASICの主要なコマンドを一通りカバーしています。

BASICのコマンド名がそのまま関数名になっているので、BASICに慣れた方ならすぐに使えると思います。

例えばHello Worldはこんな感じです。

#include <msxbasic/msxbasic.h>

void main(void) {
    basic_screen(1);
    basic_color(15, 1, 1);
    basic_cls();
    basic_print("Hello, MSX World!");
    basic_wait_key();
    while (1);
}

BASICで書くのとほとんど同じ感覚で書けます。

対応している機能をざっくり紹介すると、

・画面制御(SCREEN 0〜12、COLOR、LOCATE、PRINT、WIDTH、CLS、PRINT USING等)
・グラフィックス描画(PSET、LINE、CIRCLE、PAINT、DRAW、GET/PUT、塗りつぶし円・楕円等)
・スプライト(パターン定義、表示、衝突判定)
・サウンド(BEEP、PSG直接制御、MML演奏、3チャンネル同時演奏、効果音)
・入力(INKEY$、STICK、STRIG、PADDLE、キーボードマトリクス)
・文字列関数(LEFT$、MID$、RIGHT$、STR$、VAL、HEX$、BIN$、OCT$等)
・数学関数(SIN、COS、SQR、RND、MIN/MAX、CLAMP等)
・システム(TIME、VRAM操作、MSX機種判別、BIOS呼び出し等)
・VDP直接アクセス(V9938/V9958コマンド、COPY、ページ切替)

といった感じで、MSX BASICの主要機能はだいたい揃っています。MSX1からMSX2+、turbo Rまで対応しています。

このライブラリを使用したサンプルプログラムもいくつか用意しました。テキスト表示、グラフィックス描画、MSX2グラフィックス、スプライト、サウンド、入力、DRAWコマンド、PAINT/GET/PUT、文字列関数、数学関数、システム関数と一通り試せるようになっています。

リポジトリのexamplesフォルダの中に入っています。

コンパイルにはZ88DK(最新のnightly build推奨)が必要です。

ビルドはbuild.batでライブラリをコンパイルして、build_sample.batでサンプルをROMカートリッジとしてビルドできます。

ROMカートリッジだけでなく、MSX-DOSのCOMファイルとしてもビルドできます。

ROMカートリッジ:

zcc +msx -vn -O3 -compiler=sccz80 -lm -Iinclude -Llib -lmsxbasic -subtype=rom your_program.c -o your_program -create-app

MSX-DOS COMファイル:

zcc +msx -vn -O3 -compiler=sccz80 -lm -Iinclude -Llib -lmsxbasic -subtype=msxdos your_program.c -o your_program.com

APIリファレンスはdocsフォルダに英語版と日本語版のHTMLを用意しています。

GitHub:
https://github.com/uosoft/msx_basiclib_z88dk


NUARL NEXT1 私的レビュー

前回NUARL N10Proを購入したわけですが、悪い癖が出てしまいまして、ハイレゾ対応のTWSが欲しくなってしまいAmazon公式アウトレットで安く販売されていたNUARL NEXT1を購入してしまいました。


NUARL NEXT1

公式ページより
NEXT1はHi-Res再生対応の新型ドライバー、LDAC対応、ハイブリッド・アクティブノイズキャンセリング、マルチポイント、AI通話ノイズキャンセリングなど最新世代のテクノロジーに加え、独自のピュアダイレクトイコライザーを使用した自分だけの音が楽しめる多彩な機能を誇る完全ワイヤレスイヤホンです。
イヤホンの筐体とドライバーを一体化した“M2 NUARL DRIVER”を採用。高いエネルギー効率を実現し、PDEによるイコライジングを加えても破綻しない再生能力を誇ります。振動板の素材にはLCP(液晶ポリマーフィルム)を採用し、シングルフルレンジでHi-Res Wireless認証の40KHzまでの広帯域再生を実現しながらも素材固有の鳴きを抑え、よりピュアなサウンドの再現を可能にしました。

NUARL N10Proでもノイズが少なく十分クリアな音質だと思いましたが、NUARL NEXT1はよりクリアに感じ、長時間聴いてても疲れにくいと思いた。
TWS以外のイヤホンの場合にも当てはまりますが、基本的にハイレゾ対応となるとドライバ自体の性能が良く振動版のレスポンスも良いので全体的にクリアな音質になってると思います。

解像度も高く聴こえ、音が混ざる感じもなく1つ1つの音がはっきり聴こえます。

この機種もノイズキャンセリングは効果が薄いですが解像度が落ちたような感じや音が加工されてるような感じもしません。
外の音は聞こえますが、OFF時よりは小さくなります。

音の傾向は標準では割とフラットです。
専用アプリでイコライザを選択できるので、好みに合わせることができます。

NUARL N10Proを購入したばかりですが、NUARL NEXT1も安く購入できて大変満足です。

ClaudeでBASICインタプリタを作ってみた

自分で何かアプリを作成したときに、マクロ機能として何かしらの言語が扱えるといいなと思い、実験的にAIでWEBで動作するBASICインタプリタを作ってみました。

初めに渡したプロンプトは以下のものです。

WEBで動作するBASICが使用できるエディタを作ってください。
Basicインタプリタも実装してください。
FullBasicに準拠してください。

そのままでは素直に動作しなかったので、エラーや動作が変なところを伝えて修正していきました。
どのようにしたかの経緯を公開します。
claude.ai

割と簡単に動作するものができたので、クラス化して別のアプリに組み込むこともできそうです。