MinGW gcc 32bit/64bit

投稿日: Leave a comment

mingw gccの64ビット環境を構築しようと思っていろいろ探し回ってみたけどよくわからず。

とりあえず、ここからファイルを展開してみたらmingw32とmingw64というフォルダが出来たので定位置においてパスを通せば大丈夫そう。

  • i686-w64-mingw32-gcc-4.7.2-release-win64_rubenvb.7z (32bit target)
  • x86_64-w64-mingw32-gcc-4.7.2-release-win64_rubenvb.7z (64bit target)

ファイル名がよくわからなかったけど、ここの下の方を見るとどちらも64ビットOS上で動作するコンパイラで、上が32ビットバイナリを作ってくれるコンパイラ、下が64ビットのバイナリを作ってくれるコンパイラ、らしい。

Packages are named as follows:

    [Target]-gcc-[Version]-release-[OS]-rubenvb.*
    [Target]-clang-[Version]-release-[OS]-rubenvb.*

Target:  GCC triplet for the system this toolchain builds code for:
         x86_64-w64-mingw32: 64-bit Windows
         i686-w64-mingw32: 32-bit Windows
Version: GCC version
OS:      OS the toolchain is built for:
         linux64: 64-bit linux
         win64: 64-bit Windows
         win32: 32-bit Windows (also work on 64-bit Windows)
         cygwin: Cygwin (www.cygwin.com)

今日のところはこれまで。おいおい使ってみる。

上のファイル名の解説に出てくるけど、最近はgccよりclangの方に興味あり。FreeBSDのシステムコンパイラがclangになるらしいし、コンパイルエラーの表示も見やすいし。

バラの到着予定日→2012/12/6

投稿日: Leave a comment

注文したバラは12月5日(水)発送で、到着予定日は12月6日(木)だそうな。

ところで、土のついていない裸苗はどれくらい保存できるんだろうか。

前に買ったところと同じ店に注文したけど、前回のときはかなり丁寧な説明書がついていたからそれを見れば植え付けのタイミングとかも書いてるかな。

『リーダブルコード』

投稿日: Leave a comment

こんな本を買ってみた。

周りにプログラムを書く人がおらず、自分が書いたコードを見つめなおすために買ってみた。

まだ読んでる途中だけど、いろいろな言語を例に書かれていて結構参考になる、というか反省させられることが多い。コンピュータ言語の入門書はいくつか買って読んだことがあるけど、この手の本は初めて買ったかも。

ちなみに、本のリンクを張るのにアマゾンから写真を引っ張ってきたくて、アマゾンアソシエイトの登録をしてみた。この日記のアクセス数なんてたかが知れてるので、アフィリエイトとしての効果はほとんど期待してない。効果があればそれはそれでうれしいけど。

C++の参考ページ

投稿日: Leave a comment

C++のSTLコンテナやアルゴリズムなどを調べるのに役に立ちそうなページ

lambda式のメモ

投稿日: Leave a comment

無性にC++でlambda式を使ったコードの書き方を知りたくなって、ちょっと調べて書いてみた。

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
    std::vector<int> v(10);

    int n = 0;
    std::generate(v.begin(), v.end(), [&n]()->int{return n++;});

    std::for_each(v.begin(), v.end(), [](int a){std::cout << a << std::endl;});

    return 0;
}

これは大したコードではなくて、10要素のvector<int>型の配列に0から順にインクリメントした値をセットして、配列の中身をすべて表示するだけのもの。lambda式をgenerateとfor_eachの引数の2か所で使っている。

[&n]()->int{return n++;}

1つ目のこれは、main関数内で宣言したint型の変数n(=0)を返しつつ、呼び出すごとにnをインクリメントするので、呼び出すたびに0, 1, 2, … とインクリメントされた値が返ってくるlambda式(無名関数)。

[&n]のところを[n]にすると、値渡しになって変数nの実体は変更されないので、ずっとゼロが返ってくる。と思ったら、VC++2010だとエラーが出てコンパイルできなかった。

C:\work\test>cl lambda1.cpp /EHsc
Microsoft (R) C/C++ Optimizing Compiler Version 16.00.40219.01 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

lambda1.cpp
lambda1.cpp(10) : error C3491: 'n': a by-value capture cannot be modified in a non-mutable lambda

この部分のコードをfor文で書くとこんな感じになるはず。

//std::generate(v.begin(), v.end(), [&n]()->int{return n++;});
for (int i = 0; i < v.size(); i++) {
    v[i] = n++;
}
 [](int a){std::cout << a << std::endl;}

2つめは引数を取るタイプのlambda式。整数を受け取って、iostreamのcoutに流し込んで改行するだけ。

これもfor文で書くとこんな感じになるはず。

//std::for_each(v.begin(), v.end(), [](int a){std::cout << a << std::endl;});
for (int i = 0; i < v.size(); i++) {
    std::cout << a << std::endl;
}

[]と()の違いというか意味を真面目に調べてなかったので全く理解できてなかったけど、書いてみると思ったより簡単だった。

ここで書いたコードだとfor文でイテレータを回す方がコードとしては見やすいようにも思うけど、複雑なコンテナでソートなどの処理するような場合は、lambda式で比較条件式を書いた方がすっきりしそうなので、STLをバリバリ使ってコードを書く場合は役に立ちそう。

参考までに実行結果

C:\work\test>cl lambda1.cpp /EHsc
Microsoft (R) C/C++ Optimizing Compiler Version 16.00.40219.01 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

lambda1.cpp
Microsoft (R) Incremental Linker Version 10.00.40219.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:lambda1.exe
lambda1.obj

C:\work\test>lambda1
0
1
2
3
4
5
6
7
8
9

SO-01Cの時刻ずれ

投稿日: Leave a comment

普段使っているLT18i化したSO-01Cの時計が数分ずれることに最近気が付いた。

通常なら、3Gのネットワークから時刻情報をもらってほぼ正確な時刻を刻んでくれるはずなんだけど、MVNOのデータ専用SIMを挿しているからなのか、WiFi接続率が高いからなのか、よくわからないが、同じDOCOMOネットワークにつながっているP-06Cと数分の時間がずれていることがある。

Android設定の「日付と時刻を自動設定」のチェックを入れなおしても変わらず、フライトモードに入れて3Gにアタッチしなおすと時刻ずれがなおる。どうやら最初につなぎに行くときだけ時刻補正がされているっぽい。

そういえば、データ専用SIMで発生するセルスタンバイモードを回避する細工を入れてCSのアタッチに失敗しても無視するようにしているのだが、それが悪さしているのかもという気がしてきた。

しょうがないので、NTPクライアントでも入れようと思ったら、定期的に時刻を補正するアプリは見つかったけど、ntpdみたいにslew modeでじわじわ合わせてくれるいい感じのアプリが見つからなかった。電池の消費量的にそういう挙動をさせるのはさすがに厳しいのかな。

バラ苗を注文

投稿日: Leave a comment

今年もバラの苗を注文してみた。3株注文して、全部ハイブリッドティー(HT)、裸苗。

  • クィーンエリザベス (ピンク)
  • パパメイアン (赤)
  • 花音[かのん] (オレンジ)

裸苗なので、冬に入って早々に届く予定。12月頭かな。

それまでに穴を掘って植える場所を確保しておかねば。

副鼻腔炎

投稿日: Leave a comment

先週、鼻の奥が痛くなって耳鼻科に行ったら副鼻腔炎の疑いありで、1週間薬を飲んで様子見。

で、昨日改めて耳鼻科に行ってレントゲンを撮ったらやっぱり副鼻腔炎と言われた。

アレルギー性鼻炎からくるものだろうといわれただけど、風邪をこじらせて細菌が副鼻腔に入っちゃったような気もする。アレルギーからか風邪からかはここを見ると慢性か急性かの違いになるらしい。

どちらにせよ、しばらく耳鼻科通いをしなければいけなくなった。耳鼻科に通うのは20年以上ぶりかな。この年になって耳鼻科に通うようになるとは。

日記のタイトル周りの表示を変更

投稿日: Leave a comment

前々から日記のタイトル行の先頭に日めくりカレンダー的なのをつけたいと思っていて、頑張ってテーマのphpをいじってみた。いじったのは、content.phpとstyle.css。

で、できたのがこれ↓

ついでに、”Leave a reply”のリンクも投稿日時の後ろにコンパクトに入れてみた。

テーマをTwenty Twelveに変更

投稿日: Leave a comment

WordPress 3.5beta1のアナウンスの下の方にTwenty Twelveのリリースについて触れられていたので、インストールしてテーマを変更してみた。

インストール

ダッシュボードの外観→テーマを開き、「テーマのインストール」タブを開く。

twentytwelveで検索すると出てくるのでインストールを押す。

子テーマの作成

そのまま、このテーマを適用してもいいけど、いじるときに元のファイルを触りたくないので、子テーマを作って変更するところだけファイルを用意するようにする。

ウェブからはできないので、サーバにログイン

%cd www/snapshots/wp-content/themes/
%mkdir snapshots2012
%vi style.css
%vi functions.php

style.cssには親テーマを定義するコメント行を書く。

/*
Theme Name:     Snapshots 2012
Description:    Child theme for the Twenty Twelve theme
Author:         s.ueda
Author URI:     http://aperire.sakura.ne.jp/snapshots/
Template:       twentytwelve
Version:        1.0.0
*/

functions.phpには、どのスタイルシートを呼ぶのかを書く。

<?php
// load stylesheet
if ( !is_admin() ) {
    wp_enqueue_style(
        'twentytwelve-style',
        get_template_directory_uri() . '/style.css',
        array(),
        date('YmdHis', filemtime(get_template_directory() . '/style.css'))
        );
    wp_enqueue_style(
        'snapshots2012-style',
        get_stylesheet_uri(),
        array('twentytwelve-style'),
        date('YmdHis', filemtime(get_stylesheet_directory() . '/style.css'))
        );
}

少しカスタマイズ

そのままだと記事のタイトル付近に日付が出なくて少しさみしいのでcontent.phpをいじって日時を出すようにしてみた。

%diff -uN twentytwelve/content.php snapshots2012/content.php
--- twentytwelve/content.php    2012-10-16 21:11:10.000000000 +0900
+++ snapshots2012/content.php   2012-10-16 22:48:41.000000000 +0900
@@ -5,6 +5,8 @@
  * @package WordPress
  * @subpackage Twenty_Twelve
  * @since Twenty Twelve 1.0
+ *
+ * modified by s.ueda
  */
 ?>

@@ -18,10 +20,12 @@
                        <?php the_post_thumbnail(); ?>
                        <?php if ( is_single() ) : ?>
                        <h1 class="entry-title"<>?php the_title(); ?></h1>
+                       <p><?php the_time('Y/m/d H:i') ?></p>
                        <?php else : ?>
                        <h1 class="entry-title">
                                <a href="<?php the_permalink(); ?>" title="<?php echo esc_attr( sprintf( __( 'Permalink to %s', 'twentytwelve' ), the_title_attribute( 'echo=0' ) ) ); ?>" rel="bookmark"><?php the_title(); ?></a>
                        </h1>
+                       <p><?php the_time('Y/m/d H:i') ?></p>
                        <?php endif; // is_single() ?>
                        <?php if ( comments_open() ) : ?>
                                <div class="comments-link">

 その他

ついでにTwitterのウィジェットを変更して、ヘッダーのメニュー構成も少し変えてみた。