MW211 EXIT

devlog
Windowsログ/スリープ時のログ
2014年06月20日
この前、シャットダウン時のログを調べたが、スリープ時はどうか。

こちらはこんな感じだ。
┌──────────────────────────────────────┐
│システムがスリープ状態になります。                                          │
│スリープの理由: アプリケーション API                                        │
└──────────────────────────────────────┘
手動でも「アプリケーション API」扱いらしい。
分類:Windows
Windows/リモートデスクトップのプリンタエラー
2014年06月19日
リモートデスクトップで接続すると、接続先のイベントビューアに
以下のエラーが記録される場合がある。
┌──────────────────────────────────────┐
│プリンター ■■■■ に必要なドライバー ■■■■ が認識されません。          │
│管理者に問い合わせてドライバーをインストールしてから、                      │
│もう一度ログインしてください。                                              │
└──────────────────────────────────────┘

これは、自身のローカルプリンタが接続先にマッピングされるかららしい。
で、そのプリンタがないから、エラーと。。。

対策としては、以下ウインドウにて、「■プリンタ」のチェックをはずすとよい。
┌──────────────────────────────────────┐
│リモートデスクトップ接続                                                    │
├──────────────────────────────────────┤
│┌─┌─┌────────┐─┐─┐─┐                                    │
││  │  │ローカルリソース│  │  │  │                                    │
│┌───┘                └───────────────────────┐│
││┌ローカルデバイスとリソース─────────────────────┐││
│││リモートセッションで使用するデバイスとリソースを選択してください    │││
│││  □プリンタ                                                        │││
││└──────────────────────────────────┘││
│└────────────────────────────────────┘│
└──────────────────────────────────────┘

もしくは、rdpファイルを直接エディタで開いて以下を変更するとよい。
┌──────────────────────────────────────┐
│redirectprinters:i:1                                                        │
└──────────────────────────────────────┘
  ↓                                                                            
┌──────────────────────────────────────┐
│redirectprinters:i:0                                                        │
└──────────────────────────────────────┘
分類:Windows
C/do-while中のcontinue文
2014年06月18日
continue文は先頭に戻ると考えがちだが…。
┌──────────┐
│do {               ←─┐
│    continue;      ──┘
│} while (条件式);   │
└──────────┘

実は、末尾にジャンプして先頭に戻っているのであった。
┌──────────┐
│do {               ←──┐
│    continue;      ──┐│
│} while (条件式);  ←─┘┘
└──────────┘

なので、以下みたいな読み飛ばし条件でcontineする処理を、
普通のwhile文から流用しても、永久ループになるということではないのであった。
┌──────────────────────────────────────┐
│while (ポインタ = 次読込関数()) {                                           │
│    if (読み飛ばし条件) {                                                   │
│        continue;                                                           │
│    }                                                                       │
│}                                                                           │
├──────────────────────────────────────┤
│do {                                                                        │
│    if (読み飛ばし条件) {                                                   │
│        continue;                                                           │
│    }                                                                       │
│} while (ポインタ = 次読込関数());                                          │
└──────────────────────────────────────┘
分類:C/C++
C/ポインタ定義の「*」の位置
2014年06月17日
ポインタ定義において、「*」の位置が以下の二種類のパターンがある。
┌──────────────────────────────────────┐
│char    *ptr  = NULL;                                                       │
├──────────────────────────────────────┤
│char*   ptr   = NULL;                                                       │
└──────────────────────────────────────┘
果たして、どっちがいいのであろうか?

後者を推奨する。根拠は以下の通り。

(1) 「const」との関係から
┌──────────────────────────────────────┐
│char* const   ptr   = NULL;                                                 │
└──────────────────────────────────────┘
  「ptr」が指す値を変更できないように縛るには「const char* ptr」のような
  書き方となるが、「ptr」のアドレスを変更できないように縛る場合、
  「char* const ptr」のように「const」が「*」の後ろに来る。
  これが「char *ptr」の場合だと、説明できない。

(2) 初期値の代入が意味するところから
  「*ptr = NULL」では「ptr」の指す先が「NULL」になるが
  「ptr = NULL」だと、「ptr」のアドレスが「NULL」になる。
  定義時の意味するところは後者なので「char*」+「ptr = NULL」の方が
  わかりやすい。

(3) キャスト時の記述
  「(char *)ptr」だと「(char)」+「*ptr」的な錯覚を与える。
  #ちと強引か。。。

なお、前者の場合、以下のような書き方ができるという利点があるようだが…。
┌──────────────────────────────────────┐
│char    *ptr1, *ptr2;                                                       │
└──────────────────────────────────────┘
分類:C/C++
C/文字列結合
2014年06月16日
    ┌─┬─┬─┬─┐
①=│A │B │\0│塵│
    └─┴─┴─┴─┘
    ┌─┬─┬─┬─┐
②=│X │Y │\0│芥│
    └─┴─┴─┴─┘
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
strcpy(①, ②); 
    ┌─┬─┬─┬─┐
①=│X │Y │\0│塵│
    └─┴─┴─┴─┘
      ↑  ↑  ↑
    ┌─┬─┬─┬─┐
②=│X │Y │\0│芥│  ※結合ではなく上書
    └─┴─┴─┴─┘
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
strcat(①, ②); 
    ┌───────┐
    ┌─┬─┌─┬─┬─┐
①=│A │B │X │Y │\0│  ※この場合、規定領域をはみ出してしまった
    └─┴─└─┴─┴─┘
              ↑  ↑  ↑
            ┌─┬─┬─┬─┐
②=        │X │Y │\0│芥│
            └─┴─┴─┴─┘
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
strncat(①, ②, 2); 
    ┌───────┐
    ┌─┬─┌─┬─┐
①=│A │B │X │Y │  ※この場合、規定領域をはみ出さないが、終端がない
    └─┴─└─┴─┘
              ↑  ↑
            ┌─┬─┬─┬─┐
②=        │X │Y │\0│芥│
            └─┴─┴─┴─┘
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
自製strncat2(①, ②, 4); 
                ┌─┐
                │\0│  ※最後に強制的に終端を上書する
                └─┘
    ┌──────↓┐
    ┌─┬─┌─┬─┐
①=│A │B │X │\0│
    └─┴─└─┴─┘
              ↑  ↑
            ┌─┬─┬─┬─┐
②=        │X │Y │\0│芥│
            └─┴─┴─┴─┘
┌──────────────────────────────────────┐
│size_t 自製strncat2(char* str1, char* str2, size_t size)                    │
│{                                                                           │
│    if ((strlen(str1) + strlen(str2)) < size) {                             │
│        strcat(str1, str2);                                                 │
│    } else {                                                                │
│        strncat(str1, str2, size - strlen(str1));                           │
│        str1[(size - 1)] = 0;                                               │
│    }                                                                       │
│    return strlen(str1);                                                    │
│}                                                                           │
└──────────────────────────────────────┘
分類:C/C++
C/C99定義の基本型代替型一覧
2014年06月15日
┌─────┬────────────────────────────────┐
│char_t    │○char                                                          │
├─────┼────────────────────────────────┤
│int8_t    │○signed char                                                   │
├─────┼────────────────────────────────┤
│uint8_t   │○unsigned char                                                 │
├─────┼────────────────────────────────┤
│int16_t   │○short               (signed short)                            │
│          │△int                 (signed int)                              │
├─────┼────────────────────────────────┤
│uint16_t  │○unsigned short                                                │
│          │△unsigned int                                                  │
├─────┼────────────────────────────────┤
│int32_t   │○long                (signed long)                             │
│          │○int                 (signed int)                              │
├─────┼────────────────────────────────┤
│uint32_t  │○unsigned long                                                 │
│          │○unsigned int                                                  │
├─────┼────────────────────────────────┤
│int64_t   │○long long           (signed long long)                        │
│          │△long                (signed long)                             │
├─────┼────────────────────────────────┤
│uint64_t  │○unsigned long long                                            │
│          │△unsigned long                                                 │
├─────┼────────────────────────────────┤
│float32_t │○float                                                         │
├─────┼────────────────────────────────┤
│float64_t │○double                                                        │
└─────┴────────────────────────────────┘
分類:C/C++
ExcelVBA/選択した右隣を操作
2014年06月14日
┌──────────────────────────────────────┐
│Sub 選択した右隣にABCを入力するマクロⅠ()                                   │
│    Dim x As Long, y As Long                                                │
│    For x = 1 To Selection.Columns.count                                    │
│        For y = 1 To Selection.Rows.count                                   │
│            Selection.Cells(y, x + 1).Value = "ABC"                         │
│        Next y                                                              │
│    Next x                                                                  │
│End Sub                                                                     │
├──────────────────────────────────────┤
│Sub 選択した右隣にABCを入力するマクロⅡ()                                   │
│    Dim r As Range                                                          │
│    For Each r In Selection                                                 │
│        r.Offset(0, 1).Value = "ABC"                                        │
│    Next r                                                                  │
│End Sub                                                                     │
└──────────────────────────────────────┘
選択した右隣を操作するには上記のような二つの方法がある。

なお、いずれも先頭に以下を付加しておけば上書の心配はない。
┌──────────────────────────────────────┐
│    If Selection.Columns.count > 1 Then                                     │
│        MsgBox "一列のみ選択してください"                                   │
│        Exit Sub                                                            │
│    End If                                                                  │
└──────────────────────────────────────┘
分類:ExcelVBA
Windows/ユーザフォルダ
2014年06月10日
以下のユーザフォルダがある(Vista以降)。
(1) C:\Users\ユーザ名\AppData\Roaming    …ユーザに依存する設定ファイル
(2) C:\Users\ユーザ名\AppData\Local      …PCに依存する設定ファイル
(3) C:\Users\ユーザ名\AppData\LocalLow   …PCに依存する設定ファイル(制限あり)
IEなどのように外部から実行される可能性のあるものは(3)ということになる。
分類:Windows
設計/ソフトウェア開発手法
2014年06月09日
代表的なソフトウェア開発手法をまとめてみた。

【ソフトウェア開発手法】
  ウォーターフォール型                        …  管理型一方通行開発
  反復型
    プロトタイプ型                            …  管理型先出反復開発
    スパイラル型                              …  管理型反復開発
    アジャイルソフトウェア開発(バザール方式)  …  自由型反復開発
      エクストリーム・プログラミング(XP)

【プログラミング手法】
  構造化プログラミング
  オブジェクト指向プログラミング
分類:設計
PostgreSQL/psql実行時のパスワード登録
2014年06月08日
バッチ上で以下のような感じで、「pgpass.conf」に登録すればよい。
┌──────────────────────────────────────┐
│echo localhost:5432:*:postgres:パスワード>"%APPDATA%\postgresql\pgpass.conf"│
└──────────────────────────────────────┘
環境変数参照のsetコマンドで「APPDATA」を確認すると、
以下のようなパスとなっている。
┌──────────────────────────────────────┐
│APPDATA=C:\Users\ユーザ名\AppData\Roaming                                   │
└──────────────────────────────────────┘
分類:PostgreSQL
前へ 1 2 3 次へ