2012年8月31日金曜日

jquery mobileでpageinitするときの注意点

見事にはまった。

jquery自体始めて使うので、右も左も分からない事もあるんだけども
ドキュメント通りにコピペしてもpageinitは動かない!という問題にずっぽりはまってしまった。
色々足掻いてたら解決したのでメモっておく。

まずjquery mobileは通常ajaxがONになっていて、ページ切り替え時は
ajaxで次のページを読込んでからアニメーションして画面が切り替わる仕組みになっている。
こいつが動いてると初めに読込んだscript以外は読込まない挙動っぽい。

つまり対策方法は、
 ・どのページでもヘッダーに共通のスクリプトを読込むようにしておき、スクリプト内に画面の設定を記述しておく。
 ・ページ切り替えるタグにパラメータで「data-ajax="false"」を付け加えておく。

この2つに絞られる。

前者のがページ切り替わる時のアニメーションが付いてお手ごろなのだが
ページ数が多くなると厄介なので、今のところはsubmitやタグのところに後者のdata-ajax=falseを入れて対応しておいた。


django + jquery mobileで組込みアプリを作る(準備編)

産業関係で未だにMS-DOSで動くシステムなどがありますが、
20年続いたシステムでもハードウェア面でメンテナンスが出来なくなって
最新のシステムに置き換える事例などがあるかと思います。
今から作るなら.NETを使って実装が王道だけど、今回はWindows、Linux両方で動く
Pythonを使った方法を考えてみました。

 仕様イメージは組込み開発でWindowsやLinuxが動くパソコンを使って装置を動かすというもの。
パソコンに求められるものといえば、
 ・シリアルポートやLANを使う
 ・画面で運転状況を表示する
 ・リアルタイム制御を求める

この3点くらいだと思います。
どういったものを使えば出来るかというと、
 1つ目、シリアルポートやLANは、pyserial、twistedなどを使うことで解決。
 2つ目、最近の流れに沿って、スマートフォンで操作できるように、WEBアプリ開発でDjango、jQuery mobileを使えば対応できる。
 3つ目、WEBフレームワークDjangoのバックグラウンドにハード制御を行うスレッド又はプロセスを常駐させることで対応できる。

今回はDjangoを使うので、管理画面が最初からついてきます。しかもデータ操作が可能なものです。
それを使えばパラメータ設定などはDjangoの機能を使えば簡単に出来るし、データベースをSqlite3に
すれば1ファイルで管理できるメリットずくめ。後はWEBサーバが必要になるのでnginxを使うとします。

ここまでの構成をまとめると、
 nginx + django + jquery mobile + pyserial + twisted + sqlite3


だいぶ使うものが増えてきました。

[画面周り]
 ・ブラウザ経由(ネットワーク経由で遠隔操作なども可能)
 ・スマホ対応のライブラリjquery mobileを使うことで幅広くなる
 ・リアルタイム性はajaxを用いて、常時ハードウェアのステータスを拾うようにする。

[制御]
 ・WEBアプリ(画面周り)と切り離してバックエンドで動かすドライバ的なものにする。
 ・URL経由でハードを動かしたり、ステータスを取得できるようにする。

[パラメータ]
 ・sqlite3で管理する。DB操作はdjangoを使って楽する。
 ・ログなどもdjangoを使って楽をする。

画面周り+ハード制御用ドライバを実装して、これらをURL経由で操作できるようにすれば
WEB系を取り入れた組込み開発になる。

こんな感じになると組込み系の醍醐味?だと思うLCDにキャラクターパターンをUART経由で送信して表示するというような事はしなくなりそうです。

今日はここまで。

2012年8月28日火曜日

Python製Wikiエンジンmoinmoinを使ってみた。

ローカルで簡単に使えるWikiエンジンがほしかったので探してみたらMoinMoin
というものを発見。

さっそく使ってみた。
(今回はWin環境で行った。)

Step1 ダウンロード&インストール。
http://moinmo.in/MoinMoinDownload

公式ページから最新版をダウンロードして解凍ファイルをどこかに展開する。

Step2 起動

Wikiserver.pyを実行。
(ローカルにPythonがインストールされている事が前提)


Step3 スーパーユーザ作成

トップページが出てきたらまず、Login画面に移動して新規アカウント作成する(メールアドレスまできっちり入れる事)

次に「HelpOnConfiguration」ページを開き、ページの新規作成

superuser = [u"YourLoginName", ]

を入れて(YourLoginNameには先ほど作ったユーザ名が入る)

サーバ再起動→ログインする。


Step4 言語設定

「install help and system page packages」ページを開き、Japaneseを選択。

全体を日本語にしたければ、「All page」をクリック。

Step5 フロントページ設定
# Choose this, if most wiki content is in a single language.
# If English is not your wiki's main language, choose something in YOUR wiki language
page_front_page = u"MyStartingPage"

「FrontPage」ページを開き、上記文字を入れる。

節電方法について

いよいよ電気代の値上げが始まります。
家庭にもよると思いますが、普段通りに使うと月平均でおおよそ2000円前後値上がりすると思います。
そこで節電についてまとめてみました。

従量電灯について
http://www.tepco.co.jp/e-rates/individual/menu/home/home02-j.html

深夜電灯について
http://www.tepco.co.jp/e-rates/individual/menu/home/home04-j.html

三段階料金制度とは
 電気の使用料によって料金が変わるもの。
 ケータイの通信料みたいなもので3段階に分けて値段が変わるらしい。
 1段階:120kWhまで    18.89円
 2段階:300kWhまで    25.19円
 3段階:300kWh超え    29.10円

1段階と3段階を比べれば電気料金は54%UP。
もし3段階に到達していたらまず基本料金を下げる前に必要ない家電をコンセントから外すようにした方が良いと思う。

節電のコツは、まず3段階で使う電気使用料を減らすことである。これをするにはまず、
常時使う家電(B)、都度使う家電(A)の2つに分ける。
常時使う家電(冷蔵庫など)は24時間稼動するので、電気料金のベースとなり、
都度使う家電(洗濯機やIHなど)は、ベースからプラスアルファの部分になる。

これを数式にすると、
 Y = AX + B

 Y=電気料金
 A=都度使う家電(総ワット数)
 B=常時使う家電(総ワット数*1ヶ月分)
 X=使用時間

となり、
Aのカーブは大きくても使用時間を短くする事で電気使用料は減り、
Bは、使わない家電をコンセントから抜く事で電気使用料が減る。

あと温調機(エアコン、冷蔵庫)などは、廃熱部分が室外機、背面部分にあります。
温調機の仕組み的に、廃熱部分が常温に近いほど稼働時間が減るので結果的に電力が下がります。
この部分のスペースを空ける事で節電とTVでいってますが、より効率的にするならファンで強制的に風を送ってあげるのがいいと思います。
こういった部分はエアフローといい、空調や自作パソコンに詳しい方がいれば、パソコン用のDCファンやダクトの取り付けなど詳しいアドバイスがもらえると思います。


ここまでの話をまとめると、
・使ってない家電はコンセントから外す。
・W数の大きな家電は使用時間を出来る限り短くする。
・温調機の廃熱部分は風通し良くする。(DCファンなどで風冷もOK)

こういった努力の結果が翌月の電気使用料に反映されます。

2012年8月17日金曜日

debian コンソール画面で文字化け

debianでデスクトップ環境を入れなかった場合、
最初のコンソール画面で日本語の文字が発生する問題を解決する方法は以下の通り。
LANG=C
su
 パスワード入力して、rootになる
aptitude update
aptitude install jfbterm
echo vga16fb >> /etc/modules
exit
LANG=ja_JP.UTF-8

動作確認でmanコマンドを実行してみる。

参考サイト:
 http://www005.upp.so-net.ne.jp/develop-tom/console-deb.html

スマホの活用方法

最近、「白ロム」という言葉を良く聞くけど、これは一体何?
SIMカードの色が白いから「白ロム」っていうの?って思ってる人もいるだろうw
ちなみにそれ、間違ってます!

正しくは、SIMロックフリーという意味です。
SIMロックフリーだと何ができるの?という質問については、
まず、
・海外SIMが使える
・別のSIMが使える

というメリットがある。

通常は、SIMロックされているので、解除するにはキャリアの店舗に持っていって3150円の手数料を払うとやってくれるそうです。

しかし白ロムを手に入れたからといって、全部のSIMは使えないので注意が必要。
電話というのは周波数と通信方式が決められていて、900MHz帯とか1.8GHz帯、3G、CDMA、Xiなど聞いた事があると単語がそれにあたります。
つまり、AU端末は3G対応してないので、AUのスマホでDocomoやソフトバンクのSIMは使えないって事である。

最近の流行っているMVNOなSIMはDocomo回線使っているので、docomoのスマホ使えばまず間違いないです。

あと1つ良い点はSIMを入れなくてもワンセグ見れたりWifiが使えるので、
へたな中華パッドを買うより、中古のスマホのほうが性能もいいってことである。
もし、古いケータイ使ってるけど、スマホアプリが使いたいって方には中古スマホで遊んでみてはどうだろう。

pythonでGUIプログラミング(1)

最近組込み用のARMボードが沢山売られるようになってきた中、ホビー用に買って自分でLinuxカーネルをビルドしたりする人が増えてるんじゃないだろうか。
こういった組込みボードは、スマホよりIOやUSBホスト機能などが豊富な資源が使えるようになっていて、 便利なんだけど、RAMが少ない!っていう状況に出くわしてる方も増えていると思う。

そこで、解決方法として専用機として仕上げる方法があって以下にまとめてみた。


・xfceを動かしてその中でアプリを起動(メモリー使用:多い)
・ブラウザOSというようにフレームバッファでブラウザnetsurfを動かして、ハード制御はWebサーバ経由で操作する(メモリー使用:普通)
・ブラウザの代わりにcruseを使って操作(メモリー使用:少ない)
・PythonでGUIアプリ(メモリー使用:多い)


まずxfceを起動してアプリを起動する方法は、起動が遅い。そしてメモリーも沢山使うけど汎用性はある。 xfceの代わりにawesomeなどを使ってもやはりxfree86を使う時点で重くなる。

そこでフレームバッファ直接操作するアプリを起動させて早くしようとしたのが2番目。
起動速度は速く、netsurfというブラウザも速度が速くて快適。しかしjavascriptに対応してないので、リアルタイムに処理するようなものはできない。

3番目のcruseを使って操作は日本語問題があって、まだいい結果が出せてない。

最後にPythonを使ってGUIからすべてやってしまおうというのが今回。


まずはどのようなモジュールがあるのか調べてみたところ、Qtが一番よさそう。

今日はここまで。

参考サイト:
http://ginstrom.com/scribbles/2008/02/26/python-gui-programming-platforms-for-windows/

2012年8月2日木曜日

[python]multiprocessingとthreadingについて

threadingだとGIL問題があって遅くなる!っていう話をネット上でちらほら見かけるので
multiprocessingというものを使ってみた。
使い方はthreadingとほぼ互換なんだけども、pickle化できないといけない制約が付いてくる。
あともう一つ、プロセス間通信するのにManagerクラスを使ったりしたりしなかったり。

それにforkしたようなものなので、
メインプロセスがいて、そこにCTRL+ALT+DELETEで出てくるプロセス一覧に
multiprocessingで作ったプロセスが出てきて、その中にthreading処理が動いて・・・っていう
スコープになるし、単純に置換えすると逆に共有メモリ回りで慣れて無いと
ローカルでやればすぐ済む作業もプロセス間通信を使ってやらないといけないとか、色々めんどくさくなる。

もし使うなら、工場で一連の作業が円滑に回ってるんだけど依頼が多くて困る!
別の工場を作って仕事を振り分けたいなーって場合のときに有効な手段だとおもう。

Androider