MW211 EXIT

devlog
Linux/二重圧縮(zip)
2013年09月14日
「tar」コマンドを二回連続で実行すると上書されたが、「zip」コマンドの場合は?

まず一回目。
┌──────────────────────────────────────┐
│$ zip z.zip a.txt                                                           │
│  adding: a.txt (deflated ??%)                                              │
└──────────────────────────────────────┘
そして二回目。
┌──────────────────────────────────────┐
│$ zip z.zip b.txt                                                           │
│  adding: b.txt (deflated ??%)                                              │
└──────────────────────────────────────┘

さて、結果は?解凍してみよう。
┌──────────────────────────────────────┐
│$ unzip z.zip                                                               │
│Archive:  z.zip                                                             │
│  inflating: a.txt                                                          │
│  inflating: b.txt                                                          │
└──────────────────────────────────────┘
なんとこちらは追加になる。

ちなみに圧縮するファイルの中身(「a.txt」など)が同名の場合には、
上書されるようだ。
分類:Linuxシェル
Linux/二重圧縮(tar)
2013年09月13日
「tar」を二回連続して実行した場合。

まず一回目。
┌──────────────────────────────────────┐
│$ tar -cf z.tar a.txt                                                       │
│$ tar -tf z.tar                                                             │
│a.txt                                                                       │
└──────────────────────────────────────┘

そして二回目。
┌──────────────────────────────────────┐
│$ tar -cf z.tar b.txt                                                       │
│$ tar -tf z.tar                                                             │
│b.txt                                                                       │
└──────────────────────────────────────┘
上書されてしまう。

上書されて困る場合には「--backup=numbered」を付けると、世代管理しつつ
バックアップしてくれる。
┌──────────────────────────────────────┐
│$ tar --backup=numbered -cf z.tar b.txt                                     │
└──────────────────────────────────────┘
この場合だと、「z.tar.~1~」といった退避ファイルができる。
世代管理が不要なら「--backup」だけでもバックアップされる。


上書自体をエラーではじく方法は…?
わからない。事前に「ls」とかで確認して分岐か?
オプションとかあればいいんだが、とにかく既定は強制上書のようだ。
分類:Linuxシェル
C言語/memcpy()の注意点
2013年09月12日
┌──────────────────────────────────────┐
│memcpy(コピー先のアドレス, コピー元のアドレス, サイズ);                     │
└──────────────────────────────────────┘
「memcpy()」は、コピー先をコピー元で潰すイメージがあるので、
コピー先のサイズを超えてコピーしないか常に注意しがちだ。
(もちろん、それをやってしまうと例外が発生する)
ということで、「コピー先のサイズ≧サイズ」は常にチェックするだろう。
しかし、潰されないコピー元も、関係ないところを参照することになると
こちらも例外が発生する。
「コピー元のサイズ≧サイズ」も常に意識しなければならないのだ。
これは結構盲点だ。
分類:C/C++
英訳/非推奨
2013年09月11日
┌──┬───────────────────────────────────┐
│英文│A is deprecated in favor of B.                                      │
├──┼───────────────────────────────────┤
│和訳│AはBが好んで用いられるようになったので使わないほうが良い。          │
│    │つまり、Aは非推奨なので、Bに乗り換えた方がよい。                    │
├──┼───────────────────────────────────┤
│実例│WARNING: "pear/Archive_Zip" is deprecated in favor of "pecl/zip"      │
└──┴───────────────────────────────────┘
分類:英訳
PEAR/Archive_Zipのインストールまとめ
2013年09月10日
【ネット上からインストールする場合】
┌──────────────────────────────────────┐
│C:\Program Files\PHP>pear install Archive_Zip-beta                          │
├──────────────────────────────────────┤
│WARNING: "pear/Archive_Zip" is deprecated in favor of "pecl/zip"            │
│downloading Archive_Zip-0.1.2.tgz ...                                       │
│Starting to download Archive_Zip-0.1.2.tgz (19,213 bytes)                   │
│......done: 19,213 bytes                                                    │
│install ok: channel://pear.php.net/Archive_Zip-0.1.2                        │
└──────────────────────────────────────┘
【ネット上からダウンロードする場合】
┌──────────────────────────────────────┐
│C:\Program Files\PHP>pear download Archive_Zip-beta                         │
├──────────────────────────────────────┤
│WARNING: "pear/Archive_Zip" is deprecated in favor of "pecl/zip"            │
│downloading Archive_Zip-0.1.2.tgz ...                                       │
│Starting to download Archive_Zip-0.1.2.tgz (19,213 bytes)                   │
│......done: 19,213 bytes                                                    │
│File C:\Program Files\PHP\Archive_Zip-0.1.2.tgz downloaded                  │
└──────────────────────────────────────┘
【ダウンロードしたものからインストールする場合】
┌──────────────────────────────────────┐
│C:\Program Files\PHP>pear install Archive_Zip-0.1.2.tgz                     │
├──────────────────────────────────────┤
│WARNING: "pear/Archive_Zip" is deprecated in favor of "pecl/zip"            │
│downloading Archive_Zip-0.1.2.tgz ...                                       │
│Starting to download Archive_Zip-0.1.2.tgz (19,213 bytes)                   │
│......done: 19,213 bytes                                                    │
│install ok: channel://pear.php.net/Archive_Zip-0.1.2                        │
└──────────────────────────────────────┘
【アンインストールする場合】
┌──────────────────────────────────────┐
│C:\Program Files\PHP>pear uninstall Archive_Zip-beta                        │
├──────────────────────────────────────┤
│uninstall ok: channel://pear.php.net/Archive_Zip-0.1.2                      │
└──────────────────────────────────────┘
【インストール状況を確認する場合】
┌──────────────────────────────────────┐
│C:\Program Files\PHP>pear list                                              │
├──────────────────────────────────────┤
│INSTALLED PACKAGES, CHANNEL PEAR.PHP.NET:                                   │
│=========================================                                   │
│PACKAGE          VERSION STATE                                              │
│Archive_Zip      0.1.2   beta                                               │
└──────────────────────────────────────┘
分類:PEAR
正規表現/後方最短一致
2013年09月09日
例えばあるURLの末尾の階層だけを除外したい場合の正規表現による置換を考えた。
つまり「http://aaa/bbb」を「http://aaa」にする置換だ。

まず「/\.*$」が思いつくが、これは最長一致検索となるので
「//aaa/bbb」が該当してしまい(結果が「http:」となり)うまくいかない。

最短一致検索は「?」を使う方法があるが、これは前方にしか使えないらしく
「/\.*?$」だと「//aaa/bbb」が該当してしまう

ということで試行錯誤した結果こんな感じとなることがわかった。
┌──────────────────────────────────────┐
│preg_replace('/\/[^\/]*$/', '', 'http://aaa/bbb');                          │
└──────────────────────────────────────┘

末尾に「/」がついている場合もあるので、この場合はこう。
┌──────────────────────────────────────┐
│preg_replace('/\/[^\/]*\/$/', '', 'http://aaa/bbb/');                       │
└──────────────────────────────────────┘

両方に対応できるようにまとめるとこう。
┌──────────────────────────────────────┐
│preg_replace('/(\/[^\/]*$|\/[^\/]*\/$)/', '', 'http://aaa/bbb/');           │
└──────────────────────────────────────┘

もっとスマートにまとめればこうだ。
┌──────────────────────────────────────┐
│preg_replace('/\/[^\/]*\/?$/', '', 'http://aaa/bbb/');                      │
└──────────────────────────────────────┘

いずれも「http://aaa」になる。

  ┌───┬────────────────────────────────┐
  │置換前│\/[^\/]*\/?$                                                    │
  ├───┼────────────────────────────────┤
  │置換後│                                                          (なし)│
  └───┴────────────────────────────────┘
分類:正規表現
PHP/isset()を複数判定する場合
2013年09月08日
┌──────────────────────────────────────┐
│if ((isset($_POST['a'])) && (isset($_POST['b']))) {                         │
└──────────────────────────────────────┘

「isset()」を複数判定する場合は、「&&」で繋げるのではなく、
第二引数以降に追加していこう。
┌──────────────────────────────────────┐
│if (isset($_POST['a'], $_POST['b'])) {                                      │
└──────────────────────────────────────┘

ま、好き好きですが。
分類:PHP
Apache/「501 Not Implemented」エラー
2013年09月07日
「GET、POST、PUT、DELETE、CONNECT、HEAD、TRACE、PATCH、OPTIONS」以外の
メソッドを実行した場合。
もしくは、サーバ側にそれらのメソッドが実装されていない場合。
#大文字と小文字は区別される(小文字はエラーとなる)ので注意
分類:Apache
JavaScript/比較
2013年09月06日
┌───┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
│      │true│false    1│   0│  -1│'1' │'0' │'-1' '文字' ''  │null│[]  │{}  │NaN │undefined
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│true  │ ○ │ × │ △ │ × │ × │ △ │ × │ × │ × │ × │ × │ × │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│false │ × │ ○ │ × │ △ │ × │ × │ △ │ × │ × │ △ │ × │ △ │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│     1│ △ │ × │ ○ │ × │ × │ △ │ × │ × │ × │ × │ × │ × │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│     0│ × │ △ │ × │ ○ │ × │ × │ △ │ × │ × │ △ │ × │ △ │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│    -1│ × │ × │ × │ × │ ○ │ △ │ × │ △ │ × │ × │ × │ × │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│'1'   │ △ │ × │ △ │ × │ △ │ ○ │ × │ △ │ × │ × │ × │ × │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│'0'   │ × │ △ │ × │ △ │ × │ × │ ○ │ × │ × │ × │ × │ × │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│'-1'  │ × │ × │ × │ × │ △ │ △ │ × │ ○ │ × │ × │ × │ × │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│'文字'│ × │ × │ × │ × │ × │ × │ × │ × │ ○ │ × │ × │ × │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│''    │ × │ △ │ × │ △ │ × │ × │ × │ × │ × │ ○ │ × │ △ │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│null  │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ ○ │ × │ × │ × │ △ │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│[]    │ × │ △ │ × │ △ │ × │ × │ × │ × │ × │ △ │ × │ ○ │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│{}    │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ ○ │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│NaN   │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
undefined  × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ △ │ × │ × │ × │ ○ │
└───┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
  ○=厳密な比較で一致、○△=緩やかな比較で一致、×=不一致
分類:JavaScript
ExcelVBA/複数ファイル一括処理
2013年09月05日
フォルダ配下に対象ファイルを置いて、まとめて調査する場合のサンプル。
「★」という文字がみつかったら処理を止める。
一ファイル一シートの場合を対象としている。よってCSVファイルが最適。
┌──────────────────────────────────────┐
│Sub ★検索()                                                                │
│    Dim strPath As String, strFile As String                                │
│    Dim cellFind As Range                                                   │
│    Application.ScreenUpdating = False  '処理中非表示                       │
│    ' ───────────────────────────────────│
│    ' パス入力                                                              │
│    strPath = Application.InputBox( _                                       │
│                Prompt:="パス名を入力してください", _                       │
│                Title:="パス名入力")                                        │
│    If strPath = "False" Or strPath = "" Then                               │
│        MsgBox "検索中止"                                                   │
│        Exit Sub                                                            │
│    End If                                                                  │
│    If Right$(strPath, 1) <> "\" Then                                       │
│        strPath = strPath & "\"                                             │
│    End If                                                                  │
│    ' ───────────────────────────────────│
│    ' パス配下ファイルを全て処理                                            │
│    strFile = Dir(strPath)                                                  │
│    Do While strFile <> ""                                                  │
│        'ファイルのOpen                                                     │
│        Workbooks.Open strPath & strFile                                    │
│        ' ─────────────────────────────────│
│        'ファイル毎の処理                                                   │
│        Set cellFind = Cells.Find(What:="★")                               │
│        If Not cellFind Is Nothing Then                                     │
│            cellFind.Activate                                               │
│            Application.ScreenUpdating = True                               │
│            MsgBox "該当あり"                                               │
│            Exit Sub                                                        │
│        End If                                                              │
│        ' ─────────────────────────────────│
│        'ファイルのClose                                                    │
│        Workbooks.Close                                                     │
│        ' 次のファイルへ                                                    │
│        strFile = Dir                                                       │
│    Loop                                                                    │
│    ' ───────────────────────────────────│
│    Application.ScreenUpdating = True                                       │
│    MsgBox "該当なし"                                                       │
│End Sub                                                                     │
└──────────────────────────────────────┘
分類:ExcelVBA
前へ 1 … 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 … 156 次へ