PTA Bot 緑ちゃんの紹介ページ

LINE Bot Awards に出品した Bot の紹介ページです。

スライド

スライドの流れをベースに、実際に Line Bot Awards に出品した Bot の機能と使い方を紹介していきます。

友達登録

以下の QR コードから登録をお願いします!

midoriqr

緑ちゃんとは

学校、PTA等の任意の団体の活動をサポートするBotです

注)以下の内容は架空の話であり、実在の人物・団体とは全く関係ありませんの


緑ちゃんが生まれた背景(PTA)

  • 小中学校には PTA というものがある
  • PTA は作業が多い
  • PTA は連絡事項が多い
  • IT化?何それ美味しいの?
  • 連絡つかね…個人情報保護ぉぉぁああああ!!
  • 最近PTAが大変(不要)だというニュースも多いよね!?
  • 無くして子供の楽しみ減らすよりカイゼンして楽しさうp
  • 浮いた時間でお子さと楽しく過ごして下さい!!

緑ちゃんが生まれた背景(School)

  • 小学校は行事が多い
  • 連絡は基本、紙
  • 小学校はお手紙/プリントが多い
    • あっという間に家の中がプリントでいっぱいになる
  • 学童終わるの早い
  • 夏休みはお弁当作ったりとか
  • ママさん達、超絶忙しぃぃいいいっ!!!

緑ちゃんが生まれた背景(Misc)

  • 野球、サッカーなど、地元や学校密着のスポーツ団体なんかもある
  • その他習い事
  • 自治会、町内会も含めた地域コミュニティ
  • どいつもこいつも連絡連絡ぅう!!…繋がらね..orz
  • 今日行事あったの忘れてたぁぁあああ!!!!
    • 「ざわざわ..あの人サイテーやね…」

緑ちゃんが生まれた背景(common)

  • スマホ?持ってません
  • 携帯電話、メール、教えたくないです
  • 家電なら教えます(かけても出ませんが..)
  • 個人情報保護ぉぉお(ry、面倒くさい
  • IT化?何それ(ry
    • 会議でノートPC使ってるの俺だケェええ!??

真面目に書くと長くなるけど

#PTA や学校向けのユーティリティー bot

小学校に入ると、一般的には PTA という組織に所属し、子供が地域主体のスポーツクラブに参加するなどして、 学校、PTA、学童クラブ、スポーツ団体等、学校に密接に関連した複数の組織に所属することは一般的です。

それぞれの団体ごとに多くのイベントがあり、名簿や連絡網を整備し、必要に応じてイベントの準備、参加、それに 必要な各種連絡を行うことになります。

昨今では、共働きや長時間労働が当たり前になってきており、主に連絡を受ける保護者側もタイムリーな情報の受信が 困難な時がありますし、連絡をする管理側にとっては、不在時の再送も含めて作業負荷はかなりのものです。

また、昨今の社会情勢や意識の変化に伴い、個人情報保護の観点から、メールアドレス、携帯番号、LINE ID などを、 特別に親しくない組織の関係者に公開することを拒む傾向があるため、複数の連絡手段を駆使し、時にはプリントの作成 直接の面会を強制されるなど、その連絡は時に困難を極め、連管理者側にとっても大きな悩みのタネになっています。

更に意識の面では、元々多忙が故に保育園にお金を払ってお客様のような意識で園や地域や他の保護者達と接していた保護者 にとっては、物理的な拘束時間の増加に加えて、自発的なコミュニティへの参加意識が求められる上に、日々大量に配布される プリント類、必要な各種連絡、そして本来もっとも重要な子供の世話などで心身ともに忙殺され疲弊しているというのが、現代 の日本の児童生徒の保護者の置かれた現状ではないでしょうか?

このような社会問題の解決の助けとなるように当 Bot の作成を決意しました。


要するに楽してしかも WIn-Win

  • 管理運営側も、一般参加者も楽になって助かる!
  • 個人情報皆に教えなくてもいいよ
  • PC スマホ持ってなくてもおk (そんな装備で大丈夫か?
    • 大丈夫履いてます(ry
    • けものはいても、のけものはいないよ!!

「神ってる!?」


すみませんふざけ過ぎました

物凄く真面目に言うと、このような社会問題の解決の助けとなるように当 Bot の作成を決意しました

私やこの Bot が問題を解決するのではありません。あくまで助けるだけです。 「人は人を助けることはできない、自分で助かるんだよ(ry」


緑ちゃんの機能

必要に迫られて作りました。だからあまり面白いとか、笑いが取れるとか、そーいうのではないです、済みません。。。。

フレンド数?何それ?美味し(ry


緑ちゃんの機能スキル

  • 同報通信
  • イベント等の情報問い合わせ
  • 児童の顔写真から名前知ることができる!!!
  • イベント登録管理も LINE から!!!!
  • ビーコンによる安心見守り機能 
  • すっごーい!! いろんな事ができるフレンズなんだね。たーのしー!

緑ちゃんの技術力

「緑ちゃんの技術力は世界一ぃぃいいっ!」では全くなく、技術力はあまり高くないです、APIプロバイダーの皆様の高度な技術をお借りしています。

利用している API/サービス は

  • Line Messaging API
  • Microsoft
    • Azure DocumentDB (各種データ)
    • Cognitive Service Face API (顔画像認識)
  • IBM Watson (自然言語処理/会話エンジン)
  • Twilio Messaging API(SMS/音声通話/Text to Speech)

network-diagram

サービス自体は Node.js(Express)フレームワークを用いたトラディショナルな構成で、そこから各種 API を呼びだしています。

 


Microsoft Azure 様

本当にありがとうございます!!


IBM Bluemix Watson 様

本当にありがとうございます!!


Twilio 様

本当にありがとうございます!!


機能詳細(同報送信)

 

LINE 画面からテキスト入力でメッセージを送信できます。

送信先のターゲット指定には、組織名(PTA本部、PTA校外委員会などの委員会名、1年1組, 3年生、などの学級や学年、スポーツクラブなどの団体名)を利用できます。

指定された組織や団体に対して、事前に登録された個人へ、それぞれの送信メディア(Email, SMS, Line, 音声通話)の違いを意識することなく一斉送信が可能です。

また、SMS や 音声通話など、いわゆるガラケーや固定電話のユーザー向けの送信は不在などの通知の失敗の可能性があるため、通知の成功失敗を検知し、必要なだけ(設定された回数の)再送も自動で行います。

Line 版のインターフェースでは多くのことはできませんが、PC/Web 版のインターフェースでは、この送信履歴管理や、再送管理なども行えます。

送信を指示するメッセージの例

送信 PTA本部 明日は運営会議です

メッセージを送信 1年1組 明日は 12時よりクラス懇親会があります。

審査用に送信を確認されたい場合は、LINE ID や SMS, Email アドレスなどを教えて頂ければ登録しますのでお知らせください。

本来は PC などの Web ブラウザーから、管理者的な一部の人間が必要な送信先にメッセージを送信するだけのものを想定していましたが、Line からの送信機能を一般会員向けに解放することにより、大きく利便性が増すのではないかと思います。
(PC の操作に明るくない PTA 会員の人は多いですし、外出先や電車の中などから、隙間時間を利用してすぐに同報送信を行うことができます)

但しこれは性善説に基づくものであり、スパム対策やセキュリティ上の配慮は必要となるかもしれません。


PC版送信管理画面

index

history

 


LINE版メッセージ送信

img_4025


機能詳細(イベント問い合わせ)

自然言語処理(NLP)を行う会話エンジンを採用しているため、厳密に規定されたフォーマットに従わない自然な会話体に近いメッセージで、必要な問い合わせを行うことができます。

イベント問い合わせメッセージの例

明日の学校行事は?

3/18 日のPTA行事を教えて

今日のサッカー

 


機能詳細(顔認識!!)

よくありますよね、顔は知ってるんだけどクラスと名前が分からないって、

「あるあるぅ〜ー」

そんな時にお役に立ちます!

Bot のバックエンド DB に登録されている写真をベースに学習した顔認識エンジンのモデルを作成しています。

実際の動作確認には以下の画像をご利用できます。また、同じ人物であれば、別の写真でもテストいただけます。

※ 顔識別のテスト用として、提供元の利用規約に沿ってご利用ください。

山田花子(ゆうき)(仮名)ちゃん

佐藤幸治郎(賢太郎)(仮名)


機能詳細(イベント等管理)

派手な図とか写真とか(ry

自然言語処理(NLP)使(ry

管理機能なのでこれを公開すると問題があるかも、ととりあえず公開していません。

IBM Bluemix Watson 様本当にありがとうございます!


ToDos

この Line Bot Awards 以降もこの Bot の機能は追加で実装し、4 月からの新学期に向けて本運用が可能な状態として全国の小中学校等で使って頂きたいと考えています。

ご意見やお問い合わせは、とりあえずは当ブログへのコメントを頂ければと思います。

現状で実装予定の機能のいくつかをここに挙げておきたいと思います。

  • スタンプ連携
    • 現在、イベント情報の照会やその他の機能を利用する場合には、自然言語によるテキスト/文章メッセージを入力して送信する必要があります。
    • 状況によってはこれは煩雑なため、特定のスタンプを送信するだけ(1-2タップ)で、各種機能を利用できるようにする予定です。
    • また、例えば PTA やスポーツ団体などのコンテキストに特化した一連のコマンド/機能には一定のパターンがあり標準化やテンプレート化が可能かもしれません。その場合にはそのようなテンプレート化したスタンプの構成を公開し、それに基づいた自治体や学校や各種団体などの独自のキャラクターやデザインを活用したスタンプの作成を促します。また、そのスタンプからこのボットの機能を利用できるようにします。
    • それによって、必ずしも IT に強くない保護者や子供達であっても、イラストが描ける人はスタンプを描いてもらい、そのようなスキルがなくてもキャラクターのアイデアを出すなど、コミュニティ全体の活性化や連携感を高めることが可能となるかもしれません。
  • Google カレンダー連携
    • 現在はイベント情報の管理は専用のデータベースを利用しています。しかしそれでは管理上の負担が増える可能性があり、すでに持っているかもしれない学校や団体の管理しているカレンダー情報との二重管理となる可能性もあります。
    • 現在では私の娘の通う小学校の学校行事の情報は、自治体(教育委員会?)の提供する CMS の中のカレンダーで公開、提供されています。これはブラウザーでそのページを表示、閲覧することはできても、保護者個人個人で利用している各種のスケジュール管理ソフトウェアや Google カレンダー/iPhone や Android のカレンダー機能との連携が困難で、絵に描いた餅のようなものです。
    • そういった問題を避けるために、現在政府省庁は、データや情報をなるだけ再利用可能な形でオープンデータとして公開し、利用してもらおうとしています。
    • しかし、行政や学校などの管理側でのそのような IT の対応は現実的には中々難しいため、とりあえず私個人で自治体謹製の CMS 版カレンダーから行事情報を抜き出し、Google カレンダーに登録するという機能を Google Apps Script で実装済みです。
    • これを広げて、より広い自治体や学校などのイベントデータを登録、参照できるようなフレームワークを作成、公開し、この Bot から利用できるようにする予定です。
  •  プリント共有機能
    • 紙のプリントを写真で撮ってボットにタイトルやタグをつけて送付することで登録する
    • 他の保護者はタイトルやタグでプリントを検索し、いつでも参照することができる
  • 花粉、PM2.5, インフルエンザ、感染性胃腸炎の散布、流行情報などの参照
    • 例: ボットに 花粉情報 などと呟くことで、その日の花粉の散布情報を画像や数値などで返す
  • 気象災害、地震、防犯情報などの速報性の高い情報や、自治体などからの広報情報のうち、共有価値の高いものや、ユーザーが自ら通知設定を行った情報を push 通知する。
    • その他地域のイベント情報や、生活情報、子育て情報など、あらゆるニュースソースからの情報の取得窓口とすることもできる。その場合には、配信される情報が増えすぎないように考慮せねばならず、また、受信者の関心の高いものに限定したいということもある。その問題に対しては、以下のような方法で対応できると考えている。
      • 受信者のプレファレンス(好み)の事前登録
      • ニュースソースによっては広いジャンルの情報を配信するため、あるソースの情報を一括で配信登録すると、受信者にとっては興味のない情報が多く配信され S/N比が悪くなりサービスの利用意識を下げることになりかねない。そこで、ソースによる分類に頼らずに、ニュース記事の一つ一つの内容に対して AI によるタクソノミー(自動分類)とタグ付けを行い、そのタグとソースによる情報のフィルタリングを可能とする
  • 日本語の読み書きが苦手な保護者向けの多言語対応。(但し 翻訳 API を使った人手を介さない自動的な翻訳のため、翻訳品質は懸念材料)
  • ビーコンを使った見守りネットワーク構想との連携機能
    • この Line Bot Awards や、チャットボットとは全く別の案件として、「ビーコンを使ったみまもりネットワーク」構想の実現を計画しています。
    • これにはスマートフォン向けにビーコンの受信と中継機能を持ったアプリケーション(や SDK/Library)の配布が必要なため、中々実現が困難なのですが、そのようなネットワークが実現した場合には、この PTA ボットから、自分の子供の直近の大凡の位置が検索できるようになります。
  • Serverless 化
    • 運用コスト的なメリットが出てくるかどうか見極め中
    • 管理対象のサーバーインスタンス自体は無くなっても、API 利用料金が新たに発生するため、既存のサーバーインスタンスの稼働自体に料金がかからない運用形態と比較して金銭的なコスト面で不利となる可能性がある。
  • Siri
  • Text sanitization, confirmation

課題

SMS や音声通話機能によって、スマホを持たない保護者にも等しく情報を送信することができるようになりました。これは学校のような公的な団体にとっては非常に重要なことだと思います。

しかし、Email や Line によるメッセージの送信と異なり、上記の通信手段を使った情報の送信にはコストがかかります。

SMS 1 件送信あたり 8 円。SMS の送信先が増えると無視できない金額となってしまいます。

まとめ

この Bot のように ICT 技術を使って社会の様々な問題を解決していく、そんな試みや活動を「シビックテック/Civic Tech」(or シビックハック/Civic Hack)といいます。

こういった内容以外にも、防災やオープンデータの活用(NHK 震災ビッグデータ観てください)など、様々なジャンルで多くの方々が活動しています。

エンジニアだけでなく、行政の方、デザイナーさん、アイデアパーソンなど誰でも参加、活躍可能です。

皆さんも是非、シビックテックを盛り上げていきましょう!!!

日本のプログラマーにとって英語スキルが重要かどうかに関する一考察/How important it is to have good english skills for Japanese Programmers?

FBよりの転載です。

Facebook のプログラミング教育グループでの質問に対して、私が個人的に考えていたことを回答という形でまとめました。
せっかくなのでこちらに転載することで公開したいと思います(英語ですが機会を見て日本語に翻訳したいと思います)。

https://www.facebook.com/groups/edu.programming/?ref=bookmarks

Question: How important is having a good command of English to coding?
質問:日本でプログラマーとし活躍する為には英語力はどれでけ重要・大事?

There are couples of points to mention.
There are some types of information source where JP programmers refer to when they need to know/learn/search something regards to programming, such as1. Books/Magazines,
2. Q&A or/and discussion sites(incl BBS, Mailing lists, Google Groups)
3. Tech News, Blogs(incl blog/article publishing platforms, like Hatena Blog, Qiita)
4. General purpose communication sites incl SNS (Facebook, twitter, etc)

1. Books/Magazines
There are plenty of books and magazines written in Japanese. So the number/quantity perspective, I can say there are good enough amount of books/magazines available. But from quality perspective, there is a problem. JP tech books are mostly written for beginner/entry/novice developers, or intermediate at best. Very few are written for expert level developers. Most of books targets for expert level developers are translated from English books. One of the reasons of this is that expert books do not sell much, compared to entry level books. But yes, they can get expert level books written in Japanese, even most of them are translated ones.

Magazines, on the other hand, are good in quality, but they do not sell much, so very expensive compared to those sold in US.
Both tech books and magazines do not sell much in Japan compared to those numbers when in 1990s, but AFAIK the number of tech books written in Japanese(and sold in Japan) are far higher than those numbers in China or Korea written in Chinese, Korean.
Per my Korean and Chinese ex colleagues when I was working for Sun Microsystems, and Google, they tend to buy and read English tech books than to buy and read those written in their language, simply because they are not available.

In short, JP programmers can buy/obtain good enough amount of information only from books and magazines in Japanese, and there is not much needs for them to buy English tech books/magazines.

2. Q&A or/and discussion sites(incl BBS, Mailing lists, Google Groups, topic based chat channels, e.g. IRC/Slack)

Some of Q&A/discussion sites I know of are, teratail, Yahoo 知恵袋(Yahoo Q&A in JP), 2ちゃんねる(2ch), etc.

They are moderately active, but it is sometimes hard to get good answer(s) in a timely fashion.

Usenet and Mailing lists(or Google Groups) were widely used in Japan in 1990s, but not much now, AFAIK.
In this SNS age, it looks like developers tend not to ask questions, but search for Google first, since they can get answer(s) to their question by doing so most of the cases.
Only in the rest of the cases, they ask in Twitter/Facebook, and a public Q&A Sites.

Anyway, those JP Q&A and discussion sites are moderately active, and good source of information, but not good enough compared to English corresponding ones.So those developers who can (hardly)read English may rely on English sites, esp SO.
Not many are using reddit, or/and Quora AFAIK.

A good thing is that, there are some (on-the-fly) translation systems like, Google translation, which translates English web page(Q&A) to Japanese. So those who are not good at reading English tend to make use of such translation tools and read English sites.

Until recently, Google translation (and some others) quality (from En to Ja) are not that good, it sometimes hard for them to get precise meaning of what written in web pages. But fortunately, it is a programming questions including Programming source code fragments, they can get good touch of it even from poor translations.

So in short, and here again, they can get some answers to their question without reading/relying on English sites(w/o translation).

3. Tech News, Blogs(incl blog/article publishing platforms, like Hatena Blog, Qiita)

This is one of the most used/referred media for JP developers, I think.
If I have a programming question and try to Google it(in Japanese), I get most of the top results from those sites in this area, meaning that not from Q&A sites, but Qiita, Hatena Blogs, and professional tech news articles.
When I do the same in English, I get SO pages at the top of Google result page.

It is worth to mention, that Qiita is one of the programmer’s best information source in JP, and most of Google’d tech/programming questions can be answered by it, but they have some problems too.

The problem is that there are so many novice level, poor quality articles in Qiita, and it makes people to have hard time to get right answer to their question from Google’d resulting Qiita pages.

I personally get rid of Japanese answer from Google result, not to waste time for this reason.

It is okay, since most of authors are amateur/non-professional article writers meaning that they do not earn money from writing it, but it is a problem for some people anyway.

I guess it is by their(Qiita’s) intention to allow(not to down vote/credit) novice writers write novice articles. By doing so, by letting people feel easier and willing to write articles, (and not get down votes) , they have more articles in their site, and in the end it will help users/reader developers to get answers to their question from inside Qiita.

Stack Overflow, on the other hand, they have a credit system, which makes users to down vote to poor quality questions and answers, so poor content get less chance to be read, that is not the case with Qiita, they only have up-vote(+1).

As you might already be familiar with it, Japanese culture and Japanese people are considered to be modest, and not liking speak bad of someone, and even someone’s opinion even they think the opinion is wrong or poor.

From this cultural reason, people tend to avoid down grade(-1) to other’s opinion/articles/answers.

Aside from this article(Google’d result) quality issue, yes Japanese developers can get good amount of information from those sites, without reading English pages.

4. General purpose communication sites incl SNS (Facebook, twitter, etc)

This highly depends on the connections/friends of one’s, but many questions are asked and answers in Japanese, meaning that this is one of good sources of information for many developers too.

To summarize, It can be said that Japanese developers can get good amount of information only from Japanese sources.

But also, those expert level developers may sometimes have hard time getting right answers from Japanese sources, and go for English ones.

This is one of the reasons, some people say “expert level developers are, to some degree, able to read English”.

So, in my opinion, it is not much important for (esp novice level) developers to have skill to read english, compared to those developers in other countries, because we have so many good Japanese information sources.

When the one gets more experiences and reach to higher levels, they tend to feel the needs of English reading/writing skills.
But they can live without it, anyway.

If they really feel the need of referring to English source, they can use translation tools.

This is an off-topic answers to your question, but something I’d like to add.

I spend some of my weekend time(as a volunteer) for teaching computer programming to elementary to high school students.

Since most of the programming languages are English based, so for those learners have hard time reading/writing a code in English.
This is true especially when a learner’s age is low, like 6-8(or even lower), since they may not have learned alphabet characters, yet.

Even if they know alphabet characters, they may not know the meaning and pronouciation of words, like “function, if, while, each, case” etc, which makes it harder for them to learn programming.

For this reason, it is the hardest to learn real programming languages(C, Java, Python, etc) for kids/students, then Visual (GUI based but labeled in English )programming languages (like Scratch), then Visual with no label programming languages(like Scratch Jr)

There are some Japanese based programming languages, but they are not so popular, yet.

Actually, I have a feeling that it is fun learning programming for most of kids, they manage to handle this English problem, anyway, and concur.

This is the power of “fun of learning programming” 🙂

ネット記事より文字入力速度と効率についての感想

http://gigazine.net/news/20170223-brain-implant/
脳内に電極を埋め込むことで身体にまひがある人が文字入力スピード「分速8ワード」の新記録を達成

への感想。(FB より転載)

素晴らしいですね、ちょっとサイバーというか生々しい感じですが。
非接触型の脳センシングの方が怖くないですが、言語レベルの入力はまだ難しいのでしょうか?

ちなみに分速 8 words 結構早いと思います。

先日、文科省の「学校におけるICT環境整備のあり方に関する有識者会議 第4回」を傍聴してきたのですが、その際に、杉並区立東高井戸小学校のあるクラスのキーボードの入力速度は平均 41 文字 / 分ということでした。

これは文科省の 2015 年の調査における 小学校平均 5.9 文字 / 分、中学校平均 17.4 文字 / 分 を大きく上回ります。

これからも分かりますが、頑張っている学校とそうでない学校では入力速度だけでなく、IT リテラシーも含めて大きな差がつくことが容易に想像できますね。

娘の通う小学校はICT のモデル校でもなんでもないので差がつくことがちょっと心配です。

キーボードや文字の入力速度というのは、アウトプット/成果物の物量に影響を与えるだけでなく、作成中の思考をなぞる都合上、ほぼ思考/一人ブレストの速度にも大きな影響を与えます。

ですからタイピングが速く正確であることは、普通の人が思っている以上に上位レベルの作業者にとってはクリティカルでとても重要なことです。

だから Google などの企業では、エンジニアが入社すると好きなキーボードの購入を補助したりしていますし、kinesis, dvorak や ergodox のような変態系と言われるキーボードの愛用者も多いですね。

https://www.kinesis-ergo.com/shop/advantage-for-pc-mac/

思考の速度にキー入力がついてこれないと、思考が引っ張られてしまうので、そのまま作業効率が遅くなってしまいます。

これは programming 時の英数記号を入力する際のキーボードの入力速度だけでなく、日本語文章を書くときは IME を経由するためこの IME の変換効率も作業能率に大きな影響を与えます。

私は個人的には作業効率が落ちるので IME を使わなくてはならない日本語入力が嫌いで、可能な限り alphabet だけで済む(つまり IME を使わないで済む)英語で文章を書くようにしていました。

しかし最近偶然に Google IME が事故って使えない状況になった時に、ことえりを使っていたら何故かライブ変換(変換キーを押さなくてもオンザフライで自動で変換してくれる)モードになっていて、現代の IME の能力であればライブ(On-the-fly)変換でかなりストレスなく入力が出来ることに気づかされました。

なので、日本語を入力するストレスがかなり小さくなったことは自分的にはかなり大きな発見でした。

Google IME はライブ変換できませんよね?何で?

Edmodo Con 2017 の感想など

少しだけ Facebook に感想を書いたのでこちらに転載しておきます。

Edmodo Con Japan 2017 でのある問いかけがありました。
「人類の知見やあらゆる情報が Google や AI などの電子的な情報源から容易に入手できるようになった時、教師の役割とはどのようなものになるのか?」

10年後、君に仕事はあるのか?
藤原和博校長/奈良市立一条高等学校
というセッションでの問いかけであり、世の中ネットの藤原氏の考えでは、
http://yononaka.net/「電子情報源から知識自体を得ることはできても、それを利活用すること、そして知識の対象を好きになること、といった感情の部分は人間にしかできないことではないか、そこが教師の重要な役割となるのではないか」

ということでした。もっとも過ぎるくらいもっともな意見だと思います。

ただ、少しだけツッコミを入れておくと、AI や Google はそれほど関係ないし、これまでだって辞書や本、テレビなどからも情報を得ることはできましたから、実は古い歴史的な課題、問題提起だったのではないかと思います。

AI の時代ですから、こう言った古い問いが再認識、再評価され、議論になるのはとても良いことだと思います。

さて、私も藤原氏のご意見には大いに賛同するところではありますが、古いテーマの問いかけなので、これまでに私なりに掘り下げてきた部分がいくつもありますので、とりあえず一部だけでも紹介しておきます。
 
これまでもネットやコンピューターをはじめとしたテクノロジーの進化により、知識や情報の入手はどんどん容易になってきました。
 
また上述の通り、これは近代の ICT に限定した話ではなく(古代の文字や紙の発明に始まり、製本技術、グーテンベルグの活版印刷の発明、グラハムベルによる電話/遠隔通信の発明、ラジオやテレビの発明、インターネットの発明などにも共通した話ではあります)、何らかの技術的なブレークスルーがある度に、知識の入手性は上がってきたのです。
 
そして、それが今はコンピューター、インターネット、AI によって更に容易になったに過ぎません。
 
さて、そのような情報の入手性の向上は社会や人に対してどのような変化を及ぼしてきたのでしょうか?
 
ある変化以前と後を比較してみると、知識や情報というものが、それを入手することが困難だった時代には一部の特権階級や知識階級、または高価な書籍を所有、閲覧することができる大学生や家庭などに限定されていたものが、変化以後はより広く一般の市民にまで降りてきた、と考えることができます。
情報の民主化、と言った考え方です。
 
もう少し身近で具体的な例で考えてみると、ある職場での業務に必要な知識や情報やノウハウといったもので、文書化されたりマニュアル化されていないものというのはたくさんある(あった)と思います。
 
それらを職場の上司や先輩や先任者といった人々は個人の知識や経験としてもっており、部下や後輩や新入社員といった人々に対して業務上の当然のアドバンテージであり、差別化要因でもありました。
また、そのような情報を持っていることにより、後輩達は先輩に頼り、尊敬することになり、職場の秩序維持に役立っていたということもあります。
 
しかし、それらの全てではありませんが、割と多くのものは、文字や文書化、マニュアル化できるものであって、きちっと情報やデータ、それを活用するインフラを整備すれば、属人性を排除して、より利便性の高い情報ソースとすることができる場合が多いのです。
 
現実は、それらを整備する時間や予算もノウハウもない、ということもあるでしょうし、お年を召された上司や先輩達にとって、自身の威厳や尊敬やサラリーの根拠となる、アドバンテージを自ら手放したり、陳腐化させたりすることに予算や時間を割く強いモチベーションなどあるはずもありませんでした。
 
それが、情報とその伝達技術の発展によって、特に昨今のネット(検索技術)や今後の AI 技術の発展によって、「単に知っているかどうか」というレベルの情報については、職場の上司や先輩(もっというと生身の人間)に頼ることなく、ネットなどで検索した方が、よほど一般化された精度の高い情報が得られるようになっていたりするのです。
 
これでは上司や先輩方の存在感は一気に減少し、後輩達にとってもそれほど役に立つ情報源でなくなってしまうことから、尊敬も得られづらくなることでしょう(割と多くの場面で実際にそうなっているのではないでしょうか)。
 
これは知識の「深さ」ではなく「広さ」や「量の多さ」「情報入手の速度」で勝負をしてきた専門職の人々にも当てはまる話で、例えばマスコミや弁護士、手業や精神的な要素をのぞいた部分の医師ですら成り立つ話です。
 
自身できちんと裏取りや考察を加えずにただ得られた情報を右から左に流すだけの新聞やテレビや記者達の存在意義はわずかなものです。
 
また、その辺の医師に相談するよりも、医療機器で測定できるデータを AI に渡した方が正確な診察結果を得られるような時代に既になってきています。
 
このような時代においては、やはり知識や情報の「量」「広さ」だけ、あるいは単にそれを「持っていることだけ」を売りにしていくのは職業/プロフェッショナルとしては危険であり、自身や職業自体の存続の危機であるとも言えるでしょう。
 
そこで、我々のようにある程度歳をとった人間はもちろん、今後歳をとって先輩や上司になる若い人々も考えなくてはなりません。
 
個人としては、自身の存在意義や価値を経年劣化させずに高いまま維持するためにはどうしたら良いのか。
また、組織やチームにこれまでとは違った形で貢献し続けるにはどうしたら良いのか。
 
より広い視点では、「知識や情報を持っていること」自体の価値が減少していく社会において、(知識産業に従事する人間は特に)、何を持って価値を提供することができるのか。
 
その答えにならない答え、というか最初の回答は、「知識や情報を利活用するメソッドやスキルを持つこと」でしょうし、「知識や情報をさらに深掘りすること」、そして上述のように、より人間的な部分である心理や感情に着目することなのではないでしょうか。
 
古くからある言葉である
「平凡な教師は言って聞かせる。 よい教師は説明する。優秀な教師はやってみせる。 しかし最高の教師は子どもの心に火をつける。」
ウィリアム・ウォード
 
は最後の話ですね。
1,2 番目の内容についてはもっと深掘りでき(てい)ますので、別の投稿で紹介できればと思います。
(とりあえずここでは終わり)
 
教師や学校の存在意義、役割、という視点に限定/戻すならば
 
工学院大学附属中学校 高橋一也氏もおっしゃっていますが、単に知識を伝える人間/場としての役割だけでなく、子供達同士を繋げる場所、人間対人間としてのコミュニティを形成し、お互いにコミュニケーションをして高め合っていく関係や場所、つまり Hub となることが重要ではないかと思います。

日本語プログラミング言語情報(Draft)

本物の日本語プログラミング言語をまつもとさんとかが書いてくれると素晴らしいと思いますが、現存の日本語プログラミング言語は大学の研究者などが作成しているものが多く、あまりスマートな仕様にはなっていないものが多いです。

現代的な現場プログラマーであれば DSL を用いて擬似プログラミング言語を作ることは難しくないでしょう。個人的には片手間で教育用日本語プログラミング環境を作るのであれば国産言語である Ruby を使って DSL を作成するのが(政府などの視点も含めて)良いのではないかと思います。

なでしこ

ひまわり

プロデル

ドリトル

DSL

 

References

Setup Ubuntu 16.04 LTS on an Amazon Lightsail instance

Get ready for things you may want to do afterward.

Below softwares are not installed by default.

  • C Compiler
  • Java and other interpreter languages
  • Upstart
  • Apache, Nginx
  • Docker
  • Emacs

Install Compiler and dev libraries

sudo apt-get install build-essential zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libssl-dev

Install programming languages

Install anyenv

Follow the instruction below

https://github.com/riywo/anyenv

Install Python, Ruby, Node.js

Install Python

anyenv install pyenv 
exec $SHELL -l
pyenv install -l # to find the latest version
pyenv install 3.6.0 # and install the found one
pyenv global 3.6.0

Install Ruby

anyenv install rbenv
exec $SHELL -l
rbenv install -l # to find the latest version
rbenv install 2.3.3 # and install the found one
rbenv global 2.3.3

Install Node.js

anyenv install ndenv
exec $SHELL -l
ndenv install -l # to find the latest version
ndenv install 7.3.0 # and install the found one
ndenv global 7.3.0

Install JDK

sudo apt-get install default-jdk

Install Docker

Follow the instruction below,

https://docs.docker.com/engine/installation/linux/ubuntulinux/#/install-the-latest-version

Install Docker Compose

pip install docker-compose

If you use docker-compose from non-root account(Username: ubuntu for lightsail Ubuntu VPS), do not forget to add the user(ubuntu) to docker group.

Install and Run Nginx

There is an option to run Nginx

  • Setup and run Nginx inside Ubuntu
  • Setup and run Nginx inside Docker container

I installed docker and docker-compose already, and it is usually a better option to run a service inside a container since it is easier to do the same on other server(s) in this cloud age.

You can run the same service(with the same configuration) on Linux/macOS/Windows, using docker, and it easily scales, too.

Run Nginx from docker command

$ docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx

For more details, please refer to,https://hub.docker.com/_/nginx/

Run Nginx from docker-compose

Prepare a docker-compose.yml file, then run docker-compose up -d


version: '2'
services:
 nginx:
   image: nginx
   ports:
   - "80:80"
   volumes:
   - /usr/share/nginx/html:/usr/share/nginx/html:ro
 

Change Docker network bridge IP range

Background

By default, docker uses 172.17.0.0/16 IP range, and  my VPN setting also uses the same IP range, thus I could not connect to the system with docker from VPN network.

$ ip route
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.42.1

Resolution

Reconfigure docker0 bridge IP range, remove docker0 bridge, then restart docker.
You can configure docker in many ways, and showing you an example configuration using Systemd Drop-in.
/etc/systemd/system/docker.service.d/10-change_iprange.conf
*) Please note that 2 ExecStart lines are necessary, the first to remove the existing setting.

[Service] 
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --bip=192.168.42.1/24 --fixed-cidr=192.168.42.128/25 # For Docker 1.9 or older 
ExecStart=/usr/bin/dockerd --bip=192.168.42.1/24 --fixed-cidr=192.168.42.128/25 # For Docker 1.10 or newer

Then remove the existing docker0 bridge and restart docker daemon.

$ ip link del docker0
$ systemctl reload-daemon
$ systemctl restart docker

Bridge automatically created by docker compose

Per docker compose document, you need to be careful when you use docker compose on a system which is configured not to use the default IP range(172.0.0.0/24) as docker0 bridge.

When you run docker-compose up, the following happens:
A network called myapp_default is created.

And the IP range of the automatically created bridge is the default one, even if you have configured your docker engine not to use that range.

To avoid this problem, you need to specify the range of the bridge in the docker-compose.yml file,

network_mode

    network_mode: bridge

using external option

networks:
  default:
    external: true
    name: docker0

or even you can specify a specific IP range directly by providing all the necessary info in the docker-compose.yml file.

Ubuntu

In case the system is running Ubuntu, not CentOS, the file you need to modify is, /etc/default/docker

DOCKER_OPTS="--bip=192.168.42.1/24 --fixed-cidr=192.168.42.128/25"

References

インフルエンザと感染性胃腸炎の流行状況(東京都/2016-11-16)

順に胃腸炎(昨年との比較)、インフルエンザ(昨年との比較)、インフルエンザ(過去5年間の比較)です。

今年のインフルエンザは過去5年で比較しても立ち上がりが早いようですが、感染性胃腸炎の方がヤバい感じですね。。

※ 今週は 2016年の第45 週です

 

胃腸炎

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-16-19-17-28

 

インフル

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-16-19-18-03

インフル(5年比較)

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-16-19-19-42

ソース) http://survey.tokyo-eiken.go.jp/epidinfo/weeklychart.do

Zabbix on macOS(Draft)

Zabbix on Mac

For some reasons, I needed to prepare and run a monitoring service(both server and agent) which runs on Mac (and Linux). I found Zabbix and Nagios are one of the best choices, and I chose Zabbix this time.

Per my quick check, it is very easy to setup an agent on macOS, but not so easy on server side. So I ended up setting up a Zabbix server and its related components(Web, DB servers) using Docker.

In Short,

  • Use Docker for Server (and related components, Web, DB Servers)
  • Use HomeBrew for Agent

Prerequisite

  • Homebrew
  • Docker for Mac

Configure and Run Zabbix Server using Docker

You can configure/setup Zabbix and its related components/containers individually, but I’d suggest to use Docker Compose to handle everything needed to run Docker Server/Service.

Prepare docker-compose.yaml file in the directory of your choice, then run containers using docker-compose.

docker-compose.yaml
version: '2'
services:
  zabbix-db:
    image: monitoringartist/zabbix-db-mariadb
    volumes:
      - zabbix-db-storage:/var/lib/mysql
      - backups:/backups
      - /etc/localtime:/etc/localtime:ro
    environment:
      - MARIADB_USER=zabbix
      - MARIADB_PASS=my_password
  zabbix-server:
    image: monitoringartist/zabbix-3.0-xxl:latest
    depends_on:
      - zabbix-db
    ports:
      - "80:80"
      - "10051:10051"
    volumes:
      - /etc/localtime:/etc/localtime:ro
    links:
      - zabbix-db:zabbix.db
    environment:
      - ZS_DBHost=zabbix.db
      - ZS_DBUser=zabbix
      - ZS_DBPassword=my_password
volumes:
  zabbix-db-storage:
    driver: local
  backups:
    driver: local
Run Zabbix server
$ docker-compose up -d # -d option indicates that the containers are run in detached mode/background

 

Install and Run Zabbix Agent on macOS

Install Zabbix Agent

Install Zabbix
$ brew install zabbix

This does install all the zabbix components, incl Server, Proxy, and Agent.
If you only need to install Zabbix Agent on a target system, you can do,

Install Zabbix Agent
$ brew install --agent-only zabbix # Zabbix 2.x
$ brew install --without-server-proxy zabbix  # Zabbix 3.x

Run Zabbix Agent

You can run Zabbix Agent simply by doing,

Run Zabbix Agent from Command Line
$ /usr/local/sbin/zabbix_agentd

But this is only for 1 time run, and we want it to be started automatically when the system is rebooted, so it’s better to prepare an init script for the agent.

With the init script, you can start/stop the agent manually, or from any service management systems, such as, initd, systemd, launchd.

Traditional Unix init script style
#!/bin/sh
 
agentd=/usr/local/sbin/zabbix_agentd
conf=/usr/local/etc/zabbix_agentd.conf
pid=/tmp/zabbix_agentd.pid
 
case $1 in
start)
    $agentd -c $conf;;
stop)
    kill -TERM `cat $pid`;;
restart)
    $0 stop
    sleep 10
    $0 start
    ;;
*)
    echo "Usage: $0 start|stop|restart"
    exit 1
esac

Or if you like it to be more macOS-ish(but too traditional/obsoleted actually tho),

StartupItems style (obsoleted)
#!/bin/sh
. /etc/rc.common
AGENTD=/usr/local/sbin/zabbix_agentd
CONF=/usr/local/etc/zabbix_agentd.conf
PIDFILE=/tmp/zabbix_agentd.pid
program="$0"
StartService() {
        $AGENTD -c $CONF
}
 
StopService() {
     kill -TERM $(GetPID $program)
}
RestartService() {
    StopService
    sleep 3
    StartService
}
 
RunService "$1"

 

Save the above script then run

start/stop zabbix_agentd using init script
# Assuming the saved script name is "zabbix_agent".
$ zabbix_agent start
$ zabbix_agent stop
$ zabbix_agent restart 

As described above, using a shell script to start/stop/restart a service, is not the officially recommended way for macOS, so if you like, please consider preparing plist and use launchctl[d].

com.zabbix.zabbix_agentd.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.zabbix.zabbix_agentd</string>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>SuccessfulExit</key>
    <false/>
    <key>UserName</key>
    <string>zabbix</string>
    <key>GroupName</key>
    <string>zabbix</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/sbin/zabbix_agentd</string>
        <string>-c</string>
        <string>/usr/local/etc/zabbix/zabbix_agentd.conf</string>
    </array>
</dict>
</plist>

 

 

References

HomeBrew on El Capitan

Due to SIP restriction, the old HomeBrew(Migrated from Yosemite or older macOS) does not work well on El Capitan(and newer).

$ brew update
 Error: /usr/local is not writable. You should change the ownership
 and permissions of /usr/local back to your user account:
 sudo chown -R $(whoami) /usr/local

The easiest workaround is to change the owner of the directory /usr/local to the brew owner as shown in the message above, then brew update.

$ sudo chown -R $(whoami) /usr/local && brew update

But strangely enough?, at the very last of the output of the command “brew update”, you will see the following,

$ brew update
 ...
 ...
 ==> Migrating HOMEBREW_REPOSITORY (please wait)...

==> Migrated HOMEBREW_REPOSITORY to /usr/local/Homebrew!
 Homebrew no longer needs to have ownership of /usr/local. If you wish you can
 return /usr/local to its default ownership with:
 sudo chown root:wheel /usr/local

Yeah, you do not need the ownership of the /usr/local directory to run the latest HomeBrew even on El Capitan, but only when you update it from legacy version.

Reference