Python東海 第22回勉強会に参加してきました

初めてなの

今回、初めて勉強会で発表してきた。内容は自己紹介。
当日資料をつくろうとしたけど、何を話そうか迷った。けど、初めてPython東海の勉強会に参加したので、せっかくだから自己紹介をした。腹の中に抱えていた就活も含めて話せて良かった。というかすっきりした。
話した内容は

  • お前だれよ(Python界隈では自己紹介のとき使うらしい)
  • Pythonを何に使っているのか
  • kanazawa.rbについて
  • 製作したAndroidアプリをちらっと紹介

発表した動機

動機は、内向的な性格だから。
喋りたいけど、きっかけが難しい。しゃべりかけるのチョー勇気いる><

参考資料↓(感化された。こちらは、シャイな人に訴えているけど内向的な人向けなきがする)
http://www.slideshare.net/authorNari/dead-or-shy

最後に

主催者の方はじめ参加者の皆様、どうもありがとうございました。
懇親会楽しかったですw

kanazawa.rb #7に参加してきた

はじめに

http://kanazawarb.github.com/meetup/7/
今回のkanazawa.rbは#6に続いて2回目。

申込時に

申込時はmeetupと懇親会の両方参加で申し込んだ。今回は人数が多くてキャンセル待ちだった。
そこで、懇親会の申込期限が切れた後に、懇親会だけでも参加できないかと打診。

ここで制限人数を増やしてもらい、懇親会のみならずmeetupまでも参加できるようにしていただいた。

テーマ

テーマはアジャイル

アジャイルという言葉は聞いたことはあったけど、それが一体何かは知らなかった。今回の勉強会でアジャイルとは何かを知っれれば良いなと、お話を聞く前は思っていた。


色々メモったけど端折る。
ただ、アジャイルでは振り返るということが重要とのこと。
振り返る上で、以下の3点が重要。

  • Keep(良い点)
  • Problem(悪い点)
  • Try(次回挑戦)

Keepは定着。ProblemはTryから生み出す。

ということで今回のkanazawa.rbを振り返る。

振り返り

Keep(良い点)
  • 会場に早く着いた。
Problem(悪い点)
  • 申し込みを早めにしとけばよかった
  • 名刺入れを持っていなかった
Try(次回挑戦)
  • 申し込みは予定が決まり次第早めに
  • 名刺は名刺入れに

おわりに

懇親会で楽しくお酒を飲めて気持よく酔えた。(←ここ重要)

Arduinoでシリアル通信する際の注意点

Arduinoとシリアル通信をするには、起動時間のために1.5秒ほど待たなくてはならない。
でないとうまくプログラムが動かなくて、唸ることになる。

検証

検証プログラムとして、Arduino側でシリアル通信で何かの文字列を受け取ったら13番ピンに刺さっているLEDが光るプログラムを製作。

// Arduino用プログラム
const int LED = 13;

void setup()
{
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, LOW);
}

void loop()
{
  if(Serial.available() > 0) {
    // シリアル通信で何か受信したら
    digitalWrite(LED, HIGH);
  }
  
  delay(10);  // 10[ms]待つ
}

シリアル通信ソフトで文字列を送信するとLEDが点灯する。

手作業で文字列を打つのは面倒なので、pythonスクリプトで文字列を送信。5秒間光らせるだけ。

# coding: utf-8

import serial
import time

ser = serial.Serial()
ser.port = '/dev/cu.usbserial-A7006Qrd'
ser.baudrate = 9600
ser.open()

ser.write('dummy string')
time.sleep(5)

このスクリプを実行すると、5秒間何も起こらないまま終了する。

解決方法

解決方法が載ってた。
serial port - Pyserial problem with Arduino - works with the Python shell but not in a program - Stack Overflow

通信の開通後と送信との間に1.5秒ほど、Arduinoのブート用に開けないといけないらしい。
解決方法がわかったので、上のpythonスクリプトを編集する。
編集箇所はser.writeの前に1.5秒ほど停止させる。

time.sleep(1.5)
ser.write('dummy string')
time.sleep(5)

実行すると、意図したとおり5秒間LEDが点灯する。

sshコマンドでリモートマシンのコマンドを実行

クライアントからsshコマンドでリモートマシンのコマンドを実行する方法は次のコマンドでできる。

local$ ssh username@hostname.com pwd
/home/username

ユーザの入力が必要なプログラムに対しては-tオプションを付ければ大丈夫。
たとえば、sudoコマンドだとパスワードを求められるので、-tオプションを付けるとパスワードを入力できる。

local$ ssh -t username@hostname.com sudo apt-get update
[sudo] password for username:

Mac OSXにlibnfcをインストールしてICタグを読み込む


インストール

準備物

Mac Portsgccが入っているものとして話を進めます。
まず、libusbをインストール

$ sudo port install libusb 
$ sudo port install libusb-compat

次にlibnfcのソースコードをダウンロードし、それを解凍
執筆時の最新版はlibnfc-1.6.0-rc1

$ wget http://libnfc.googlecode.com/files/libnfc-1.6.0-rc1.tar.gz
$ tar xvf libnfc-1.6.0-rc1
$ cd libnfc-1.6.0-rc1

最後にビルドとインストール。
configureのパラメータは各自で合わせてください。メモと参考までにパラメータを載せておきます。

$ ./configure LDFLAGS="-L/opt/local/lib" CFLAGS="-I/opt/local/include -I/opt/local/include/libusb-1.0 -I/Developer/SDKs/MacOSX10.6.sdk/usr/include/pcap"
$ make && make install

もしmakeで失敗したら

私の環境ではmake中にエラーが出て、解決中に調べたことをメモ。
参考資料 Google グループ

make中に下記のエラーがでたら

Undefined symbols:
  "_MIN", referenced from:
      _pn53x_usb_receive in libnfcdrivers.a(libnfcdrivers_la-pn53x_usb.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
make[3]: *** [libnfc.la] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

libnfc/nfc-internal.hの27行目くらいにこのコードを追加。

#ifndef MAX 
#define MAX(a,b) (((a) > (b)) ? (a) : (b)) 
#endif 
#ifndef MIN 
#define MIN(a,b) (((a) < (b)) ? (a) : (b)) 
#endif 

makeでジョブ数を増やしてビルドの高速化

はじめに

makeコマンドでは

$ make -j2

ジョブ数を2個に増やすことができ、ビルド時間を短くすることができる。-jNでジョブ数Nとして設定できる。

実験

どれくらい速くなるかベンチマークをとってみた。

環境

まず、ベンチマーク用に程よい大きさのソースを用意。今回はnginx-1.1.15を使った。
以下、ベンチマークの環境。

nginxで普通に./configureするとrewriteモジュールが足りないとエラーをはくので、今回は

$ ./configure --without-http_rewrite_module

とした。

計測

計測にはtimeコマンドを使い、realの値をベンチマークの結果とした。
ジョブ数1-6個で計測した。
計測回数はそれぞれ1回。

結果
ジョブ数 時間[s]
1 28.10
2 17.85
3 17.92
4 18.79
5 18.41
6 17.28

まとめ

ジョブ数1個じゃさすがに遅いけど、2個以上だと速い。2個以上のベンチマークは各環境ごとに多く取らないといけない。今回は1回しか取っていないことに注意。
-jNオプションは積極的に使うべき。
コーヒータイムを長くしたいときは-jNオプションを外すべき。