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

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:
 name: docker0

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

 

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