Make Local Happiness

自分の幸せは自分で作る!!!

「なぞときBINGO」という新しいBINGOを作ったよ

f:id:iwate_takayu:20170819110621p:plain

実は最近結婚式をやりました(祝)
私は謎解き(リアル脱出ゲーム)にハマっており、 2次会では何か謎解き関連のことがやりたいと思ってました。

そこで思いついたのが、ビンゴゲームです。
結婚式の2次会で誰もがやる定番中の定番なゲームだと思います。
そんなビンゴゲームと「謎解き」をかけ合わせたら面白いと思って作ったのが、
「なぞときBINGO」だったのです。

なぞときBINGOとは?

通常のビンゴゲームでは、数字はガラガラさせて数字の書いてある玉を出すビンゴマシーンで数字を出して、 1列すべてが空いたらビンゴで運要素しかないゲームです。 運要素の強いビンゴゲームを「なぞときBINGO」では少し実力主義型のゲームに変えました。

「なぞときBINGO」ではビンゴマシーンは使わず、 ビンゴカードと謎(パズルのようなもの)が書かれた紙を数枚使ってゲームを進めます。 参加者が謎を解くと答えで数字が出てくるので、その数字をビンゴカードから開けてゲームを進めます。

謎をすべて解いた後ですが、 実は「電話番号」が出てきます。 その電話番号に電話すると抽選に参加できる仕組みになっています。

なんで電話をかけるんだと思った方がいるかと思うのですが、
これは、電話を使って抽選するためです。

通常のビンゴゲームではビンゴになると、ビンゴー!と高らかに言って、
会場の前の方に行くかと思います。

この「なぞときBINGO」では、抽選は電話で行います。

f:id:iwate_takayu:20170819112943p:plain

WEBのツールを用意しており、電話をかけた方の番号の下4桁が一覧で表示され、
当選人数を指定し抽選ボタンを押すと、当選した番号が決定し、
電話に着信が入るのです。

f:id:iwate_takayu:20170819112844p:plain

どうやって作ったのか?

f:id:iwate_takayu:20170510221936j:plain

実はこのビンゴカード自作なんです。
これは特注しているわけではなく、レーザーカッターで自分で切って作っています。
レーザーカッターは使い方がわからなくても、渋谷のFabcafeでハンズオンをやっていたり、
AKIBA.DMMやTechShopでも教えてくれる人がいるので案外なんとかなりました。

電話のシステムはTwilioを使って作っています。

これ非常に便利です。 自動音声応答(IVR)や着信をトリガーに処理を投げることができたりと、
電話を使った仕組みは一通り作れるのではないでしょうか?

WEBツールは裏側はFirebaseで作っています。
Firebase FunctionsでAPIは作成しており、APIからTwilioを呼び出しています。
サーバーを保持していないため、 コストが安く、メンテナンスなしで動作する構成で作っています。

まとめ

もともとは自分の結婚式のために作ったものですが、 意外と評判がよかったため、現在販売も開始しました!(是非友達に進めてください)
結婚式の2次会で普通のビンゴでは満足できない方にはオススメの商品になったと思います。
意外にも電話で抽選がくるのは面白かったです。

もともとTwilioのサイトに抽選用のデモアプリがあったので、
システム的にはそれをFirebase用に書き換えた感じです。

体験レポートなんかも今後書いていきたいので、もし写真付きで書いてもいいよという方は、
info@nazoneko.comまでメール頂ければ無料で謎解きビンゴをプレゼントします。

▼購入はこちらから

peraichi.com

▼体験版の申し込みはこちらから

docs.google.com

raspberryPiの初期セットアップ

f:id:iwate_takayu:20170408172520j:plain

必要なもの

SDカードにRaspbian(OS)を焼く

こちらはMacでの作業になります

raspbianをMacにダウンロード

以下のページからダウンロードできます

https://www.raspberrypi.org/downloads/raspbian/

1.SDカードのディスクを確認します

$ diskutil list
/dev/disk2 (internal, physical):
  #:                       TYPE NAME                    SIZE       IDENTIFIER
  0:     FDisk_partition_scheme                        *15.9 GB    disk2
  1:             Windows_FAT_32 boot                    66.1 MB    disk2s1
  2:                      Linux                         4.3 GB     disk2s2

2.先程ダウンロードした.imgのファイルを指定してSDカードに書き込みます

$ sudo dd bs=1m if=2017-03-02-raspbian-jessie.img of=/dev/disk2


4190+0 records in
4190+0 records out
4393533440 bytes transferred in 3563.665218 secs (1232869 bytes/sec)

3.sdカードを取り出します

sudo diskutil eject /dev/disk2

WIFI設定

SSID, PASSWORDは適宜変更する

sudo sh -c 'wpa_passphrase SSID PASSWORD >> /etc/wpa_supplicant/wpa_supplicant.conf'

Wifiのパスワードが残っているので消す

sudo vi /etc/wpa_supplicant/wpa_supplicant.conf

network={
        ssid=SSID
        #psk=PASS # 生パスワードなんで消しておく
        psk=01b...
}

SSIDが表示されれば成功

$ iwconfig wlan0

IPを固定にする

現在のIPを確認する

$ ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr b8:27:eb:46:79:7d  
          inet addr:192.168.0.205  Bcast:192.168.0.255  Mask:255.255.255.0

ゲートウェイのアドレスを確認する

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    303    0        0 wlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     303    0        0 wlan0

DNSサーバを確認する

$cat /etc/resolv.conf 
# Generated by resolvconf
nameserver 8.8.8.8

先程確認したIPを記載する

sudo vi /etc/dhcpcd.conf

interface wlan0
inform 192.168.0.205
static routers=192.168.0.1
static domain_name_servers=8.8.8.8

$ sudo /etc/init.d/dhcpcd reload

各種インストー

アップデート

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

$ sudo apt-get install -y git
$ sudo apt-get install -y vim

鍵設定

githubに公開鍵を置く

githubに鍵を予め登録しておく 共通鍵は以下のURLで確認できる

https://github.com/[username].keys

公開鍵を登録する

cd 
mkdir .ssh
cd .ssh 
wget -O authorized_keys https://github.com/ganezasan.keys 
cd ..

sudo chmod 700 .ssh
sudo chmod 600 .ssh/authorized_keys

sshの設定

$sudo vim /etc/ssh/sshd_config

...
PermitRootLogin no # root不可
...
PasswordAuthentication no # パスワード認証を無効に
...
AuthorizedKeysFile     %h/.ssh/authorized_keys #コメントインする

$ sudo /etc/init.d/ssh restart

sshを有効にする

sudo raspi-config

Interfacing options > ssh > Enable or disable ssh server

ディスプレイを上下逆にする

$ sudo vim /boot/config.txt      
$ lcd_rotate=2

Arduinoをはじめようを読んでみたメモ

本の半分がArduino言語のリファレンスなので、 実際作るときに辞書としては使えそう。 前半は簡単なセンサーのプログラムと回路のサンプルについての説明が書いてあった。

以下メモです。

ティルトスイッチ(傾斜スイッチ) パルス幅変調(PWM)

抵抗器とコンデンサの値の読み方

抵抗器とは?

0
1
2
オレンジ 3
4
5
6
7
8
9
10%
5%

金と銀は精度を表す色 茶、黒、オレンジ、金という並びだったら、 103±5%とよめます。でもこれだと意味がわかりませんね。 実は3本目がゼロの数を表しています。 なので103ならば、10の後ろにゼロが3つあるので、「10000Ω±5%」の抵抗器ということになります。10kとも表せます。

コンデンサとは?

コンデンサは電気を蓄えたり放出したりする電子部品です。 直流を通さないで絶縁するはたらきもあります。

http://www.murata.com/ja-jp/campaign/ads/japan/elekids/compo/capacitor

コンデンサキャパシタ)の値の読み方はもう少し簡単です。 電解コンデンサのような樽型の部品は、値がそのまま印刷されています。 コンデンサの値の谷はファラド(F)で、あなたよく使う込んで差はマイクロファラド(μF)単位で図れるものでしょう。

セラミックコンデンサのような円盤形のコンデンサの場合は、μのような単位の記号は印刷されていません。かわりにピコファラド(pF)単位の値が3桁の数字で示されます。

1,000,000pF = 1μF

この3桁の数字の読み方は抵抗に似ていて、3桁目の数字が1〜2桁目の数字の後ろに並ぶゼロの数を表しています。ただし、ゼロの数をそのまま表すのは3桁目が0〜5のときだけで、8の場合は最初の2桁を0.01倍、9の場合は0.1倍にします。6と7は使われません。 例を挙げましょう。104と印刷されていたら100,000pF、つまり0.1μFです。

229ならば2.2μFとなります。

Prototyping Labを読んでArduinoを触ってみた

今回始めてArduinoに触り、電子工作というか回路とかも結構怪しい状態なので、 書籍に書いてることをメモしている感じです。 この本を読みました。

作品紹介

Arduinoで作られたプロトタイプの作品も結構多かった。 どれもプロトタイプからガッツリ工場での量産を意識しているわけではなく、 途中で品質や金額などを考慮して、品質をなんとか担保しつつ量産できるようにする工程があった。

電子回路の基礎知識

電気の流れは水の流れに例えられ、電位の高いところから低いところに向けて電流は流れる。地点の高さ(海抜)の高さは電気ではグラウンド(GND)を基準として比較します。

オームの法則

オームの法則は「電位差が電流に比例し、その比例定数を抵抗という」 2点間の電位差をE、電流をI、比例定数をである抵抗をRで表すと、 E=I×R

R=(電源電位 - LEDの順電圧)/ LEDに流したい電流

LEDの順電圧が1.8V(赤の場合にはこのくらいが多い)、電流が10mAの場合320Ωが適切であることがわかる

R = (5 - 1.8) / 0.01 = 3.2/0.01 = 320

Arudino基礎知識

PWM(Pulse Width Modulation)

オンの区間とオフの区間の割合を変えることで連続的に出力をコントロールすること

analogWrightは限られたデジタルピンでしか使えない

D3,D5,D6,D9,D10,D11の6つのみ

センサ

フォトインタラプタ

ある位置に物体があるかどうかを検知できる。 フォトインタラプタには透過型と反射型があります。 - 透過型: 発光素子と受光素子が対抗にセットされ、間を何かが遮ったかどうかを検出することができます。 - 反射型: 発光素子と受光素子が並行にセットされ、一定の距離に反射する物体があるか否か、また、反射率はどの程度かを検出することができます。

まとめ

センサー試すにはいい感じの本でした。 回路とセンサーの部品、サンプルコードなど丁寧に書かれていたので、始めの1冊としてはいいかもしれないです。 Lチカもやっぱり動くと楽しい!

f:id:iwate_takayu:20170202121939j:plain

ServerlessフレームワークでDynamoDBのテーブルを10個以上作る

Subscriber limit exceeded: Only 10 tables can be created, updated, or deleted simultaneously.

CloudFormationからDynamoDB作ると、こんなエラーがでるんですよね。 しかも結構いい加減で、私の環境では14個までは作成できました。

AWSのサポートに連絡すれば、 上限を緩和することとかできるかな〜と思ったのですが、 DynamoDBのAPIで制限されており、今のところは上限緩和できません。

Limits in DynamoDB - Amazon DynamoDB http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html

In general, you can have up to 10 CreateTable, UpdateTable, and DeleteTable requests running simultaneously (in any combination). In other words, the total number of tables in the CREATING, UPDATING or DELETING state cannot exceed 10.

解決策

Serverlessを使ってDynamoDBを作成していたのですが、 解決策は2つあって、

  1. Serverlessのプロジェクトを2つ以上に分ける
  2. DependsOn属性を使いテーブルに依存関係を付ける

今回はマスタとなるテーブルが10個以内だったので、 2のDependsOn属性で解決しました。

DependsOn属性を使いテーブルに依存関係を付ける

詳しくは以下のドキュメントをご参照ください。

DependsOn 属性 - AWS CloudFormation

http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html

DependsOn 属性を含む DynamoDB テーブル

http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-examples-dependson

Resources:
  myFirstTable:
    Type: AWS::DynamoDB::Table
    Properties:
      ...
  mySecondTable:
    Type: AWS::DynamoDB::Table
    DependsOn: myFirstTable
    Properties:
      ...

上記例では、必ず myFirstTable の作成が完了した後に mySecondTable の作成が開始されます。

そのため11個目以降のテーブルに DependsOn 属性をつけることで、 DynamoDB テーブルの同時作成数を 10 個に抑えつつ CloudFormation スタックの作成が可能になります。

Terraformで既存のDynamoDBの設定を取得する

f:id:iwate_takayu:20170112190156p:plain

Terraformのページは本当にわかりにくいので、メモ。 AWSマネジメントコンソールから手動でDynamoDBなどを作り、設定をコード化したい場合に便利です。

Terraform install

バイナリーをダウンロードし、パスが通っているディレクトリに設置します。
こちらのページにリンクがあります。 www.terraform.io

$ curl -LO 'https://releases.hashicorp.com/terraform/0.8.4/terraform_0.8.4_darwin_amd64.zip'
$ unzip terraform_0.8.4_darwin_amd64.zip
Archive:  terraform_0.8.4_darwin_amd64.zip
  inflating: terraform               

$ mv terraform /usr/local/bin/terraform
$ terraform --version
Terraform v0.8.4

AWSの設定

aws.tfファイルを作成し、普段使っているProfileなどを選択します。 defaultを使っている方は、この設定は不要です。

provider "aws" {
  region                   = "ap-northeast-1"
  shared_credentials_file  = "/Users/xxxxxx/.aws/credentials"
  profile                  = "test"
}

DynamoDBをインポート

<table_name>を任意のテーブル名にすれば完了です。 コマンド実行後terraform.tfstateが作成されています。

$ terraform import aws_dynamodb_table.basic-dynamodb-table <table_name>

2016年やってよかったことまとめ(振り返り)

2016年あっとい間ですね! やりたいことや、やりきれなかったことが沢山残っていますが、 とりあえず、振り返りとしてやってよかったことをまとめていきます。

フィリピン留学

3月末から6月までの約3ヶ月間フィリピンのセブ島に英語を勉強しに行ってきました。 詳細はこちらの記事にまとめています。

ganeza.hatenablog.com

ganeza.hatenablog.com

ganeza.hatenablog.com

TOEICの点数としては、フィリピンから帰ってきた次の日に日本で受けた試験で、 745点を取ることができました。 行く前が460点だったので約300点アップです!!

f:id:iwate_takayu:20161231230122p:plain

留学いってよかった事

  1. 外人と飲みに行っても2時間くらいなら話しに困らない
  2. TOEICの試験中に眠くなくならない
  3. 洋画や海外ドラマを見ていて会話が全部ではないが、半分くらいなら聞こえる

もちろん、まだこのレベルでは仕事で使うには不自由すぎるのですが、 一緒に開発をしている方(アメリカ人)と一緒に飲みに行くことができるようになったのは大きな1歩でした。 もちろん、仕事面でも開発中に対面以外でも議論や説明ができるようになりました。

※もう2年ほど一緒にやっているので、かなり思いを汲み取ってもらってます。ただ日本語は使ってません。

筋トレ(交互浴)

最近は週に2日以上ジムに通うのが日課になっています。 最初は5kmくらい走っていたのですが、 筋肉欲しいな。。という憧れがあったので、今は主に胸筋と腹筋、背筋を中心に筋トレしています。 胸板が薄い人は欲しいですよね。

通い初めてやっと4ヶ月経ちましたが、 筋肉が1.5kg増えました。 最初の2ヶ月はなぜか痩せるという悲しい現象が起きたのですが、 やっとベンチプレスなどのメニューで使う重さも+10kg以上変わってきました。 慣れもありますが、いい感じです!

昔、社会人1年目〜2年目でもジムには通ってましたが、 忙しい、面倒くさいと通うのをやめてしまいました。
ですが、今は体力が大事!という思いと、水風呂気持ちいいいいいいいいいという思いが私をジムにつれて行ってくれます。

水風呂発明した人凄いですよね!!!

昔は水風呂とかただ冷たくて、嫌いだったのですが、 今は、ただただ気持ちよくてしかたないです。

お風呂で温まって、水風呂
もっかいお風呂
そして水風呂
その後サウナ
水風呂

と大体3回は水風呂入ってます。

水風呂は筋肉がズタズタにされて、 力がはいらなくなる感じだったのですが、 最近はそれが気持ちいいいと感じるようになってきました。

そして、翌日の目覚めが違います!! 結構病弱な体質ですが、風邪もこの半年は殆ど引いていません。 もうジムに筋トレというよりも、水風呂に入りに行ってる感じです。

水風呂を入るキッカケになったヨッピーさんにはマジで感謝しております。

travel.spot-app.jp

自主サービス開発

今は2つの自主プロジェクトをやっています。

1つは高校の同級生と一緒にリアル脱出ゲームのメディアを作っています。
彼がリアル脱出ゲームを愛していて、友人の結婚式や旅行などで、自分の自作の脱出ゲームの謎を作るほどです。
今は公開しているのはメディアだけですが、簡単なゲームも開発中です!!

私も彼に誘われて一緒にリアル脱出ゲームに参加したのですが結構面白いです!!!

もう1つは、去年から考えていたサービスで、 エンジニアに気軽に相談できるサービスです。

ganeza.hatenablog.com

10月からやっと開発をはじめました。遅いですよね。。

本当はフィリピンから帰って来た後、すぐ開発を始めたかったのですが、 お金の問題もあり、受託もやりつつ開発を進めています。
今年中に公開するのが目標でしたが、まだちょっとかかりそうです。

もっと早くやろうとしていたのですが、 1人だとなかなか進まないことに気づきました。

なので、今は大学の後輩と集まって時間をとって開発をしています。 ただ、これはただ集まっているだけですw

彼は別の作業やプロジェクトをやっていますし、 私は私でもくもくと開発をしています。

いわゆる動機付けですね。 意外と今はいい感じで日曜日に集まって開発するのが習慣になってきています。

他に小さいですが、初めて自分のnpmのパッケージを公開しました。

www.npmjs.com

また自分のプロフィールサイトも公開しました。

Takayuki Ito

まとめ (準備で勝敗は100%決まっている

2016年は起業してから初めて自分の投資に時間を費やした年になりました。
ある意味、会社としての成長よりも個人の能力の成長に力を入れました。 仕事としても、誰かを動かすというよりは、1人のエンジニアとして活動していました。

これは全て準備不足だったからです。

何かをやりたいときに時間とお金は重要で、 私はその準備(お金)を怠っていました。
何のために2年やってきてるんだよ。と思ったりもしました。

ただ、この後も人生は続くので、 ゆっくり行こうと思います。

2016年はいろいろ振り返ることができ、新しい1歩の足がかりを作れた1年でしたので、 個人的には満足しています。

来年は仕事面でも色々変化のある年にしたいと思っています。 今やっているサービスの開発も公開できるように進めていきたいと思います。

2017年もみなさまどうぞよろしくお願いいたします。

よいお年を。