Make it possible with Python.

最近Pythonから離れ気味、その他物作りに寄り気味です。

RaspberryPi とPCのファイルのやりとりを簡単にする方法

ちょっと作りたいものがあって、RaspberryPi2を買いました。

Raspberry Pi 2 Model B

Raspberry Pi 2 Model B

初Linuxです。

Windowsと勝手が違う点が多く、戸惑っています。GUIはおまけなんですね。

少しずつ作業をする中で、困ったことがありました。

RaspberryPi2はCPUも非力で、ブラウザでの調べ物は厳しいので、調べ物はWindows PCでやっています。

そうすると、ブラウザからのコピペができないので、テキストをWindowsからRaspberrypiに手軽送る方法がないか、探してみました。

以下サイトで、SAMBAをインストールしてネットワーク越しにファイルをやりとりするという方法が紹介されていました。

Raspberry Pi 2にSambaを入れてファイル共有サーバーにする - がちゃのーと。 Gotcha-Note

工作と小物のがらくた部屋: Raspberry Pi とWindows でファイル共有(samba)

上のページを参考に、以下の流れでインストールと設定までができました。

sudo apt-get update
sudo apt-get install samba

cd /etc/samba
sudo cp -pi smb.conf smb.conf.org #オリジナルファイルをコピー
sudo vi smb.conf #vimで編集

vimが起動したら、最後にカーソルを持って行き、

o を押して編集開始で、以下を追加

     [pi]
      comment = pi's home
      path = home/pi
      public = Yes
      read only = No
      writable = Yes
      guest ok = Yes
      force user = pi
      directory mode = 0777
      create mode = 0666

ここまで終わったら、ESC → ZZ で保存終了して、

     sudo service samba restart

で再起動すると、PCのネットワークから “RASPBERRYPI” というフォルダが見えて、中身も編集できるようになる。

無線LANにつながる人なら誰でも編集できるので、注意。

これで、だいぶ便利になりました。

2017.05追記①

vimでなくNanoの方が簡単でコマンドも表示されていて使いやすいので、テキストの編集は、Nanoを使うことにしました。

sudo nano smb.conf

追記②

【後日追記】 sambaのリスタートでこのようなエラーが出ましたが、

Failed to restart samba.service: Unit samba.service is masked.

参考URLの追記の通りに、smbdとnmbdを個別にリスタートするとOKでした。

$ sudo service smbd restart
$ sudo service nmbd restart

ファイル名、ファイル内テキスト一括置換スクリプト 2 (Python2/3対応, その他改善版)

過去に作ったテキスト置換スクリプトを、手直ししました。

過去スクリプト:ファイル名とファイル内テキストを置換するpythonスクリプト - Make it possible with Python.

photo by Mathias L.

このスクリプトは、ファイル名、拡張子の指定条件に一致する複数のテキストファイルのファイル名と内容の一括置換してくれます。

今回改善した点は以下です。

  • Python3 / 2.7 両対応(のはず)
  • 文字コードをShift-JISから、Windows用Shift-JISコードであるcp932に変更
  • 出力ファイルが元ファイルと混在しないよう、リネームファイルは新規フォルダ内に生成
  • 出力ファイル上書き防止のため、同一ファイル名作成時にはエラーと、ファイル名先頭にduplicatedを付与
  • .iniファイルに条件、置換文字列を記載(exeにして配布時のため)

いままでは特定の条件で出力ファイルが空になったりして、人には勧められませんでしたが、これで実用になるのではと思います。

コードはこちら。

続きを読む

エラー AttributeError: 'module' object has no attribute 'html' に対処

相変わらず月に1回くらい、長期記憶を鍛えるかのように一進一退のpythonのコーディングに取り組んでいます。

これからGWくらいで、某アカウントアグリゲーションサービスのスクレイピングをしようとしています。 Webサービスにするとセキュリティが問題になるので、ローカルだけで動かすツールにします。

このサイトを参考に基礎から勉強中。うまく行くのでしょうか。

qiita.com

今日の引っかかりはこんなエラー。

AttributeError: 'module' object has no attribute 'html'

なんか・・・1年くらい前に見た記憶がありますが、原因と対処を思い出せません。

エラー発生時のコードはこれ。

import lxml

a= open(r"201502.htm", "r", encoding='utf-8')

target_html = a.read()

root = lxml.html.fromstring(target_html)

調べた結果、原因は下記URLにあるように、importの記載ミスでした。

python import statement semantics - Stack Overflow

lxmlは moduleだけど、html のattributeは読み込み忘れていたので、moduleに存在しないといわれているエラーでした。

1行目を

import lxml.html

に直して、module内に.htmlを取り込む(?)ことで解決。

すっきり。

herokuでPython3.4 Flask のサンプルアプリケーション動作確認!

前回のheroku挫折からしばらく経過。

python関係の記事が増えてきたようなので、再度チャレンジし、今回は動かすことができたので、学んだことをメモ。

このチュートリアルに沿って実施。 Flask を触ってみる + Heroku で動かす - Qiita

詰まった箇所

"Procfile"のファイル名を小文字の"procfile"としていたことで認識せず、以下のエラー

Mis-cased procfile detected; ignoring. Rename it to Procfile to have it honored.

Procfile declares types -> (none)

しかし先頭文字を大文字にして上書き保存してプッシュしても認識せず。ローカルファイルを一度削除して、コミット、プッシュし、その後再度再度作成、コミット、プッシュしたら認識した。Windowsは大文字、小文字の区別がないので、ファイル名を変えてもgitシステムで変更が認識できなかったりするのだろうか。

HerokuへのデプロイはSourceTreeのGUIからは行えない?

わからなかったのでコマンドプロンプトのGitから実施した。 コマンドプロンプトのGitをはじめて使った。Gitでaddとかcommitとかpushとかをするときは、cdコマンドで該当フォルダに移動して行えば、.gitフォルダから必要な情報を読んでくれるのか。情報にはremoteレポジトリの情報も含まれているから、その登録名だけを使ってプッシュができる。

その他学んだこと

Procfile, Requirements.txt はいずれもルートフォルダに入れる

当たり前すぎて記載のないページが多数。

procfileは複雑でなくてもよく、基本は1行程度

procfile · herokaijp/devcenter Wiki · GitHub Deploying Python Applications with Gunicorn | Heroku Dev Center

gunicornはWSGIサーバー

flaskのサーバーより効率的に動いてくれるとか。 基本は以下のコマンドで起動すればいいので、これをProcfileに書く。

gunicorn hello:app --log-file -

herokuもテキスト形式はUNIX標準にあわせる

herokuなどweb関連サーバーは基本的にunix系なので、 文字コードutf-8 と 改行コードLF になるようすべてのツールを設定すべき。 → sublime text2 もデフォルトはシステム改行コードをそのまま使う設定だったので修正した。

SSHキーを使わなくてもデプロイはできてしまう

SSH Git transportを使いたければSSHキー登録が必要と記載があった。ということは、SSHキーが登録成否はデプロイとは別に確認が必要。 Managing Your SSH Keys | Heroku Dev Center

プライバシーポリシー

当サイトに掲載されている広告について

当サイトでは、第三者配信の広告サービス(GoogleアドセンスA8.netAmazonアソシエイトバリューコマースiTunes アフィリエイトプログラム)を利用する可能性があります。
このような広告配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示するため、当サイトや他サイトへのアクセスに関する情報 『Cookie』(氏名、住所、メール アドレス、電話番号は含まれません) を使用することがあります。
またGoogleアドセンスに関して、このプロセスの詳細やこのような情報が広告配信事業者に使用されないようにする方法については、こちらをクリックしてください。

当サイトが使用しているアクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。
このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。
このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。
この規約に関して、詳しくはこちら、またはこちらをクリックしてください。

当サイトへのコメントについて

当サイトでは、スパム・荒らしへの対応として、コメントの際に使用されたIPアドレスを記録しています。
これはブログの標準機能としてサポートされている機能で、スパム・荒らしへの対応以外にこのIPアドレスを使用することはありません。
また、メールアドレスとURLの入力に関しては、任意となっております。
全てのコメントは管理人が事前にその内容を確認し、承認した上での掲載となりますことをあらかじめご了承下さい。
加えて、次の各号に掲げる内容を含むコメントは管理人の裁量によって承認せず、削除する事があります。

  • 特定の自然人または法人を誹謗し、中傷するもの。
  • 極度にわいせつな内容を含むもの。
  • 禁制品の取引に関するものや、他者を害する行為の依頼など、法律によって禁止されている物品、行為の依頼や斡旋などに関するもの。
  • その他、公序良俗に反し、または管理人によって承認すべきでないと認められるもの。

初出掲載:2016年12月30日

BaaSサービスのParse.com の使い方と、危険性について

photo by Abllo™

BaaSとParse.comの利点について

Webサービスを作る場合、BaaSサービスを使わないと初心者では敷居が高すぎると聞いたので、BaaSについて調べてみた。 BaaSというのは、バックエンド処理を提供してくれるサービスで、例えば有名なParse.comというサービスだと、以下のことができるらしい。

Parse.com で出来ること レコードの参照・登録・更新 ユーザ管理(スケルトンが用意されていて、Facebook・Twitter 連携も) 奥の手として、各APIにJavaScriptでサーバサイド処理を書ける(Cloud code) プッシュ通知 Parse.com を Backbone.js のバックエンドとして使ってみる - akiyoko blog

Parse.comを実際に使ってみた

便利そうなので実際に使ってみた。このサイトのチュートリアルが非常にわかりやすかった。

Parse.com を Backbone.js のバックエンドとして使ってみる - akiyoko blog

昨日できたてのVirtualBox環境で、実際に公式チュートリアルのTodoリストを動作させてみた。

BaaSがどうというより、初めてテキスト以外の動的サービスがVirtualBox上で動いてちょっと嬉しかった。

1点だけ詰まったのは、httpサーバーのURLについて。 SSHでcdを使ってディレクトリを移動すると、"python -m CGIHTTPServer" でhttpサーバーを動かす(?)際に、現在のディレクトリが最上位URLになるんですね。

Parse.comにはセキュリティリスクがある

その一方で、こんな指摘を見つけた。

超簡単にできるぐらいなので、そのままだとかなり危険。データベースをネットにさらしているようなもの。MySQLとかPostgreSQLとかOracleの入口をID、パスワードを公開してネットにさらしてる感じと、まずは理解する。 例) 保存されたユーザーのメールアドレスを誰でも閲覧可能 データの一覧は取り放題 誰でもデータも消せちゃう クライアント側からSQLで言うところの、SELECT, UPDATE, INSERT, DELETE 呼べてるんだから、当然。

Parse.com を導入する際に気を付けること:セキュリティの甘さについて - Qiita

これはちょっと怖い。正式サービス前にセキュリティ有識者へのヒアリングと対策が必須な様子。 何もかもうまくいくほど、成熟はしていない様子。

それにしても、BaaSで一番有名なParse.comがこのレベルだと、BaaSを使ったサービスには危険なものも含まれているんじゃないかと気になる。

VirtualBox上にサーバーを立ててpythonを実行

この本を読みながら、Windows内のVirtualbox上で、pythonを実行できた。

Pythonプロフェッショナルプログラミング

Pythonプロフェッショナルプログラミング

教科書のサンプルコードの1行目にある

#!/usr/bin/env python

は、環境変数で "python" を指定するという意味のよう。 環境変数は /usr/bin/env にあることが多いので、この方が汎用性が高まるらしい。

その他メモ

  • 本に書かれていなかったパーミッションは RLoginからGUIで設定できた。

  • しばらく以下のエラーがでてpythonが実行できなかったけど、

CGI script exit status 0x7f00

原因は文字コードがASCIIになっていたことだった・・・。 いつもUTF-8なのになぜ今回に限って・・・。

なにはともあれ、これでweb用のpythonコードを書き始められるはず・・・。