2017-04-02

RasPi - 第2回:Amazonで買えるミニLCDの選択  [by miyachi]

第1回ではRaspbianのインストールからsshでのログイン環境までまとめましたが、HDMI接続のモニターを利用していました。でも小さいRasPiに大きなモニターやTVを接続して利用するのも勿体ない気がしますし、組み込みを考えると小さなモニターが欲しくなりますよね?私もロボットへの組み込みを考えているので3~7インチ程度のLCDモニターを色々買って試してみました。ほとんどAmazonで買っています。

ちょっと試しにAmazonでキーワード「raspberry pi LCD」検索してみると、775件がヒットします。まぁ色々あるものですねw 今回はそのうち4種類についてまとめます。ちなみにRasPiへのLCD接続方法は大きく分けて以下の3種類があります。

 タイプA)HDMI接続のLCDモニター(標準)
 タイプB)GPIO接続のLCDモニター(独自)
 タイプC)DSI接続のLCDモニター(公式)


困ったことにそれぞれ一長一短があります。つまりどれを選ぶのかは用途や好みの問題となります。私が買ったのは以下の4つです。金額は今日現在のもの。いずれもタッチ対応のLCDモニターです。

 1)7インチLCD:RasPi公式:DSI接続:静電容量式:10,200円
 2)5インチLCD:cocopar:HDMI接続:感圧式:5,800円
 3)4インチLCD:cocopar:GPIO接続:感圧式:2,999円
 4)3.5インチLCD:OSOYOO:HDMI接続:感圧式:2,980円


では順番に見ていきます。 [続きを読む]
2017-04-02 00:00:28 - miyachi - - [プログラミング] -

2017-04-01

RasPi - 第1回:Raspbianのセットアップ手順  [by miyachi]

Raspberry Pi(以後、RasPi)は皆様ご存じのようにIoT向けの小さなLinux環境を提供するミニPCです。LinuxはDebianベースのRaspbian(使い方はほぼDebian)ですが、IoT向けと言うことで色々拡張することが多くセットアップやLCD選択も一筋縄では行きません。と言うことで以下までのノウハウを残しておこうと言うことでとりま4回を予定しています。なおRaspbianのバージョンは現時点での最新である、2.1~2.3で動作確認した結果となります。また動作確認したRasPiは、RasPi 3/RasPi 2B/RasPi Zeroの3種類です。

 第1回:Raspbianのセットアップ手順
 第2回:Amazonで買えるミニLCDの選択
 第3回:RasPiでRails動作とFireWall設定
 第4回:RasPiのI2Cでサーボモーターを動かす


では第1回と言うことで、Raspbianをインストールしてsshでリモートログインするまでを以下簡単にまとめます。 [続きを読む]
2017-04-01 14:04:44 - miyachi - - [プログラミング] -

2017-01-10

.NETFramework,Version=v4.0.AssemblyAttributes.cpp 問題  [by miyachi]

Visual Studio 2012以降で、.NETを使ったC++/CLIでXmlDocumentクラスを使った場合に実行時に以下のようなエラーになる事があります。

 「'System.Xml.BinaryCompatibility' のタイプ初期化子が例外」
 「'System.Uri' のタイプ初期化子が例外」

最初はWindows 8.1とWindows Server 2012だけの現象かと考えていましたが違いました。Visual Studio 2012以降に、C++/CLIを使った時に生じる問題でした。OSは無関係です。かなり悩んだのできっと同じ道を辿る方の為に原因と対処方法をまとめます。ちなみにこの解決方法は「ここ」で知りました。感謝感謝です! [続きを読む]
2017-01-10 21:53:51 - miyachi - - [プログラミング] -

2016-01-23

プログラマの為のESP-WROOM-02開発ボードの組み立て  [by miyachi]

最近IoTセキュリティなんかを考えているのですが、実際にプロトタイピングで作ろうと思った時にエンド側のデバイスとして従来はArduino Unoを使ってきました。ですがこれが非力だし何と言ってもIoTと言いつつネット接続に別シールドが必要だったりとなかなか面倒でした。

そんなある日にESP-WROOM-02と言う安くて高機能でArduino IDEでソフト開発もできる素晴らしいチップに出会ってしまいます。しかしESP-WROOM-02単体ではUSB接続もできないしWiFi利用時の電源容量が300mA近く必要と言う壁にぶつかります。

スイッチサイエンスが全てをまとめた開発ボードを販売しているのですがずっと品切れで試せない…と言うことで秋葉原の秋月で買える部品で安定動作できる開発ボードを自作したのでした。しかし何せベースがソフト屋なのでプルアップと言われても「なにそれ美味しいの?」レベルで苦労しました。まあ楽しくもあったので良かったですが。

やっと安定してプログラミングできる環境ができたので公開することにしました。それを公開しようとしている今現在…スイッチサイエンスには大量の開発ボードの入荷があり私も注文中です。まあ中で何をやっているのか参考になりますしとりあえずまあ公開しておきますw

プログラマの為のESP-WROOM-02開発ボード組み立て from Naoto Miyachi
2016-01-23 15:16:39 - miyachi - - [プログラミング] -

2013-08-09

libxml2のWindowsビルド手順  [by miyachi]

久しぶりのプログラミングネタです。現在リリースしているLE:PAdES:LibのWindows64bit版が必要になりプロジェクトをリビルド…しようと思ったのですが使っているオープンソース系プロジェクトの幾つかでWindows64bit版のバイナリが無いものがありました。XML操作ライブラリであるlibxml2もその1つです。仕方が無いのでソースからビルドする事にしました。ついでにlibxml2が依存していたiconvも不要なので切り離すことにしました。 [続きを読む]
2013-08-09 11:36:29 - miyachi - - [プログラミング] -

2013-01-10

FILE構造体でメモリを利用する方法  [by miyachi]

久しぶりの技術ネタです。私もオープンソースのライブラリには常日頃お世話になっています。公開してくださっている開発者の皆さんには心から感謝しています。私も今年はオープンソースとライセンスのプロジェクトを開発することで少しでも恩返しができればと考えていたりするのですが…

閑話休題、今日のネタはライブラリの入出力がFILE構造体指定しか無いけどファイルでは無くメモリ上で入出力する方法です。これは実際に先日libpngやlibjpegを使おうとした時にぶつかった問題です。元ファイルを読み込んだ後で画像フォーマットの変換をメモリ上で行いたいのですが、サンプル等は全てFILE構造体になっています。これをメモリのポインタを利用するようにすることも可能だと思いますが面倒で時間もかかりそうなのでサンプル実装をそのまま使いたいと言うことです。更に今回はWindowsとLinuxの両方でこの問題を解決する必要もありました。残念ながらWindowsとLinuxで共通した方法は見つかりませんでしたが、どちらでもFILE構造体を使ってメモリ上で操作する方法が分かりましたので簡単にまとめます。 [続きを読む]
2013-01-10 12:21:34 - miyachi - - [プログラミング] -

2012-05-02

VisualStudio2005によるActiveXコントロール開発  [by miyachi]

ActiveXコントロールのプログラミングに関する情報は書籍も含めてVisual-C++6.0のものが多いです。しかしながらもうVC++6.0の時代では無い…と言う事でVisualStudio2005のC++でActiveXコントロールのプロジェクト作成を試してみたのでまとめてみましょう。

まず検索してみると「VS2005 の C/C++ でつくった MFC ActiveX コントロールを HTML へ貼り付ける」と言うブログ記事を発見。書かれているように、MFC ActiveX コントロールを作成して、Cabプロジェクトを追加して、HTMLを作成して表示してみるとさっくり動きました。

おお。これで良いのか…と思ったのですが罠が待っていました。結論を先に言えば「実行しても安全」とマークしておく必要があります。

では簡単に手順を説明します。備忘録なので簡易に書いていますが経験者の方なら不足は無いと思います。また今回はCabファイルは作成しないで話を進めます。 [続きを読む]
2012-05-02 13:50:59 - miyachi - - [プログラミング] -

2011-09-02

Ruby on Rails をインストールする  [by miyachi]

仕事で Ruby on Rails を使う必要があるのでまずは書籍を購入。「たのしいRuby第3版」「Ruby on Rails 3 アプリケーションプログラミング」の2冊。Rubyも使うのが初めてなのでリファレンス用に1冊。

「Ruby on Rails 3 アプリケーションプログラミング」にはWindows用とLinux用の Rails インストール手順もあるのでまずはWindows用をこの本の記載通りにサクッとインストールして無事に動作を確認。ところがどうも今回使うRubyネイティブモジュールの中にはWindowsでは動作しないものもあることが分かりました。ならと言うのでCentOS 5.6をVMwareで動かして再度 Rails のインストールを… 書かれているだけじゃうまくインストール出来ない… と言うことで少し苦労をしたのでネタとしてブログにまとめておきます。 [続きを読む]
2011-09-02 10:39:53 - miyachi - - [プログラミング] -

2010-03-05

ブログでのソースコード表示  [by miyachi]

前回の投稿もそうですが「プログラマの日記」なものでプログラム等のソースコードをブログに書く場合が多いです。しかし表示は手を抜いていたので見苦しいものでした。以前から何とかしなければと考えていましたが、お昼休みにエイヤッとやってしまったので記録です。

まずどういうやり方が一般的なのかググってみました。JavaScriptやPHPのプラグイン的にやるケースが多いようです。行番号が付けられたりして便利そうですが、プラグインを使うのはどうも好きではありません。そんな中で見つけたのがMTサイト構築Tips集様の以下の記事。

 pre、codeタグを使ってソースコードを美しく表示する

CSSを使って結構美しく出来るようです。早速参考にしてみてCSSにPREとCODEタグの定義を組み込んでみました。おお。結構綺麗。背景画像もこのブログ用に修正して…前回の投稿のソースも見やすくなったと思いますがいかがでしょうか?MTサイト構築Tips集様ありがとうございましたm(_ _)m

ただまだ問題があります。ソースを入れる場合にソースコードの特殊文字を変換する必要があります。まあこれは比較的簡単なのでJavaScriptで作ってみました。以下長くなるので続きを読むにて。 [続きを読む]
2010-03-05 13:23:40 - miyachi - - [プログラミング] -

2010-02-22

ActionScript3.0でのXML操作  [by miyachi]

Flashに組み込むActionScript3.0でXMLの扱いを勉強。なんと文字列としてでは無く直接代入が出来ることに感動。例えば以下。

 var xml:XML = <data>coffee</data>;

でもふと困った。例えば上例だと coffee としている箇所を文字列変数を使いたい場合どうすれば? ヘルプを見ても良く分からなかったけど検索して発見。ちょっと見つけにくかったのでここにも書いておきましょう。

結論から言えば波括弧 { } で括れば変数の値をそのまま使ってくれるそうです。例えば以下。

 var drink:String = "tea";
 var xml:XML = <data>{drink}</data>;

これは楽だ。あと当然ながらノードや要素のリプレース等も出来るが独自すぎてDOM等に慣れていると逆に分かり難い面も。何にせよActionScriptは独自の世界だなぁ。

[追記]
ActionScript3.0からURLRequestとURLLoaderを使ってHTTP通信のプログラミング。登録コマンドを送って再読み込みコマンド…あれ?反映されていない?ブラウザからチェックしてみると登録されている。?????

暫く何が悪いか分からず時間を無駄にしてしまいました。調べてみるとどうやら強力にキャッシュされてしまいサーバに接続しないで古い内容が戻って来ているらしい。これを避けるにはなんとURLの最後に乱数を付けて毎回異なるURLにアクセスしていると思わせる方法が一般的のようです。

と言うことで以下のように現在時刻のミリ秒をダミーとして引数に与える事で解決。

 var urlReq:URLRequest = new URLRequest();
 urlReq.url = url + "?dummy_number=" + new Date().getTime();

え~い時間を返せ(^^; ActionScript3.0はなかなか手強い。
2010-02-22 10:52:18 - miyachi - - [プログラミング] -

2010-02-17

環境変数をJavaScriptで取得する  [by miyachi]

訳あってJavaScriptからサーバの環境変数を取得する必要がありました。こんなの簡単だろう…と思ったら、単純には取得できないらしい…orz 理屈から言えばJavaScriptはクライアント側で動作するのでサーバの環境変数は取れないらしい。ネットで調べると結構皆さん苦労されているようでした。

他の方法も考えられないでは無いのですが出来ればJavaScriptで取得したいと思って色々検討した結果、以下の手順を思いつきました。

 1) PHPで環境変数を取得してPHPの変数に格納
 2) JavaScriptからPHPの変数を取得

PHPはサーバ側で動作することもあって環境変数は全く問題無く取得できます。JavaScriptからPHP変数の値が取得できれば出来るはずです。でとりあえず動作したのでここに書いておきます。htmlの中に以下のようにPHPとJavaScriptを記述して実現しました。

<?php
$addr = $_SERVER['REMOTE_ADDR'];
?>
<script type="text/javascript">
jaddr = "<?= $addr ?>";
document.write("address = " + jaddr);
</script>

ここでは環境変数REMOTE_ADDRを取得しています。なおPHPが先でJavaScriptを後に記述しないと順番があるのでうまく動作しません。まあ釈然としない部分はあると思いますがまずは目的クリアの為にはこういう方法もあると言うことでご参考まで。
2010-02-17 17:13:56 - miyachi - - [プログラミング] -

2010-02-09

WindowsでのSSLクライアント認証プログラム  [by miyachi]

先日事情があってWindows上でのSSLクライアント認証のプログラミングの調査をしました。良く考えたら数年前に使ったことがあったのを忘れていました。健忘録として書いておきます。

SSLのサーバ認証は皆さん https で始まるサイトを利用する事で使っていると思います。クライアント認証はサーバ側が逆にクライアントを認証して接続の可否を決める仕組みです。X.509形式証明書と秘密鍵を使いますのでPKI的な素養が必要ですがPKIとは言えませんね。

と言うことでプログラミングで考えるとクライアント側からサーバへのhttp通信になります。良く使われているレガシーな通信APIとしてはWinInetがあります。Win32からhttp等の通信をするならWinInetが一般的です。msxml等からも使われています。ところがWinInetはSSLサーバ認証は対応していますがSSLクライアント認証には対応していません。SSLクライアント認証に対応するにはWinInetの後継であるWinHTTP英文)を使うとなっています。

でも何だかWinHTTPを生で使うのは面倒そうです。と言うことで.NET FrameworkのクラスであるHttpWebRequestHttpWebResponseを使う事をお勧めします。HttpWebRequestとHttpWebResponseを使ったクライアント認証の説明とサンプルのページもあります。私の場合はこのページだけでうまく使うことができました。

少し面倒なのが X509Certificate クラスで接続に利用するクライアント証明書を用意するところでしょうか。先のサンプルページでは「.cer ファイルが必要」となっていますがこれはWindows証明書ストアから取得した方が間違いがありません。X509Certificate2クラスの関連クラスを利用すればGUIによる証明書選択も可能になりますし必要な証明書を取り出す事も可能です。
2010-02-09 17:56:18 - miyachi - - [プログラミング] -

2009-04-09

.NET Framework の DataGridView  [by miyachi]

現在開発中のプロジェクトはMacOS-Xで動作しているあるアプリをWindowsに移植するというもの。Windows版もC++とMFCなら経験もあるので簡単ですが、せっかくなのでC#と.NET FrameworkだけでGUIも作ってしまおうと初めて本格的にC#だけでアプリを開発しています。これがなかなか一筋縄では行きません(笑) まあでも経験値はアップしていると思うので頑張りどころです。

閑話休題。さて今週取り組んでいたのは以下のようなスマート検索のダイアログです。問題になるのはメインの検索条件を入力する部分です。プルダウンありテキスト入力ありボタンありと言う事で DataGridView クラスを使うことにしました。



これが思った以上に簡単には使えない!何の罰ゲームですか?と言う感じでした。まあ情報はあるんですが私には判りにくかったです。なのでここで簡単にポイントだけ押さえておこうと思います。以後興味がある方は [続きを読む] にて。 [続きを読む]
2009-04-09 13:00:53 - miyachi - - [プログラミング] -

2009-03-04

System.Data.SQLite の GetDateTime でエラー  [by miyachi]

現在開発中のプロジェクトでSQLiteの.NET(C#)用の System.Data.SQLite を使っています。これらはアプリから簡易にデータベースを利用するオープンソースのプロジェクトです。SQL文を使って1つだけデータベースを開いて操作が出来るもので、軽くて使い方も簡単で初めて使いましたがなかなか便利です。(ただSQLをつかうのは久しぶりなものでちょっと最初だけ思い出すのに苦労しました(^^;;)

レコードの種類としてTIMESTAMP型があり、読み出す時には reader.GetDateTime() で取得できます。ところがINSERT時にはエラーになりませんがSELECTして GetDateTime() を実行すると例外になってしまいました。何でだろうと少しググると先人がやはりいらっしゃいました。でもまあ私も一応原因を書いておきましょう。

INSERT時には最初は DateTime.Now を使っていましたがこの場合に挿入される文字列は例えば "2009/03/04 18:00:00" となります。これが原因でした。挿入する文字列として "2009-03-04 18:00:00" とすればSELECT時にも例外は発生しません。 つまり日付の区切り文字を "/" から "-" に変更する必要があります。C#で書くなら、

 String timeStr
  = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

と言う文字列を取得してINSERTすれば良いようです。これなら SQLiteDataReader の GetDateTime() で正しく日時が取得できます。この程度は通って欲しいけど互換性等の問題もあるのかもしれません。

余談ですが .NET用の System.Data.SQLite は、オリジナルのSQLiteのラッパーでは無く別途実装し直しているようです。なのでオリジナルのDLLファイルも不要になっています。安易に考えるとラッパーの方が楽とも思えますがマネージコードだけで済むようにしたかったんでしょうね。Monoでも動くようです。公開してくださっている皆様に感謝しつつ使わせて頂きます。
2009-03-04 18:28:52 - miyachi - - [プログラミング] -

2009-02-04

MeCabによる解析  [by miyachi]

某所のお仕事でオープンソース公開されている形態素解析エンジン「MeCab」を使いました。なんだかLangEdgeの社名に相応しい(一応Languageをもじった社名なんです)仕事だったような(^^;; 作者様に感謝しつつ使わせて頂きました。

さてMeCabを使うだけならサンプルソースも付いているのでここで書くまでもなく簡単です。ただ今回は複数の候補を取り出す必要がありましが、これのサンプルソースがありませんでした。ネットで検索しても見つからなかったので自前で何とかしました。せっかくなので公開の許可も得られたのでここで公開しときます。以後ご興味があれば [続きを読む] にて。 [続きを読む]
2009-02-04 13:00:27 - miyachi - - [プログラミング] -