Yura YuLife

ITエンジニアの覚え書き。

python

Python の attrs で validation をかける

以前 Qrunch に投稿してた記事を持ってきました。 Python の attrs が便利すぎて、データ保持用のクラスを作る時なんかは専らコレばっかり使っています。 そんな attrs で入力されるデータに validation をかける方法です。 attrs で入力データをチェック 例…

周波数からC3やF4などのノート名に変換する

以前 Qrunch に投稿してた記事を持ってきました。 Python 3 で周波数からノート名に変換 A4 は 440Hz、 C3 は 130.8Hz のようにノート毎に周波数が決まっていますが、周波数からノートに変換するコードを Python 3 で書いてみました。 import math SCALE_LIS…

Pythonでファイルに書き出さずにzip圧縮

この記事では、Python でファイルを生成せずに zip 圧縮したデータを生成する方法を紹介します。 zip 圧縮したデータを Python 内からアップロードしたい場合なんかに、ファイルに書き出して後から削除する手間を避けたかったり、FaaS などそもそも ReadOnly…

matplotlib でプロット上の点をドラッグする例

Python の matplotlib 上で、マーカーをドラッグ可能にするプログラムの参考例です。 動作環境 python 2.7 matplotlib 1.5.3 実装例 github.com 使い方 プロット上で左クリックで点を追加 プロット上の点をドラッグで移動 プロット上の点を右クリックで削除 …

python の multiprocecssing.Pool.map で複数の引数を持つ関数を扱う

python の multiprocessing を用いてマルチスレッド処理を行う際に、複数の引数を持つ関数を扱うときの Tips です。 動作環境 Python 2.7 方法 やり方は簡単で、目的となる関数をラップするだけです。 # -*- coding: utf-8 -*- from multiprocessing import …

ROS Pythonでオイラー角とクォータニオンの相互変換

ROSでオイラー角とクォータニオンを変換するには、tfパッケージの関数を利用すれば良いのですが、 単体の関数として使うには少々使いづらいので、簡単なラッパー関数を作りました。 オイラー角からクォータニオンへの変換 import tf from geometry_msgs.msg …

ROS Pythonにおけるuint8[]の扱い方

ROSでuint8[]型を利用しているトピックをPythonで使う場合にハマった点です。 環境 Ubuntu 14.04 ROS Indigo rospyにおけるuint8[]型の扱い ROSのメッセージ型に関するリファレンスを参照すると、uint8[]型について以下のような記述があります。 uint8 has s…

PIRセンサ(SB00412A-1)とMilkcocoaで簡易見守りシステムを構築

見守りシステムで家の中に監視カメラを置くなんて話がありますが、さすがに部屋をずっと撮影されているといい気持ちはしないと思います。そこで、前の記事で紹介したaitendoの人感センサ(SB00412A-1)のデータをRaspberry PiからMilkcocoaにアップロードして…

Raspberry Piで人感センサ(SB00412A-1)を5Vで利用する方法

aitendoで購入したPIRセンサ(SB00412A-1)ですが、Raspberry Piで3.3Vで利用すると誤検知を繰り返し動作が不安定なので、5Vで利用する方法をまとめました。 必要なもの Raspberry Pi2 Model B 低電圧極小PIRセンサー SB00412A-1 1kΩ以上の同じ種類の抵抗 3個 …

ROSのPointCloud2で独自のフィールドを定義

ROSのpclパッケージで独自のフィールドを定義したPointCloud2のトピックをpublish, subscribeする方法です。 環境 Ubuntu 14.04 ROS Indigo スクリプト例(Publisher) rvizで確認 上記のスクリプトを動かし、rvizでPointCloud2型の/custom_point_cloudトピッ…

Python, OpenCVでRGBとHSVを相互変換

動作環境 OpenCV 2.4.8 OpenCVでRGBとHSVを相互変換 画像のRGBとHSVをまるごと変換するにはcv2.cvtColorをそのまま使えばよいのですが、こちらはRGBとHSVの値を1ピクセルだけ変換するためのラッパー関数です。 import numpy as np import cv2 def hsv_to_rgb…

人感センサ(SB00412A-1)検知時にLEDを光らせる

aitendoで人感センサ(SB00412A-1)を購入したので、センサが人を検知した時にLEDを光らせてみました。 追記(2016/02/28) SB00412A-1を3.3Vで接続すると動作が不安定になるため、5Vでの接続を推奨します! 接続方法は、Raspberry Piで人感センサ(SB00412A-1)を…

Raspberry Piでスイッチを押すと音楽を再生する

Raspberry Piに接続したタクトスイッチを押すと、音楽を再生するPythonのスクリプトです。 ちなみに、上の動画で流れているのは僕のバンドCosmic Time Scaleの曲です。 必要なもの Raspberry Pi2 Model B (Raspberry Pi A/B+も可) タクトスイッチ 10kΩの抵抗…

Raspberry Piに接続したLCD(ACM1602NI)をPythonで動かす

Raspberry PiにI2Cで接続したLCD(ACM1602NI-FLW-FBW-M01)を、Pythonから動かします。 ソースコード、セットアップ手順はGitHubにて公開しています。 github.com 必要なもの Raspberry Pi2 Model B (Raspberry Pi A/B+も可) LCDモジュール(ACM1602NI-FLW-FBW-…

PythonでGoogle Drive API v3を利用して画像のアップロード

PythonでGoogle Drive API v3を利用して、 GoogleDriveにフォルダを作成し、ローカルのフォルダ内の画像をアップロードするスクリプトです。 環境 Python 2.7 Mac OSX / Debian Google Drive APIの有効化と認証情報の取得 プロジェクトの作成 https://consol…

djangoのペジネータで、現在のページの前後数ページのみをリンクとして表示する

Djangoのペジネータを使ってリンクを表示するときに、Google検索みたいに前後数ページのリンクを表示する方法です。 Googleの場合は前5ページ、後4ページを表示していますね。 環境 Django 1.8 ペジネータで前後数ページを表示 views.py from django.core.pa…

Djangoの初回マイグレーション時に relation "auth_user" does not exist というエラーが発生する場合

環境 Ubuntu 14.04 PostgreSQL 9.3 Django 1.8 初回マイグレーション時のエラー Djangoのプロジェクトをコピーしてきて、$ python manage.py migrate しようとすると、以下のようなエラーが発生した。 Synchronizing apps without migrations: Creating tabl…

Pythonでマルチプロセス処理

例えば、ファイルを1行ずつ読んでその1行1行に対して何か重い処理(データベースへ登録、自然言語処理など)をする場合、マルチプロセスで並列処理を行うと早くなることがあります。 以下のようなサンプルプログラムを動かしてみました。 マルチプロセスの処理…

PythonでWikipediaの圧縮ファイルから記事毎にXMLツリーを取り出す

PythonでWikipediaの全記事の圧縮ファイル(jawiki-YYYYMMDD-pages-articles.xml.bz2)から、各記事を取り出してそのXMLツリーをパースするスクリプトを作成しました。 使い方: 引数にWikipediaの圧縮ファイルを指定 $ python parse_wikipedia.py ~/hoge/jawik…

Djangoの環境構築(Ubuntu Server, Apache, PostgreSQL)

以下の環境でDjangoを動作させるまでの手順をまとめました。 Ubuntu Server 14.04 LTS 64bit Apache 2.4.7 PostgreSQL 9.3 Django 1.8 (Python 2.7) Django 1.7, PostgreSQL 9.Xでも同様の手順で構築が可能です。 パッケージのインストール Python $ sudo ap…

Djangoでフォーム内でクリックされたボタンによって異なる処理を行う

タイトルの通り、同一フォーム内でクリックしたボタンによって異なる処理を行いたい場合は以下のように書きます。 hoge.html <form action="{% url 'hoge.views.some_view' %}" method="post"> {% csrf_token %} <input type="text" name="hoge" value=""> ... <input type="submit" name="button_1" value="ボタン1"> <input type="submit" name="button_2" value="ボタン2"> </form> v…

Djangoで特定のページのみBasic認証をかける

やり方は、以下のページの通りです。 djangosnippets: view by view basic authentication decorator スニペットの保存 まず、上記サイトのスニペットをコピー&ペーストして、プロジェクト内に保存します。 basic_auth_view.py import base64 from django.h…

DjangoのQuerySetでランダムに要素を取得

例えば、SomeModelというモデルクラスのインスタンスを10個取得する場合。 random_query_set = SomeModel.objects.order_by('?')[:10] QuerySet API reference | Django documentation | Django ただし、リファレンスによるとバックエンドで利用しているDBに…

Pythonでmd5やsha256などのハッシュ値を求める

Pythonで引数に入力された文字列のハッシュ値を求めるスクリプトを作成してみました。 hash.py #!/usr/bin/python # -*- coding: utf-8 -*- import hashlib def calc_hash(string): u'''入力文字列のハッシュ値を求めて辞書型で出力する''' hash_dict = { 'm…

Django 1.7ではmimetypeではなくcontent_typeを利用する

DjangoでJSON形式のレスポンスを返すビューを作っていたのですが、Djangoを1.6から1.7にアップグレードした際にエラーが発生しました。 views.py import json from django.http import HttpResponse def some_view(request): some_dict = {'hoge': 'hogehoge…