ちょっとしたプログラム _

  • コードの切れっぱしを淡々と載せるよ

2009/5/24 (日)

画像を開く際に任意のビューワを選択する _

またWinMo,Mortscript,w-zero3,WS011SH話。気がついたら画像ビューワだけで13個も入っているとかアホですか。

以下launch_img.mscr。変数めんどくさいから前回そのまんま。

# * 使い方 :
#   "\Program Files\MortScript\MortScript.exe" "\Program Files\MortScript\launch_img.mscr" url="%1"
#選択肢
b[1]="XnViewPocket"
b[2]="XnViewSmartphone"
b[3]="Imageviewer"
b[4]="画像とビデオ"
b[5]="Kinoma Player"
b[6]="mdiapp"
b[7]="evernote"
b[8]="Nasuvi"
b[9]="MobileImageViewer"
b[10]="PicCir"
b[11]="PicPie"
b[12]="MangaMeeyaCE"
b[13]="Photoshop.com Mobile"
#ダイアログを出す
ChoiceDefault( "Open Url", "choose browser", 1, 20, b )
#選択時に応じた実行ファイルと引数を渡す
Case( 1 )
    cmd = array("\Storage Card\Program Files\XnView Pocket\xnpocket.exe", url)
Case( 2 )
    cmd = array("\Storage Card\Program Files\XnView Smartphone\XnSmartphone.exe", url)
Case( 3 )
    cmd = array("\Program Files\ImageView.exe", url)
Case( 4 )
    cmd = array("\windows\pimg.exe", url)
Case( 5 )
    cmd = array("\Storage Card\Program Files\Kinoma\kp5.exe", url)
Case( 6 )
    cmd = array("\Storage Card\Program Files\mdiapp\mdiapp.exe", url)
Case( 7 )
    cmd = array("\Program Files\Evernote\Evernote3\evernote.exe", url)
Case( 8 )
    cmd = array("\Storage Card\Program Files\NASUVI\nasuvi.exe", url)
Case( 9 )
    cmd = array("\Storage Card\Program Files\MobileImageViewer\MobileImageViewer.exe", url)
Case( 10 )
    cmd = array("\Storage Card\Program Files\PicCir\PicCir.exe", url)
Case( 11 )
    cmd = array("\Storage Card\Program Files\PicPie\PicPie.exe", url)
Case( 12 )
    cmd = array("\Storage Card\Program Files\MangaMeeyaCE\MangaMeeyaCE.exe", url)
Case( 13 )
    cmd = array("\Storage Card\Program Files\Adobe\Photoshop.com Mobile\Photoshop.com Mobile.exe", url)
EndChoice
#渡されたのを実行する
#message(cmd[1] & "<>" & cmd[2])
Run( cmd[1], cmd[2] )

んで関連付け変更。 file-launch-img-mscr.reg とでもして、FDCsoftさんとこのtaskmgrのregeditからインポートするといいと思う。

REGEDIT4

[HKEY_CLASSES_ROOT\.jpg]
@="jpgfile"

[HKEY_CLASSES_ROOT\jpgfile]
@="jpg format file."

[HKEY_CLASSES_ROOT\jpgfile\DefaultIcon]
@="browsres.dll,-6704"

[HKEY_CLASSES_ROOT\jpgfile\Shell]

[HKEY_CLASSES_ROOT\jpgfile\Shell\Open]

[HKEY_CLASSES_ROOT\jpgfile\Shell\Open\Command]
@="\"\\Program Files\\MortScript\\MortScript.exe" "\Program Files\\MortScript\\launch_img.mscr" url=\"%1\""


[HKEY_CLASSES_ROOT\.gif]
@="giffile"

[HKEY_CLASSES_ROOT\giffile]
@="gif format file."

[HKEY_CLASSES_ROOT\giffile\DefaultIcon]
@="browsres.dll,-6705"

[HKEY_CLASSES_ROOT\giffile\Shell]

[HKEY_CLASSES_ROOT\giffile\Shell\Open]

[HKEY_CLASSES_ROOT\giffile\Shell\Open\Command]
@="\"\\Program Files\\MortScript\\MortScript.exe" "\Program Files\\MortScript\\launch_img.mscr" url=\"%1\""


[HKEY_CLASSES_ROOT\.png]
@="pngfile"

[HKEY_CLASSES_ROOT\pngfile]
@="png format file."

[HKEY_CLASSES_ROOT\pngfile\DefaultIcon]
@="browsres.dll,-6705"

[HKEY_CLASSES_ROOT\pngfile\Shell]

[HKEY_CLASSES_ROOT\pngfile\Shell\Open]

[HKEY_CLASSES_ROOT\pngfile\Shell\Open\Command]
@="\"\\Program Files\\MortScript\\MortScript.exe\" \"\\Program Files\\MortScript\\launch_img.mscr\" url=\"%1\""


[HKEY_CLASSES_ROOT\.bmp]
@="bmpfile"

[HKEY_CLASSES_ROOT\bmpfile]
@="bmp format file."

[HKEY_CLASSES_ROOT\bmpfile\DefaultIcon]
@="browsres.dll,-6705"

[HKEY_CLASSES_ROOT\bmpfile\Shell]

[HKEY_CLASSES_ROOT\bmpfile\Shell\Open]

[HKEY_CLASSES_ROOT\bmpfile\Shell\Open\Command]
@="\"\\Program Files\\MortScript\\MortScript.exe" "\Program Files\\MortScript\\launch_img.mscr" url=\"%1\""

2009/5/15 (金)

URLを開く際に任意のブラウザ&webサービスを選択する _

例によってADesつーかWS011SHなるWinMo機向けにmortscriptを書いたという話。

便利気味巡回ツールことuGreaderやRssTodayTickerでブラウザ選んだりは出来ても、GWT決め打ちっつーか、♪串、なーんで決め打ちかね串、GWTこそがエラいのかね串(;´Д`)とりあえずダメもう超ショボちっち、でもヤるかんねおれはもうキッチリ、どーすんの?ビート船長こと、Uno,Dos,Tres,Quatt、うんこーーーーーーーーーーーーーー、と思いつつ全ツールの作者になんか言ってまわるくらいなら手前でどうにかしてしまえ。と、観念してスクリプト書いた。

ファイルlaunch_url.mscrを作って以下をコピペして\program files\mortscriptにコピー。

# * 使い方 :
#   mortscript.exe launch_url.mscr url="%1"
#串
px[0]="http://rg0020.ddo.jp/p/?_k_v=2&_k_c=200&_k_u="
px[1]="http://www.google.co.jp/gwt/n?u="
#選択肢
b[1]="[Proxy]NetFront3.3"
b[2]="[Proxy]Iris Browser"
b[3]="Iris Browser"
b[4]="NetFront3.3"
b[5]="[GWT]Iris Browser"
b[6]="Pocket IE"
#選択肢の中で使うブラウザの実行ファイル群
exe_nf33="\Program Files\NetFront33\NetFront33.exe"
exe_iris="\Program Files\Iris Browser\IrisBrowser.exe"
exe_pie="\Windows\iexplore.exe"
#ダイアログを出す
ChoiceDefault( "Open Url", "choose browsers", 1, 10, b )
#選択時に応じた実行ファイルと引数を渡す
Case( 1 )
    cmd = array(exe_nf33, px[0] & url)
Case( 2 )
    cmd = array(exe_iris, px[0] & url)
Case( 3 )
    cmd = array(exe_iris, url)
Case( 4 )
    cmd = array(exe_nf33, url)
Case( 5 )
    cmd = array(exe_iris, px[1] & url)
Case( 6 )
    cmd = array(exe_pie, url)
EndChoice
#渡されたのを実行する
#message(cmd[1] & "<>" & cmd[2])
Run( cmd[1], cmd[2] )

これをhttpに関連付けるレジストリはこちら。http-launch-url-mscr.regとでもファイル作って以下をコピペしてtaskmgrやTRE辺りからインポート。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\http\Shell\Open\Command]
@="\"\\Program Files\\mortscript\\mortscript.exe\" \"\\Program files\\mortscript\\launch_url.mscr\" url=%1"

これやっとくと、任意のアプリでURLをクリックした際にmortscriptが選択ダイアログ出して「どの設定で開くよoi」つってくれるので任意の項目選ぶと良しなに開くで酢。

与太 _

こういうことやるのにMyMobiler入れとくとほんと便利ですなー。特にMobileExplorerがファイルのやり取りに便利。あとwin32版のmortecript.exeも。

あとはさー、frendfeedの携帯向け串ことfftogoがGWT決め打ちなのをどうにかしたいよね。githubで全ソース公開してくれてるのはいいんだけどpython+django+GoogleAppEngineで書かれたアプリでして。おうちのUbuntu機にどないDeployしたらええのか皆目見当付かなくて大いに困るがとりあえずGAEのSDKの最初の方を読んでみるなどしている。うう。

しかしRssTodayTickerはトランザクションのロックファイルが残ってると動かないんだねー。再起動時に無条件でこれ消すようにしておけばいいのに、なんか有ったのかな。

♪本当に まさしく夜は明けて(´ー`)寝るねまず夕方まで(あけてねぇ(あけてくれ

2009/3/31 (火)

おれとz3plusとmortscriptとnpopとtmailとメール着信とLEDとバイブとお前と大五郎 _

おれのアドエス(w-zero3, advanced es, ws011sh)にて、IrisBrowserとQMAIL3の相性が悪いので、nPOPとTMAILでADesのバイブ・LED点灯消灯連携をmortscriptでがんばってみた。

まぁnPOPというか、nPOPuk。こっちのほうが手が加えられていてよい。

未読状況については、外部から読み書きできるメールボックスへの実ファイルへnPOP終了後に反映される。だもんでメールボックスのファイルのタイムスタンプをnPOP終了まで2秒おきにチェック。タイムスタンプに変化、つまり終了後に、メールボックスファイルを1回スキャンして各X-Status行の16桁目が1かどうかチェックして終了する。全て既読ならLED消灯などする。未読を残したままnPOPを終了したときのことは放置。

(編集:20090406-0030)

# 受信時にnPOPをkick&LED点灯から未読完了時のLED消灯まで面倒見るmortscript

#install:
#nPOPと同じフォルダにでもコピー。
#んで各pathとOptionを環境に合わせて見直しとくれ。

#define:
#nPOP本体
file_exe_npop = "\Program Files\nPOPs\nPOPuk.exe"

#tmail本体
file_exe_tmail = "\Program Files\YUUKI\TMAIL\Core.exe"
file_exe_tmail_opt0 = "/ControlTest1" #着信時鳴動用オプション
file_exe_tmail_opt1 = "/ResetLED:A" #未読完了時LED消灯用オプション

#z3plus本体
file_exe_z3plus = "\Program Files\YUUKI\Z3Plus\Z3Plus.exe"
file_exe_z3plus_opt0 = "/Reset" #未読完了時アイコンリセット用オプション

#nPOPのメールボックス本体
file_mailbox="\Application Data\nPOP\MailBox1.dat"

#デバッグ用ステータス窓
StatusMessage( "Step 1", ST_LIST, TRUE )
StatusShow()

#nPopをKickする
ts_mailbox = FileModifyTime( file_mailbox )
Run( file_exe_npop )
StatusMessage('boot npop')

# 未読を保存箱に書き込んだかどうか2秒間隔で20回までチェック
chkloop=20
waittime=2000
While(chkloop > 0)
    #メールチェック時に保存箱へのコピーとしてファイルのタイムスタンプを更新しているかどうか
    If( ts_mailbox <> FileModifyTime( file_mailbox ) )
        StatusMessage('mailbox updated.')
        boxstat=0
        #mailboxをスキャンする
        line =ReadLine( file_mailbox )
        While(NOT IsEmpty( line ))
            #未読を探す #X-Status: xxxx11
            f0 = Find( line, "X-Status:", 0 )
            f1 = Find( line, "1", 16 )
            boxstat = boxstat + f0 * f1
            StatusMessage('mb unread found')
            line =ReadLine( file_mailbox )
        EndWhile
        chkloop=0
    Else
        #まつ
        chkloop=chkloop-1
        StatusMessage('mbchk loop sleep:' & chkloop )
        sleep( waittime )
    EndIf
EndWhile

StatusMessage('mailchk done')

If(boxstat > 0)
  #未読があればLED,Vibe
  Run( file_exe_tmail, file_exe_tmail_opt0 )
  StatusMessage('ring ring')
  chkloop=1
Else
  #なければ消灯
  chkloop=0
  StatusMessage('no new mail')
  Run( file_exe_z3plus, file_exe_z3plus_opt0 )
  Run( file_exe_tmail, file_exe_tmail_opt1 )
EndIf

# nPOP終了時に未読完了→LED消灯まで面倒を見る
# 未読をほったらかしたままnPOP終了してるなら知らん。
waittime=2000
While(chkloop = 1)
    #nPOP終了時にファイルのタイムスタンプを更新しているかどうか
    If( ts_mailbox <> FileModifyTime( file_mailbox ) )
        StatusMessage('npop exited')
        boxstat=0
        #mailboxをスキャンする
        line =ReadLine( file_mailbox )
        While(NOT IsEmpty( line ))
            #未読を探す #X-Status: xxxx11
            f0 = Find( line, "X-Status:", 0 )
            f1 = Find( line, "1", 16 )
            boxstat = boxstat + f0 * f1
            StatusMessage('exite with unread msg')
            line =ReadLine( file_mailbox )
        EndWhile
        chkloop=0
    Else
        #まつ
        StatusMessage('npop exit wait:' & chkloop )
        sleep( waittime )
    EndIf
EndWhile

#未読が見つからなかったら消灯
If(boxstat = 0)
    StatusMessage('no unread')
    Run( file_exe_z3plus, file_exe_z3plus_opt0 )
    Run( file_exe_tmail, file_exe_tmail_opt1 )
EndIf

それなりに動いた。nPOPを終了させるまでLEDつきっぱなしってどうよとも思うけど。笑い

こういうのを書きながら、やっぱPDAアプリは他のツールと連携しやすいようにコマンドラインオプションによるメソッドやプロパティへのアクセス、起動コマンド関連付けができるイベントを豊富に用意しておくべきだなーと思った。svn coしてきたnPOPukをeVC4でいじくる勇気を。

iPhoneアプリでも「バックグラウンド動作は要らない。各アプリ間が適切にメッセージをやり取りできれば済む話だ」というのもそういう話だね。まーアプリ間API整備どうすんの、AppStoreよろしくまた開発者同士で空気の読みあいさせるの?ってのは思うけど。

2006/8/23 (水)

自作プラグイン:しぃペインターを使ってみる

  • この記事は実験途上です。また他人のコードをパチってます。
    しかもとりあえず動かすためにいろんなチェックを故意に殺してます。

なにこれ _

  • 「#spaint」とかページに描くとお絵かき開始ボタンが出るよ
  • ボタンを押すとしぃペインターが立ち上がるよ
  • お絵かきして投稿したら、「#spaint」って書いたページに画像とspchが添付されるよ
  • #refタグの挿入とかは手動で。まぁそのうち。いつか。

概要 _

  • pluginにspaint.inc.phpを置く
  • index.php以下にでもpicpost_pkwk.phpとpaintBBS.jarを置く
    あとpicpost_pkwk.phpの下にIPログ取り用フォルダ「log」作って666にすれ
  • 以上2ファイル、設置したフォルダにあわせて相対パス設定とかいじる
  • ja.lng.phpに追記
    $_spaint_messages = array(
    	'btn_submit'    => '描く',
    	'msg_max'       => '(最大 %d x %d)',
    	'msg_title'     => 'Paint and Attach to $1',
    	'msg_title_collided' => '$1 で【更新の衝突】が起きました',
    	'msg_collided'  => 'あなたが画像を編集している間に、
    他の人が同じページを更新してしまったようです。<br />
    画像とコメントを追加しましたが、
    違う位置に挿入されているかもしれません。<br />',
    	'msg_ui_pro'       => 'しぃプロ',
    	'msg_ui_thm'       => '筆跡なし',
    );
  • 動作サンプル?うーん、どこに用意しよう‥。

ざっくりとした背景 _

pukiwikiでは生POSTデータ読めないのよね。けど、しぃからの画像受けるには生POST読めにゃならんのよね。だモンで今までほっとかれてたのかも。てことで、pukiwikiの/attachに適切なファイル名で放り込むスクリプトをPOTI-BOARDの中からパチって改変したらOKだよね。というかそれpicpost.php。ありがたやpicpost.php。ほめよたたえよpicpost.php。
http://www.punyu.net/php/oekaki.php

あとしぃペインターでお絵かきする画面出すボタンと、お絵かき画面の表示には既存のpaint.inc.phpを改変して間に合わせてみたよ。

しぃは保存つーかPOST先のURLから"URL:ほげほげ"な文字列が返って来たら、自分を表示しているブラウザでそのURLに帰るっつーかそこにGETメソッド投げさせるらしいので、そこを利用してpukiwiki&プラグインに結果メッセージな配列をserialize()して引数にGETで投げて結果画面ださせようとしてるけどうまくいかなさげ。header("URL:http://ほげほげ");じゃだめなの?

あー、ページへの#refタグ自動挿入?

あくまでもtechDemoなので手動でお願い _( (_´Д`)_ 漏れは疲れた

動作 _

  • #spaintでページ表示時に呼ばれるとお絵かきフォームを表示します
  • フォームのpostでplugin直呼びされると、picpost_pkwk.phpを画像の投稿先にしたり、戻り先を#spaintはっつけてたページのURLにしたり色々とほげほげなapplet&paramタグ群を吐き出してお絵かき開始
  • アプレットの投稿ボタンを押すとアプレットからpicpost_pkwk.phpにお絵かき内容がごっちゃりと投げられるよ
  • picpost_pkwk.phpはpikiwikiの/attachフォルダに、pukiwiki流ファイル名エンコードでファイルを放り込むよ。ページの有無とかbotの可能性とか確認なし。
  • アプレットはpicpost_pkwk.phpの完了を見届けて元のページに戻るさ。
    • アプレットに「返ってきた値がURL:と言う文字列が初めに来た場合、それに続く文字列をURLと解釈しそこへ飛ばす機能」があるみたいなのでそこでpukiwikiにGetメソッドかましてどーこーしたかったんだけどうまくいかず。なーぜー。

免責 _

超実験中の物です。phpで既存のscriptをhackできるハイスキル暇人にしか使えない代物です。改造元のコードが盲腸のごとく残りまくりです。現実逃避の対象にどうぞ。

2006/8/18 (金)

自作プラグイン:title別名表示の試み

titleをブラウザ表示時のみ別名表記できるpukiwikiプラグインを書いてみた。
見出しに同じこと書くのもめんどくさいのでついでにh2タグも出力。
別ページからincludeされたときはタイトルを書き換えない仕様。
はてブerとかの役に‥どうかな。(関連)

  • ダウンロード:
  • 設置:
    プラグインをアップロードすればOK。
    もしjavascriptでのTitle書換えだけでなく、titleタグへの出力も必要であれば
    skinに次の関数を追記。
    function anotherTitle(){
    	global $title, $page_title, $another_title;
    	if($another_title!=""){
    		return $another_title."(".$title.") - ".$page_title;
    	}else{
    		return $title." - ".$page_title;
    	}
    }
    skinのtitleタグを書き換え
    <title><?php echo anotherTitle(); ?></title>
  • 文法:
    #title(ページ名の別名をつける)
    設定する別名。
  • 考察
    • 最初は単にjavascript吐いてdocument.titleを書き換えてるだけだった。
      このほうがskin書き換えとかなくていいかなーとか。
      いやまーpukiwikiplus使えって話ですけど。
  • 第1引数を省略できればいいんだけどなー。
    実行時にプラグイン自身で「自分はどのページのソースに書かれて、
    どのページに表示されているのか」 を把握するすべなんてあるのかしら。
    • してみた。$GLOBALS['base']を見ればいいのかな。
  • 普通に日本語でページ名を書くのはURL汚くなるからイヤなんだよ。
    あーでも#recent()での表示が元のファイル名そのままってのは味気ないよな。
    やだなぁ。
  • 「記事ID≠記事名」で居たかった:
    calendar2プラグインでのカレンダー1クリックで作成日を記事名にして記事作成できるもんだから、RDBMS使うCMSにありがちな「記事ID≠記事名」で押し通したかったのですよ。あとそれ使うとcalendar_viewerで作成日順に一覧表示できるしさ。記事名にも一定の法則が出てcleanだし。
  • 一覧表示の別解:
    別にページ名に一貫性がなくても、pluginにsonotsさんとこのlsxとincludexつっこんで「#lsx(prefix=[基点とするページ名],include)」って書けばいいのね。ただし「次の5件を表示」とかは出ない。

#html(<div class="rwonly">)

カレンダー _

<< 2009.11 >>
[stuff/codes]
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

#html(</div>);

ページの一覧 _


[戻る]