読者です 読者をやめる 読者になる 読者になる

Yura YuLife

ITエンジニアの覚え書き

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

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

ansible でネストされた item に対してループを回す

動作環境 ansible 2.1 with_subelements でネストされたループを回す with_items のかわりに with_subelements を利用することで、ネストされた item に対してループを回すことが出来ます。 例 vars/main.yml users: - sam: email: - sam@example.com - sam@…

Mac で ROS の環境構築

Mac OSX で ROS を動かすまでの環境構築手順です。 環境 Mac OSX El Capitan ROS Kinetic ROS の環境構築 GUI 系のツールを動かそうとすると Qt5 周りの依存関係でハマったので、とりあえず ROS の基本パッケージのみ(ROS-Comm)の環境構築を行いました。 基…

ROS開発にPyCharmやCLionを使う際のTips

この記事では ROS の開発に Jetbrains 製の IDE である PyCharm や CLion を使う際に、便利に開発を進めるための設定を紹介しています。 環境 Ubuntu 16.04 (14.04) ROS Kinetic (Indigo) PyCharm 2016.X CLion 2016.X 環境変数を設定 Ubuntu にインストール…

FTDI FT2232C用のudevルール

FTDIのFT2232C (Dual RS-232)というUSBシリアルを接続した際に、他のデバイスと識別できるよう、/dev/以下にシンボリックリンクを作成するudevのルールです。 通常のUSBデバイスならば、Vendor IdとProduct Idを指定すれば良いのですが、FT2232Cは2つのシリ…

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…

BitBucketとWerckerでウェブサイトを自動デプロイ

タイトルの通り。BitBucketとWerckerとFTP(lftp)で静的なウェブサイトを自動デプロイする方法です。 ちなみにBitBucketとWerckerを使っているのは、プライベートリポジトリを無料で使えるから。 BitBucketの設定 Gitのリポジトリを作って、ウェブサイトのフ…

ニューラルネットで声から体調を推定するシステムを作りました

IDCフロンティア主催のIoTと健康をテーマにしたハッカソン、サバフェス 2016で Healthy Voice Netというシステムを作ったので紹介します。大雑把に言うと、ニューラルネットワークを用いて声色を分類することで、声から体調が分かるシステムです。 プレゼン…

ROSのbagファイルから特定トピックをcsv形式で出力する

ROS

めちゃくちゃ簡単。 環境 Ubuntu 14.04 ROS Indigo bagファイルをcsv形式で出力 以下のコマンド1行でいける。 $ rostopic echo -b bagファイル.bag -p /トピック名 > csvファイル.csv 例えば、Twist形式だと以下のようになる。 $ rostopic echo -b bagファイ…

aitendoの脈波センモジュールをArduinoで使ってみる

aitendoの脈波センモジュールをArduinoに接続して脈波を取ってみます。 必要なもの 脈波センモジュール - aitendo Arduino Uno ジャンパーワイヤ3本(センサモジュールに付属) 接続方法 基板にマイナスマークのついている端子をArduinoのGNDに、プラスマーク…

iframeを含んだページでBootstrapのメニューが開閉しない

Bootstrapで、iframeが含まれているページを作った時に、navbarが開閉できないという問題に遭遇しました。 問題のiframeは以下の通り。 <iframe src="hoge.html" class="hoge" name="hoge" width="340" height="200"> 原因は単純で、</iframe>で閉じるのを忘れていただけで、以下のように修正したら無事動くようになりました。 <iframe src="hoge.html" class="hoge" name="hoge" width="340" height="200"></iframe> 参考URL j…

ArduinoでSRF02のI2Cアドレスを書き換え

Arduinoで超音波距離センサ SRF02のI2Cアドレスを書き換える方法です。 元のアドレスを確認 デフォルトではSRF02のアドレスは0xE0(224)なので、I2CScanerのスケッチを利用すると、0xE0の上位7bitである0x70(112)にデバイスが見つかります。 シリアルモニタの…

RealSense R200の新しいROSパッケージ(realsense_camera)のインストール手順

2016年3月1日にIntelからRealSense R200の新しいROSパッケージがリリースされましたので、早速インストールして使ってみました。 GitHub - intel-ros/realsense: Intel(R) RealSense(TM) ROS packages 動作環境 Ubuntu 14.04 ROS Indigo RealSense R200 Came…

Milkcocoaを使ってセンサー情報をウェブサイトで表示

Milkcocoaを利用すると、センサー情報をクラウドに上げてウェブサイト等で利用するといった、IoTチックなことが超簡単にできてしまいます。 僕も、自宅にあるRaspberry Piに接続した温湿度センサとPIRセンサの値をMilkcocoaにアップロードして、僕のウェブサ…

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-…

PCがRealSense R200をUSBハブに接続するとPCから認識できない

タイトルの通り。 IntelのRealSense R200をUSBハブやUSB延長ケーブルに接続すると、PCから認識できないことがあります。 これは単純に電力の供給不足が原因です。 RealSenseなどの深度センサでは、赤外線レーザーによってパターンを照射し、赤外線カメラによ…

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

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

シェルスクリプトで日付が有効かをチェックし、開始・終了日間でループする

シェルスクリプトで、特定の日付間のログのみを抽出する等の処理をする際に、日付でループするコードの例です。 サンプルコード loop_date.sh #!/bin/bash # 有効な日付ではない場合は終了する関数 function check_date() { date -d "$1" || exit 1 return 0…

CSSで等幅フォントの指定

CSS

ウェブサイトやブログ記事でソースコードなどを掲載する場合の、等幅フォントの設定例です。 はてなブログの<pre class="code"></pre>に適用されるCSSに、日本語にも強いソースコード向けの等幅フォントRicty Diminishedを追加しています。 pre.code { font-family: 'Ricty Diminishe…

シェルスクリプトで正規表現マッチ

シェルスクリプトで引数による条件分岐をする際にif文の列挙やcase文を利用する場合は多々あると思いますが、 単純に引数のチェックのみを行いたいときはbashの正規表現マッチで調べるのが簡単です。 bashでの正規表現マッチ 例えば、第一引数が正規表現^h.+…

Rundeckでユーザの追加とプロジェクトへのアクセス権限の設定

Rundeckのデフォルトユーザはadminのみです。管理者が1人の場合はadminのみで十分ですが、複数人で管理する場合は適切な権限を付与するべきです。 そこで、特定のプロジェクトのみ閲覧・編集できるユーザを作成する場合は、設定ファイルを追加・編集すること…

Redmineのトップメニューにリンクを追加する

検証環境 Redmine 2.6 Ruby 1.9.3 Redmineのトップメニューにリンクを追加 Redmineの上部には、ホーム、マイページ、プロジェクト等のメニューが並んでいますが、ここに任意のメニューを追加する方法です。 プラグインを用いる方法が一般的だと思われますが…

ペパボWiMAXでWX02(とクレードル)を買った

タイトルの通り、WiMAXのWX02とクレードルのセットを購入しました。買ったのはホワイトの方です。 WiMAXっていうと各社色々キャンペーンをやっていて、どこで買うか色々悩みました。 キャッシュバックは高額だけど手続きが面倒だし、本家は割引率が悪いしで…

Djangoでユーザがグループに所属しているかを判定する

Djangoで、特定のグループに所属しているユーザのみにリンクやページを表示する場合に、以下のような方法があります。 テンプレートタグを用いる方法 テンプレートタグを用いると、ユーザの所属するグループによってページ内の情報やリンクを出しわけること…

バンドのウェブサイトを作りました

タイトルの通り、バンドのウェブサイトを作りました。 cosmic time scale そんなに更新頻度も高くないので、BootstrapベースのHTMLページ1枚だけですが、 テンプレートが優秀なので、それなりには見栄えがするかなーと。 趣味でやっているバンドのウェブサイ…

crontabでscpを使うとPermission deniedされてしまう

scpをするようなシェルスクリプトを作った時に、コマンドラインから実行するとちゃんとscpでファイルコピーできるのに、crontabに登録して実行するとPermission denied(publickey)と怒られてしまう、という事象で結構ハマりました。 なぜ動かなかったかとい…

Django 1.8にAxesを追加する

連続ログイン失敗時にアカウントをロックする機能を追加できるプラグインdjango-axesのインストール手順です。 環境 Django 1.8 django-axes のインストール $ pip install django-axes settings.pyの編集 vi settings.py INSTALLED_APPS = ( # 以下の1行を…

UbuntuのApacheにmod_dosdetectorをインストール

Ubuntu上で動かしているApacheに、DoS攻撃対策用のモジュールmod_dosdetectorをインストールする手順です。 環境 Ubuntu 14.04 64bit Apache 2.4.7 下準備 $ sudo apt-get install apache2-dev mod_dosdetectorのインストール $ git clone https://github.co…

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

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

ライブをやりました

渋谷のTAKE OFF 7というライブハウスのイベントに参加させていただきました。 キーボードが僕です。 演奏するのにいっぱいいっぱいでかなーり下を向いちゃっていたので、次のライブではもっと前を向けるよう頑張らないとなー。 www.youtube.com

Ubuntuにgit 2.5をインストール

環境 Ubuntu 14.04 64bit Ubuntuに最新のgitをインストール apt-getでインストールできるgitのバージョンが1.9.1なのですが、最新バージョンを利用したかったのでgitのPPAを追加してインストールします。 $ sudo add-apt-repository ppa:git-core/ppa $ sudo…

Ubuntuでサービスの自動起動の設定

環境 Ubuntu 14.04 64bit サービスの自動起動の設定を変更する Ubuntuでサービスの自動起動の設定を変更するならsysv-rc-confを使うと便利です。 sysv-rc-confのインストール $ sudo apt-get install sysv-rc-conf 設定の変更 $ sudo sysv-rc-conf 画面上で…

Windows 10のストアでアプリのダウンロードが進まない場合はWindows Updateを

まとめ Windows 10にアップグレード後、ストアでアプリのアップデートを行おうとしても、ダウンロードが進まなかった Windows Updateで更新プログラム KB3081444を適用したら、無事ダウンロードとインストールが行われるようになった Windows Updateの方法 W…

MeCabとUNIDICをUbuntu 14.04にインストール

環境 Ubuntu 14.04 MeCab 0.996 UNIDIC 2.1.2 MeCabとUNIDICのインストール手順 下準備 必要なライブラリをインストールしておく。 $ sudo apt-get install libiconv-hook-dev MeCabのダウンロード 以下の公式サイトから、mecab-0.996.tar.gzをダウンロード…

MongoDBのダンプファイルを作成して圧縮するスクリプト

タイトルの通り、MongoDBのダンプファイルをzipで1ファイルにまとめるスクリプトで、定期的なバックアップの作成に利用しています。 $ vi dump_mongodb.sh #!/bin/bash MONTH=$(/bin/date '+%Y%m') DATE=$(/bin/date '+%Y%m%d-%H%M') LOGDIR="/バックアップ…

MongoDBで WARNING: You are running on a NUMA machine. というワーニングが出る場合

環境 Ubuntu Server 14.04 MongoDB 2.4.9 MongoDBの起動時にワーニングが出る apt-getでインストールしたMongoDBを起動すると、起動時に以下のようなワーニングが表示された。 MongoDB shell version: 2.4.9 connecting to: test Server has startup warning…

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…

MediaWikiのデータ移行と、エラー対処方法

Wikipediaでも利用されているWikiエンジンのMediaWiki。XML形式で出力することで、データのエクスポートやインポートが簡単にできるのも特徴です。 動作環境 Ubuntu Server 14.04 Apache 2.4.7 PHP 5.5.9 MediaWiki 1.25.1 MediaWikiのデータ移行方法 データ…

xargsで超簡単に並列処理ができるという衝撃

あるフォルダ内の画像をImageMagickで切り抜いて別のフォルダに保存するシェルスクリプトを動かしていたのですが、何万枚という画像を処理すると結構計算時間がかかります。 シェルスクリプトで簡単に並列処理できないかなーと思ったら、xargsで超簡単に並列…

Pythonでマルチプロセス処理

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

Ubuntu 14.04にPhantomJS 2.0をインストール

Ubuntu 14.04にPhantomJSをインストールする時の手順です。 動作環境 Ubuntu 14.04 PhantomJS 2.0 基本的には公式サイト(http://phantomjs.org/)の手順にのっとるだけ。 リポジトリのクローン $ git clone git://github.com/ariya/phantomjs.git ソースコー…

Windows 10のVirtualBox上のUbuntu 14.04でQtCreatorを動かすとVirtualBoxが落ちる

タイトルの通り。 Windows 7でVirtualBoxを動かしていたときは問題なかったのですが、Windows 10にアップグレードしてから、VirtualBox上のUbuntu 14.04でQtCreatorを起動すると、なぜかVirtualBoxが落ちてしまいます。 エラーメッセージは、「メモリが"writ…

AtomでDjangoのテンプレート編集時にEmmetを有効化

AtomのEmmetは、デフォルトでHTML, CSS, Sass/SCSS, LESSの編集時のみ、タブキーで補完ができる設定になっています。 そのため、django-templatesのように、HTML以外のシンタックスでEmmetを利用する場合には別途設定が必要です。 インストール済みパッケー…