僕は発展途上技術者

TensorFlow.jsとScratchXとをつなげて、機械学習を簡単に体験、利用できるML2Scratchを作ってみました

機械学習を気軽に体験し、なおかつそれを利用してScratchの環境でプログラミングできるので、簡単に動くアプリケーションを作ることができるML2Scratchを作ってみました。

» ML2Scratch - GitHub

上記デモ動画では、ウェブカメラでグー、チョキ、パーの画像をいくつか取り込んで機械に学習させたあと、学習した結果からウェブカメラに映る手の形を判定し、ScratchX上のネコのキャラクターに「グー」「チョキ」「パー」と言わせるという簡単なプロジェクトを紹介しています。

機械学習には、膨大なトレーニングデータが必要と思われがちなのですが、Googleから発表されたばかりのTensorFlow.jsを利用することで、それぞれ20枚ほどの画像を用意しただけで十分な精度の判定を実現できるので驚きです。

「手の形を判定するんですよ」と指定することなく、ただひたすらに各分類ごとの画像を学習させるだけなので、たとえば、赤い色のものばかりを見せたあと、青い色のものばかりを見せて学習させることで色を判定したり、同じ人の顔を角度をいろいろ変えて学習させたあと、次に別の人の顔を学習させることで簡単に顔認識を実現することもできたりします。

指を上下左右それぞれの方向に向けた画像を学習させて、それをコントローラー代わりにしてキャラクターを動かすゲームを作ることもできます。

機械学習の数学的な知識などが必要となってくる実装部分はブラックボックスのまま、それをアプリケーションにどう応用するか、あるいはどう楽しむかを考えることができるフェーズに移ってきたのかな、ということを感じさせてくれます。

Pythonistaで合気道の審査技イメージトレーニングアプリを作ってみた

合気道には試合がない代わりに昇級・昇段審査というものがあります。技の名前を言われたら、それを演武するのですが、級・段が上がるに従い、その数が増えていきます。審査というものは、普段の生活ではなかなか味わえない緊張感を感じるもので、プチパニックに陥り頭が真っ白になってサッと体が動かないこともままあります。また、記憶の引き出しの金具も錆びついてきていて、なかなか滑りが悪くシュッと引き出すことができなくなってきています。

そこで、ランダムに技の名前を言う、というだけのイメージトレーニングアプリを作ろうと思い立ったのですが、たったそれだけの機能を作るためのiOSアプリを作るのは面倒だなと。。電車に乗っているときに聞けるように、iPhoneで使えるようにはしたいのです。

そこで、以前に購入してインストールはしていたのですが、積読ならぬ積アプリになっていたPythonista 3を使ってスクリプトを作れるのではないかと、実際に触ってみたのですが、これがびっくりするくらい強力でちょっと引くくらいでした。よくこれ、App Storeのレビューを通ったなと… 簡単に言ってしまうとPythonの開発環境で、Pythonでちょっとしたスクリプトが作れるくらいに思っていたのですが、iOSの様々なAPIにもアクセスでき、Objective Cとのブリッジ機能も提供しているので、もはや何でもできてしまうんじゃないかという強力ツールでした。

Pythonistaがどれだけ革命的かは、こちらに書かれています。

» iOS上で動作する革命的ものづくり環境「Pythonista 3」の魅力をとくと語る

で、できたのがこちらの審査技イメトレアプリです。配列に入れた審査技をランダムに言ってくれます。全て漢字で書くとおかしな読み方をする箇所があったので、そういうところはひらがなで書いたり、うまく切って読んでくれるように、適当な場所に読点を打ったりしています。

僕はこれを聞いて、頭のなかで技の型を思い浮かべるのです。

配列の中身を変えれば、英単語の練習だとか、いろいろ応用できそうです。大したコードではないですが、一応、このエントリーの最後に公開しておきます。

そして、Pythonista、App Storeを通さず、自分用にちょっとしたアプリを作ることができて大変便利そうです。たとえば、位置情報を取得して、最寄り駅 + 「もうすぐ帰るよ」というLINEメッセージを送るだけのアプリだとか、いろいろと作ってみたいと思います。

【再掲】ドメイン紛争。英文での反論例

14年前(!!)のエントリーの再掲です。

オリジナルはこちら -> 3mon.com ドメイン紛争。英文での反論例

反論メールを掲載していたサイトをうっかり更新し忘れで失ってしまったので、Intenet Archive で掘り起こしてきました。

時代は変わり、個人でドメインを登録してウェブサービスを作ろうという人は減ったのかもしれません。またそのドメインを停止するようにと企業から連絡を受けることも少なくなったのかもしれませんが、もし同様に困っている方がいたら、そうした方の参考になればいいと思って再掲しました。

=== ここから再掲部分 ===

3mon.com はあるアメリカの会社から、その会社の会社名と紛らわしいということでドメインの使用を停止して欲しい、という連絡をドメイン登録の代行をお願いした会社経由で受けました。

しかし、この Web サイトはいっさいその会社と関係ありませんし、3mon.com というドメイン名を使ってその会社に対して何か悪さをしようという意図は全くありませんでした。 このため、連絡を受けたときはかなり困惑すると同時に、「このまま訴えられたりするんだろうか」なんてびびってしまいました。何せその会社はアメリカの会社といえども、誰でも一度は名前を耳にしたことがある会社。そんな大企業に一個人が立ち向かってもしょせん無駄だろう、とさっさとドメインを明け渡すのがいいかな、とも思いました。

しかし、ドメインに関わる仕事をしている知人経由で専門家の方のアドバイスを受けているうち、「そんな暴挙を許してはいけない。少なくとも反論くらいはするべきだ」という結論に達したので、以下のような反論のメールを送りました。

その後、その会社からの連絡はないままもうすぐ2ヶ月が過ぎようとしています。向こう側には分がないということであきらめてくれたのだろうと楽観視しております。

私と同じように、個人でドメインの登録をしたら、そのドメインを停止するようにと企業から連絡を受けて困っている方がいるかもしれない。そうした方の参考になるかもしれないと思ったので、反論のメールをここに掲載しました。

なお、断る必要もないかとは思いますが、念のため。この反論のメールを参考にして実際に反論した結果、トラブルに巻き込まれたとしても私は一切責任を負いません。自己責任でおこなってください。あるいは心配であれば弁護士など専門家に相談することをお勧めします。

xxx: 相手側担当者

yyy: ドメイン登録会社

zzz: ホスティングサービスの会社

mmm: ドメインの停止を求めてきた会社

Dear xxx,

I am writing you concerning the domain name "3mon.com" which I registered through yyy.
You should have received the message from yyy replying to the letter you sent them on July 16, 2004
regarding "the Registration and Use of "3mon.com" Ref. No. nnn". yyy notified me that they have not
received any response from you, so I am writing this message by myself to make sure my message is
conveyed to you.

I would like to continue to use "3mon.com".

I have no intention to confuse customers of mmm Company, and I believe I have not actually confused anyone.
The attached is the access log of "Search word" during this one week (zzz allow the users
to access the access log of only the last one week). Some of keywords are Japanese, so please have someone
translate them for you. You will find that no one has reached my web site by searching "mmm" or
any "mmm" product name.

The following one paragraph should be already mentioned in the reply message from yyy, but I will repeat it.

The name "3mon" came from one of the well-known Japanese saying "HAYAOKI WA SANMON (3mon) NO TOKU"
("Early riser gains three coins" or "The early bird catches the worm" in English) "mon" is the old
currency in Japan and "3mon" stands for "a little precious money."

I clearly say that "3mon" comes from that saying in the top page of my web site. If you have someone
who understands Japanese, please ask that person to translate the web site for you. Almost all Japanese know
this saying and I think no one will imagine that my web site is something to do with "mmm", an American company.

I get up early because I believe it gives much more productivity. I spend the morning for programming software or
for learning programming and I use my website to show my work, that is, some software tools and programming tips.
That's why I named my web site "3mon.com". Anyone who is interested in my work can retrieve them in free.
Recently I created a sub page (http://3mon.com/cgi-bin/movingsale.cgi) for selling some of my household goods
because we will move back to Japan, but this is absolutely nothing to do with "mmm" product.

I didn't register this domain for the purpose of selling. I have never tried to sell the domain name to other party,
and I will not do in the future.

By the above explanation, I hope I could persuade you to stop asking me to terminate the use of "3mon.com".
But if you still insist that I should stop using "3mon.com", please let me know and clearly explain why I should do so. 

Sincerely yours,

Junya Ishihara(webmaster@3mon.com)

ストアカで中国語の体験レッスン「ゼロからカンタン超速入門講座」を受けてみた

あらゆるスキルの個人教室、ワークショップを検索できるウェブサービス「ストアカ」でみつけた中国語の体験レッスン「ゼロからカンタン超速入門講座」を受けてみた。

ストアカを試してみたいなと思っていたのと、IT界隈では熱い深センを春頃には訪れたいなと思っているので中国語を勉強し始めたいなという目的を一気に2つ達成しようと思ってのことだ。

結論から書くと、何か新しいことを始めるときは大概最初の敷居が高いのを低めてくれるストアカも良かったし、忙しい社会人向けに非常に効率良く概要を教えてくれる講座の内容もとても良かった。

中国の方は合理的というのを聞いてはいたが、講師の陳氷雅さんの教える内容は、ポイントがコンパクトにまとまっていて非常に合理的。中国人の考え方から始まり、ここをおさえればとりあえず通じるという最低限のポイントをコンパクトに教えてくれるので、短い時間で使えるようになりたいというこちらの要望にぴたりとはまる。

あまり内容に触れすぎると営業妨害になるので、ひとつだけ印象深かったことを挙げる。中国語の母音の発音は日本語よりも強くはっきり発音するため、日本語のように口をあまり空けず「ァ」と発音してしまうと通じにくいとのこと。かなり意識して大きめに「ア」と発音するのだが、あまり慣れていないのであごが少し痛いくらい。この感覚は英語の発音と似ている。アメリカに住んでいた時に英語の発音を教えてくれる夜間の社会人向けの講座に参加したことがある。そこで、アクセントがついている母音をかなり意識してほかよりも強めに発音すれば通じやすい、ということを習ってからは、それまでと比べて格段に通じるようになった覚えがあるのだが、それと要領は同じ。

日本語を使うときとは顔の動かし方まで変わるほど大げさになるため、これが日本人にとってはどうにも恥ずかしい。いわゆる帰国子女っぽい、なんだかかぶれてる感がでてしまうのだが、これを恥ずかしがらずにクリアできるかどうかが言語習得の鍵だと思う。

とまあ、効率よく学べるコツを少し教えてはもらったが、この後はいかに継続してコツコツ勉強できるかどうかにかかっている。

アメリカのオンラインバンキングサービスに悪戦苦闘

アメリカに住んでいたときに使っていたWellsFargoの銀行口座のオンラインバンキングサービス、これまでずっと使えていたのに最近になってログインできなくなってしまった。ログインしようとすると、認証用のコードを送ろうとするのだが、どうも日本の携帯電話の番号には送れないよう。。

というわけで、カリフォルニアの夕方にあたる午前中にカスタマーサービスセンターに電話で問い合わせ、2時間にも及ぶ激闘の末にようやく勝利してログインできるようになった。

最初の担当者は「認証用のコード送れない、無理!(いやだから問い合わせていて、何とかしてもらいたいんだけど。。)」の一点張りなので、あきらめてかけ直す。

次の担当者、女性でやさしそう。。からは、「Debit Cardを郵送するので、受け取ったらその番号を認証代わりに使える」「じゃあ、送って」「別の番号を教えるから、そちらで郵送の手続きして」とたらい回し。

そして、ようやく最後の渋めの声の担当者、いきなり電話に出たので、もはやコールセンターの担当者ではない様子、にChecking Accountの口座番号やらSaving Accountの口座番号やらSocial Security Numberの番号を聞かれ、ようやくDebit Cardを送るというところまでたどりつく。で、試しにログインしてみたら、Debit Cardを郵送する手続きをする、ということがどうやらトリガーになっていたらしく、受け取るのを待たずしてロックが外れていて、無事ログインできるようになった。

ログインできたときは、ガッツポーズ、何とも言えない達成感を味わったけれど、無事またログインできるようになったという考えてみたら別に大したことのない成果。。高度にゲーミフィケーションされたアメリカ生活の洗礼を久々に体験した。

サーバー(Ubuntu)上でBlenderを動かし、objファイルをインポートしてレンダリングする

最近はUnityやらARKitやら、Blenderを触っていてだいぶ3D慣れしてきました。

objファイルをブラウザからアップロードし、そのファイルで定義された3Dオブジェクトのスクリーンショットを表示したいという要望があり、いろいろと方法を調べたところ、サーバー側でBlenderを動かしてobjファイルをインポートしてレンダリングすればできるということがわかりました。その手順を紹介します。

まずサーバーにBlenderをインストールします。2018/1/11時点で最新の2.79をインストールするため、最新のパッケージを含んでいるレポジトリをadd-apt-repositoryで追加してからapt-getでインストールします。

% sudo add-apt-repository ppa:thomas-schiex/blender
% sudo apt-get update
% sudo apt-get install blender

参考 http://ubuntuhandbook.org/index.php/2017/09/blender-2-79-released-install-it-in-ubuntu/

BlenderはGUIで操作する3DCGソフトなのですが、操作内容をPythonで書くことができ、コマンドラインから実行することができます。

以下が、「--」以降の第1引数で指定した.objファイルを読み込み、第2引数で指定した.pngファイルにレンダリングしたイメージを書き出します。この.pngファイルがスクリーンショットになります。

Blenderを起動するとデフォルトでライトとカメラ、立方体のサンプルのオブジェクトが表示されるので、以下の命令で立方体のサンプルを削除しています。

bpy.data.objects.remove(bpy.data.objects['Cube'])

以下のようにして、Blenderをコマンドラインで呼び出します。

% blender --python import_obj.py -- cone.obj cone.png

--pythonオプションの後に、pythonスクリプトimport_obj.pyを指定し、-- 以降、第1引数にcone.objを指定し、第2引数に書き出す画像ファイルcone.pngを指定しています。

cone.objは円錐の3Dオブジェクトの頂点データを持っています。

上記コマンドで書き出されるcone.pngは以下の通りです。

cone.png

上記import_obj.pyは一つの.objファイルを読み込むだけの非常にシンプルなスクリプトでした。複数の.objファイルを読み込んだり、マテリアルを適用したり、カメラの角度やライトの当て方を変えるPythonのコードを追加することで自在に3Dオブジェクトのキャプチャを取ることができます。

The meaning of "Champion" in CoderDojo

各CoderDojoの代表者をChampion(チャンピオン)と呼びますが、ボクシングのチャンピオンなどを連想して他のメンターよりも優れている、あるいは偉いイメージを与えてしまってかねてから違和感を感じていました。初期の頃は CoderDojo Founder(最初に作った人)などと呼び、Championという呼び名はありませんでした。そこで調べてみたところ、https://coderdojo.com/start-a-dojo/ で、Dojos are Championed by individuals のように動詞として使われているのを見つけ、「おや?」と思ったのです。動詞だと「〔人・主義などを〕擁護する、支持する」という意味があり、その場合の名詞としてのChampionには、強くサポートする人、守る人という別の意味になります。どうもこちらの意味で使われているんじゃないかと思い、以下疑問をかかげたところ、CoderDojo Foundation の Nuala さんより「そのとおりだ」という確認のコメントをもらいました。

英語のニュアンスがわれわれ日本人にはやや違って伝わっている例として共有したいと思います。

===

The one who set up local CoderDojo is called “Champion”. For Japanese people, “Champion” sounds like someone who is superior than others, a person who defeated many rivals, like a champion in boxing matches.

I am involved in CoderDojo community since 2012, and at that time the founder of Dojo was not called “Champion”. I don’t remember well, but I think it was called "coordinator" or it was just "the first mentor". When someone calls me “Champion”, I feel a little hesitancy.

Then, recently, I found that “Champion” is used as verb in “Start A Dojo” guide as follows.

Dojos are Championed by individuals all around the world who are passionate about giving young people the opportunity to learn to code. 

In this context, it seems that "champion" is used like "support" or "defend", and I found that the noun "champion" has another meaning like "supporter".

So, "Champion" has 2 meanings.

  1. someone who is superior than others, a person who defeated many rivals, like a champion in boxing matches.
  2. someone who strongly supports something.

It seems that CoderDojo Champion means number 2.

I want to know if my understanding is correct and how native speakers or people in other countries think about this. Please feel free to leave your comments.

小さなリスクを取ることのすすめ

日本ではいままでオオカミは悪とされてきて、ヒツジが善だった。つい20年くらい前までは転職しようとすると「1つの企業に定年まで勤めるのが人間としての道だ」みたいにいうジジイがいましたが、最近では田舎しかいないだろう。まだ牧畜が盛んだったときはヒツジも大事にされたわけですが、いまや化繊(ITとかロボットの人工物)がメインになって羊毛のニーズが激減したと考えれば分かる。これからはオオカミの意識を持たないと最後は屠殺処分が待っているわけです。

突然雇い止めされた派遣社員がその前にやっとくべきだったこと(永江一石)

本当にその通りだと思うのだが、でも、日本人の国民性なのか、長く治安が良く平和な社会で生きてきたからなのか、多くの人はリスクを取ることに慣れていないと思う。

僕も、今は独立してフリーランスで生きていくという、普通の人よりもだいぶリスクのあるライフスタイルを選んでいるが、性格的にはどちらかというとヒツジタイプだと思っている。

大学までは、決まったレールに乗ったままエスカレーター式に進学していく道を選んだ。学生時代は先生の言うことを素直にそのまま聞くタイプだったし、学校で定めたルールをちょっとでも破るなんてことは思いもしなかった。誰かに怒られたりするのが嫌だなあという思いから、アルバイトは家庭教師以外はほとんどやらなかった。

でも、そんな僕がどうしてリスク耐性を身につけることができたのか思い返してみると、1) 環境を変える 2) 小さなリスクを取り続ける の2つが重要だったんじゃないかと考えている。

環境を変えるでいえば、4年間アメリカに移住し働いたという経験が大きく、ボケっとしていたら生きていけいないアメリカ生活に順応していくには、感覚的には3割増しくらいでアグレッシブにオオカミ側に行動や性格を切り替えていたと思う。

小さなリスクについては、いくつかエピソードがある。僕らが学生の頃はスキーに行くのがはやっていて、僕も良く行っていたのだが、皆が行く広いゲレンデを滑るのに飽きて、深雪が残るコース外や林の中を滑るのを楽しんだりしていた。あるいは、社会人になり、勤務時間中は作業服に着替えるという職場だったのだが、どうせ着替えるのだからスーツを着ないで私服で出勤してみたり、インドネシアに旅行したときは、あえて安宿に泊まったりしてみたり。どれも本当に大したリスクではないのだが、小さなリスクを取り続けることで、いつしかリスクに慣れていったように思う。

環境を変える、は効果は大きいがなかなか誰にでもできる簡単なことではないかもしれない。

一方、小さなリスクを取り続ける、というのは意外と簡単にできて、すぐにでも始められるのではないだろうか。知らない人に話しかけてみる、ちょっと空気を読んでない発言をしてみる、普段読まない本を読んでみる、などなど。

micro:bit を Scratch から操作できる s2m が日本語に対応しました

micro:bit を Scratch から操作できる s2m が日本語に対応し、ブロックの表示が日本語になりました。

MrYsLab/s2m: Scratch to micro:bit bridge.

micro:bit は約2000円と安価に入手できるイギリス生まれのプログラミング教育用マイコンボード。LEDを光らせたり、加速度センサーを使うプログラムを、ブラウザで開く専用のブロックエディタ、あるいは Python で作ることができるのですが、s2m はその micro:bit を Scratch からプログラミングできるようにしたものです。

通常はプログラムのファイルを micro:bit にコピーするところを、Scratch からだとダイナミックにプログラミングできるので、より手軽にプログラムを作って修正したりできると思います。

s2m の作者に日本語の翻訳ファイルを提供したところ、さっそく対応してくださり、日本語モードでも起動できるようになりました。

コマンドラインから

% s2m -l ja

と、言語を指定するオプションをつければ、s2m 用のその他ブロックが日本語で表示されます。

これで日本のこどもたちにも利用しやすくなったのではないかと思います。

「ギグ・エコノミー 人生100年時代を幸せに暮らす最強の働き方 」読了

ギグ・エコノミー 人生100年時代を幸せに暮らす最強の働き方
ダイアン・マルケイ
日経BP社
売り上げランキング: 70,505



終身雇用ではなく「ギグ(単発の仕事)」を基盤とした新しい働き方「ギグ・エコノミー」。

旧来の大企業に属し、終身雇用、持ち家を購入し、定年になったら引退し、その後は悠々自適、というライフスタイルはもはやあまり望めない、そうでない新しいライフスタイルの勧めなのだが、すでにフリーランスを10年以上の自分にとっては、目新しいことはあまりなく、再確認といった内容でした。

でも、その中で、いままでなんとなくは心がけていたが、改めて文章化され再確認できてよかったのが以下の2つ。

  • 小さな良いリスクはどんどん取ろう
  • 時間を長くすることはできないが、目新しいことに挑戦することによって時間を長く感じることができる

これらはお互い関連しており、だんだん年齢を重ねてくると、経験から、リスクがある程度精度よく予測できるようになってくる。そうなると、リスクのない行動を取りがちなのだが、そうするとあらかじめ結果がある程度みえているつまらない時間を過ごしがちになる。

こどものときのほうが時間を長く感じるのは、つねに目新しいことばかりで、人は新しい経験を重ねている方が時間を長く感じるからとのこと。

たとえばAという簡単そうにみえる選択と、Bという少し難しそうだなとみえる選択があった場合、できるだけBを選ぶようにしたい。あるいは、知っている人ばかりの飲み会と、完全アウェーの知らない人ばかりの飲み会とがあれば、たまには後者に行くことを選択していきたい。

プロフィール

株式会社まちクエスト代表、つくる社LLC代表。

Raspberry Piではじめる どきどきプログラミングを書きました。

Amazonから図書館検索 Libron、iPhoneアプリ ひらがなゲーム かなぶん を作っています。

Twitter @jishiha

最近のエントリー

アーカイブ