pythonでReportLabを使ったPDFファイルの作り方〜その2〜

f:id:else-something:20161107192336p:plain

便利機能

キャンパス作成時に原点を左上に指定する。

これを指定すると、drawInlineImageなどで描画される画像が上下反転する模様。うーむ。 retCanvas = canvas.Canvas('./sample.pdf', bottomup=False)

続きを読む

pythonでReportLabを使ったPDFファイルの作り方

reportlabを利用してpdfファイルを作る

pdfを作ろうと思って調べてたんだけど、公式ドキュメントはpdfで提供されてるみたいで、なんか使いにくい。

よさげなまとめも見つけられなかったので、簡単にまとめてみる。

まずはキャンバスの宣言とテキスト周り。

フォントに日本語のTrueTypeを宣言するので、日本語もオッケーなはず。

続きを読む

raspberry pi zeroのディスプレイを回転させる

/boot/config.txtに追記すればオッケー

x系の設定はいじる必要がなかった。

素晴らしい!

/boot/config.txtに以下の設定をそれぞれ追記して再起動でオッケー。

起動画面から変更されてるはず。

config.txtの詳細はこちらを。 ただし、lcd_rotate=xxxについては解説なし。裏コマンド??? config.txt - Raspberry Pi Documentation

HDMI出力の場合(タッチパネルなし)

display_rotate=xxx (2018/06/03大文字を小文字に修正しました。)

タッチパネルごと回転させる場合

lcd_rotate=xxx (2018/06/03大文字を小文字に修正しました。)

xxxの設定値は以下の通り。

xxx設定値 設定結果
0 no rotation
1 時計回りに90°回転
2 時計回りに180°回転
3 時計回りに270°回転(つまり反時計回りに90°回転)
0x10000 水平に反転(左右鏡像)
0x20000 上下に反転(上下鏡像)

Python3で"ImportError: No module named 'RPi'"って出た時の対処

raspberry pi zeroで、python3からGPIOを使おうとしたら、エラーで止まっちゃった…

まだスタンダードになれないPython3 (^^;

何でかわからず、しばらく悶々としてから、コマンド打って解決。

あぁそうか、Python3ってまだデフォルト扱いじゃ無いんだねー、って思った。

単純に入ってなかっただけ。

インストールはこちら

sudo apt-get install python3-rpi.gpio

Livedoorのお天気API

ちょっと作りたいものがあって、調べてたら、 Livedoorのお天気APIのアイコンの一覧をみつけた。

weather.livedoor.com

JSONでお天気情報をもらえるのだけど、 もらえる内容の詳細はこっち。

weather.livedoor.com

おぉぉ、便利だ。

あとはピンポイントに自分の町を調べられたらなー

smbd が起動してもすぐ終了しちゃう現象を解決した話。

smb.confのコメントルールが変わった?? (<-変わってません)

f:id:else-something:20160713110808j:plain

アップデートを走らせたあと、ファイルサーバが使えないと思ったら、smbdが起動できなかったようで。。。

原因:smb.confの記述がおかしかった、ということになるのだけれども。。。

これまで、つい数分前まで使えてたコンフィグファイルで、 いきなり使えなくなるとは思わなかったわ。。。

調べたら、もともとコメントのルールが

Chapter 11. smb.confファイル:
セミコロンかシャープ記号で始まる行(';'か'#')。

ってことなので、悪いのは僕なのだけれども。。。

環境:

Ubuntu 14.04.4 LTS x86_64
smbd : Version 4.3.9-Ubuntu

現象:

コマンドラインからサービスを起動しようとしても、
起動してる風なメッセージが返ってくるが、実態はサービスが落ちている状態。

$ sudo service smbd start
$ smbd start/pre-start, process 3845
$ sudo service smbd status
$ smbd is not running

smbdが起動していないので、 /var/log/samba/log.smbd にはなにもログが残っておらず、 /var/log/system では、こんな感じ。

init: smbd main process (3345) terminated with status 1
init: smbd main process ended, respawning
init: smbd main process (3348) terminated with status 1
init: smbd respawning too fast, stopped

testparm で、コンフィグチェックしたところ、以下のような返答が。

$ testparm
$ .....
$ unix extensions(no # 2010-11-12追加: value is not boolean!
$ .....

実際のsmb.confでの記述はこう。

unix extensions = no # 2010-11-12追加

なんで、'=' が '(' になってるんだ。。。

解決策:

'=' が '(' になってる理由はわからないけれど、 行中の'#'はコメント記号として認識してくれなかったみたいで、

# 2010-11-12追加
unix extensions = no

このように記述することで、解決しました。。。

もともとコメントのルールが

Chapter 11. smb.confファイル:
セミコロンかシャープ記号で始まる行(';'か'#')。

ってことなので、ルールはしっかり守らなきゃね、というお話。

linux未対応のプリンターをWindowsを踏み台に印刷できるようにする

普段、ほぼずっとUbuntu系のマシンで作業してるのですが、たまに印刷して確認したいようなことがあります。

で、プリンタがLinux対応してくれてればよいのですが、何故か身近なプリンタは素直に対応してくれず…

レーザープリンタが2台もあるのに、いずれも上手く動かないのでした。 一台はPSボードなるものがオプションで必要らしく、もう一台はどうやってもデータを受け取ってくれない模様。

いい加減疲れたし不便なので、ほかの人のWindowsマシンを踏み台に使わせてもらうことにしました。

WindowsでGhostScriptプリンターを作って共有出し、UbuntuからPostScriptプリンターで印刷

作業内容は、次のリンクの通り。

第271回 WindowsをPostScriptプリンターにしてUbuntuから快適印刷

ただ、一点だけ。

最後にUbuntu側でプリンタ登録する際に、PPDの選択で

「Generic」-「PostScript」-「Generic PostScript Printer Foomatic/PostScript [en]」

を選ぶことになってますが、

「Generic」-「PDF」-「Generic PDF Printer [en]」

を選択しました。

そうしないと、テスト印刷でもページの右端が切れちゃったのでねー

f:id:else-something:20160510200727j:plain

なんにせよ、快適になってよかった。

Pythonからseleniumでブラウザを操作するときに、ハマった。。。

f:id:else-something:20160419190111p:plain

Pythonからseleniumでブラウザを操作する

Ubuntu14.04からだとFireFoxがいうこと聞かなかったりなんだかんだ。。。

情報端末を作りたくて、PythonでWEBスクレイピングしてます。
で、GUIをブラウザにして、全画面表示にすればよいよねー、と思ってSimpleHTTPServer立ち上げて情報表示させるものの、情報がアップデートされた際に再表示させるのどうしよう。。。。と困っていました。

なんか他に良い方法があるのかもしれないけど、とりあえずseleniumでブラウザをコントロールして希望の動作をさせることができそうなので、その方向で。

ただ、いくつかハマりポイントがあったので、メモ。

Pythonseleniumのインストール

aptでさっくりと入れてしまいます。

apt-get install python-selenium

SeleniumからFireFoxが起動しない、、ような。。。。

WEBでの情報を元にPythonコンソールから試してみたところ、手元のUbuntuPythonとaptで手に入れたseleniumだと、Firefoxは起動するものの、コンソールにコントロールが戻らず、しばらくするとなんかエラーで落ちてしまう。

$ from selenium.webdriver import Firefox
$ browser = Firefox()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py", line 77, in __init__
    self.binary, timeout),
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/extension_connection.py", line 49, in __init__
    self.binary.launch_browser(self.profile)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.py", line 68, in launch_browser
    self._wait_until_connectable()
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.py", line 103, in _wait_until_connectable
    raise WebDriverException("Can't load the profile. Profile "
selenium.common.exceptions.WebDriverException: Message: Can't load the profile. Profile Dir: %s If you specified a log_file in the FirefoxBinary constructor, check it for details.

プロファイルが読み込めないとか言ってるんだけど、プロファイルを指定しても状況変わらずで、WEBで情報も見つけられなかったので、さくっと諦めて、Chromiumを使うことにしました。
(Chromiumは別途aptで入れてました。)

Chromeドライバーをapt-getで入れる。ただし、一点要注意。

みてみたらaptにあったので、こちらもサクッと入れる。

sudo apt-get install chromium-chromedriver

注意:chromeドライバーのパスを指定しないといけない。

コンパイルすれば場所が明確なんだけど、aptで入れたからよくわからなくなってしまい。。。
調べたところ、以下の場所にあるみたい。

/usr/lib/chromium-browser/chromedriver

なので、書き方としてはこう。

browser = webdriver.Chrome('/usr/lib/chromium-browser/chromedriver')

seleniumでgetで画面遷移させる時、プロトコルも必要なのね。

最初URLだけを渡してたら、エラーを吐いてて謎でした。。。
アドレス欄に入れる文字と同じで良いと思ってたよ。。。。

正しくはこうみたい

browser.get('http://www.yahoo.co.jp')

全画面表示で起動するには、--kioskオプションで。

こちらも、調べてたら最大化(maximize_window())の情報は多くあるものの、希望する全画面表示ではなく。
webdriverにオプションで"--kiosk"という形で指定してあげると良いみたい。

options = webdriver.ChromeOptions()
options.add_argument("--kiosk")

全部まとめるとこんな感じ

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--kiosk")

browser = webdriver.Chrome('/usr/lib/chromium-browser/chromedriver',chrome_options=options)

browser.get('http://www.yahoo.co.jp')

上記情報の環境

Ubuntuで、PythonからNFCリーダー(RC-S380)を扱う

UbuntuNFCリーダーは簡単に扱えるようだ。

Sony RC-S380/Pの場合

RC-S380/Pが手元にあり、面白そうなので、 Linuxで使う方法を調べてみた。

やってるひといるねー。 Sony公式のドライバとか必要なのかと思いきや、 そうでもなく、nfcpyというスクリプトでpyusb経由でコントロールできるみたい。

すごいねー。

参考URL

セットアップなどはこちらを参考に。

Raspberry Pi と Sony RC-S380/P、nfcpy で NFC カードの IDm を読み取る | 傀儡師の館.Python - 楽天ブログ

実際に残高などを読み出すスクリプトはこちら

nfcpyでお手軽NFC開発[2/2]

Android Studio 2.0がでたってー

f:id:else-something:20160408122947p:plain

Android Studio 2.0がでたってー

開発が楽になるかな。

気になる変更点は、、、なんだろう。

Instant Runの機能とGPU Debugger Previewあたりかなぁ。。。

OpenGLを使うアプリを作ることはないと思うけど。。。

詳しくはこちらから

Android Studio 2.0 | Android Developers Blog