最近の更新

関連


その他いろいろ

MODxでつくる! 最強のCMSサイト カバー
MODxでつくる! 最強のCMSサイト

はやくMODx 2.0でないかなあ

Android機を買ってPCと連携させる場面が増えてきました。ネット越しにデータをやりとりしてもいいのですが、一過性の物だったり、自分以外の人に提示する必要があったりした場合にはQRコードが便利です。

Google Chart APIを用いると簡単にQRコードが作成できるようなので、ひとつ試しにテキストエリアの文字列をQRコード化するページを作ってみました。

text2QR

テキストをペーストするか、Ctrl+Enterを押すか、3秒経つとQRコード化が行われます。一文字入力するごとにやっても良かったのですが、負荷が掛かりそうなのと、実際は入力→撮影まで時間がかかる筈なので、最後の3秒ルールでなんとかなります。

試しに置いておきますが、将来予告無く仕様やURLやらが変わる可能性があります。

参考:

jQueryを利用してHTMLのテキストエリアの高さを行数にあわせて自動調整してくれるプラグイン、autoResizeというものがあります。

jQuery plugin: ‘autoResize’ – James Padolsey

今までPukiWikiの編集画面はスクロールしにくく使いづらいと感じていたので、即組み込みます。PukiWikiは1.4.7を使用。

$ cd pukiwiki
$ wget 'http://james.padolsey.com/demos/plugins/jQuery/autoresize.jquery.min.js' -O autoresize.jquery.min.js
$ wget 'http://code.jquery.com/jquery-1.4.2.min.js' -O jquery.min.js

そして以下のパッチを適用。lib/html.phpとskin/pukiwiki.skin.phpを変更します。

diff -ur lib/html.php lib/html.php
--- lib/html.php 2010-06-23 02:04:17.000000000 +0900
+++ lib/html.php 2010-06-23 02:17:21.000000000 +0900
@@ -245,7 +245,11 @@
   <input type="hidden" name="cmd"    value="edit" />
   <input type="hidden" name="page"   value="$s_page" />
   <input type="hidden" name="digest" value="$s_digest" />
-  <textarea name="msg" rows="$rows" cols="$cols">$s_postdata</textarea>
+  <textarea id="expandingmsg" name="msg" rows="$rows" cols="$cols">$s_postdata</textarea>
+  <script type="text/javascript">
+  $('textarea#expandingmsg').autoResize({limit: 9000});
+  $('textarea#expandingmsg').keydown();
+  </script>
   <br />
   <div style="float:left;">
    <input type="submit" name="preview" value="$btn_preview" accesskey="p" />
diff -ur skin/pukiwiki.skin.php skin/pukiwiki.skin.php
--- skin/pukiwiki.skin.php       2010-06-23 02:04:18.000000000 +0900
+++ skin/pukiwiki.skin.php       2010-06-23 02:14:49.000000000 +0900
@@ -79,6 +79,8 @@
  <link rel="stylesheet" type="text/css" media="screen" href="skin/pukiwiki.css.php?charset=<?php echo $css_charset ?>" charset="<?php echo $css_charset ?>" />
  <link rel="stylesheet" type="text/css" media="print"  href="skin/pukiwiki.css.php?charset=<?php echo $css_charset ?>&amp;media=print" charset="<?php echo $css_charset ?>" />
  <link rel="alternate" type="application/rss+xml" title="RSS" href="<?php echo $link['rss'] ?>" /><?php // RSS auto-discovery ?>
+ <script type="text/javascript" src="jquery.min.js"></script>
+ <script type="text/javascript" src="autoresize.jquery.min.js"></script>

 <?php if (PKWK_ALLOW_JAVASCRIPT && $trackback_javascript) { ?> <script type="text/javascript" src="skin/trackback.js"></script><?php } ?>

コメント欄にある通り、autoResizeの後で

$("textarea#expandingmsg").keydown();

をしないと、元々長いテキストに関しては初期状態ではサイズが不適当になります。

特にAndroid1.6のマーケットから、「発信確認 Call Confirm」が見えなくなるという不具合が発生しています。
どうやらBluetoothのパーミッションを要求するアプリは跳ねられるようです。

Android1.6ユーザ(HT-03A, Xperia)の方は、http://nanabit.net/a/bからv1.2.1をダウンロードすることができます。

現状どう対応すべきかわかりませんが、Bluetoothのパーミッションを要求しないバージョンを作るとか、野良apkにリダイレクトするためのアプリを新規登録するか等考えています。

Android開発をしていると、自分で作成したアプリをロールバックしたり、テスト用のツールを削除したりと、特定アプリを一旦アンインストールしたくなることがあります。

そこでUninstall Shortcut。

元のアプリのアイコンの左下に炎を象ったバッジをつけたショートカットアイコンを作成します。このアイコンをタップすると、当該アプリのアンインストール画面に飛び、そこから1クリックで削除することができます。

v1.1.0からはアプリ一覧を名前・パッケージ名・インストール(アップデート)日の昇順/降順でソートできるようになりました。

ScreenShort

最近Android機HTC Desireを買って色々遊んでいます。
非常にサクサク動くのは良いのですが、目下の所最大の問題は「電話」がすぐ押せる位置にあって、間違えて電話を掛けてしまいやすいこと。

Androidアプリの習作にコレを防ぐためのものをつくってみました。あらゆる電話発信に割り込んでダイアログを表示し、「発信」「やめる」を確認。
寝ぼけて・酔って・タッチのミスで誤発信をしてしまいそうで怖い方に。コレで枕元にAndroidをおけるようになります。

ダイアログには掛けようとしている番号と、(連絡先に登録があれば)顔写真・名前を表示するため即時の判断が可能です。

海外の方からv1.0.1をHTC Incredibleで使うと連絡先に登録があってもダイアログに名前が表示されないことがある、という連絡を何件か貰っています。じきに修正できる見込みですが、追加情報などあればメールで下さい。

このアプリを機に7bitウェブサイトにもAndroidページを作りました。今後も色々なものを制作する予定なので、たまに覗いてみてください。サイトデザインがAndroidのブラウザからはあまりみやすくないのが問題ですが・・・そちらも時間があれば検討するかもしれません。

モバイル機器でビデオを撮影しリアルタイムで配信/保存して公開できるサービス、Qikのビデオのダウンロード方法。

Python2.6で以下をqik_download.pyとして保存。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
import urllib2

def get_streamID_for_uri(uri):
        streamID_parser = re.compile(ur'href="http://qik.com/swfs/qikPlayer[0-9]+\.swf\?streamID=([0-9a-f]+)', re.M)
        body = urllib2.urlopen(uri).read()
        streamID = streamID_parser.search(body).group(1)
        return streamID

def get_download_uri(video_uri):
        streamID = get_streamID_for_uri(video_uri)
        flv_uri = 'http://qikimg.com/download/%s.flv' % streamID
        return flv_uri

if __name__=='__main__':
        while True:
                video_uri = raw_input('input your qik video URL > ')
                print get_download_uri(video_uri)

こんな感じで使います。

$ python qik_download.py
input your qik video URL > (ここでビデオのURLを入力) http://qik.com/61xxxx/32xxxxx
http://qikimg.com/download/12xxxxxxxxxxxxxxxxfae.flv
input your qik video URL > ^C (終了)

出力されたURLをブラウザなどで開いて保存します。

クリップボードを監視し、コピーされた語句で検索・バルーン表示するClipDic v1.1.0を公開しました。
.NET Framework 3.5以上が必要です。

今回のアップデートでクリップボードの行数、文字数、単語数をカウントする機能を追加しました。文字数制限を確認しながら就活のES書く際などに便利です。

screen shot

前回、シェルスクリプトでsourceすることでCtrl-C (SIGINT)等をキャッチして本当に終了するか尋ねるスクリプトを公開しました。

今回は任意のコマンド実行時に同様の仕掛けを組み込むプログラムnosigを公開します。

nosigをインストールすることで、今まで

$ yourprogram arg1 arg2

としていたコマンドを

$ nosig yourprogram arg1 arg2

とするだけで、Ctr-C等をトラップし、本当に終了して良いか確認するようになります。

実行に何日もかかるようなプログラムを走らせる際などに安心です。

nosigは指定したコマンド以下の全ての子プロセスにこの機構をロードしますが、用途によっては一番上のプロセスだけにロードしたい場合もあるかもしれません。
そのような場合にはnosigの変わりにnosigparentonlyを使ってください。

実行例

$ nosig sleep 20
Signal 2 caught. Are you sure to quit? [y/n] n
continue..
Signal 2 caught. Are you sure to quit? [y/n] y
quit.

ダウンロード・インストール

ダウンロード: nosig-1.0.0.tar.gz

インストールは

$ make
$ sudo make install

アンインストールは

$ sudo make uninstall

とします。

長らく更新をさぼっていました。忙しい…
久しぶりに.vimrcに手を加えたので、その話です。

vimでは頻繁に先頭に移動するggコマンドを使います。しかし、ちょっとまともな(?)ソースコードなどは先頭に大量のコメントがついていて、ggだけではコードの一片も見えず、さらに<C-F>を連打…ということをしがちです。

連打… これはvimmerとして敏感になるワードです。もっと効率よく、本来の目的である「最初の非コメント行」にたどり着けるはず。

そこで、早速ちょっとした関数を書いてみました。

function! GotoFirstEffectiveLine()
  normal gg
  while line(".")<line("$") && (
        \ getline(".") =~ '^\s*$'
        \ || synIDattr(synID(line("."), col("."), 0), "name") =~ ".*Comment$"
        \ )
    normal j0
  endwhile
  exe "normal z\<CR>"
endfunction
nnoremap <silent> gG :<C-U>call GotoFirstEffectiveLine()<CR>

このGotoFirstEffectiveLine()をコールすると、最初の「非空白かつ非コメント行」に移動することができます。vimではgGが空いているので、これに割り当てると覚えやすいでしょう。

LinuxのWiiリモコン(Wiimote)用ライブラリ、CWiidを用いて、音楽プレーヤSongbirdをコントロールするスクリプトを書いてみました。

操作方法

操作はきわめて単純です。

python wiimote-songbird-*.py

とすると監視プログラムがforkされるので、あとは1+2同時押しで接続し、適当にボタンを押して操作するだけ。電源ボタンを長押し(4秒くらい?)で切断し、再び接続待ちに入ります。

ボタンと動作の対応表

キー 動作
上/下 音量 +/-
左/右 次の曲/前の曲
B 再生・停止トグル

スクリプトのダウンロードはこちらから: wiimote-songbird-20090907.py
MIT Licence. Python 2.5.2, CWiid 0.6.00で動作確認しています。

次のページ »