フレッツ光だけど上流は100Mbps?

いま、単身赴任で静岡県に住んでいます。単身赴任先にはフレッツ光を引いているのですが、はっきりいって本来の自宅の方が速いです。自宅はマンション共用で各戸には100MbpsのEthernetが引かれているのですが、CDN(Contents Delivery Network)経由でダウンロードするものでメジャーなものは大抵の場合には上限の11か12MiB/秒くらいに張り付きます。

しかし、フレッツ光ではもちろん上流の影響なのでしょうが、なかなか10MiB/秒を超えません。それどころか数MiB/秒を超えることもなかなかありません。
今回、Windows10 Technical Previewをダウンロードしていたら、めずらしく速度が出ていたのですが・・・

Screenshot from 2015-01-27 22:31:50

結局12MiB/秒に壁があります。12MiB/秒☓8bit=96Mbit/sで、見事に100Mbpsに壁が見えてます・・・・。まあ、ルーターのせいかもしれないですが。

ぜんぜん1Gbit/sに行きそうにない光回線の話でした・・・。

ちょっと気になるかなぁ・・・

時々、Hi-netの自動処理震源マップとかを見てたりするのですが、ちょっと気になったので記事にしておきます。

下の画像は、2015年1月13日午前2時くらいに見た本州中部の過去30日の震源マップです。

TONANKAI_MAP

一方、下記の画像は気象庁のWebサイトから持ってきた東海地震の想定震源域の図です。

shindo_s

これらを重ねあわせてみました。

OVERLAY

想定震源域の赤い線の北半分の部分の少し内側に沿って地震が発生していることがわかりますか?

過去7日の震源マップも持ってきてみました。

TONANKAI_MAP7

これに想定震源域を重ねあわせると、

OVERLAY7

となります。やっぱり想定震源域の赤線の少し内側に沿って起きているように見えますよね・・・。

大きな地震の前にはその周辺域で小さな地震が増えるという話も読んだことがあるので、ちょっと心配です。

 

Ubuntu MATE 32bitをUSBメモリにインストール

Ubuntu MATE 32bitをUSBメモリにインストールしてみました。

なぜMATEかというと、通常のデスクトップ環境ではやはり重いので、なるべく軽いものにしたかったためです。

今回も32bit版をインストールしました。ダウンロードはこちらから。

いつものように、まずVMware上で一度インストーラISOイメージで仮想マシンを作って起動します。その後、一旦シャットダウンして、仮想マシンからHDDを取り除きます。一度起動するのは、仮想マシン作成直後はHDDを取り除けないからです。

次に、再度、インストーラISOイメージで仮想マシンを起動します。
起動して試すだけかインストールするかの選択画面がでたところでUSBメモリを取り付けます。今回は、新たにSanDiskのExtreme USB3.0 64GBを使ってみました。USBメモリを取り付けたら仮想マシン側に認識させ、その後でインストーラで「Ubuntuをインストール」をクリックします。

あとは普通にHDDにインストールするのと変わりませんが、データ領域を多めに取りたかったのでパーティションは手動で分けました。

インストールが終わったら、仮想マシンを終了し、PCを再起動します。この時にBIOSで内蔵SATAを禁止します。

再起動したら、過去の記事同様にいろいろ設定します。

  • SATAの禁止(内蔵HDDへのアクセス禁止)
  • /etc/fstabの設定(tmpfsの設定、マウントオプションにnoatimeを追加など)
  • 内蔵時計のUTC設定をローカルタイム設定に変更

など。

SATAを禁止したら、再起動後に内蔵HDDが見えない状態になっているのを確認します。あとは内蔵HDDのつもりで作業すれば大丈夫。

引き続き、いろいろやりますが、こちらが参考になります。

それにしてもSanDisk Extreme USB3.0 64GBは速いです。

 

Linux上でCUPSプリンタを共有する

先日購入したBrother HL-2240Dですが、Windowsから使ったりLinuxから使ったりで結構面倒なことになっています。こんなことなら、LAN内蔵モデルにしておけばよかったと後悔しています。

といっても買い換えるわけにもいかない(最悪、それもないではないですが・・・)ので、何とかしていきたいと思います。

まずは、どれかマシンを決めてUSBで接続しておくことにします。ここでは、LinuxMint17 32bitを実行しているAthlon5350マシン(ブログ記事にはしていないのですが、結局BIOSTARのCeleron847マザーは突然再起動病が収拾せず、引退させました。代わりにAthlon5350を導入しました)に接続することにします。

ドライバのインストールに先立って、IPアドレスを固定します。今回はルータでDHCPの固定割り当てをすることでIPアドレスを固定しました。

次にプリンタドライバをインストールしますが、プリンタドライバのインストールは以前の記事とまったく同じ方法でテスト印刷まで行きました。

で、共有をかけてみます。
「システム管理」→「プリンタ」でプリンタの管理ウインドウが開きます。

Screenshot-プリンター1

サーバーメニューで「設定」を開きます。

デフォルトではすべてチェックが外れていますが、

  • 共有するので「このシステムに接続されている共有プリンタを公開する」にチェック
  • IPPプロトコルを使うので「インターネットからの印刷を許可する」もチェック
  • どうせ家庭内ネットワークであり、グローバルアドレスは持ってないので「リモート管理を許可する」もチェック
  • 「ユーザーにジョブのキャンセルを許可する」もチェック

します。

Screenshot-2

プライベートアドレスを割り振った家庭内ネットワークであり、外部から直接接続される可能性のあるIPv6もルータで殺してある(IPv6ブリッジ、IPv6パススルーを禁止してある)ので、割り切った設定です。自宅内専用なのでファイアウォールも入っていません。

この状態でhttp://127.0.0.1:631/をブラウザで開くと以下のようになりました。

Screenshot-3

この状態から他のPCからは見えるのに印刷できない状態でだいぶ悩みました。サーバの設定も「リモート管理を許可する」をチェックしても反映されません。また、上記画面で「管理」を押すと設定画面になるのですが、やはりリモート管理が許可できません。(ユーザーがlpadminグループに所属していないといけないようなのですが、少なくとも見掛け上はそう見えています)

この手のパターンは、何かの設定ファイルが読み込まれていない、とかそんな感じです。そこで、一旦PCを再起動したところ・・・・「リモート管理を許可する」ができるようになりました。
この状態でネットワークでつながった別のUbuntuマシン上で「プリンター」を開いて「追加」を押すと、ネットワークプリンタの中にAthlon5350が出てきます。そして、これを選択するとネットワークプリントができるようになりました。(ただ、このPCは別途ドライバをインストールしたことがあるので、ドライバのインストール要否はわかりません)

とりあえずLinuxからはそれなりに共有できるようになったようです。

MediaTekのスマートウォッチ用SoC

これまたネットを彷徨っている際に見つけたものです。

きっかけはいつものHackaDayの記事です。

「まるでArduinoが555のようにみえる」という書き出しで始まる記事ですが、「364MHzの32bitプロセッサ、8MBのRAM、GSM、Bluetooth、LCDコントローラ、PWM、USB、その他たくさんのものが入ってZippoよりも小さくてダンボールよりも薄い。これがわずか3ドル。使わない理由がない」という記事です。

このチップ、$12で売られている”Gongkai Phone”という携帯電話・・・”Gongkai”は中国語では「公开」と書くようで、日本の漢字を当てると「公開」となります・・・のSoCとして使われているもののようです。Gongkai Phoneがどんな携帯電話かというと、こちら(GIGAZINE)に日本語の記事がありました。

調べていくと、MediaTekのMTK6260というチップが引っかかってきて、スマートウォッチなどにも使われているようです。(後の紹介ビデオの説明ではMT6260はすでに市場で$30を下回って販売されているスマートウォッチに使われているとか・・・)
あと、単体のGPSトラッカーなどにも使われているようです。

MediaTekは最新のエントリークラススマートウォッチ用のチップセットとしてMT2502というのをリリースしているようです。(Youtubeでの紹介ビデオ
このチップのTechnical Briefを見ると、

  • ARM7EJ-S(最小26MHz、最大260MHz?)
  • Bluetooth4.0
  • FMラジオ受信(データ放送も受信できるみたいです)
  • シリアルFlash I/F
  • VGAまでのCMOSカメラI/F
  • UART、USB1.1、SDIO、SDストレージなどのI/F
  • キーパッドI/F、SIMコントローラ、RTC、PWM、LCDコントローラ
  • AD/DAコンバータ
  • GSM/GPRS無線フロントエンド
  • リチウムイオン電池制御

などを含んでいるようです。(ちょっとちゃんと読まないと怪しいかも)
MCMとしてDRAM256MBを含んでいそうな感じの記事もあります。(ビデオでもメモリを統合している、という説明があります)

残念ながら日本ではGSM/GPRSは使えないので萱の外という感じもしますが、海外では旧世代のGSM/GPRSは回路コストも消費電力も抑えられるようになってきたので、IoTの接続手段としてしぶとく生き残っていくのかもしれません。

STM32F401で遊んでみる(5)

9.printf()やgetc()を使ってみる

mbedを挿入した際のログをdmesgコマンドでみてみました。

[15886.601036] usb 2-1.4.3: USB disconnect, device number 9
[15888.075962] usb 2-1.4.3: new full-speed USB device number 10 using ehci_hcd
[15888.225240] scsi7 : usb-storage 2-1.4.3:1.1
[15888.225648] cdc_acm 2-1.4.3:1.2: This device cannot do calls on its own. It is not a modem.
[15888.225670] cdc_acm 2-1.4.3:1.2: ttyACM0: USB ACM device
[15889.223047] scsi 7:0:0:0: Direct-Access     MBED     microcontroller  1.0  PQ: 0 ANSI: 2
[15889.224257] sd 7:0:0:0: Attached scsi generic sg2 type 0
[15889.226709] sd 7:0:0:0: [sdb] 1072 512-byte logical blocks: (548 kB/536 KiB)
[15889.227459] sd 7:0:0:0: [sdb] Write Protect is off
[15889.227464] sd 7:0:0:0: [sdb] Mode Sense: 03 00 00 00
[15889.227958] sd 7:0:0:0: [sdb] No Caching mode page found
[15889.227963] sd 7:0:0:0: [sdb] Assuming drive cache: write through
[15889.230723] sd 7:0:0:0: [sdb] No Caching mode page found
[15889.230728] sd 7:0:0:0: [sdb] Assuming drive cache: write through
[15889.235618]  sdb:
[15889.237988] sd 7:0:0:0: [sdb] No Caching mode page found
[15889.237993] sd 7:0:0:0: [sdb] Assuming drive cache: write through
[15889.237996] sd 7:0:0:0: [sdb] Attached SCSI removable disk

よくみると、USBストレージだけではなく、ttyACM0というデバイスが追加されていることがわかります。

調べてみると、Serialクラスでprintf()やgetc()などが使えそうです。プログラムの方は、

#include "mbed.h"

Serial pc(USBTX,USBRX);
DigitalOut myled(PA_5);
DigitalIn button(USER_BUTTON);

int main() {
    int c=200;
    char k;
    pc.baud(115200);
    pc.printf("This is TEST!!\r\n");
    while(1) {
        if(pc.readable()){
            k = pc.getc();
            if((k=='a') && c<1000) c+=50;
            if((k=='z') && c>100) c-=50;
            pc.printf("Value of c: %d\r\n",c);
        }
        if(button){
            myled = 1; // LED is ON
            wait((double)c/2.0/1000);
            myled = 0; // LED is OFF
            wait((double)c/2.0/1000);
        } else {
            pc.printf("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\r\n");
        }
    }
}

としてみました。内容は、

  • シリアルコンソールを115.2kbpsで開いて、メッセージを出力します。
  • 読み出せるキャラクタがあるかreadable()で確認
    (これをやらないとgetc()はキーが押されるまで動作をブロックします)
  • 読み出せる場合にはgetc()で読み出し
  • 入力文字を判別してcの値を増減
    (キーの値が読めているか確認するため)
  • ボード上のUSERスイッチが押されていない場合はcの値に応じてLEDを点滅
  • ボード上のUSERスイッチが押されている場合には文字を多数出力
    (本当に115.2kbpsでているか確認したいため)

としています。

プログラムを作成したらコンソールを一つ開いて、

$ screen /dev/ttyACM0 115200

としてシリアルコンソールを115.2kbpsで開きます。

その後、compile(と書き込み)を行って動作を確認しました。

STM32F401で遊んでみる(4)

7.ソースコードをさらに改変してみる

そのままIDEのウインドウを閉じてしまっても、IDEの左側の「Programu Workspace」の中の「My Programs」の中にツリー状に残るようです。

こんどは別のテストをしてみるため、importしなおしてみましたが、この時にプロジェクト名も変更してみました。そうすると、「My Programs」の中にもう1つツリーができました。

次の変更はボード上のボタンを使ってみます。ポート割り当ては、「USER_BUTTON」と「PC_13」のようなので、まずは「USER_BUTTON」でやってみます。

修正後のソースは

#include "mbed.h"

DigitalOut myled(PA_5);
DigitalIn button(USER_BUTTON);

int main() {
    while(1) {
        if(button){
            myled = 1; // LED is ON
            wait(0.2); // 200 ms
            myled = 0; // LED is OFF
            wait(0.2); // 200 ms
        } else {
            myled = 1; // LED is ON
            wait(0.05); // 50 ms
            myled = 0; // LED is OFF
            wait(0.05); // 50 ms
        }
    }
}

としてみました。

これでコンパイルすると・・・ボタンを押すと点滅が高速になりました。

8.ここまでのまとめ

書くと長いですが、わかってしまえば実際の作業はあっという間です。
特に何よりもありがたいのは開発環境のインストールが必要ないことです。これでどこでも開発ができてしまいます。

一方で、実際に触ってみたmbed環境はIDEこそ本格的な開発環境の雰囲気ですがライブラリ等まで考えて見てみるとArduinoを強く意識しているように見えます。
より本格的な開発環境もWeb上で完結してしまうと楽ちんでいいですね。

STM32F401で遊んでみる(3)

5.サンプルプログラムを実行してみた

IDE上の「Compile」をクリックしてみるとバイナリが生成されるようで、binファイルの保存場所を聞いてきます。
ここでは、直接USBマスストレージに見えている場所(/media/NUCLEO)を指定してみました。これで勝手にターゲットボード側にプログラムが書き込まれるようで、書き込み中はデバッガ側のLEDが赤と緑に何度かチラチラ変わるようです。

指定すると、緑LEDの点滅は止まり、赤LEDが点灯するのみになってしまいました。

6.ソースコードを修正する

ワークスペース左側のツリーの中から main.cpp をクリックすると、ソースが表示されました。ソースコードによれば、LED1が200ms点灯、1s消灯の繰り返しになりそうな感じです・・・が、実際にはそのようには動いていません。

ボードのユーザーマニュアルにある回路図を見ると、

  • ターゲットボード上の赤LED(LD3)は電源供給で点灯
  • ターゲットボード上の緑LED(LD2)はJP6を介してArduinoコネクタの10pin幅の方の6pin(D13)へ接続

となっています。一方で、端子一覧でも

  • LED1はD13と同じPA_5に割り当て

となっているので、これでLEDは点灯してもおかしくないはずです。

そこで、LED1の定義が怪しいと睨んで探してみたのですがみつかりません。そこで試しにソースコードの3行目の

DigitalOut myled(LED1);

をもっともCPU自体のポート割り当て記述に近いと思われる

DigitalOut myled(PA_5);

と書き換えてコンパイルしなおしてみたところ、無事にLチカが始まりました!

Microsoftのホワイトペーパーがよくできていると思った件

Visual Studio ExpressがなくなってVisual Studio Communityに変わる、というのを見かけてMicrosoftのWebサイトを見ているときに見かけたものです。

そのページの下の方に「IoT 時代に対応する組込み開発」というリンクがあり、その下の「Visual Studio技術情報」というリンク先を見ていたら、「Internet of Things 時代の組込みソフトウェア開発 (PDF 2.38 MB)」というホワイトペーパーがありました。

宣伝の部分はさておき、マーケットの分析と課題、組込み開発の課題と分析、現場レベルでのプロセス・生産性・開発環境・保守などにおける問題点をさまざまな視点からよく押さえてあって、鋭いところを突いているように思います。基本的には組込みソフトウェア開発を中心に記述されていますが、少し言葉を変えれば組込み開発全体に当てはまる良い内容だと思います。ソフト以外の分野の人もぜひ読むべき内容だと思います。

しかし、悲しいかな、上流工程・上位レベルになるほどこういう分析ができている人は少ないですね。こういう内容をきちんと押さえられる人が上流・上位に立つかどうかが存続の分かれ目になるような気がするのですが。

ESP8266関連

ESP8266関連の情報アップデートです。

1.FCCの認証済みモジュールESP-12、ESP-07

これまでは基板単体のESP-01というモジュールしかなかったようなのですが、無線部分がシールドケースに入ったESP-12というモジュールが出始めているようです。このモジュールのシールドケースにはWiFiのロゴマークとFCCのロゴマークが入っているので、きちんとした手順を踏んでいるのであれば認証をとっている・・・ということなのではないかと思います。(中国なのでインチキや偽者の可能性は否定しきれないですが・・・)

また、ESP-12はプリントパターンによるアンテナですが、チップアンテナを搭載したESP-07というのもあるようです。こちらもWiFiとFCCのロゴマークが入っています。

2.Webサイト「www.esp8266.com」登場

ESP8266の掲示板サイト www.esp8266.com ができていました。
掲示板の維持のため寄付を求めているようです。$25の寄付でESP-01が3個、$35の寄付でESPー01が5個もらえるそうです。しばらく前に見たときはESP-01が$5/個くらいだったので、$10が送料と寄付といった算盤勘定だったのでしょうか。

3.モジュールの価格が安くなった

ESP-12の方が$3/個くらいと安価になっています。ベンダーがWiFiのロゴとFCCの認証を取って本気出して製造し始めた、ということでしょうか。
残念ながら技適マークはないので、結局日本では使えないですが・・・。

米国ではさらに流行りそうですね。