Raspberry pi もくもく会 第2回 開催しました

raspberry-pi-moku.connpass.com

今回も永和システムマネジメント様の素敵なコアーキングスペースをお借りして、Raspberry piもくもく会第2回を開催しましたので、そのレポートになります。

当日の様子

台風前の雨にもかかわらず、多い荷物を抱えて皆さん参加してくださいました。おやつもたくさん集まり、食べすぎた!!おいしかった!

当日は、講師付きハンズオン、もくもくハンズオン、自分のすきなことをもくもくのチームに分かれて、楽しみました。

f:id:electricSheep:20171022223736j:plain:w600

  • ネットに繋がらなかったり、うまくssh接続できなかったり、回路図わからなかったり(主に私が)、とにかくトラブル(?)はいろいろあったのですが、参加者同士で助け合ったり、自分で調べて解決したり、各々進めらたのはよかったです。
  • @yuzu_afroさんか作ったLine Beaconを使ったシステムを実際に試して盛り上がりました!

ハンズオン

ハンズオンは、「Raspberry Piで初めての電子工作」というお題で、GPIOを使用しての電子工作と、Webブラウザから、GPIOを制御する方法を学びました。
講師は@yuzu_afroさん 資料はこちら

みなさん、Lチカから、WEBブラウザ経由でLEDやブザーを操作するところまで、一通り終わったようです!
またお一人、家でOSのインストールに失敗していまい、当日会場でOSのインストールから開始したのですが、なんとかLチカまでできて、2人で思わず歓声をあげました。OSのインストールは時間がかかるし、いろいろうまく進まないことがあったりで、少し焦りましたがとりあえずよかったー。

成果発表

その他、成果発表はなかったものの、湿度によって扇風機を回すシステムや、OpenCVWebカメラキャプチャまでできました!という方もいて、もくもくチームの方もいろいろ作っていて楽しかったです!どれも私も試してみたい!とりあえず、この会でもてるために、有機ELミニ液晶「PiOLED」を購入しよう(笑)。それから、今回OSのインストールから始めたラズパイが2台あったのですが、手が回らず1台しかできなかったので、@rednesさんの自動構築で今度試してみたいな。

反省

  • 遅れてきた方の到着に気付くの遅くなり帰らせてしまった・・・。(本当にすみません。。)
  • ラズパイのwi-fi設定 毎回1人ずつディスプレイ、キーボード、マウスにつないでIP調べる方法だと時間がかかるので、なにかいい方法を考えたい。

これら反省点を終わった後にスタッフで話し合いましたので、次回は改善できるようにしたいと思います。

最後に

今回も参加して下さった皆様とわいわいできて楽しかったです!
なによりも、第1回、第2回と続けて参加してくれた方が何人もいて、とても嬉しい限りでした。

次回は11/26(日)になりますでの、またよろしくお願いします!!(懇親会もありますー。)

PyLadies Tokyo 3周年パーティ

PyLadies Tokyo 3周年記念パーティにスタッフとして参加したので、その個人的なレポートになります。

当日の様子など

当日の様子はtogetterのまとめがありますので、こちらで〜。

togetter.com

PyLadies Tokyoは、運営から講師まで全て女性だけで!が設立当初から守られていて、唯一男性が参加できるのが年に1回のこの記念パーティになります。そして、シャンパン片手に、LTを聞く。またいつもと違った雰囲気でわいわいと楽しかったー。

LTは、結局飛び込みLTを含め21人の方が発表してくれました!始まる前は少し多いかなーと思いましたが、ドラがなるシステム(なぜRettyさんにドラがあるのかw)を取り入れたのと、ガチな技術ネタ、PyConJPに参加してのアウトプット、コミュニティやジェンダーの話、PyLadieTokyo 3年間の振り返りの話など、多様なネタでどれも興味深いものばかりであっという間でした。

ただ、PyLadies Tokyoの立役者の@a_macbeeさんが体調不良により不参加だったことが、唯一残念(´・ω・`)だった・・・。

LTしました

slideship.com

ずっと心の奥の方でぼんやり不安に思っていた悩みが、Pycon JPに参加したことで、ぱーっと解消したこと、 また今回LTをしたことで、まわりまわって?「このケースだとCythonもおすすめ!」とのコメントも頂いて、わらしべ長者的に(なんか例えがおかしい?)いろいろな知見を得ることができて、これもコミュニティの醍醐味だなーと。

CもPythonも大好きなので、その両方のいいとこどりができるという方法を知ることができたことは本当にありがたい(^^)

次は、Cythonも勉強するぞー。

PyLadies Tokyo への思い

娘がロボット作りたい!といったことがきっかけて、Python を知り、2016年3月にPyLadies Tokyo に参加しました。PyLadiesで、いろいろ教えてもらったり、刺激を受けたり、発表の機会を頂いたりして、私自身もスタッフとして一緒にPyLadiesを盛り上げたい!という気持ちが高まりスタッフとして改めてJoinしました。
自分の若い頃は女性のエンジニアが少なく、今皆で技術の話でもり上がれるのが本当に楽しい。女性の活躍もサポートできたらいいなーと思っていますので、皆様今後ともどうぞよろしくおねがいします!

内輪話?を少しお話しすると、スタッフやPyLadiesに参加する方は、皆さんさばさばした方が多く、とても話やすいです(笑)。3周年パーティ当日も「インスタ映え!」と、スタッフ皆ここぞとばかり口を揃えていってましたが、結局一番インスタ映えするであろう、Rettyさんの2次会会場全容の写真を誰も撮っていないじゃん!と後から気付きました。皆、言いたいだけでしょ!と心の中でそっとつっこんでみた(笑)

(とはいえ、自分が一番インスタ映え!といって興奮してたのだけどやはり写真を全くとっていなかった・・。)

さいごに

会場やおいしいおつまみ、2次会のお酒&食事を提供していただいたRettyさん、
パーティに必要な備品の提供や豪華なケーキで彩りを添えて下さったGoogle Cloud Platformさん、
美味しいお酒、ケーキ、おつまみや、たくさんのお祝いの気持ちを持って来てくれた参加者のみなさま
本当に本当にありがとうございました!

この記念すべき3周年を皆様と楽しくお祝いすることができて本当に嬉しかった&感謝の気持ちでいっぱいです。

是非また来年の4周年もよろしくお願いいます!

Raspberry pi もくもく会 第1回 開催しました

先日、念願の(?)Raspberry pi もくもく会を開催しましたので、そのレポートになります。

Raspberry Pi もくもく会 第1回

開催のきっかけ

Pyladies x Stapy 合同ミートアップみんなのpython勉強会「Python + Raspberry Pi でロボット製作はじめました」を発表したことがきっかけで、主催者の@akucchan_worldさんから一緒に子供(親子)向けに何かできないかと声をかけて頂きました。ただ、自分自身そんなに知識・経験等があるわけでなく、子供向けということに対するハードルも高く感じられ、よし!まずはRaspberry Pi仲間を増やそう!という思いで、もくもく会を立ち上げました。実はずっと「ラズパイ仲間募集中です!」と小さな声を発していたのですが、実際なにも動きだせていなかったので、そのきっかけを与えてくれた、Pyladies Tokyo とStapy に感謝感謝です!!

会場問題

開催するにあたり、なかなかwi-fiを使用できる会場がみつかりませんでした。そんな中 @kuboaki ‏さんが協力してくださり永和システムマネジメント様の素敵なコアーキングスペースをお借りすることができました。@shinseitaro さん、@yuzu_afro さん、@maaya8585 さんにも多大なご協力を頂きました。この場を借りまして厚く御礼申し上げます!

開催当日

人が集まるのかなーと不安でしたが、connpass にあげた途端定員に達するという人気ぶりでした。やはり、今Raspberry pi があつい!IoTきてますね!

当日は

の3つのグループに分かれて行いました。

ラズパイを箱からまだ一度も出していないという猛者から(笑)、凄そうなデバイス持参でいろいろ挑戦している猛者まで色々な方が集まり、わいわいと楽しい雰囲気でできたかなーと思います。

突然の秋月ツアー開催!

f:id:electricSheep:20170926165745j:plain
秋月

途中でSDが壊れたり、部品が足りなかったりした人もいて、希望者達を募り秋月に買い出しにいくこともできました。 まさに、地の利!秋葉最高!

私は、部品は常にネット購入してたので、実際にかの有名な?秋月にいくことができて感無量でした(大げさ)

成果発表

希望者のみ成果発表を行いました。

  • @soogieさん Sense Hatの値をTwitterでつぶやく
  • @rednesさん ラズパイでサーバーをたて、入力した文字をしゃべらせる(Docomo 対話APIを使用したかったがメンテナンス中だった) ‏
  • @shozawawaさん ハンズオン内容にプラスして、声を女性の声にして位置情報もつぶやけるようにした ‏
  • @shinseitaroさん Open Jtalkが日本語しか話さなかったのでAquaTalk試した(好きなショップのTwitter情報から自分のほしいカテゴリの割引情報をゲットして、つぶやかせたい) ‏

ハンズオンも理解してもらいながら進めらるよう、時間たっぷりにとったので内容が一通り最後まで終わった人は、その先いろいろ自分で試したり、アイデアだしたりして実際に使えるものを作ろうと進めていて、興味深かったです。私もとてもいい刺激をうけました!

感想など

いやー、楽しかった!!

皆が持参したデバイスや部品など見せてもらえるだけで楽しかったですが、ラズパイに関する設定など新しい知見も得ることができました。(得た知見はどこかで書きたい。) 何よりも、ラズパイを皆でわいわいといじるってなんか楽しい(大雑把な感想ですみません)

また、参加した皆様がとても優しくて私のむちゃぶりなどにも快く対応してくださり、大変ありがたかったです。参加してくださった皆様あっての会でした。本当にありがとうございました!

第2回は10/21(土)予定です。またよろしくお願いします!

ラズパイでロボットつくるぞ!(2)

前の更新からかなりの時間がたってしまいましたが・・・。

先日 みんなのPython勉強会#25で発表した資料です。

実際に作ったロボットのデモ(娘が泥棒役です)


お留守番ロボットデモ

ちなみに、この資料は、slideshipというMarkdownを使って簡単にスライドが作成&公開できるサービスを使ってつくったのですが、めちゃ便利!でした。 センスのない私でも、Markdownでただ書くだけで見た目よくいい感じにしてくれた。

みんなのPython勉強会では、ラズパイを触っている方がけっこう参加していて、たくさんアドバイスやいい刺激をうけさらにやる気でました!

最近、Raspberry Pi3も購入して、いろいろやり始めたのでまた忘れないうちに随時Upしていこう。

ラズパイでロボットつくるぞ!(1)

祖父母からクリスマスプレゼント何がほしい?と聞かれた当時小一の娘が、 「ラズパイが欲しい!」(もちろん、私の入れ知恵)と言って買ってもらってから、1年近くたちました。

少しずつですが、娘とロボット作ろう!と奮闘してきた記録を。

文学部出身なので、とりあえず電気やら抵抗値やらそこから?!というところでつまずきました。 が、ラズパイマガジン2016年春号(日経Linux)などを読みながら、なんとか動くところまできたのでそのメモ。

また、ラズパイで作ろう! ゼロから学ぶロボット製作教室にも一から丁寧に書いてあるので、とりあえずその通りに作成してみました!

独立歩行できるために準備するもの

  • Raspberry Pi2 モデルB
  • バイルバッテリー(携帯充電するもの)
  • 無線LAN子機(Wi-Fi USBアダプタ)(Raspberry Pi2 モデルB1は無線LANが内臓されていないため。)
    • PLANEX GW-USNANO2A
  • ブレッドボード
  • モータードライバ(TA7291P)2個
  • 10㎝ジャンパーワイヤー(オス-オス)10本
  • 30㎝ジャンパーワイヤー(オス-オス)4本
  • タミヤから発売されている「楽しい工作シリーズ」
    • 「TRACK & WHEEL SET」(No.100)
        キャタピラー、車輪、車軸のセット
    • 「ユニバーサルプレート」(No.157)
        車体を車軸や車輪に固定するための底板と固定部品。
    • 「ダブルギヤボックス」(No.168)
        二つの車輪を独立して動かせるダブルギヤボックス。モーター2個付き。
    • 「ユニバーサル金具4本セット」(No.164)

結構これがない、あれがないと一度にそろえられず、揃えるだけで大変でした;;

「楽しい工作シリーズ」でキャタピラー作成したあとは、いよいよ配線

1. ラズパイと、モーターをモータドライバーを介して接続

とりあえずはんだづけなどはせず、ブレッドボードを使用しました。 モーター2つ+モータードライーバー2つ で、前輪のタイヤ2つを動かすよう接続。

f:id:electricSheep:20170131223300j:plain:w300

2. ブラウザーを使ってGPIOをコントロール

「WebIOPi」というソフトウエアを使います。

  • ブラウザーから送られてくる指示を「WebIOPi」が受け取り、その指示通りにGPIOをコントロールしてくれる
  • GPIOをマウスクリックでコントロールできる便利なツールが用意されている
  • ラズベリーパイのピンを操作するページでピンの入出力を変更できる

とりあえず、上記サイトで紹介しているプログラムをそっくりコピペして、下記ディレクトリにファイルを保存します。

> cd /usr/share/webiopi/htdocs
> vi rasrobo.html <--プログラムをコピペして保存

3. WebIOPiの起動と停止

> sudo /etc/init.d/webiopi start
> sudo /etc/init.d/webiopi stop
  • ラズパイのIPを確認
> ip a
  • Wi-Fiで接続している場合は「wlan0」の「inet」の部分にIPアドレスが表示されるので、ブラウザーから、そのIP:8000でアクセスできます。
Username:webiopi
Password:raspberry
  • ただ、毎回IPを確認するのも面倒なので、ラズパイに名前をつけて、名前でアクセルできるように設定しました。
 http://rasrobo.local:8000/
  • 下記、先ほどコピペしたプログラムにアクセスします。(同じWifi環境であればPCからでもスマホからでもアクセスできます)
http://rasrobo.local:8000/rasrobo.html

画面でた!!

f:id:electricSheep:20170131223444p:plain:w300

[前進]ボタンをクリック!

前進した!

[左前]ボタンをクリック!

うごかない(T T)

配線間違えてるじゃん! 

などなど、とにかくもりあがりました。 ギヤが軽すぎて、結構なスピードがでたので、ギヤを1段階重くしたり。

5Vの電源でこれだけ動くんだーと感動したり。(といっても5Vがどんなものかわかっていない) とにかく楽しいです!!

ところで、何が一番苦労したかというと、「楽しい工作シリーズ」を組み立てることでした・・・。 

それ以外は、丁寧な解説サイトのおかげで結構さくさくできた(ありがたい)

娘も、ギヤのしくみやモーターを回転させてタイヤを回すことなどなど、たくさん学べたかな。(というか私がたくさんの学びを得ました。)

次は、ロボットが声を出すところを書きたいと思います!

【SQLの書き方とAPIファースト開発セミナー】に参加しました

SQLの書き方とAPIファースト開発セミナーに参加してきたので、そのメモになります。

はじめに

勉強会開催ページでは、下記内容が案内されていて、

SQLは文法ではなくイメージから考える!
テーブル設計はコーディングのあとで行うべし!

そんなばかな!と思いながらも、興味があったのと最近SQLのパフォーマンスの件で困っていたので参加してみたのですが、結果的にとても学びのある勉強会でした。

学んだこと

APIファースト

ウォーターフォール開発では、テーブル設計の変更が必ず起こるので、テーブル設計は後回し、UIを確定してからテーブル設計を行う。

  • 手法
    エクセルでダミーデータを作成し、ストアドプロシジャーを使用して、データベースを作成しないでUIを作成する。先に動くものをユーザーに見せてから、要件を確定しデータベースの設計を行う。
     
  • 利点
    • ユーザーにイメージしやすいものが見せれるので手戻りがすくない
    • エクセルなので簡単にダミーデータをつくれる
    • join とか考えなくてよい
    • 作成したダミーデータがそのままテストデータにもなる

※ 実際に講師の方が作成したエクセルのマクロを使用して、一連の動作のデモをみました。受託開発においては、ユーザーが実際にUIをみないとイメージできず手戻りが発生することがあるのと、テーブル設計の修正はかなりの工数を伴うと思うので、開発側とユーザー側の視点にも沿った合理的なやり方だなと感じました。

SQL小ネタ集

※ 私がoracleを使用しているので、oracleの内容だけをメモしています。実際には他のDBについての言及もありました。

CPUの動作と実行計画

  • RDBMSはブロック単位でレコードを保持しているため、1レコード読むのに、かならずブロック(8kByte)でよまれる。
  • indexで読むと1レコード8kbかかるので、index使わない方がいいことがある。
  • 実行計画にそったきれいなSQLで1回でよむことが、3回にわけてよむよりも DBのCPU負荷が下がる。
  • ネットワークの処理も1回で読んだ方が効率的。
  • 負荷は高さではなく、面積で考える。
  • スケールアウトのためにjOINを避けない。
  • Oracleの場合、ストアドプロシジャーを使うのがよい。依存関係がわかるので、保守性があがる。

RDBMSの違い

  • オラクル v$SQL (仮装テーブル)便利!
    • 実行されたSQLが取得できる
    • 処理に使用したCPU時間などがわかる
  • oracleは全体の10%(?)失敗すると、実行計画を作り直す。
  • MySQlはjoin が遅い。ハッシュjoinがないので。

パラメータテーブル

  • 複雑なロジックを使用して取得しなければならないようなデータの場合、まずはExcelで1行ずつ取得結果のデータを書きだしてから、ロジックに関わるデータを抽出し、そのデータをパラメータテーブルとして作成する。(if分で条件分岐するより、論理値での計算でできる。)
  • ロジックが増えた時に、テーブルに1行追加するだけでOKなので、保守性もあがる。

論理演算を復習しよう

SQLは論理演算に強いと、すぐイメージできる

  • AND(論理積)は掛け算
  • OR (論理和)は足し算
  • 演算の順番も掛け算(AND)が先
  • 論理和の場合、True が1個でもあれば1
  • 論理積の場合、False が一個でもあれば0

さいごに

勉強会で使用した資料は終わった後に頂けるということで、自分が参加時にメモした内容は以上になりますが、その他SQLの書き方など、参考になる点がたくさんありまりた。もしかしたら、私の理解が間違っている箇所もあるかもしれませんが、その辺はご了承ください。

oracleメモ(1)

これまで、業務システム開発でなんとなくSQLを使ってきましたが、最近、大量のデータを扱ったり直接データベースから(プログラムを介さず)データを抽出する作業などが増え、パフォーマンス等も考慮しなくてはならないなぁと、勉強を始めたので、そのメモです。

まずは、これを読む

言葉の定義

スキーマ・オブジェクト(oracleにおける)

  • スキーマは、データの論理構造(スキーマ・オブジェクト)の集まりです。
  • スキーマはデータベース・ユーザーによって所有され、そのユーザーと同じ名前を持ちます。ユーザーはそれぞれ1つのスキーマを所有します。

スキーマの定義はデータベースによって違うのでややこしいですね…。

リテラル

  • リテラルと定数値という用語の意味は同じで、固定データ値のこと。
  • 文字リテラルは、一重引用符で囲みます。一重引用符を付けることで、Oracleは文字リテラルスキーマ・オブジェクト名を区別します。

日付リテラル

  • DATE値を文字列リテラルに指定するか、文字値や数値をTO_DATEファンクションによって日付値に変換できます。
  • DATE値をリテラルに指定する場合は、グレゴリオ暦を使用する必要があります。次の例に示すように、ANSIリテラルを指定できますが、ANSIの日付リテラルには、時刻部分を含めず、書式'YYYY-MM-DD'で指定する必要があります。
DATE '1998-12-25'

PL/SQL

  • PL/SQLは、Oracle社が、Oracle Databaseのためにコンピュータのデータベース言語SQLを独自に拡張したプログラミング言語です。
  • PL/SQLを使用すると、手続き型言語で埋め込みSQLによる処理と同様に、変数の利用やif、for、loopなどの制御構造を記述して業務ロジックをデータベース内に実装することができ、問い合わせ結果の行を一件ずつ処理する場合には、カーソルによるFETCHループでの処理を行うことが出来ます。

ストアドプロシージャ・ストアドファンクション

  • PL/SQLのコードに名前を付けて、解析したコードをサーバに登録し、呼び出しが可能な状態にすることができる機能
  • プロシージャは戻り値無し、ファンクションは戻り値があるという違いだけ。
  • クライアントとサーバーを繋ぐネットワークという遅い通信経路に SQL と結果が何度も行き交うような処理に対して非常に有効です。

とりあえず実際に作ってみる!

[sample1] 10進数->x進数変換

 CREATE OR REPLACE FUNCTION TO_BASE
(
    p_dec   IN    NUMBER, 
    p_base  IN    NUMBER 
)

RETURN VARCHAR2--戻り値のデータ型
IS
    l_str   VARCHAR2(255) default NULL;
    l_num   NUMBER     default p_dec;
    l_hex   VARCHAR2(50)  default '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
BEGIN
    IF (TRUNC(p_dec) <> p_dec OR p_dec < 0) THEN
        RAISE PROGRAM_ERROR;
    END IF;
    LOOP
        l_str := SUBSTR(l_hex, MOD(l_num, p_base) + 1, 1) || l_str;
        l_num := TRUNC(l_num / p_base);
        EXIT WHEN (l_num = 0);
    END LOOP;
    RETURN l_str;
END;
/ 

ストアドファンクションを実際に呼んでみます。

  • 10進数の「22 」を->2進数変換
select TO_BASE(22,2) from dual

return ==> 10110

[sample2] x進数->10進数変換

CREATE OR REPLACE FUNCTION TO_DEC
(
    p_str   IN    VARCHAR2,
    p_base  IN    NUMBER
)
RETURN NUMBER-- 戻り値のデータ型
IS
    l_str   VARCHAR2(255) default p_str;
    l_num   NUMBER     default 0;
BEGIN
    FOR i IN 1..LENGTH(p_str) LOOP
        l_num := SUBSTR(l_str, LENGTH(l_str), 1) * POWER(p_base, i - 1) + l_num;
        l_str := SUBSTR(l_str, 1, LENGTH(l_str) - 1);
    END LOOP;
    RETURN l_num;
END;
/

今更ながら、とりあえずこんな感じで簡単に定義して関数として呼び出すことができるので、とても便利です。    実際、データ抽出作業において、複雑な条件やサブクエリを駆使して無理やりSQLでデータ抽出を行うよりは、ストアドプロシージャを定義して処理を行った方がいい場面もあるので、これからは使っていこう!!