僕は発展途上技術者

2016年振り返りと2017年の目標

2016年の目標は、

  • 体重5kg増やす
  • ブログの記事を1ヶ月3つは書く

としていましたが、両方とも未達成でした。

ただ、ブログの方は8月以外は毎月一つは書けていて、それまでよりは書く機会が増えたので、目標に設定して意識していた効果はあったと思います。

体重に関しては、世のダイエットに勤しむ方々には申し訳ないが、僕には到底無理と、早々に諦めていました。

もっと達成可能な目標にしないと意味がないね、と奥さんにも指摘されたので、下方修整した目標を設定します。

というわけで、今年の目標は、

  • 一ヶ月1つはブログの記事は書く
  • 体重を2kg増やす

です。

ブログを書くのに、Railsベースの自作のシステムを使っているのですが、年末年始に Markdown を使えるようにして格段に書きやすくなったので余裕な気がします。

以上は、前年からの持ち越し目標で、今年新たに設定した目標が以下です。

  • 新しい言語を習得する
  • 英語でのLT、プレゼンをやってみる
  • 構想中の新しいサービスを開発、リリースする

新しい言語、と僕が書くとプログラミング言語と思われるかもしれませんが、今のところ考えているのはフランス語です。

僕はフランスからの帰国子女で、子どもの時には話せていたので、これを学び直したいと思っています。新しいプログラミング言語でも良いのですが、習得した後にどちらの方が世界が広がるかな、って考えたときに自然言語の方が何倍も可能性が広がると思ったのです。

ScratchX から Sphero BB-8 をプログラミングできる scratch2bb8 を作りました

新年あけましておめでとうございます。

十数年ぶりに東京で正月を過ごしたら、1日は初詣に出かけたりしたものの、翌日には正月らしいことをすることがなくなり、ついつい何か作りたくなったというわけで、ScratchXからSphero BB-8をプログラミングできるscratch2bb8を作りました。

Sphero BB-8は、一昨年のほぼ発売日と同時に手に入れていたのですが、Spheroと違ってSDKが公開されていないため、Scratchなど外部からコントロールすることはできないと思っていました。



ところがつい先日ふと調べてみたら、以下の記事で、Cylon.jsというJavaScriptのフレームワークを使ってプログラミングできることを知りました。

» 『スター・ウォーズ』ファン必見!映画に登場したドロイド「BB-8」をブラウザから動かしてみた!

というわけで、Scratchから各種ガジェットなどをプログラミングするScratch2○○シリーズの新作、scratch2bb8を作りました。

» scratch2bb8 | GitHub

以下のデモ動画のように、ScratchXからSphero BB-8をコントロールしています。





前進、転回、後退、それにスピンができるブロックをScratchXに追加しています。



正方形を描かせるプログラムはこんな感じで書けます。



今後はLEDを制御して、本体の色を変えられるようにとかもできるようしていきたいと思います。

Creators MeetUp に参加し、CoderDojo や Scratch のことについて発表しました

Microsoft のオフィスで開催された Creators MeetUp #47 というイベントに参加し、CoderDojo や Scratch のことについて発表しました。

スライドはこちらに公開しました↓

» CoderDojo と Scratch と私 | Speaker Deck

質問をいただいたり、発表が終わった詳しく聞かれたりと、参加者の何人かの方に CoderDojo について興味を持ってもらえて良かったです。

Creators Meetup の主催者で、CoderDojo 下北沢のメンター、OSS カフェ土曜日店長の小島さんに、「CoderDojo について発表しませんか?」と誘われて参加したのですが、エンジニア・デザイナに限らず、自分はクリエイターだ、あるいはクリエイターになりたいという人が集まり、ジャンル問わず何でも話したいことを発表できるというスタイルがとても気に入りました。

言語や特定のテクノロジーをテーマとした勉強会・イベントも良いのですが、好きなこと得意なことではない、いままであまり触れていなかったことにも耳を傾けると、新しい気づきが得られたり、世界がちょっと広がる感じがします。

どの話も面白かったのですが、僕的には特に「Netflix会員登録まったなし!映像コンテンツ100本ノック!」を聞けたのが良くて、ドキュメンタリー部門で紹介されていた「コスモス:時空と宇宙」をこども達(中3と小6)に「なんか面白いらしいよ」と紹介してみたら、意外とはまったらしく結構夢中で観ていて、「宇宙ってスゲー」ってなってるのが大収穫でした。

番組の元ネタとなっているカール・セーガンの「コスモス」、僕も中学の頃に読んだのが懐かしい。。

COSMOS 上 (朝日選書)
COSMOS 上 (朝日選書)
posted with amazlet at 16.12.19
カール・セーガン
朝日新聞出版 (2013-06-11)
売り上げランキング: 54,787


COSMOS 下 (朝日選書)
COSMOS 下 (朝日選書)
posted with amazlet at 16.12.19
カール・セーガン
朝日新聞出版 (2013-06-11)
売り上げランキング: 87,347


Creators MeetUp 今後ちょくちょく参加したいと思っています。

WELQ全記事が非公開 - 盗用記事にはタイポ(タイプミス)まで含まれていた

DeNAが運営する健康情報サイトWELQの全記事が非公開になった。

» DeNAが「WELQ」全記事を非公開に 不正確な医療情報に相次いだ批判「深くお詫び」

「クレチン症」という子供の病気がある。この病気に関する正しい情報をWebで公開したいという監修されている先生の思いがあって2008年に立ち上がったこども健康倶楽部というサイトがあり、僕も開発に関わらせてもらった。

今年初めに運営の予算が尽きたのだが、それに伴いサイトが閉鎖して貴重な情報が消えてしまうのは大きな損失だと思ったので、了解を得て、僕名義のクラウドサーバーに移行して引き続き公開している。

数日前にWELQというパクリサイトがあると聞いたときに、もしやと思い検索してみたところ案の定「クレチン症」というキーワードで、WELQの記事が「家庭の医学」や「こども健康倶楽部」の記事よりも上位、トップにヒットしている。



リンク先はすでに公開停止になっているが、Google のキャッシュにはまだ残っているので、どのように盗用されているかいくつか例を挙げてみる。キャッシュもすぐになくなってしまう可能性があるので、テキストコピーを別に置いておく。

» 【テキスト版】WELQ - クレチン症と診断?知っておきたい5つのポイント!症状から治療まで完全解説

まずはオリジナルの記事。

生まれつき、甲状腺で甲状腺ホルモンをつくるはたらきが弱い病気をクレチン症(または先天性甲状腺機能低下症)といいます。正式の病名は「先天性甲状腺機能低下症(英語でcongenital hypothyroidism)」ですが、病気の原因が甲状腺にあるということが知られる前に「クレチン症」という病名がつけられ、世界各地で昔から一般的に使われていました。

» こども健康倶楽部 | Lesson2 : 先天性甲状腺機能低下症(クレチン症)はどんな病気? より

次にWELQの該当記事です。

クレチン症とは、生まれつき、甲状腺で甲状腺ホルモンをつくる働きが弱い病気のことをいいます。正式の病名は先天性甲状腺機能低下症ですが、一般的にはクレチン症という病名がつけられ、世界各地で昔から一般的に使われていました。

» WELQ - クレチン症と診断?知っておきたい5つのポイント!症状から治療まで完全解説 より

微妙にワードの順序を変えたり、言いまわしを変えているのがわかります。

え、「僕の気のせい」?「偶然」?、そういう反論があるのかもしれないので次をみてみましょう。

クレチン症の治療については、全国的に統一された「ガイドライン(診断・治療指針)」があります。
先天性甲状腺機能低下症マススクリーニングのガイドライン(1998年版)(*1:1998年版ガイドライン)日本小児科学会雑誌1998;102:817-819に掲載されています。
これは、全国どこでも同じような治療が受けられるように、クレチン症の専門家が集まって作ったのもです。

» こども健康倶楽部 | Lesson6 : 先天性甲状腺機能低下症(クレチン症)の治療

こちらがWELQの記事。

クレチン症の治療については、全国的に統一された「ガイドライン」があります。先天性甲状腺機能低下症マススクリーニングのガイドライン(2014年版)が、日本小児科学会雑誌に掲載されています。これは、全国どこでも同じような治療が受けられるように、クレチン症の専門家が集まって作ったのもです。

» WELQ - クレチン症と診断?知っておきたい5つのポイント!症状から治療まで完全解説 より

タイプミス「作ったのもです」まで一緒でした。他は巧妙に書き換えたのに、なぜか「のも」だけ残したのは、オリジナルに対する敬意なのかもしれません。

» DeNAの「WELQ」はどうやって問題記事を大量生産したか 現役社員、ライターが組織的関与を証言

をみると、こうした書き換えをシステマチックに行っていたのがうかがい知れます。裏のSEOの仕組みを考えた人とかは超絶賢い人なんだろうなあ。賢く頭が良くて、どこかネジが外れて倫理観が欠けている人は本当にタチが悪い…

少しくらいモラルに反した方法を使っても、それによって儲かるというメリットに比べるとリスクは小さいと踏んで、計算高い人のなかにはズルをする奴が現れる。

DeNAに入社する東大生が多いなんていう話を聞く。人より賢く効率の良い方法を考えつくということは、すなわちそれはレバレッジが効くということ。善い方向に向ければたくさんの人のためになるサービスを思いつくことができ、悪の方向に向ければ大量に殺戮できる兵器を作れるというのと本質的に同じだと思う。

冒頭の謝罪文により、許す人、忘れてしまう人は多いのかもしれないが、少なくとも僕の記憶にはずっと留めておく。会う人会う人、特に若い人にはこのことを伝え続けて、ズルをすることのリスクはメリットよりも大きいのだということを示す必要がある。

人の翻訳と区別がつかないんじゃなかろうかというほど大幅パワーアップのGoogle翻訳を試してみた

» Google翻訳が進化!? 精度が向上したと話題に - ねとらぼ

などでも取り上げられていますが、Google翻訳が大幅にパワーアップしたということでちょっと試してみました。

Tokyo Rubyist Meetup のイベント情報の日本語訳をお手伝いしているので、自分の翻訳とGoogle翻訳の結果を比べてみました。

まずは、僕が提供した翻訳。

Safecastは、環境問題のためのオープンシティズン(市民)サイエンスに取り組む国際的かつボランティアベースの組織です。2011年3月11日に東日本を襲った壊滅的な震災と津波により、福島第一原発のメルトダウンが起こったあと、正確で信頼の置ける放射線量の情報が公開された状態にはありませんでした。

このプレゼンでは、Safecastの試みを簡単に紹介し、Ruby on Railsで構築されたSafecastのアーキテクチャの現状やSafecast APIについて紹介します。


そして、こちらがGoogle翻訳の結果。

Safecastは、国際的なボランティア中心の組織で、環境のために市民の科学を開放することに専念しています。 2011年3月11日に東日本大震災とその後の福島第一原発の崩壊後、正確かつ信頼できる放射線情報は公開されていませんでした。
このプレゼンテーションでは、Safecastの歴史的な取り組みを簡単に要約し、Ruby On Railsを搭載したSafecastの現在のアーキテクチャとSafecast APIについて説明します。


すごい!

機械翻訳臭がまったくしません。パッと見、人間の翻訳とGoogle翻訳、区別が付かない感じではないでしょうか?

ちなみに原文はこちらです。

Safecast is an international, volunteer-centered organization devoted to open citizen science for the environment. After the devastating earthquake and tsunami which struck eastern Japan on March 11, 2011, and the subsequent meltdown of the Fukushima Daiichi Nuclear Power Plant, accurate and trustworthy radiation information was publicly unavailable.
This presentation will briefly summarize Safecast historical efforts and then describe Safecast's current architecture and Safecast API as powered by Ruby On Rails.


面白いので、他の文章も比べてみました。

僕の日本語訳がこちら。

台湾は日本と密接な関係にある島国です。地理的に近いだけでなく、文化的にも日本と強い関係があります。

台湾人は、交換留学生として、ビジネスマンとして、あるいはこれを読んでいる多くの人のように開発者として、少なからず日本に住んでいます。しかし一方で、多くの台湾の開発者は、外国で働くことを夢見ています。彼らは、西欧諸国で生活する準備のために、英語を学び、ときにはアメリカ人のような話し方を習得しようとします。

本プレゼンは、技術的な側面は少なく、どちらかと言うと台湾の開発者事情を紹介する内容です。なぜ国外で働きたいと強く思っているのか、あるいは、安価なコンピューターのOEMメーカーとして以外の台湾のあまり知られていない側面を紹介します。


そして、こちらがGoogle翻訳。

台湾は日本と密接な関係がある島国です。 地理的に近いだけでなく、文化的にも日本に関係しています。

台湾人は、交換留学生として、ビジネスマンとして、あるいはほとんどの人のように、開発者として日本に住むことは珍しいことではありません。 台湾の多くの開発者は海外で働くことを切望しており、西洋諸国での生活のために英語を練習し、アメリカ人のように話すように訓練しています。

この講演は、技術的な話には似ていませんが、台湾の開発者の地位を紹介しています。 なぜ私たちは国外で働くことを望んでいるのですか、安価なコンピュータOEMメーカー以外にはわからないことがあります。


うむ、なめらかな日本語です。。。

あれ?書き出しが一緒だったり、「台湾人は、交換留学生として、ビジネスマンとして、」の部分とか、ひょっとして、Google先生、僕の答案チラッとみたでしょ。。

ネットに公開されている文章はほぼすべてインデックスされているので、パク◯、、じゃない、いくらでも参考にできる文章があるということか。。データを持っているGoogle、最強な気がします。

ちなみに原文はこちら。

Taiwan is an island country that has a close relationship with Japan. It is not only geographically close, but also culturally related to Japan.

It is not uncommon for Taiwanese people to live in Japan, as exchange student, as businessman, or like most of you, as a developer. Many Taiwanese developers have yearned for working abroad, and so they have practiced English and even train themselves to speak like an American, to prepared for living in western countries.

This talk is less like a technical talk, but more an introduction on Taiwan’s developer status. Why we have desire to work outside our country, and things you may don’t know beyond the cheap computer OEM manufacturers.


職を脅かされる人が相当でてきそうな、、そして外国語とどう付き合うかについて根本からガラッと変えてしまうくらいのインパクトがあるような気がします。

ちなみにちなみに、次回 Tokyo Rubyist Meetup は 11/25(金) 19:00 - 21:30、渋谷の RareJob オフィスにて行なわれます。東京在住の海外のRubyist達がたくさん集まるイベントです。英語はちょっと苦手という人でも、パワーアップしたGoogle翻訳のこのクオリティならば全然問題にならなそうな。。ということを実験してみる良い機会ではないでしょうか。

» Checking Ruby Programs without Types / Introduction to Safecast

Rails のローカル開発環境でSSL(https)を使えるようにする

» iOS10から位置情報取得にはHTTPS必須?

iOS10から、位置情報取得にはhttpsが必須になったようで、httpのままだと位置情報を取得して現在地を検出することができなくなってしまいました。



開発・運営しているまちクエストの本番環境はhttps対応しているので問題ないのですが、Railsでの開発環境にiPhoneでアクセスしてモバイル環境での動作を確認するとき、通常はhttpアクセスなので困ってしまいました。

調べたところ、開発環境でも簡単にhttpsアクセスできるようにしてくれる方法をみつけました。

» jugyo/tunnels

という gem を使います。

$ gem install tunnels

でインストールしたあと、

$ rails s

でRailsサーバーを起動したあと

$ sudo tunnels 10.0.x.x:443 127.0.0.1:3000

で10.0.x.x(LAN内のプライベートIPアドレス)の443ポートへのアクセスを3000番にプロキシすることができます。

これで https://10.0.x.x のようにhttpsアクセスできるようになり、位置情報も問題なく取得できるようになりました。

Scratch 3.0 のプロトタイプをローカルマシンで動かしてみる

Scratch 3.0 のプロトタイプをローカルマシンで動かしてみました。

インストールの手順は、GitHub にあるscratch-vmに書かれている通り、git と npm が使える環境で

git clone https://github.com/LLK/scratch-vm.git
cd scratch-vm
npm install


でインストール、

npm start


で起動します。

Gobo を左右キーで動かしてみました。



「端にあたったらはねかえる」はまだ未実装のようで、Gobo がどこかに吹っ飛んでいってしまいました。

ソースコードは JavaScript で書かれているので改造しやすいし、バグなど直して貢献できるかもしれないですね。

スクラッチャーのためのScratchX入門 - その2 自作オリジナルブロックをつくろう

その1からだいぶ日にちが経ってしまったのですが、個人的にScratchXが再ブームなので、スクラッチャーのためのScratchX入門、その2を書きたいと思います。

前回のエントリーはこちら↓

スクラッチャーのためのScratchX入門 - その1 ScratchXとは?

ScratchXでは自作のブロックをつくることができます。

ブロックや、そのブロックが実行されたときの動きをプログラムするにはJavaScriptを使います。

JavaScriptで書かれたスクリプト(小さなプログラム)をScratchXで読み込むことで、そのスクリプトを実行することができるのですが、スクリプトのファイルは通常GitHubページに置くことが推奨されています。

ただし、GitHubにアカウントを作るには13歳以上でないといけないため、ほとんどのスクラッチャーには難しい上に、GitHubページを作成してそこにファイルを置くのは少し手間がかかると思います。

そこで、ローカル(みなさんが持っているパソコン上ということ)に置かれたスクリプトファイルをScratchXで読み込む方法を紹介します。本格的にScratchXの拡張機能を作ろうという場合には、GitHubページにスクリプトファイルを置く必要がでてきますが、とりあえず試してみたいという場合は、以下の方法で十分です。

まず、Bracketsというアドビが作った無料のエディタをダウンロードしてインストールしてください。

次に適当な作業フォルダを用意(たとえば Work とします)し、Bracketsを起動したら、[ファイル] > [フォルダを開く...] を選んで、workを指定します。

work以下にtest.jsというファイルを新しく作成し、以下の内容をまるごとコピペします。Bracketsの左側のタブで、work▼ 以下で右クリックのあと[新しいファイル]を選べばファイルを作成することができます。

(function(ext) {
ext._shutdown = function() {};

ext._getStatus = function() {
return {status: 2, msg: 'Ready'};
};

ext.test = function(str) {
/* ボタンが押されたときの処理を書く */
};

var descriptor = {
blocks: [
/* ブロックの定義を書く */
]
};

ScratchExtensions.register('Test', descriptor, ext);
})({});


ScratchXに必要というわけではないのですが、後で説明するBracketsのライブプレビュー機能に必要なので、work以下にindex.htmlというファイルを新しく作成します。中身は何でも構いません。空でもOKです。

以上2つのファイルを作ったら、Bracketsの右上の方、稲妻のアイコンをクリックして、ライブプレビュー機能を起動します。



するとブラウザが自動的に立ち上がり、http://127.0.0.1:50110/index.html (:以降のポート番号はランダム) といったアドレスの、先程作成したindex.htmlのページが開きます。

アドレスのindex.htmlをtest.jsに置き換え、http://127.0.0.1:5xxxx/test.js と入力し直し、ブラウザをリロードすると、test.jsの内容が表示されます。これが、これからScratchXに読み込ませるスクリプトのアドレスになります。

ScratchXのページ(http://scratchx.org)を開き、「Open Extension URL」をクリックします。

スクリプトのURL(アドレス)を入力する欄が表示されるので、先ほど開いたスクリプトのアドレス http://127.0.0.1:5xxxx/test.js を入力して、Openのボタンをクリックします。

スクリプトファイルを本当に開いていいかどうかを確認するWarning画面が表示されるので、緑色の「I understand, continue」をクリックします。

ScratchXの画面上、中央にTestというスクリプトの名前と丸い緑色のアイコンが表示されていれば、スクリプトの読み込み成功です。



このテスト用スクリプトには、まだブロックも何も定義されていません。これから、ブラウザのアラート画面を使って、実行すればtestと表示するブロックを作ってみましょう。

まず、ブロックを定義します。

Bracketsでtest.jsの中身を編集して、

/* ブロックの定義を書く */


のところに、

[' ', '%s と表示', 'test', 'テスト']


と書きます。

これはJavaScriptでの配列の書き方で、, (カンマ)で区切られたひとつひとつの値が意味を持っています。最初の ' ' (半角スペースを'で囲みます)がブロックのタイプで、一番ノーマルな実行したら何らかの処理をおこなうブロックを意味します。次の '%s と表示' がブロックに表示される文字で、%s のところが自由に文字を入力できる欄になります。3つ目の 'test' は、ブロックが実行されたときに動くJavaScriptのスクリプトの中の関数の名前になります。最後の4つ目が、さきほど %s で表したブロックの文字入力欄に最初から入っている文字になります。

3つ目の 'test' は

ext.test = function(str) {
/* ボタンが押されたときの処理を書く */
};


の ext.test の test に対応しており、ブロックがクリックされたり実行されたときの処理は、

/* ボタンが押されたときの処理を書く */


の部分に書きます。

ブラウザにアラート画面を表示する

alert(str);


に置き換えましょう。

strには、ブロックの入力欄に入力された文字が入っているので、alert(str)でstr、つまりブロックに入れられた文字がブラウザのアラート画面に表示される。

書き換えたスクリプトは以下の通りになります。

(function(ext) {
ext._shutdown = function() {};

ext._getStatus = function() {
return {status: 2, msg: 'Ready'};
};

ext.test = function(str) {
alert(str);
};

var descriptor = {
blocks: [
[' ', '%s と表示', 'test', 'テスト']
]
};

ScratchExtensions.register('Test', descriptor, ext);
})({});


このスクリプトをScratchXでもう一度読み込み直すため、ScratchX のトップページ(http://scratchx.org)を開き直し、「Open Extension URL」をクリックしてから http://127.0.0.1:5xxxx/test.js を入力し、Openのボタンをクリック、Warning画面で緑のボタンを押します。

「テスト」と表示、というブロックが「その他」にできていれば成功です。



ブロックをクリックすると、「テスト」と表示されるアラート画面が開くはずです。「テスト」の代わりに別の文字を入れてみてブロックをクリックすれば、入力した文字が表示されます。

以下、スクリプトを読み込み、「テスト」と表示するブロックを実行するまでのデモです。



機会があれば、次は別のタイプのブロックを作ってみます。


RubyKaigi2016 Day 0

書くことに意味があるのです、と言われて RubyKaigi レポート0日目。

横着して、そのアドバイスの主の @komagata さんのブログにリンクを貼っておくのです。

» RubyKaigi2016 0日目 - komagataのブログ

初 Airbnb で渋い民家に泊まって、のんびりしています。

あと、去年の RubyKaigi のときに書いたエントリーへのリンクを貼っておきます。

» 東京にいながらにしてインターナショナルな環境でプログラマー(Rubyist)として働くというお話

万華鏡でみるような模様が簡単に描ける Mirror Drawing を Scratch でつくりました

[追記] 最新版はこちら -> https://scratch.mit.edu/projects/117434761/
色もつけられるようにしてみました。

Mirror Drawing というプロジェクトを Scratch でつくってみました。



Scratch 上で60秒間の動画が撮れるようになったので、それを使って撮ってみた動画がこちら↓





こんな感じでマウスで描いた模様が縦横斜めにコピーされるので、適当に描いてもわりと綺麗な模様が描けるというプロジェクトです。

書いたコードは以下の通り。こんな短いコードでできてしまって Scratch やっぱり楽しい。



Scratch 上でいいねされたり、おまけにリミックスもされていて、naritaku くんの作った作品がこちら ↓



分割数が15まで増やせるようになっていて、適当に描いてもこんな万華鏡でみるような模様が描けて楽しい!せっかくなのでこちらもデモ動画をつくってみました。





自分の作品がリミックスされて、さらに面白く楽しいものになっているのを見るのはとても嬉しいですね。
みなさんもぜひいろいろ描いてみてください。

プロフィール

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

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

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

Twitter @jishiha

最近のエントリー

アーカイブ