株式会社インフィニットループ PHPとスマホアプリ開発を行う札幌のシステム会社

技術ブログ

  1. トップ>
  2. 技術ブログ>
  3. DIYの記事一覧

2016年09月29日 (木)

著者 : 

子ども向けプログラミング専用パソコン『IchigoJam』を組み立ててみました

こんにちは、muramotoです。

会社で『IchigoJam』のプリント基板キットをもらったので、休日に組み立ててみました。IchigoJamは、Raspberry Piより小型のシングルボードコンピュータ。キーボードとテレビを接続するだけで、BASICプログラミングが楽しめます。

ichigojam-00001

(続きを読む…)

2014年03月19日 (水)

著者 : 

ゆっくりが今日の予定を教えてくれる – Raspberry Piで作るゆっくり秘書システム

matsuiです。今回はRaspberry Piを使ってゆっくり秘書システムを作ってみたいと思います。

実は以前にも似たようなものを作ったのですが、今回はRaspberry Piだけで構築できる完全版です。
また、動作に必要なソースも公開しました。
→ Raspberry Piでもゆっくりをしゃべらせてみました(ラズベリーゆっくりの構築について)
 
 

Raspberry Piとは

Raspberry Piは、もうすっかりおなじみの名刺サイズのシングルボードPCです。
みなさん割と買うだけで満足してしまっているようなので、この機会にぜひ引き出しからひっぱり出して活用しましょう。

raspberry
 
(続きを読む…)

2013年12月30日 (月)

著者 : 

[技術?]いまさら人に聞けない!坊主にするときに失敗しない5つのステップ

こんにちは、最近クラクラ(Clash of Clans)にはまってます、wanashiです。

今年ももう終わりですね。

年末にやることといえば大掃除。

弊社もオフィスの大掃除をしました。

約一名、「髪の毛が散らかってるので、綺麗にしたい」
という人が居たのでお望み通り綺麗にしました。
(※本人の希望でやっています)

会社備え付けバリカン
th_barikan

IL式 坊主フロー

1.後頭部を見つめ、集中力を高めます。(このとき、必ず完成形を頭の中で描くこと)
th_bozu1

2.いよいよ坊主への第一歩を踏み出します。
最初は真ん中にしっかりとした芯を通すよう刈ります。
th_bozu2

3.しっかりとした芯を通せたら、次はその芯を軸として頭の上に円を描くよう刈ります。
th_bozu3

4.そのまま円を広げるように刈り続けます。
th_bozu4
※注:目に毛が入ってしまうことがあります。
弊社ではあえて前髪を残すことで前髪がストッパーとなり、目に毛が入らない方法を採用しています。

5.ひと思いに刈って、完成!
th_bozu5

年内最後のブログがこんな内容でなんかすみません(笑)

みなさま、今年も一年間本当にありがとうございました。
来年もインフィニットループの活躍にご期待ください。
それでは良いお年を!

PS. 弊社では頭の上を整理したいエンジニアを募集しています。
興味のある方は「こちら」へ!

2013年02月20日 (水)

著者 : 

Raspberry Piで温度と湿度を計測しグラフ化してみました

matsuiです。以前書いた「こちらの記事」が好評だったので、また温度計ネタを書いてみます。

Raspberry PiとUSBセンサーを使って温度と湿度を計測し、それをグラフ化してみます。
 
 

使用する機器

Raspberry Pi(ラズベリーパイ)
http://www.raspberrypi.org/

Linuxで動作する名刺サイズのPCです。
小さくて省電力ですので、今回のような常時起動しておく用途にはぴったりですね。
3000円くらいで購入できます。


 
 
Strawberry Linux USB温度・湿度計モジュール (USBRH-FG)
http://strawberry-linux.com/catalog/items?code=52002

USB接続の温度/湿度計です。
組み立て済みで4980円、自作キットでも3980円です。
写真はケース付きのもので、更に+1260円です。
(恐ろしいことにRaspberry Pi本体よりかなり高いです 笑)


 
 

設定

Raspberry PiのOSに「Raspbian “wheezy”」を使っている場合を例として解説していきます。

まずUSBRHは挿すだけで認識するはずです。
USBポートにケーブルを挿し、以下のコマンドを叩いて正しく認識されていることを確認しましょう。

$ dmesg
 [略]
[  128.363346] usb 1-1.3: new low-speed USB device number 5 using dwc_otg
[  128.470187] usb 1-1.3: New USB device found, idVendor=1774, idProduct=1001
[  128.470219] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  128.470236] usb 1-1.3: Product: Hygrometer/Thermometer
[  128.470249] usb 1-1.3: Manufacturer: Strawberry Linux Co.,Ltd.
[  128.485357] generic-usb 0003:1774:1001.0003: hiddev0: USB HID v1.00 Device [Strawberry Linux Co.,Ltd. Hygrometer/Thermometer] on usb-bcm2708_usb-1.3/input0

必要なパッケージをインストールします。多くの場合もう既に入っているはずです。

$ sudo apt-get install gcc libusb-dev

こちらのサイトからドライバを落としてきます。
→ USBRH on Linux

$ cd /usr/local/src
$ sudo wget http://www.dd.iij4u.or.jp/~briareos/soft/usbrh-0.05.tar.gz
$ sudo tar xvfz usbrh-0.05.tar.gz

しかしながら、ソースコードに少し修正を加えないと、「usb_set_configuration error」というエラーになってしまうようです。
修正には以下のWikiの情報を参考にさせていただきました。
→ USB温湿度計

反転表示してある、233行目と237行目を追加します。

if((rc = usb_set_configuration(dh, dev->config->bConfigurationValue))<0){
    if( rc = usb_detach_kernel_driver_np(dh, dev->config->interface->altsetting->bInterfaceNumber)<0 ){
        puts("usb_set_configuration error");
        usb_close(dh);
        exit(3);
    }
}

修正が終わったらmakeします。

$ cd usbrh-0.05
$ make

このままではroot権限以外で実行した場合エラーとなってしまうので、お好みでsetuidして使うと便利かもしれません。

$ sudo chown root:root usbrh
$ sudo chmod u+s usbrh
$ sudo mv -i usbrh /usr/local/bin/
$ usbrh
24.34 21.81

無事、コマンドから温度と湿度がとれるようになりました。
 
 

グラフ化する

muninをインストールしましょう。

$ sudo apt-get install apache2 munin munin-node

これだけで基本的なグラフが生えてきます。
ただし、描画するグラフがいっぱいあるとRaspberryPiの処理能力ではかなり重くなるので、/etc/munin/plugins以下のシンボリックリンクを消して、不要なグラフは削除すると良いと思います。

USBRHの情報をグラフに加えるのは以下のサイトのスクリプトを利用させていただきました。
→ T-Saitoh’s Diary 熱くなってきたしUSBRH復活

上記サイトのスクリプトを/usr/share/munin/plugins/usbrhとして設置し、/etc/munin/plugins以下にシンボリックリンクをはります。

$ sudo vi /usr/share/munin/plugins/usbrh
[上記のサイトのスクリプトを保存]
$ sudo chmod 755 /usr/share/munin/plugins/usbrh
$ sudo ln -s /usr/share/munin/plugins/usbrh /etc/munin/plugins/
$ sudo /etc/init.d/munin-node restart

 
 

完成

温度の安定する位置に温度計を固定し、しばらく待ちましょう。

温度と湿度のグラフが生えてくるはずです。


 
 
なんだかジグザグしているのは、定期的にストーブが動くからです。春になれば安定したグラフが取れることでしょう。

洗濯をしたり、お風呂に入ったりすると湿度が跳ね上がるのも見てて楽しいです。
簡単にできますので、みなさんもぜひ試してみてはいかがでしょうか。

2013年02月15日 (金)

著者 : 

Raspberry Piでもゆっくりをしゃべらせてみました(ラズベリーゆっくりの構築について)

matsuiです。
昨日の記事 ゆっくりボイスをしゃべらせるためのPHPプログラム「YukkuriTalk」を作成してみました の続きです。

Raspberry Piとは

Raspberry Pi(ラズベリーパイ)はLinuxで動作する名刺サイズの小型PCです。
3,000円程度で購入できます。

512MBバージョンが出た数ヶ月前に購入し待つこと3ヶ月、忘れた頃に到着しました。
で、そこから数ヶ月間また存在を忘れ、つい先日思い出しセットアップを行いました。
 
 

Raspberry Piの基本セットアップ

ググるといろんなサイトが出て来ると思いますので、ここでは軽く説明します。

http://www.raspberrypi.org/downloads からOSのイメージをダウンロードします。
今回は「Raspbian “wheezy”」を選択しました。

ダウンロードしたイメージを、DDWinなどのフリーソフトでSDカードに書き込んでやればOKです。
SDカード容量は最低2GB必要ですが、それだと相当パンパンなので、用途に応じてあったものを買っておきましょう。

私はLinux環境だったので以下のコマンドでセットアップしました。Macの人も同様のやり方で行けると思います。
ダウンロードしたイメージは「2012-12-16-wheezy-raspbian.img」、SDカードのデバイス(dfコマンドで確認できます)は「/dev/sdx1」だとします。

$ sudo umount /dev/sdx1
$ sudo dd bs=4M if=2012-12-16-wheezy-raspbian.img of=/dev/sdx

(最後のコマンドのデバイス名に数字がつかないことに注意してください)
 
 

起動と初期セットアップ

上で作ったSDカード、HDMIケーブルとLANケーブル、USBキーボードを挿して起動します。
起動したらメニューが現れますので、以下の設定を行います。

(1) 何はともあれ「update」でメニューを最新にする
(2) タイムゾーンをAsia/Tokyoにセットする
(3) パスワードを変更する
(4) expand_rootfsで、SDカードの全領域を使えるようにする(数十分かかります)

続いて、パッケージを最新にします。これも1時間ほどかかります。

$ sudo apt-get update
$ sudo apt-get upgrade

 
 

ゆっくりをしゃべらせようとするが・・・

さて、ここまでこれば普通のLinuxと同じです。
昨日ご紹介した「YukkuriTalk」で、しゃべらせようとしますが・・・

残念、AquesTalkはx86用のバイナリで、普通のやり方ではCPUがARMであるRaspberry Piには対応できません。
ちなみにWineもARM環境には非対応です。
通常のやり方では難しいということがわかりました。
 
 

それでも私はゆっくりをしゃべらせたい

しかし、それでも私はゆっくりをしゃべらせたい。ここは強い意志を持って別の解決案を探ります。

そこで考えたのが、上のような方式です。
しゃべらせたい文字列をPOSTし、ゆっくりサーバがwavファイルを生成、Raspberry Piはそれをダウンロードして再生します。
今回はAmazonEC2上にマイクロインスタンスで専用サーバを立てました。
 
 

そして完成

”そこには、ゆっくりとゴミの日やGoogleカレンダーの予定をしゃべるRaspberry Piちゃんの姿が・・・”

使ってみるとなかなか快適です。
少なくとも、ゴミの出し忘れは激減しました。
cronに登録したものは何でもしゃべれますので、いくらでも応用がききます。

$ ./yukkuritalkclient "ゆっくりしていってね"
[talked] ゆっくりしていってね

 
 
作ったソフトはGitHubに公開しておきました。
詳しい使い方は同梱のマニュアルをご覧ください。昨日の記事もセットアップの参考になると思います。
→ GitHub ketaiorg / YukkuriTalkServer
→ GitHub ketaiorg / YukkuriTalkClient

wavファイルの生成にWineをつかっているため、Webサーバのユーザ権限でWineの実行が必要になります。
このあたりが少しやっかいかもしれませんね。HTTP経由ではなくSSH経由でwavファイルを取得してもいいかもしれません。
 
 
専用ステッカーも作りました。やはりDIYはこういうどうでも良いところに懲りたいものですよね。

透明ケースに合わせてスケルトン仕様のシールとしました。大満足の出来です。
はれてラズベリーゆっくりとなりました。

 
 
RaspberryPiのようなデバイスは、買うだけで満足してしまいがちです。
眠らせるのは勿体ないので、みなさんもぜひ活用方法を模索してみてはいかがでしょうか。

2013年02月14日 (木)

著者 : 

ゆっくりボイスをしゃべらせるためのPHPプログラム「YukkuriTalk」を作成してみました

こんにちは、代表のmatsuiです。
弊社では、サーバの監視で異常を検知すると、

(ゆっくりの声で) ”○○のサーバが沈黙しました。○○のサーバが沈黙しました。各員戦闘配置についてください。”

といった、音声が流れます。(内容はプロジェクトによって異なり、上は戦争ゲームなのでこのようなアラートになっています)

Linux上からこういった”ゆっくりボイス”による発声を簡単に行えるためのツール「YukkuriTalk」を作成してみましたので、記事にしてみたいと思います。
 
 

ゆっくりボイスについて

ゆっくりボイスといえば、テキスト文章読み上げソフトSofTalkが有名ですが、その音声ライブラリには株式会社アクエストの「AquesTalk」が使用されています。YukkuriTalkも発声処理にこのライブラリを使用しています。
→ 株式会社アクエスト AquesTalk

注意しなければいけないのは、利用や開発にライセンスがいるということです。

営利を目的としない個人の利用の場合は、一定の条件のもとで無償で利用できるようです。
また開発ライセンスも、オンラインストアから安価に購入できます。

法人の場合は、同じく使用ライセンスをオンラインストアで購入したり、別途問い合わせての開発ライセンス購入が必要になります。
弊社と私はゆっくりが大好きなので、一式の法人および個人ライセンスを購入しましたが、とりあえず試してみたいという方は評価版がダウンロードできますので、ひとまずそちらを使うと良いと思います。
詳しくは上記サイトにライセンスというページがありますので、そちらをご覧ください。

また、Windows版とLinux版で微妙に声が異なります。
設定の問題なのかもしれませんが、私はよく分からず解決できませんでした。
Windows版の方が聞き慣れたゆっくりボイスで、可愛いらしく感じますので、こちらを使うことにしました。
 
 

必要なパッケージのインストール

Ubuntu12.10 日本語 Remixへのインストールを例に説明します。
前述の理由で、わざわざWindows用バイナリをWineを使って実行しています。

php5 : このプログラムはPHPで書かれており実行に必要です

$ sudo apt-get install php5-cli

Wine : Windows環境のexeやdllを利用するために必要です

$ sudo apt-get install mingw32
$ sudo apt-get install wine

MeCab : 漢字からひらがなへの変換に使用します

$ sudo apt-get install mecab libmecab-dev mecab-ipadic

インストール後、以下のコマンドを実行し、辞書をUTF-8に変換してください

$ sudo /usr/lib/mecab/mecab-dict-index -d /usr/share/mecab/dic/ipadic -o /var/lib/mecab/dic/ipadic -f euc-jp -t utf-8

 
 

発声用の実行ファイル「AquesTalk.exe」を作る

テキストを受け取りWavファイルを出力するようなexeを作成します。
バイナリの配布には頒布ライセンスが必要なようなので、ここでは公開しておりません。ご自身で作成してください。

こちらのブログが参考になります。
→ ⊥=⊥ Wineでもゆっくりしていってね!!!

必要なライブラリやドキュメントはAquesTalkのページからダウンロードできます。
AquesTalk(2ではなく1)のWin版をダウンロードしてください。

コンパイルの実行例
上記ブログを参考にSampleTalk.cに発声プログラムを書き、AquesTalk.dll, AquesTalk.h, AquesTalk.libを同じディレクトリに置いた状態で、

$ i586-mingw32msvc-gcc SampleTalk.c AquesTalk.lib -o AquesTalk.exe

でコンパイルできます。
これで「AquesTalk.exe」が作成されました。このexeは次項で使用します。
 
 

実行方法

GitHubからプログラム本体をダウンロードします。
→ GitHub ketaiorg / YukkuriTalk

$ git clone https://github.com/ketaiorg/YukkuriTalk.git

実行プログラム本体の「yukkuritalk」と同じディレクトリに、前項で作成した「AquesTalk.exe」とダウンロードした「AquesTalk.dll」を置き、次のように実行します。

$ ./yukkuritalk "あいうえお"
[talked] (あいうえお)

実行すると[talkd]のように表示されて発声が行われます。

$ echo "かきくけこ" | ./yukkuritalk
[talked] (かきくけこ)

のように、パイプによる文字列渡しも可能です。
 
 

応用

いかがでしたでしょうか。
AquesTalkのHPで公開されているAqKanji2Koeを使ったり、SoftalkをWine上から実行すれば同様のことができるのかも知れませんが、試した限りうまく動作しなかったというのと、記号の読みなどが調整できるという点や、簡単に利用できるサンプルがあったという点から、今回はPHPによる再実装を選びました。

このソフトの使い道として、私は自宅で、「今日は何のゴミの日か」をしゃべらせることで、ゴミの出し忘れを軽減しています。
また朝の通勤前にGoogleカレンダーの今日の予定をしゃべらせ、ゆっくり秘書として活用しています。

Googleカレンダー上のデータを、発声のためテキストに落とすプログラムはこちらで公開しています。
これらを実行しつつ、パイプでyukkuritaikに食わせてやればOKです。
→ GitHub ketaiorg / gomi-gcal
→ GitHub ketaiorg / gcal2txt
 
 
みなさんもゆっくりボイスで癒やされて、ゆっくりとした生活を過ごしてみてはいかがでしょうか。

2012年11月13日 (火)

著者 : 

ソーシャルゲームのサービス監視のため、2chスレの勢いをグラフ化するスクリプトを作成してみました

社内見える化委員会のmatsuiです。
前回は社内温度のグラフ化を行いましたが、今回もまたグラフ化ネタです。
 
 
弊社インフィニットループでは、ソーシャルゲームの開発を行っており、サーバやゲーム内のプログラムで異変が起こった場合には、いち早く気づく必要があります。
ソーシャルゲームの場合、大抵2chに専用のスレッドが立っており、そのスレの勢いを監視することで、祭りの発生を検知するための仕掛けを作成することになりました。

ゼロからスレッドの勢いを監視する仕掛けを作成するのは大変なので、何かよいサービスはないかなと探したところ、「2ch勢いランキング」さんというサイトがAPIサービスを提供してくれていたため、これを利用させていただきました。ありがとうございます。

→ 2ch勢いランキング API
 

http://2ch-ranking.net/ranking.json?board=[板名(半角英数)]&callback=callback

のように板名を引数にアクセスすることで、その板にあるスレの勢いランキングがJSON形式で取得できます。カンタンですね。
 
 
さて、あとは指定したキーワードでスレ名を引っかけるPHPプログラムを書きましょう。
100行程度の短いプログラムですが、ここに全文を貼るのも不毛なので、githubにアップしておきました。

→ github ketaiorg / Ranking2chWatcher
 
 
2chにはレス番1000まで到達するとスレッドを立て直すという通例がありますが、この2ch勢いランキングさんのAPIでは、勢いの高いものから順に並んでいるので、それを上から舐めて一番最初に見つかったものを返すというロジックとすることで、問題なく運用することができました。
 
 
設置方法は以下の通りです。

define('BOARD_NAME', 'gameswf');	// 板の名前
define('SEARCH_KEYWORD', '/^.*ブラウザ.*part.*$/');	// 検索キーワードを正規表現で定義(通常はタイトル名を定義)

まず定数BOARD_NAMEに板の名前をセットします。URLの「http://*.2ch.net/」に続く部分の文字列が板名です。

続いて定数SEARCH_KEYWORDに対象としたいスレを検索するための正規表現を定義します。
もし複数のスレが引っかかった場合は、一番勢いのあるスレを対象とします。
 
 
設定したらPHPに実行権をつけて実行してみましょう。
勢いを表す数字が出力されるはずです。

$ ./Ranking2chWatcher.php
50

 
 
動作確認ができたので、cactiに登録してグラフ化してみましょう。
グラフの登録方法はこちらのページを参考にさせていただきました。

グラフを登録し、しばらく待つとこんな感じになります。
あとはcactiの閾値監視機能でアラートを飛ばせば、祭りを監視でき、バグやサーバダウンの兆候を察知できます。


 
 
 
2chにスレがあるようなサービスであれば、何にでも応用可能なので、みなさんもぜひ試してみてください。

2012年10月18日 (木)

著者 : 

980円のUSB温度計を使ってLinuxから室温を計測する

社内見える化委員会のmatsuiです。

最近は少しマシになりましたが、部屋が暑いということで、適切な温度計測を行うため、Linuxマシンから温度測定をできる仕掛けを作ってみました。

使ったUSB温度計はこちら。Amazonで980円です。

Amazon USB温度計! USB thermometer
 
 

セットアップ

付属のCDには、Windows用のドライバしか入っていませんので、とりあえず捨てましょう。

セットアップにはこちらのページを参考にさせていただきました。
→ matoken’s wiki. Linux/Device/サンコーレアモノショップ_USB温度計_AKIBA58

環境はUbuntu12.04LTSで試しましたが、ここに書いてあることそのままで大丈夫です。
ありがたいです。
 
 
USBを指すと普通に認識します。

$ dmesg | grep TEMP
[    1.795200] input: RDing TEMPer1V1.2 as /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/input/input4
[    1.804362] generic-usb 0003:0C45:7401.0001: input,hidraw0: USB HID v1.10 Keyboard [RDing TEMPer1V1.2] on usb-0000:00:1d.0-2/input0
[    1.822847] generic-usb 0003:0C45:7401.0002: hiddev0,hidraw1: USB HID v1.10 Device [RDing TEMPer1V1.2] on usb-0000:00:1d.0-2/input1

 
 
必要なパッケージをインストールします。

$ sudo apt-get install build-essential libusb-0.1-4 libusb-dev git

 
 
温度測定コマンドのソースコードはgithubで公開されているようです。
→ github bitplane / temper

githubからチェックアウトします。

$ git clone https://github.com/bitplane/temper.git

 
 
日本人向けにソースコードを修正します。
上の参考ページそのままです。

$ vi temper.c

44行目の utc = gmtime(&t); を utc = localtime(&t); に
47行目の strftime(dt, 80, “%d-%b-%Y %H:%M”, utc); を strftime(dt, 80, “%Y-%m-%d %H:%M:%S”, utc); に
 
 
diffで書くとこんな感じ

$ diff temper.c.org temper.c
44c44
< utc = gmtime(&t);
---
> utc = localtime(&t);
47c47
< strftime(dt, 80, "%d-%b-%Y %H:%M", utc);
---
> strftime(dt, 80, "%Y-%m-%d %H:%M:%S", utc);

 
 
makeして出来たバイナリを/usr/local/binあたりに設置します。
今回は一般ユーザからも利用したかったので「chmod u+s」しています。

$ make
$ sudo mv temper /usr/local/bin/
$ sudo chmod u+s /usr/local/bin/temper

 
 

使ってみる

実行するとこんな感じです。日付と温度がカンマ区切りで出力されます。

$ temper
2012-10-15 22:01:48,27.825012

 
 
あとはこれを適当なアプリケーションから利用してやればOKです。
弊社ではマザーゆっくりという自作SkypeBotに、温度をしゃべらせる機能をつけて使っています。


 
 
また温度のグラフをcactiに出しています。

<?php
exec("/usr/local/bin/temper", $output);
list($dummy, $temper) = explode(',', $output[0]);
echo round($temper, 1);

こんなスクリプトで取得して、cactiでグラフにしています。


 
 
安いお値段で楽しめますので、興味のある方は試してみてはいかがでしょうか。
 

お古のノートPCをサーバにしています。

  • このブログについて

    このブログは、札幌市の「株式会社インフィニットループ」が運営する技術ブログです。
    お仕事で使えるITネタを社員たちが発信します!

    最新の記事