sidebarおちラボ:教育システム研究開発BLOG情報工学技術を利用した教育支援、いわゆる教育工学の研究やってます。研究に関係する技術動向(プログラミングねた)や、日常の覚書き、呟きなどを書いていこうかと思います。今のところ、初歩的なプログラムネタばっかりですが、、、、長い目でお付き合いください。リストに格納されているクラスを任意の変数でソートするC#でリストに格納されておりクラスをクラスの任意の変数でソートする方法です。Comparetorに相当するメソッドを定義して、Sortメソッドで指定すればOKです。C#C#:プロパティを理解するC#にはプロパティと呼ばれる枠組みがあるので、その紹介です。(初心者向けです)オブジェクト指向言語においては、変数の隠蔽化などはよく利用される手法ですが、一般的には?というかJavaでは、getter/setterメソッドを実装した制御が一般的です。この方法は、実質メソッドが増えることになり、美しくないです。C#には(マイクロソフト系言語には)、プロパティと呼ばれる関数と変数の中間的なものが存在します。外部からは変数のように扱われるという特徴があります。外部からは「値を代入」すればいいわけです。積極的に活用しましょう。記述方法は下記のとおりです。【C#】OpenCVSharpでのBitmapとIplImageへの相互変換C#だと思いのほか簡単です。OpenCVOpenCV2.4.5をWindowsで利用する以前の記事、OpenCV2.1をWindowsで利用するの続編です。OpenCVは年々進化し、かつ便利になっています。インストール方法も若干変わってきてるので、さらにその更新です。公式サイトよりダウンロードします。Windowsというのがトップページからリンクされているはずです。それ以外のバージョンは、ダウンロードのリンクからたどってください。exeファイルですが、これは単なる圧縮ファイルです。インストーラーではありません。ディレクトリに移動する展開したファイルは適当な場所に移動させましょう。個人的には、c:\OpenCV\<バージョン>\とするのが好きです。中身を確認してみるbuildディレクトリの中に必要なDLLファイルは既に出来上がっています。x64(64bit)とx86(32bit)とディレクトリが分けられています。どちらを使うのかは決めておきましょう。32bit版にしておくのが無難、、という声も耳にしますが、どうなんでしょうね?Pathを設定するOSの環境変数設定で、Pathに利用するバージョンに合わせて;C:\OpenCV\2.4.5\build\x64\vc10\binを加えておきましょう。Studio2010を想定しています。記事内容が古かったので廃棄しました下記記事を読んで下さい。OpenCV2013年5月18日土曜日Gist:BLOGにコードを埋めこむ際のスタイル設定Gistのコード埋め込みURLを利用した場合、BLOGのスタイルによってはフォントサイズが若干大きかったりして違和感を感じることがあります。その際は、CSSで設定できます。これで本BLOGでもいい感じに埋め込めます。サイト管理Github:Gistでソースコードを管理・公開するすごく今更なネタですが、、GitHubにはGistと呼ばれるサイトがあり、ここは断片的なプログラムのソースコードを管理するというのを目的としているようです。GitHubはオープンソースのソフトウェアやライブラリを公開するのに適していますが、ちょっとそれは大げさで、公開するにしてもそれほどまでのものではない、、、という類のコードなどが個人的にはあったのですが、このGistはもっとお手軽に公開できます。他のサイトへのコードの埋め込みもアシストしてくれます。今までここのBLOGでは、SyntaxHighlighterというのを使ってコードの埋め込みをしていたのですが(Bloggerにてソースコードを載せる方法)、この必要もなくなります。本BLOGでのプログラムコードラボのサイトでのプログラムコード(講義とかラボ講座とか)をGistにアップしようかと企んでます。コメント2013年5月17日金曜日GAS:GASでSpreadSheetの組み込み関数(Query関数)を使うGASは、私の勘違いでなければSpreadSheetでGASで書いた独自の関数を呼び出すことができるSpreadSheetの組み込み関数をGASのスクリプトで呼び出すことができない(シート内だけで呼び出せる)という仕様になっているようです(ちょっと信じられないんですが。勘違いかもしれません)。シートの検索で使ってみたいQuery関数などは直接呼び出せないということになっているようです。その回避方法を思いついたので、、、まずQuery関数はArrayで結果を返してくれるんですが、これをシート内で呼び出した場合、結果が複数あるとシートに複数行にわけて出力されます。これが大きなお世話な機能なんですが、この結果を1つのセルにおさめることができたらよくて、ここで独自の関数を組み合わせれば解決します。下記のようにArrayをCSVに変換する関数を用意します。このQuery関数の結果をこの関数に渡すようにシートの式の記述をすればOKなわけです。上記では、setFormulaを利用して一時的にあるセルにToCSVとqueryを組みあせた式を登録してます。(検索クエリの書き方が変なのは許してください。)こうすることで、シートの見た目が変わることなくquery関数を利用できます。この方法を利用すれば、GASで直接SpreadSheetをデータベース的に使うことができます。GASにはDB機能もありますので、こういう使い方は今更かもしれませんが、、、、お試しあれ。いう時間関係のライブラリがちょくちょく話題になっています。いうのも、JavaScripでは標準では時間関係のメソッドが弱いんようなんですよね。ふだんJavaScriptを使わない私ですが、この問題は無視できません。GWTはJavaScriptに最終的になるわけですから、JavaScriptでできないことはGWTでもできないわけです。本BLOGでも時間のフォーマットについて記事を書いたことがあります。このmoment.jsをGWTで使うことができないか?当然そういうことを思っている人はいるわけで、momentgwtというプロジェクトがGitHubにありました。GWTユーザは必須のライブラリでしょう。記事でも書きましたが、ちょっとしたウェブサービスを実装することができます。ウェブサービスの場合は、普通のHTMLのレスポンスを返すのではなく、JSONやXMLといった形式で出力することになりますが、その記述をしておかないといけません。その方法ですがJSONの場合はというように、出力のMimeTypeを設定しておく必要があります。XMLの場合はMimeType.XMLです。このタイプには、ATOMJSONCSVICALRSSVCARDXMLといったフォーマットを指定することができるので、いろいろなタイプのウェブサービスが実装できると思います。GSONと呼ばれるJSONのJavaライブラリを公開しています。これは、JavaのデータクラスをJSON形式にして出力するJSON形式のデータをJavaのデータクラスに格納するという使い方が中心ですが、JSONのデータ構造とJavaのデータ構造が異なる時は、直接的にJSON形式でデータを書き出すことも可能です。下記は、サーブレットでの出力の例です。Javaのデータクラスに一旦書き込むよりも上記のようにWriterに対して直接的に書きだすほうが手間がかからないでしょう。書き方については、beginObjectとendObjectで囲まれた範囲が1つのオブジェクト(データ)に相当し、配列の箇所はbeginArrayとendArrayで囲まれた部分になります。JSON2013年5月11日土曜日GASとGWTの面白い関係GASで記述するコードは、基本的にはサーバーサイドで動かすことを前提にしています。GASには「UiApp」と呼ばれるクラスがあり、これを利用することでHTMLのUIを作成することができます。このUiAppを利用して作成されたHTMLページ(画面)は、実はGWTの形式で出力されていることが、ページのソースを見ることでわかります。JavaScriptという、ある意味よくわからないことを内部処理でやっていることになります。これは、UI回りの変換だけです。AJax的な記述はGASの範疇ではないです。GASで作成できるウェブアプリは、基本的にHTTPリクエストによるページ遷移をベースにした従来型のウェブアプリケーションですので。すると将来的にAJax的な処理をかけるようになるのではないかなぁという気がしてます。GWT2013年5月8日水曜日GWT(クライアント)+GAS(サーバ)というソリューション先日からGASが気になってしょうがないので、その使いドコロについて考えているのだが、表題のようにGWT(クライアント)+GAS(サーバ)というのは魅力的なソリューションとしてOKかもしれない。その利点は下記の通り。クライアント>サーバというニーズ昨今のAJaxとかGAEの実装などの流れをみると、サーバではあんまりガリガリやらなくてクライアントで処理をやるというのがトレンド。すれば、GWTでリッチクライアントを実装してGASのフロントエンドとするのは不自然ではないでしょう。GWTとGAS間の処理はJSONPでGWTはJavaScriptと性能は同じなので、クロスドメイン通信禁止の制約は当然もってます。JavaScriptと同様、JSONPによるクロスドメイン通信は可能なわけです。試しにGASでJSONを吐き出す簡易サーバを作成して、GWTのJsonpRequestBuilderを利用してアクセスすると無事、成功しました。GoogleDrive(SpreadSheet)の操作が容易にGASを利用する際に一番良く使いそうなのは、SpreadSheet。SpreadSheetをデータベース的に使うのはあまり現実的ではないですが、ログ環境的なデータの保存場所として利用するのはアリ!システム利用履歴とか記録など、あとから分析したいデータなどは、別にデータベースに入れておかなくてもSpreadSheetに直接入れておくほうが、閲覧もラクですしね。ローコストGASの料金は基本的に無料。意外とGASでできることは豊富で、GAEよりも制約は低い感じ。GWTもサーバサイド処理を使わなければ、静的コンテンツとして場所はどこでもOK。Driveでも置いておけばいいのです。個人的には、JavaScriptが嫌いでGWTにハマっているわけで、正直、GASには若干抵抗があります。触ってみて思うのが、JavaScriptって意外とクライアントサイドよりサーバサイドにあっているのかな、、ということ。Node.jsが流行っているのもその点かもしれません。GWT2013年5月2日木曜日Linuxでtar.gz圧縮したファイルをWindowsで解凍すると日本語ファイル名が文字化けた時の対処法SAMBAのファイルサーバにしていたLinuxマシンから、保存してあるファイルをtar.gz圧縮してWindowsマシンに持ってきて解凍すると、日本語のファイル名が文字化けしている事象が発生。文字コードの違いだということはわかるのだが、どうすればいいか。なるオプションがあるらしく、ここで文字コード(UTF-8)を指定すると、文字化けせずに解凍できる模様。ダウンロードすればついてきます。実行する際には、実行ファイル本体のほか、同ディレクトリにあるdllなども同じディレクトリにないといけないので注意してください。実際にコピペする際は、半角に戻してください。AnalyticsSyntaxHighlighterPrettyPrint。