ショートカットにパスを通してプログラム起動までを短縮する方法

ショートカットをまとめたフォルダを作成しそこにパスを通すと Win+R のファイル名実行で起動可能

マウス移動よりもWindowsキー→検索よりも効率的!

 
例えば、コピーしてきたエクセルのショートカットを "excel" と名称変更すると...
 
excel<Enter>
Excelが起動
 
 
_人人人人人人人_
> Excelが起動 <
 ̄Y^Y^Y^Y^Y^Y ̄

 

 

参考
よくつかう ショートカット「ファイル名を指定して実行」編 - うれしいブログ

 

Redmine バグ修正チケットのテンプレート

バグチケットの流れ

  1. 発見者がチケット発行
  2. チケット担当者はバグ修正開始時にステータスを進行中に変更
  3. チケット担当者はバグ修正後にステータスを解決、進捗率を90%に変更
    (この部分Gitを使って自動変更されるように設定している)
  4. 担当者を発見者に変更
    (このときにどのような修正を行ったかを簡易的に記述)
  5. 発見者はバグの修正を確認して、ステータスを終了、進捗率を100%に変更。

 

1. と 4.の場合にチケットに記述するテンプレートを作成している

1. バグ発見時のチケット説明のテンプレート

|_. 項目        |_. 内容        |
|【バージョン】 |1.01.0000      |
|【現象】       |例:表示バグ|
|【再現性】     | 有 or 無      |
|【データ】     |(画像など必要な場所)|

【詳細/手順】

# (#は段落番号自動追加)この文を消去して手順追加
#
# .

 上記のように入力すると以下の表示になるf:id:sechs:20140117110206p:plain

 

4. バグ修正時のテンプレ

【解決方法】修正/延期/仕様/非再現/修正済み
【原因】 
【対策】

以下の表示

f:id:sechs:20140117110517p:plain

4はGitのコミットコメントで良さそう。
(面倒くさいともっぱら評判)

コミットコメントは1行目は英語で、3行目からは日本語で書くのがよい?

 

 

 

.Net Frameworkの難読化ツール Dotfuscator CE 5 をコマンドラインで実行

Visual Studio 2010 の中に標準添付されているDotfuscator Community Edition 5.0は有料版じゃなくてもコマンドラインで難読化ファイルを作成できる。

しかし、ユーザー登録が必要。
その後にダウンロードできるアップデートを適用すると dotfuscatorCLI.exe が新しく作成されるので、これを利用する。

 

 参考(・・・というかまんまこれ)
How to use PreEmptive Dotfuscator in Visual Studio Setup project to protect your code

 

PreEmptive のサイトにログインした後、 Download  タブの中へ行く、
To run Dotfuscator CE5 (2010) from the command line, install version 5.0.2601 を見つければ後はDLしてインストールするのみ。

f:id:sechs:20131217153825p:plain

 

その後、Visual Studio 2010 のプロジェクトの ビルド後に実行するコマンドライン
以下を入れればOK。

"C:\Program Files (x86)\Microsoft Visual Studio 10.0\PreEmptive Solutions\Dotfuscator Community Edition\dotfuscatorCLI.exe" /in:$(TargetFileName) 
copy /y "$(TargetDir)Dotfuscated\$(TargetFileName)" "$(TargetDir)$(TargetFileName)"

 この部分はOSが64bit か 32bitか判別してProgram files の場所を適切に変更するバッチファイルの方が良さそう。

 

Vista なので Visual Studio 2012以降は残念ながら調べきれず。
7にする許可が欲しい...

 

追記 2013/12/18 16:39

バッチファイルとビルド後のコマンドラインを作成したので記述

 

.xmlで、Dotfuscatorの設定データを読みだして変換実行している。

Release_Obfuscation.bat

@echo off

 

if exist "%systemroot%\sysnative\" (

  echo 32bit on 64bit

  set ProgramFilesRoot=%ProgramFiles(x86)%

) else if exist "%systemroot%\syswow64\" (

  echo 64bit on 64bit

  set ProgramFilesRoot=%ProgramFiles(x86)%

) else (

  echo 32bit on 32bit

  set ProgramFilesRoot=%ProgramFiles%

)

 

set DOTFUSCATOR_CLI=%ProgramFilesRoot%\Microsoft Visual Studio 10.0\PreEmptive Solutions\Dotfuscator Community Edition\dotfuscatorCLI.exe

 

set dotfuscatorXML=%1

 

rem --- exec ---

 

echo "%DOTFUSCATOR_CLI%" %dotfuscatorXML%

 

"%DOTFUSCATOR_CLI%" %dotfuscatorXML%

 

.

ビルド後のコマンドライン Releaseでのみ実行

if $(ConfigurationName) == Release (

  call $(SolutionDir)Release_Obfuscation.bat "$(SolutionDir)Dotfuscator.xml"

  move /y $(TargetDir)Dotfuscated\$(TargetFileName) $(TargetDir)$(TargetFileName)

)

 

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

家では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