「英数」キーで英語入力「かな」キーで日本語入力開始に設定すると非常に捗る

家ではMac、仕事でWinなので統一したかった。

 以下の記事を見て全力で同意。

カテゴリ: MacPeople , Apple APPLE 2013年12月04日21時00分 Macの英数/かな切り替えに慣れたらWinの「半角/全角」が不便|Mac

 

でも、仕事では英語版のHHKB使っているので「ESC」で英語、「CTRL+SHIFT+SPACE」で日本語。

 

非常に便利。

時々ESC押しすぎてダイアログボックスを勝手に閉じるのが玉にキズw

 

Redmine 2.3.2 -> 2.4.1へのアップデート

Redmineのgitリポジトリが更新されていないため、

Mercurial に変更し、ほぼ最初からインストールし直した

 

以下の手順通りにインストールすると bundleでエラー発生

Redmine 2.4をCentOS 6.4にインストールする手順

 # bundle install --without development test

You cannot specify the same gem twice with different version requirements.

You specified: capybara (~> 2.1.0) and capybara (~> 2.0.0) 

意味がぜんぜんわからない・・・
色々調査していると、以前のプラグインが原因だった。
git管理しておらず面倒だったのでアップデートせずに、以下のプラグインを除去。
redmine_theme_changer
redmine_hudson

 

やっと実行可能になった

 

その後、httpd を起動時に警告発生

httpd を起動中: WARNING: The 'RailsFrameworkSpawnerIdleTime' option is obsolete.

 Please use 'PassengerMaxPreloaderIdleTime' instead.

                                                           [  OK  ]

passenger の conf ファイルを変更

# vim /etc/httpd/conf.d/passenger.conf 

以下の行を削除

RailsFrameworkSpawnerIdleTime 0

 これでようやく終了
疲れました。

intの桁数計算の処理時間

intの桁数を求める方法は色々あれど、
どれが一番高速なのかずっと気になっていたため計算してみた。

 

3つの手法で計算

  1. log10の対数を使う
  2. 10での除算回数
  3. charへ変換してstrlen

 

結果

500万回ループして求めた測定結果

2<1<<3 の順で高速

  • 1はなにげに高速。2の2.7倍くらいの処理時間
  • 2が一番高速
  • 3は論外、面倒な上遅い。2の15倍位。

 

結論

最終的に簡潔に記述できるlog10で良さそう。一番良い結果の2.744倍程度だが一番簡潔。
本当に高速を求めることはそうそうないと思われる。(1回の変換時間は約70nsec)

組み込みなどで制限がある場合、math.hをinclude することでサイズ肥大化が気になるときに10除算回数を選択する感じ 

 

log10で計算するともっと時間がかかると思ってたので以外だった。

10で除算するときに、500万回int定義する時間が掛かったのもあるだろうけど。 

 

プログラム

#include <stdio.h>

#include <math.h>

#include <time.h>

#include <string.h>

#include <stdlib.h>

 

#define LOOP_NUM 5000000

 

int  digit_calc_log10(int);

int  digit_calc_division10(int);

int  digit_calc_strlen(int);

void function_loop(int (*p_function)(int));

 

int main(void){

    // 処理 Log10 ()

    function_loop(digit_calc_log10);

 

    // 処理 /10

    function_loop(digit_calc_division10);

 

    // 処理 strlen

    function_loop(digit_calc_strlen);

 

    return 0;

}

 

// 桁数をLog10で計算

int digit_calc_log10(int value){

    return log10(value) + 1;

}

 

// 桁数を10の除算で計算

int digit_calc_division10(int value){

    int digit = 0;

 

    while(value) {

        value /= 10;

        digit++;

    }

 

    return digit;

}

 

// 桁数をcharの長さで計算

int digit_calc_strlen(int value){

    char c_value[100];

    sprintf(c_value, "%d", value);

    return strlen(c_value);

}

 

// LOOP_NUM回p_function関数を繰り返す

void function_loop(int (*p_function)(int)) {

    clock_t start, end;

 

    start = clock();

    int digit;

    int value;

    for(value=1; value<LOOP_NUM; value++ ){

        digit = p_function(value);

//      printf("%d:%d\n", value, digit);

    }

    end = clock();

 

    printf( "処理時間:%d[ms]\n", end - start );

}

 

 実行結果

処理時間:343[ms]

処理時間:125[ms]

処理時間:1684[ms]

 

環境

コンパイラ:Cygwin gcc

CPU: Core 2 Quad Q9650 3.00GHz

モードレスなメッセージボックス表示

 

モーダルダイアログ : OKボタンを押す事により次の処理を行うダイアログ

モードレスダイアログ : OKボタンを押さずとも裏で処理が動いているダイアログ

 

これをメッセージボックスに当てはめると以下になる。

モーダルはそのままなので簡単

 MessageBox.show("test");

 

モードレスはスレッドを作成する必要あり

    using System.Threading;

new Thread(new ThreadStart(delegate

    {

      MessageBox.Show("test");

    })).Start();

参考

Create a Modeless Messagebox - stackoverflow

 

追記:

  (.NET Framework 4以降ならTaskを使う。ついでにラムダ式も使用)

    using System.Threading.Tasks;
Task.Factory.StartNew(() => 
MessageBox.Show("test")
);

ThreadとTaskの違いは以下を参照

[雑記] スレッド プールとタスク - ++C++; // 未確認飛行C

 

一行の中に数式などの上付き文字を表示したいとき

機種依存文字の立方メートル㎥は、フォントに存在しない場合1文字だけ汚い場合がある。(メイリオだと顕著に現れる)

この場合は以下のようにする

 

解説

上付き文字のUnicodeが存在するため、それを利用すると辛うじて綺麗に表示された。

機種依存文字のように1文字全体が違うフォントではなく、3のみが違うフォントになるため辛うじて許せるレベル?

  

比較

㎥   m³

 

参考

■[iPhoneプログラミング]上付き文字、下付き文字を使う

http://d.hatena.ne.jp/nakamura001/20100620

 

 

 

BATファイルでパスワード付きのWindows共有フォルダにアクセスする方法

自動化厨のための忘備録

 

共有フォルダを利用する流れ

  1. ユーザー名とパスワードを使い共有フォルダへ接続
  2. 共有フォルダで削除やコピーなどの作業
  3. 共有フォルダの切断

 

対応コマンド(括弧内は任意)

  1. net use (共有フォルダへのパス) (PASSWORD) /user:(USERNAME) /Y
    /Y : 確認なしで接続
  2. (サーバー上で適当に処理 hogehoge)
  3. net use (共有フォルダの場所) /delete

 

記述例(パス付き共有サーバーに日時のディレクトリを作成)

@echo off

setlocal

 

rem ------ 定義 ------

set SERVER_PATH=\\test_server

set USERNAME=admin

set PASSWORD=admin_pass

 

rem 日時取得(時間が1桁の場合は空白になるため0で置換)

set time2=%time: =0%

set yyyyMMdd_hhmm=%date:~0,4%%date:~5,2%%date:~8,2%_%time2:~0,2%%time2:~3,2%

set DIRNAME=%yyyyMMdd_hhmm%

 

rem ------ 処理 ------

rem 1. 接続

net use %SERVER_PATH% %PASSWORD% /user:%USERNAME% /Y

rem 2. 処理

mkdir %SERVER_PATH%\%DIRNAME%

rem 3. 切断

net use %SERVER_PATH% /delete 

 

簡単処理ならこれでOK

 

もし、GitとかJenkinsを利用しているならばBATファイル実行に失敗する不可解な現象があることに注意(このWindowsのバグで実装が2日は遅れた)

改行コード LF で日本語を含むバッチファイルの動作がおかしい件

 Windows 7ですら発生したので、根は深そう。
解決策として全部半角英数字で記述。