snap snap

気が向いたら書くブログ

VC++ 2013 で Web API にアクセスする

普段 C++ で Web API を扱うときは cUrl を導入して使っていました。

しかし、VC++ 2013 では cUrl はどうやら、あれこれしないとうまく動かないらしく、どうしようかなと思っていたところ C++ REST SDK というものを見つけたのでメモ

導入

導入には NuGet を用います。

  1. ソリューションエクスプローラー内のプロジェクト名を右クリックから NuGet パッケージの管理を選択
  2. 検索窓に Casablanca と打ち込み、リストから C++ REST SDK をインストール

以上で導入は終了です。

使用方法

使用するには以下の 2 個のファイルを include すれば ok です

#include <cpprest/http_client.h>
#include <cpprest/filestream.h>
using namespace web::http;
using namespace web::http::client;
...
http_client mHttpClient(L"http://xxxx");
mHttpClient.request(methods::GET).then([](http_response response){
    printf("Status: %u\n", response.status_code());
}

これだけのコードで、指定した URL に Get してステータスを表示されることができます。

参考 URL

方法: HTTP サーバーに接続する (C++ REST SDK)

誰かが ssh でリモートログインしたのを通知する

異常検知的なことではなく、ただ単純に誰かがサーバに ssh でリモートログインした時、それを通知するものです

概要

  • ssh を用いてリモートログインされた時、指定されたメールアドレスにログイン情報を送信する

環境

方法

ssh でリモートログインしたとき、/etc/ssh/sshrc が実行されます。

そこで sshrc にメール送信のスクリプトを記述します。

$ sudo vim /etc/ssh/sshrc
#! /bin/bash
echo "$USER from $SSH_CLIENT at `date`" | mail -s "ssh notice" -aFrom:[送信元メールアドレス]  [送信先メールアドレス]

設定後 ssh でリモートログインすると、以下のようなメールが送信されます

f:id:mitake_ck:20141207165332p:plain

Raspberry Pi でアロマ加湿器の ON/OFF を制御する

概要

USB 機器の ON/OFF を Raspberry Pi の GPIO を用いて行う

用意するもの

  • USB給電式のアロマ加湿器

基本的になんでもいいんですが、僕は以下の商品を買いました

  • RasPi

  • リレーモジュール

こちらも基本的にはなんでもいいです。 今回は手元にこちらのモジュールを使用しました。

USB 機器との接続用

  • その他ジャンパー線など

あとで書く

// 詳しい配線等は後から追記します

Visual Studio で QT+OpenCV な開発環境を構築した

はじめに

もっとスマートに設定する方法がありそうなので、詳しい方教えてください...

目次

  • QT Creator でプロジェクトを新規作成
  • qmake コマンドで *.vsxproj ファイルを生成
  • とりあえず VS2012 で開いてみる
  • リンカー設定の修正
  • 一旦諦め...
  • とりあえず VS2013 で開いてみる
  • NuGet から OpenCV をインストール
  • 動作確認

QT Creator でプロジェクトを新規作成

QT Creator を起動し [新しいプロジェクト] を選択.

テンプレートは [アプリケーション]->[Qt Quick アプリケ−ション] を選択. その後の設定は特に変わったことをせず作成.

実行してみる.

f:id:mitake_ck:20141121164054p:plain

当然動く.

qmake コマンドで *.vsxproj ファイルを生成

次に qmake コマンドを用いて Visual Studio 用のファイルを生成する.

生成にはプロジェクトのルートディレクトリで以下のコマンドを発行すれば良い.

qmake -spec win32-msvc2012 -tp vc

f:id:mitake_ck:20141121164103p:plain

実行すると、[プロジェクト名].vsxproj[プロジェクト名].vsxproj.filters の 2 個のファイルが生成される.

とりあえず VS2012 で開いてみる

うん. とりあえず Visual Studio 2012 でプロジェクトを開いてみる.

そしてそのままビルドすると、以下のエラーが起こった.

エラー 1 error LNK1112: モジュールのコンピューターの種類 'x64' は対象コンピューターの種類 'X86' と競合しています。

f:id:mitake_ck:20141121164114p:plain

調べてみると、リンカーの設定を変更すれば直るっぽいエラーのようだった.

リンカー設定の修正

修正には この記事(error LNK1112: モジュールのコンピューターの種類 'X86' は対象コンピューターの種類 'x64' と競合しています。) を参考にし行った.

が、しかし何度設定をやり直してもエラーが消えなかった...

一旦諦め...

いくらやってもエラーが取れないので、ご飯を食べた.

とりあえず VS2013 で開いてみる

何を思ったか、同じプロジェクトを Visual Studio 2013 で開いてみた.

すると.... なぜか実行できるようになった !!

f:id:mitake_ck:20141121171753p:plain

よくわからない.

NuGet から OpenCV をインストール

OpenCV の導入には NuGet を用います.

f:id:mitake_ck:20141121172141p:plain

バージョン 2.4.8 がインストールされました.

動作確認

Web カメラ画像を取得し表示させてみます.

f:id:mitake_ck:20141121164205p:plain

うまく動作しました.

要検証項目

  • VS2012 でリンカーエラーが消えない点
  • VS2013 ではなぜか正常に実行できる点

参考URL

10 million bugs in my code. @nanoris : error LNK1112: モジュールのコンピューターの種類 'X86' は対象コンピューターの種類 'x64' と競合しています。

munin で hddtemp_smartctl が上手く取得出来ない

hddtemp_smartctl が動かない

# munin-run hddtemp_smartctl
Can't exec "-A": No such file or directory at /etc/munin/plugins/hddtemp_smartctl line 214.
sda.value U
sda.extinfo Command  -A /dev/sda on drive sda failed: -1.  The plugin needs to have read permission on all monitored devices.
[ERROR] Command  -A /dev/sda on drive sda failed: -1.  The plugin needs to have read permission on all monitored devices.
Can't exec "-A": No such file or directory at /etc/munin/plugins/hddtemp_smartctl line 214.
sdb.value U
sdb.extinfo Command  -A /dev/sdb on drive sdb failed: -1.  The plugin needs to have read permission on all monitored devices.
[ERROR] Command  -A /dev/sdb on drive sdb failed: -1.  The plugin needs to have read permission on all monitored devices.
# 

The plugin needs to have read permission on all monitored devices. とのことだったので、パーミッション周りを弄っては、munin を再起動してって感じで試してみたのですがうまくいかず…

いろいろ弄った挙句、そもそも smartctl コマンドが無かったのが原因で上手く動作しなかったようです

smartctl をインストール

# aptitude install smartmontools

温度が正常に取得出来ました。

# munin-run hddtemp_smartctl
sda.value 41
sdb.value 45
#