kkAyatakaのメモ帳。

誰かの役に立つかもしれない備忘録。

OpenSSLを使った暗号化

C++

OpenSSLを使ってAESで暗号化。 暗号化 #include <openssl/evp.h> EVP_CIPHER_CTX ctx = {}; EVP_CIPHER_CTX_init(&ctx); // 暗号化の設定で、EVP_aes_128_ecb等いろいろ const unsigned char iv[16] = {}; EVP_EncryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, key, iv); // </openssl/evp.h>…

Win32 APIを使ってOSを再起動する

ちょっと必要になって調べてた。呼び出す関数はExitWindowsExなんだけど特権の調整が必要で単純に呼び出すだけでは成功しない。 ExitWindowsExから調べていって、LUID_AND_ATTRIBUTESのところで... Its meaning is dependent on the definition and use of t…

C#のラムダをWin32呼び出しで使う

あたり前っちゃーあたり前なんですが、Win32を呼び出す際の選択肢として、なぜかラムダを使うという選択肢が思いつかなかった。 delegate Boolean EnumWindowProc(IntPtr hwnd, IntPtr lp); [DllImport("User32.dll")] private static extern Boolean EnumWi…

C++のラムダがCのコールバックにつかえる

ためしにやったら動いた。さすがC++。 #include <Windows.h> #include <iostream> int main() { HWINSTA sta = GetProcessWindowStation(); EnumDesktops( sta, [](LPTSTR desktop, LPARAM lp)->BOOL { std::cout << desktop << std::endl; return TRUE; }, 0); } Win32は列挙系で</iostream></windows.h>…

WPFでHotKeyBox

ホットキー用のコントロールを自前で作る際のポイント。TextBoxのオーバーライドとかは必要なくて、UserControlから十分作れそうな感じ。 ポイントはPreviewKeyDownで処理すること。KeyDownだとCtrl+Aで全選択されたり、特定のキーを拾えなかったりする。 th…

WPFでWindow MessageのHook

Windows Forms同じくオーバーライドかなぁと思っていたら全然違いました。 using System.Windows.Interop; var wnd = new Window(); wnd.Show(); // Show()の後で無いと取れません。 var handle = new WindowInteropHelper(wnd).Handle; var src = HwndSourc…

WPFでHot Key

WPFでHot Keyを取り扱う方法です。登録自体はWin32を用いますが、仮想キーの取り扱いやWindow Handleの取得方法なども課題になります。 順番に。登録・解除はWin32。 using System.Runtime.InteropServices; [DllImport("User32.dll")] private static exter…

デスクトップを指定してプロセスを起動する

プロセスを起動する際は、通常、元のWindow Stationとデスクトップを引き継ぎますが、CreateProcessではこれらを明示的に指定できるようになっています。 STARTUPINFO si = {}; si.cb = sizeof(si); si.lpDesktop = "WinSta0\\AltDesktop"; PROCESS_INFORMAT…

Window Stationとデスクトップ

Windowsのデスクトップはそもそも一つではありません。デスクトップはWindow Stationによって管理されており、既定でDefault、WinLogon、ScreenSaverがあることになっています。 プロセスはWindow Stationに、スレッドはデスクトップにひも付く感じになって…

CreateDesktopによる仮想デスクトップ

Windows 10になって仮想(マルチ)デスクトップが入るみたいですが、しばらく現行Windowsにて仮想デスクトップが出来ないかいじっていました。 CreateDesktopに関しては、前々から気にしつつも見ていなかったのですが、調べてみると結構簡単でした。 /* 1. 新…

Epic -> Reach

背景を白にしたEpicのまっさらさが結構好きだったんですが、Reachに変更しました。 多少でもカスタムできたらよかったのですが、時間がかかりそうだったので断念。 前々から、はてなブログに書いて、Evernoteにクリップという方法で、整形されたノートを作っ…

argv

Node.jsで組んで、必要なツールもNode.jsで書くのが楽だなぁと。ロジックもそのまま使えるので。 そうすると、引数の処理どうしようかなぁとなりますが、argvがヘルプを自動的に作ってくれていい感じでした。 argv var argv = require('argv'); argv.option(…

Nodemailer

Node.jsからちょっとメール使って通知したいなーとか思ったときに便利に使えます。 CentOS 6.5 x86_64 Node.js v0.10.28 Nodemailer v0.6.3 公式の説明が丁寧なので、簡単に使えますね。 Nodemailer Gmailなどを利用しての送信もできますが、サーバーからの…

EPELリポジトリを追加する

CentOSでtmux使いたいよーっと。さくらのVPSだと最初から入っているので、別のクリーン環境で混乱しました... CentOS 6.5 x86_64 EPELに関しては以下を参照。 EPEL epel-release 手順は以下の通り。 rpmパッケージのDL rpmパッケージのインストール /etc/yum…

Markdownに変更

はてな記法を使っていましたが、Markdownで書いてみることにしました。 見出しをどこからはじめるかで、ちょっと悩んだのですが、はてな記法だと記事内はh3から始まるようなのであわせることに。ブログタイトルがh1、記事タイトルがh2と考えれば、妥当なのか…

expressコマンドが見つからない

Node.jsのexpressを使おうと思ったら、expressパッケージからコマンドがなくなっていた。環境は以下。 Node v0.10.26 express 4.0.0 expressの公式を確認したところ、どうもコマンドはパッケージが変わったらしい。 express Guide 以下で手に入る。 $ npm in…

About

Google Analyticsの利用について 本ブログはGoogle Analyticsを利用してアクセスログの収集及び解析を行っています。収集にはcookieを使用します。データは匿名で収集され、個人を特定できるデータは含みません。収集したデータは本ブログの利用状況の把握の…

apt-cygの調整 その2

Cygwinのバージョンは以下。 1.7.25 (32-bit) Cygwinでgitをビルドしようとしたけど、なんかうまくいかんなぁ...と思ったら、m4のインストールで失敗してました。 $ apt-cyg install m4 ... ... `m4-1.4.17-1.tar.xz' へ保存完了 [273968/273968] Unpacking.…

apt-cygの調整

Cygwinのバージョンは以下。 Cygwin 1.7.25 久々にapt-cyg触ったらエラーになってました。 $ apt-cyg update ... ... http://ftp.yz.yamagata-u.ac.jp/pub/cygwin/setup.bz2 ... HTTP による接続要求を送信しました、応答を待っています... 404 Not Found ..…

BoostをRaspberry Pi向けにクロスビルドする

BoostをRaspberry Pi向けにクロスビルドします。 Boost 1.54.0 Raspbian (Hard Float) クロスコンパイラの準備 クロスコンパイルの環境を整えます。参考 RPi Kernel Compilation ARM用なら引数次第で何とでもなるやろ~と軽い気持ちでapt-getでGCCを入れたと…

Qt CreatorからRemote Device上で実行するときにrootで動かす

作成中のプログラムを、Qt CreatorからRaspberry Pi上のrootユーザーで実行する方法がすぐに思いつかなかったのですが、何のことはなく、Deviceの設定でログインするユーザーをrootにすればできることでした。 rootパスワードの設定 とりあえずRaspberry Pi…

Qt Quick 2でHello World

前回の記事でQt Creatorの設定が完了したので、Qt Quick 2のプロジェクトを作成して、Qt Creatorからネットワーク上のRaspberry Pi上で実行してみます。 プロジェクトの作成 Create Projectから「Qt Quick 2 application」を選択します。適当に名前とパスを…

Raspberry Pi用にQt Creatorを設定する

前回の記事でRaspberry Pi向けにQtをビルドしましたが、今回は開発用にQt Creatorの設定をします。これも元記事はBegginer's Guideです。 Beginner’s guide to cross-compile Qt5 on RaspberryPi Qt Creatorのインストール インストーラーをダウンロードし、…

Qt 5をRaspberry Pi向けにビルドする

Raspberry Pi向けにQtをビルドします。以下は元記事。 Beginner’s guide to cross-compile Qt5 on RaspberryPi Qt5をRaspberry Pi用にビルドする Raspberry PiでQt5を動かす 結構手順があるのですが、慣れるとそれほど手間はかかりません。DLとビルドの時間…

Boost.Testの利用で変な風にはまる

Boost.Testを使い始めようと試していたら、次のエラーが出て、詰まっていました。 LINK : fatal error LNK1561: エントリー ポイントを定義しなければなりません。ソースは次のとおりの簡単なもの。 #define BOOST_TEST_MODULE unit_test #include <boost/test/unit_test.hpp> BOOST_AU</boost/test/unit_test.hpp>…

Boost.Logはとりあえずこう使ってみる。

これまでの記事でいろいろ書いてきましたが、全部まとめて、とりあえずこんな設定で使ってみようと思っています。問題が出たらつどつど。 コンソールに出力する Visual Studioに出力する ファイルに出力する ログファイルはローテーションの設定をする 日付…

Boost 1.54.0のLogをMac 10.7 (Xcode 4)でつかう。

10.8、10.9でもXcode 4系なら多分同じ。注意点は2つ clangでビルドする dylibを使う clangでビルド 環境は次の通り 10.7.5 Xcode 4.6.3 clang (Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn) GCC(引数指定無し)でビルドすると、途中で失…

Boost.Logでファイルに出力する

Log出力するならやっぱりファイルに出力したいので、ファイル出力の設定をします。Log用のライブラリを使うなら、ログローテーションを活用しない手は無いですね。出力用のbackendはtext_file_backendになるので、既定どおりbackend -> sink -> loggerに設定…

Boost.Logのtext_ostream_backend

BOOST_LOG_TRIVIALは何の設定も無くログをコンソールに出力できますが、新しいbackend(のためのsink)を設定すると出力されなくなります。これでは少し都合が悪いので、自前でコンソール用のbackend(sink)を用意します。ストリームへの出力なので、次を使いま…

Boost.Logの出力をVisual Studioの出力に表示する

Win APIのOutputDebugStringを使用することで、Visual Studioの出力ウィンドウにログを表示することができます。Boost.Logでは同様の機能を持った、専用のbackendが標準で用意されているので、それを利用することで、Boost.Logの出力をVS上に表示することが…