Deckerとの4年間
Four Years with Decker (beyondloom.com)
要約
この記事は、ソフトウェアツール「Decker」の過去4年間の進捗状況をレビューしています。新しい機能、スクリプト言語Lilの改善、ユーザーコミュニティのハイライト、そしてAI生成コンテンツへの反対表明について詳述しています。特に、ゲームパッドサポート、画像圧縮の改善、カラー機能の拡張、そしてLil言語の洗練された演算子やインターフェースの追加に焦点が当てられています。
全文翻訳
Deckerとの4年間
10月が再び巡ってきたので、いつものように、Deckerの過去1年間の進捗状況を、リリース1.61から1.71にかけて振り返る時期が来ました。
- 新境地: Deckerで可能なプロジェクトの範囲を広げる機能。
- 言語の成長: Deckerのスクリプト言語Lilの改善。
- Deckerverse: Deckerのユーザーベースからのハイライト。
- 人間の創造性への誓い: 約束。
新境地
今年Deckerに導入された最も注目すべき新機能の1つは、ゲームパッド入力のサポートです。利用可能な場合はキーボードコントロールへのフォールバックも備えています。多くのDeckerユーザーはビデオゲームの構築に真剣に関心を持っており、gamepadはアーケードやアクションジャンルを手の届く範囲にもたらします。
[画像: ゲームパッドテスターデッキ]
ゲームパッドテスターデッキ
この機能で何が可能になるかを示す、より多くの例やライブラリを構築する余地はまだ十分にあります。まず、倉庫番の例がゲームパッドまたはキーボードでプレイ可能になりました。ダイアロギザーモジュールは、ダイアログボックスを進めたり、ダイアログツリーで選択したりするためのキーボードコントロールをサポートするように、静かに使用するゲームをアップグレードします。ダイアロギザーはまた、新しいapp.cursorフィールドを利用して、「同期」スクリプトで通常のボタンのホバー動作をシミュレートします。
もう1つの重要な機能強化は、ユーザーのアクションを必要としません。それは、画像圧縮の改善です。単純さのために、Deckerは当初、グラフィックスを保存する際に単純なビットパッキングとランレングスエンコーディングに依存していましたが、データブロック形式は将来的に優れたコーデックを導入する余地を残しました。新しいIMG3画像エンコーダーは、DeckerのGIFコーデックのLZWベースの内部構造を共有しており、多くのデッキ、特にディザリングカラーグラフィックスを使用するデッキの全体的なファイルサイズで2〜4倍の改善を達成します。新しいコーデックがIMG0、IMG1、またはIMG2ほどパフォーマンスが良くない状況では、古いコーデックが選択されます。E-Zineの著者は、フロッピーディスクにさらに多くのコンテンツを詰め込めるようになりました。
Deckerの仕掛けは、カスタムUIで仕掛けの設定を制御する新しい「属性タイプ」の導入により、微妙に強力になりました。これらの属性は、"data"または"note"にすることができます。"data"属性は、LOVEとして表示され、解析されるため、構造化された値を公開しやすくなり、独自のテキスト形式を考案する必要がなくなります。"note"属性は、エディタを提供する代わりに、インラインの文章ブロックを表示し、仕掛けが自己文書化するためのより多くの方法を提供します。
[画像: 使用方法を説明するノート属性を持つ仕掛け]
カラーサポートは引き続き拡大・改善されています。すべてのウィジェットには、既存の.showおよび.font属性と組み合わせて外観を制御する.pattern属性が追加されました。メニューのWidgets → Pattern…から、または右側のツールバーのパターン見本をクリックするだけで、選択したウィジェットのパターンをすばやく変更できます。
[画像: ウィジェットの.pattern属性を変更する]
リッチテキストが選択されている場合も同様に、右側のツールバーを使用して、テキストのパターンまたは色をすばやく変更できます。
[画像: リッチテキストランのパターンを変更する]
デッキの作成をより簡単で直感的にするために、既存の機能にも多くの改善を加えました。たとえば、スケーリングされたキャンバスに画像を貼り付けると、貼り付けた画像が誤って切り取られるのを防ぐために、キャンバスの「論理サイズ」の寸法が調整され、どのエディタモードからでもクリップボードの画像を新しいキャンバスウィジェットとして貼り付けることができます。
[画像: キャンバスへの画像の貼り付け、および新しいキャンバスとしての画像の貼り付け]
フォント/DAムーバーは、リソースに関するより有用な情報を表示し、ディスク上のデッキサイズへの貢献も含まれます。このダイアログからLilモジュールのスクリプトにアクセスすることもできます。
[画像: リソースメタデータを表示する]
いつものように、スクリプトAPIにはさまざまな追加がありました。
- システムインターフェースには、ローカルタイムゾーンオフセットを取得するための
sys.zと、Lilのバイトコードインタープリタによって実行された作業を測定するためのsys.opsが追加されました。 - Appインターフェースには、Deckerの編集ツールの状態を検査および変更するための
app.gridsize、app.penstroke、app.penfill、表示環境でDeckerをロックするためのapp.kiosk、およびWeb-Deckerに提供されたURLパラメータにアクセスするためのapp.paramsが追加されました。 - RTextインターフェースは、リッチテキストテーブルの新しい
trim演算子のより一般的なバージョンとしてrtext.trim[]を提供します。 - サウンドインターフェースは、非整数サンプルインデックスを介してアクセスされるときにサンプル間で線形補間を行い、
sound.scale[]関数は波形を時間に関して圧縮、伸長、反転させることができ、read["sound" "samples"]オーバーロードは大きなオーディオファイルをサンプルの配列としてインポートできます。 - 画像インターフェースは、画像を180度回転するためのショートカットとして
image.transform["turn"]、画像の不透明領域の端に沿って境界線を追加するためのimage.outline[]を提供し、image.merge[]は"^"演算子を使用したXOR合成をサポートするようになりました。 - Dangerインターフェースは、URL/パスまたはDeckインターフェースによって特定のドキュメントを開くようにDeckerに指示するための
danger.open[]を提供し、ランチャーの構築や複数のデッキから非常に大きなプロジェクトをまとめることが可能になります。 - Arrayインターフェースは、浮動小数点値の操作のための
"f32l"、"f32b"、"f64l"、または"f64b"のキャストをサポートするようになり、array.value属性は配列全体をプリミティブリストまたは文字列に変換するための便利なショートカットを提供します。
言語の成長
Deckerのスクリプト言語であるLilの進化は、安定性に向けて「クールダウン」を続けていますが、いくつかの演算子の動作の修正から始まり、いくつかの洗練と追加がありました。
比較演算子<と>は、数値引数のペアが与えられた場合は数値比較を実行し、文字列のペアを辞書順で比較するようにオーバーロードされています。これは非常に便利です!混合型の値が与えられた場合、これらの演算子は元々、両方の引数を文字列として解釈することを「優先」していました。実際には、この動作は、ユーザーがフィールドに数値を格納し、フィールドの.text属性(文字列)ではなく.data属性(この場合は数値になる)にアクセスするなどの一般的な状況で、非常にばかげて混乱を招く結果につながりました。
theField.text # "23"
3 > theField.text # 1
<および>演算子は、|(最大)および&(最小)演算子の動作と一致して、いずれかの引数が数値の場合は数値解釈を「優先」するようになりました。
3 > "23" # 0
30 > "23" # 1
また、table演算子の動作における、より微妙な欠陥を修正しました。この演算子は、引数の構造を調べて、リストの辞書とリストのリストのデータをLilテーブル値に強制します。nil値の導入により、この強制動作を調整することが役立ちました。リスト内のnilを空のリストとして、辞書のリスト内のnilを空の辞書として受け入れます。
table "%j" parse "[[11,22],null,['a','b']]"
# +-----+-----+
# | c0 | c1 |
# +-----+-----+
# | 11 | 22 |
# | nil | nil |
# | "a" | "b" |
# +-----+-----+
table "%j" parse "[{'a':11},null,{'a':22}]"
# +-----+
# | a |
# +-----+
# | 11 |
# | nil |
# | 22 |
# +-----+
最後に、,演算子の繰り返し適用によるリストの削減を担当するraze演算子にいくつかの調整を加えました。razeのベースケースは、単一要素の値をアトムに折りたたんでいましたが、改訂された動作は、内部の一貫性を高めるために、それらをリストのままにします。
raze list 23 # was 23 now is (23)
raze 23 # was 23 now is (23)
raze "AB" # was ("A","B") now is ("AB")
Lilには、一般的なイディオムを簡略化するための4つの新しい単項演算子trim、ceil、rev、およびdistinctが追加されました。
trim演算子は、文字列から先頭および/または末尾の空白を削除します。これは、入力列全体をクリーニングするためにリスト全体に適合させることができます。
trim " ab c\n" # "ab c"
trim (" a"," b") # ("a","b")
ceil(天井)演算子は数値を切り上げます。これはfloorの対です。これも適合します。
ceil (0.1,2.5,37.9) # (1,3,38)
rev演算子は、文字列、リスト、または辞書の要素の順序を反転させます。これはKの|:のようなものです。
rev "abc" # "cba"
rev (11,22,33) # (33,22,11)
rev "abc"dict"def" # {"d":"a","e":"b","f":"c"}
distinct演算子は、文字列、リスト、辞書、またはテーブルから重複しない要素を抽出します。これはKの?:のようなものです。
distinct "cabba" # "cab"
distinct (2,1,3,2,1) # (2,1,3)
trim演算子は、多くのパーサーのようにプレフィックスをトリミングする場合に、不要な内部文字列コピーを回避します。また、distinctはinと同様に内部ハッシュセットを使用します。適切に使用すると、新しい演算子はパフォーマンスに劇的なプラスの影響を与える可能性があります。実用的なコードのベンチマークにより、whileループをわずかに効率化し、辞書の和と更新のパフォーマンスを改善するための簡単な方法も明らかになりました。
Bitsインターフェースは、数値をバイナリ数字のリストに分解する(これはLilの適合算術演算子で簡単に操作できます)またはバイナリ数字を数値に再パックするための.decode[]および.encode[]操作で拡張されました。これにより、以前は明示的なループを必要としていた多くの一般的なデータ準備タスクを処理するのに役立ちます。
bytes:112,112,32,112,168,32,80,80
i:image[8,count bytes]
i.pixels:bits.decode[8 bytes]
i.pixels
# ((0,1,1,1,0,0,0,0),
# (0,1,1,1,0,0,0,0),
# (0,0,1,0,0,0,0,0),
# (0,1,1,1,0,0,0,0),
# (1,0,1,0,1,0,0,0),
# (0,0,1,0,0,0,0,0),
# (0,1,0,1,0,0,0,0),
# (0,1,0,1,0,0,0,0))
bits.encode[8 i.pixels]
# (112,112,32,112,168,32,80,80)
Lilからさらにパフォーマンスを引き出すもう1つのツールは、新しく汎用化されたKeyStoreインターフェースです。元々モジュールが永続データをシリアライズするための手段として設計されていましたが、KeyStoresはkeystore[]関数で自由に構築できるようになり、dictで辞書全体を一度に構築するのが望ましくない場合に汎用的なミュータブルな「辞書ビルダー」として使用できるようになりました。この種の汎用化は、Lilの簡潔な標準ライブラリがより多くのパンチをパックするのに役立ちます。
# 一般化された幅優先探索ルーチン、
# 状態の前駆者を追跡するためにKeyStoreを使用:
on bfs successors start do
local pred:keystore[]
local todo:list start
while count todo do
local here:first todo
todo:1 drop todo
each there in successors[here] do
if nil~pred[there] do
pred[there]:here
todo:todo,list there
end
end
end
pred
end
Deckerverse
今年、Deckerエコシステム全体で多くの興味深くエキサイティングな開発がありました。
Deckerには、便利な5つの新しいサンプルデッキが付属しています。
[画像: All About Transitionsデッキ]
All About Transitionsでトランジション効果について学びましょう。
[画像: Statsデッキ]
Statsモジュールで有用な統計尺度を計算しましょう。
[画像: Hersheyデッキ]
Hersheyモジュールでベクトルテキストを操作・描画しましょう。
[画像: Dfxrデッキ]
Dfxrでプロシージャルな効果音を生成しましょう。
[画像: Qrデッキ]
QrモジュールでQRコードを生成しましょう。
公式のDeck-Month 3およびDecker Fantasy Camp 2026のジャムに加えて、Deckerユーザーは数多くの追加の楽しいイベントを企画しました。
- MillieのHybrid Decker Zine Jamは、オンラインで表示できるデッキや、印刷して8ページの小冊子に折りたたむことができるテンプレートに基づいています。
- Decker App Jamは、Deckerでツールや機能的なアプリケーションを作成することに焦点を当てました。
- SwanchimeのDecker VN Jamは、Deckerでビジュアルノベルを作成することに関するものです。
この記事を書いている時点で、ジャムはitch.ioだけで113以上の新しいデッキの公開につながりました。昨年、itch.ioで#deckerタグが付いた213のゲームを数えました。今日では353、書籍やコミックなどの他のカテゴリを含めると474に増加しました!人々が公開したものをいくつか見てみましょう。
これまでのところ最も楽しいリリースは、Phinxel’s Phield Notesでした。これは、AhmwmaがRiddle of the Templeのリリース以来、一生懸命取り組んできた、Deckerで何かを作るための、驚くほど初心者向けのマルチメディアガイドです。Deckerに少しでも興味のある人は誰でもチェックすべきです。Deckerができることの豊富なデモンストレーションがあり、各ページには素晴らしいピクセルアートが満載です。
みんなのお気に入りの小さな親切なキャラクター、Phinxel。
Screwtapelloは、さまざまな既存のビットマップフォント形式をDeckerで動作するように適応できるフォントインポータユーティリティを構築しました。これは、Decker で Decker のためのツールを構築する素晴らしい例です。
.fzx、.uf1、.uf2、.uf3、.yaffフォントなどをインポート!
Missooniは、多くの便利な仕掛けとさまざまな小さなアートおよびジャーナリングツールを公開しました。これには、16x16アイコンの作成に特化した描画ツールである愛らしいminartも含まれます。
絶妙なミニチュア。
ツールのこのトレンドに続いて、Durianのa bunch of decker toolsも強調したいと思います。これはまさにその名の通りです。Deckerで実行できる小さなユーティリティのコレクションです。Deckerで構築された実用的で個人的なプログラムを見るのが大好きです。
ジャーナリングミニアプリ。
Millieは、Deckerの最初のリリース shortly 後から定期的にジンを公開しています。彼女の最近終了したEXシリーズを便利に閲覧したい場合は、Zine of Millie EX Compilationをチェックしてください!これはあなたのDeck Kioskにぴったりです。
Deckerに没頭するためのカスタムクラフトアプライアンス。
Salty P. SlugのWhat 2000s Skate Video Are You?は、本物のヴィンテージ2000年代の伝承とアイコンで満載された、緻密に調査され、愛情を込めて作成された性格診断クイズです。もう年を感じますか?
[画像: What 2000s Skate Video Are You?]
賢くあなたの乗り物を選んでください。
崩壊してほこりになることと言えば、DogpinkのBonelust(注:コンテンツ警告あり。職場での閲覧には不向きな可能性があります!)に非常に感銘を受けました。これは2026年のToxic Yuri VN Jamのために初めて作成されたDecker作品です。主題は万人受けするものではないかもしれませんが、文章はシャープで、アートとサウンドデザインはぞっとするほど喚起的です。
Nollの物語が始まります。
最後になりましたが、Harlequin DiverのThe Dreams in the Peacock Houseのリリースをお祝いします。これはハイブリッドポイント&クリック/パーサー駆動のインタラクティブフィクション作品であり、Steamで公開された最初のDeckerベースのゲームです!Deckerで構築できる体験の範囲を真にツアー・デ・フォースしており、数時間かけてプレイする価値があります。
[画像: The Dreams in the Peacock House]
プリレンダリング3D、コラージュ、ピクセルアートのきらめくブレンド。
このリストは、Deckerユーザーが今年構築したすべての素晴らしい創造的なプロジェクトの表面をかすめたにすぎません。もっと発見すべきことがあります。itchで閲覧して、他に何が見つかるか見てみませんか?
人間の創造性への誓い
過去数年間、ウェブ上のクリエイティブコミュニティは、一連の非常に憂慮すべきサプライチェーン攻撃によって揺さぶられてきました。私たちが皆使用しているデジタルインフラストラクチャの重要な部分、無料およびオープンソースソフトウェアでさえ、いわゆる「生成AI」ツールの排泄物によって汚染されています。私は、これらのツールが創造的な表現、人間の協力、教育、そして他の多くの否定的な外部性に対して、深く有害で無礼であると信じています。クリエイティブな人々、プログラマー、作家、ビジュアルアーティスト、ゲームデザイナーを含め、彼らの技術を実践するためにスロップを受け入れることを余儀なくされていると感じるべきではありません。彼らがプロジェクトを構築しているプラットフォームが彼らの下で腐っていくことを心配する必要はありません。
Deckerは人間によって、そして人間のために作られています。Deckerは、いかなる形態のLLMまたは「genai」ツールによっても、またはそれらの助けを借りて開発されたことは一度もありません。将来的にそれらを使用する意図もありません。Deckerの主な外部依存関係はSDLであり、SDLは厳格な反LLM貢献ポリシーを持っています。また、将来的にスロップを取り入れた依存関係を回避または徐々に置き換えるために最善を尽くします。スロップフリーのブラウザやオペレーティングシステムはより大きな課題ですが、ネイティブDeckerはnetBSDとHaikuをサポートしています。
人間の創造的な労働が私たちのオンライン世界を構築しました。もし私たちがそうすることを余儀なくされたなら、私たちは一歩ずつ新しい世界を構築できます。
結論
Deckerに興味を持ったなら、Decker Community Forumに参加することを検討してください!Deckerについての言葉を広め、Deckerエコシステムを豊かにするあなたの助けは、他の人々の創造的なプロジェクトに大きな影響を与える可能性があります。多くのフォントなどが入ったDeckerリソースインデックスも利用可能です。
次の公式Deckerジャム、Deck-Month the fourthは2026年12月に予定されています。この記事をいつ読んでいるかによっては、The Decker VN Jamに参加するわずかな機会があるかもしれません。また、ロチェスター地域にいる場合は、10月24日に対面式のDeckerジャムが予定されています。それがどうなるか聞いてみたいです!
あなたを幸せにするものを作りましょう。