WindowsでPythonのライブラリをコンパイルする方法
Windowsで misakaをインストールしようとしたらエラーが発生した。
$ pip install misaka
調べてみたらVisual Studio 2008をインストールすればよいようだが、今更古いバージョンをインストールする気にはなれず、とりあえず Visual Studio Express 2013 for Windows Desktop をインストールするも解消せず。
調べてみたところ以下のブログを発見。 街角のリブロガー: pythonでvcvarsall.batエラーが出る。
まずは、 from distutils.msvc9compiler import * get_build_version() これで現在のバージョンを調べる。 10.0なら HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\VisualStudio\10.0\Setup\VC\ProductDir ここに文字列で C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC を入れて、 find_vcvarsall()を実行してみて、 ちゃんと戻り値が得られている事をチェックする。 これで完了。
$ python -i Python 3.3.3 (v3.3.3:c3896275c0f6, Nov 18 2013, 21:19:30) [MSC v.1600 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from distutils.msvc9compiler import * >>> get_build_version() 10.0 >>> get_platform() 'win-amd64'
おそらくpythonをコンパイルしたときと同じコンパイラを使用しようとするが、存在しないのでエラーになるのだと思う。そこで、無理矢理Visual Studio 2013のコンパイラを使用するように設定を変更すると、find_vcvarall()メソッドが通り、コンパイルもできるようになった。
$ python -i Python 3.3.3 (v3.3.3:c3896275c0f6, Nov 18 2013, 21:19:30) [MSC v.1600 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from distutils.msvc9compiler import * >>> find_vcvarsall(get_build_version()) 'C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\vcvarsall.bat'
変更したのは以下の2カ所
レジストリの編集
レジストリエディタで 以下のキーを作成し
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\Setup\VC
文字列の値を次のように設定
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC
vcvarsall.batの編集
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
を確認したところ x86_amd64
ディレクトリが存在したので
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat
を編集し
if /i %1 == amd64 goto amd64
を次のように書き換えた
if /i %1 == amd64 goto x86_amd64
参考リンク
さくらのVPS 1Gに乗り換えました
さくらのVPS 1G が 512MBのプランと同じ価格で利用できるそうなので乗り換えました。これをきっかけにUbuntuからCentOSを使用することにしました。
乗り換えるにあたり初期設定を行ったので、作業メモを残しておきます。ただし参考にした記事とほとんど同じ内容ですが。
端末からログインできるようにする
sshの設定ファイルを書いてローカルの端末から簡単にログインできるようにしておく。
$ vi ~/.ssh/config
内容は次のような感じ。
host sakura hostname <ホスト名> port 22 compression yes
次から以下のようなコマンドでログインできるようになる。
$ ssh -l root sakura
作業用ユーザーの作成
ssh接続するときは必要な時以外はrootユーザーは使用しない。
そのため、別の作業用ユーザーを作成する。
# useradd foo # passwd foo # usermod -G wheel foo
wheelグループのユーザーはすべてのコマンドを使用することができるようにする。
# visudo
で vi が起動するので、%wheel のコメントを外す。
%wheel ALL=(ALL) ALL
作業用ユーザーを作成したらローカル端末からログインできることを確認する。
$ ssh -l foo sakura
鍵の作成と登録
ローカル端末の公開鍵を登録する。
鍵を作っていなかったらssh-keygenで作成しておく。
$ ssh-keygen
ローカル端末の公開鍵をコピーする。
$ ssh-copy-id sakura
sshのセキュリティを高めるためにサーバー側の設定を変更する。
$ sudo vi /etc/ssh/sshd_config
ほとんどの設定が#でコメントアウトされているので#を削除して設定を書き換える。変更点は次の通り。
ポート番号を22から別のものに変更(例として22222にする場合)
Port 22222
ルートユーザーによるログインを禁止する。
PermitRootLogin no
パスワードによる認証を禁止する。
PasswordAuthentication no
設定ファイルを編集したらsshdを再起動。
$ sudo service sshd restart
ローカル端末から接続できることを確認する。
ポート番号を変えた場合は、先の手順で作成した ~/.ssh/config の port を変更しておくこと。
iptablesの設定
不要なポートを閉じるにiptablesを設定する。
sshのポート番号を変更している場合はそのポート番号も許可する必要があるので注意。
設定をシェルスクリプトに記述する。
$ vi iptables.sh
#!/bin/sh iptables -P INPUT ACCEPT iptables -F iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -s 10.0.0.0/8 -j DROP iptables -A INPUT -s 172.16.0.0/12 -j DROP iptables -A INPUT -s 192.168.0.0/16 -j DROP iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A INPUT -p tcp --dport 2222 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -j LOG --log-level info --log-prefix "[iptables] " iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -L -v
設定を有効にしたあと、保存する。
$ sudo sh iptables.sh $ sudo service iptables save
SDカードなしで手軽にDropbxの容量を増やす方法 on Windows7
話題になってるDropboxのベータテスト参加で5GBの容量追加についてこんな記事が紹介されていました。
Dropboxベータテスト参加で追加5GBを獲得するための手っ取り早い方法 | ひとりぶろぐ
記事の中で、SDカードや外付けHDDを持っていない人はiPhoneを利用する方法が紹介されていますが、Windows7を使用している場合はもっと手軽な方法があります。
それは、外付けHDDの代わりにVHD(仮想HDD)を利用する方法です。Windows7では、OS標準でVHDがサポートされているため、簡単にVHDの操作ができます。
手順としては
- VHDを作成し接続する。このとき、適当なドライブ(E:\など)などにマウントする。
- DCIMフォルダを作成し、アップロードする写真や動画などを置く。
- VHDをマウントしたドライブを右クリックし、自動再生を開く。
- 「Import pictures and videos - Dropboxを使用」を選択すると、インポートが始まります。
Windows7でなくても仮想HDDを使った方法は他のOSでもできると思います。しかし、Windows7なら簡単にできるよ!ということで。
2012/2/6 追記
元の記事のブックマークコメントで「本来はテスト協力のお礼なのだから、偽装ファイルを使用すべきでない」という意見がありました。もっともな意見だと思うので、この記事で公開していたダミーVHDを非公開としました。
よって、大容量のデータはカメラなどで動画を撮ったものを使用するようにしましょう。
(でもカメラ持ってたらSDカード持ってるか・・・)
お題:ランダム文字列(python)
半角英数からなる16桁の文字列をランダムに生成して下さい。
お題:ランダム文字列 - No Programming, No Life
使用できる文字は 'a'から'z', 'A'から'Z'、'0'から'9'、そして '_' とします。
import string import random chars = string.ascii_letters + string.digits + '_' print "".join([ random.choice(chars) for i in range(16) ])
iMX515でNicoRo α版が予期せぬエラーで落ちるときは、パーミッションを手動で設定してみる
iMX515でNicoRo α版がインストールできたものの、いざ動画を再生しようとすると予期せぬエラーでアプリが強制終了してしまいます。アプリを再起動すると、強制終了の原因が表示されました。
今回は、以下のような内容でした。
java.lang.SecurityException: Neither user 10039 nor current process has android.permission.WAKE_LOCK.
どうやら、スリープさせない(WAKE_LOCK)のパーミッションが足りないようです。
正直なところiMX515はスリープ周りが相当怪しいので、仕方ない気も。。
とりあえず、以下の手順でWKAE_LOCKパーミッションを手動で追加してあげることで、NicoRo α版で再生できるようになったことは確認しました。
以下、WKAE_LOCKパーミッションを手動で追加する方法
※自己責任でよろしくお願いします。
※Android SDKやドライバをインストールして、iMX515をUSB接続している前提です。
packages.xmlを取り出す
adb pull /data/system/packages.xml
テキストエディタで開いて、name="jp.sourceforge.nicoro"〜となっている箇所を確認
<package name="jp.sourceforge.nicoro" codePath="/data/app/jp.sourceforge.nicoro-2.apk" flags="0" ts="1296148152000" version="19" userId="10056"> (中略) <perms> <item name="android.permission.CAMERA" /> <item name="android.permission.INTERNET" /> <item name="android.permission.WRITE_EXTERNAL_STORAGE" /> <item name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" /> </perms> </package>
permsにWAKE_LOCKがなかったら追加する
<item name="android.permission.WAKE_LOCK" />
あとは、packages.xmlを戻して再起動
adb push packages.xml /data/system/
iMX515でtwicca(など)がインストールできないときは、Google Map APIをいれる
iMX515でtwicca(など)がインストールに失敗することがあります。
調べてみると、どうやらGoogle Map APIが足りないそうなので
ここの手順どおりにファイルをコピーすると動作しました。
以下、手順
※自己責任でよろしくお願いします。
※Android SDKやドライバをインストールして、iMX515をUSB接続している前提です。
ここからファイルをダウンロードして解凍。
- 「com.google.android.maps.xml」を「/system/etc/permissions/」にコピー
- 「com.google.android.maps.jar」を「/system/framework/ 」にコピー
するだけです。
adb push com.google.android.maps.xml /system/etc/permissions/ adb push com.google.android.maps.jar /system/framework/
ただし、以下のようなエラーでファイルのコピーに失敗するときは
failed to copy 'com.google.android.maps.xml' to '/system/etc/permissions//com.google.android.maps.xml': Read-only file system
/system を読み書きモードでマウントし直します。
adb shell mount -o rw,remount /dev/block/mtdblock3 /system
あとは、iMX515を再起動すれば完了です。
adb shell reboot
いつものようにマーケットに接続すると、インストールできるようになっているはずです。
iMX515購入&使用感レポート
Android OS 2.2環境(というよりAIR for Android)が動作する環境が欲しかったので
iMX515という中国製Androidタブレット(いわゆるaPad)をヤフオクで落札しました。
スペック
OS | Android 2.2 |
---|---|
CPU | Freescale IMX515 800MHz ARM Cortex A8 |
メモリ | 512MB |
内蔵メモリ | 4GB |
液晶 | 8インチ 感圧式タッチスクリーン(マルチタッチ非対応) WVGA 800*600px |
外部端子 | microSDHC 3.5mmオーディオジャック |
バッテリー | 3900mAh |
サイズ | 209×161.5×14mm |
重量 | 約480g |
その他 | Androidマーケット接続可・Flash Player 10.1対応・USBホスト機能あり |
よいと思ったところ
- さすがは中国製品なので価格が安かったです。私は13,000円ほどで落札しました。一般のオークション相場は15,000円ほどのようです。
- 安価のわりにメモリが512MBも積まれています
- 8インチで非ワイド(4:3)なので、10.1インチのタブレットと比べて、電車の中や寝ながら電子書籍や動画をみるのにちょうどよいサイズ&重量だと思います。
- Androidマーケット対応済み。知らない人がいるかも知れませんが、aPadではAndroidマーケットに接続できない(アプリが入っていない)ケースもあるので、わざわざ「マーケット対応済み」と書いてあるショップもあります。
- Flash Player 10.1対応済み。Android版Flash PlayerはAndroid OS 2.2でないと動作しませんが、Android OS 2.2のタブレットだからといってFlash Playerが動作するわけではありません。(CPUごとに最適化されたFlash Playerがある)
- USBホスト機能があります。つまり、USB機器を接続してAndroid側で利用できます。たとえば、USBメモリやBluetooth、最新のファームウェアではUSBカメラがサポートされました。
残念なところ
- 中国製品ゆえの(?)の不安定さ。無線LANがつながらない、マーケットで検索できないアプリがある etc
- ただし、こういう不満を調べながら1つずつ解決していくのがaPadの楽しみでもあります(ポジティブすぎ?)
- 電源ボタンがスライド式(ON-OFF)
- 電源を切るときはOFFにスライド。すると電源が切れるのかと思いきや、「携帯電話の電源を切ります」のダイアログが表示されて、「OK」でようやく電源が切れるという仕様です
- スリープはどうやるんだ?と思うかも知れませんが、ON→OFF→ONとすばやくスライドするとスリープできます。
- ただし、フリーズしますorz ファームウェアのアップデートによる改善を待つしかありません。
タッチパネル
タッチパネルが感圧式(つまり圧力でタッチを感知する方式)なのでiPhoneなどの静電式比べると使い勝手が劣ります。コスト面を考えるとしょうがない部分でもあります。
逆に、ボールペンなど圧力をかけられるものなら何でもタッチペンとして利用というメリットもありますが。(iPhoneなどの静電式のタッチパネルは、先端が特殊加工されたスタイラスでないと操作できません)
ただし、感圧式であることを差し引いても、タッチ精度がイマイチです。特にゆっくりとスライドする場合。
ロングタップ(長押し)するときはさらに致命的で、プルプルと震えてしまいます。
すばやくスライドさせるときも多少ブレますが、まぁ許容範囲内だと思います。。
タッチパネルの精度については、個体差があるらしいです。私のiMX515は”ハズレ”ですかね。。
まとめ
個人的には値段のわりに十分遊べるデバイスだと思いますが、中国製品ゆえの難点が数多くあるのも事実です。そのあたりを楽しめる人で、iMX515が安価で手に入る状況であれば、おススメできる製品だと思います。