2012年12月2日日曜日

さくらVPS立ち上げのためにやったこと

さくらインターネットさんの高専生VPS無料キャンペーン の恩恵でVPSを借りることができました。さくらさんありがとう!!
はじめてもつサーバーにわくわくしっぱなしですが、セキュリティの設定が甘くて簡単に乗っ取られSPAMメール送信拠点になってしまったら笑えません。

のでドットインストールさんのさくらVPSの基礎という講座を参考に各種設定を行いました。
ドットインストールのサイトでは一回3分程度のYoutube動画で21回に渡り解説されているさくらVPSの基礎ですが、ここではさらっと確認するためにやったことを文字にまとめてみました。
誰かの参考になったら良いと言うよりは自分自身の備忘録ですね。
ちなみにローカルはMacOSX10.6.8です。
※赤文字一字下げはvimで変更する箇所

1.rootのパスワードを変更

2.パッケージのアップデート
 → yum update

3.日本語化
 → vim /etc/sysconfig/i18n
  LANG = "ja_JP.UTF-8"に変更

4.作業用ユーザの作成
 → useradd userA
  passwd *****
  usermod -G wheel userA //sudo権限を移譲
  visudo //wheelグループの有効化
  wheelを検索して先頭の#を削除しコメントを解除

5.公開鍵認証の設定
 →mkdir ~/.ssh
  chmod 700 ~/.ssh
  ssh-keygen -t rsa -v //ローカルで
  鍵の名前をid_rsa_userA、id_rsa_userA.pubに変更
  chmod 600 .ssh/id_rsa_userA.pub //公開鍵のパーミッション変更
  scp ~/.ssh/id_rsa_userA.pub userA@IP.ADD.RE.SS:~/.ssh/authorized_keys
  ssh -i ~/.ssh/id_rsa_userA userA@IP.ADD.RE.SS //公開鍵を用いたssh

6.ポート番号、パスワードログイン、rootログインの禁止
 → sudo -s //root権限取得
  cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org //バックアップ
  vim /etc/ssh/sshd_config
   #Port 22 → Port ***** //は1024〜65534の任意の数字
   Port 5555 //仮設定
   PasswordAutentication yes → Passwordauthentication no
   #PermitRootLogin yes → PermitRootLogin no
  service sshd restart
  ssh -p 5555 userA@IP.ADD.RE.SS

7.ファイアウォールの設定
 → vim /etc/sysconfig/iptables
*filter
:INPUT    DROP    [0:0]
:FORWARD  DROP    [0:0]
:OUTPUT   ACCEPT  [0:0]
:SERVICES -       [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4  -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -j SERVICES
-A INPUT -p udp --sport 53 -j ACCEPT
-A INPUT -p udp --sport 123 --dport 123 -j ACCEPT
-A SERVICES -p tcp --dport YOUR_PORT_NUMBER -j ACCEPT
-A SERVICES -p tcp --dport 80 -j ACCEPT
-A SERVICES -p tcp --dport 443 -j ACCEPT
COMMIT 
service iptables restart
  iptables -L //設定の確認

8.Webサーバーのインストール
 → yum install httpd
 chkconfig httpd on //自動起動
 cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
 vim /etc/httpd/conf/httpd.conf
  ServerTokens Prod
  ServerSignature Off
  Options -Indexes FollowSymLinks
 service httpd configtest //設定のテスト
 service httpd start

9.PHPのインストール
 → yum install php php-devel php-mysql php-mbstring php-gd
 php -v //バージョンチェック
 cp /etc/php.ini /etc/php.ini.org
 vim /etc/php.ini
  error_log = /var/log/php.log //エラーログの場所
  mbstring.language = Japanese //文字を日本語に設定
  mbstring.internal_encoding = UTF-8 //エンコーディングをUTF-8に
  mbstring.http_input = auto
  mbstring.detect_order = auto
  expose_php = Off
  date.timezone = Asia/Tokyo //タイムゾーンを日本に
 service httpd restart

10.MySQLのインストール
 → yum install mysql-server
  cp /etc/my.cnf /etc/my.cnf.org
  vim /etc/my.cnf
  service mysqld start
  mysql_secure_installation
  chkconfig mysqld on
  mysql -u root -p

これでLAMP(Linux,Apache,MySQL,PHP)の環境構築完了です。
このあとRuby On RailsとmongoDBのインストールも行いましたが省略します。

個人的に引っかかったポイントとしてパスワードログインの禁止後に新規ユーザを作成した際のsshログインの仕方について記述します。

1.新規ユーザーの追加
 → useradd userB
  passwd *****

2.新規ユーザの鍵ペアの作成
 → 省略しますがid_rsa_userB、id_rsa_userB.pubという鍵を作成

3.新規ユーザのホームに.sshディレクトリの作成
 → userA $ → sudo -s → root # //ルート権限の委譲
  mkdir /home/userB/.ssh/
  chmod 700 /home/userB/.ssh/
  chown userB /home/userB/.ssh/
  chgrp userB /home/userB/.ssh/
  exit
  logout

4.公開鍵の移動
 → scp -P 5555 -i id_rsa_userA  id_rsa_userB.pub userA@IP.ADD.LE.SS:~/.ssh/authorized_userB
  ssh -i ~/.ssh/id_rsa_userA userA@IP.ADD.RE.SS
  sudo -s
  cp /home/userA/.ssh/authorized_userB /home/userB/.ssh/aurhorized_key
  chmod 600 /home/userB/.ssh/aurhorized_key
  chown userB /home/userB/.ssh/aurhorized_key
  chgrp userB /home/userB/.ssh/aurhorized_key
  exit
  logout

5.userBで公開鍵認証
 → ssh -p 5555 -i ~/.ssh/id_rsa_userB userB@IP.ADD.LE.SS

6.(Mac限定?)sshを簡単にするconfigの設定
 → ローカルの~/.sshディレクトリの中のconfigを設定する
Host userA
    HostName IP.ADD.LE.SS
    Port 5555
    IdentityFile ~/.ssh/id_rsa_userA
    User    userA


Host userB
    HostName IP.ADD.LE.SS
    Port 5555
    IdentityFile ~/.ssh/id_rsa_userB
    User    userB

この様にすればssh userAとすればuserAにssh userBとすればuserBでログインすることが可能です。

簡単に言うと.sshフォルダとauthorized_keysの所有者がuserBになっていれば大丈夫です。ここがわからなくてかなりの時間を消費しました。

2012年11月11日日曜日

WindowsのコマンドプロンプトでC言語をコンパイルする

UNIXじゃないと端末でコンパイルできない~!
VisualStudioだといちいちプロジェクト作るからめんどい~!
と、お嘆きのみなさん。
僕もそうでした。今日までは。(他に居なかったらどうしよう…)

実は、というか、当たり前なんですけど
Windowsでもコマンド・プロンプトからC/C++のコンパイラが使えます。

すべてのプログラムからVisualStudioフォルダを選択
その下のVisualStudioToolsを選択
その中にMicrosoftのCコンパイラが使用出来るコマンド・プロンプトが入っています。

コンパイルのコマンドはCLです。Compile & Linkの略だそうです。
VisualStudioのコンパイラと同じ機能を持っています。(たぶん)

ちょっとしたC言語の課題なんかをサクッとコンパイルしたい時には便利です。


2012年10月12日金曜日

PHPのお勉強

PHPの開発環境を構築してから、ずっとほったらかしにしていて昨日今日で少し学習しました。
昨日はPHPとはなにかから始まり、ずっと基礎を勉強してファイル入出力ができるようになりました。約90分かかりました。

C言語の基礎がわかっていれば、基礎の勉強はあまりおもしろくないかもしれません。
PHPの基礎の勉強を初めて新しく覚えたのは三項演算子とforeach文の書き方、連想配列くらいです。

そこで、今日はファイル入出力を使って外部ファイルに簡易DBを構築できないかということで検討してみました。

まずfopen/fwrite/freadを使って、csvファイルに書き込んだり、読み込んだりしました。

例えばcsvの中身が
1,2,3,_
1,2,3,_
となっていた時(アンダーバーは改行です)
freadを使うとString型で1,2,3,_1,2,3,_という読み込み結果になります。
これをexplode(",",$foo)を使ってカンマごとに配列化することができますが、その後の扱いが大変。

そこでPHPで用意されているcsv用の関数を使います。いくつかの関数が用意されていますが、今回はfgetcsv関数を使います。

以下今回使ったソースです。
<?php
 $testFile = "test.csv";
 $contents[]= "";
 
 if(!$fp = fopen($testFile,"r")){
  echo "cannot open ";
  exit;
 }
 $row = sizeof(file("$testFile"));//行数の取得
 for($i=1; $i <= $row; $i++){
  $contents[$i] = fgetcsv($fp,",");
  echo $contents[$i][0],",",$contents[$i][1],",",$contents[$i][2],"</br>";
 }
 fclose($fp);

これで、csvファイルの中身を二次元配列に読み込むことができます。
しかしながら、日本語(マルチバイト文字)を文字化けせずに表示させるためには、
ロケールを設定しないといけないようです。

それにしてもブログにソース載せるときに綺麗にできるような何かは無いのか…
ブログ巡回すると大抵の人がつかっているアレを導入したい。

追記:
SyntaxHighlighterというのを使うと綺麗にできました。

2012年9月25日火曜日

データベース管理のためにPHP+MySQLを勉強してみる

世界を盗み聞きするWEBサービスの構築を企てているというのは先日お話したとおりです。

WEBサービスを構築する際には大量のデータを高速な検索したり、複数人が同時に検索を実行したり、情報を頻繁に追加・更新・削除したりする場合が想定されます。

そういった場合に威力を発揮するのがデータベース管理システムです。

今回は、最も一般的かつ無料で使用でき、インターネット上にも参考にできるドキュメントが十分に揃っているという理由からMySQLを使用することにしました。
また、MySQLを制御するためにサーバーサイドスプリクトであるPHPを利用します。

それでは早速開発環境を構築していきます。

今回はWindows7,HomePremium,64bitコンピュータで開発を行います。
WindowsではPHP+MySQLを動かすプラットフォームとWebサーバをあわせてWAMPと呼ばれる開発環境を構築します。これはWindows + Apache + MySQL + PHP の頭文字を取っています。
これがLinuxを利用するものならばLAMPとなりMacintoshを利用するものならばMAMPとなります。

1.まずはWebサーバソフトウェアのApacheを導入します。
 http://www.apachelounge.com/download/
ここから、httpd-2.4.3-win32-ssl_0.9.8.zipをダウンロードします。
これが現時点で最新版のApacheになります。

2.Apacheをインストールします。
ダウンロードしたzipファイルを解凍し、取り出されるApache24をそっくりそのままC:直下にコピーします。これでインストールは終了。

3.ここからは細々とした設定になります
C:/Apache24/conf/httpd.conf をテキストエディタで開き、変更します。
ただし、弄る前にはバックアップをとっておいた方がいいです。
私はテキストエディタとしてEmEdittor Freeを使用しています。
http://jp.emeditor.com/modules/download2/rewrite/tc_5.html

以下変更すべき点
58行目 Listen 80
を Listen 81
…これは使用するポートを指定する部分です。私の場合ポート80はSkypeと競合し使用できなかったためポート81を使用しています。

213行目 #ServerName www.example.com:80
を ServerName localhost:81

271行目  DirectoryIndex index.html
を DirectoryIndex index.html index.php

これで上書き保存します。

4.Apacheがうまく動くかどうかテスト
管理者モードのコマンドプロンプトを使ってApacheを起動します。
作業ディレクトリを c\:Apache24\binに合わせてhttpdとコマンドを入力しEnter


















このように何も表示されなければ正常に動いています。
終了するためにはCtrl+Cを押します。

次にサービスとしてApacheを登録します。
同じようにhttpd -k installと入力します。
何もErrorが出ず、一度成功したらこのコマンドは入力する必要がありません。
次にhttpd -k startを入力しましょう。
これで、Apacheが開始します。
終了させる際のコマンドはhttpd -k stop,
また、再起動させる際のコマンドはhttpd -k restartとなっています。

Apacheをstartさせた状態で、WEBブラウザに
http://localhost:81/
を入力して 画面に

It Works!

と表示されていればインストール及び設定成功です。

5.PHPのインストールに入ります。
http://windows.php.net/downloads/releases/php-5.4.7-Win32-VC9-x86.zip
ここから最新版のphp5.4.7をダウンロードすることができます。
解凍後、そのままフォルダ名をphpへと変更し、Apacheと同じくC\:直下に置きます。
その後、
http://www.apachelounge.com/download/win32/modules-2.4/php5apache2_4.dll-php-5.4-win32.zip
をダウンロードし、中身のphp5apache2_4.dllをc\:phpのなかに入れます。
そしてphp.ini-development というファイルのファイル名をphp.ini に変更します。

6.ここでApacheのhttpd.conf をもう一度編集します。
httpd.conf の最終行に

PHPIniDir "c:/php"
LoadModule php5_module "c:/php/php5apache2_4.dll"
AddType application/x-httpd-php .php
を付け加えます。ここで上書き保存

7.PHPがうまく動くかどうかテスト
ApacheのホームディレクトリになっているC:\Apache24\htdocs 内にtest.phpを作成します。
そのファイル内には
<?php phpinfo(); ?>
とだけ記述して置いてください。また、文字エンコーディングはUTF-8で保存してください。

httpd.confの変更を反映させるためにApacheを再起動します。
再起動のコマンドはhttpd -k restart です。

Webブラウザに
http://localhost:81/test.php
と入力し

このような画面が表示されればPHPのインストールに成功しています。

ちょっとつかれてしまったので、MySQLのインストールはまた後日にさせてください。
m(__)m




2012年8月20日月曜日

世界を盗み聞きするWebサイトの開発記(1)

突然ですが、私は海外旅行をしたことがありません。
お金と勇気がないからです(笑)

だけれども、写真をみて東南アジアの雑踏は、タイムズ・スクエアは、イギリスのライブハウスはどんな雰囲気なのかなと思いを馳せること好きです。タダだし、家にいてもできますから。

私が家に居ながらにして本物の海外旅行をするには、異国を疑似体験するには味覚、嗅覚、視覚、触覚、聴覚のすべてを刺激するのが一番でしょう。
 
時間や場所を切り取るものとして最も普及しているのは写真です。いま、私がこうして布団にねころんでブログを書いている間にも私の友人たちは海外へインターンシップや、旅行などで訪れ、Facebookに写真をこれでもかとアップロードしています。土産話のひとつふたつもしてくれます。

そして、今普及しているもので最も情報量が多いのはビデオではないでしょうか。が、私は手振れでガクガクのホームビデオを見ても海外旅行をした気にはならないと思うのです。

誰もが気軽に、簡単に、その場の雰囲気を切り取ることが出来るのはズバリ音だと思います。 写真は光の加減で変わってしまうし、暗いものは気軽には写せない。

例えば、秋の夜に月が綺麗だったとき、手持ちのiPhoneで綺麗に月の写真が取れるでしょうか?自分の目で見たままの感動をその写真でもって他人に伝えられるでしょうか?

鳴いている虫や木の葉を揺らす風の音、 川の流れる音、そういう音を目を閉じて聞いていると自然と風景が想起されることはありませんか?

そんなふうに私は、世界各地のいろいろな場所、例えばクラスルームであったり電車の中であったり、あるいは雑踏の中。そういう場所で現地に住む人が普段聞く環境音を聞くことで異国情緒を感じてみたいと思いました。

そこで、世界中から気軽に環境音を投稿できるWEBサイトを作ってみようと思っています。名前はもう決まっています。”WallHole”世界を盗み聞きする壁の穴。今、誰しもが ネットワークで世界とつながっています。地球の裏側の人がどんな足音で歩いているか気になりませんか?ナイアガラ瀑布はどんな音がするのか気になりませんか?私、気になります!知らないなんて、損じゃありませんか!

2012年8月2日木曜日

ARToolKitをProcessingで使う(2)

第二回はサンプルプログラムを解析します.

では以下がSimpleLiteを見ていきます.

/**
  NyARToolkit for proce55ing/1.0.0
  (c)2008-2011 nyatla
  airmail(at)ebony.plala.or.jp
**/

import processing.video.*;
import jp.nyatla.nyar4psg.*;

Capture cam;
MultiMarker nya;

void setup() {
  size(640,480,P3D);
  colorMode(RGB, 256);
  println(MultiMarker.VERSION);
  cam=new Capture(this,640,480);
  nya=new MultiMarker(this,width,height,"camera_para.dat",NyAR4PsgConfig.CONFIG_PSG);
  nya.addARMarker("patt.hiro",80);
}

void draw()
{
  if (cam.available() !=true) {
      return;
  }
  cam.read();
  nya.detect(cam);
  background(0);
  nya.drawBackground(cam);//frustumを考慮した背景描画
  if((!nya.isExistMarker(0))){
    return;
  }
  nya.beginTransform(0);
  fill(0,0,255);
  translate(0,0,20);
  box(40);
  nya.endTransform();
}

以上がサンプルプログラムです.
一行づつ関数の働きを見ていきます.

setup(),draw()はProcessingの関数です.
draw()内部の処理は,実行中繰り返されます.
setup()は実行時に一度呼び出されます.

プログラムの実行順に解析をしていきます.
まずsetup()内部から見ていきます.
size()関数はProcessing実行時のウインドウの大きさを指定します.
第一引数は横幅のピクセル数,第二引数は縦幅のピクセル数,第三引数は描画モードです.

camはCaptureクラスのインスタンスです.
cam=new Capture(this,640,480)でカメラからの画像取得サイズを決定します.

nyaはNyARToolKitで複数マーカを使用するためのクラスMultimarkerクラスのインスタンスです.
nya=new MultiMarker(this,width,height,"camera_para.dat",NyAR4PsgConfig.CONFIG_PSG)
ここでcamera_para.datはカメラ内部のパラメータを記述したファイルで,dataフォルダ内に存在しています. これは汎用的な値を採用しているため,自分が使用するカメラでキャリブレーションを行い,置き換えることでマーカ位置計測精度等を向上させることができるようになります.
このカメラのキャリブレーション方法については後日書こうとおもいます.

nya.addARMarker("patt.hiro",80)ではマーカのファイルを読み込むためのメソッドです.
patt.hiroはdataフォルダ内に存在します.このファイルを自分が作成したマーカのものに置き換えることで,好きなマーカでNyARToolKitを扱うことができます.

次にDraw()内部です.
最初のif文条件分岐処理でカメラが利用できない場合の処理について記述しています.
cam.availacle()では新しい画像が取得できたかどうか判断します.
この場合,新しい画像が取得できなかった場合にループを中断し,先頭に移動します.

cam.read()では,カメラで撮影した最新の画像を読み込みます.

nya.detect(cam)では画像からマーカを検出し,3次元位置を計算します.
この引数は,PImageクラスのオブジェクトである必要があります.

ここではcamを入れていますが,このクラスで扱う画像はPImageだと思われるため問題ありません.

 background(0)は重畳表示したものをリフレッシュする働きがあります.この部分をコメントアウトすると以下のようになります.
 次のif文ではマーカを検出したかどうかで分岐します.nya.isExistMarker(0)では対象としたマーカが存在する場合にtrueを返します.引数としている0は読み込んだマーカのIDです.今回はマーカを一つしか読み込んでいないためIDは0のみになっています.

対象とするマーカが存在することを確認できたら,重畳表示する3Dオブジェクトの描画処理に移ります. nya.beginTransform(0)および nya.endTransform(0)で囲んだ部分がそれに該当します.
  fill(0,0,255);
  translate(0,0,20);
  box(40);
となっている部分で最も重要なのがtranslateです.これは座標系を並進させるメソッドです.今回box(40)ということで一辺40mmの立方形を描画したいのですが,boxの中心は箱の中心になっています.そのため,transrateさせずに描画するとboxの半分つまり20mmしかマーカの上に出ていないことになってしまい,マーカの白いところに表示させるはずだったboxがずれてしまいます.

下の写真はtransrateさせた場合とtransrateさせない場合を比較したものです.

 私自身ARToolKitではこのように座標系をどう動かすかといった座標変換の考え方が最も難しいと感じています.

fillは塗りつぶしの色を指定するメソッドです. 第一引数から順にRed,Green,Blueに対応していて,それぞれ0~255の範囲の値で色の強さを指定することができます.ですから例えば,fill(255,0,0)とすることによって赤い立方体を描画することが可能になります.

これでSimpleLiteがどのような処理を行なっているのかわかるようになりました.
このサンプルプログラムはNyARToolKitを扱う上で最小の構成になっています.さらに様々な機能を追加していくためにはもっと長いサンプルを読む必要がありそうですが,ドキュメントがかなりしっかりと書かれているためそれほど苦労しないですみそうです.

2012年8月1日水曜日

ARToolKitをProcessingで使う(1)

ARToolKitをProcessingに導入してみます.
この記事を読むとサンプルプログラムが実行できるようになります.

*おことわり*
私は開発にWindows7 64bit, Processingのバージョンは1.5.1を使用しています.

1.Example ->Libraries -> Video ->  Ascii Videoを使ってWebカメラから画像がキャプチャーできるか調べます.

・この時私の環境では,QuickTimeがない.というエラーが出たのでここからインストール
・さらにno capture could be found or the vdig is not installed correctly processingというエラーが出たら,ここからVDIGをダウンロード&インストールします。
*Atelier:Mitsubaさんのページを参考にさせていただきました.
ありがとうございました.http://d.hatena.ne.jp/c-mitsuba/20100715/1279163495

が!!!!
problem connecting video output to quicktime
こんなエラーが出てしまいました.

*回避方法*
・Without JAVAを使用している場合
64bitOSだと色々な事情でカメラにアクセスできないようです.
JDK入りのものにインストールしなおしましょう.
*プラノワの空想科学人生さんのページを参考にさせていただきました.
ありがとうございました.http://www.pronowa.com/blog/?p=352

・WinVDIG105をインストールした.
ダメみたいです.
めんどくさいですがQuickTimeをアンインストールした後に101をインストールしなおしましょう.
ここを参考にしました.

・それでもダメ
おそらく関係ないと思いますが,念の為にQuickTimeは古いものを入れてみました.
試してみるのもいいかもしれません.私はこれを入れました.

いきなりつまずいてしまいましたが,次に進みます.

2. Example ->Libraries -> OpenGL -> Esferaを実行してOpenGL機能を使用できるかどうか確認します.ここではとくに問題は起きませんでした.

3. NyARToolKitをダウンロードして任意の場所に解凍します.
ダウンロードはここから.

4.NyARToolKitをProcessingにインストール
新しいライブラリを入手した際にはこれをやります.
解凍したフォルダをまとめてprocessing/mode/librariesにコピーし,そのフォルダ名をlibraryの中の.jarファイルと同じ名前に変更します.今回だったら,フォルダ名は”NyARToolKit”です.
これでExampleに表示されるようになりました.

5.サンプルプログラムを実行します.
まず,NyARToolKit/DataフォルダのPattHiro.pdfを印刷しました.
そしてExamplesの中からSimpleLiteを実行してみます.
Webカメラの中にマーカを入れると。しっかりキューブが重畳表示されました.












これでProcessingへのARToolKitの導入は完了です.

私は専攻科研究でARToolKitを扱っているので,本家にはそれなりに詳しいのですが,こちらの関数の仕様等はまだ把握していません.これから遊びながら勉強してみようと思います.



Likebuttonを現実の世界に登場させてみる(1)

こんにちは。
私が通う沼津高専では,8月11日に一日体験入学というものが開催されます.
その一日体験入学では,各研究室が展示をします.
去年展示してみて,展示に対する来場者の反応(ウケた,ウケない)がよくわからなかったので,今年は反応を可視化したいなと思っています.

そこで,実世界にいいね!ボタンを登場させ,いいね!の数=人気とします.

ポンチ絵↓












絵が下手すみません(笑)
SolidWorksなどの3DCADを使えるようになりたいですね~.

ボタンが押された数をかぞえるだけではつまらないので,インターネットに接続して,ボタンを押すことで何らかのアクションを起こします.とりあえずTwitterにいいねの数を呟いてみることにしました.

システム概要としては
Arduino→Processing→Twitter

・Arduinoに搭載したスイッチが押されるとSerialライブラリを使ってProcessingに1bitを送信
・押していない間は,Serial.flush()を使ってバッファをクリアします.
・チャタリング除去のためにDelayを組み込みます.

・Processing側ではSerialライブラリでArduinoからのデータを受信
・Twitter4Jライブラリを使ってProcessingからTwitterへのつぶやきを実装します.

次回はプログラムのソースを公開して詳しい内容について説明したいと思います.

下ではスイッチの代わりにブレットボードで回路をショートさせています.

2012年7月31日火曜日

エビデンスのために

えー,日々学んだ工学知識を蓄積していきたいと思います.
なんどかブログを初めて挫折しましたが今度は継続できたらいいなと思っています.