IchigoJamの7セグLEDタイマーで16進数を学ぼう!

IchigoJamの7セグLEDタイマーで16進数を学ぼう!

7セグLEDとは?

IchigoJamは、プログラミング学習用の手のひらパソコンです。手のひらサイズの小さな基板でBASICのプログラミングの学習ができるすぐれものです。本日は、この手のひらパソコンに「7セグLED」をつないで、16進数の学習をしてみたいと思います。

「7セグLED」をというのは、7つのLEDがひとつのボックスに格納された電子部品です。7つあるLEDのうちどれとどれを光らせるかで、0〜9までの数字や、ABCDEFくらいまでのアルファベットを表現できる、便利な表示装置です。コンピュータが動き出した頃の初期には、いや、コンピューター以前の歴史があるかも知れません。このたった7つの独立した部品をそれぞれ個別に光らせることで、数字を表現しようなどと考えた人は、賢い人ですね。

写真では、7個の縦棒・横棒の他に右下に丸いポッチがありまして、ここも個別に光らせることができます。ですので、8個のLEDが付いていることになります。が、なぜか、7セグLEDって言います、この部品。

この「8」という数字。コンピュータの内部を語る上では、マジックワード。神秘の数字なのです。

例えば、この表示装置で、”4″という文字を表現するには、下の図で、OUT4, OUT3, OUT6, OUT5に示したLEDを光らせればいい訳です。

7セグLED PARA LIGHT C-551SRD
本日、学習に使用する7セグLED
7セグLEDで”4”を表現する
7セグLEDで”4″を表現

IchigoJamに電子部品をつなぐ

部品をつなぐには、ブレッドボードってのを使ってみました。そこに部品を並べます。IchigoJamと、LEDの間には適当に抵抗を噛ませています。

ポイントは、結線ですね。

IchigoJamの端子の仕様を見てみましょう。国野亘(Wataru KUNINO)さんという方がわかりやすいピン配置の説明をしてくださっていますので、こちらを参考にします。

IchigoJamのピン配列表

OUT端子やIN端子は設定によって、入出力の方向も変えることができますが、今回は、7個のLEDを光らせるだけなので、OUT1からOUT7を使います。

OUT7は基板に付いている赤い小さなLEDを光らるピンと共用のようです。なので、キーボードから以下のように打つと、基板のLEDが光りますが、この時、OUT7のピンもONになります。

LED 1

さて、OUT1〜OUT7をLEDにつなぐときは、どのようにつないでも構いません。後程算出する、16進数の”表示用コード”が変わってくるだけです。

つなぎ方が違っても、ソフトで光らせるパターンを簡単に変更ができる、というのはひとつのポイントです。

昔の人は「ハードウェア」、「ソフトウェア」と旨い事言ったものです。

今回はブレッドボードなので結線を間違えてもすぐに抜き差しして、入れ替えることができます。でも、本物の電気製品であれば、ハンダゴテ(古い!)で7セグLEDを本体とつないでしまいますよね。そうすると結線自体はすぐに変更できないから、ハードウェア(固い。すぐに変えられないってこと)と呼びます。一方、結線を間違えても、後でプログラムで数字を変更できます。光らせるLEDの組み合わせを後からいくらでも変更可能。これがソフトウェア(柔らかい。すぐに変えられるってこと)の仕事。

という訳で、私は、以下の図のように適当に結線してしまいました。

7_seg_ledとIchigoJamの結線
LEDのそれぞれをIchigoJamのどのOUT端子につないだかを示す

LEDをIchigoJam BASIC言語で光らせるには

IchigoJam BASICには、”OUT”というコマンドが用意されています。

OUT 数字1, 数字2

のように使います。例えば、私の場合、OUT3は真ん中の横線なので、”OUT 3,1″ で光り、”OUT 3,0″で消えます。

IchigoJamで7セグLEDの一つを表示
IchigoJamで7セグLEDの一つを表示。 OUT 3,1 を実行

これで、一つ一つのLEDをOn,Offすればいいので、OUT ○,1 とか OUT ○, 0を複数個並べて書けば、ご希望の文字を表示することができることがわかりました。

例えば、私の場合、先の”4″の表示であったように、OUT3, OUT4, OUT5, OUT6を光らせればいいので、

OUT 3,1

OUT 4,1

OUT 5,1

OUT 6,1

と、順番に実行すれば、”4″が表示されます。めでたしめでたし。

いえ、そうではありません。”4”という一つの文字を表示するのに4行もプログラムを書かないとならないのは、格好が悪いです。

複数のLEDを一発で光らせる方法

OUT 0と実行すると今まで光っていたものがすべて消えます。さっきの例だと、LEDがつながっているピンを指定して、例えば、OUT3につながっているLEDを消したい場合は、”OUT 3,0″としないと消せないのかと思います。

実は、OUTコマンドは、数字一つだけ指定して実行することができます。

OUT 3

と実行してみましょう。

あれ?LEDが2つ点灯します。一体、何が起こっているのでしょうか??

まずは”2進数”の登場

OUTコマンドは、数字が一つだけ指定すると、OUT1〜8のピンがONになる「組み合わせ」を指定していることになります。例えば、OUTの1と2をOn(光らせる)したい場合は、以下のようなオレンジ色の部分がを示したいと思います。

端子の番号

この図をちょっと数字で表してみます。一番の8の桁が0、つぎの7の桁も0、。。。2の桁が1、1の桁が1になっていればよいので、

00000011

という数字で表現できます。これがOUT端子の”2進数”表現という事になります。実は、これ、普通お金の計算などで使う数字でいうと3になります。10進数でいうと”3″です。

2進数は、0と1だけで表現された数字なので、

00000001=1

00000010=2

00000011=3

という感じになります(=の後が10進数の表現)。

なので、先ほどOUT 3というコマンドを実行すると、OUT1とOUT2の端子につながった、”2つ”のLEDが光った、ということになります。

では、”OUT 0″というコマンドは何を意味していたのでしょう?

これは2進数で言うと、

00000000

という番号を指定したことになります。つまり、ONになるLEDはひとつもない状態にしろ、ということで、7セグLEDのすべてのLEDが消灯する結果になります。

IchigoJam BASICでは、2進数は、”`”とい記号とを数字の前につけることで、表現します。

OUT `00000011

とコマンドを実行すると、OUT1とOUT2の端子につながった、2つのLEDが同時に点灯します。

一番最初の”4″を表示するためには、私の結線方法だと、OUT6,OUT5,OUT4,OUT3につながったLEDを同時に光らせればいいので、以下のパターンとなります。

7セグLEDで4を表示するパターン.png

オレンジ色のところを1にした2進数表現は00111100なので、以下のコマンドを実行するとめでたく、文字”4″が現れることになります。

OUT `00111100

いよいよ”16進数”の登場

16進数というのは、1,2,3,4,…と続いて、16個目の数字でひと桁、繰り上がるような数の表現方法です。でも、残念ながら数字は9までしかないので、9以降は、A,B,C,D,E,Fの6文字を使って表現するものです。

これが2進数と非常に相性がよく、順番にリストにしてみますと、以下のように4桁の0,1の2進数が、ちょうど16進数の1桁分に相当します。

2進数と16進数

ですので、8桁の2進数があれば、単純に、機械的に、2桁の16進数にマッピングすることができます。ちょっとやってみましょう。

先ほど、

OUT `00111100

は7セグLEDで”4″を表示させるためのコマンドでした。では、この2進数を、上位4桁と下位4桁に分けて、それぞれ上のテーブルの16進数で置き換えます。つまり、上位4桁0011→ 3、下位4桁1100→C。なので、16進数は3Cになります。

OUT #3C

は、先ほど同様、7セグLEDで”4″を表現させることができます。IchigoJam BASICの場合、16進数は頭に#記号を付けます。

さて、同様に、7セグLEDで表示させるパターンを16進数のコードで表してみましょう。わかりやすいように表にしてみました。

IchigoJamで7セグLEDを表示させるパターン
IchigoJamに送る16進数の表示用コードを計算する

例えば、私の結線では、7セグLEDで数字の”7”を光らせる為に光って欲しいのは、OUT7端子, OUT6端子, OUT5端子, OUT4端子につながったLEDです。上記の表で求めたように、16進数の表現で言うと#78です。従って、OUT #78というコマンドを実行すると、7セグLEDで”7″が現れます。

つまり、この表の、「基板に送る16進数」という列に書かれている#〇〇の16進数が、7セグLEDをどう光らせるかを表す「表示用のコード」になります。

先ほど、結線をするときに、どの端子にどのLEDをつなぐかは適当でいい、と言いました。要は、実際の結線に合せて、この表示用のコードを作りなおせば、どんな結線にしておいてもソフトを書き換えれば表示可能なのです。この柔軟性こそ、まさにソフトウェア。プログラミングで実現することなのです。

やっと、ここからプログラミングする

さて、以上が下準備です。ここからが本当のプログラミングです。

IchigoJam BASICには「配列」という変数の列が使えます。配列に入っている数字は、例えば、以下のように読み出せます。

PRINT [5]

これで、配列の5番目に入っている値が、IchigoJamの画面に表示されます。

配列に先ほどの16進数コードを、0から順番に入れておくと、例えば、先ほど表示の”7″をLEDで表現したい場合は、#78を基板に送ればいいことを説明しました(OUT #78を実行)。配列の7番目に、#78を入れておくことで、プログラムはこんな風に書けます。

OUT [7]

16進数の難しい表示コードを覚えていなくても、これならLEDに7を表示する事が一目瞭然です。わかりやすいです。ソフトウェアって素晴らしいです。

これが出来るようにするために、プログラムの最初に配列を”初期化”して置きます。以下のコードをプログラムの一番最初に実行します。

10 LET[0],#7B,#30,#67,#76,#3C,#5E,#5F,#78,#7F,#7C

最初の10はプログラムの行番号です。

RUN

と実行すると。それ以降、

OUT [7]

を打てば、7セグLEDに”7″が現れ、

OUT [3]

と打てば、7セグLEDに”3″が現れます。便利便利。


さて、ここでプログラムの初心者が混乱します。

OUT 0

と打つことと、

OUT [0]

と打つことの違いがわからなくなります。わかりますか?わかった人は混乱していない人です。

OUT 0はLEDを全部消すこと、OUT [0]は配列0番目の値を基板に送ることなので、配列の0番目に入っている#7Bを送ること、つまり LEDで “0”という文字を表示することです。

タイマーのプログラムを作る

タイマーと言ってもひとけたの数字しか表現できないので、1秒毎に数字がカウントアップして9まで言ったらゼロに戻るようなプログラムです。

Screenshot from 2018-10-07 18-13-30

For文で、0から9まで回して、OUT [I]でその数字の16進数コードを7セグLEDに送ります。

それをGotoでぐるぐる回すだけ。ほんとにそれだけです笑。

以上です。


電子工作ランキング

Excelに英文を打ち込んだら、読み上げた音声ファイルmp3を返すサイトの制作

Excelに英文を打ち込んだら、読み上げた音声ファイルmp3を返すサイトの制作

English Excel to Speech

ちょうど昨年の9月頃に、English Excel to SpeechというWebアプリを作りました。

English Excel to Speech (サーバが遅いので、読み込みに時間がかかるかも知れません)

ブログもやってなかったし、個人的な技術的興味もあり、作ったものでほったらかしなのですが、たまたま、思い出しました。

子供の英語の教育に悩む奥さまにお願いされて、作りました。学校から英単語の一覧のプリントを中1だった子供がもらってくるのですが、発音がわからないので、読み上げて欲しいという要望です。ネットで調べたところ、英文を英語の読み上げしてくれる技術はそこら中にあります。そういう技術を組み込んで作ってみました。

以下、English Excel to Speech サイトより:

Excelファイルに縦に並べた英単語を、 MicrosoftのText to speechエンジン を使って、読み上げてその結果をmp3の音声ファイルに保存します

中学生の子供の英語の教材に出てきた英単語を、Excelファイルに順番に並べて打ち込めばその音声読み上げmp3ファイルを使って繰り返し学習ができます

 

Webアプリの技術要素

私は、仕事ではITバブルと言われていた2000年代の前半(古い!)に、Webサービスで主にクライアント側を担当していたことがあります。最近は仕事も変わり、組み込み系の技術に触れることの方が多いです。とは言え、残念ながら自分でプログラミングすることはありません。

Webアプリの制作は、本当に週末プログラミングで、趣味の活動です。一通りアプリを作ってみて、

”あー、なるほど、世の中こうなっているのね?”

と実感を得るのが楽しいのです。

という訳で、本日は、English Excel to Speech を作るにあたって、学んだ技術要素をまとめてご紹介します。

開発言語:Python

Pythonを使います。バージョンは、去年(2017年9月)時点の最新版だったと思いますが、3.5.2を使いました。Pythonは2.x系と3.x系で挙動がかなり変わっています。どちらも変わらずに動作するようなプログラミングのテクニックもあるようですが、そこは趣旨が違いますので、気にせずに3.x系で実装しました。

 

TIOBE Indexによりますと、プログラミング言語のランキングで、Pythonは4位。去年の同時期は、C#が4位だったみたいですが、1ランク上がっています。私は、仕事では以前、WindowsのC/C++を使って実際にコーディングしていました。

次に学ぶ言語としては、Pythonは良いのではないでしょうか。

プログラミングランキングOct2018

Pythonの特徴としましては

  • 高級言語で対話型(非コンパイル)で使えるのでお手軽
  • 関連ライブラリーのバージョン管理(pipというツール)が、サーバへのdeployに便利
  • 高級言語でありながら、最近のトレンドであるデータ解析やAIといった数値計算も高速に行える
  • バージョンや使用ライブラリが異なる複数の実行環境を1つのシステムに作成・管理し、簡単に切り替えて使える(バーチャル環境)

などがあり、結果として、関連技術が異様に発達して、現在も便利に使える言語として日々進化しています。

例えば、Jupyter notebook はChromeなどのWeb browserで動作するPythonの環境です。実行プログラムから実行結果までnoteとして保存できるので、学習用途に最適。私のような週末プログラマーで、忘れっぽい高齢者でも、作業状態を保持しておけます。

AIといえば、TensorflowKeras といった有名ライブラリもPythonで利用できるようになっています。

すごいところは、これらのライブラリやツールのインストールが、WindowsでもLinuxでもMacOSでも、”pip install”という魔法のコマンドで簡単にインストールしてバージョン管理までやってくれるのです。

 

フレームワーク:Django

Webアプリケーションを作成するにあたり、使用したWebアプリケーションフレームワークはDjangoです。Djangoは、Model, View, Controllerが綺麗に分離した設計になっていて、手軽にアプリが作れます。

今回のアプリケーション(English Excel to Speech)はデータベースを使いませんでした。DjangoのModelは完全にデータベースの操作や構造を隠蔽して、PythonのClassのインスタンスとしてアクセスすることでデータベースを操作することができます。大規模なシステムで運用することもよく考えら得れていて、データベースのマイグレーションをするツールもあり、運用時点でのデータベースの構造変更も手軽に間違いなくできるよう、工夫されています。

Djangoには、Viewは便利なtemplateの機能がついていますので、大方の画面イメージは、特殊なHTMLで記載しておき、動的に変わる値は、Controllerが作る(今回の主な実装ポイント)という感じのアプリになります。

このフレームワークのいいところは、djangoで作ったWebアプリケーションがポータブルなこと。つまり、どこかでアプリをつくれば、そのアプリをdjangoでつくった別なシステムに、手軽にdeployできること。今回のサイトは、”xls2s”というアプリひとつでできているサイトですが、例えば、ここに掲示板のアプリとか、ショッピングサイトのアプリとか、追加していくのが簡単、ということです(やったことはありませんが)。

 

サービス:Microsoft speech API

音声合成(Text to speech)のサービスは、Microsoftのものを使用しています。

Bing Speech : オーディオをテキストに変換、インテントを理解、自然な応答としてテキストを音声に変換

このAPIはCognitive serviceという一連の「認識」系の機能の一つとして提供されています。Azureのアカウントを使ってある程度無料で使用可能なものになっています。API経由でテキストを送ると、その結果としてMP3など、音声ファイルを送り返してくれるようなサービスになります。

音声の出力フォーマットは、32kbpsから、128kbpsまで、選択可能。ファイルフォーマットも、rawでーたやriff形式が選択できます。

また、面白いのは、gender(男性か女性)を選んだり、同じ英語でも、インド人が話した英語のようなアクセント違いの発話にも対応しています。

 

ライブラリ: Excel readなど

“pip list”コマンドで出てくる、ライブラリ一覧は以下の通り。

特徴的なのは、excelファイルを読み込むための、xlrdや、読み込んだ後に、excelのデータ一覧から順番でデータを取り出して操作する為の、pandasのDataframeを使っているあたりです。

Django (1.11.2)
numpy (1.13.1)
pandas (0.20.3)
pip (9.0.1)
python-dateutil (2.6.1)
python-http-client (3.0.0)
pytz (2017.2)
sendgrid (5.2.0)
setuptools (36.0.1)
six (1.10.0)
wheel (0.29.0)
xlrd (1.0.0)

 

開発環境:PyCharm

PyCharmは、エディタやデバッガが付いている統合開発環境(IDE)です。Pythonの開発ではひと通りこの環境で達成できます。

Pythonのバーチャル環境にも対応していますので、複数の環境の複数のプログラミングをひとつのIDEで開発できます。

エディタは、当然、予測入力や文法チェック、構文チェックがついていますし、ライブラリの依存関係などもチェックしてくれる、すぐれもの。関数の定義へジャンプしたり、コメントがあれば、関数を使ったプログラムのコーディングの時にコメントの表示もしてくれます。

ソースコード管理(バージョン管理)は、GitやGitHub、CVS、Subversionなど一通りそろっています。

今回のアプリケーションは、AzureサーバへのdeployにGitを使った方法を選択しました。ローカルに作ったrepositoryへの操作が、PyCharmからできて、加えてサーバへのdeployにも便利でした。

 

サーバ: Azure

音声合成のサービスにMicrosoftを使ったので、サーバも一応、Microsoftを選択してみました。

Microsoft Azure : あなたのビジョンを、あなたのクラウドで。

以前は、サーバはコストがかかるのが常でしたが、開発中のサイトを公開するくらいでアクセスが多くないのであれば、タダで使えます。

Pythonで作ったアプリもちゃんと動かせます。djangoも確か公式ドキュメントがあった気がしますが、何しろ1年前の作業だったもので、忘れてしまいました。。。

前述のようにpythonの仕組みで、pip freezeを使ってライブラリのバージョン管理がされていますので、昔(古い)のようにサーバに使用ライブラリをいちいちインストールする手間はありません。非常にすんなり最初のdeployが進んだ記憶が。(ごめんなさい忘れました)

 

まとめ

ざー、と書くと色々な技術要素が出てきました。ただ、私、日曜日にプログラミングする週末プログラマー。このような技術を駆使すれば、週末だけの時間を使って簡単にWebアプリを公開できてしまう。しかも、パソコンが自宅にあれさえすれば、お金をかけずに、一人で。世の中進歩しています。

 

IchigoJam第一歩。EasierCAPビデオキャプチャで画面表示

IchigoJam第一歩。EasierCAPビデオキャプチャで画面表示

IchigoJamでプログラミング

数年前、当時小学生だった娘の夏休みの宿題に購入したIchigoJamという子供向けパソコンをまた動かしてみました。小学生のプログラミング教育の必須化を目の前に、MBAのクラスメートなどで、私の職業柄、プログラミングの先生をやったらどうかと言ってくる人がけっこういます。

最近のプログラミング学習って、ScratchみたいなGUIでプログラミングツールでお絵かきのようにするものが流行りです。コンピュータを動かす仕組みとしてのプログラミングの概念を勉強するのに、このようなツールは有効です。でも、私が思っているプログラミングとは結構違います。

私が子供の頃(30年くらい前)は、プログラミングといえば、キーボードからテキストを打ち込んで呪文のような文章をつらつらと書き上げて「RUN」と実行するようなもの。モニターも黒背景に白の文字とか緑の文字がつらつらと表示されるような代物でした。テキストを打ち込むだけなので、マウスなんてものはありません。当時はBASICというプログラミング言語が流行っていました。

IchigoJamは、そのBASICを学べる、子供の学習用の小さなコンピューターです。

Micro USBで電源を取り、キーボードを繋ぎ、モニターとしてビデオ端子のついたテレビに繋いで使います。

IchigoJamをパソコンにつなぐ
IchigoJamという小学生の学習向けコンピューター

パソコン画面に表示する為にEasierCAP購入

ビデオ端子付きテレビ、というのが曲者です。WindowsとかLinuxとか普通のパソコンにつなぐモニターはアナログのビデオ端子などはついていません。今時は4Kテレビなどでもついていないものが出てきているのではないでしょうか。

以前は、VHSの録画機とか、ビデオカメラなどでも普通についていた黄色のビデオ端子は、もはや過去の遺産になりつつあるのです。

わざわざ大画面テレビにしょぼいBASICのプログラミング画面を表示するのもナンセンス。そこで考えたのが、パソコン用のビデオキャプチャ。私は自宅ではLinux (Ubuntu 16.04)を使用しています。Linuxでも使えるビデオキャプチャを探してみました。

購入したのは、こちらの商品。Amazonで1,200円でした。


MINGCHANG EasierCap USB 2.0 dc60テレビDVD VHSビデオ S端子 キャプチャアダプタUSBビデオキャプチャ レコーディングアダプタAVI/JPG/BMP

 

 

 

USBポートにさして、黄色の端子にIchigoJamの出力を繋げば、WindowsとかLinuxなどのOSの上で、IchigoJamが使えます。

似たような商品はピンキリで色々あります。この商品は、EasyCapという商品がオリジナルであったようですが、その後海賊版が出まわり、もう何が本家なのだかわからない状態。Linuxで動くのだかどうだかもわかりませんでしたが、安いのでダメ元で購入してみました。

表示はVLC メディアプレーヤーで

EasierCapをUbuntuの本体に差し込むと、/dev/video0とか/dev/video1とか、というデバイスとして勝手に認識されました(抜き差ししたら名前が変わったよう)。

画面表示をするには、VLCメディアプレーヤーが便利そうです。

「メディア」メニューから、「キャプチャーデバイスを開く」を選択します。

VLC「メディア」メニューから「キャプチャーデバイスを開く」を選択
VLC「メディア」メニューから「キャプチャーデバイスを開く」を選択

表示されるダイアログボックスで、ビデオデバイス名のプルダウンメニューから所定のデバイスを選択します。EasierCAPが刺さって正しく認識すればここに/dev/video*というの表示され、選べるようになります。(*の部分は数字が来ますが、環境によって異なると思います)

Vlc キャプチャーデバイスの選択画面

「再生」を押すと、表示が始まります。こんな感じ。

IchigoJamをVLCで表示
IchigoJamをVLCで表示

早速BASICでプログラミング

早速BASICでプログラミングしました。上の画面キャプチャで表示されているプログラムは、IchigoJamの本体についた赤いLEDを10回点滅させるものです。

10行: 変数Aに1を代入

20行:もしAが10より大きくなったらプログラムを終了

30行:LED 1で表示

35行:30フレーム待つ。IchigoJamは60フレームで1秒なので、ここでは、0.5秒待つということになります。

40行:消す

45行:また0.5秒まつ

50行: Aに1を足す

60行: 20行目に戻る。50行に来るたびにAがひとつ増えるので、20行の実行は10回目にプログラム終了します。

で、RUNとキーボードで打って、「Enter」キーを押しますと。LEDがピカピカ光ります。

IchigoJamの画面を「レコーディング」してみました

VLCなら画面の「レコーディング」もできてしまいました。

VLCで表示しながら、レコーディングボタンを押すと、Ubuntuだと、ユーザの「Video」フォルダにaviファイルが作成されます。

 

 

電子工作ランキング

Evernoteのセキュリティ対策がヤバい

Evernoteのセキュリティ対策がヤバい

セキュリティ対策万全のサービス

突然ですが、Evernoteって使っていますか? 私はユーザなのですが、今日はEvernoteのセキュリティ対策がすごい、という話をします。

 

Evernoteとは?

Evernoteはクラウドの「ノート」です。自分のメモをどんどん書いて個人的なノートとして管理していけるサービスです。緑の象さんマークが目印。

私はネットで気になる記事とか、ブログの下書きとか、レシピのコピーとか、Cookpadの記事とか、忘れちゃいけない重要情報(!)などなどをEvernoteに入れて管理しています。

スマホのアプリもありますので、スマホでもパソコンでもアクセスOK。あっちのパソコンでもこっちのパソコンでも自由にアクセスできるので非常に便利です。

関連サービスや、Evernoteに繋がるアプリとか色々あるようですが私はそれほど難しい使い方はしておりませんで、ただ単にメモを登録して保存する先として使っています。検索が簡単にできるので、あれ?なんだっけ?ってな時にもすぐ探せて便利なのです。

 

Evernoteから最近届いたお知らせ

そんなEvernoteですが、3日前に変なメールが届きました。文面は以下です。

お客様へ

お客様のアカウントにて、 不審なアクティビティが検知されたためご連絡差し上げております 。第三者が、お客様のパスワードを Evernote 以外のウェブサイトまたはサービスから不正に入手した可能性があ ると思われます。弊社は、お客様の Evernote アカウントにおけるセキュリティ上のリスクを考慮した結果、 アカウントを保護するためにパスワードのリセットを実行させてい ただきました。

 

え??どちら様が私のアカウントで侵入しようとしたのでしょう?

やめてよー!

でも、これはすごいと思います。パスワードがリセットされて不便だけど、ある意味安心です。このメールにリセット方法が書かれていたのですが、それに従わなくても、パソコンでいつもの自分のページを開こうとしたら、新しいパスワードの入力画面に促されました。

しかも、新しいパスワードも使っている他の端末もリセットするか?というチェックボックスなどもあり、(危険ではあるものの)今使っているスマホのアプリは再度ログインしなおさなくても使い続けられるようにするというオプションも用意されています。要は、Evernoteが勝手にリセットはしてしまったが、お客さんの通常使用の迷惑にならないような配慮が感じられるのです。

 

セキュリティ対策とユーザビリティ

セキュリティってガチガチにすればするほど、普通に使うユースケースが難しくなります。

よくあるのが銀行のオンラインサービス。

今まで使えてた機能が突然不便になることがあります。1日100万円だった振込金額がセキュリティ(おれおれ詐欺的なもの?)対策の為に1日50万円に制限されてみたり、振り込みの時はパスワードの入力だけだったのが、登録メールへワンタイムキーみたいなものが送られてきてそれを入力しないと実行できなくなる、など。

対策する側と悪さをする方のイタチごっこなってしまうのは解るものの、今まで使えてた機能の使い勝手が突然悪くなります。不便さをユーザに押し付けて、セキリュティは万全と宣言する、みたいな。

 

その点、セキュリティに懸念は多少あるものの、使い勝手も最低担保する。トレードオフをよく考えた考慮が感じられる。Evernoteのセキュリティ対策は素晴らしいです。

 

今回だけじゃないEvernoteのセキュリティ経験

 

数年前にAdobeの個人情報流出がありました。

私は、Adobeに登録情報がありまして、その情報もネットに公開されていたのだと思います。そしてよくある話だと思いますが、Adobeに登録してあったメールアドレス、パスワードと全く同じものをEvernoteにも使っていたのでした。

その時にもEvernoteからお知らせがありました。(あいにくその時のメールはもう見つけられませんでした)。

確か内容は、

  • Adobeの個人情報が流出して、お客さんのメールアドレスもネットで公開されている
  • お客さんのメールアドレスは、Evernoteで使っているものと同じだ
  • しかも、ネットで公開されているパスワードと同じパスワードをEvernoteでも使っているようだ
  • 即、Evernoteのパスワードを変更してくれ

みたいな内容だったと思います。

これは驚きました。言われてみれば確かにその通りでした。そして、メールアドレス・パスワードの組み合わせを色々なサイトで共通に使ってしまうのは、パスワードを記憶する手間が省けるのでその当時はよくやってしまっていました。

その一般常識(!?)をよく理解して、お客さんの個人情報を自分たちでできる範囲で最大限(ユーザに代わって)チェックしてあげよう、というこのサービス。おもてなしの精神。感動しました。

なので私は、最大限にEvernoteを信じ、安心して使い続けている、という状況なのです。

 

メールアドレスが流出しているかどうか確認

ちょっと調べたところ、「‘;–have i been pwned?」というサービスがあります。

https://haveibeenpwned.com/

このサービス、特定のメールアドレスが、個人情報流出しているかどうかを調べる為のサービスのようです。

早速、Evernoteで使っているメールアドレスを入れてみました。

Oh no — pwned!
Pwned on 2 breached sites and found no pastes (subscribe to search sensitive breaches)

はい。ご覧の通り、流出していました。

AdobeとTumblrの情報が流出したんだと。。やれやれ。

 

くれぐれも、同じパスワードとメールアドレスの組み合わせをいろんなサイトで共通して使わぬよう、みなさんもご注意を。

 

 

 

 

Udemyで、Kerasの機械学習を、学習する

Udemyで、Kerasの機械学習を、学習する

機械学習を学習する

一年くらい前に機械学習のUdemyのグラスを取りました。そのクラスも為にはなったのですが、8割りくらいのところで挫折しました。なぜなら、前半線があまりにもデータサイエンスしすぎていて、統計系の方法論が多いのです。高校時代から確率統計的な科目が苦手だった私からすると、簡単に言うとつまらなくらりました。
そんな中、最近のディープラーニングの流行りで気になっていたKerasを学ぶ講座を見つけました。Udemyの講座です。お安いです。
これを受けてみました。

 

機械学習の遠い想い出

20年近くも昔のことになりますが、私の大学時代の研究テーマはニューラルネットによる文字認識や、音声認識でした。
その当時は、コンピューターの計算能力が今とは比較にならないほど貧弱です。20ピクセル四方位の手書きの白黒画像(いや、2値の白黒だったかも知れません)を10クラスに分類するようなニューラルネットのシミュレーションをしてました。コンピューター業界はダウンサイジングという小型化の流れの中で、科学計算用のデスクトップタイプのワークステーションが百万円切ったとかというくらいの時期。IntelのPentiumも発売されたばかり、とかそんな感じだったと思います。

 

安くなったとは言え、3層の全接続のネットの学習(トレーニング)をするのに余裕で一晩かけてました。
それが、今や普通のパソコンで、GPUでなくとも、そして、もっと階層の数や一階層辺りのノードの数が多くとも、ものの数分でトレーニングが終わってしまいます。素晴らしいです。
code coding computer cyberspace
Photo by Pixabay on Pexels.com

この20年くらいで起きたブレークスルー

私が学生で研究していた頃のニューラルネットの研究は、基本的にはback propagationという今でも使われているアルゴリズムを使った研究がメインだったように思います。ただ、研究対象としては、飽きられていったようです。コンピュータの能力が 貧弱と言うこともありますが、トレーニング自体が上手く進まない問題や、そもそも同じ問題を別な方法でやらせた方が効率的など、実用性が見いだせなかったのだと思います。(その場合は、途中の処理を人間がやっているということになる訳ですが。。。)

 

 

しかし、時代も流れ、力業でコンピューターをぶんまわすだけで、当時はできなかった仕事ができるようになるので実用性は上がります。計算能力に合わせてニューラルネットの階層を増やすこともできます。

 

一方、階層を増やすのは、back propagationというアルゴリズム自体の問題もありました。ネットワークの出力のエラーを訂正して、入力層へ誤差の伝搬する事で学習と言うプロセスを行いますが、層が増えると学習が進まなくなるのです。特に入力に近い層の学習ができなくなります。入力に近いほどそれまでは人間様が手動でやっていたような、特徴量の抽出が認識率に大きな影響を与えますので重大です。この問題を解決するのが、deep learning、つまり、ネットワークの出力より深い層の学習をさせる方法です。このお陰で、昨今の機械学習といえば、deep learningといったトレンドになりました。例えば、auto encodingと言われる、入力に近い層であらかじめ学習させておく方法を取ることで、特徴量をネットワーク自体が見つけ出し、それを繋ぎ合わせることで、深い層の学習が進まない問題が解決されてきたようです。

私も、この世界離れてしばらく経ちますし、知識のキャッチアップも仕切れないので、週末に趣味でUdemy受講、という流れになっております。

 

Udemyの講座の内容

私が受講した、

のコースですが、内容としては、pythonの環境から始まりアプリの作成まで、実用的なポイントが押さえられています。
  • Anacondaのインストールによるpythonの準備
  • Pythonの機械学習のライブラリであるTensorflow、Kerasのインストール
  • 開発環境としてのATOMエディタやATOMの便利プラグインのインストール
  • Flickrを使った画像データの収集プログラムの作成(Flickrのアカウント作成の方法も)
  • 入力データをKerasで使えるようにするプログラム作成
  • Kerasの学習アルゴリズムの実装
  • コマンドラインからニューラルネットの学習後のモデルの実行
  • WebアプリのフレームワークFlackの使い方の説明
  • Flackで、Kerasのニューラルネットのモデルを走らせ、結果を返すアプリの作成
とても実用的な内容です。すぐにとっつきやすいと感じる方も多いと思います。(が、講師が書いているプログラムは色々間違いがあります)

 

ただ、私には物足りなすぎました。私自身はpythonもそこそこ趣味で使えますし、Webアプリも書いたことがあります、趣味ですが。一方、講義ビデオで出てくるKersaのコードはネットのチュートリアル程度で単純で、しかもビデオの中でコピペしてるだけ。私は、もう少し、こういうアルゴリズムやこういうモデルを作るのには、Kerasをこう使えばいいのだ、といった根本的な理解ができるようなものを期待していました。この値段(1,400円)では無理でした。
ですので、
  • 本当に初心者で環境構築から行う
  • チュートリアルを実行するのがそもそもどうしていいかわからない
  • 内容はともかく、動くものを触ってみたい

というぐらいの方にしかおすすめできないのではないかと思いました。

ただ、3時間程度の講義ビデオの中で全コードを打ち込みが完了してしまう程度の僅かなプログラムで、私が大学時代に夜間にコンピューターセンターのリソースを使い倒していた(大げさ)頃の機能以上のことができてしまう。これは、ある意味すごいことです。そりゃ、新しいサービスがポンポン生まれてはなくなるという社会になるよな、というくらいの進化です。改めて、そう思う体験となりました。

 

 

 

WordPressのメニューに固定ページだけじゃなくカテゴリも含める

やりたいのは固定ページじゃない

WordPressのトップメニュー。デフォルトでは、HomeとかBlogとかお問い合わせ、なんかが並んでいましたが、Blogのカテゴリで、最近「奥様は一級建築士」ってのを作ったので、トップページからたどれるようにしようと思います。

固定ページのメニューを見ていると、固定ページを作ればメニューからたどれるようにできるように思えたのですが、やりたいのは、Blogのとあるカテゴリだけが並んだページ。どうやってやるんだ?と色々悩みました。

 

メニューの項目はカスタマイズに

「参加サイト」→ パーソナライズ →カスタマイズ →メニューというところにありました。

デフォルトの表示メニューは、「Primary」になっているみたい。これは、選択しているテンプレートにも依存するのかもしれませんが、私の場合は「Primary」がサイトのトップメニューに使われているようでした。

blog_menu_category

ここに入れると、ちゃんとトップページのメニューに「奥様は一級建築士」カテゴリへのリンクが出てきました。悩みましたー

 

blog_menu_toppage

WordPressのAdmin画面は2種類あるの?!

私の場合、WordPressの”プレミアム”プランというので、独自のURLをつけるようにして運用しています。

すごくわかりにくいのですが、どうも私が今使っているサービスは、wp-adminが二種類あるのですよね。

WordPressにログインした状態で自分のブログを表示すると、左上に、「参加サイト」というボタンがあり、それを押すと、以下のような画面が出てきます。

admin_1

一方、https://[user_id].wordpress.com/wp-admin/ のようなアドレスで表示される別のダッシュボードも利用可能です。ふとした時にこの画面が出てきて、存在を知りました。

admin_2

どちらもできることは似たようなものですが、微妙に違う。後者の方が分かり易いかな、という気もします。ネット調べててAdmin画面のスクリーンキャプチャをよく見るのは後者の方が多い感じですね。前者の方が新しいのかな、そういう意味では。

何しろ、わかりにくいです。どっち使っていいかわからないし、どんな時にどっちを使うの??