最近の更新

関連


その他いろいろ

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

とします。

長い作業をしているシェルスクリプトをうっかりCtrl-Cしてしまって悲しい思いをすることはよくあります。

簡単な対処法としてSIGINTを無視するtrap '' 2をスクリプトに加えるというものがありますが、
常に無視されるというのも本当に終了させたいときに手間なものです。(Ctrl-Zでサスペンドしてkill -9など)

そこで、一度Ctrl-Cを押すと本当に終了して良いか質問した上で終了/続行するスクリプトを使ってみます。
(1/26 複数のシグナルを指定すると狂うバグがあったので修正しました)

以下、sigconfirm.sh

#!/bin/bash

# trap handler
function traphandler() {
  # disable SIG* inside this handler
  trap '' $@
  echo -n "Are you sure to quit? [y/n] "
  read c
  if [ "${c/Y/y}x" == 'yx' ]; then echo 'quit'; exit 1; fi
  echo 'continue.'
  trap "traphandler $*" $@
}

# register trap handler for SIG*
trap "traphandler $*" $@

これを自分のスクリプトでsourceすると、

#!/bin/bash

source sigconfirm.sh 2

while :; do echo ':'; sleep 1; done

(引数2は補足するシグナルの種類。source sigconfirm.h 1 2 3 15 のように複数指定できます)

以下のようになります。

$ ./testsigconfirm.sh
:
:
^CAre you sure to quit? [y/n] n
:
:
^CAre you sure to quit? [y/n] y
$

普通にtrapした場合、trap内部の処理中にまたCtrl-Cが押されると終了してしまうのですが、ここではハンドラの内部ではSIGINTを無視するように設定しているため、Ctrl-Cをうっかり連打してしまっても落としてしまうことがありません。

シェルを使っているとテンポラリのディレクトリやバックアップ用tar.gzの作成などで日付を入力したくなることがあります。

一々時計を見て入力するのは面倒で非効率。ここは自動的に入力させたい。
そしてzshの強力な履歴補完を考えると、日付文字列そのままを挿入するより、

$(date +%Y%m%d)

を入れてくれた方が再利用できて助かります。

以下の数行を.zshrcにコピペしましょう。F5でYYYYmmddに展開されるdateコマンド置換が挿入されます。


# insert `date` for YYYYMMDD on F5
function insert_date {
  LBUFFER=$LBUFFER'$(date +%Y%m%d)'
}
zle -N insert_date
bindkey '^[[15~' insert_date

zshでファンクションキーをbindkeyする方法が分からなくて困りましたが、普通にシェル上でC-V F5と押せば^[[15~とでたので、それを使ってみました。

次のページ »