落書き以上、技術メモ以下

気になったことをまとめておきます。

スマホでウェブは終わるのか?いや終わらないんじゃね?

weekly.ascii.jp

最近Web系の勉強してるのにこんな記事を読んで,いやウェブが終わっちゃうと困るんだけどってことで。

なんだかこの記事を読んでいるとモヤモヤするので殴り書きしておきます。

インターネットは消える運命にある

グーグルの会長が言ってたらしいですね。

でもググったら本当に消えるって意味じゃなくて,インターネットが身近になりすぎてなにがどのようにインターネットに接続しているのかが分からない世界になるって意味だと思うんですけど。

インターネットは消える運命にある──Google会長エリック・シュミット « WIRED.jp

昨年スマートフォンユーザーが使った時間は86%がアプリだ。モバイルウェブはわずか14%で、2013年の20%からさらに減らしている。(ちなみに大半がゲームとソーシャルネットワークで占められていた)

無知な私にモバイルウェブというものが何なのか教えてください。モバイル機器のウェブブラウザって意味?

ウェブ検索で知りたい情報に出会えるのがインターネットだ。

ウェブの話してたんじゃないの?なんでインターネットのありかたについて述べてるの?「検索して知りたい情報に出会えるのがウェブだ」とかならまだ意味分かるんだけど。

マークアップ言語、HTMLの概念そのものは残ったとしても、彼らが「URLとは何か」「ソースとは何か」を知らずに生きることになっても不思議はない。

知らないだけで存在はしているの?てか結局ウェブの終わりってどういうことなの?

うーん,読めば読むほどモヤモヤします。

まぁWebの技術はまだまだこれからも必要だと思うよ。

(おそらくWebが身近になることでWebというものを意識せずにWebを使う時代が来るって言いたいのかもしれないけど,文章だけ見るとインターネットとウェブとウェブブラウザがごっちゃになってるような感じでモヤモヤするんだと思う。そもそもWebを意識して使ってる人が世の中にどれだけ多くいるんだろう)

Raspberry Pi Compute ModuleでeMMCの書き換えを実現する回路

RPiのCompute Moduleを使用したボードを作成するのにeMMCの書き換え部分がよくわからなかったのでメモしておく。

前置き

RPiのCompute Moduleには4GBのeMMCが載っている。

しかし、これはRPiのSoCであるBCM2835のSD/eMMCのインターフェースに直接つながっているため、外部から直接このeMMCにアクセスすることはできない。

このeMMCの書き換えについて理解するために、BCM2835のブートシーケンスをまず理解する。

RPiのブートシーケンス

パワーオン時もしくはRUNピンがLowから解放されたときBCM2835はeMMCにアクセスを試みる。

そしてシステムをブートさせるためにbootcode.binというファイルをプライマリパーティション(FAT)から探す。

eMMCへのアクセスができなかった場合、もしくは bootcode.binが見つからなかった場合BCM2835はUSBからブートコードを書かれるのを待つ状態になる。

そのUSBからブートするツールは以下で公開されている。

tools/usbboot at master · raspberrypi/tools · GitHub

Compute ModuleのEMMC_DISABLE_Nピン

EMMC_DISABLE_NピンはBCM2835からeMMCへアクセスすることを禁止するためのピンである。

このピンがGNDに接続している場合、BCM2835はハードウェア的にeMMCにアクセスすることを禁じられる。

つまりブート時にこのピンがGNDに接続されていると、BCM2835がeMMCへのアクセスに失敗しUSBからのブートコード書き込みを待つ状態になるということである。

USBからの書き込み待ち状態になるまでは数秒かかる。

eMMC書き換えの実現

EMMC_DISABLE_NピンをGNDに接続すればUSBからのブートは可能になる。

しかし、USBからブートした後eMMCをストレージとして認識するにはEMMC_DISABLE_NピンをGNDから再び解放しなければならない(GNDのままだとハードウェア的にアクセスができないようになっているから)。

CMIOボードではこれをGPIO47_1V8ピンとMOSFETを利用して、USBからのブート後EMMC_DISABLE_NピンをGNDから解放している。

GPIO47_1V8ピンはブート時1.8Vでプルアップされた入力として動作するが、USBからブートされた後はLowにされる。

つまり、GPIO47_1V8ピンはブート時にHighでUSBからのブート後Lowとなる。

このGPIO47_1V8をMOSFETのゲートとして使用し、EMMC_DISABLE_Nをブート時はLowにUSBブート後は解放するようにしている。

こうすることで、USBからブートした後でeMMCをストレージとして認識できるようにしている。

ついでにCMIOボードではGPIO47_CTL_1V8というピンが用意されていて、通常のeMMCブートの他、セーフモードでのブートなどが選択できる(らしい)。

Compute Moduleを使用したオリジナルのボードでeMMCを書き換えたい場合は上記のような回路で作成する必要がある。

(もちろん書き換えはCMIOでオリジナルボードでは書き換えを行わないという方法もある)

参考

Raspberry Pi Documentation

2015.02.18 追記

USBポート

USBにはホストとスレーブが存在し、一般的にはPCなどがホストとなりUSB機器がスレーブとして動作する。

eMMC書き換え時にはRPiに対してスレーブモードのUSBポートでアクセスしなければならない。

CMIOではホスト用ポート、スレーブ用ポートの2つのポートを用意しており、USBブートの際はスレーブ用ポートを利用してブートするようにしている。(用意しているといってもホスト用、スレーブ用をマルチプレクサで選択するようになっているだけ。スレーブ用のポートが優先して使われるようになっている)

オリジナルのボードを開発する場合にUSBからブートするようにしたい場合は同様にスレーブ用のポートを用意してやる必要がある。

しかし、Ethernetのポートも用意したいと考えた場合、LAN9512のようなUSB-Ethernet接続のICを接続することになる。

BCM2835にはUSBの口が1つしか出ていないため、LAN9512を使用しながらスレーブ用のポートも用意したいと考えた場合は何らかの仕掛けが必要となる。

(例えばCMIOと同様にマルチプレクサで2つのポートに分割し,ホスト用の口の方にLAN9512のアップストリームのポートをつなぎ合わせるなど)

githubで新規レポジトリを登録する

githubのWebページで新規レポジトリを作成する

New repositoryで新規作成を行う

f:id:boysenberrypi:20150208175216p:plain

必要な項目を入力して新規作成

f:id:boysenberrypi:20150208175453p:plain

Repository nameのみが必須となっている。

他は任意。

コマンドラインレポジトリをプッシュする

レポジトリを初期化する

$ git init

.gitingoreに管理しないファイルを列挙する

$ vim .gitignore
$ cat .gitignore 
*.swp
build/*
DTmesherS

ステージ領域へファイルを追加

$ git add .

ファイルをコミットする

$ git commit -m "first commit"

リモートリポジトリを登録する

$ git remote add origin https://github.com/sasaki77/DTmesherS.git

リモートリポジトリへ送信する

$ git push -u origin master

Raspberry Pi 2 Model Bが発表される

本日Raspberry Pi 2 Model Bが発表されました。

Raspberry Pi 2 on sale now at $35 | Raspberry Pi


RSのサイトでも既に取り扱いが始まっているようです。

http://jp.rs-online.com/web/p/processor-microcontroller-development-kits/8326274/


こちらのブログでもRPi2について書かれています。

Raspberry Pi 2 enters the multi-core realm! » DesignSpark


情報をまとめると次のような感じだと思います。

  • CPUが900MHz quad-core ARM Cortex-A7へ
  • メモリが1GB LPDDR2 SDRAM (2x memory)へ
  • GPIOのピン配置はRPi1と同様
  • 発表日である今日から可能な限りRPi2を入手できるように製造している
  • ピーク消費電力は3ワット(B+は2ワット)
  • RPi1のモデルB,モデルB+は引き続き生産する
  • モデルA+も引き続き生産するが,RPi2のモデルAは現在予定なし
  • Compute Moduleは今年の中間(?)までには開発したい
  • Windows10をサポート(Windows Developer Program for IoTで提供)

RPi2になってWebブラウザもさくさく動くほどになっているでしょうか。

期待したいと思います。

オペレータへの通知タイプの分類(アラーム・アラート・プロンプト・メッセージの違い)

Emersonの資料に書いてある「アラーム」、「アラート」、「プロンプト」、「メッセージ」の区別が分かりやすかったのでメモ。

資料ではオペレータに対する通知のタイプを次の表のように分けています。

オペレータの反応が必須 オペレータの反応が不要
異常 アラーム アラート
通常 プロンプト メッセージ

表に従えば、

  • アラーム:オペレータの反応が必要な異常を知らせる通知
  • アラート:オペレータの反応が不要な異常を知らせる通知
  • プロンプト:オペレータの反応が必要な通常時の通知
  • メッセージ:オペレータの反応が不要な通常時の通知

となります。

アラームに関しては ISA-18.2という米国標準規格での定義ですが、他のものはEmerson独自の分類かもしれません。

ですが、この分類方法は非常に分かりやすいと思います。

参照した資料は以下です。

http://www2.emersonprocess.com/siteadmincenter/PM%20DeltaV%20Documents/Whitepapers/WP_DeltaV_Alarm_Management.pdf

RPiにMongoDBをインストール

Raspberry Pi にMongoDBをインストールしたのでメモ。

gitのインストール

gitが必要になるのでインストール。

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install git

gitでバイナリのMongoDBを持ってきて各種設定

今回はバイナリのMongoDBを使用する。

ソースからコンパイルすると時間がかかるらしい。

ファイルを持ってきていろいろ設定。

$ git clone https://github.com/nmcl/mongo4pi
$ cd mongo4pi
$ tar zxf mongo.tar.gz
$ cd mongo
$ sudo cp -r bin/* /usr/bin/
$ sudo cp -r include/*  /usr/include/
$ sudo cp -r lib/* /usr/lib/
$ sudo adduser --firstuid 100 --ingroup nogroup --shell /etc/false --disabled-password --gecos "" --no-create-home mongodb
$ sudo mkdir /var/log/mongodb/
$ sudo mkdir /var/lib/mongodb/
$ sudo chown mongodb:nogroup /var/log/mongodb/
$ sudo chown mongodb:nogroup /var/lib/mongodb/ 

gitでソースファイルから各種設定のファイルを持ってきてコピー

$ cd ../
$ git clone https://github.com/RickP/mongopi
$ cd mongopi/debian
$ sudo cp init.d /etc/init.d/mongod
$ sudo cp mongodb.conf /etc/
$ sudo chmod u+x /etc/init.d/mongod
$ sudo update-rc.d mongod defaults

MongoDBの開始

$ sudo /etc/init.d/mongod start

もしくは

$ sudo service mongod start

MongoDBの停止

$ sudo service mongod stop

もしくは

$ sudo /etc/init.d/mongod stop

pymongoのインストール(RPiでeasy_installができなかったためapt-getでインストール)

$ sudo apt-get install python-pymongo

参考

Emerson's Site | MongoDB + Raspberry Pi (without building anything!)

Raspberry PiにNode.jsをインストール

RPiにnodeをインストールしたのでメモ。

nodebrewのインストール

以下の手順でnodebrewをインストール

$ sudo apt-get update
$ curl -L git.io/nodebrew | perl - setup

以下の様に.bashrcや.bash_aliasesにPATHを設定

export PATH=/home/pi/.nodebrew/current/bin:$PATH

.bashrcを再読み込みしてnodebrewが使えるか確認する

$ source .bashrc
$ nodebrew
nodebrew 0.7.5

Usage:
    nodebrew help                         Show this message
    nodebrew install <version>            Download and install a <version> (compile from source)
    nodebrew install-binary <version>     Download and install a <version> (binary file)
    nodebrew uninstall <version>          Uninstall a version
    nodebrew use <version>                Use <version>
    nodebrew list                         List installed versions
    nodebrew ls                           Alias for `list`
    nodebrew ls-remote                    List remote versions
    nodebrew ls-all                       List remote and installed versions
    nodebrew alias <key> <version>        Set alias to version
    nodebrew unalias <key>                Remove alias
    nodebrew clean <version> | all        Remove source file
    nodebrew selfupdate                   Update nodebrew
    nodebrew migrate-package <version>    Install global NPM packages contained in <version> to current version
    nodebrew exec <version> -- <command>  Execute <command> specified <version>

Example:
    nodebrew install v0.10.22     Install a specific version number
    nodebrew use v0.10.22         Use a specific version number

nodeのインストール

時間がかかるのでバイナリをインストールする。

安定版をインストールしようとしたが,安定版のバイナリがなかったので v0.10.28をインストールする。

$ nodebrew install-binary 0.10.28

使用するnodeのバージョンを指定

$ nodebrew use 0.10.28
use v0.10.28
$ node -v
v0.10.28
$ npm -v
1.4.9

参考