堕(惰)プログラマ開発記録

タイトル変えようかなとも思ってるけれど,思い浮かばない

高専プロコン2011 in 舞鶴

さて,遅くなりましたが,ご報告.どう見ても良い結果ではありませんですが. 高専プロコンについてはご存知*1かと思いますが, 競技部門では各高専がある物事を競争し,自由部門・課題部門ではそれぞれのチームの成果を プレゼン及びデモで発表の後審査され…

JOI 2011/2012

自分で解けたと思われるコードおいておきます.ですから問4以降のコードはノーコメント. 間違ってたり,桁あふれて,Wrong Answerもらう確率大です.くれぐれも参考程度で. というわけで,以下,問1〜3のコードです. すべてC++で書かれています. 問題1 …

駆け出しBoost.Spirit.Qi

Boost.SpiritがBoost Advent Calendar 2011 - PARTAKEで取り上げられそうなので,ちょっと予習がてらBoost.Spirit.Qi,弄ってみました. とりあえずHTTPレスポンスのパーサを. #include <map> #include <boost/spirit/include/qi.hpp> #include <boost/fusion/include/std_pair.hpp> #include <boost/foreach.hpp> typedef std::map<std::string,std::string> header_type; …</std::string,std::string></boost/foreach.hpp></boost/fusion/include/std_pair.hpp></boost/spirit/include/qi.hpp></map>

U-20プログラミング・コンテストの結果報告

今頃ですが、U-20プログラミング・コンテストの結果を報告します。 もう一週間たってしまってますが。 結果から言うと、経済産業省商務情報政策局長賞でした。 つまり経済産業大臣賞に届かなかったわけですね。 当日、UDXの下で「電撃 秋の祭典」を行なって…

XP Modeを最新版のOracle VM VirtualBoxで動かしてみる

はじめに 「最新版のVirtualBoxにVMlite Workstation Pluginを入れればいいじゃないか」と思うかもしれません. 私も最初,これに騙されました.このプラグインはSun時代のVirtualBox,しかも3.1前後じゃないとインストール出来ないという曲者. 最新版に入…

U-20 プログラミングコンテスト

9月26日まで応募が行われた、情報化月間は社内情報の強化で!に 私も以前学んだRawInputを使ったソフトウェア、Window Changerで応募してきました。 うまく動かなかったらしく問い合わせのメールが送られてきましたが、 無事何とか言ったようです。 ダメ元で…

高専プロコン関係のお話

一応、高専プロコン*1の競技部門の会議に参加して居ます。(自由部門も参加してましたが) 競技部門では毎年、事前に指定されたゲームでどの高専が一番か競い合います。 今年は白黒画像をもう一つの白黒画像に修復することが目的です。 修復方法は指定されたス…

非アクティブ時でもRawInputで入力を検出する

ウィンドウアクティブ時に入力された装置を判断する方法は RawInputによる入力に使用した装置の判断 - 堕(惰)プログラマ開発記録で紹介しました。 今回はウィンドウがアクティブでないときにもWM_INPUTに飛び そこで処理を行うように変更しました。 以下のよ…

RawInputで接続されている入力装置を取得する

昨日の続き。 入力装置の取得も簡単だった。 クラスみたいなの作ってみたけど、カプセル化しようとして、 かえってわかりにくくなったんじゃないかと思う。 うーむ。 class raw_inputs { UINT input_devices_; RAWINPUTDEVICELIST *rawinput_device_list_; p…

RawInputによる入力に使用した装置の判断

キーボード入力を読み取り、入力元のキーボードのHIDを取得と動作の分岐をしたかったので 「Win32 APIにあるかなー」と探してみたところ、 RawInputというAPIが見つかったので使ってみました。 結構MSDNから引っ張ってきたけど、ウィンドウプロシージャを以…

クイックソートしてみた

C++

なんか適当なアルゴリズムを書いてみたいなと思ったので、 私流、クイックソート関数を書いてみました。 テンプレート周りはstd::sortを真似して、後は自己流の組み方。 最後オーバーロードできる用にboost::lambdaを使用していますが、 そこを消せばboostを…

Boost開発環境の構築 @Visual Studio 2010 SP1

構築環境 Windows 7 Ultimate x64 Visual Studio 2010 Professional SP1 この環境に Boost Version 1.46.1 を導入していきます。 準備 Boost DownloadsからBoostの最新版を落としてきます。 サイズは約40MiB〜80MiB。zipは大きすぎるので非推奨です。 これを…

Qt開発環境の構築 @Visual Studio 2010 SP1

メインマシンのOSを再インストールし直したので、 開発環境の再構築を行うためにQtのビルドをしました。そのときの記録を以下に記します。 構築環境 Windows 7 Ultimate x64 Visual Studio 2010 Professional SP1 この環境に Debugging Tools for Windows(デ…

僕がプログラミングをはじめたきっかけ

はじめに Index of /@Sn0wNightさんが発端となって何か 黒歴史 過去を語る記事が流行ってるそうです。 中高生の人達がプログラミングをはじめたきかっけとか、どういう言語が好きなのとか詳しく知りたいからできれば中高生開発者やってる方はブログに書いて…

HMAC-SHA1 powered by OpenSSL

C++

C++で自作HMAC-SHA1を書くのに挫折*1 代わりにSSLで依存しているOpenSSLを使用することにしました。OpenSSLでSHA-1するコードは std::string sha1(const std::string &data) { //用意 SHA_CTX encoder; unsigned char result[SHA_DIGEST_LENGTH]; //計算 SHA…

boost::functionとboost::bindとラムダ式

さっきのSHA1ハッシュを計算するクラスの中でこんなの使ってみたんだよね。 boost::functionとboost::bindとラムダ式…奥が深くて面白かった。 unsigned char W[80]; const int i[3] = { 0,5,10}; void foo(const int t,const boost::function<unsigned long(unsigned long,unsigned long,unsigned long)> calculate,cons</unsigned>…

SHA1ハッシュの計算

こんなC++でSHA1を計算できた!*1 ページをいくつか参考にしてやったけど、結構面倒なんだね。 // SHA-1ハッシュの計算 // 参考: http://www14.ocn.ne.jp/~bkclass/doc_sha1.html class sha1{ typedef oauth::string_type::size_type string_size; typedef o…

Boost.Exceptionが簡単過ぎる件

あまりやったことのない「例外処理」に手を出してみました! Boost.Exceptionを使ってみようと色々とググってみたらとても簡単で… class my_error : public boost::exception, public std::exception{}; こんな風にboost::exceptionを継承した例外クラスがあ…

Boost.AsioでSSL非同期通信

ちょこちょこ、boost::asio::streambufで例外が投げられるけど、 一応まともに動くコードになりました。 io_service::workって作ってないとスレッドが落ちちゃうのね… template<boost::asio::ssl::context_base::method SSL_TYPE = boost::asio::ssl::context::sslv23> class async_https{ public: async_https(boost::asio::io_service& io_service</boost::asio::ssl::context_base::method>…

非同期通信の途中終了

io_service::runのあとの非同期通信の途中で別スレッドから ssl-socket_.shutdown()とかtcp-socket_.close()とかすると、通信を強制終了出来るっぽいね。 「ローカルから遮断された」っていうエラーが残るけど、こいつを処理すればいいんじゃ無いかな? 私の…

OAuthAPIのヘルパー

サービスによってAPIのヘルパーを間違えないようにするためにこんな風にしてみたんだけど… class helper_base{ public: helper_base(std::string ss) : ss_(ss){} std::string get() const{return ss_;} private: const std::string ss_; }; class A_service…

Boost.Asioによる非同期通信2

昨日の続き。全体を非同期通信にしてみた。 クラスで色々まとめてね。 一応動くんだよね。 以下がコード。 #include <iostream> #include <boost/asio.hpp> #include <boost/bind.hpp> #include <stdexcept> class tcp_client{ public: tcp_client(boost::asio::io_service& io_service) : io_service_(io_service)</stdexcept></boost/bind.hpp></boost/asio.hpp></iostream>…

Boost.Asioによる非同期通信

OAuth関連のコードを最近書いてるはずなのに、 同期通信しか出来ないという俺だったので、 非同期通信について調べながらやってみた。 ゆうと(@yutopp)さんに 「workを作って、io_service::runをスレッドにぶち込めばもうそれだけで非同期」 と教わったので…

OAuthの仕組み

OAuthは慣れるまでが大変で、慣れてしまえば簡単に実装することができます。 基本的にOAuthはリクエストトークンの取得 ユーザに認証を求める アクセストークンの取得と行います。 Twitterではデスクトップアプリケーションを作成するときにのみ、 xAuthとい…

OAuthライブラリ作成

現在制作中のライブラリについて説明します。 近況報告なので、無視してもらってもかまいません。 というか、下手なコードで恥ずかしいのです。 依存ライブラリ Boost CLX C++ Library OpenSSL(リンクのみ) 自分で言ってても頼りまくりで恥ずかしい… 開発 開…

「ヒープが壊れていることが原因として考えられます。」の解消

C++

今日この罠に、はまりました。 ただ中でnewしてdeleteする関数を呼んだだけなのですがね。 void hoge(){ char *test = new char; delete test; delete test; //ここで発生する可能性がある } こんなコードを書くと、 HEAP[hoge.exe]: Invalid Address specif…

Boost 1.45.0をVC10用にビルドしてみる

boost 1.45.0が公開されたのはずいぶんと前だと思うのですが、 適当にビルドしたlibがリンカーエラーを起こすことに気がついたので、 VC10(VC++2010)用にビルドし直すことにしました。 Windows環境ではboost_1_45_0フォルダ直下にある、bootstrap.batを実行…

wxPanelのwxNoteBook用ラッパークラス

レベルが低いコードかもしれない。そこら辺はご了承。 #include <wx/notebook.h> class wxTabPage: public wxPanel{ public: wxTabPage(wxBookCtrlBase *parent): wxPanel(parent) { m_MainSizer = new wxBoxSizer(wxVERTICAL); this->SetSizer(m_MainSizer); //部品をここ</wx/notebook.h>…