ラベル python の投稿を表示しています。 すべての投稿を表示
ラベル python の投稿を表示しています。 すべての投稿を表示

2023年8月28日月曜日

「くもんのうた200えほん」をカメレオンリーダーのような音声タッチペンで便利にする

こんにちは。

先日、妻が「カメレオンリーダー」というものを紹介してくれました。

今回の成果物の図

カメレオンリーダーとは

カメレオンリーダーと「くもんのうた200えほん」を組み合わせて、音声タッチペンで童謡がいつでも聴けるというのです。

それは便利だ、と思い「いいじゃん、買っちゃえば?」と言ったら

「でも、高い」と。


え、そうなの?と商品サイトを見てみると、シールセット + タッチペンで 18,700円

確かに高い...。


でも、この仕組みはどこかで見たことあるなーと思い、類似品を検索すると「G-Talk」という製品があるらしいです。くもんやZ会にも同じような仕組みのペンがあるらしいのですが、だいたいこのG-Talkの系列とのこと。しかし、G-TalkもAmazonで12,100円と高い...。

もう少し調べると、Z会のエブリスピークを英語の絵本用に改造した人がいました。


エブリスピークは中古で流通しているようで、メルカリで1400円で買えました。また、シール自体はとても安く、Amazonで1500円(送料込み)で買えます。合計3000円弱で、カメレオンリーダーと同じことができるのです。

MaiYaPenが欲しかったけど高いのでZ会のエブリスピークで代用してみた – BeeLabo

音声タッチペンの作り方

まず、「くもんのうた200えほん」の楽曲データをダウンロードしてきます。Amazonで妻が買ったのですが、妻曰く、「Webで楽曲データを落とすのはバグがあって大変だからAmazon Musicのアプリで落とした方がいい」とのこと。Web版はどうもチェックボックスにバグがあって一括ダウンロードができないらしいです。


ダウンロードしてきたら、次はエブリスピークのmicroSDに楽曲データを入れます。これは所定のフォルダ名とファイル名にしないといけません。200曲全部を処理するのは大変なのでプログラムを組みました。こちらは自由にお使いください。Macを持っていたらPython3が入っているはずなので動かせると思います。ディレクトリはこのように配置すると良いです。

プログラムを動かすとこんな感じで作られます。

1シート目の127番目が「およげ、たいやきくん」になっていたら成功だと思います。


最後に、シールを貼ったら完成です。妻が頑張りました。

細かいところは参考に上げたリンクをご覧ください。

MaiYaPenが欲しかったけど高いのでZ会のエブリスピークで代用してみた – BeeLabo


カメレオンリーダー vs エブリスピーク

一応、カメレオンリーダーと比較しておくと

1. かわいさはカメレオンリーダーの方がいい。

2. SDカードのキャップはネジで閉じられているエブリスピークの方がいい。

3. 音質は気にならない。(youtubeなどの紹介では録音のためか音が割れている気がする)

4. 乾電池(エネループも可)のエブリスピークの方が外出先で比較的楽だと思う。(ちなみに、カメレオンリーダーは充電式だけど、USB type-Cじゃないので使いにくそう)


というわけで、1歳になったばかりの娘とこれで遊びたいと思います。


2018年5月14日月曜日

TDD+モブプログラミング会に参加してきた

5/13(日)のtddyyx(てぃーでぃーでぃーわいわいかい)に参加してきました。
10分くらい遅刻しましたが、心理的安全性が保たれた素晴らしい会でした。ごめんなさい。


何をしたのか


tddyyxでは、テスト駆動開発モブプログラミングで問題を解決します。
  • テスト駆動開発は、間違いを恐れず言うと、テストを書いてからプログラミングする開発方法です。
    • テストに通らないコード(Red) -> 通るけどリファクタリングする必要があるコード(Green) -> 通るし綺麗なコード(Blue)の順に実装していく。
  • モブプログラミングは、間違いを恐れず言うと、一つの問題についてチーム全員で解決していくプログラミング方法です。
    • 作業分担は効率が良くなるように見えるけど、後に作業集約することを考慮すると良くないかもしれない。
    • モブプログラミングは作業分担しないため進みが遅いように見えるけど、全員が共通したコンテキストで動くので最終的には効率が良いかもしれない。
    • モブプログラミングはドライバー(コードを書く人)とナビゲーター(周りで調べたり知恵を出したりする人)に別れて作業する。ただし、コーディング時はモニターは同じものを見る。
    • 問題の一部でも解決したら「やったー!」と言う(重要)。
  • 問題というのは、FizzBuzzやLeapYear(うるう年)のようなプログラミングするとよく出てくるお題のことです。

今回は前半を3チームに分かれて別々の問題を解きました。後半は自由にチームを組んで好きな問題を解きました。

前半戦


@y0taさん、@hirarinさん、@ie_tetrahymenaさんと一緒に100Doorsを解きました。使用したのはCyber-dojoです。言語は参加者みんな初めてのR。

  • 仕様からのタスク分け -> テスト書く -> 実装する -> 動く -> 「ヤッター!!」 -> 以下テストから繰り返す。
以下学び
  • タスク分けに設計の話と混ざるとハマりそうなので避ける。
  • Rの文法が風変わりで楽しい。配列が作れない、三項演算子ができない等等。
  • ネストが3つ以上あると気分が悪い。できるだけ2つまでにする方法を考える。
  • 関数の挙動に注意。副作用の話。
  • 定期的におこる「ヤッター!!」はモチベの回復になる。楽しい。
  • コーディングに自信がなくても学び合うことでカバー可能。(メンバーの人柄によるかも)
    • 自信がない、わからない、と正直に声をあげることが重要だと思う。
  • お菓子大切。喜久福美味しかったです。

後半戦


ごめんなさい、一緒にコーディングしたのに名前を忘れました...。後半はLeapYearをやりました。前半戦と同様にCyber-dojoを使用しました。時間が少なかったので言語はみんな大好きPython。

以下学び
  • 文化の違いをどう解決するか。チームによって問題へのアプローチ(僕たちの場合はタスク分けから先)が違っていたので、最初にどうやってきたのかをお互いに聞くべきだった。
  • 地味にPython忘れている。悔しい。
  • 「ヤッター!!」は重要。

おわり

以上、楽しいコーディングイベントでした。
モブプログラミングはモブ+プログラミングなのでプログラミングではない別の作業でも活用ができる。モブの考え方は原始的だけど、作業が複雑になっていたり知識や経験がない状態からスタートアップする方法として頭においておくのが良さそうです。

あと、けん玉が少し上達してよかったです。

モブけん玉の様子




2018年1月11日木曜日

Docker上のUbuntuでsndfileにハマっていた話

dockerでjupyterを使う


最近はjupyter notebookをよく使っているので, モジュール(ここではlibrosaなどのこと)をホストマシンに直入れしています.

誰しも, いろいろプログラムを触っているうちに, 有用なレガシーコードを動かしたくなることがあると思います.
しかし, importしているモジュールのバージョンが古い, ということがあります.
僕は, それを解決するために, dockerコンテナ上でjupyter notebookを動かしています.

dockerコンテナ毎でモジュールを管理していけば楽じゃないかと.
(結局, モジュール数が増えると管理が大変なんだけど. 誰か上手な方法を教えて欲しいです.)

構築は大変楽で, anaconda3入りのコンテナをpullして, ターミナルで,

docker run -dit -p 8888:8888 --name jupyter-notebook -v $HOME/jupyter-notebook/notebooks:/opt/notebooks continuumio/anaconda3 /bin/bash -c "/opt/conda/bin/conda install jupyter -y --quiet && /opt/conda/bin/jupyter notebook --notebook-dir=/opt/notebooks --ip='*' --no-browser --allow-root"

するだけです. あとは,

docker logs jupyter-notebook

で出てくるURLをブラウザにコピペするだけです.


ところが


jupyterでimportした, 音声系のプログラムを動かすためのsoundfileがこう吐き出すのです.

OSError: ctypes.util.find_library() did not manage to locate a library called 'sndfile'.

ctypes.util.find_library()がsndfileを管理していない??
ググっても情報が少なくて小一時間はまりました.

結論


apt-get install libsndfile1

で直る.

libsndfileはUbuntuの音声読み書き用のライブラリで, soundfileが読み書きに使っています. 
僕は, /usr/lib内にlibsndfileがないため, OSErrorになったのだろうと考えています.

わりとチンケなエラーだったな_(┐「ε:)_

2017年8月26日土曜日

AnacondaでPython環境をつくった話

Anacondaに手を出した

簡単だと思っていたが、意外なところでつまづいていた。
普通にanacondaを入れるなら、公式からpython3.6同梱版をダウンロードしたら良いと思う。そもそもanacondaってなんだよって人はここを読んで、どうぞ。
なんで3.6かっていうと、python2が2020年で引退しそうだから。
とはいえ、Pythonは21世紀のCOBOLなんで需要はあるだろうけど。

つまづいたって?

使ってるのがmacってこともあってpython2が入っているんですよ。
そこまではいいんだけど、過去の僕がpyenvを入れてpython3を入れているんですよ。これが厄介。
PATHが通ってるから、.zshrcのpyenv=~の記述を消す必要がある。
あと、Python公式からコンポーネントとして入れていると消す必要がある。

/Library/Framework あたりからpythonは消してしまおう。

あと、anacondaはデフォルトで.bash_profileにpathを書き込んでいる。
僕はzshなので、.zshrcに記述をコピーしてあげる。

というわけで

anaconda使っています。
jupyter notebookが便利すぎて笑える。

anaconda入れたけど、何したらいいかわからない人はここをでチュートリアルだ。


2016年12月28日水曜日

クリスマスイブにRaspberry Piでイルミネーションを作った話。

きっかけ


  • Raspberry Piが余っていたから
  • クリスマスまでに何かしたかったから
  • 外で見た自転車を漕ぐと点灯するイルミネーションを見たから
  • 友達に「工学部だからキーボードで点灯するようにしたら」と言われたから
  • 本屋で見たイケメンが「Raspberry Piで何か作りてーな」っていう意識高いことを言っていたのがムカついたから

参考にしたもの

やりたいことはLチカ(LEDをチカチカ点灯させること)だったので、以下を参考にしました。

さっそく

できました。

キーボードを叩くと、
点滅します。

仕組み

まず、OSの準備からですが、第8回「2皿目のラズベリーパイ!Model B+のスピード調理に書いてあるので割愛します。

次に、ブレッドボードにLEDと抵抗、導線を次のように置きます。

ちなみに置きかたについても、第9回「ラズベリーパイで電子工作!Lチカ…の前にLピカ!」に書いてあるので割愛します。

LEDを光らせる電源として利用するのはRaspberry PiのGPIOです。
GPIOはRaspberry Piからの命令を電気信号で送る部分のことです。

LEDは次のようにつなぎます。抵抗を反対につなげると光りません。

GPIOのピンは次のような配置になっています。
黄色丸は命令が来るピンで、黒丸はアース(接地)のピンです。ちなみに、濃い黄色丸や赤丸は安定して電気が流れているピンです。
使用しているのはRaspberry Pi B+なのでA+と比べ、ピンの本数が違いますが、左から26本目までは同じらしいです。

今回は、3、6、14を利用します。(14番は本当は必要ないんだけど、接地まで導線が届かなかった...。)

さて、この3番のGPIOに電気信号を流す方法です。
Raspberry Piのターミナルを開いて、次のコマンドを打ちます。
すると、/sys/class/gpio/内に、gpio2へのエイリアスが作られます。
ここで、次のコマンドを打ちましょう。

これで点灯テストは終了です。

次に、点灯させるためにキーボード入力の検出をしましょう。
とは言っても、調べてみると、キーボード入力のイベントハンドラ(キーボードで打ち込んだら動くプログラム)を検出しないといけないので、ちょっと面倒くさい。
なので、標準入力を使いましょう。

OSには標準でPython2と3が入っているので、2を使います。(3を使ったほうがいいことはわかりますが、調べた方法では3が使えなかった...。)
次にこのコードを書きます。text editerが使いやすいかも。
そして、python2 getch_test.pyで実行しましょう。(実行する前にgetchをインストールしておきましょう。pip install py-getchでできます。)

これでキーボードをカタカタすると光るはずです。

感想

目的は一応達成しました。とにかく、

「クリスマスの光は僕らのタイピングでできているんだ...。」がやりたかった。

反省点としては、
確かに光るんだけども、消えたりしないでほしい。交互に光ってほしい。反転するようにしたら良いかも。GPIOピンを2つ使えばいいかな。
あと、LEDの数が少なくてしょぼい。悲しい。
くらいです。来年もやりたいな。修論...。

2016年7月12日火曜日

paizaコードガールこれくしょんのpython編を終えて

1ヶ月くらい前からちょくちょくpaizaのコードガールこれくしょん(以下コードガール)をしています。
きっかけはPythonを使う・教えるようになったから。

機械学習や構文解析をするときはPythonは必須みたいなところがありますね。
また、低級言語(CやC++)よりも軽量言語(PythonやRuby)の方が学びやすいのかもしれません。(アーキテクチャを知る上では低級言語を学んだほうがいい気もするけど)

コードガールではRuby、Java、PHP、Pythonが学べて、私はPython編を終わらせたというわけです。
感想は、

自分でweb検索して勉強するほうが早い

です。
私はCやC++、Rubyでプログラミングできるので、web検索でPythonの構文を覚えるのは難しくないです。
しかし、

反復練習にはもってこい

です。
1 ~ 17章くらいまであるのですが、標準出力から制御構文、標準入力、乱数くらいしかやらないです。つまり、徹底的に覚えるわけです。
さらに、

タイピングの練習にもなる

のです。
というのも、このゲームでは速くクリアするほど得点が多いのです。したがって、プログラミングもタイピング練習も同時にできるのです。

ちなみに、コードガール「これくしょん」と付いているので、ガチャの要素があります。
しかし、課金は一切ありません。だから、まわし放題。

ガチャ欲と勉強欲が満たせるので、疲れたときの息抜きでやってみるのがオススメです。