2016年10月20日木曜日

Windowsでファイルをドロップしてpythonスクリプトを起動する

ファイルをドラッグ&ドロップでpythonスクリプトを起動し、処理たいこともあるようで、Googleで検索してみると、二つ方法があるようですね。

一つは、レジストリを編集してPythonスクリプトにドロップハンドルを設定する方法があるようです。

もう一つは、バッチファイルを使う方法です。レジストリをいじったりしないので、こちらの方が好みですし、おすすめです。

testDragAndDrop.py (pythonスクリプトファイル)
import sys
for arg in sys.argv:
    print arg
raw_input()

testDragAndDrop.bat (バッチファイル)
python testDragAndDrop.py %*

の二つのファイルを用意して、testDragAndDrop.batにファイルをドロップするとtestDragAndDrop.pyに引数としてドロップされたファイルのパスが渡されます。非常に簡単ですね。バッチファイルのショートカットを作成して、そちらにドロップすることも可能です。

2016年10月11日火曜日

DELL Latitude10とWindows10 1607 anniversary update

DELLのLatitude10は、いつの間にかWindows10 Anniversary Updateが来たようです。1607用のセキュリティアップデートもきましたが、いまのところ順調にに動作しています。



ただしBluetoothドライバは、標準のものに戻っています。キングジムのポメラDM100をBluetoothキーボードとして利用するには問題ない(キーアサインの問題はソフトウェアで解決済み)のですが、Bluetoothを使ったファイル転送機能は、1607でも問題があるようです。

Windows10へアップグレードした時と同様に、DELLのサポートページからBluetoothドライバ(Network_Driver_4Y0Y8_WIN_12.0.6300_A06.EXE)をダウンロードしてきてインストールしたところ、ファイルのやりとりができるようになりました。

さて、新しくポメラDM200が発表されましたが、このBluetoothのファイル転送機能はなくなるということ。環境によってファイル転送できたりできなかったりとあるようなので、削除されたのでしょうか。QRコードやケーブル接続してPCリンクによるファイル転送、さらにWifiを使ってファイル転送まであるので問題なさそうです。画面が広くなったり、キーボードが新しくなったり、漢字変換も賢くなったりと楽しみな箇所がいっぱいです。

2016年7月31日日曜日

プチコン3号でたらい回し関数

プチコン3号SmileBasicを試してみたく、new3DSLLを手に入れた。たらい回し関数(竹内関数)を入力して実行してみた。

 DEF TARAI(X,Y,Z)
  IF X<=Y THEN
    RETURN Y
  ELSE
    RETURN TARAI(TARAI(X-1, Y, Z), TARAI(Y-1, Z, X), TARAI(Z-1, X, Y))
  ENDIF
END

PRINT TIME$
PRINT TARAI(12,6,0)
PRINT TIME$

BASICとはいっても、行番号いらないし、ローカル変数あるし、再帰呼び出しも可能なんですね。
引数(12, 6, 0)の場合、28秒で返ってきました。

さて、比較するものがないと困るので、メインで使っているToshiba dynabook SS RX1(Windows Vista 32bit)のpython 2.7.6でたらい回し関数を実行してみました。6秒ほどで返ってきました。

#import time
def tarai(x, y, z):
    if (x <= y):
        return y
    else:
        return tarai(
                    tarai(x-1, y, z),
                    tarai(y-1, z, x),
                    tarai(z-1, x, y))
start = time.time()
print tarai(12, 6, 0)
stop = time.time()
print stop - start

これを、zenfone2(ZE551ML)のqpythonで試すと12秒でした。

2016年3月23日水曜日

Kivy LauncherでAnimated Gif Viewer

Kivy Launcherのアップデートがあったので、せっかくなのでAnimated Gif Viewerを作ってみた。Kivyで作成して、QPythonでの動作を確認したけど、Kivy Launcherでは起動しない。GIFイメージの読み込みにPILを使っているけど、出力されたlogを見るとどうやら、GIFイメージを読むときに AttributeError: tobytes が起こっている。Pillowではtostring()が廃止予定になってtobytes()が使われるらしいとのこと。どうやらKivy Launcherが呼び出しているPILのバージョンが古いためにtobytes()メソッドがないらしい。そういうわけで、以下のようにスクリプトのあたまでtostring()を呼び出すようにtobytes()メソッドを追加してみた。

from PIL import Image as PILImage

def tobytes(pilimg, encoder_name="raw", *args):
    return pilimg.tostring(encoder_name=encoder_name)

PILImage.Image.tobytes = tobytes

無事に起動することができた。こういうところ、Pythonは便利ですね。


Next, Back, Pause, Rotate, Resume, Open, Quitとボタンをつけてみました。
GUIをwxPythonで作り直して、Windows用にもしてみた。



2016年1月15日金曜日

Kivy LauncherでImageViewerの起動に失敗

Zenfone2でKivy Launcherから自作のImageViewerを起動していたけど、新年になって起動しなくなった。どうやらバージョンアップして、動作が怪しくなったみたい。スクリプトを実行してもログも出力せずに、終了してしまった。Google Groupの方でも話題になっている。しかたがないので、プロジェクトのフォルダーをそのままQPythonに移動した。以前試したときは動かなかったけど、今回は問題なく起動した。こちらもバージョンが上がって、Kivyのバージョンが1.9.0になったようだ。

2016/3/21追記
Kivy Launcherのアップデートがあり、自作のImageViewerもKivy Launcherから無事に起動するようになった。


2015年8月25日火曜日

Windows10になったLatitude10とポメラDM100

Latitude10をWindows10にアップグレードしたので、ポメラDM100のBluetooth接続を試してみました。

ポメラDM100をBluetoothキーボードとして接続させてみると、問題なく認識しました。ところが、ファイル転送をさせようとしてもペアリングの手続きは現れますが、接続が完了しません。以前のメモでいうとステップ(5)で、ファイル転送のサービスが表示されないのです。

Windows8、8.1と使えていたので、ハードウェア上の問題はないはず。Windows10の標準のBluetoothドライバーが問題なのかと思い、DELLのサポートページからWindows8のBluetoothドライバーをダウンロードしてきてインストールしてみました。インストール中にタスクバーに表示されるアイコンは空欄になってしまい怪しかったのですが、無事にインストールできました。再度、DM100のBluetoothファイル転送を試みると、これまで同様に使えるようになりました。

これで、ポメラDM100とのBluetooth連携も問題なくできそうです。キーボードとして使うと、相変わらずキートップの表示とは異なる文字が入力されるキーがありますが、pythonで書いたスクリプトで回避しています。

ファイル転送は、PCを開いたデバイス欄にDM100アイコンが追加されるので、それを開くだけでファイル転送ができます。もちろん、ポメラはBluetoothのファイル転送状態にしておきます。フォルダが開かれたところで、ポメラのほうは接続完了状態になりました。


ファイル転送できるようになると、DM100アイコンがデバイスとドライブに追加された


DM100以下には、Main MemoryとSDカードがあり、これはMainMemoryを開いたところ



2015年8月19日水曜日

Latitude10のOSをWindows10にアップグレードした

DELLのLatitude10は、Windows8からWindows8.1にアップグレードして利用していた。Windows10への無償アップグレードが開始され、8月頭にそれを予約しておいたが、しばらくなにも起こらなかった。やっと先に進めるような通知が現れたので、さっそくアップグレードを実行してみた。

アップグレードは簡単で、指示にしたがって、ただ放置しておくだけであった。途中、何度か再起動がかかったが、そのときDELLのロゴ表示後に何も画面に表示されない長い時間が存在した。このときは、アップグレードに失敗して起動できなくなったのだろうかと不安になりつつも、電源ボタンに触るのを我慢し待ったところ、先に進みアップグレードは無事に終了した。ブラウザを起動して、とくに操作不能になるような不具合はなさそうだと思いつつ、それ以上触る時間もないので、電源を落としておいた。

問題に気づいたのは、 翌日、電源を入れてから。Windows10は起動したようだが、タッチパネルをスワイプしてもロック画面から先にすすめない。USBマウスと、キーボードを接続しログインしたところ、タッチパネルでも操作できるようになった。どうやら起動直後にタッチパネルが動いていないようである。デジタイザペンは最初認識している様子だったが、いざアプリケーションでデジタイザペンを使おうとすると、使えなくなっていた。

タブレットであるLatitude10でタッチパネルやデジタイザペンが使えないのは不便なので、使えるようにしたいところ。デバイスマネージャーを見てみると、特にエラーになっている様子はない。DELLのサポートページを見てみると、Latitude10は、Windows10ではサポートされていない様子。デジタイザ用にTABLET PC - Enhanced Tablet Driver 7.3.1-7をインストールしてみたり、デジタイザのユーザー設定を削除したりを行うと、一時的に使えるようになる。

そうこうしているうちに、デジタイザペンを使わずにある程度時間がたつと認識しなくなることが分かる。節電のためにデジタイザをオフをにするような動作だ。デバイスドライバの一覧からWacom Deviceのプロパティにある電源管理のタブを開くと、「電力節約のために、コンピュータでこのデバイスの電源をオフにできるようにする」があるので、このチェックをはずしたところ、無事にデジタイザペンを継続して使えるようになった。タッチパネルも同様かと思い、I2C HIDデバイスのプロパティから同様に設定すると、こちらも起動直後から使えるようになった。

とりあえず、入力デバイスが利用できるようになったので、一安心。Pythonで作ったGraffitiっぽい入力ができるソフトウェアキーボードも無事に動いている。