Google Home Mini と Raspberry Pi Zero W を購入
年末にGoogle Home Mini と Raspberry Pi Zero W を購入しました。
手始めに、時報とGmailを受信したら件名を読み上げてくれる機能を追加しました。
次は電車の遅延情報を教えてくれる機能などを追加してみたい所存。
Beep音で遊ぼう
はじめに
これは、SLP KBIT Advent Calendar 2014 の21日目の記事です。
Beep音とは
ビープ音は、単一の波形で構成される音のことであり、コンピュータにおいて最も原始的な音声出力と位置づけられています。
電源投入時や、稼働中にエラーが発生した場合などに発せられる音のことです。
C言語でBeep音を鳴らす
C言語を使ってBeep音を鳴らすには、Beep関数を使います。
Beep関数を使用するためには、"windows.h"というヘッダファイルをインクルードする必要があります。
Beep(音の周波数〔Hz〕, 音の長さ〔ms〕);
このように記述することで、簡単にBeepを音を鳴らすことが出来ます。
まずは、簡単な時報を鳴らすプログラムを書いてみます。
#include <stdio.h> #include <windows.h> void main() { printf("時報\n"); Beep(440, 950); Beep(440, 950); Beep(440, 950); Beep(880, 1200); }
曲を演奏する
次は、Beep音で音楽を演奏してみたいと思います。
今回は、「ラ」を440Hzとし、ピタゴラス音律を採用します。
ピタゴラス音律についての説明は割愛するので、興味のある人は調べてみてください。
#include <stdio.h> #include <windows.h> void main( ) { Beep(330.0, 450); Beep(330.0, 450); Beep(330.0, 900); Beep(330.0, 450); Beep(330.0, 450); Beep(330.0, 900); Beep(330.0, 450); Beep(391.0, 450); Beep(260.7, 650); Beep(293.3, 200); Beep(330.0, 1000); Sleep(500); Beep(347.7, 450); Beep(347.7, 450); Beep(347.7, 650); Beep(347.7, 200); Beep(347.7, 450); Beep(330.0, 450); Beep(330.0, 450); Beep(330.0, 450); Beep(330.0, 450); Beep(293.3, 450); Beep(293.3, 450); Beep(260.7, 450); Beep(293.3, 800); Beep(391.1, 900); Sleep(150); Beep(330.0, 450); Beep(330.0, 450); Beep(330.0, 900); Beep(330.0, 450); Beep(330.0, 450); Beep(330.0, 900); Beep(330.0, 450); Beep(391.0, 450); Beep(260.7, 650); Beep(293.3, 200); Beep(330.0, 1000); Sleep(500); Beep(347.7, 450); Beep(347.7, 450); Beep(347.7, 650); Beep(347.7, 200); Beep(347.7, 450); Beep(330.0, 450); Beep(330.0, 450); Beep(330.0, 450); Beep(391.1, 450); Beep(391.1, 450); Beep(347.7, 450); Beep(293.3, 450); Beep(260.7, 900); }
何の曲かは、聞いてからのお楽しみです。クオリティに関しては目を瞑ってください。
最後に
Rails開発日記 Part.2
なんとか3次関数まではそれなりに動くものが出来たと思うので、Magnet Ver 0.20として公開してみます。
Herokuは、一定時間アクセスがないと、次にアクセスした際に結構時間が掛かるのでご了承ください。
次は最終目標のフーリエ解析の実装に取り組んで見る予定です。
追記
簡単なフーリエ解析のプロットを実装しました。
いまのところ、簡単な形式のグラフしか描画できませんが、気が向いたら分数の形式などにも対応させてみようかと思います。
少し疲れたので、あとはおまけ機能を少し追加して、一旦開発を中断しようと思います。
追記の追記
ちょっとしたおまけを追加しました。
最近、D3.jsというものに興味を惹かれたので、少し遊んでみました。
多分5種類ぐらいあります。マウスでゴシゴシしてください。
Rails開発日記 Part.1
夏休みの成果物として、Ruby on Railsを使って俺得なアプリケーションを開発しようと考えていたので、先日より開発に着手しました。
今回の目的は、Ruby on Railsの勘を取り戻すことと、PostgreSQLを導入したことで、herokuへデプロイし、アプリケーションを外部に公開できるようになったので、そのテストをすることです。
取り敢えず、入力フォームに数値を代入し、その数式のグラフを描画するアプリでも作ってみようかなと思い、開発に取り掛かりました。
取り敢えず、アプリケーションの名前は、「Magnet」にしました。
Ma(th) の g(raph) を net 上で描画するアプリとかそんな感じです。
現時点でこんな感じになりました。
このアプリケーションの最終目標は、現段階ではフーリエ解析で絶対値、位相スペクトルや、ベクトル軌跡のグラフを描画するところまで作ってみようかと考えています。
細かいところの修正を終えたら、Magnet ver.0.10 として、公開してみようかと思います。
PostgreSQLを導入
久し振りに Ruby on Rails を弄りたくなったので、今まではSQLiteを使ってアプリケーションを作っていたのを、PostgreSQLに変えて作ってみることにしました。
PostgreSQLの導入
以前にも、PostgreSQLのインストールに挑戦したことがあったが、うまくいかなかったので再挑戦してみたところ、何故か上手くいってしまいました。
sudo yum install -y postgresql93 postgresql93-server postgresql93-contrib postgresql93-libs
多分、こんなコマンドを実行したら上手くいったような気がします。
Railsアプリの作製
postgreSQLを使ってアプリを作るときは、 rails new `name` -d postgresql
で出来るようです。
この際、色々とエラーが発生したが、これの解決方法は、こっちに書きました。
rake db:migrateが出来ない
取り敢えず、scaffoldを使って簡易的なモデルとコントローラーを作成し、いざ、rake db:migrate
をしようとしたところ、
rake aborted! PG::ConnectionBad: FATAL: role "name" does not exist Tasks: TOP => db:migrate (See full trace by running task with --trace)
こんなエラーが発生しました。どうやら、ロールがないらしい。
ということで、ロールを作ることに。
ロールの作製
ロールを作成するには、まずはpsql -U postgres
コマンドで、スーパーユーザである"postgres"で接続する。
次に、create role name with login;
で、ログイン権限付きのロールを作成した。
このとき、文末に;
が必要なことに気付くのに、かなりの時間を要した…
ちゃんとロールが作成されているかを確かめるには、\du
で確認できる。
ついでに、データベースを作成する際には、create database name;
でOK。
データベースが作成されているかを確かめるには、\l
で確認できる。
アプリケーションと同じ名前のロールを作成した後は、config/database.yml
のdatabaseの箇所を少し弄って、再びrake db:migrate
を実行することで、今度は上手くいった。後は、rails s
で、サーバを走らせ、Welcome aboardのページを確認できれば成功。