「Engineering」カテゴリーアーカイブ

柔らかいのと硬いのと

「Chrome=真」とは限らない例

ある計測器のディプレイとコントローラ。まだ現物は見ていないが、MCUがCortex-A?でLinuxでタッチパネル付きLCDというから、性能は恐らくほぼPi2ModelB+(以下[Pi2]とする)と同等。これで一体どれだけの事ができるのか、手持ちのPi2で性能評価してみることにした。

モノはWebブラウザで動作する、いわゆるWebアプリ。当然サーバあってのそれなので、コンテンツはサーバに置かれる(以下そのありかを以下[URL]とする)。まずはここに然るべきコンテンツを置き、PCのブラウザ(最新のChrome)から動作を確認する。ここで問題がないのを確認の上、いよいよPi2のChromiumから[URL]にアクセス … すると、少々トロいがそれは動いたので「これならそこそこイケるかな」と安心した。

ところがその数分後、突如動作がパタッと止まった。「え!?  なんでやねん?」と焦り、調べてみるとなんとそのChromiumがメモリをスワップまで食い潰していた。「そんなアホな!」と思いFirefoxで同じ事をすると、動作はChromiumより緩慢でカクカクだがこうはならなかった。

これはもう、Chromium内部でメモリリークが起こっているとしか考えられない。あれこれ書式に手を入れてみたが、結果は変わらず。どうもsetInterval付近に問題がある様で、要は

$ chromium-browser –version
Chromium 60.0.3112.89 Built on Ubuntu 14.04, running on Raspbian 9.3

こいつがダメなのである。ま、よくある話さ♪

しかし参った。そもそもChromiumを使ったのは、開発が楽なのに加えkioskモード(=最初から全画面)が起動オプションで指定できるから。以前これを試した時は、こんなに重い処理をさせなかったので気づかなかったのかも。むろんこれも次のリリースで解決となるのかもしれないが、それがいつになるのかはわからない。納期を過ぎてしまったらアウトなので、直ちに代替案の検討を開始した。その条件は

1.  最初から全画面動作すること
2.  長時間安定動作すること

の2点(現状Chromiumは2を満たしていない)なんだが、これを書いている今、それを満足するパッケージはない。はてさてどうしたもんか?  (恐らく続く)。

翌朝の追記:  最新のChromiumをWin/Macで動かしてみたところ問題なし。どうやらRaspbianのそれが古過ぎるようだ。本番でこれが使えるのであれば有難い。

SPIのLCDの現状を再確認してみる

ちと調べたい事があって、数年前にいちど動かしたきり塩漬けになっていた3.5inchLCDを引っ張り出してみた。ついでにRaspbianもStretchなる新しいのが出ていたので、まずはJessieからのバージョンアップから。

updateとupgradeで約3時間、HDMIでXが使えるところまで確認してLCD(KUMANとかいうところの480×320タッチパネルつき激安)を装着。すっかり手順を忘れていたので手間はかかったが、動かす事ができた。そして「あー、やっぱりな〜」と溜息。

あの時、最初この怪しいシロモノがタッチパネルともども動いた時は感動した。が、暫く使ってみるとその描画のトロさに辟易、一日で「こんなの使い物にならんわ」と外してしまった。HDMIのやつがどれも高かったのでSPIのこれはどうかなと試してみたんだが、結論は「とてもじゃないがXではX(笑)」な結果に。

# GPIOそっくり持っていかれるし

HDMIなら快適なのはわかっていたので、そのうち安いのが出たらまた試してみるべえ、と思っているうちに何年かが過ぎた。

今回知りたかったのは、その「SPIの遅さ」がどこまでなのか。mp4とかゲームとかでなく、グラフとか静止画とかのモニターとしてなら使い物になるのかどうか、そこの見極めだった。が、やはりこれではアキマヘン。スマホやタブレットに慣れた人が見たら「何じゃこりゃ!?」と言われるのがオチなレベル。スクロールで波打ってちゃ論外である。

やはり選択肢はHDMIしかないんだろか。コストが問題ですわな〜 …

追記: そのHDMIでこれまた激安&ケース付きを試してみた。

Panasonic DMC-GX7MK2 (30mm, f/4, 1/60 sec, ISO5000)
パネルがヨレているのはご愛嬌

快適というほどではないが、SPIよりは遥かにマシ。またこうなってくると、むしろRaspberryPi(2 B+)のほうが問題になってくる。恐らくSDへの書き込みがネックなので、それを避ければまあなんとかという感じ。

備忘録 – CentOS+mecab+textseach_ja+PostgreSQL

これまで新たなサーバを立てるたびにしてきた作業、その2018年1月版。

mecab

/etc/yum.repos.dにgroongaを追加すれば辞書(ipadic)までyum一発(拍手)。

textsearch_ja

https://github.com/oknj/textsearch_ja (以前の配布元からここに移動した模様)からソース一式を取得、make。

# いまやPGroonga を使うべきなのかもしれないが旧い人間なもので …

textsearch_jaのPostgreSQLへのインストール

psql xxx -f /usr/share/pgsql/contrib/textsearch_ja.sql

エラーが出たら「LANGUAGE  ‘C’  STRICT」を「LANGUAGE  ‘c’  STRICT」とする。

イマ風なファイルのアップロードを実装する

これまではフォームの中に[input type=”file”]を置いて選択できるようにしとけば良しだったファイルのアップロードだが、最近ではwordpressの影響か「ファイルのドラッグ&ドロップができなきゃイヤ!」と宣うヤカラが増えてきた(実はかくいう俺もその一人だったりする)。

またその結果「もしかしてできるかな?」とドロップした画像がそこにちょこんと表示され、慌ててbackする事態が多発。「これはやはり対応しておいた方が良かろう」と思い、まずは「ドロップ領域を用意しておき、そこにファイルがドロップされたらfileエレメントにその内容を代入もしくは置換する」を目標に着手。

# ファイルのみならず他の要素も同時にアップするという点がポイント

結論から言えば、それはできた。但し「ドロップ領域を用意し、そこにファイルがドロップされたら」までは予定どおりだったが、その先は当初の予想とはまるで異なる様相と相成った。以下がそのサンプル。

http://www.klabo.co.jp/~k-seki/HTML5/DragAndDrop/

# urlのserver.phpは$_REQUESTと$_FILESをvar_dumpしてるだけ

その仕組みをざっくり説明すると

*  目に見えるフォーム(以下formとする)は従来のそれ
*  目に見えないフォーム(以下FormData)を追加
*  ファイルが選択されたらその内容を保存
*  ドロップされたファイルも同様に保存
*  送信に先立ちformの要素(file以外)をFormDataにappend
*  送信に先立ち保存されたファイルをFormDataにappend
*  ajax/POSTで後者を送信

という感じだが、たかだかこれだけの事でそのソースたるや複雑怪奇極まりないシロモノに膨れ上がり、こうして備忘録でも残しておかないと書いた本人でも読解困難に。折角だから今回ハマった点について記しておく。

1.  dropイベントはどこへ?

最初、dragenterは拾えるのにdropが来なかった。なんでやねん? と調べていて判明したのは、dragenter以降dropに至るまでの全てのイベントをpreventDefault()しなければdropが発生しないという仕様。アホかと思ったが、仕様とあらばそれに従うしかない。

2.  <input type=”file”> は参照のみ?

当初は「ファイルのドロップをトリガーに<input type=”file”>の内容を設定もしくは置換」すればOKだろうと思ったんだが、代入ができたのはChromeだけで他はぜんぶダメ。「これができない=submitが使えない」とわかった時の失望たるや(涙)。結果これは潔く諦め、FormDataを使う事に。

3.  FormDataの実装状況

その内容をコンソールでチェックしようと思ったら、これが一切出てこない。理由など知らんが、出ないものは出ない。これだけでも「はぁ〜」だったが、どうにか動くところまで持って行ってひと安心 … と思ったら今度はこれがedgeでエラー! なんとFormDataのメソッドのうち、edgeで使えるのはappendぐらいしかないではないか。「嗚呼またコイツか!」と天を仰ぎ、最初はブラウザ判別して条件分岐させようかと思ったが、どうにかappendだけで済むよう修正した。

Apacheはすかん

Apacheの設定は非常にわかりづらい。そして数年前にバージョンが2.4となった時にはディレクティブの書式があちこち変更になり、大量に流布している2.2までの証言を信じると動かない事がしばしば。

そんな辛い記憶も冷めやらぬうちに、今回またApacheの設定をする事に。そしてハマった。VirtualHostの設定がどうしても反映されない。エラーとか出ていないのに、何をどうやってもダメ。途中でイヤになって放り出した。

がそれから小一時間経ってから、もう一度良く見たら原因がわかった。confの真ん中へんの行に</VirtualHost>があって、目的とする設定はどれもその下。要は<VirtualHost>の前後がApacheにそっくり無視されていたのだ。あまりのアホさに自らを呪ったが、ApacheもApacheだ。コメントじゃないんだから、警告出すとかせえやと叫びたくなった。

という訳で、5分で済む筈の作業に1時間以上を費やした記念にこれを備忘録として残すことにした。あーハズカシ。