第二部 12:50〜

SAORIの紹介〜call_func.dll - しらたま

  • 概要:SAORIの紹介
  • SAORIってなに?
    • SHIORIの機能拡張プラグイン
    • SHIORIによらず共通の処理を外に出して、どのSHIORIからでも使えるようにしよう
      • 壁がみの変更、ゴミ箱の掃除
    • [さおりコレクション]で検索を
  • 簡単なSAORIの仕組み
  • call_func.dllの機能
    • メイン:DLL関数の呼び出し
      • 任意のDLLの関数を呼び出し使用可能
    • サブ:メモリ操作、構造体の作成
      • DLL関数酔いだしに使えるデータ構造を提供
  • DLL関数呼び出し
    • 出来ること
      • DLL関数を呼び出して、めんどうな処理を丸投げ
      • OSの機能(Win32API)の利用
    • 出来ない事
      • コールバック関数が必要な関数呼び出し(何かを列挙するようなこと)
      • ウインドウプロシージャが必要な処理
    • 出来るけど面倒なこと
      • 単純なンウル終端文字列以外が必要な関数の扱い(ファイル選択のダイヤログを出すこと)
  • DLL関数呼び出しの例(詳細は資料を見てください)


  • メモリ操作
    • 出来ること
      • メモリ上に領域を確保、領域の読み書き
    • 出来ないこと
      • 取得したメモリ領域サイズの変更
      • SHIORIの変数自体のアドレスの取得・変更
  • メモリ操作の例(ファイル書き込み)
    • _h=SAORI(cf,'call_func','CreateFileA','aaa.txt',0x40000000,0,0,2,0,0)
    • _p=SAORI(cf,'alloc_mem','str','abc')
    • _p_len=SAORI(cf,'clloc_memo','u32')
    • _=SAORI(cf,'call_fund','WriteFile',_h,_p,3,_p_len,0)
    • _len=SAORI((cf,'get_mem',_p_len,'u32')
    • _=SAORI(cf,'call_func','CloseHandle',_h)
    • _=SAORI(cf,'free_mem',_p,'str')
    • _=SAORI(cf,'free_mem',_p_len,'u32')
      • ※くわしくはしらたまさんの資料で!


  • 構造体作成
    • 出来ること
      • データ型の並びに合わせてメモリ領域確保
      • データ型の並びに合わせて領域の読み書き
    • 出来ないこと
      • 構造体の中に構造体をつくる
      • 共用体のある構造体の表現
  • 構造体作成の例(資料を見てください)


    • 赤枠部分=構造体のメモリ領域の定義
    • 緑枠部分=実際に値を書き込んで、構造体のアドレスを調べる
    • 枠無部分=書き込み関数
    • 青枠部分=メモリ領域の開放
  • 構造体作成のデモ(wavファイルの作成)
  • 応用
  • まとめ
    • SAORIは便利!
    • call_func使えばOSの機能使い放題!
    • SAORIを使って/作っておもしろいこと探してみよう!
  • 質疑応答
    • (ぽな)ほかの言語でもできますよね?HSPとかなでしことか
    • (しらたま)できますね。
    • (質問)Win32apiの簡単な索引ができますか?
    • (しらたま)VisualBasic用のWin32apiが平易で良いと思います。HSPのサイトにもあるかも。
    • (質問)この機能を使えば、パソコンを秘書にして「これやっといてくれ」とかできるということ?
    • (しらたま)できます。が、ものすごく大変です。もちろん、このDLLだけでやることもできます。
    • (ぽな)今あるSAORIがないようなことをやりたい時に使うDLLです。
    • (しらたま)SAORIにはなっていないが、OS本体なら簡単にできるようなことに使う。
    • (質問)HSPやなでしこでは、プロシージャやcallback関数はどう扱われているのか?
    • (しらたま)そのプログラム言語独自で持ってるプロシージャで代用している。callbackはあまり実際実装されているのはあまり見たことがない。実現する方法はある。

ワークショップ「デスクトップマスコット30分クッキング(ガチ)」 - 畝傍

  • 概要
    • 新しいゴーストにソロモードをつけてみるデモ
    • シェルの依頼の方法について
  • こんな子の中身をいじります


  • まずは―シェル依頼の方法
    • 今回の子は「○○」と「××」を足して2で割って自信満々にしてよ!とFA-Xさんに言ったらすばらしいものが出てきた!ので、参考になりません
    • 誰々っぽい子っていう指示は人によっては有効。Googleイメージ検索などで探すといいかもしれません。
    • 絵師さんによっては「髪の長い子」とかのラフな指示がいいことも。
    • 完成間際に「ちょっとまってやっぱコレ無し!」は禁じ手!一から作り直しになるのでつるされても知りません
    • 作ってもらったら必ずお礼を!
    • 頼んだら完成まで持っていく! 出来れば、依頼する時点でゴーストはある程度
  • 絵師さんから見たうれしい依頼って?
    • (FA-X)髪が長いか、色、全体的な性格ぐらい言ってもらえれば。服は要相談で。
    • (ぽな)FA-Xさん限定なら、畝傍さんの依頼方法は正しかったってことですね。
    • (とてちてた)チャットでいいから直接話したい。ラグのない方法で。
    • (畝傍)それ出来た方がいいかもしれないねー
    • (ぽな)イメージを詰めていく…。
    • (ぽな)考えれば考えるほど畝傍さんのは悪い方法だったねー。
    • (畝傍)私、FA-Xさんと面識あるのにねー。
    • (畝傍)2次創作のシェル(ゴースト)って、何が楽かって説明がいらないとこですね…。


説明のいらない例
 

    • (畝傍)あと、相手も人間だから、最低限の礼節を守って頼んでください。
    • (ぽな)(畝傍さんの例は)悪い例ですねー。
    • (ぽな)フリーゴーストっていうのを作るといいけど。
    • (畝傍)フランチェスカさんとかがあるんじゃ?
    • (ぽな)あれもそうだけど、もっとこう、トークは出来ててシェル募集、みたいな…
    • (畝傍)キャラの決まったポストみたいな…
    • (畝傍)さっそくグダグダになってますねー
    • (ぽな)済みません!ごめんなさい!じゃあ、本編へ。
  • ゴーストの作りはじめ方
    • (ぽな)作りはじめってどうしてます?
    • (畝傍)別のゴーストをコピーして、新しいゴーストのフォルダに貼り付けて、いらない部分をガーッと消して、ベースを作る。(実際に消しながら)
    • (畝傍)Rポストを大元にしているが、基本的にポストの色は全く出さないように全部消している。きのこや猫どりふは触ってないが…。
    • (ぽな)致命的な問題があって…、SSPと猫どりふを同時に使うとVistaや7では落ちます。原因はわかってるんだけど…
    • (畝傍)猫どりふとか軽く見てるかも。ユーザいなさそうだし…
    • (ぽな)バグ報告が来てるから必ず1人はいるよ!
    • (畝傍)オカクロとか新モードがたくさんあると、どんだけやらなきゃいけないのかーって感じになって…
    • (ぽな)あ、ちなみに、里々にはモード切替機能があって、今回はそれで新モードを作るというデモになります。
  • 辞書ファイルの準備
    • (畝傍)ゴーストには、何かがインストールされたときとか時報とか、いろんな時候のイベントが用意されていて、テンプレの該当部分を書き換えるだけで基本的にできます。
    • (畝傍)里々のゴーストだと、普通のしゃべり(ランダムトーク)、イベントがあったときのしゃべり、などがそれぞれ別のファイルになってます。触り反応の辞書、切替辞書、コミュニケーション辞書。
    • (畝傍)コミュニケーションっていうのは、人様のゴーストと会話したりするっていう。
    • (畝傍)まずは、どこから書き始めるのがいいのか?について話してみます。
    • (畝傍)私はランダムトークありきなので、まずランダムトークを書きます。で、トークが一定数に達したころにキャラが把握できてくるので、そのあとイベント時のトーク(インストール時の反応とか)を書きます。
    • (ぽな)ランダムトークっていうのは、何もしてないときにタラタラしゃべるやつのこと。
    • (畝傍)こういうやつのことですね。(ダブルクリックしてランダムトークさせる) …今気づいたけど、人様の前で自分のランダムトークを書くのって羞恥プレイですね…。
    • (畝傍)基本的に今日もランダムトークでいきたいと思います。前回?のうかべんで、「キーワードを基軸にランダムトークを書く」っていうのをやってみたけど、それを実演してみます。
  • ランダムトーク作成実演
    • (畝傍)そんなわけで、うかべんページのフォームでキーワードを募集してみたんですが、、
    • (畝傍)結局来なかった…。たとえば、「得意科目・苦手科目は何ですか」とか。
    • (とてちてた)保健体育!
    • (ぽな)得意なのか苦手なのか…
    • (追加トーク)「得意科目、ね。体育とか…水泳はちょっと苦手だけど。」
    • (畝傍)トークはオチをつけないといけないんだけど、ソロゴーストは…何が楽かって、オチをいちいちつけないといいって点ですね。ソロゴなら投げっぱなしでOK。
    • (畝傍)トーク中にCボタンを押すとツッコミ選択肢が出るゴーストさんとか…。
    • (畝傍)ツッコミを選ぶことができるようにすると、何通りも書かなきゃいけないから大変だし、ユーザさんのツッコミも「俺こんなこと突っ込まない」ってことになりそうだし…
    • (畝傍)さて苦手な科目はどうしよう?少しは苦手な点をつくっておかないとかわいげがない…。
    • (りすな)ホームルーム!
    • (畝傍)科目じゃないし!
    • (りすな)じゃあ、音楽とか。じつは音痴とか。
    • (畝傍)なるほど、おいしいかも。とりあえず保留!
    • (畝傍)じゃあ、母親の職業は何だろう?
    • (客席)弁護士!
    • (畝傍)ああ、そんな感じ。父親はメーカー勤務で…
    • (ぽな)ちょちょ、そうなの?
    • (畝傍)リードミーに書いてある。大事なのは設定を全部表に書かないこと。後で矛盾がでないように。
    • (ぽな)じゃ、次の質問。言うよ?言っちゃうよ?いい? 「ぱんつの色は何ですか?」
    • (畝傍)質問を募集したら最初に来たのがこれですよ…。黒かしましまですかね…
    • (ぽな)しましま!
    • (畝傍)ユーザさんに質問を募集するのも有効です。で、質問に回答しても、回答しなくてもOK。キャラが正しい答えを知ってるとは限らないし。
    • (追加トーク)「下着の色…? 頭大丈夫?」
    • (ぽな)次の質問…「片栗粉をきゅっきゅともむのは好きですか?」
    • (聴衆)しないよ!
    • (聴衆)するよ!(侃々諤々)
    • (畝傍)今のツッコミの流れ、全部トークにしてしまいましょうか…。あ、大事なこと言うの忘れてたけど、ここで出たアイデアは全部採用されるとは限りませんので。
    • (聴衆)えーー!
    • (聴衆)まあこれ全部採用したらめちゃくちゃに…。
    • (ぽな)次の質問「自転車に乗っているときに、まわりに誰もいないと思ってノリノリで歌を歌って聴かれてしまったことは何ですか?」
    • (畝傍)ないです! っていうか、住んでいる場所にもよるよねこれ。
    • (畝傍)わたしのゴーストはそういう住んでる場所とか絶対決めないです。ユーザの近所に住んでるとかの整合性が…
    • (ぽな)「友達は何人いますか。その中で親友と呼べる人は何人いますか」
    • (畝傍)うーん、友達か…。
    • (聴衆)隣のそれだけが友達とか…
    • (聴衆)(大ウケ)
    • (ぽな)「契約を迫る珍獣をどう思いますか」 これは…
    • (畝傍)これは…、ソロモードじゃない方がいいかも…?
    • (ぽな)むしろ当人がいないところで相方の話をするようなシチュエーションで…
    • (聴衆)ユーザがいないところでは案外優しいとか…
    • (畝傍)むしろアルコールランプで炙ったりしてますね。
    • (ぽな)さてここで、左の生物の中の人の絵ができあがりました!(FA-Xさんずっと描いてた)


    • (一同)(悲鳴と爆笑)
  • まとめ
    • (畝傍)さて、まとめなきゃいけないんですけど、パソコンが固まってしまったので出来ません。
    • (ぽな)マジでダメ?
    • (畝傍)だめです。まあ、とりあえず、前にキーワードを軸にトークを作るって話をしましたが、ユーザさんからの質問から膨らませることもできます。
    • (りすな)どうやったらいっぱい質問が来ますか?
    • (畝傍)私もそれ聞きたいです!
    • (畝傍)とりあえず、ユーザさんから質問が来たらすぐに返す!次の更新に入れる!あとはブログとかに毎回「質問募集中!」って書き続けるのもいいですね。 「え、もう募集終了してるんじゃないの?」って思う人もいるので…。
    • (りすな)ていうか、ニコレット以外に質問が来るようにするにはどうすればいいんですか!
    • (畝傍)………
  • 本当のまとめ
    • (ぽな)じゃ、まとめ! 畝傍さん、公開するときはどんなツール使ってます?
    • (畝傍)ゴースト更新なんとかシステムってやつ…。今配布されてないんですよね…。そだてはうちの環境で動かないので…。
    • (ぽな)えっ。動かないのはバグなのでうちで直します…。じゃ、もう一つ。どう宣伝しました?
    • (畝傍)Disc-2に自分で宣伝しました。あとは自分のブログに上げて、アンテナに引っかかったりとか。あとは…SiReFaSoはうちの環境で動かないので、りすなさんにかわりに登録してもらいました。
    • (ぽな)あれは動かないゴースト多いよねー。
    • (畝傍)craftmanurlでしたっけ?あれがないと登録できないんじゃなかったでしたっけ。
    • (聴衆)ぽなさんに宣伝してもらうとか!
    • (畝傍)うーん、今のエミリのメニュー(註:エミリに切替がついたゴーストを紹介するモードが実装された)、ありがたいんですけど…、ベースウェア作者は中立であった方がいいんじゃないかと…。
    • (ぽな)いいこと考えた!SiReFaSoの新規登録ゴーストデータをSSPで読み込んでおすすめする機能つければ…
    • (畝傍)いいですねそれ。絶対やってください。
    • (りすな)誰か記録しておいて!
    • (フィーネ)ちゃんと録音してますから!
    • (ぽな)や、やります! じゃ、畝傍さんありがとうございました!
    • (畝傍)アドリブでもやってみればけっこうやれるものですね…。
    • (ぽな)っていうか思いっきりオーバーしています……

シェル作成に関して - とてちてた

  • 概要
    • いつもシェル作りの生放送をしているので、それに関しての話をします。
  • デスクトップに綺麗にシェルを表示するには?
    • ?PNG、PNAを使う。
    • PNG自体には透過情報を持ってないので、PNA(モノクロPNG)に透明情報を持たせる。
    • 利点
      • 従来方式のためSSPに限らず使用できる。
      • 背景が緑色だったりして、伺かsurface画像だおt用意に判断できる。
      • 欠点=PNAの作成が手間(制作ツール「ふちどり」により手間ではなくなった。ファイル数が多くなる。
    • アルファチャンネルつきPNG(APNG)を使う。
    • 利点
      • お絵かきツールから書き出したらすぐ使えるために簡単、便利。
      • PNAというフィルターを通さないのでミスが少なくなると思われる
    • 欠点
      • Materiaやcrow、2010/07/31以前のSSPは対応していない
  • 「ふちどり」について
    • ふちどってくれます。
    • APNGからPNG+PNAの組み合わせを作ってくれる。とても便利。詳しくは「ふちどり」で検索を!(ukiya.sakura.ne.jp)
    • ふちどりを使うには .Net Framework 3.5 SP1 が必要なのでWindowsUpdateをやって入手してね!
  • PNG+PNAとAPNGのサイズ比較実演
    • APNGのみ=1.62KB
    • PNG+PNA=1.16KB
      • ただし毎回結果がかわってよくわからない!
    • 透明度がある(PNAが二値ではない)場合は、ファイルサイズの差が大きくなる傾向があるようだ。
  • ここでぽなさんの補足
    • 基本的にAPNG一枚の方が小さい。画像ヘッダが一枚分で済むので、理想的にいけばそうなるはず。しかし圧縮のアルゴリズムが違うと単純に比較できない。
    • あと、ファイルの読み込みが早くなる。2枚読み込むより1枚読み込む方がオーバーヘッドが少ない。
  • シェルの画像のつくりかた実演(SAI編)
    • 少し透けたエプロンが欲しいというリクエストがあったのでやってみる。


  • 従来のPNAの作り方
    • 全部のレイヤーを合成する。
    • 「不透明度保護」をオンにして、全体を白で塗りつぶす。(元々のαチャンネルレイヤーの濃さで白く塗りつぶされるので、PNAになる。
    • 基本的に背景色は黒にすること!
  • 今のPNAの作り方
    • APNGで書き出して、「ふちどり」に突っ込む。
  • まめちしき
    • 「書き出してから縮小」をすると1ドット・2ドットぐらいずれることがある
    • 「縮小してから書き出し」をする方がよいと思われる。
    • (以前の黒羽龍矢さんの発表に情報があります)
  • で、ゴーストに着せてみた!


  • まとめ
    • みなさんももっと着せ替え作るといいよ!
    • 前、黒羽さんが講演した「バックグラウンドアニメーション」を使うと動くしっぽを実装するのは簡単だが、古いSSPだと悲惨なことになる! ので断念…


こうなる。

  • 質疑応答
    • バックグラウンドアニメーションって何ですか?
      • 普通のアニメーションは全面に全面に書き重ねていくものだが、背面に背面に書いていく記法ががある。身体の後ろにしっぽを振らせたりできる。

実例に見る軽いけど凄い?伺かゴーストの作り方 - C.Ponapalt

  • 自己紹介
    • ベースウェアSSP」の現開発者
    • 通称「所長」「バグのひと」
      • 配布サイト「ばぐとら研究所」の代表?
      • うかべん大阪主催+統括本部長?
      • SSPのコードを理解するためだけにC++/Win32APIを覚えたド変態(原文ママ
    • ※重要※ 黄色派。
  • 機能系ゴーストのすすめ
    • デスクトップマスコットの系譜
      • 電子秘書的なものから始まった
      • ちょっと便利なことをやってくれるけど通り一遍の反応しかしない。……ではおもしろくないので、デスクトップ上で生き残れない!さてどうする?
      • 偽春菜の誕生
    • このような経緯があって、「機能系」は衰退傾向…だった。(過去形)
    • Web上でなんでもできる今、デスクトップ上に居残る意味とは何か?
      • JavaSvcriptやHTML5を活用すれば伺的なものは作れる→導入が気軽!(過去資料参照)
      • 「デスクトップ上でないとできない」何かが今だからこそ…
    • Webではできない理由とは?
      • MMDみたいな…
      • R18な…
      • 触り反応…
    • やっぱり秘書さんさせたいよね!
  • 基盤部分の検討
    • いきなりちゃぶ台返し「実は一から作ったほうが早いかも?」
    • 容易にGUIプログラムが組める開発環境の普及→軽くて凄いものが楽にくめる(Javaでくんでる凄いひとがいる)
    • わざわざ独自スクリプト言語や独自規格を学ぶメリットがあるのか?
      • ほかの手段もちょっと考えてみてください。
    • またちゃぶ台返し「『伺か』処理系でいいのか?」
    • 何を作りたいかにっよっては別の実行環境があることに留意。ほかのも見てみよう!
    • そこそこ安定してそこそこ高機能なら確かにある
  • それでも「伺か」なら…
    • (◕‿‿◕)僕と契約して、開発者になってよ!
    • そもそも私(ぽな)自信が怪しい仕組み超大好物。何かやるんはら相談も受けます!もしかしたら本体にも何か実装します!
    • ここからは、伺かプラットフォーム上で「機能系ゴースト」を作ろうとしている実例紹介と実装の工夫の一部をオレオレ解説!
  • SAMPLE #1 偽りの侠 零次(作者:犬死朗)
    • ずいぶん昔からある、某ATiのチップの名前がついた超多機能ゴースト
    • 大量の.BAT、.EXEファイルの集まり!
      • 見ただけでヤバそう!


    • SHIORiから実行ファイル群・バッチファイル群を呼び出すことで機能積み増し
      • DLL拡張で機能追加(SAORI universal)は全文検索機能など長時間かかる仕事には不向き(フリーズしたように見える)→別プロセスだといいよね!
      • VisualBasicで組んでる、ような…
      • 別プロセス適宜呼び出しなので通常稼働時はそこそこ軽い
    • ここから作者インタビュー!(犬死朗さん)
      • なんか苦労したことは?
      • VBコンポーネントが必要なことの周知とか…。最近はBATファイルにするようにしている。
  • SAMPLE #2 ざびたん (作者:)
    • 統合サーバ監視ソフトウェア(Zabbix)の擬人化フロントエンドを目指して開発中
      • SHIORI:文/YAYA
      • 声入り!
    • ファイル構成:いたってシンプル。ただ…「zabbi-msg.py」ってナニ??


      • メッセージをゴーストにSSTPで送信。異常メッセージなどもここに入って
      • 直接サーバを監視しているわけではない。zabbi-msg.pyが監視をし、そこからのSSTPを受けて喋るのが役割。


構成図

    • ざびたん動作テスト
  • SAMPLE #3 もへじ男爵(作者:NOB)
    • 月例計算をガチ実装してしまった強者!
    • DLLなし。Pure AYA
      • 月例計算処理は別の言語(たぶんC言語)から移植した→移植可能な程度の機能はある
      • 辞書(スクリプト)ファイルが大変なことになっている。かわりに拡張機能呼び出し無しなので計算のオーバーヘッド極小:軽い!
    • ここから作者インタビュー!(NOBさん)
      • なんか苦労したことは?
      • 基本的には移植可能なソースが公開されてたので、Cライクな文に移植するのはそんなでもなかったが…
      • 旧暦はじつはテーブル参照。100年分のデータが辞書の中に…!



旧暦テーブル!



天体計算!

    • 目医者を呼べ−!
  • 他の例
  • まとめ
    • 本体+SHOIRIの標準機能でもずいぶんできることがある
    • 時間なくなったのでここはあとでまとめます!