マルチメディアアプリケーションをスクリプトだけで簡単に作れるSivScript

この記事はOpenSiv3D Advent Calendar 5日目の記事です。

概要

SivScrtiptはマルチメディアアプリケーションをテキストエディタのみで簡単に開発できるソフトウェアです。 OpenSiv3D 0.3から導入されたAngelScriptによるスクリプト機能を利用して作られています。

  • exeをパスの通った場所にコピーするだけですぐに使える
  • ビルド無しで高速にリロード
  • VisualStudioやOpenSiv3Dのインストール不要
  • AngelScriptはC++と文法が似ているため簡単にC++に移植できる

インストール

  1. https://github.com/ongaeshi/SivScript/releases から最新のzipをダウンロード
  2. 展開してできたsiv.exeをパスの通った場所にコピー

使い方

以下のテキストをコピーして適当な場所にShape.asという名前のテキストファイルを作成します。

void Main()
{
   Window::Resize(640, 640);
   
   while (System::Update()) {
       for (int32 i = 0; i < 9; i++) {
           const Vec2 center(120 + i % 3 * 200, 120 + i / 3 * 200);
           Shape2D::Ngon(5, 80, center).draw();
       }
   }
}

コマンドラインから以下のコマンドを実行します。

$ siv Shape.as

実行画面が表示されます。コマンドラインから簡単に起動、ファイルを保存するたびに実行結果が変わっていくのが分かります。

f:id:tuto0621:20181204231243p:plain

その場で編集

アプリケーションを開いたままスクリプトファイルをエディタなどで編集します。すると自動でアプリケーションがリロードされ変更された結果をその場で確認することができます。

実際にやってみましょう。


SivScriptでリアルタイムプレビューしながらプログラミング

C++で開発するのと比べ、とても速いターンアラウンドで結果を確認することができます。

まとめ

最終的な実行結果とコードです。

f:id:tuto0621:20181204231340p:plain

void Main()
{
   Window::Resize(640, 640);
   double t = 0.0;

   while (System::Update()) {
       t += System::DeltaTime() * 0.2;

       for (int32 i = 0; i < 9; i++) {
           const Vec2 center(120 + i % 3 * 200, 120 + i / 3 * 200);
           Shape2D::Ngon(i + 3, 80, center, t)
               .draw(HSV(i * 80))
               .drawFrame(10, HSV(i * 80, 1.0, 0.7));
       }
   }
}

気軽にマルチメディアアプリケーションを作りたい、VisualStudioをインストールせずにOpenSiv3Dを触ってみたい、C++で本番アプリを書く前に軽く実験したい、などの用途に使いください。

RubyPicoをAppStoreに復活させました

rubypico.ongaeshi.me

TextwellのConcatアクションが便利

Textwellではかどるライン・ライティング Concat - W&R : Jazzと読書の日々をインストールした。

“。”を打つ必要がなくなり入力の負担が1つ減った。Textwellは二本指タップで行選択できるので編集が簡単。Reorder Linesアクションと組み合わせるともっと便利で、簡単に文書を組み替えることができる。

長文を書くにはやはりPCが便利だが手元にあるのはスマホなのでそこでもある程度の量の文書は書けるようにしておきたい。Textwellと豊富なアクション群のおかげで大分効率がよくなった。

ゼロトレ感想 - 書評

健康はコードを書き続けるのに必要なので定期的に体の仕組みや体操の本を買っている。話題になっていたので手に取った。

元々猫背気味で姿勢改善の本は色々買っているがなかなか治らない。それを治す方法を期待して読み始めた。

内容はシンプルで、姿勢の歪みをゼロにすることで体の調子が良くなるというもの。かかと重心の重要性をすごく語っていた。腰のポジションがよい人は足音が小さい、というのはなるほどと思った(大きい)。

半分以上はどのようにしてゼロトレが生まれたか、なぜゼロトレがよいのかの話でスラスラよめる。後半にエクササイズが載っているがとてもシンプル。1時間位で読み終わったがすぐに実践に入れるし、覚えることも少ないし、他の本も読みたいからこれくらいでいいんじゃないかと思った。

後、最初に目次がなくてゼロ章のプロローグが始まり、ニューヨーク一枚絵のタイトル、目次、一章開始、とおしゃれな映画のような構成になっているのも面白かった。読んでる人にちょっとでも飽きずに楽しんでもらおうという気持ちを感じた。

本のすすめ通り、今の姿勢をスマホのセルフタイマーを使って撮り、耳、肩、ひじ、ひざ、足首に点を付けたら、首がめちゃ前に出ていることが分かったのでこれがトレーニングでどれだけよくなるか楽しみ。

書評 - エンジニアの知的生産術

最近アウトプットが減っていると感じており増やしたくて手に取った。インプット、考えをまとめる、アウトプットまで知的生産に必要な要素がたくさんの文献から集められている。

インプットで参考になったのは

  • 読みたいところから手をつける
  • 目次は情報が圧縮されていて有用
  • 読書は本によって目的が違う(娯楽、情報を見つける、理解を組み立てる)
  • 脳内で音読すると遅くなるのでしない

考えをまとめるで参考になったのは

  • 5分で知っていることを書き出してみる(書き出し法)
  • KJ法

アウトプットで参考になったのは

  • 時間を区切る(タイムボックス化)

書き出してみると特にどうやって情報を集めるか、インプットの部分で参考になる箇所が多かった(人によって変わると思う)。今まで何かを勉強するぞ、となるとつい体系的に学ぼうとしてスピードを意識していなかった気がする。後、せっかく本を買ったので全部読まないともったいないという気持ちとか。

これからは必要な情報をできるだけ最短距離で取得していくように、状況によっては書籍やWebページも辞書のように使っていくことを意識してみたい。

この本のおかげで、インプット、知識をまとめる、アウトプットのやりかたは以前よりも効率よく行うことができそうだ。

ただし、その後に湧いてきた問題としてどの問題に取り組むべきか?どうやって取り組むことを発見するのか、というのがまだはっきりしていない。ここについては書籍の最終章をもう一度読み直したり、ほかの書籍にもあたってさらに考えを深めていきたい。

「エンジニアの知的生産術」を読んでいる

まだまだ途中だが面白い。個人的に印象に残ったところを抜粋する。

  • 大まかに全体像を把握するのは大切、Pythonリファレンスは1000ページあるが目次は6ページしかない、賞見出しは34行しかない
  • プログラミングは、作って検証することにとても適した教材
  • 新しいことを学んだら「1日前の自分にどう説明するか?」を考えて解説するとよい
  • 悲観的な勘違いと楽観的な勘違いでは悲観的な勘違いのほうが影響が深刻、楽観的な勘違いは後から考えて修正できる
  • 時間を固定して実行する手法をタイムボックス化と言う(今やっている)
  • 読むことの目的。娯楽、情報を見つける、理解を組み立てる
  • 読む速度が遅い人の中には、無意識に声帯を動かして「静かな音読」をしている人がいる(気をつける)

全部読み終わったらまた感想書く。知的生産をしている全ての人におすすめ。気になる一章があればそこだけのために買ってもよいと思う。

書評 - 学びを結果に変えるアウトプット大全

歳をとって体力が落ち20代の頃に比べて無理がきかなくなったこともあり、昔に比べてソフトウェアを作って公開したりブログを書くことがなかなかできなくなっていた。アウトプット量を増やすキッカケになればと思い手に取った。

インプットは結構できるのにアウトプットはなかなかできないなぁと思っていたのだが、「アウトプットは運動である」という一節が心に残った。インプットとはエネルギーの使い方が違うので、アウトプットするにはそれなりの準備が必要とのこと。長時間アウトプットをするのは大変なので時間を区切って一気に書くとよい、などアウトプットのためのコツがたくさん書いてある。(この読書感想文も書籍内のテンプレートをベースに10分で書いている)

アウトプットを増やすには、毎日小さなアウトプットをするトレーニングを繰り返して、アウトプット体力を増やしていくしかないらしい。毎日5分で日記を書くのがよさそうだったので、しばらく続けてみることにする。