pythonでReportLabを使ったPDFファイルの作り方〜その2〜
便利機能
キャンパス作成時に原点を左上に指定する。
これを指定すると、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
smbd が起動してもすぐ終了しちゃう現象を解決した話。
smb.confのコメントルールが変わった?? (<-変わってません)
アップデートを走らせたあと、ファイルサーバが使えないと思ったら、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]」
を選択しました。
そうしないと、テスト印刷でもページの右端が切れちゃったのでねー
なんにせよ、快適になってよかった。
Pythonからseleniumでブラウザを操作するときに、ハマった。。。
Pythonからseleniumでブラウザを操作する
Ubuntu14.04からだとFireFoxがいうこと聞かなかったりなんだかんだ。。。
情報端末を作りたくて、PythonでWEBスクレイピングしてます。
で、GUIをブラウザにして、全画面表示にすればよいよねー、と思ってSimpleHTTPServer立ち上げて情報表示させるものの、情報がアップデートされた際に再表示させるのどうしよう。。。。と困っていました。
なんか他に良い方法があるのかもしれないけど、とりあえずseleniumでブラウザをコントロールして希望の動作をさせることができそうなので、その方向で。
ただ、いくつかハマりポイントがあったので、メモ。
Python−seleniumのインストール
aptでさっくりと入れてしまいます。
SeleniumからFireFoxが起動しない、、ような。。。。
WEBでの情報を元にPythonコンソールから試してみたところ、手元のUbuntuとPythonと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)を扱う
Android Studio 2.0がでたってー
Android Studio 2.0がでたってー
開発が楽になるかな。
気になる変更点は、、、なんだろう。
Instant Runの機能とGPU Debugger Previewあたりかなぁ。。。
OpenGLを使うアプリを作ることはないと思うけど。。。
詳しくはこちらから