2013年10月31日木曜日

「TypeError: environment can only contain strings」 (Windows 7 + Python 2.7 + Django 1.5 + Werkzeug 0.9.4 + cx_Oracle 5.1.2)

WerkzeugをインストールしてDjango Extensionsのrunserver_plusを使おうとしたら

TypeError: environment can only contain strings

と言われて起動してくれず困りました。

どうもcx_Oracleが環境変数に入れているものが悪いようなので、runserver_plusの前に事前に設定しておくようにしてみました。

set NLS_LANG=Japanese_Japan.JA16SJISTILDE
set ORA_NCHAR_LITERAL_REPLACE=TRUE

とりあえずこれで動いてくれるようです。

2013年9月26日木曜日

LeapTrainer.jsを使ってみる

Leap Motionを購入したもののさっぱり触っていなかったので何かしたいと思い、ふらっと勉強会 Leap Motion 自習会 に参加しました。

Feedlyをものぐさに読むブックマークレットでも作ろうかと思ったのですが、こんな手の動きをしたらこうして欲しいなぁ、というイメージは湧いてもそのジェスチャを捉えるのが大変だと悩みはじめました。デフォルトでLeap Motionがみつけてくれるジェスチャは回転、スワイプ、タップだけです。

そこで調べてみたところとてもすてきなLeapTrainer.jsというライブラリを見つけましたので動かしかたを書いておきます。

ダウンロードして、
  trainer-ui.html
を開くと手の形が表示されます。



Leap Motionの上で手を動かしてみると画面の手も動きます。たまに黄色くなるときがジェスチャを捉えたときです。手の動きのスピードで検出がはじまるので、OPTIONSのRecording velocityを適当にかえてておきましょう。あまり値を小さくするといらない動きを拾ってしまいますし、大きくしすぎると手をムチャクチャはやく動かさないといけなくなります。



ちょうどよい速さにできたら、左上のCREATE GESTUREをクリックして名前を入力します。CREATEでジェスチャの記録開始までのカウントダウンの開始です。

Perform the ジェスチャ名 gestureと言われたら、Leap Motionの上で手を動かしましょう。

learned!と言われたらジェスチャの設定完了です。左のジェスチャ名をクリックするとデータがJSON形式で表示されます。



これを使いたいところで読み込めば、ジェスチャの検出ができるようになります。


<!doctype html>
<html>
  <body><div id="main"></div></body>
  <script src="./trainer-ui/js/jquery.min.js"></script>
  <script src="http://js.leapmotion.com/0.2.0/leap.min.js"></script>
  <script src="./leaptrainer.js"></script>
  <script>
    var trainer = new LeapTrainer.Controller();
    // =============↓ LeapTrainer.jsのデータを貼りつける
    trainer.fromJSON('{"name":"TEST1","data":[[{"x":0.0599484...,"stroke":1}]]}');
    trainer.fromJSON('{"name":"TEST2","data":[[{"x":0.1806993...,"stroke":1}]]}');

    function gestureDetected(name) {
      return function() {
         console.log(name);
         $('#main').html(name);
      }
    }
    // ↓ジェスチャを検出したときに何をするか書く
    trainer.on('TEST1', gestureDetected('TEST1'));
    trainer.on('TEST2', gestureDetected('TEST2'));
  </script>
</html>


2013年8月16日金曜日

LinuxでもOSqlEdit


Wineを使えばLinuxでもOSqlEditが使えますねー。

Ubuntu 12.10 + Wine 1.4 + Instant Client for Microsoft Windows (32-bit) + OSqlEdit 9.5.6.3 で確認しました。

2013年7月29日月曜日

今すぐ使える中国語講座 Lesson.1

弊社でもダイバーシティはひろがっており、この4月にはメンバーに中国人が加わりました。 これをよい機会と、週に一回の中国語講座を開いてもらっています。おかげさまで名前と出身地の自己紹介くらいはタドタドしくも何とか言えるようになりました。 ただ、それだけでは物足りません。そこで、もっと今すぐ使える中国語を教わりました。忘れないように書いておきます。
Sān tián méi huí laí le, wǒ qù zǎo táng
三天没回来了, 我去澡堂.
三日間帰っていないので、銭湯に行ってきます。


Zhè bú shì lòu dòng, shì shè jì guī gé
这不是漏洞, 是设计规格.
それはバグではなくて、仕様です。


À nàge chéng xù yuán zuó tián táo zǒu le
啊!那个程序员昨天逃走了!
ああ、そのプログラマなら昨日逃げました。


Yù suàn yòng wán le
预算用完了.
予算は使い切りました。


Jīn tiān kě yǐ huí qù le ma
今天可以回去了吗?
今日は帰っても良いですか?


Zhège chéng xù de lòu dòng shì zhì mìng de
这个程序的漏洞是致命的.
このプログラムのバグは、致命的ですね。


Wǒ yào tiào cáo le
我要跳槽了.
わたしは、転職することにしました。
ご活用ください!

2013年7月2日火曜日

Python3、uWSGI1.9、Django1.5で日本語ファイル名のダウンロードができない

(【2013/07/03 追記】uWSGIの本家で修正して頂きました。)

ファイル名に日本語があるとダウンロードできない。環境は、Python 3、Django 1.5、uWSGI 1.9。uWSGIのログに、

TypeError: http header must be encodable in latin1

というエラーが。

uwsgi/plugins/python/wsgi_headers.c の156行目、

 zero2 = PyUnicode_AsASCIIString(h_value);
 zero2 = PyUnicode_AsLatin1String(h_value);
としたらうまくいきました。

2013年6月26日水曜日

Djangoでモデルにひもづかないパーミッションを作りたい

Djangoで新しいパーミッションを作りたいものの、どのモデルとも深い関係はないんだよなー、というときには、stackoverflowの How can I use Django permissions without defining a content type or model? で紹介されている方法が便利です。

PermissionモデルのプロキシモデルなGlobalPermissionにpermissionを追加すれば、

from django.contrib.auth.models import Permission

class GlobalPermission(Permission):
    class Meta:
        proxy = True
        # ↓↓↓↓↓↓
        permissions = (
            ('listen_to_me', u'オレの話しを聞け'),
        )

authのパーミッションとして、

{% if perms.auth.listen_to_me %}
むかしむかしあるところに…
{% endif %}

つかえるようになります。

2013年4月24日水曜日

AVOX AWR-100T使ってます

Webで調べても使っている人の情報があまりなくて買うかどうかサンザン悩みました。快適に使えているので、使えましたよレポートを。

モノは 『3G限定だけどSIMフリーのWi-Fiルーター「AVOX AWR-100T」』。

香港"3"のプリペイドSIM、HSDPA Broadband Access Rechargeable SIM Cardをさして中国で国際ローミングしてChina Unicom経由で利用できました。

充電するときは電源を切ってからと説明書にあるので保証の範囲外ではありますが、充電しながらでも使えています。

前回の出張時はAndroid携帯(Sony Xperia tipo dual)のテザリング機能を使っていたのですが、そのときより遥かに通信速度が出て快適です。アキバで8,000円ほど。お買い得ですよ。