2012年04月22日

かみんぐすーん

M3カタログビューアのandroidアプリは鋭意開発中、リリースに向けての準備を進めています。 近日中に実験版をリリースする予定。 表示用のマップデータ作りが一番精神的にクルものがあります。目がショボショボする。
posted by yuji_at_radiance at 01:16| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2011年11月20日

【作ってみた】サクラエディタでRubyをインラインで書いて実行するマクロ

Windowsで普段使っているエディタでもRubyでちょっとしたワンライナーを実行できると素敵ということで、サクラエディタのマクロを作ってみた。

■ダウンロード

windows版rubyのインストール場所に合わせて変数rubybinを変更。Vistaや7を使う場合、変数rubyscrにも適当なファイル名をフルパスで書いたほうがよいかも知れない。 設定を書き込んだら、メニューの外部マクロ設定で読み込む。ついでに右クリックメニューに足しておくと幸せになれると思う。

■コード
Vimスクリプトに比べるといろいろと楽々。サクラエディタは一時ファイルをSJISで書き出すので、エディタで実際に編集している文字コードに関係なく-Ksオプションを足すのが大事。

rubyculc_111120.js
var rubybin = "(Your Ruby Executable) -Ks";
var rubyscr = "script.rb";
var command = rubybin + " " +  rubyscr;

//writeout script
var selected = Editor.GetSelectedString(0);
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fpout = fso.CreateTextFile(rubyscr);

fpout.WriteLine("include Math");
fpout.WriteLine("def vscrEvalDescr() return yield(); end ");
fpout.WriteLine("print vscrEvalDescr(){");
fpout.WriteLine(selected);
fpout.WriteLine("}");

fpout.close();

//execute script
Editor.ExecCommand(command, 3);

参考にした資料

posted by yuji_at_radiance at 22:06| Comment(0) | TrackBack(0) | ソフトウェア | このブログの読者になる | 更新情報をチェックする

2011年11月19日

【作ってみた】vimのバッファ内にrubyをインラインで書いて実行するスクリプト

Vimでテキストを打っている時にスクリプト言語や他のアプリケーションを使いたくなる時がある。ちょっとしたパターンを打ち込んだり、文字列をバラしたり、数式を計算したくなったり。大抵は正規表現とパイプを駆使して何とか頑張るが、頑張りたくない私のために。rubyを数行書く→実行→結果をバッファに挿入できるようにしてみた。

■ダウンロード

  • rubyinline_20111119.vim
  • rubyinline_20111120.vim
  • sourceコマンドで読み込んで使う。
    :source rubyinline_20111119.vim
    

    ■使い方:コードブロックとして評価
    rubyスクリプトはrubyの文法が許す限り何を書いてもよい。 visualモードでrubyスクリプトの箇所を選択した状態で(Leader)srbの順にキーを打つ(普通、Leaderはバックスラッシュキーのことらしい)。

    普通のテキスト文書
    ↓ここから
    5.times(){|iter|
      puts iter.to_s
    }
    ↑ここまで
    
    スクリプトは消去されて、標準出力の内容がバッファに追記される。
    普通のテキスト文書
    0
    1
    2
    3
    4
    
    現在のところ、実行結果が挿入される位置が1〜2行ずれる。どうやらr!コマンドでrubyを叩いているのがいけない様子。

    ■使い方:電卓モード(式として評価)
    テキスト上に現れる数式の評価値を知るためにいちいち整ったrubyの構文を書くのは面倒である。そこで、選択範囲のテキストを評価した結果を挿入するモードを作成。 こちらは(Leader)crbと打ち込む。

    たとえば、sin(1.57)*2の計算結果がほしいとしよう
    
    結果はこうなる。
    たとえば、1.99999936586367の計算結果がほしいとしよう
    
    rubyのブロック評価を使って実装しているので、複数の式を選択した場合には最後の式の評価結果が返る。また、定数を使ったりメソッドを宣言したりできない。

    ■コード
    はじめてvimのスクリプトを書いた。なんかvimな人にもrubyな人にも怒られそうな汚いコードだ。(11/20修正:putsじゃなくてprint使えば最後の改行を正規表現で落とす必要ない)

    rubyinline_20111120.vim
    "Private Functions
    :function! s:Rbscr_impl(scriptbody)
      "name of output file
      :let l:tempfile = tempname()
      :try
        "writeout and execute ruby script
        :call writefile(a:scriptbody, l:tempfile)
        :execute "r! ruby " . l:tempfile
      :finally
        "delete file
        :if filewritable(l:tempfile)
          :call delete(l:tempfile)
        :endif
      :endtry
    :endfunction
    
    :function! s:Rbculc_impl(scriptbody)
      :let l:culcPrefix  = ["#!/usr/bin/ruby"]
      call add(l:culcPrefix, "include Math")
      call add(l:culcPrefix, "def vscrEvalDescr() return yield(); end ")
      "変更:putsじゃなくてprint
      call add(l:culcPrefix, "print vscrEvalDescr(){")
    
      :let l:culcPostfix = ["}"]
    
      call extend(a:scriptbody, l:culcPrefix, 0)
      call extend(a:scriptbody, l:culcPostfix)
    
      :let l:tempfile = tempname()
      :try
        "writeout and execute ruby script
        :call writefile(a:scriptbody, l:tempfile)
        :let l:result = system("ruby " . l:tempfile)
        "変更:末尾の置換は要らない
        " :let l:result = substitute(l:result, "\n$", "", "")
        :execute "normal " . "i" . l:result
      :finally
        "delete file
        :if filewritable(l:tempfile)
          :call delete(l:tempfile)
        :endif
      :endtry
    :endfunction
    
    "Public Functions
    :function! Rbscr_visual() range
      :let l:vmode = visualmode()
      :if l:vmode == 'v'
        :let l:save_a = getreg('a')
        :silent :normal! gv"ad
        :let l:selected = split(getreg('a'), "\n")
        :silent :call s:Rbscr_impl(l:selected)
        :call setreg('a', l:save_a)
      :endif
    :endfunction
    
    :function! Rbscr() range
      "Retrive selected text
      :let l:selected = getline(a:firstline, a:lastline)
      "delete selected region
      :silent :execute a:firstline . "," .  a:lastline . " delete"
      "write file and call
      :silent :call s:Rbscr_impl(l:selected)
    :endfunction
    
    :function! Rbculc_visual() range
      :let l:vmode = visualmode()
      :if l:vmode == 'v'
        :let l:save_a = getreg('a')
        :silent :normal! gv"ad
        :let l:selected = split(getreg('a'), "\n")
        :silent :call s:Rbculc_impl(l:selected)
        :call setreg('a', l:save_a)
      :endif
    :endfunction
    
    "Key Mappings
    :execute ":map  srb :call Rbscr()"
    :execute ":vmap srb :call Rbscr_visual()"
    :execute ":vmap crb :call Rbculc_visual()"
    

    参考にした資料

    posted by yuji_at_radiance at 19:30| Comment(0) | TrackBack(0) | ソフトウェア | このブログの読者になる | 更新情報をチェックする

    2011年10月29日

    2011秋M3向けリリース物件まとめ

    明日開催の音系・メディアミックス同人即売会M3のandroid版カタログビューアのリリース物まとめです。リリース物件が増えたので、まとめを作成。急に更新が入った場合は本記事を更新します。

    ■ 何枚かスクリーンショット
    capture_28_map.png
    マップ表示
    capture_28_list.png
    リスト表示
    capture_28_spec.png
    サークル詳細表示

    m3ss_main2.png
    上映ナビメイン画面。
    m3ss_widget.png
    3x3サイズの上映ナビウィジェット。

    posted by yuji_at_radiance at 12:44| Comment(0) | TrackBack(0) | ソフトウェア | このブログの読者になる | 更新情報をチェックする

    M3カタログビューア:上映スペースナビリリース

    10月30日に開催される、音系・メディアミックス同人即売会「M3」のandroid版上映スペースナビアプリをリリースします。M3公式webサイトはこちら。カタログビューアアプリ本体はこちら

    ■機能:
    単に上映リストを表示するだけでは面白くない(pdf版があるので)ということで、 ちょっとだけ人力検索機能がついてます。

    • 上映作品のリストを表示
    • ウィジェットで直近のプログラムを表示
    • アラームの設定:指定した作品の上映が近づいたら警告
    • 上映状況を人力でアップデートすることにより、高い精度を実現(できることを期待している)
    人力更新ということで、皆様のご協力をぜひともお願いします。

    ■インストール:
    例によって野良apkです。ネット接続とバイブレーションの権限を要求します。端末で直接ダウンロードする場合は、サードパーティのブラウザだとうまくダウンロードできない場合がありますので御注意を(以前は、dolphin browserとかダメでした:途中でダウンロードが勝手に止まってしまう)。

    ■操作説明とスクリーンショット:
    m3ss_main2.png
    メイン画面。上映作品の一覧を表示します。現在上映中の作品に対してチェックマークのボタンを押してください(でも連打はダメよ)。チェックボックスのクリックをサーバーで集計して、「NowPlaying」の位置を修正します。スターのボタンはアラームの予約。
    m3ss_widget.png
    3x3サイズのウィジェット。上映中と直近の3件を表示します。ウィジェットをクリックするとメイン画面が立ち上がります。
    m3ss_widgetconfig.png
    ウィジェットの設定画面。メイン画面から移動できます。更新周期を変更できます。あまり短くするとバッテリーがもたなくなるので注意。スマホなしで展示場から帰るのは嫌でしょう?
    m3ss_alarmconf.png
    アラームの設定画面。更新周期とバイブレータ利用の有無。アイテムの削除、アラーム禁止もこの画面で行います(アラームの開始はスターボタンを押すだけでOK)。
    m3ss_alarmshow.png
    アラームを設定した作品の上映が近づくと、この画面が立ち上がります。

    posted by yuji_at_radiance at 01:22| Comment(0) | TrackBack(0) | ソフトウェア | このブログの読者になる | 更新情報をチェックする

    2011年10月22日

    M3カタログビューアー(M3Navigator)更新(10/22)

    10月30日に開催される、音系・メディアミックス同人即売会「M3」のandroid版カタログビューアーアプリをリリースします。M3公式webサイトはこちら

    ■インストール:全自動
    簡単インストーラーを使ってインストールできます。

    1. 簡単インストーラをインストールしてください
    2. 簡単インストーラを実行して、本体とカタログデータをインストールします
      • 「Install M3Navigator」ボタン、「Install Catalog」ボタンをクリック
      • 本体はSDカードの書き込みアクセスを要求します
    3. 本体を起動します
    installer.png
    インストーラの画面。「Install M3Navigator」「Install Catalog」を実行する。

    ■インストール:手動
    インストーラを使いません。ファイルマネージャー系のアプリ、またはPCと接続する必要があります。

    • M3Navigator本体
      1. 本体をインストールします
    • カタログデータ
      1. カタログ本体をダウンロードします:catalog_m3_28_111022A.zip
      2. カタログ本体はzipファイルです。解凍ソフトを使ってください
      3. 本体を解凍して出来たm3_28ディレクトリを/sdcard/m3navi/m3_28に配置してください
      4. 本体を起動します

    ■ 機能説明
    詳細な説明は、機能説明ページを御覧ください(M3Navigator紹介ページ)。スクリーンショットもあります。
    capture_28_map.png
    マップ表示
    capture_28_list.png
    リスト表示
    capture_28_spec.png
    サークル詳細表示

    posted by yuji_at_radiance at 16:53| Comment(0) | TrackBack(0) | ソフトウェア | このブログの読者になる | 更新情報をチェックする

    2011年10月21日

    M3カタログビューアー超暫定版

    来る10/30に開催される音系・メディアミックス同人即売会M3(第28回)に向けてandroid版カタログビューアーアプリを開発中です。M3公式ページはこちら

    サークルリストと配置図が公式ページで公開されたので、今回もカタログアプリの開発を正式にスタートしました。アプリの説明はこちら(過去記事)ちょっと手を動かしてみたので、「超暫定版」を公開します。人柱様向け。
    注意:「超暫定版」では重要なチェックリストを作らないでください。本体・データベースに更新の予定があります。アップデートに際しては出来る限り後方互換性の保持、ユーザデータの保全に努めますが、チェックリストへの書き込みが消える恐れがあります。

    ■ 超暫定版でサポートする機能
    超暫定版では、全機能が利用可能です。

    • マップの表示
    • サークルの検索
    • サークル詳細表示
    • サークルチェック(色付け)
    • twitterなどテキスト投稿サービスとの連携
    • その他、過去記事を参照
    ただし、下記「既知の問題」を除きます。

    ■ 超暫定版のインストール

    • 本体
      • 前回イベントでm3Navigatorをインストールしている場合は、そのまま使えます。新規にインストールする場合はこちらからどうぞ(4/28の更新記事)。
    • データベース
      1. 超暫定版のデータベースをダウンロードします。(catalog_m3_28_pre.zip
      2. zipファイルを解凍するとm3_28ディレクトリが得られます
      3. 得られたm3_28ディレクトリを/sdcard/m3navi/m3_28に配置します。

    ■ 既知の問題

    • チェックリストの色付けが、マップに反映されません。データベースが未完成のため。
    • リスト表示からマップに戻る時に、マップが第一展示場に戻ってしまいます。
    • 端末を横表示に切り替えるときに、マップが第一展示場に戻ってしまいます。

    ラベル:M3Navigator M3 android
    posted by yuji_at_radiance at 00:16| Comment(0) | TrackBack(0) | ソフトウェア | このブログの読者になる | 更新情報をチェックする

    2011年10月10日

    ウィジェットも作ってみたよ:秋M3向けカタログビューア開発進捗

    10月30日に開催される音系・メディアミックス同人即売会「M3」向けにandroid電子カタログアプリを開発中。まだサークルリストのweb版が公開されていないので、先に上映スペースナビゲータ(大いに人力頼み版)を作成中。Androidアプリの特長といえばウィジェットだろうということで、ウィジェットに対応させてみた。

    で、例によってスクリーンショット。現在上映中の作品情報と今後の上映3件を表示する。情報は数分おきに(デフォルト3分、周期は変更できる)更新される。あと、クリックするとアプリ本体が起動。
    ScreenSchedule03.png

    上映スペースナビの現在の進捗状況はこんな感じ

    • メイン画面:概ね完成。あとはリストの自動リロードを実装するか検討中
    • ウィジェット:概ね完成。見た目の調整とか
    • アラーム:指定した項目が上映直前になったら音か振動で知らせる。本当に必要?
    • M3Naviとの連携:検討中。サークル個別情報に跳べるとか?
    • 通信量の削減:これは火急。
    現在の実装はデータが必要になると毎回サーバーに読みに行くのだが、メイン画面、ウィジェット、アラームの3系統がバラバラにデータを要求するので通信量がムダに多い。サーバは過負荷になるし端末の電池は喰うしで良い事無し。さて、どうしようか。

    ちなみにAndroidのプログラミングモデルだと、Activity(だいたい、一つの画面のこと)をまたぐデータの保持・通信のコストがとても高い。

    posted by yuji_at_radiance at 00:52| Comment(0) | TrackBack(0) | ソフトウェア | このブログの読者になる | 更新情報をチェックする

    2011年10月02日

    秋M3向けカタログビューアの開発スタート(上映スペースナビもあるよ)

    10月30日に開催される音系・メディアミックス同人即売会「M3」向けにandroid電子カタログアプリを開発中。春M3からだいぶサボってきたが、紙カタログも発売されたので、ちょっとやる気出す。

    web版のサークルリストと配置マップが出ていないが、ペーパー版カタログを見て分かる限りでは、前回と同様の機能を提供できそう。私の精神力が尽きなければ。いや、サークルリストはともかく、マップは人手でデジタイズしてるから大変なんですよ!?

    さて、今回は上映スペースにも手を出してみようと思う。簡単に説明すると、上映スペースとは各サークルのPVを上映するスクリーンのことである。上映作品のリストは当日貼りだされる上に、時間通りに進行することがほとんどない。上映リストと進行状況を携帯で見られると便利→なら作ってしまえ。

    と言っても、上映リストを予め用意することは不可能だし、進行状況も予測することはできない。というわけで、スクリーンの前のあなたに助けてもらうことにする。

    M3ScreenSchedule(仮称)はandroidアプリと集計用のサーバを組み合わせて実現する。会場のあなたが番組情報をアップロードすると、サーバを経由して他の参加者に更新された番組情報が配布される。同様に、会場のあなたが上映中の番組番号をアップロードすることによって、現在上映されているものが何なのか他の参加者が知ることができる。たくさんの人がM3ScreenScheduleに接続することで、情報が正確になる。そんな仕組み。
    m3ss_structure.png

    試作版のアプリが仕上がってきたので、スクリーンショットを掲載。ウィジェットも作りたいなーと思う今日この頃。
    ScreenSchedule01.png
    項目のリスト表示。右側のアイコンをクリックするとサーバに上映中作品の報告。
    ScreenSchedule02.png
    ペンのアイコンをクリックすると、上映情報の編集。

    posted by yuji_at_radiance at 23:15| Comment(0) | TrackBack(0) | ソフトウェア | このブログの読者になる | 更新情報をチェックする

    2011年09月08日

    LLVMを32ビット向けコンパイルin64ビット環境

    仕事でLLVM Clangを使おうとしてちょっとハマったのでメモ。良い子のみんなには常識だから必要ないかな?

    ビルド環境はCentOS5 64bitな環境。教科書的な手順は以下の通り。

    1. ソースをsvnから落としてくる。clangのソースをLLVMのソースツリー内に展開する。
    2. automakeを実行する。
    3. configureを実行する
    4. makeを実行する
    しかし、64ビット環境下で32ビット向けにコンパイルするにはちょっと小細工が必要。
    configure --build=i686-pc-linux-gnu
    make CC="gcc -m32 -march=i686" CXX="g++ -m32 -march=i686"
    
    -m32をつけると32ビット向けにコンパイルを行う。これでめでたしかと言うとそんなことは無く、シンボルが足りないだの何だのエラーが出る。-marchをつけるとちゃんとリンクまでできる。

    posted by yuji_at_radiance at 21:54| Comment(0) | TrackBack(0) | ソフトウェア | このブログの読者になる | 更新情報をチェックする

    広告


    この広告は60日以上更新がないブログに表示がされております。

    以下のいずれかの方法で非表示にすることが可能です。

    ・記事の投稿、編集をおこなう
    ・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


    ×

    この広告は1年以上新しい記事の投稿がないブログに表示されております。