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上に表示することが…

Boost.Logを使う。

Boost 1.54.0からLogが入ったので使ってみました。ログの取り回しは、とりあえずグローバルに1つあればよいので、Boost.Logのチュートリアルにあるように、TRIVIALを使っていきます。 BOOST_LOG_TRIVIAL チュートリアルほぼまんまですが。レベルでフィルタわ…

BoostのMac用dylibのビルドで、install_nameを変更する

b2の引数等いろいろ調べたり試したりしたけど、ダメで、結局*.jamファイルを変更した。 Mac OS X 10.7.5 boost 1.54.0 Xcode 4.6.3 (Apple LLVM 4.2) Boost.Logを使おうと思ったところ、どうにもMacはstaticライブラリが使えないようで...Macでsharedライブ…

apacheでシンボリックリンクが見えないよーというメモ

順番にはまった...環境はCentOS 6.4。確認ポイントは次の3つ。 「/etc/httpd/conf/httpd.conf」の設定 リンク先のアクセス権(主に/home以下) SELinux あと、まあ、何気に忘れそうなので一応メモ。 Firewallでhttpを許可 無駄にはまったのは、同じと思ってい…

Gitをとりあえず使うメモ

なかなか使う機会がこないので、なんかもー、とりあえず使ってから考えようと。 ユーザー設定 ログとかに表示される名前とメールアドレスの設定。 $ git config --global user.name "kkAyataka" $ git config --global user.email sample@example.com設定は~…

Boost.DateTimeのフォーマット

gregorian::dateやposix_time::ptimeはISO形式での出力になる。日付を「/」区切りや、ファイルパス/名前などに利用したりと、都合よく整形したい場合はそれぞれのfacetを利用する。 date_facet, time_facet 変換は、gregorian::date_facet、posix_time::tim…

Boost.DateTimeでUTCとLocalの変換

posix_time::ptimeのutc local変換。 utc to local 変換方法2種。1つ目はC言語関数ラッパーを使うもの。これはutc -> localのみの変換。通常はこれだけで事足りそう。 #include <boost/date_time/c_local_time_adjustor.hpp> date_time::c_local_adjustor<posix_time::ptime> adj1; posix_time::ptime t1 = adj1.utc_to_loca</posix_time::ptime></boost/date_time/c_local_time_adjustor.hpp>…

Cygwinのapt-cyg

apt-cygはCygwinでのパッケージ管理をapt-getライクに行えるので重宝します*1*2。setup.exeからのインストールは検索がもたつくので快適でないし、作業はできるだけターミナルで完結したいもの。setup.exeの管理も面倒です。 準備 apt-cygに必要なパッケージ…

Sony Readerと1年。

Kindleが発送されだしたみたいで。ちょうど1年前あたりに話が出てたんですが、思ったより時間がかかったな~って感じです。Kindleは周りの購入率が異様に高いですね(私は3G版を購入しましたが、届くのはもうちょっと先)。KindleはKindleストアとあわせて歓迎…

rubyをビルドしてインストール

環境はCentOS 6.3 64bit。とりあえずgccが必要です。 $ sudo yum install gccrubyは1.9からgemが統合されていますが、gemを動作させるのにyamlが必要で、ビルドをする前にシステムにインストールしておく必要があります。libyamlはEPELにあるため、yumから入…

無線LANのアクセスポイント化

そもそもアクセスポイント化できないアダプタが存在するので注意。この記事での機材は次のとおり。 Raspberry Pi 2012-09-18-wheezy WLI-UC-GNM2 (Ralink RT3070) Nexus 7 Ralinkチップ搭載のものがよい見たいです。本来はDHCPサーバーを動かした方がいいの…

For Music Lovers, By Music Lovers

NW-F806が届きました。電源起動時の文字列がステキですな。Android 4.0の端末が手に入ったわけですが、開発に使うつもりはいまんとこあんまり考えてません。純粋に音楽プレイヤーとして使う予定でいます。これまではiPod touchでした。こっちは引き続き目覚…

固定IPの設定

Debianでの固定IPの設定。「/etc/network/interfaces」を編集する。 $ sudo vi /etc/network/interfaces auto wlan0 iface wlan0 inet static address 192.168.0.100 netmask 255.255.255.0 gateway 192.168.0.1無線LANでも同じで、staticにしてwpa-confの後…

Raspberry PiとALMinium

Raspberry Piが届いてすぐに試して挫折していたALMiniumなんですが、いろいろ動くようになっていました。CentOS 6.3でのインストールにも失敗していたんですが、これが直ってまして、Raspberry PiのDebianにもインストールできました。 Raspberry Pi + 2012-…

無線LANの設定

環境はDebian。 GUIからやれば一発だけど、Raspberry Piとかいじってると、イメージ書いたときについでに設定しておけばつながるので楽なのです。まとめると以下。 wpa_passphraseでSSIDとPSKから暗号化したPSKを取得 「/etc/wpa_supplicant/wpa_supplicant.…

Raspberry Piと無線LAN

OSはRaspbian wheezy 2012-09-18。試した子機は次の2つで、どちらも差し込めば動きます。 PLANEX GW-USValue-EZ (Realtek RTL8188CUS) BUFFALO WLI-CU-GNM2 (Ralink RT3070) 2個試したのはAPモードで使いたかったからです。 アダプタ 消費電力(W) APモード G…

Raspberry PiのSDカード使用量とCPUメモリ

Raspberry Piはイメージを焼いた直後だと、2GBしか容量を使っていません。 $ df -h Filesystem Size Used Avail Use% Mounted on rootfs 1.8G 1.3G 346M 80% / /dev/root 1.8G 1.3G 346M 80% / devtmpfs 93M 0 93M 0% /dev tmpfs 19M 232K 19M 2% /run tmpfs…

Raspberry Piを動かす

Pandaboardなんかと同様に、イメージをDLしてSDカードに書き込めば準備完了となります。書き込み方法はWikiを参考にすればOKで、WindowsやMacでの方法もあるみたいですね。わざわざLinuxの仮想環境を用意しなくていいのはいいかも知れません。Linuxではおな…

Raspberry Piが届きました。

注文から3ヶ月半。予定ではもう1ヶ月早いはずでしたが、生産が遅れたみたいです。まあ、9月いっぱいまでは忙しかったので、ちょうどよかったかもしれません。内側にプチプチが着いた梱包で届きましたが、よくよく考えると、超簡易って気もします(ピンク色の…

Content Providerで画像を列挙する

単純に画像を選択するだけなら、Intentを使ってアクティビティ(通常はギャラリー)を起動して結果を受け取るのが楽ですが、これだとやっぱり細かい制御ができないよね、ってことで、Content Provider経由で画像を列挙して見ます。 リファレンス Content Provi…

ギャラリーで写真を選択して結果を受け取る

Androidで写真を選択する場合、他のアプリ(通常は標準のギャラリー)を起動して、選択結果を受け取るのが簡単です。この操作は抽象化すると、「アクティビティを起動し結果を受け取る」ということになるので、ドキュメントもその部分を参考にします。 リファ…