<   2017年 07月 ( 7 )   > この月の画像一覧

PWAの解説 - Web App モバイルファースト (7/29)

PWAというWeb技術があるそうな。
こちらのサイト様で詳しく説明している。

App Shell と content

App Shell = カードメニューGUI(用意された固定のモノ:ユーザが既存のモノから選んで配置する)
content = view領域(ユーザカスタマイズ:上のGUIは配置できない)

つまり、App Shell はWindows GUIのような物で、メニュー、ダイアログ、リストボックス等で、
contentはイメージ画像やドキュメントを置く場所。

App Shell領域には画像(一定の位置に一定の大きさで)が表示できるが、それほど自由度は無い。
contentでは逆にApp Shellで使えたGUI部品が使えない。

一定の制限をかけたカードメニューみたいなものだ。
ただし、App Shellとcontentでネットワークを分けているので固定表示のApp Shell部分のキャッシュ再読み込みを無くし、content部分の自由領域の再読み込みを軽減させる働きがある。

モバイルの設定画面のメニューがApp Shellと思えばよく、設定画面の先にイメージ画像や本文がある構成になる。

モバイルの設定画面は深くなると何をやっているか、どこにあるか、どうやって戻るかがわかりづらくなり、使いづらいと感じてしまう。そしてGUI部品のそっけなさからどうしてもやらされてる感じがぬぐえない。

だからモバイルファーストなら、2画面ぐらいの深さならそれでいいが、飽きられやすいのではないか。
App Shellにもcontentと同じイメージを置けて、カードメニューの階層ごとの機能差を無くした方がいいような。

Web Appがアプリ化するのに、今の設定画面のようなGUIになると、せっかく解像度の高いモバイル画面をつまらないGUI部品で覆ってしまうのは、悪手だと思う。

PWAは流行らない。ユーザーの立場からそう思われる。


[PR]
by k1segawa | 2017-07-29 17:35 | Comments(0)

フェイクニュースの元4chanは日本のふたば☆ちゃんねるが発祥 - 2ちゃんねると同時期の掲示板 (7/29)

インターネットをNECの文豪mini 5Eで初めて繋いだ頃、どうやってCP/Mのソフトを文豪mini 5Eに持っていくか、Turbo Pascalを動かすかなどで、2ちゃんねるのモバイル板に情報を求めてROMっていた。モバギやCASIOPEA、TeliosなどWindows CE関係でモバイル板や機種板を覗く事も多々。

他にもふたば☆ちゃんねるなどのBBSもあったが、そこには行ったことが無かった。

最近、ネットのウソ情報を見抜けないジャーナリストが問題になっているが、海外でも 4chanなどのサイトを、嘘を嘘と見抜けない人が悪質サイトだと騒いでいる。

海外の4chanが日本のBBSを参考にして作られたことは知っていたが、それが2ちゃんねるではなく、ふたば☆ちゃんねるだとは知らなかった。

なるほど、こちらのサイト様が言っているようにサイトの構成やトップのFAQを見ると確かにそう。

LINEの一方通行のような感じで、画像を伴ってコメントを投稿する形式。今でも活動は盛んのよう。

4chan -orgで見つけたMusicは確かに系統がそれっぽい。でもまた日本とはちょっと毛色が違って面白い。






[PR]
by k1segawa | 2017-07-29 13:53 | Comments(0)

Xlib での UI開発 を Windows 10 Creators Update上で - Bash on Ubuntu on Windows (7/28)

Windows 10 Creators Update後に、Xlibのソースをコンパイルできるようになるかと思ったら全然違った。
単に必要なライブラリが入っていなかっただけ。

こちらのサイト様で気が付いた。
xorg-devをインストールする。

sudo apt-get install xorg-dev

関連ライブラリも含め、100MBもいかない。

たったこれだけで、Xlib関数を使ったUI開発が可能になった。

ソースはこちらのサイト様から。

[簡単なソース]
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
Display *display;
Window w;

/* ディスプレイサーバに接続 */
display = XOpenDisplay(NULL);
if(display == NULL){
fprintf(stderr, "Cannot open display.\n");
exit(1);
}

/* ウィンドウを生成 */
w = XCreateSimpleWindow(display, DefaultRootWindow(display),
50, 50, 400, 300, 1,
BlackPixel(display, 0), WhitePixel(display, 0));

/* ウィンドウを表示 */
XMapWindow(display, w);

/* リクエストを強制的に送信 */
XFlush(display);

/* ウィンドウ表示を確認のため5秒間スリープ */
sleep(5);

/* ディスプレイサーバとの接続を解除 */
XCloseDisplay(display);

return 0;
}
[コンパイル]
cc sample.c -lX11 -o sample
[実行]
./sample
[結果]
どうよ、これで何でもできるぜ~

[PR]
by k1segawa | 2017-07-28 22:38 | X-Window | Comments(0)

Japanino ArduinoISPで ATtiny13 で 色々 - 海外の電子工作 (7/28)

ATtiny13をメインに電子工作していたが、特に何か作りたい物がネットを徘徊してもなかったのだが、海外に目を向けると色々あって面白い。
前の記事 Pinterest と 電子工作 (6/17)もそうだが、下記のサイト様はATtiny13のマイコンとしての基本機能をいくつか網羅していてマイコン初心者に便利。

a0034780_17395410.png
Links

というリンクに100個色んなプロジェクトをやってみるというのがあり、ここにATtiny13による「ソフト UART」や「ウォッチドック」、「dance lights with FFT」 など基本から応用がまとまっている。

100個はないがそれでも回路図が簡単で、プログラムもCソースが短くて、簡単にArduino IDEに流用できる。

例えば「ウォッチドック」の「[005] ATtiny13 – blinky with Watchdog Timer」なんかは、
[回路図]
a0034780_17202373.png
[元ソース]
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>

#define LED_PIN PB0

ISR(WDT_vect)
{
PORTB ^= _BV(LED_PIN); // toggle LED pin
}

int
main(void)
{
/* setup */
DDRB = 0b00000001; // set LED pin as OUTPUT
PORTB = 0b00000000; // set all pins to LOW
// set prescaler to 0.5s and enable Watchdog Timer
wdt_enable(WDTO_500MS);

// enable Watchdog Timer interrupt
WDTCR |= _BV(WDTIE);
sei(); // enable global interrupts

/* loop */
while (1);
}

となるのだが、
/* setup */をsetup()内に移植し、/* loop */がwhile(1);なので単にloop()を呼び出す。それ以外はそのまま記述するだけ。

[Arduino IDE用 新ソース]
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>

#define LED_PIN PB0

ISR(WDT_vect)
{
PORTB ^= _BV(LED_PIN); // toggle LED pin
}

void setup() {
/* setup */
DDRB = 0b00000001; // set LED pin as OUTPUT
PORTB = 0b00000000; // set all pins to LOW
// set prescaler to 0.5s and enable Watchdog Timer
wdt_enable(WDTO_500MS);

// enable Watchdog Timer interrupt
WDTCR |= _BV(WDTIE);
sei(); // enable global interrupts
}

void loop() {
}


色々まとまってて面白いわー

[相互変換]
Cソース → Arduino IDE ソースは上のような感じで。
Arduino IDE ソース → Cソースは以下の記事のように。


[PR]
by k1segawa | 2017-07-28 17:01 | arduino, AVR | Comments(0)

ブレッドボードを卒業して、エッチング無しで最小限の半田付けで基板を作る (7/16)

ブレッドボードで作った回路を恒久的に使いたい時、振動や錆びによる接触不良を無くすため、ユニバーサル基板やプリント基板で半田付けするが、ユニバーサル基板だとドット間を導線で繋いだり、プリント基板なら半田付けの前に廃棄に困るエッチング液でパターンを腐食させなければならない。

昔100万円であった切削型のCNCが、今なら10万円まで下がってきた。これならエッチングいらずでプリント基板が作れるが、騒音と切り屑の処理が大変。

そこで、ちょっと手軽にサンハヤトのワイヤード・ユニバーサル基板やブレッドボードパターンのユニバーサル基板、銀箔テープ、EジスPenで作成する方法がある。
それぞれサイト様の代表的な画像とリンクを示す(画像の著作権はサイト様にあります)。

ワイヤード・ユニバーサル基板 UB-WRD01 - サンハヤト株式会社
(リューターは滑るので刃の鈍ったカッターで削る)
a0034780_02184902.jpg

秋月電子のユニバーサル基板(ブレッドボードタイプ)
片面ユニバーサル基板(ブレッドボード配線パターンタイプ) Dタイプ(47x36mm) ガラスコンポジット
a0034780_02194053.jpg
銀箔テープ
2010年01月18日 物の無い時代に育った - 第九研究室だより:電子工作
(幅広のままドット型のユニバーサル基板に貼ってカットする)
a0034780_02205691.jpg
プリント回路基板の簡単製作手順
a0034780_02513572.jpg
EジスPenを使ってみる_1/3
(何回か上塗りしすぐに20分ぐらいドライヤーで乾かす)
a0034780_02221475.jpg
それぞれ少しコストはかかるが、部品の半田付け以外に高熱を必要としないので割と手軽に作れる。
簡単な回路なら初心者がブレッドボードを卒業していきなり玄人っぽく半田付けするよりは敷居は低いだろう。

[PR]
by k1segawa | 2017-07-16 02:39 | arduino, AVR | Comments(0)

arduinoによるオシロスコープ4 - arduino基板の スペーサ代わりにホットメルトを使う (7/15)

arduinoやIchigoJam、RaspberryPiなどのむき出し基板は、裏の金属部分が床から少し離れるように「スペーサー」というものを取り付ける。
プラスチックや金属製のものがあるが、長さや値段から買うのを忘れてしまいがち。

そこで、100均で買えるグルーガンの溶かす棒(ホットメルト接着剤)を、切ってくっつける。そしてくっつけるにはグルーガンで表の穴に少しホットメルトをたらしてやればいい。

常温でべたべたする事もなく、しっかりとくっつく。

以下はオシロスコープで使ったびんぼうでいいの、の基板に取り付けた様子。
a0034780_10572653.png
12MHzクリスタルの背が高いのが横向いてるのはご愛敬ということで。
a0034780_10573276.png
a0034780_10573944.png
そこそこ綺麗なんじゃない?
長さも自由だし、値段も100円で何十回もとれるし、全然安い。
また熱してやれば取り外しも簡単。

太いのと、長いと強度が下がる欠点はあるけど、単に床に設置させないためにはこれで十分。

100均使えるわー

[PR]
by k1segawa | 2017-07-15 11:08 | arduino, AVR | Comments(0)

ボードコンピュータの液晶制御が高速処理のピークな理由 (7/11)

arduino や Raspberry Pi などのボードコンピュータが液晶の表示を性能のリトマス試験紙としているのはなぜかわからなかった。
より高性能なCPUにしたりクロック数を上げたりして高精細液晶画面を制御しているのを競っているのが、なぜPCから画像データを液晶へ直接送信せずにわざわざボードコンピュータに送って(または書換可能メモリに保存して)表示させるのか、今の高速なPCならどんな大きいデータでも簡単に液晶に送れてすいすい画像を書き換えられるのだと思っていた。

ところでPCから外部にデータを送信するためには現在はシリアル通信であるUSBやRS-232C、バスであるPCI Express、表示と音声データに特化したHDMIがある。
これらで、ユーザが直接制御出来るのはUSBやRS-232Cであり、それ以外はドライバやOSのライブラリを介して間接制御するしかない。

ボードコンピュータは液晶を制御できるのだから、PCだってUSB2.0や3.1などの高速な通信を使えば軽々液晶を書き換えられる(例えばマスクやグラフィック描画)のではないか。

USBはなかなか難しいので市販のUSB制御ボードを使うとすると、以下のようなものがある。

これのソフト仕様を調べる(ヘルプファイル参照)と、1ビット書き換えに10000回/2500msecぐらいの時間がかかる。8ビット(1バイト)でも10000回/5000msecぐらい。
これはデジタルポートをON/OFFする速度と仮定すると、10000/2.5秒=4000Hz、10000/5秒=2000Hzで書き換え出来る。
USB2.0が480Mbps(1.0が12Mbps)なので、480M/10ビット(8n1)=48Mバイト/sec。プロトコルなので上のON/OFFに変換するとざっくりだが48000000バイト:2000バイトをどうにかできるとして2万4千分の1のデータ効率。

赤外線 搬送波が37kHz程度なのだが、これが上の制御ボードでは全然間に合わない。
でも赤外線のコントロールは昨今のボードコンピュータでは当たり前に出来ている。

USBシリアル変換ケーブルなどを使って、RS-232Cの最大速度115200bpsだと、約1万バイト/sec。8ビット送信できるとして80kHz程度(もう単位とか転送速度とかぐちゃぐちゃだが)は処理できるとしてギリギリ赤外線の制御が出来るかなという所。

USB2.0でハードディスクへのデータ転送が可能になったのだから相当速いのかと思ったが、プロトコル負荷によって赤外線の制御程度がやっとなのか。

PCからUSBで画像データを液晶に直接転送しても4000Hzだと8x8マトリクスLEDのON/OFFでさえも64個のLEDをせいぜい1個当たり4000/64=62.5Hzでしか書き換えられない。秒間62回だ。24fpsが秒間24コマなのに、こっちはLEDをON/OFFするだけにこんなにかかってたら、1コマの画像転送なんてとんでもない。

PCから高精細液晶を制御するのはUSBでは夢物語なのか。USBケーブルのサブモニタは差分データ送信でうまくやってるのかな。

USB2.0 480Mbps=0.48Gbps(ざっくり)
USB3.0 10Gbps
PC Express 3.0 8Gbps
HDMI 2.0 18Gbps

HDMIを直接PCが制御する訳では無くWindowsならDirectXでコマンドをGPUが受け取って膨大なピクセルをCPUコアが書き換えている。

ボードコンピュータが液晶を書き換えられるのは、PCのUSBのプロトコル負荷で通信スピードが上がらないという部分が無いから現実に出来るのであり、ボードコンピュータじゃなければユーザは直接液晶を操作できないのだ。HDMIの転送速度を生かして表示を制御するにはGPUのコマンドをプログラムすればいいが、そこに力を入れるのはちょっと違う気がする。少し前にCUDAとかで流行ったけど。

という事で、PCから外部にデータを高速転送する手段がないため、大量のデータである液晶(表示)書換は、今の所PCからは無理で、そのため液晶を自分でコントロールする気になるためには、ボードコンピュータに制御させるのが手っ取り早いのだ。で、高負荷なのでボードコンピュータはどんどん高性能になって行く。でも痛し痒しでどうしても「ボードコンピュータ」というワンクッションが入ってくる。

ああ、液晶(表示)制御を高精細で極めようとするとPCでは現在のインターフェースでは無理(OSもRTOSにならないと)で、ボードコンピュータでも高性能なちょっと敷居の高い事になってしまうのだ。

やっぱり「表示器」はPC上で行ない、ボードコンピュータはリアルタイムでは表示機能を持たないのが最善手(単体のボードコンピュータはそれはそれで完結していてもいいが)だな。つまりボードコンピュータのネット上での役割はセンサーと物理制御(サーボ出力、リレーON/OFF)だ。

備忘録、備忘録。

すぐボードコンピュータに液晶をつなごうとしてしまうが、単体で完結するもの(ゲームコンソールやなんらかの指標器)を作るとき以外は上の事を思い出して、踏みとどまろう。
まあ、もう128x48のグラフィック液晶買ってきちゃったんだけどね。


[PR]
by k1segawa | 2017-07-11 22:15 | arduino, AVR | Comments(0)