ページ

2014年8月31日日曜日

RaspberryPiと戯れてみる 11 - 外部から室内の温度を表示 -

ブラウザ上で温度計の内容を見れる様にする。

phpで作成したシェルスクリプトを実行。
↓ここらへんを参考にhtmlを作成。
http://logic.moo.jp/data/archives/443.html

いざ、ブラウザからアクセスしてみても、うまくいかない ><

ブラウザから実行する際はwww-dataユーザで実行する事になるが、
sudo が使えない事が原因でしたorz。

以下サイトを参考に修正。
http://www.maruko2.com/mw/一般ユーザーを_sudo_できるようにする

<?php
$temp = shell_exec('/home/pi/tmp102.sh');
?>
<html>
<body>
<?php
echo "<pre>$temp</pre>";
?>
</body>
</html>
~                 

実行!!








無事温度が見れました^^
次はもう少し見た目を。。。

以前もやったBootstrapを使ってみる。
以下参考サイト
http://www.atmarkit.co.jp/ait/articles/1403/19/news034_4.html














最終的に温度計やmotion起動/停止を盛り込んだ画面

2014年8月30日土曜日

RaspberryPiと戯れてみる 10 - 温度測定 -

以前Arduinoでやった温度測定をRaspberry pi でやって外から温度を見れるようにする。

まずはRaspberry Pi がI2C接続できるようにする。
以下サイトを参考に設定
http://www.gvc-on.net/?p=288

pi@raspberrypi ~ $ sudo diff /etc/modules /etc/modules.org 
8d7
< i2c-dev
pi@raspberrypi ~ $ sudo diff /etc/modprobe.d/raspi-blacklist.conf /etc/modprobe.d/raspi-blacklist.conf.org 
4c4
< #blacklist i2c-bcm2708
---
> blacklist i2c-bcm2708

再起動。

ちゃんとI2Cデバイスモジュールが読み込まれているか確認。
pi@raspberrypi ~ $ dmesg | grep i2c
[    4.899135] bcm2708_i2c_init_pinmode(0,0)
[    4.906241] bcm2708_i2c_init_pinmode(0,1)
[    5.086692] bcm2708_i2c bcm2708_i2c.0: BSC0 Controller at 0x20205000 (irq 79) (baudrate 100000)
[    5.277198] bcm2708_i2c_init_pinmode(1,2)
[    5.368575] bcm2708_i2c_init_pinmode(1,3)
[    5.374680] bcm2708_i2c bcm2708_i2c.1: BSC1 Controller at 0x20804000 (irq 79) (baudrate 100000)
[   11.249426] i2c /dev entries driver

I2C用ツールをインストール。
pi@raspberrypi ~ $ sudo apt-get install i2c-tools
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libnet-daemon-perl libplrpc-perl
これを削除するには 'apt-get autoremove' を利用してください。
提案パッケージ:
  libi2c-dev python-smbus
以下のパッケージが新たにインストールされます:
  i2c-tools
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 1 個。
59.5 kB のアーカイブを取得する必要があります。
この操作後に追加で 223 kB のディスク容量が消費されます。
取得:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main i2c-tools armhf 3.1.0-2 [59.5 kB]
59.5 kB を 1秒 で取得しました (47.1 kB/s)
以前に未選択のパッケージ i2c-tools を選択しています。
(データベースを読み込んでいます ... 現在 71037 個のファイルとディレクトリがインストールされています。)
(.../i2c-tools_3.1.0-2_armhf.deb から) i2c-tools を展開しています...
man-db のトリガを処理しています ...
i2c-tools (3.1.0-2) を設定しています ...

配線。


















Raspberry Piのピン配置
http://elinux.org/RPi_Low-level_peripherals

pi@raspberrypi ~ $ sudo i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n] y
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- 
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --  

bcのインストール
pi@raspberrypi ~ $ sudo apt-get install bc
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libnet-daemon-perl libplrpc-perl
これを削除するには 'apt-get autoremove' を利用してください。
以下のパッケージが新たにインストールされます:
  bc
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 1 個。
106 kB のアーカイブを取得する必要があります。
この操作後に追加で 257 kB のディスク容量が消費されます。
取得:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main bc armhf 1.06.95-2 [106 kB]
106 kB を 1秒 で取得しました (79.4 kB/s)
以前に未選択のパッケージ bc を選択しています。
(データベースを読み込んでいます ... 現在 71054 個のファイルとディレクトリがインストールされています。)
(.../bc_1.06.95-2_armhf.deb から) bc を展開しています...
menu のトリガを処理しています ...
install-info のトリガを処理しています ...
man-db のトリガを処理しています ...
bc (1.06.95-2) を設定しています ...
menu のトリガを処理しています ...

シェルスクリプト作成
#!/bin/bash

hexraw=$(sudo i2cget -y 1 0x48 0x00 w)
while [ "$hexraw" == "" ]; do
    hexraw=$(sudo i2cget -y 1 0x48 0x00 w)
done

msb=$(echo ${hexraw:4:2})
lsb=$(echo ${hexraw:2:1})
dec=$(printf "%d\n" "0x$msb$lsb")

echo "scale=4; $dec*0.0625" | bc
~                                                                                         
~                                                                                         
~         


無事温度測定できました^^
pi@raspberrypi ~ $ ./tmp102.sh 
29.1250
pi@raspberrypi ~ $ ./tmp102.sh 
31.5000
pi@raspberrypi ~ $ ./tmp102.sh 
31.6875
pi@raspberrypi ~ $ ./tmp102.sh 
31.8125
pi@raspberrypi ~ $ ./tmp102.sh 
31.8750
pi@raspberrypi ~ $ ./tmp102.sh 
31.9375
pi@raspberrypi ~ $ ./tmp102.sh 
31.9375
pi@raspberrypi ~ $ ./tmp102.sh 
32.0000
pi@raspberrypi ~ $ ./tmp102.sh 
32.0625
pi@raspberrypi ~ $ ./tmp102.sh 
30.5000
pi@raspberrypi ~ $ ./tmp102.sh 
30.3750
pi@raspberrypi ~ $ ./tmp102.sh 
30.3750
pi@raspberrypi ~ $ ./tmp102.sh 
30.3125
pi@raspberrypi ~ $ ./tmp102.sh 
30.3125
pi@raspberrypi ~ $ ./tmp102.sh 
30.2500
pi@raspberrypi ~ $ ./tmp102.sh 
30.2500
pi@raspberrypi ~ $ ./tmp102.sh 
30.1875
pi@raspberrypi ~ $ ./tmp102.sh 
30.1875
pi@raspberrypi ~ $ ./tmp102.sh 
30.1875

次はVPN接続して外からブラウザ上で温度が見れるようにする。

2014年8月24日日曜日

Arduinoと戯れる 6 - スピーカーで音を出す -

スピーカーを使って音を出してみる。


マルツパーツで安いスピーカーを購入。


















以下を参考に接続。
http://mathrax.sakura.ne.jp/mathrax_com/ws/page10.html


















digitalWriteとdelayMicro~を使用して振動を発生させる。
また、tone関数を使用して音階を発生。

以下スケッチの例

// Arduino + Sound WS
// 2011.11.26-27
//
// 01-1:Arduinoで音を出そう
// "音が鳴るサンプル"


//スピーカーのピンを9ピンにする
int speakerPin = 9;



void setup(){

  //スピーカーのピンを出力モードに
  pinMode(speakerPin, OUTPUT);
  //圧電スピーカーを鳴らす
  tone(speakerPin, 329, 125);  //ミ
  //休符
  delay(150);
  tone(speakerPin, 329, 125); //ミ
  //休符
  delay(300);
  tone(speakerPin, 329, 125); //ミ
  //休符
  delay(300);
  tone(speakerPin, 261, 125); //ド
  //休符
  delay(150);
  tone(speakerPin, 329, 125); //ミ
  //休符
  delay(300);
  tone(speakerPin, 391, 125); //ソ
  //休符
  delay(650);
  tone(speakerPin, 195, 125); //低いソ
  //休符
  delay(150);
}

void loop(){

}

マ○オの音楽が流れました^^

2014年8月23日土曜日

Arduinoと戯れる 5 - 温度測定 TMP102 -

温度測定をやってみる。

温度計をスイッチサイエンスから購入。
http://www.switch-science.com/catalog/1474/

慣れない半田ごて作業でピンヘッダを接着。
























http://blog.goo.ne.jp/mikotolv5/e/3890d443221cc2f144034e592d4bc23d
上記サイトを参考に配線してみる。



















ADD0をGNDに接続したのでI2Cのアドレスは0x48で設定。
スケッチ。

#include "Wire.h"

#define TMP102_I2C_ADR    0x48


void setup() {
  Wire.begin();
  Serial.begin(9600);
}

void getTemp102() {
  byte high, low;
  int val;
  float convtemp;
  float currtemp;

  Wire.beginTransmission(TMP102_I2C_ADR);
  Wire.write(0x00);
  Wire.endTransmission();
  Wire.requestFrom(TMP102_I2C_ADR, 2);
  Wire.endTransmission();

  high = (Wire.read());
  low = (Wire.read());

  val = ((high) << 4);
  val != ((low) >> 4);

  convtemp = val * 0.0625;
  currtemp = convtemp - 5;

  Serial.print(convtemp);
  Serial.println("C");
}

void loop() {
  getTemp102();
  delay(5000);
}

シリアルモニタの結果。



RaspberryPiと戯れてみる 9 - WEBカメラ連携 -

久しぶりにRaspberry Piを触ってみる。

WEBカメラを使用してプチ監視カメラを作成。

購入したWEBカメラ Logicool WebCamera c270




















Raspberry Piに接続し認識しているか確認。
pi@raspberrypi ~ $ lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
Bus 001 Device 005: ID 046d:0825 Logitech, Inc. Webcam C270

pi@raspberrypi ~ $ 

ちゃんと認識してくれている模様。
まずは更新作業。
sudo apt-get update
sudo apt-get upgrade

次に扱い易いと噂のmotionをインストールしてみる。
pi@raspberrypi ~ $ sudo apt-get install motion
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libnet-daemon-perl libplrpc-perl
これを削除するには 'apt-get autoremove' を利用してください。
以下の特別パッケージがインストールされます:
  ffmpeg libav-tools libavcodec53 libavdevice53 libavfilter2 libavformat53 libavutil51
  libdc1394-22 libdirac-encoder0 libgsm1 libjack-jackd2-0 libmp3lame0 libopencv-core2.3
  libopencv-imgproc2.3 libpostproc52 libpq5 libraw1394-11 libschroedinger-1.0-0
  libspeex1 libswscale2 libtheora0 libva1 libvpx1 libx264-123 libxvidcore4
提案パッケージ:
  jackd2 libraw1394-doc speex postgresql-client
以下のパッケージが新たにインストールされます:
  ffmpeg libav-tools libavcodec53 libavdevice53 libavfilter2 libavformat53 libavutil51
  libdc1394-22 libdirac-encoder0 libgsm1 libjack-jackd2-0 libmp3lame0 libopencv-core2.3
  libopencv-imgproc2.3 libpostproc52 libpq5 libraw1394-11 libschroedinger-1.0-0
  libspeex1 libswscale2 libtheora0 libva1 libvpx1 libx264-123 libxvidcore4 motion
アップグレード: 0 個、新規インストール: 26 個、削除: 0 個、保留: 1 個。
8,297 kB 中 106 kB のアーカイブを取得する必要があります。
この操作後に追加で 20.5 MB のディスク容量が消費されます。
続行しますか [Y/n]? y
取得:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main libswscale2 armhf 6:0.8.13-1+rpi1 [106 kB]
106 kB を 1秒 で取得しました (104 kB/s)
パッケージを事前設定しています ...
以前に未選択のパッケージ libavutil51:armhf を選択しています。
(データベースを読み込んでいます ... 現在 70747 個のファイルとディレクトリがインストールされています。)
(.../libavutil51_6%3a0.8.13-1+rpi1_armhf.deb から) libavutil51:armhf を展開しています...
以前に未選択のパッケージ libdirac-encoder0:armhf を選択しています。
(.../libdirac-encoder0_1.0.2-6_armhf.deb から) libdirac-encoder0:armhf を展開しています...
以前に未選択のパッケージ libgsm1:armhf を選択しています。
(.../libgsm1_1.0.13-4_armhf.deb から) libgsm1:armhf を展開しています...
以前に未選択のパッケージ libmp3lame0:armhf を選択しています。
(.../libmp3lame0_3.99.5+repack1-3_armhf.deb から) libmp3lame0:armhf を展開しています...
以前に未選択のパッケージ libschroedinger-1.0-0:armhf を選択しています。
(.../libschroedinger-1.0-0_1.0.11-2_armhf.deb から) libschroedinger-1.0-0:armhf を展開しています...
以前に未選択のパッケージ libspeex1:armhf を選択しています。
(.../libspeex1_1.2~rc1-7_armhf.deb から) libspeex1:armhf を展開しています...
以前に未選択のパッケージ libtheora0:armhf を選択しています。
(.../libtheora0_1.1.1+dfsg.1-3.1_armhf.deb から) libtheora0:armhf を展開しています...
以前に未選択のパッケージ libva1:armhf を選択しています。
(.../libva1_1.0.15-4_armhf.deb から) libva1:armhf を展開しています...
以前に未選択のパッケージ libvpx1:armhf を選択しています。
(.../libvpx1_1.1.0-1+rpi1_armhf.deb から) libvpx1:armhf を展開しています...
以前に未選択のパッケージ libx264-123:armhf を選択しています。
(.../libx264-123_2%3a0.123.2189+git35cf912-1+rpi1_armhf.deb から) libx264-123:armhf を展開しています...
以前に未選択のパッケージ libxvidcore4:armhf を選択しています。
(.../libxvidcore4_2%3a1.3.2-9_armhf.deb から) libxvidcore4:armhf を展開しています...
以前に未選択のパッケージ libavcodec53:armhf を選択しています。
(.../libavcodec53_6%3a0.8.13-1+rpi1_armhf.deb から) libavcodec53:armhf を展開しています...
以前に未選択のパッケージ libavformat53:armhf を選択しています。
(.../libavformat53_6%3a0.8.13-1+rpi1_armhf.deb から) libavformat53:armhf を展開しています...
以前に未選択のパッケージ libraw1394-11:armhf を選択しています。
(.../libraw1394-11_2.0.9-1_armhf.deb から) libraw1394-11:armhf を展開しています...
以前に未選択のパッケージ libdc1394-22:armhf を選択しています。
(.../libdc1394-22_2.2.0-2_armhf.deb から) libdc1394-22:armhf を展開しています...
以前に未選択のパッケージ libjack-jackd2-0:armhf を選択しています。
(.../libjack-jackd2-0_1.9.8~dfsg.4+20120529git007cdc37-5+rpi2_armhf.deb から) libjack-jackd2-0:armhf を展開しています...
以前に未選択のパッケージ libavdevice53:armhf を選択しています。
(.../libavdevice53_6%3a0.8.13-1+rpi1_armhf.deb から) libavdevice53:armhf を展開しています...
以前に未選択のパッケージ libopencv-core2.3 を選択しています。
(.../libopencv-core2.3_2.3.1-11_armhf.deb から) libopencv-core2.3 を展開しています...
以前に未選択のパッケージ libopencv-imgproc2.3 を選択しています。
(.../libopencv-imgproc2.3_2.3.1-11_armhf.deb から) libopencv-imgproc2.3 を展開しています...
以前に未選択のパッケージ libswscale2:armhf を選択しています。
(.../libswscale2_6%3a0.8.13-1+rpi1_armhf.deb から) libswscale2:armhf を展開しています...
以前に未選択のパッケージ libavfilter2:armhf を選択しています。
(.../libavfilter2_6%3a0.8.13-1+rpi1_armhf.deb から) libavfilter2:armhf を展開しています...
以前に未選択のパッケージ libpostproc52:armhf を選択しています。
(.../libpostproc52_6%3a0.8.13-1+rpi1_armhf.deb から) libpostproc52:armhf を展開しています...
以前に未選択のパッケージ libav-tools を選択しています。
(.../libav-tools_6%3a0.8.13-1+rpi1_armhf.deb から) libav-tools を展開しています...
以前に未選択のパッケージ libpq5 を選択しています。
(.../libpq5_9.1.13-0wheezy1_armhf.deb から) libpq5 を展開しています...
以前に未選択のパッケージ motion を選択しています。
(.../motion_3.2.12-3.4_armhf.deb から) motion を展開しています...
以前に未選択のパッケージ ffmpeg を選択しています。
(.../ffmpeg_6%3a0.8.13-1+rpi1_armhf.deb から) ffmpeg を展開しています...
man-db のトリガを処理しています ...
libavutil51:armhf (6:0.8.13-1+rpi1) を設定しています ...
libdirac-encoder0:armhf (1.0.2-6) を設定しています ...
libgsm1:armhf (1.0.13-4) を設定しています ...
libmp3lame0:armhf (3.99.5+repack1-3) を設定しています ...
libschroedinger-1.0-0:armhf (1.0.11-2) を設定しています ...
libspeex1:armhf (1.2~rc1-7) を設定しています ...
libtheora0:armhf (1.1.1+dfsg.1-3.1) を設定しています ...
libva1:armhf (1.0.15-4) を設定しています ...
libvpx1:armhf (1.1.0-1+rpi1) を設定しています ...
libx264-123:armhf (2:0.123.2189+git35cf912-1+rpi1) を設定しています ...
libxvidcore4:armhf (2:1.3.2-9) を設定しています ...
libavcodec53:armhf (6:0.8.13-1+rpi1) を設定しています ...
libavformat53:armhf (6:0.8.13-1+rpi1) を設定しています ...
libraw1394-11:armhf (2.0.9-1) を設定しています ...
Creating device node /dev/raw1394... /run/udev or .udevdb or .udev presence implies active udev.  Aborting MAKEDEV invocation.
done.
libdc1394-22:armhf (2.2.0-2) を設定しています ...
libjack-jackd2-0:armhf (1.9.8~dfsg.4+20120529git007cdc37-5+rpi2) を設定しています ...
libavdevice53:armhf (6:0.8.13-1+rpi1) を設定しています ...
libopencv-core2.3 (2.3.1-11) を設定しています ...
libopencv-imgproc2.3 (2.3.1-11) を設定しています ...
libswscale2:armhf (6:0.8.13-1+rpi1) を設定しています ...
libavfilter2:armhf (6:0.8.13-1+rpi1) を設定しています ...
libpostproc52:armhf (6:0.8.13-1+rpi1) を設定しています ...
libav-tools (6:0.8.13-1+rpi1) を設定しています ...
libpq5 (9.1.13-0wheezy1) を設定しています ...
motion (3.2.12-3.4) を設定しています ...
グループ `motion' (グループ ID 114) を追加しています...
完了。
システムユーザ `motion' (UID 109) を追加しています...
新しいユーザ `motion' (UID 109) をグループ `motion' に追加しています...
ホームディレクトリ `/home/motion' は作成しません。
ユーザ `motion' をグループ `video' に追加しています...
ユーザ motion をグループ video に追加
完了。
[warn] Not starting motion daemon, disabled via /etc/default/motion ... (warning).

ffmpeg (6:0.8.13-1+rpi1) を設定しています ...

motion.confの設定
pi@raspberrypi /tmp/motion $ sudo diff /etc/motion/motion.conf /etc/motion/motion.conf.org 
11c11
< daemon on
---
> daemon off
153c153
< threshold 3000
---
> threshold 1500
247c247
< ffmpeg_cap_new off
---
> ffmpeg_cap_new on
413c413
< webcam_localhost off
---
> webcam_localhost on

早速実行して確認しようとしたら。。灰色で写ってない!!!
原因はraspberrypiの設定でカメラを有効にしないといけないみたいでした。
参考サイト
http://katsumi-and-pi.blogspot.jp/2014/05/raspberry-pi.html
























いざ、実行!!























無事映りました〜^^


2014年8月17日日曜日

Arduinoと戯れる 4 - Cdsセル -

Cdsセル

参考サイト
http://strange-storage-5084.blogspot.jp/2012/03/arduinocds.html

Cdsを使って明るさを取得してみる。
配線


















スケッチ
























参考サイトと比べて室内の明るさが違うので、閾値を変更。
手をかざしたりして、明るさを変更しLEDの点灯/消灯を行う。

Arduinoと戯れる 3 - スイッチのIO -

デジタルIO

1. タクトスイッチ











いつも迷うのでメモ。
赤が常に接続、青が押されて接続。。。

実際にテストしてみる。


















DO2チャンネルをpinMode(2, INPUT_PULLUP)として宣言。
スイッチを押すとLEDが点灯するようにスケッチを作成。
























スイッチを押すとLEDが点灯することを確認^^




















今度はスイッチを押す度にLED表示/非表示を切り替える様にスケッチを作成。

























チャタリング対策していない為、スイッチが不安定^^;
チャタリング対策を入れたスケッチを作成。
























ちゃんと切り替わっている様子。

Cent OSでOpenGL 8 - 光源 -

光源の設定

いつもの参考URL
http://seesaawiki.jp/w/mikk_ni3_92/d/%B8%F7%B8%BB%A4%CE%C0%DF%C4%EA

glLight関数を使用して光源を設定する。

・GL_POSITION
 同次座標系で設定するらしい。
    例) (x:45, y:30, z:90, w:3) => (45/3, 30/3, 90/3, 3/3) => (15, 10, 30, 1)と等しい。
          もしw=0の場合無限遠方となる

・設定の順番
    1. 位置などの数値データを用意
    2. 光源との関連づけ
    3. 有効化

サンプル
#include <GL/gl.h>
#include <GL/glut.h>

const GLfloat lightPos[] = { 3 , 0 , -2 , 0 };
const GLfloat lightCol[] = { 1 , 0 , 0 , 1 };

void disp( void ) {
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 glBegin(GL_POLYGON);
  glNormal3f(3 , 0 , -2);
  glVertex3f(0 , -0.9 , -2);
  glVertex3f(3 , -0.9 , -7);
  glVertex3f(0 , 0.9 , -2);

  glNormal3f(-3 , 0 , -2);
  glVertex3f(0 , -0.9 , -2);
  glVertex3f(-3 , -0.9 , -7);
  glVertex3f(0 , 0.9 , -2);
 glEnd();

 glFlush();
}

int main(int argc , char ** argv) {
 glutInit(&argc , argv);
 glutInitWindowPosition(100 , 50);
 glutInitWindowSize(400 , 300);
 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);

 glutCreateWindow("Kitty on your lap");
 glutDisplayFunc(disp);

 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 glFrustum(1 , -1 , -1 , 1 , 2 , 10);

 glLightfv(GL_LIGHT0 , GL_POSITION , lightPos);
 glLightfv(GL_LIGHT0 , GL_DIFFUSE , lightCol);
 glEnable(GL_LIGHTING);
 glEnable(GL_LIGHT0);
 glEnable(GL_DEPTH_TEST);

 glutMainLoop();
 return 0;
}


実行結果


















OpenGL の照光モデルは、光を放射環境拡散鏡面、に分解し
各要素を独立した計算によって処理し、最終的に統合するという方法を採用しています
具体的な内部実装は、この場で知る必要はないでしょう
独自の照光モデルを採用したい時などに、ソフトウェアで独自にこうした処理を行います

参考URL
http://wisdom.sakura.ne.jp/system/opengl/gl16.html

2014年8月13日水曜日

Atomまとめ 1 - インストール & 設定 -

MacでのエディッタをAtomに決定!!

Macで使用するエディッタを点々と変えて使ってきましたが、イマイチこれという
エディッタに出会いませんでしたが、Atomは何か良さそう。

Atom







インストール後に行った設定まとめ。

1. テーマ変更
    UI ThemeをSeti-uiにSyntax ThemeをVisual Studio Darkに変更

↓こんな感じ



















2. Packageの追加
    Color-pickerautocomplete+Open terminal hereを追加

キーボードショートカットまとめ

よく使いそうなやつ。
Markdown Preview                        : control + shift + m
Developer Tool                               : option + command + i
行の先頭                                        : command + ←
行の末尾                                        : command + →
パネルの分割                                : command + k の後に上下左右キー
パネルの移動                               : command + k の後に command + 上下左右キー

とりあえず、こんな感じ。

C++と戯れる 3 - Policy -

今回はポリシーに関して

ポリシーとポリシークラス
・・・クラス内で使用する処理をコンパイル時に選択可能にする手法。
          GoFのStrategyデザインパターンと比較される。

例)ポリシーに基づいて設計されたログ出力


















↓実行結果





次は静的メンバ関数ではなく、非静的メンバ関数によるポリシークラス












↓実行結果





今度は継承によるポリシー












↓実行結果





とても便利なものだ、
今後色々活用しよう、いや完璧するな^^;。

2014年8月11日月曜日

Ruby On Rails アプリケーション作成 7 - カレンダーカスタマイズ -

久しぶりにRailsを触ってみる。

久しぶりなので、リハビリを済ました後FullCalendarを少しカスタム。
公式ドキュメント
http://arshaw.com/fullcalendar/

$(document).ready ->
  $('#calendar').fullCalendar
    header:
      right: 'agendaDay agendaWeek month today prev next'
    firstDay: 1
    weekends: true
    weekMode: 'fixed'
    weekNumbers: false
    timeFormat: 'H(:mm)'
    titleFormat:
      month: 'yyyy年 M月'
      week: 'M月d日'
      day: "d日'('ddd')'"
    monthNames: [
      '1月'
      '2月'
      '3月'
      '4月'
      '5月'
      '6月'
      '7月'
      '8月'
      '9月'
      '10月'
      '11月'
      '12月'
    ]
    dayNamesShort: [
      '日'
      '月'
      '火'
      '水'
      '木'
      '金'
      '土'
    ]
    buttonText:
      today: '今日'
      month: '月'
      week: '週'
      day: '日'
    events: 'http://www.google.com/calendar/feeds/ja.japanese%23holiday%40group.v.calendar.google.com/public/full/'
    dayClick: (date, allDay, jsEvent, view) ->
      alert "dayclick #{date}"
      alert "Coordinates: #{jsEvent.pageX}, #{jsEvent.pageY}"
      alert "Current view #{view.name}"
      location.href = "show?param1=hoge&param2=fuga”

結局、google calendarを引っ張ってきて祝日を表示させるのは上手くいかなかったorz
注目はlocation.href = "show?param1=hoge&param2=fuga”

カレンダーの日付箇所をクリックした時に日付をパラメータにして
コントローラーへリダイレクトさせる。

※コントローラ側実装
  def show
    render :text => "param1 = #{params[:param1]}, param2 = #{params[:param2]}"
  end

↓表示結果








参考URL
http://little-braver.com/156/


2014年8月10日日曜日

GAEと戯れる 9 - セッション -

セッションの利用

各ユーザー毎にクッキーよりも複雑で大きなデータを保存しておきたい場合セッションを使用する。
セッションとは、サーバーとクライアント間で連続した接続を維持し続ける機能です。

セッションは「HttpSession」クラスを用いる。
最初から「session」という暗黙オブジェクトが用意されている。

1. 値の設定や取得

・値を保管する
session.setAttribute( 名前 , 値 );

・値を取得する
Object 変数 = session.getAttribute( 名前 );

または。。。

・値を保管する
session.putValue( 名前 , 値 );

・値を取得する
Object 変数 = session.getValue( 名前 );


2. セッションの情報やセッションの終了

・セッションを開始した時刻を得る
long 変数 = session.getCreationTime();

・最終アクセス時間を得る
long 変数 = session.getLastAccessedTime();

・セッションを無効にする
session.invalidate();

※GAEでのセッション利用

GAEでセッションを利用するには設定が必要らしい。
「appengine-web.xml」の<appengine-web-app>タグ内に
<sessions-enabled>true</sessions-enabled>
を追記する必要がある。

実際に実装
















↓実行結果














何回か入力して送信してみる

















初期化してみる







































うまくいっているご様子^^

2014年8月9日土曜日

Arduinoと戯れる 2 - プルアップ抵抗 -

プルアップ抵抗について

デジタル入力の場合にHIGHとLOWの中間電圧の状態では誤作動を起こす。
Arduinoではこの対策として、「pinMode」関数にプルアップ抵抗を取り入れ誤作動を防止している。
digitalRead関数の戻り値は「pinMode」がINPUT又は未設定の場合にはHIGH(約3.0V以上)か
LOW(約2.0V以下)を返す。しかし思った値にならない場合がある。


プルアップ抵抗の確認テスト
D8番ピンとGNDを接続
























ケーブルを抜き差ししても0と1が一定の値にならない。














pinModeの第二引数をINPUTからINPUT_PULLUPに変更してみる。














今度はGNDにつなげたら0が、切り離した場合1が表示しています。

参考URL

乾電池の電圧測定

analogRead関数を使って乾電池の電圧を測定。
※測定できる乾電池は5Vまで。










































↓ちゃんと読み込まれているもよう。。。


Blue-rayドライブ購入

Blue-rayドライブがamazonでお安くなっていたので、つい購入^^;


本体の背面にUSBを格納できるのがよさげ。

AWSにお世話になる 5 - LDAP -

LDAP(認証)サーバーの導入と設定


LDAPについて・・・
LDAP(Lightweight Directory Access Protocol)はTCP/IP上で稼働するX-500をベースとするディレクトリサービス。
ディレクトリは「エントリ」という単位で構成、DIT(Directory Information Tree)と呼ばれる階層を持つ。各エントリは個別識別子であるDN(Distinguished Name)と属性、オブジェクトクラスを持ち、LDIF(LDAP Data Interchange Format)と呼ばれるテキスト形式で記述。



















1. OpenLDAPの導入
サーバー名とドメイン名が正しく設定されているか確認。
ubuntu@chopper:~$ cat /etc/hostname
chopper
ubuntu@chopper:~$ cat /etc/hosts

127.0.0.1 chopper.tony.com chopper

※書籍ではドメイン名がお名前.comで取得したドメイン名だったので
  もしかしたらうまく導入できないかも。。。

OpenLDAPインストール
ubuntu@chopper:~$ sudo apt-get install -y slapd ldap-utils db5.1-util
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libdb5.1 libltdl7 libodbc1 libperl5.18 libslp1
Suggested packages:
  libmyodbc odbc-postgresql tdsodbc unixodbc-bin slpd openslp-doc
The following NEW packages will be installed:
  db5.1-util ldap-utils libdb5.1 libltdl7 libodbc1 libperl5.18 libslp1 slapd
0 upgraded, 8 newly installed, 0 to remove and 4 not upgraded.
Need to get 2,343 kB of archives.
After this operation, 7,904 kB of additional disk space will be used.
Get:1 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ trusty/universe libdb5.1 amd64 5.1.29-7ubuntu1 [580 kB]
Get:2 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ trusty/main libltdl7 amd64 2.4.2-1.7ubuntu1 [35.0 kB]
Get:3 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ trusty/main libodbc1 amd64 2.2.14p2-5ubuntu5 [175 kB]
Get:4 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ trusty/main libperl5.18 amd64 5.18.2-2ubuntu1 [1,322 B]
Get:5 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ trusty/main libslp1 amd64 1.2.1-9 [45.1 kB]
Get:6 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ trusty/main slapd amd64 2.4.31-1+nmu2ubuntu8 [1,317 kB]
Get:7 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ trusty/universe db5.1-util amd64 5.1.29-7ubuntu1 [66.6 kB]
Get:8 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ trusty/main ldap-utils amd64 2.4.31-1+nmu2ubuntu8 [123 kB]
Fetched 2,343 kB in 0s (3,414 kB/s)
Preconfiguring packages ...
Selecting previously unselected package libdb5.1:amd64.
(Reading database ... 51210 files and directories currently installed.)
Preparing to unpack .../libdb5.1_5.1.29-7ubuntu1_amd64.deb ...
Unpacking libdb5.1:amd64 (5.1.29-7ubuntu1) ...
Selecting previously unselected package libltdl7:amd64.
Preparing to unpack .../libltdl7_2.4.2-1.7ubuntu1_amd64.deb ...
Unpacking libltdl7:amd64 (2.4.2-1.7ubuntu1) ...
Selecting previously unselected package libodbc1:amd64.
Preparing to unpack .../libodbc1_2.2.14p2-5ubuntu5_amd64.deb ...
Unpacking libodbc1:amd64 (2.2.14p2-5ubuntu5) ...
Selecting previously unselected package libperl5.18.
Preparing to unpack .../libperl5.18_5.18.2-2ubuntu1_amd64.deb ...
Unpacking libperl5.18 (5.18.2-2ubuntu1) ...
Selecting previously unselected package libslp1.
Preparing to unpack .../libslp1_1.2.1-9_amd64.deb ...
Unpacking libslp1 (1.2.1-9) ...
Selecting previously unselected package slapd.
Preparing to unpack .../slapd_2.4.31-1+nmu2ubuntu8_amd64.deb ...
Unpacking slapd (2.4.31-1+nmu2ubuntu8) ...
Selecting previously unselected package db5.1-util.
Preparing to unpack .../db5.1-util_5.1.29-7ubuntu1_amd64.deb ...
Unpacking db5.1-util (5.1.29-7ubuntu1) ...
Selecting previously unselected package ldap-utils.
Preparing to unpack .../ldap-utils_2.4.31-1+nmu2ubuntu8_amd64.deb ...
Unpacking ldap-utils (2.4.31-1+nmu2ubuntu8) ...
Processing triggers for ureadahead (0.100.0-16) ...
Processing triggers for ufw (0.34~rc-0ubuntu2) ...
Processing triggers for man-db (2.6.7.1-1) ...
Setting up libdb5.1:amd64 (5.1.29-7ubuntu1) ...
Setting up libltdl7:amd64 (2.4.2-1.7ubuntu1) ...
Setting up libodbc1:amd64 (2.2.14p2-5ubuntu5) ...
Setting up libperl5.18 (5.18.2-2ubuntu1) ...
Setting up libslp1 (1.2.1-9) ...
Setting up slapd (2.4.31-1+nmu2ubuntu8) ...
  Creating new user openldap... done.
  Creating initial configuration... done.
  Creating LDAP directory... done.
 * Starting OpenLDAP slapd                                                         [ OK ] 
Setting up db5.1-util (5.1.29-7ubuntu1) ...
Setting up ldap-utils (2.4.31-1+nmu2ubuntu8) ...
Processing triggers for libc-bin (2.19-0ubuntu6) ...
Processing triggers for ureadahead (0.100.0-16) ...

Processing triggers for ufw (0.34~rc-0ubuntu2) ...

途中LDAPの管理者パスワードを設定する
























2. OpenLDAPの基本構成と基本コマンド
UbuntuのOpenLDAPでは「/etc/ldap/slapd.conf」設定ファイルによる管理は行いません。
LDAP管理の為の独立したDITがあり、LDAPサーバー(slapdデーモン)を再起動しなくても動的に構成を変更できる仕組みになっています。これらの手法は「slapd-configメソッド」や「RTC(Real Time Configuration)」メソッド、「cn=configメソッド」と呼ばれています。

具体的にはLDAPの構成ファイルが「/etc/ldap/slapd.d」のディレクトリ下で、テキスト形式のLDIFファイル(拡張子「.ldif」)で管理されています。

OpenLDAPでは、2つのDITがあり、cn=config DITとは別にドメインデータDITがあります。それぞれで使用するコマンドオプション、LDAPプロトコル、実行者権限が異なる。

・OpenLDAPの基本コマンド
    ldapsearch      -> LDAPディレクトリからエントリを検索
    ldapadd           -> LDAPディレクトリへエントリを追加
    ldapmodify     -> LDAPディレクトリのエントリを更新
    ldapdelete       -> LDAPディレクトリからエントリを削除
    slapcat            -> LDAPディレクトリからLDIFファイルをエクスポートする

例)cn=configからdnを検索
ubuntu@chopper:~$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn
dn: cn=config

dn: cn=module{0},cn=config

dn: cn=schema,cn=config

dn: cn={0}core,cn=schema,cn=config

dn: cn={1}cosine,cn=schema,cn=config

dn: cn={2}nis,cn=schema,cn=config

dn: cn={3}inetorgperson,cn=schema,cn=config

dn: olcBackend={0}hdb,cn=config

dn: olcDatabase={-1}frontend,cn=config

dn: olcDatabase={0}config,cn=config


dn: olcDatabase={1}hdb,cn=config

肝心のドメインがうまくできているかですが。。。
ubuntu@chopper:~$ ldapsearch -x -LLL -b dc=chopper,dc=tony,dc=com
No such object (32)

Matched DN: dc=tony,dc=com

ダメごたーでしたorz
という事で、LDAPは一時中断で^^;