2016/12/10(土)perl 5.24 にしたら ports の XPDFJ は動作しない
2017/10/12 19:44
サーバのエラーログに
Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at /usr/local/lib/perl5/site_perl/XPDFJ.pm line 757.と文句を垂れますので、XPDFJ.pm の 757行目を以下の要領で直接修正します。
《変更前》
if( defined %{$tab->{$name}} && $name !~ /::$/ ) {
《変更後》
if ((%{$tab->{$name}}) && ($name !~ /::$/ )) {
こうすると、perl 5.24 でも動作するようです。筆者がメンテナンスを請け負っている企業のサーバでは動作確認できました。
原因は、perl 5.24 にて defined(%hash) の構文を致命的エラーとするように変更されたためです。何故こうするのかはよく判りませんが。。。
2016/11/27(日)HTMLエディタは、現場では使い物にならない。
2017/10/12 19:43
具体的なソフトウェア名を出すのは避けますが、
当方の周囲でWebデザイナーと呼ばれる方々で、この類のソフトウェアを多用している人は「皆無」です。
理由は聞かなくても判ります。
「余計なものが沢山入り、痒い所に手が届かない」
といったところでしょう。これ以外にも多くの理由がありますが。
素人が案件のサンプルで持ち込んだHTMLファイルが、こういったHTMLエディタで作成したもので、そのままでは全く使えない状態だったりするので、全面的に作り直しすることもありますね。
先月、サイト構築を手伝う案件があって、担当者は、HTMLエディタソフトで作業を始めようとしていたのですが、当方はそれを止めさせました。
そのまま黙認していたら、担当者本人が大変なことになっていたからです。
有無を問わず、テキストエディタで一から作成するのがいいのです。
HTML は全く複雑な代物ではありませんし、そのほうが肝心要の基礎を習得できますのでね。
2016/11/26(土)jQuery は有害なのか・・・ 有害というより老害です。
2017/10/12 19:42
何気に jQuery の評価なんぞ調べていたら、こんな記事に出くわしました。
jQueryは有害なのか
8割~9割同意できる内容ですね。
jQuery って何? 的な人に一言で言及するならば、
「JavaScript を使いやすく(することを目指す)したもの」
といったところでしょうか。やや専門的に言えば「フレームワーク」といった感じ。
あぁ、筆者を困らせる存在だ。。何故かというと「却って判りずらい」から。
jQuery も記述方法にクセがあり、判りにくさは一般のフレームワーク並み。
昨今では、何も考えずにこの jQuery を使ったWebアプリケーションが広く出回っているのです。近未来を考えればあまり良くない傾向。
昨今では JavaScript 自体の機能や性能が向上・ブラウザ間で統一されてきている(IE を除く) ので、使う必要性そのものが無くなってきている訳です。
Web開発技術者ならば、jQuery のようなものは使うべきではありません。
将来の自分が要らぬ苦労を強いられるだけ。
こんなものに頼ると、技術の基礎が身につかなくなります。
そもそも、スキル的にそこそこ低くても高機能なものを実現するのが目的ですから、当然の帰結です。
当方では、端からこんなものは使わないようにしています。
ひとたびトラブルに見舞われると、肝心な部分がブラックボックス化されているため、トラブル内容にもよるが何が問題なのか解らなくなる。
そんなエセ職人が大量生産されても現場にしわ寄せ行くだけなんですよね。。
そういうことまで考えてプロジェクトを組ませないような中途半端なスキルが担っている上流工程や業界自体の認識も大きな問題ですけどね。
例えば、IE を使わせないようにして、まともな機能のあるWebブラウザを使うように顧客を指導していく。こっちのほうがメンテナンスのコストダウンが出来て、技術職人的には楽です。
jQuery が自然淘汰できれば何も言うことは無いですがね。
2016/09/15(木)H8/3069F ROMライタの制作(2)
2016/09/09(金)H8/3069F ROMライタの制作
2017/10/12 19:39
その部品たちの一部が以下:
来週半ば目途に完成させないとならないという、半ば突貫工程です。。
と言っても、プリント基板さえ作ってしまえば、1~2日程度で出来そうな規模ですが。。
2016/08/16(火)BCD ⇔ 符号なしバイナリ変換
2017/10/12 19:38
毎回調べ直すという非効率なアホ作業をしでかしているので、自分メモ的にまとめてみようと・・orz
BCD コードというのは Binary Coded Decimal の頭文字で、日本語の古い文献などには「二進化十進数」とも表記されます。
数字を表示する機器などには未だ広く使われているようです。
BCDコードとバイナリコードの相違が理解できない方は、まずそれを他所で理解してください。理解できていないと、以下の記事の内容は全く理解できないでしょう。
今般の制作ボードの中にBCDコードを要求するLSIがあり、BCDコードとバイナリコードの相互変換が必要です。必要なのは 0~99の値なので、それに特化しています。
難しいのは、バイナリ → BCD変換のほうで、実に力ずくのアルゴリズムから、難解なものまでいろいろな方法があるのですが、応用が利くのは以下の、
『BCD部分の各桁について、「値が5以上ならば3を加算する」』
を基本にする手法。
以下を参考にしています:
http://www.geocities.jp/leitz_house/electronics/pic/bcd_01.htm
http://minkara.carview.co.jp/userid/526128/blog/24236882/
〔覚え書き:2進数 ⇒ BCD変換について…〕
オリジナルは、どうやらキャッシュしか残っていないようで、いつ消えるか判りません。
こんな方法で本当に出来るのか? という疑問を持たれる方が大半と察しますが、数学的見地でも本当に出来るのですから、科学の基礎というのは奥が深いです。
実際にC言語にて作ったものが以下(ビックエンディアン環境にて動作確認済):
/** cnv_byte_to_bcd 1バイトバイナリデータを1バイトBCDに変換 */
unsigned char cnv_byte_to_bcd(unsigned char bval) {
union {
struct {
unsigned char bcd ; // 変換後の値
unsigned char hex ; // 変換対象バイナリ
} conv ;
unsigned short buf ;
} convbcd ;
unsigned char bitcnt ;
if (bval >= 100) return (bval) ; // バイナリ値 100 以上は BCD に変換不可のため、そのままリターン。
convbcd.buf = 0 ; // 使用領域は予めゼロクリアしておく。
convbcd.conv.hex = bval ; // 変換対象のバイナリ値を置数。
for (bitcnt = 0 ; bitcnt < 8 ; bitcnt++) {
if (((convbcd.conv.bcd & 0x0f) + 0x03) >= 0x08) convbcd.conv.bcd += 0x03 ;
if (((convbcd.conv.bcd & 0xf0) + 0x30) >= 0x80) convbcd.conv.bcd += 0x30 ;
convbcd.buf <<= 1 ;
}
return convbcd.conv.bcd ;
}
肝になる部分は、union 共用体の部分で、メンバ bcd と メンバ hex の順番は重要です。対象ターゲットCPUは、ビックエンディアンで、その環境で動作確認しています。
インテルやAMDのCPUだと、殆どがリトルエンディアンなので、メンバ bcd と メンバ hex の定義を逆にしないと駄目かもしれません。
一方で、BCD → バイナリ変換は簡単です。4ビットごとに区切り、上位4ビットの値を×10し、下位4ビットをそのまま加算すると変換完了です。
/** cnv_bcd_to_byte 1バイトBCDデータを1バイトバイナリに変換 */
unsigned char cnv_bcd_to_byte(unsigned char bval) {
unsigned char convbin ;
convbin = ((bval & 0xf0) >> 4) * 10 + (bval & 0x0f) ;
return convbin ;
}
2016/08/10(水)新たな制御ボードの制作/開発作業
2017/10/12 19:37
左側が従来のもの、右側が自作したもの。
どういう道具かというと、制作/開発ターゲットになる制御基板に搭載するプログラム(これをファームウェアと言います)をパソコンから転送したり、起動・停止制御したりする道具です。


このように接続し、埋め込むプログラムを制作していきます。
制御基板の企画やハードウェア設計から当方が手掛け、ある程度設計を終えていたので、1カ月で終われるといいのですが、無理っぽいです。。orz
ちなみに、市販はしていませんし、今のところ市販の予定はありません。
NTTで光回線ルータをレンタルするのと似たような感じです。
(話だけはありますが、どう商品化するのか・・・が問題ですね)

2016/08/06(土)プライベートCAの構築[FreeBSD] (3)
2017/10/12 19:35
このシリーズのその2 → プライベートCAの構築[FreeBSD] (2)
自分メモですが、証明書の失効方法や、証明書には種類があるというお話です。
● 証明書の失効手続き
利用対象者が居なくなった場合とか、何らかの問題が起きた場合に発行した証明書を取り消したい(無効にしたい)場合があります。
そんな場合には、「証明書失効操作」を行います。
openssl ca -gencrl -revoke user.pem -out cert.crlcert.crl が失効リストで、実際には証明書のシリアルナンバーと対応する証明書の失効日が暗号化(?)されて記述されたものが書き込まれるようです。
この cert.crl を各サーバ(Apache、OpenVPN等)の設定で参照するようにします。
これとは別に、証明書発行リストが以下のようにCA管理ディレクトリの index.txt に生成されます。
Vで始まる行は、現在有効な証明書、
Rで始まる行は、失効する証明書を示しています。
●証明書には種類がある。
多くの場合、ディジタル証明書といえば、サーバ証明書をさす場合が多いです。
Webサーバで https を行う場合や、電子メールサーバにて TLS 通信を行う場合は、必ず必要になるのでお馴染みの方も多いでしょう。
OpenVPN のクライアント側には、接続先のサーバ証明書(公開鍵のみ)のほかに、クライアント証明書というのが必要になります。
これを OpenSSL コマンドラインで発行するには、 FreeBSD では /etc/ssl/openssl.cnf の設定を一部変更する必要があります。

具体的には、[ usr_cert ] ブロックの nsCertType パラメータを
nsCertType = client, email, objsignとする必要があります。
こうしないと、少なくとも OpenVPN は KU ERROR が発生したり、接続途上でダンマリを決め込んでしまい、クライアント側から上手く接続できません。
ですが、サーバ証明書の場合は、これでは逆に駄目で、
nsCertType = serverとする必要があります。
2016/07/27(水)FreeBSD 10.3R 環境で dovecot 2.2.25 はそのままでは動作しない
2017/10/12 19:34
弊社でも採用していますが、どうやら FreeBSD固有のバグがあるようです。
具体的には、
Last died with error (see error log for more information): kevent(EV_ADD, READ, 56) failed: Bad file descriptor(実際は改行しません)
といったメッセージが起動時に発生し、サービスを全く提供出来なくなるという重篤な問題。
これは、日本語の情報がほぼ皆無ですが、以下のパッチで凌げます。(弊社でも確認済。)
#Ports でインストールする場合は、既にパッチが当たった状態でインストールされるので問題ありません。
画像をクリックすると見やすい大きさで表示されると思います。
〔参考URL〕 https://github.com/dovecot/core/commit/ffd8dc932516bc55bf01d91355540daab365e5e9
余りお勧めしませんが、次のバージョン 2.2.26 が出るのを待つ手もあります。


