ini_parserを 使う前に 言っておきたい 事がある

基本的には、こんなコードで読み込みができます

サンプル

sample.ini
[常識]
CLANNAD = 人生
AIR = 青春
に対するcpp
#include <boost/property_tree/ini_parser.hpp>
using namespace boost;
int main(){
 property_tree::ptree pt;
 property_tree::read_ini("sample.ini", pt);

 if (optional<std::string> value = pt.get_optional<std::string>("常識.CLANNAD")) {
  std::cout << "CLANNADは " << value.get() << std::endl;
 dt.xmlList.push_back(bcl::widen(value.get()));
 }else {}
 if (optional<std::string> value = pt.get_optional<std::string>("常識.AIR")) {
  std::cout << "AIRは " << value.get() << std::endl;
 dt.xmlList.push_back(bcl::widen(value.get()));
 }else {}
}

注意点など

  • ファイル名はstd::string
    • ちょこっと手を加えればなんとかなるかなと思ったけどptree周りがほとんどstringベタ書きだったのでbasic_string置換作戦は時間がかかりそうですね
  • 同じセクション名あるとread_iniで例外とびます
    • まあこのへんはマニュアル読んでとしか
  • (ptreeだと)大文字、小文字は区別します
    • itreeを使いましょう(コメント参照。egtraさんありがとうございます)

F#はじめました

明日はF#読書会だそうです。
そして、ちょっと勉強がてらこちらのを写経してみました。
#98 FunctionalでReactiveなGUIを作る
普通に写経するのも単調なのでGUIにはGTK#を使って見ます
使ったことないけど上手に使えますかね

ReactiveForm.fs

module ReactiveForm

open Gtk
open Gdk

type ReactiveWindow () as self = 
 inherit Gtk.Window("Form1")
 let numLabel = 
  new Gtk.Label ( "0", 
   Allocation = new Gdk.Rectangle (261, 9, 11, 12),
   TooltipText = "Num"
   )
 let incButton = 
  new Gtk.Button ("値を増やす", 
   Allocation = new Gdk.Rectangle(197, 24, 75, 23),
   TooltipText = "B1"
   )
 do
  let controlBox = 
   new Gtk.VBox(
    Allocation = new Gdk.Rectangle(0, 0, 100, 100)
   )
  //↓なんかここが冗長で気に入らない Add [ A; B] みたいにできないの
  //  というかctorで書かせて
  controlBox.Add numLabel
  controlBox.Add incButton
  self.DefaultSize <- new Gdk.Size(200, 200)
  self.Add controlBox
 let increment_click = 
  incButton.Clicked
  |> Observable.scan(fun n e -> n + 1) 0
 let mutable counter = 0
 do
  increment_click
   |> Observable.subscribe(fun ob -> numLabel.Text <- ob.ToString()) 
   |> ignore

Program.fs

module Program

open ReactiveForm
open Gtk

[<EntryPoint>]
let main _ = 
 Gtk.Application.Init();
 let mainWindow = new ReactiveWindow();
 mainWindow.ShowAll();
 Gtk.Application.Run();
 0

まあサイズとか全然違うじゃねーかって突っ込みはなしでお願いします

Gtk#の使い方
  1. GTK#をインストールする
  2. インストールしたフォルダのLibあたりにあるdllを全部参照
  3. 開始時にはGtk.Application.InitをしてRunで実行
コツというか、気づいたこと
  • Gtk.Boxをくみあわせてレイアウト
  • Gtk.WindowはGtk.BinなのでまとめたBoxをくっつける
  • Gtk.Container.Childrenはread-onlyなので追加はベタ書き
  • というかGtk.ContainerがWidgetのリストで初期化できないのはどうなの?

あとこれUbuntuのMonoで動くかなと思ってたらコンパイルがまったく進みませんでした。不思議<調べろ

(2011/09/08追記)Addキモいよねの解決策

こういうのがあれば、Addを一個ずつしなくてよくなりますよねと

let rec GtkAddMany (container:Gtk.Container) (widgets:Gtk.Widget list )= 
 match widgets with
  | x::xs -> (container.Add x; GtkAddMany container xs )
  | [] -> ignore;
  GtkAddMany controlBox  [ numLabel; incButton] |> ignore

名前はこちらからいただきました

さらに追記

ご指摘いただきました

let GtkAddMany (container : Gtk.Container) (widgets : Gtk.Widget list) =
    List.iter (fun widget -> container.Add widget) widgets

List.Iter

これAddあるコンテナに対してDuck typingできるんじゃない?

inlineを使えばもうちょっと抽象化できるんだけどリンク先の通りご利用は控えめにという感じですね

いすみ市に海水浴場の砂ってどうなのよ?って聞いてみた

ので、メモしておきます

まえがき

おれについて

  • あんまり放射能とか詳しくないです。なので専門的な話はできません

発端

都内在住で8月に友達と海に行こうぜ的な話をしていました
そこで、そういえば海水浴場の海とか砂ってどうなのよと思って、いすみ市ホームページを見る。
こんなのを発見した

ん?

測定方法:緊急時における食品の放射能測定マニュアル厚生労働省医薬局食品保健部監視安全課

ん?
異常値の基準値として用いたなら納得できるが、どうなんだ?

ついったで

なんてつぶやいてみたものの詳しい人いるかな的な期待は崩れ去り
とりあえず聞いてみるか、という方向で帰着

送ったもの

お世話になっております 

都内に住んでいるのですが、 
今年の夏ごろに海水浴場(大原駅最寄)によらせていただく予定です。 
楽しく遊ぶためにも、質問に答えていただければと思います。 

というのは、いすみ市で提供いただいている資料が、よくわからないからです 

いすみ市海水浴場等砂の検査結果(平成23年7月1日現在) 
http://www.city.isumi.lg.jp/topics/housyanou%20suna.pdf 

これについては、砂がある程度の指標を満たしていることがわかります。 
ですが、「どこで測ったのか」がわかりません 
地表に接地して測ったのか? 砂地から1m離して測ったのか? 

離して測ったことによる値が問題ないのならば、そこを歩く上では問題になりません。 
ですが、そこで砂遊びをしたり寝転がったりするには、砂地に接地した状態での放射性物質の状態が必要です。 

砂地表面でも現状はさほど問題ないレベルでは、と思っていますが、これは「成人男性に」だと思われます。 
「子供にとって」と、「出産のありえる年齢の女性にとって」安全なのか、 
が重要な指標となりますので、厳正にチェックしていただき、必要ならば砂の入れ替えなどを行っていただければ、と思っています。 

以上、ご回答ください

で、このまま送ったけど改行が全部消えた状態で送られたのでいすみ市さんはもうちょっとまともなフォームとか使ってほしいと思いますね

回答

電話できた
あとでまとめる(かも)

  • 砂を採取して測っている
  • 基準点を設けて、半径1mを90度四方にわけ、中心と合計5点の砂を採取
  • その結果の測定値として、測定器の下限以下の値をしめしていたようなので「なし」という記述をしている
  • 今後は大人が遊ぶ場合の高さ(1m前後?)・子供が遊ぶ場合の高さ(50cm前後?)にも注意して測定してみようと思う

というおへんじがきました。
(あ、そういえば転載許可もらってない・・・ 文句出たら消します

海水浴場の砂とか気になっている人の参考になればと思います

Boost勉強会に行ってまいりました

自分はというと、座席表の後ろのほうでおお、あれがtogetter職人様の手さばきか!とか関心しながら見ていたわけです。

Boost.Fusion

変数に名前付けてパースができますよ的な
便利ですNE!
会社で使いたいんだがちょっと厳しいかなと

セキュリティ入門

まあBoostというかC++あまり関係ない箇所も多数ありましたが。
知らない単語だらけだったので復習が必要です

OpenAL

結論としてOpenSL使いましょうというのがなんともかんともry
独特だけど慣れるのはそんなに苦じゃなさそうな構文だったかな

Live Streamingについて

IIJによる、この勉強会の配信に使われているストリーミングとは?というもの
M3U8 Live Streaming?
配信で見てる人は神画質だなとか書いていたので評価は高いようですね

C++をdisる

同意できますし、それでこそC++じゃねーかなあ、とか思ってた
でもg++のエラーメッセージ、てめーは許さん

proto

うーん、よくわからん・・・

dtl

どんなコードでも!ってのがミソですね。誰かD言語版をry
あとちょいちょいわからん用語があったのでフォローが必要

shared_ptr

HWNDはー・・・なんかうまくラッピングできそうだけどなあ
最近ちょっとGUIやってないから頭まわらんけどもこういう感じでやろうよねとしか考え付かない

Optional

便利だよねってことはわかってるけど拡張うんぬんがちとわかってない。
復習しましょう

TR18015

計測大事!
どうも自分で読んだほうが楽しそうなので翻訳される前に読んでしまえという考えもなきにしも

ゲーム開発

計測大事!
カスタムアロケータなどをうまいこと用いて上手にゲーム開発をしましょう、ということのようだ

C++ではまる

localeはいらない子です。
でもlocaleないと困る処理も絶対あるよねというのが123,456にあらわれていました
(まあそんなんSTL任せにするのかよとか思ってる人もいそうですが

progress_display

boostにこんなんあったんだ!!!!
マジ使いどころがないんですけど!!!!
timerのオマケ枠的な扱いなんですかね

後日談

お昼ごはんを最寄のファミマで買ったんですが、お釣りの10円玉のうちひとつがスペイン5セント硬貨だったようです
スペインの5セント硬貨ってのはこれなんですが、10円玉より一回りくらい小さい事を除くとなかなかパッと見で見分けがつかんわけで・・・
しかも5セントってことは6円くれーじゃねーかというひどいオチつき

win32++とはなんぞや

Win32++: A Simple Alternative to MFC.
なんだろうこれ
とりあえず使ってみた
あ、環境はVS2010でUNICODEでっす。環境によってはL""をTEXT("")とかにするとかSetWindowText()にするとか
つーかヘルプに書いてあるこれ↓うごかんだろ・・・

//ページ:"CWinApp Class"
return WndProcDefault(hWnd, uMsg, wParam, lParam);

ほぼサンプルからコピペ

#include "win32pp\wincore.h"

class CView : public CWnd
{
public:
 CView() {}
 virtual ~CView() {}
 virtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
  switch (uMsg)
  {
  case WM_DESTROY:
   //End the program when window is destroyed
   ::PostQuitMessage(0);
   break;
  }

  //Use the default message handling for remaining messages
  return WndProcDefault(uMsg, wParam, lParam);
 }
};


int APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
 // Start Win32++
 CWinApp MyApp;

 // Create our view window
 CView m_View;
 m_View.Create();

 // Run the application
 return MyApp.Run();
}

ボタンつけてみる

#include "win32pp/stdcontrols.h"
#include "win32pp/wincore.h"

class HelloBtn : public CButton
{
public:
 virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam)
 {
  switch (HIWORD(wParam))
  {
   case BN_CLICKED: MessageBox(L"Hello World!", L"hello", MB_OK); return TRUE;
  };
  return FALSE;
 }
};

class CView : public CWnd 
{
 HelloBtn testBtn1;
public:
 CView() {}
 virtual ~CView() {}
 virtual LRESULT WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
  switch (uMsg)
  {
  case WM_DESTROY:
   //End the program when window is destroyed
   ::PostQuitMessage(0);
   testBtn1.Destroy();
   break;
  }

  //Use the default message handling for remaining messages
  return WndProcDefault(uMsg, wParam, lParam);
 }
 virtual void OnCreate()	//いにしゃる
 {
  testBtn1.Create(this->m_hWnd);
  testBtn1.MoveWindow(10,10,100,100);
  testBtn1.SetWindowTextW(L"test");
 }
};
//mainは略

てきとーに書いたけど動いた!わりと便利かも!

MinGWコンパイルする場合

リンクエラーがでるので、libgdi32.aをリンクしてやる

>g++ hoge.cpp -lgdi32

あと、その名の通りx86でしか動かないのでx64環境の人は-m32をつけましょう

>g++ hoge.cpp -m32 -lgdi32

ライセンスはMIT

C++GUIやってみたいけど、Qtとかライセンス的にどうよとか、wxWidgetsとかうーんとか、stdafx.hとかメッセージディスパッチャとかキモいんですけど・・・な人が対象だろうか
あとは軽いよとか

リンクなど

【書籍】Presentation Materials: Overview of the New C++

Overviewで300ページ超とかどういうことなん?
でもMeyers氏の本だしはずれではなさそうだよね

Highscore : The boost C++ libraries

書籍の電子化らしい?いまさら見つけたけど結構データはある
でもちょっと古い(1.34くらい?Filesystemがv2だし)

Visual Studio のツールと拡張機能

VS2010の便利ツール一覧
多分使わん

GitでWebサイト管理をしてみる

T/O
あとでよむ・・・・かも

オープンソースプロジェクトに対して、よりよいサポートを得るには?

Ten ways to get (better) support for an open source projectの和訳

まだ途中。多分書かない(てめえ

  1. MLに入ろう - Google GroupとかLibrelistとかの自分が気になるものに入ろう、質問する前に過去ログ読めよ!
  2. IRCに入ろう - IRCで開発者と直接コンタクトがとれるかもよ!
  3. 問題を見つけよう
  4. 意地悪になる理由はないよ
  5. 問題を見つけたら詳細に報告しよう
  6. こけるテストを書こう
  7. パッチを出そう
  8. 質問をつぶやこう!でも気取ったりいやらしくふるまっちゃだめだよ!
  9. お金を払ってあげよう
  10. 開発者に感謝を忘れないこと!

gaspってどう訳すりゃいいんだ・・・