子どものためのプログラミング情報

今年の夏に子どものためのプログラミング道場、CoderDojoに参加しました。

最近、なにかと子どものクリエイティビティをどう育むのか気になります。
というのも、自分に子どもができたり、
FabLabの会員になってレゴワークショップ主催者と仲良くなったり、
今Moffで取り組んでるソリューションを考えだす過程で、子どもの創造性や社会性を育む阻害要因なんかを調べてたりしたからかもしれません。

さて、そんなこんなで、子どもの創造性を育むには、実世界でよく遊ぶことに加えて、子どもの頃からプログラミングに親しみ、本当の意味でのデジタル・ネイティブになる必要があるなと感じているわけです。
単なるデジタルコンテンツを消費する子どもではなくて、消費の先につくるという体験をいっぱいしてほしいなと。

実は、自分が昔やりそびれて今苦労してることだったりするのかなーと思ったりします。

なので、こういう同じ事を思う親が、少しでも情報不足にならないために、子どものためのプログラミング関連情報は整理しておくべきだなーと思って、情報発信サイトをつくりました。

クリエイター・キッズ:子どものためのプログラミング情報

完全ボランティアベースで、現在3名の方にお手伝い頂いています。

まだ始めたばかりなのですが、徐々に同じ思いに共感してくれる人が増えてきて、お互いにがんばっていければなーと思ってます。

ものアプリハッカソンその後 6ヶ月後

2013年1月末頃に行われた第一回ものアプリハッカソンから半年が経過しました。
(半年経った今、第二回ものアプリハッカソンが行われています。)

さて、自分はというと、第二回イベントには参加せずに、
第一回で一緒にだったチームメンバーと、その後開発を継続しています。

継続してる行ってる内容の一部は、FacebookとHPにアップしています。
(今後充実させていかねば。。)

https://www.facebook.com/moff.interface

http://www.moff.mobi


前回のエントリー記事から5ヶ月ほど経過して、
ようやく次のフェーズに移る次期がきたかなと感じています。

この5ヶ月は、コンセプトの練り直しと試作のサイクルを2度ほど行いました。
主な活動内容は次のとおり。
・GOB-Laboratoryさんご協力によるデザインシンキングワークショップ
・顧客開発(顧客インタビュー、観察など)
・ハードの試作とアプリ開発
・量産化のための情報収集
・ピッチ(イベント)

今後も、さらに事業化を意識した活動を続けて行きたいと思います。


それと、まだMoffと直接関係ないですが、
FabLab北加賀屋で、3Dプリンタレーザー加工機
カッティングマシンなど使うスキルが身につきました。
2D/3D CADや電子回路、デザインスキルが上がれば、
ちょっとしたハードの試作もできて面白いなと思ってます。

ものアプリハッカソンその後(約3週間)

ものアプリハッカソンのイベントから約3週間経過。

現状
・チームでの継続をプロトタイプ開発まで合意
 →Done is better than perfect
 →GOB-Lab Tさんと相談
・リモートワーク体制を構築
・デザイナーの参画
・ハードウェアの改善
・Tさんが3月初旬シリコンバレーでピッチ予定
・SVでのピッチまでにプロトタイプをそれまでに作り上げる事を合意
イカ→カエル→(なめこ)→オオサンショウウオへと変化
・Global Innovation Conference Osaka 2013(HackOsaka)でデモ展示
 →大阪市長も成果を見たとの事
 →500StartupsのGerogeや懇親会参加者に即席デモピッチ
・Georgeと語ろうイベント参加
 →ターゲットに詳しく、日本人で500Startupsにいる人の紹介を取り付ける
・ふわふわ・柔らかもの好きデザイナー参画


何人かのフィードバックを得て進化継続中です(feedback loopをまわす段階)
フィードバックの一例:
・怒り以外の感情にも対応
・1to1、1to多、1wayのコミュニケーション
・もっと簡単に


今後、全くどうなるのか予想がつきません。



ものアプリハッカソンでの成果、展示パネルはこれ。

ものアプリハッカソンに参加して

2013年1月26日と27日の2日間で行われた「ものアプリハッカソン」に参加したのでその記録を書きます。

公式WEBサイトはこれ。
http://www.innovation-osaka.jp/ja/events/000003/

TechWaveでも紹介されてました。
http://techwave.jp/archives/51775805.html

読んでくれる人に失礼のないよう、最初に断りを入れると、
この文書は、"ただのログ"です。
どんなイベントだったか知りたい人のために、
参加者ブログ見つけ次第、下記にリンク貼っていますので、
こちらをご覧下さい。

http://blog.factory70.com/diary/mono-appli-hackathon-1

http://arduino-japan.com/article/87

http://d.hatena.ne.jp/forest1040/20130131/1359622531

http://www.kumikomi.net/archives/2013/02/rp03hack.php?page=1

http://doogdesign.blog.fc2.com/blog-entry-34.html

http://smash-panic.com/creativenture/mylog/?p=381

http://www.studio-bloom.net/%E3%82%82%E3%81%AEx%E3%82%A2%E3%83%97%E3%83%AA%E3%83%8F%E3%83%83%E3%82%AB%E3%82%BD%E3%83%B3/

http://www.kumikomi.net/archives/2013/02/rp08hac2.php

ぶっちゃけ、WEBサイトの表記や表現が不評で前評判がよくなかった(後述)けど、
参加者してみて感じた結果は、すごくよかったです。


モノ=Arduino x アプリ= Androidなイベントで、サーバーサイドメインな自分が参加していかがなものかと思っていましたが、考えてみると、サーバーサイドのバックエンド側の人間として貢献できる事は多いにあると思って参加しました。


サーバーサイドを生業にしながらも、この分野は2012年はじめに強烈に関心を持った事もあって、
パーツ買い込んだりしていたので、これをきっかけに的な事を考えていました。


1日目:アイデアワークショップ


最初はGOB LabのYさんの話で始まりました。
・プロボクサーでも試合をデザイン、設計する
・市場調査で2%しか欲しくないものでも、欲しい人がいる
・ユーザーの想定を裏切る = インサイト
・マス→セグメント→インサイト←実在の一人/具体的な人
・バイアスをブレイクした瞬間に、実現障壁が多くでてきて解決しようとすると機能が多くなる
・実現障壁を解くには、複数の価値を一発実現するアイデア
・何度も何度も意図的にイノベーションを起こす


GOB LabのYさんのファシリテーションで、
4人1チームで、ニーズとインサイトを見つけるワークをします。
あるフレームワークに沿って、アイデアワークするというものでした。


プロダクトの作り方
・ユーザー発見:実在の1人のユーザーを発見する
・ユーザー理解:ユーザー体験/経験を見る、聞くことで、その状況をリアリティをもってイメージ
・目的の定義:ユーザーの発言、行動などの情報を基に、ユーザーが実現したいと思っている事とユーザーも認識していない要素は実は実現したい本当の目的を定義
・アイデア発想:バイアスをブレイク、複数要件を一発実現
・プロトタイプ:形にする
・テスト:フィードバックをもらう


次の3つから1つテーマを選ぶ
1. 家族のコミュニケーションを革新するおもちゃを創りだせ
2. 「カワイイ」で旅行経験を確信するプロダクト
3. オフィスでの生産性を向上させるロボット



我々のチームはテーマ1を選定。
理由は、ユーザー発見ワークで、下記問題が身の回りにあることに着目したからです。
・両親の会話がない、離婚してほしくない
・遠隔の一人暮らし老人、電話が多い


ニーズからインサイトを見つけるコツは以下
・本人を理解する
・本人のバイアスをはずす
・非常識を許す


大前提を否定してみる
なぜなぜを問いつめる


マップからインサイトを得るワークショップもしました。
・孫の成長を記録したい→動画をもとに会話したい
・家族の思いでを残したい→家族をひとつのこまにみたてた、自分の理想を得たい。思い通りにいかない現実を映像でいい家族を実現したい
・家族のつながりを感じたい→自分のことを忘れてほしくない
・家族の思いでのいい部分を残したい→自分のやってることを認めてもらいたい
まとめると、
ニーズ:家族の生活を記録として残したい
しかし、本当は、、
インサイト:良い家族を築いたという達成感を得たい
→自分が正しかったということを確認したい
 →自分がこの世に存在していることを実感
→寂しさを感じたくない


実在の一人について深堀りして、
経験に着目してニーズを分析してインサイトを見つけていきます。
確信したアイデアを革新させるために、対極のことを考えました。




ワーク自体は、こんな感じで、d.thinking



夕方には疲れてヘトヘトの状態でした。
ヘトヘトでもプレゼンします。
プレゼン形式は以下
・製品コンセプト
・紙芝居(ない/ある)
・製品デザイン


発表されたものの一部をあげると、
・自分の気持ちを分かち合える→感じている事を増幅して新たな分かち合い
・離れて住んでいる、冷えた夫婦間→気軽に発信できる、面と向かって話せない事を通知→「あのね」声をデバイスにかけると、誰かが反応してくれる
・おばあちゃんのぽち袋を見て、形に残る物をのこしたい→自分の事をだれかに覚えておいてほしい→日常の生活を通して無理なくコミュニケーションとれるようにしたい→仏壇の鈴を鳴らすと若者へ通知され鳴らし返す、ちょっとしたコミュニケーションできっかけ。なんとなくおばあちゃんの雰囲気。
(個人的に、これが一番面白いと思った)
・働くママ、思い出をつくりたい→ママ友との会話を旦那に角が立たずに知ってもらいたい。旦那に子育てに参加してほしい→子育てを共有したい。→プラネタリウム x ブレスレッド → 遠隔で子どもを寝かせる
・親子の会話を促す親父ロボ
・一緒に育てるもの
・旅行好き30代女性→かわいいと言われたい→写真サイズの絵はがきを出力できる、ホテルのフロントにあったら出力、日本に送る→ホテルのクーポン、タダでハガキを送信できる、
・寂しさを感じたくない→自分の感情を自覚して、負の感情を相手にさりげなく伝える
など


運良く自分たちのチームアイデアを実装へとつなぐことができました。
自分たちのアイデアは、怒りを感じたらイカを握って、相手にさりげに伝えるというもの。



19:00からのCEREVOの岩佐さんの話が、想像以上によかったです。
Why HW Startup:
スーパーニッチ、グループ、縦軸が細くなってる、難/金/危が下がってる、クラウドファンディング、アジア活用



1日中激しくアイデアワークするのは、2004年に受講したアタッカーズビジネススクール以来の気がします。
ってか、それと比較すると、3,000円は安いですね。安すぎますね。
私はそう思います。




2日目:ハッカソン、プレゼン


メンバーが2倍に増えました。4→8人です。
GOB LabのYさんの説明では、メンバー増強だということだそうです。
確かに、自分たちのチームにJoinしてくれたHW技術者は、
後にいなくてはならない存在でした。


さて、作業開始したわけですが、
Arduinoで仕事をしていたり、趣味にしている熟練者はほとんどいませんでした。
チームメンバーは、1日目の夜に本格的に触り始めた人がほとんどです。
どうなることやら、、


主にArduino, Android, Server, コンセプト/UI/プレゼンのチームに2,3人で分かれて分業。
つくるものが、シンプルでハッキリしていたから、
かなりの割合で No Talk, All Action 状態です。


最初じぶんの頭の中で考えてたプロトタイプはこんなんでした。
・ボタンを押したらLED
Androidへボタン押した回数を通知
Androidのデータをサーバーへアップロード
・サーバーへ追加されたデータを表示(履歴)
・サーバーのデータ表示されてる部分の送信ボタン押したら、メール飛ぶ
・メールにURLかかれてるので、URLにアクセスしたら確認画面
・確認画面で、送信したら、相手にメール


私はServer担当だったので、AWSでEC2インスタンス立ち上げて、
Python入れて、Django入れて、DB設定して、Androidからのレスポンスを受け取って処理して、
HTMLやJSONデータ返して、というものをつくる役目でした。
あと2人ぐらい手が欲しかった。。


はい、気がつけば4時です。プレゼン開始1時間前です。


しかも、いきなり、ユーザーテストするので、人を派遣しますと言われます。
でも、テストするようなモノができる直前です。大事な時間です。


こんなタイミングでユーザーテストの意味がありません。
みんな黙々と作業しますが、人がいいHWエンジニアが派遣された人につかまってしまいました。
意味のない事に時間を裂かれて困っているのを見かねて、ついつい言っちゃいました。
「今は作る時間が必要でうす。ユーザーテストは意味がありません。」
派遣されたというか、スタッフの方にも申し訳なかったのですが、
主役は私たちです。
言いたい事は、はっきり言うべきだと思ったのです。


そんなこんなで、つぎはぎで、各パーツのInterfaceを確認して、
プレゼン準備ドタバタで仕上げました。



っで、できたのが、これ。
「怒りを愛にカエル君」(英語名どうしよう。。。)


写真のHW部分を作ったエンジニアのKさん,Sさんが、
機転を利かせてブザーやクッションつけたり工夫なかったら、
見せる部分ってのが少なかっただろうと思うと、ほんと感心します。



審査の結果、惜しいで賞(?)


審査員の方からいただいた講評は、自分たちにない視点満載で、今後のプロジェクトに参考になる意見ばかりでした。
・価格設定の視点
・シンプルさの重要性
・先進的なものの見方
・PIVOT



さて、このプロトタイプを仕上げるべく、活動継続していくつもりです。



                                      • -

余談ですが、自身、主催する中の人と働く場所が近かったので、開催前の情報が少しだけ入ってきたりしていました。
全く初だらけのイベントで、前例のないことに挑戦するイベントだったようです。
しかも、行政が主催。。。(様々な制約があることはよく耳にはさみました)

そんな主催側の事情もあったわけですが、絶対に成功させる!と意気込む方を応援したいと思って、失礼を承知で、参加者として事前に色々つっこませていただいたりもしました。
もちろん、自分としても同じ想いを共有していましたので。
(ほんとに、M.Tさん、C.Tさんの懐の深さには脱帽です。)

今までの自分であれば、そんなことしても自分に得はないと思うのでしたが、2012年末に参加した勉強会でのK.Aさんの言葉「何か言いたかったら、参加してからいいましょう」「イベントの方向性やコンセプトは素晴らしい」と言っていたので、色々意見伝えたいし、参加するので自分も意見を言ってみようと思ったのです。

そして、私と周りから聞こえてきた、イベントに対して感じるもやもやを伝えたことは以下のようなことでした。
ハッカソンという言葉はさておき、ワークショップかハンズオンという意味が強いかもしれない
・自分のようにAndroidはサンプルプログラム動かす程度のWEB中心のソフトウェアエンジニアは厳しいかも。
・一見面白そうに思う
・募集にあるWEBプログラマーという表現がただしくない
JavaができてAndroid端末持参って、Androidプログラマーの方が近い
ADKで何か作った事ある人というのが正しくないか?
・ある意味、AndroidTwitter連携やDataをWEBに蓄積するような場合はWEB系もやったことある事は必要でしょうけど
Android系トップクラス開発者でも2日間で何か形になるものを作るのはきびしい
Arduino+ADKは難しい
・何かつくるのであれば長期的な期間イベント(MashupAwardやMSUC2013など)でないと結構厳しい
・そもそもハンズオンとハッカソンを混同してるようにみられる、どっちかわからない
・Tech/Geek Communityでいうハッカソンの趣旨と大きく乖離しているのでGeekは敬遠するのではないか
・専門外のハッカソンに参加しても歯が立たない、というかそもそも参加するの場違い
・専門外のハンズオンなら参加してもいいかも
・そもそも誰にどうなってもらいたいのかよくわからない
・通常ハッカソンイベントで3千円の参加費というのはレア
・この分野に詳しい人に中心的な事を決めさせたり告知文をチェックしてもらうと見え方も違うのでは?
・初対面同士の人で4人以上のチームだと意見まとまりにくくなるけど、収拾つくのか?


結果、こういった不安要素はほどんど当日は感じませんでした。
何事もそうですが、最大限努力すれば、問題は解決に向かうんですね。

MagentoにMagmiを導入して大量商品インポートしてみる

Magmiを使ってMagentoにCSVでデータを登録してみようと思います。

諸事情で数十万件のデータをMagentoに登録する必要があり、
Magentoの標準機能としてのインポートでは対応しきれなかったのでこのソリューションを見つけました。


Magmiの発見はここです。
http://www.magentocommerce.com/boards/main.php/viewthread/292766/#t405580

Magmiについて
http://www.magentocommerce.com/boards/viewthread/201210/
Magento1.6にも1.7にも対応している。
CLIで動作する。GUIがある。

Magmiの使い方はWikiを参照
http://sourceforge.net/apps/mediawiki/magmi/index.php?title=Main_Page


ダウンロードはここから
http://sourceforge.net/projects/magmi/
http://sourceforge.net/projects/magmi/files/magmi-0.7/plugins/

以下のファイルをダウンロード

magmi_0.7.18beta2.zip
magmi_extra_plugins_20121114.zip
magmi_utilities_plugins_20121106.zip

magmi_0.7.18beta2.zipを解凍して、中身をMagentoのドキュメントルート以下に配置します。
パーミッションは775にする。
pluginsディレクトリにextraとutilitiesのプラグインファイルを置く。

私が使用しているMagentoのバージョンは1.6.2です。

サーバー側でインポートディレクトリを作る

$ cd /var/www/html/magento/magmi
$ mkdir var
$ mkdir import
$ mkdir state
$ sudo chown -Rf apache.dev var
$ sudo chown -Rf apache.dev state

サーバーへpushしたディレクトリのパーミッションを755から775に変更する

$ sudo su
# find magmi -type d -perm 755  -exec chmod 775 {} \;

もしエラーがでたら、パーミッションを疑う。
magmi/stateディレクトリがないのでつくらないといけなかった。
magmi/var/importディレクトリもつくっておく。

ブラウザで次のページにアクセスする
http:///magmi/web/magmi.php


MagentoへインポートしたいCSVファイルを次のディレクトリに配置する。

/var/www/html/magento/magmi/var/import/

GUIはこのページに掲載されているので参考に。
http://sourceforge.net/apps/mediawiki/magmi/index.php?title=UI_Main_page_organization


GUIのConfigure Global Parametersにて各種パラメータを設定する。
DB、Magentoのバージョンなど。


Importデータのフォーマッットについて。
ファイルの種類はCSVです。
defaultだとMagentoで使われているDataflowフォーマットが使われている。
http://sourceforge.net/apps/mediawiki/magmi/index.php?title=Import_-_CSV_datasource
http://sourceforge.net/apps/mediawiki/magmi/index.php?title=Column_mapper


MagentoのDataflow CSV フォーマットは、4種類の列がある。

1- Product scope columns
	store
	websites
2 Product nature columns
	attribute_set
	type
3- Product option columns
	status
	all product display info columns
	all product date related columns (xxxx_date)
	all product stock options columns
4- Attribute columns
	all columns matching your product attributes code (standard or custom).

カスタムオプションを今回使うので、次のとおり設定する。
http://sourceforge.net/apps/mediawiki/magmi/index.php?title=Custom_Options

GUIプラグインCustom Option を有効にしておくこと。
CSVに記載するカスタムオプション列のフォーマットは、Name:Type:is Required:sort number
Typeは今回であればfieldとmultipleを使う。
multipleの場合、値が複数あるので区切り文字として「|」を使う。
価格などを付加する場合のフォーマットは、値の後ろにオプションをつける。

 Value:[fixed|percent]:price_modifier:[sku_modifier]:[sort number]
	 例:Small:fixed:0:-S:1|Medium:fixed:5:-M:2|Large:fixed:10:-M:3

カスタムオプションがあると、例えば、次のようなcsvフォーマットになる。

sku,name,description,price,Size:drop_down:1
T-Shirt1,T-Shirt,A T-Shirt,5.00,Small:fixed:0:-SM|Medium:percent:2:-MED|Large:percent:3:-LRG
T-Shirt2,T-Shirt2,Another T-Shirt,6.00,XS:fixed:0:-XS:1|S:fixed:0:-S:2|M:fixed:1:-M:3

どうやってImportデータをインポートするか?
ファイルをサーバーのmagent/var/importに配置する
GUIで、[File to Import]欄からファイルを選ぶ。
GUIで[Run Import]ボタンをクリックする。

削除はできるのか?
http://sourceforge.net/apps/mediawiki/magmi/index.php?title=Product_Deleter

更新はできるのか?
http://sourceforge.net/apps/mediawiki/magmi/index.php?title=Update_existing_products

できます。


実際に、約60万件のデータを数時間以内で追加/データ更新できるようになりました。
感謝。





New Relicをつかってみる(2)

New RelicをPythonアプリケーションに導入してみたいと思います。


Pythonのエージェントのインストール
https://newrelic.com/docs/python/python-agent-installation


Gunicornを使ってるので、このドキュメントを参照します。
https://newrelic.com/docs/python/python-agent-and-gunicorn

その他Pythonのドキュメントは参考まで。
https://newrelic.com/docs/python/


サーバーに接続して、virtualenv環境を指定。

$ workon app

$ cd /var/www/app

newrelicをインストール

$ pip install newrelic

$ newrelic-admin generate-config LICENSE-KEY newrelic.ini
※LICENSE-KEYの部分には、NewRelicで取得したキーを入れる

$ vi ~/.virtualenvs/app/lib/python2.7/site-packages/newrelic-1.7.0.31/newrelic/newrelic.ini 
log_file = /tmp/newrelic-python-agent.log
license_key = LICENSE-KEy

$ newrelic-admin validate-config ~/.virtualenvs/app/lib/python2.7/site-packages/newrelic-1.7.0.31/newrelic/newrelic.ini

通常、gunicornを起動するには下記ですが、

$ gunicorn_django -b localhost:8081 --log-level=debug

NewRelic監視するには次のコマンドを実行します。

$ NEW_RELIC_CONFIG_FILE=~/.virtualenvs/app/lib/python2.7/site-packages/newrelic-1.7.0.31/newrelic/newrelic.ini newrelic-admin run-program gunicorn_django -b localhost:8081 --log-level=debug


あと、CentOSにサーバー監視を入れてみます。

$ sudo rpm -Uvh http://yum.newrelic.com/pub/newrelic/el5/x86_64/newrelic-repo-5-3.noarch.rpm
$ sudo yum -y install newrelic-sysmond
$ sudo nrsysmond-config --set license_key=LICENSE-KEY
$ sudo /etc/init.d/newrelic-sysmond start
Starting newrelic-sysmond:                                 [  OK  ]
$ sudo chkconfig newrelic-sysmond on


これで、NewRelicの管理画面を見れば、、

参考:http://understeer.hatenablog.com/entry/2012/10/10/140709