Arduino Nano互換品を動かす

Arduino Nanoの正規品は秋月電子で見ると1個3560円。Amazonで3個で1999円という激安品があったので買ってみた。しかもピンはんだ付け済み。 https://www.amazon.co.jp/gp/product/B0CQXCCWZT/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&th=1 ただし互換品…

Rubyで大きなwavファイルを読む (未完)

訳あってwaveファイルの処理をする必要があったのでRubyを使ってやってみた。やりたいのはwavファイルをNumo::NArrayの形式で読むこと。また、使用したsample.wavはかなり大きい(2時間分、約1.2GB)。 「ruby wave file」あたりでググるとだいたい以下の2つ…

OpenCVとNumo::NArrayのバインディング

OpenCVは行列を表すクラスを独自に持っていますが(cv::Matクラス)、Pythonバインディングではこれをnumpyのndarrayに置き換えています。opencvrはcv::MatをRubyにバインドさせたものを使っていましたが、試しにNumo::NArrayにバインドさせてみました(open…

ThinkPad X1 Carbon Gen5 (2017モデル) で4K 60Hz出力

ThinkPad X1 Carbon Gen5 (2017モデル) にはHDMI端子があるが4K出力では30Hzになる。ゲームをするのでなければそんなに気にならない、かと思いきや、実際に使ってみるとマウス移動のカクカク感が結構気になる。 とここで「USB Type C→HDMI変換ケーブルを使え…

Yolov5による物体検出 (2): 環境構築と訓練済みモデルを使った動作確認

Yolov5による物体検出 記事一覧 (1): 概要 (2): 環境構築と訓練済みモデルを使った動作確認 ← イマココ (3): 少量のデータによる訓練と動作確認 ← 後で書く 環境を構築したらまずは訓練済みのデータで動作を確認します。いきなり自前のデータで訓練すると、…

Yolov5による物体検出 (1): 概要

Yolov5による物体検出 記事一覧 (1): 概要 ← イマココ (2): 環境構築と訓練済みモデルを使った動作確認 (3): 少量のデータによる訓練と動作確認 ← 後で書く 最近ちょっと物体検出を試す機会があったので、少しまとめておきます。 物体検出の方法にはいくつか…

opencvr: OpenCV Rubyバインディング

OpenCVの新しいRubyバインディングであるopencvr-0.1をリリースしました。とは言っても現状はまだ足りない機能が多く実用的とは言い難い状態なので、どちらかと言うと「OpenCVのRubyバインディングの開発を始めました」というアナウンスという位置づけです。…

Ubuntu 18.04 GNOME設定

以前にUbuntu 16.04のUnityの設定についての記事を書いたが、今回はUbuntu-18.04の話。 Ubuntuを最初に触ったのは8.04の頃だったが、その頃のデスクトップ環境のデフォルトはGnome2だった。Gnome2のデフォルト状態も色々不満があったが、たいていのことは設…

Apache Arrowのビルド

先日OSS Gate東京ミートアップ for Red Data Tools in Speeeに参加して、Apache Arrowの開発にデビューしました。自分の専門でない分野に一人で飛び込むのはなかなか大変なので、こういうイベントがあるのは助かります。と言っても2時間の中でできたのは、公…

CMakeを使ってみた (7) find_packageとpkg_check_modulesによるライブラリ探索

久しぶりにCMakeの話。外部の依存ライブラリがあるC/C++のコードをCMakeでビルドする場合、インクルードパスやライブラリパスを指定する必要がある。パスを直接指定する方法以前書いた。しかし、そこで書いたのはパスやライブラリ名を直接指定するもので、そ…

C++のマングルとextern "C" {

C++とCが混在したプログラムを書くとときどき定義したはずの関数がundefinedだと言われることがある。そんなときの対処法とマングルの話。その前にまずはC言語だけの場合を考える。例えば以下のようなCのプログラムを書いてみる。 /* main.c */ #include "fo…

Emacsで制御コードを入力する

Emacsを使っているときでも時々制御コードを直接入力したいことがある。 文字列を置換するときに改行を入れたい 強制的にタブを入力したい(たいていのモードではタブはインデントの設定になる) ちょっとググれば、Ctrl-qを使うことで改行やタブが入力でき…

GNOME Planner for Windows 独自ビルド版

リポジトリ構成を変更することにしたので一時公開停止中。最近ちょいとプロジェクト管理ツールが使いたくなった。プロジェクト管理ツールと言えばMicrosoft Projectが有名だが、如何せん値段が高いし、そこまで高機能である必要はない。代わりのツールを色々…

Bash on Windows (Windows Subsystem for Linux) でvalgrindを動かす

Windows上でLinux(Ubuntu)のバイナリを動かすBash on Windowsが発表され(Windows Subsystem for Linuxという呼び方もされているが、用語の使い分けがよく分からない)、bash, gcc, clangといったツールがWindows上で動くようになった。gccやclangを動かす…

GCC7ではエラーメッセージが改善されるらしい

プログラムを書いているときには当然色々ミスをするが、GCC(gcc/g++)が出すメッセージは Clang(clang/clang++)に比べて分かりにくい/不親切なことが多い。例えば、FooBarという名前のクラスが宣言されていて、それを使おうとしたときに以下のように間違…

valgrindが検出するメモリリークの種類

C/C++のメモリリークチェックツールと言えばvalgrindが有名だが、メッセージの詳細を日本語で説明しているサイトはあまりないようなので調べてみた。valgrindは、mallocやnewで確保されたメモリ領域がポインタによって辿れるかどうかをチェックすることでメ…

【翻訳】 The Linux Graphics Stack

この記事はGNOME関連の開発を行っているJasper St. Pierre氏のブロク記事「The Linux Graphics Stack」の翻訳である。Linuxのグラフィックス環境はX Window Systemがデファクト標準になっているが、最近はWaylandやMirといった新しいディスプレイサーバが出…

package.elで自動インストール

Emacsには便利なelispパッケージがあるが、最近ではpackage.elというのが付属していて、ネットワーク上からパッケージをインストール仕組みができている。以前はウェブ上から手作業でダウンロードして.emacs.dに下に保存していたが、package.elを使えば一覧…

Ubuntu 16.04 Unity設定

Ubuntu標準のインターフェースであるUnityだが、デフォルト状態では正直あまり使いやすくないし、見た目もイマイチだと思う。MateやKDEを入れるという手もあるが、なんとかUnityを使ってやろうと思い、色々設定してみた。 設定ツールのインストール システム…

curlコマンドによるウェブアプリのパフォーマンス測定 (2) アップロード・ダウンロード速度測定パッチ

前回の続き。前回色々試した結果、curlの-wオプションではPOSTリクエストのボディとレスポンスのBodyが両方とも大きい場合、アップロード・ダウンロード速度を上手く計れないことが分かりました。仕方ないのでcurlを改造することにしました。今回追加したの…

curlコマンドによるウェブアプリのパフォーマンス測定 (1) time_starttransferの仕様

curlの-wオプションを使うとHTTPリクエスト/レスポンスの様々なデータを表示することができます。が、ちょっと不可解な部分があったので調べてみました。 背景 ウェブアプリの簡単なテストのためcurlコマンドをよく使っていたのですが、-wオプションでちょっ…

curlコマンドによるデータ送信あれこれ

最近Webアプリを作ることがあって、動作チェックのためにcurlコマンドを色々使った。オプションが色々あって、データ送信の方法に分かりにくいのところもあったので、使い方をまとめてみる。 なぜ分かりにくいか 理由1: 送信方法が色々ある 単にデータ送信と…

Makeでビルドオプションによって出力ディレクトリを変える

前回はMakefileをヘッダファイルの依存関係に対応させてみた。そのMakefileは入力ファイル(ソース、ヘッダ)と出力ファイル(依存関係ファイル(.d)、オブジェクトファイル、実行ファイル)がすべて同じディレクトリにあることが前提となっていた。しかし…

Makeでヘッダファイルの依存関係に対応する

CやC++で書かれたプログラムをMakeを使ってビルドする、というのはUnix/Linuxではよく行われていることだが、ちゃんとしたMakefileを書くのは意外と難しい。例えば以下の3つのファイルからなるプログラムを考える。 foo.h: 関数fooの宣言がある。 foo.c: 関…

はてなブログへ移行

ベータサービス中のはてなブログのアカウントがもらえたので試しに移行してみました。 http://wagavulin.hatenablog.com/

CMakeを使ってみた (6) ソース外ビルド

CMakeを使うと、CMakeCache.txtやCMakeFilesなど様々ななファイルやディレクトリが生成される。結果的にプロジェクトのディレクトリが見にくくなりがちだ。そんなときはビルド作業を行うディレクトリを別のディレクトリにするとよい。これをソース外ビルド(…

CMakeを使ってみた (5) 設定ファイルを作る

今度は設定ファイルを作ってみる。設定ファイルと言ってもCMakeに対する設定ではなくプログラムに対するものだ。 条件付コンパイルと指定方法 ある程度の規模のプログラムの場合、#ifなどによる条件付コンパイルがあるだろう。 #include <cstdio> int main(){ #if US</cstdio>…

CMakeを使ってみた (4) ビルドオプション

今回は1つのプログラムを様々なオプションでビルドできるようにしてみる。つまりconfigureでの--enable-foo --with-barのような機能だ。 optionコマンド optionコマンドを使うとオン・オフ指定するようなオプションが可能になる。例えば、追加機能feature-x…

CMakeを使ってみた(3)ライブラリを作る

実行ファイルではなくライブラリを作る場合も大きく変わるところはない。add_executableのところをadd_libraryにすればいいだけだ。例えばmylibというライブラリがsrc1.cppからなるとき、CMakeLists.txtは以下のようになる。 cmake_minimum_required(VERSION…

CMakeを使ってみた(2)もう少しまともなプロジェクト

前回は簡単なアプリケーションを作り、CMakeでビルドしてみた。もちろん実際のプロジェクトはもっと複雑で、ソースファイルも複数あるだろうし、各種パスの設定も必要だろう。そこで今回は以下を設定してみる。 デバッグ版ビルドとリリース版ビルドができる…