2013年3月31日日曜日

【Windows7】 コマンドプロンプトで関連付け制御

Windows7のファイルとアプリケーションの関連づけをコマンドプロンプトで行う方法

コマンドプロンプトで作業していて
> hoge.py foo bar
のようなことをやりたかった。
hoge.pyをpython.exeに関連付けつつ、hoge.pyに引数foo, barも渡したい。

エクスプローラなどからGUIで関連付けしちゃうと、hoge.pyをpython.exeに関連付けることはできるが、引数が渡らなくなっちゃう。

そこで、コマンドプロンプトからassoc, ftypeコマンドを使って関連付けを設定する。
設定変更は、管理者権限のあるコマンドプロンプトから実行する。

assoc

拡張子とファイルタイプを紐付ける

設定確認
> assoc .py
.py=Python.File

設定変更
> assoc .py=Python.File

ftype

ファイルタイプとアプリケーションを紐付ける

設定確認
> ftype Python.File
Python.File="C:\Python27\python.exe" "%1" %*

設定変更
> ftype Python.File="C:\Python27\python.exe" "%1" %*


GUIから設定した関連付けが残っているとそちらが優先されるようなので、削除しておこう。(以下リンク参照)

参考
[Windows] Pythonの関連付け設定
Windows 7(Vista)でファイルの関連付け情報を削除(解除)する

2013年3月18日月曜日

C-Helperの特長と使い方

先日リリースしたC-Helper(Uchan Note: C-Helperリリース 参照)の特長と使い方を説明します。

C-Helperの特長

C-Helperは、簡単な操作でC言語のソースコードを検査します。検査項目とサンプルコード、C-Helperの出力メッセージは以下のとおりです。
※出力メッセージは開発版であり、リリース版とは異なる場合があります。
  • char型変数への文字列代入
    char c;
    c = "+";
    
    メッセージ「char型変数に文字列を格納できません。 char型配列を検討してください。」
  • 警告を抑え込むキャスト
    printf("%s", (char *)getchar());
    
    メッセージ「式 getchar() が1つの文字を表しているなら %c を使えば表示可能です。」
  • 文字と文字列の比較
    int word;
    if (word == "+") puts("word is +");
    
    メッセージ「文字と文字列は比較できません。(1文字を表すには"ではなく'で囲みます。)」
  • ヘッダファイルでの実体定義
    test.h
    int g_x;
    
    test.c
    #include "test.h"
    
    メッセージ「ヘッダファイルには実体を定義すべきではありません。(extern宣言を用いてください。 (extern int g_x;) )」
  • 識別子の重複
    int x;
    void f(void) {
        int x;
    }
    
    メッセージ「識別子xが重複しています。」
  • インデントの乱れ
    void f(void) {
        int i;
        for (i=0; i<3; i++) {
        printf("%d\n", i);
        }
    }
    
    メッセージ「インデントが乱れています。スペース 8 個分インデントすべきです。」
  • メモリリーク
    void f(int flag) {
        char *p;
        p = malloc(123);
        if (flag) free(p);
    }
    
    メッセージ「メモリリークが発生する可能性があります。」
  • printfのパラメタ間違い
    printf("%d", 3.14);
    
    メッセージ「引数は!浮動小数点数型ですが %d は!符号付き整数型を期待しています。(浮動小数点数の表示には %f, %e, %g などが使えます。)」
  • returnの記述漏れ
    int f(void) {
        if (0) return 1;
    }
    
    メッセージ「return文がありません。」
  • scanfへの値渡し
    int x;
    scanf("%d", x);
    
    メッセージ「ポインタを渡す必要があります。(&を付けて変数へのポインタを取得します。(&x))」
  • 構造体宣言のセミコロン忘れ
    struct Foo {
        int bar;
    }
    int main(void) {
        return 0;
    }
    
    メッセージ「構造体の宣言にはセミコロンが必要です。」
  • 関数定義の余分なセミコロン
    int main(void);
    {
        return 0;
    }
    
    メッセージ「関数定義にはセミコロン ; を付けません。」
  • 動的に確保した配列に対するsizeof
    char *p = malloc(128);
    printf("%u", sizeof(p));
    
    メッセージ1「sizeof(p) は 128 ではなく 4 を返します (仮定6)。それは本当に意図したことですか?」
    メッセージ2「仮定6: ポインタ変数のサイズを 4 バイトと仮定しています。」
  • 定義されていない関数名の使用
    int main(void) {
        printf("hello, world!\n");
        return 0;
    }
    
    メッセージ「printf は宣言されていない関数名です。(stdio.h を #include してください。)」


C-Helperの使い方

ソースコードを記述して、C-Helperの起動アイコンをクリックします。
起動アイコン
下図の状態で起動アイコンをクリックすると、test.cがチェックされます。(main.cはチェックされません)

最前面にあるソースコードエディタに対して動作します。
上図のように、チェックしたいソースコードを最前面に表示しておいてください。

2013年3月11日月曜日

C-Helperリリース


サイボウズ・ラボユースでしばらく製作していた、初学者向けのC言語学習支援ツール "C-Helper" が、取り敢えず形になりましたのでリリースいたします。
https://github.com/uchan-nos/c-helper/blob/master/README.md

C-Helperは

  • 初学者が書いたソースコードを検査します
  • 間違いやすい項目を検査し、警告を表示します
  • 可能ならば修正案を提示します

C-Helperの検出項目の一覧はUchan Note: C-Helperの特長と使い方を御覧ください。

興味がある方、是非使ってみてください。
これからも時々バージョンアップさせるつもりです。

Eclipseプラグインですので、C-Helperを使うにはまずEclipseのダウンロードとインストールが必要です。
上記READMEに詳しいやり方を書きましたのでご覧ください。

C-Helperを使っていただき、是非アンケートにご協力ください。
https://docs.google.com/forms/d/1bdGMk4v-gFTAPq7C6s--pkpHi-5227vU4bZO1pjZ8hQ/viewform