2018年に「やらかした」ことを記載した記事のリスト + 失敗の対策

## 失敗 by 本田宗一郎

> 失敗もせず問題を解決した人と、十回失敗した人の時間が同じなら十回失敗した人をとる。
> 同じ時間なら失敗した方が苦しんでいる。
> それが知らずして根性になり、人生の飛躍の土台になる。

今年(2018年)、失敗した？

7of9はいくつか失敗した。

振返ってみよう。

## 2018年に「やらかした」こと

2018年に「やらかした」こと、やらかさないために検討した事項を以下に挙げる。
概要コメントもつけて。

- [C++ Builder XE4 > TCP > WriteLn()の誤用](https://qiita.com/7of9/items/482fb4d819b2bef9a8f6)
    - WriteLn()とWrite()の使い間違い
    - 送信文字列にLFがあるにもかかわらず、WriteLn()を使った
- [組込み+RTOS > C > 70秒待ち > 46秒で処理が終わる > 実装ミス](https://qiita.com/7of9/items/325bea065a49bc56f473)
    - 1秒待ちを1.3秒待ち
    - 2回コール
- [naming > ASXST55とASXST-55](https://qiita.com/7of9/items/a1844ec9a318651ec143)
    - 自分の失敗ではないが、一般的によく見られる事象
    - 気を付けるべき事項
- [新人プログラマ応援 > 標準からはずれたことをするときは、それが明示されるようにしよう | .bashrcでの明示](https://qiita.com/7of9/items/3322594c46ac27768723)
    - > 標準からはずれたことをするときは、それが明示されるようにしましょう
- [AD2 > I2C > ERRORという表記 > SCLとSDAの接続が反対でした](https://qiita.com/7of9/items/e789c3a838842866779e)
    - SCLとSDAの設定間違い
    - それを指摘できる技術者のすごさよ
- [comment > 意図について記載する, if/for/whileの後の空白, 関数の後の空白(なし)](https://qiita.com/7of9/items/760fb9a16ba1d26c2dd4)
    - 意図が分かりにくいコードは読む人の負担になる
    - リファクタリング時に失敗を誘発する
- [SmartGit > Mergeの種類 > Create Merge-Commit | Merge to Working Tree | Cancel > マージ手順の間違い](https://qiita.com/7of9/items/7443162f3d79bb99476f)
    - マージの間違い
    - 被害が大きい失敗
    - とくに注意すべき失敗
- [linux > 自動起動 > /etc/rc.local (2018/03/12版) > nohupでなくsudoで実行 | 設定ミス(致命的: OS起動しなくなる)](https://qiita.com/7of9/items/e638278a6f1096bf6878)
    - 被害が大きい失敗
    - 本番環境で発生させては絶対にいけない
- [PyMieScatt > MatrixElements() > Equation of S11, S12, S33, S34](https://qiita.com/7of9/items/7fabcd360439b7c120ad)
    - 式の記載間違い
    - 筆者に連絡して修正された
        - きちんとした筆者であってよかった
        - 訂正を連絡しても対処されないところは多い (AmazonのKindle版とかAmazonのKindle版とかAmazonのKindle版とか)
- [Document > version > Scipy lecture notes > 同じEditionのファイルが更新される > 読者側のバージョン管理](https://qiita.com/7of9/items/73abe7a9759dd0003bb9)
    - 修正は入ったが、同じEditionとしての文書管理
    - Editionを確認しても内容が異なる、ということが発生する悪い例
- [Python3 > モジュールのリロード > importlib.reload(demo)](https://qiita.com/7of9/items/40426c3dc106fbf8ed3a)
    - Jupyter Notebookでときどきやらかす失敗
    - キャッシュは便利ではあるが、失敗の要因にもなる
- [Link > mistakes > @ stackoverflow](https://qiita.com/7of9/items/d29dab1ef287e3a09176)
    - StackOverflowでの失敗例
    - 失敗から学ぶこと大切
- [SmartGit > Branchesペイン > Local Branches > ブランチ > rename > originのブランチ名は変更できない](https://qiita.com/7of9/items/f12c66e50503c43283cf)
    - 名前変更したが、一部では名前が変更されないという症状
    - 全部が名前変更されないことで、将来の参照性が悪くなる例
- [Python > a[0] > for multidimensional a, a[0] is interpreted by taking all elements in the unspecified dimensions.](https://qiita.com/7of9/items/c4a7df7fdca961b2f48a)
    - `a[0]`は使ってはいけない
- [C++ Builder 10.2 Tokyo > FindComponent()した結果をTEdit *に入れる場合 > dynamic_cast<TEdit *>と(TEdit *)キャストの違い](https://qiita.com/7of9/items/1f9721196550faeea813)
    - キャストの仕方の違い
- [C++ Builder 10.2 Tokyo > TOpenDialog | TSaveDialog > FilterとFilterIndex > デザイン定義とコード定義 > ソフト変更時の失敗予防](https://qiita.com/7of9/items/97320911078c38960c2e)
    - デザインとコード、両方の変更が必要であるために、片方の変更を忘れるということ
    - > 将来変更しそうな処理は一か所にまとめる
- [Windows 8.1 + Excel 2016 > .xlsx保存時に「のコピー」を自動的に付加される > 元の.csvファイルが読み取り専用の場合](https://qiita.com/7of9/items/f524fc5e839db907095e)
    - Excelの仕様により「ユーザの気づきにくい変更」がされる例
    - ユーザ側の対処としては
        - 「こういうことがある」と知っておくこと
        - 細かな点に気づくこと
- [grep > grep --color=always opt *.c | grep -v option > optionが除外されない理由](https://qiita.com/7of9/items/ddebcb1cf4d7b65791fd)
    - grepの使用により「ANSI escape codes」が追加される例
- [X68000 XVI > 電源基板 > 回路図と現物の違い](https://qiita.com/7of9/items/0d14634014b7ba2a1c26)
    - 参照しているドキュメントそのものが間違っているという例
    - 枯れたドキュメントの場合、訂正情報がインターネットで見つかる
    - その情報含めて入手してからの作業が吉
- [C > mistake > ++ > 1日(24*60*60秒)を超えない | 別のハマリ事象 (0..255のループ)](https://qiita.com/7of9/items/fce07594ee5f775dfc3b)
    - 変数の型によりループ処理から抜けない点
    - 似たような事例は過去10年の間に3件は遭遇している
- [UI > 「xxxを削除しますか?」ダイアログ > デフォルトボタン > キャンセル (破壊的なコマンドの安易な実行を避ける)](https://qiita.com/7of9/items/bf822b50cf8eafdea9c9)
    - 破壊的なコマンドをデフォルトにしない
- [UI > 誤ったエラーメッセージ > ファイルが見つからないか、読み取りのアクセス許可がありません。 | 圧縮(zip形式)フォルダーは無効であるか、または壊れています > MAX_PATH260問題?](https://qiita.com/7of9/items/b65df63de69fc3fadcb0)
    - 誤ったエラーメッセージをユーザに見せない
- [C++ Builder XE4 > TMemo > Strings[0]とTextの違い](https://qiita.com/7of9/items/268d5f17e5ea3f47cc51)
    - 間違ったプロパティの使用
    - 間違ったものを使用していることに如何に気づくことができるか
- [C++ Builder XE4 > モジュール'XXX.exe'のアドレスXXXでアドレスYYYに対する書込み違反が発生しました。 > 「自動生成フォーム」を「使用可能フォーム」にした上でそのフォームを使うことで発生する](https://qiita.com/7of9/items/d1872b4108e31ef85b21)
    - 機能を中途半端に残して、原因不明の不具合となっていた
    - > 対処としては、「きちんと機能を取除く」こと。

### 失敗の対策

2018年にやらかしたこと。
その対策を検討した。

- 機能について良く知る
- 過去の失敗から学ぶ
- 正しい情報を探す
- 第一ソースとなる情報を探す
- 作業を中途半端にしない
- 細かい違いに気づく
- 同じ失敗を繰り返した時、立ち止まって考える
- 作ったものを見返す、見直す