MW211 EXIT

devlog
ルール
2014年08月03日
【プログラムの集団開発をする上での基礎知識と最低限のコーディングルール】
  □構造化プログラミングを理解すること
    □基本的にgoto文を使わないこと
    □順次・反復・分岐を理解すること
    □continue文などの特殊脱出文の位置づけを認識すること
    □著名な標準規格をできるだけ多く理解すること(C言語の場合はMISRA-Cなど)
  □変数のスコープをできるだけ狭くすること
    □グローバル変数を濫用しないこと
    □C言語のグローバル変数および関数について、
      externおよびstatic修飾子を適切に付与すること(省略しないこと)
    □C言語のexternグローバル変数を宣言するヘッダファイルについて、
      適切にインクルードすること(濫りにインクルードしないこと)
    □C言語の変数について、const修飾子を適切に付与すること(省略しないこと)
    □オブジェクト指向言語のクラス内メンバ変数について、
      publicやprivateなどのアクセス修飾子を適切に付与すること
    □オブジェクト指向言語のpublicメンバ変数は極力使用せず
      getterメソッド等他の手段を使用すること
  □バージョン管理ソフトを使用できること
    □CVS
    □Subversion
    □Git
  □プロジェクト管理ソフトを使用できること
    □Redmine
    □Trac
  □その他
    □文字コード・改行コードは統一すること
    □不要な全角スペースは除去(半角スペースに置換)すること
    □不要な行末尾のスペース類は除去すること
    □if文の波括弧{}は省略しないこと(swiftの仕様より)
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
【冗長的なコーディングルール】
  →こだわり過ぎると開発の障害となる(場合によっては宗教論争)ので
    思い切って切り捨ててしまった方が逆にいいかもといったルール(楽市楽座的な話)
  □命名規則を統一すること
    ・略字のルールを統一して命名台帳を設ける
    ・ハンガリアン記法を禁止する
    →命名に躊躇して処理作成に集中できなくなる
  □字下げやスペースの空け方やタブの使い方を統一すること
    ・制御文や関数の波括弧{}の前で改行するか否かを統一する
    →記法に躊躇して処理作成に集中できなくなる
  □大文字・小文字・キャメル文字の使用ルールを統一すること
    ・特に小文字のみとローワーキャメル文字を混在しないようにする
    →外部関数などの影響もあり完全な統一は難しくなる
  □switch文におけるcase節の字下げを統一すること
    ・case節をswitch文と同列にするかもしくは一段下げるかを統一する
    →if文との比較から同列が妥当だが、一段下げた方が見やすい(PHP)
  □カンマ区切り記述で最後に余計なカンマを許容しているものでも
    カンマを記述しないこと(もしくは一律記述すること)で統一すること
    ・C言語のenum文やPHPの配列定義など
    →一律最後にカンマを付けて改行にすれば行の入れ替えが容易だが
      余計なカンマを許容しないものとの統一感がなくなる
  →命名や記法については後で一括して置換するかツールで強制的に行うなら別だが
    開発者個々人に都度強制するのは逆効果になる
分類:設計
Windowsバッチ/文字コード
2014年08月02日
UTF-8で記述したバッチファイルを実行した場合、
文字コードをUTF-8と宣言した場合(「chcp 65001」)は
正しく出力される
┌──────────────────────────────────────┐
│chcp 65001                                                                  │
│echo アップ> out.txt                                                        │
├──┬───────────────────────────────────┤
│結果│E3 82 A2  E3 83 83  E3 83 97   0D 0A  (アップ+CRLF)                  │
└──┴───────────────────────────────────┘

しかし宣言しなかった場合は、一部正しく出力されない。
┌──────────────────────────────────────┐
│REM chcp 65001                                                              │
│echo アップ> out.txt                                                        │
├──┬───────────────────────────────────┤
│結果│E3 82 A2  E3 83 81  45 81 45   0D 0A   (ア文字化け)                   │
└──┴───────────────────────────────────┘
正しく出力されるのもあるので厄介。
恐らく基本正しく認識されるのだろうが、一部前後関係で誤認識するようだ。

但し、psql(PostgreSQL)で、SQL文中に日本語文字をベタ書きすると
エラーとなってしまうようだ。
┌──────────────────────────────────────┐
│chcp 65001                                                                  │
│psql … -c "SELECT 'あ';"> out.txt                                          │
├──────────────────────────────────────┤
│ERROR:  invalid byte sequence for encoding "UTF8": 0x82                     │
└──────────────────────────────────────┘

既定のsjisに戻してあげれば(「chcp 932」)回避できる。
┌──────────────────────────────────────┐
│chcp 65001                                                                  │
│chcp 932                                                                    │
│psql … -c "SELECT あ;"> out.txt                                            │
└──────────────────────────────────────┘
なんでだろう?
分類:Windows
スキルマップ
2014年08月01日
【人材】
  □経営者(コンサルタント)  …ITストラテジスト・システム監査技術者
  □開発管理者              …プロジェクトマネージャ
  ■設計者(顧客窓口)        …応用情報技術者・システムアーキテクト
  □専門技術者
    □組み込み技術者        …エンベデッドシステムスペシャリスト
    ■データベース技術者    …データベーススペシャリスト
    □セキュリティ技術者    …情報セキュリティスペシャリスト
    □ネットワーク技術者    …ネットワークスペシャリスト
    ■Web開発技術者
    □iOSアプリ開発技術者
    □Android技術者
  □サーバ管理者            …ITサービスマネージャ
  ■プログラマ              …基本情報技術者
  □品質管理者(テスター)
  □デザイナー
  ■その他スタッフ          …ITパスポート
【プログラム言語】
  ■C               □C++
  ■VisualC/C++     □VisualC++.NET □VisualC#
  □Object-C        □Swift
  □Java
  □VisualBasic     □VisualBasic.NET               ■ExcelVBA
  □Perl            ■PHP           □Python        □Ruby
  ■HTML            ■HTML5         ■CSS           ■CSS3
  ■JavaScript      ■jQuery        □prototype.js
  □Delphi言語/ObjectPascal
  ■COBOL           □PL/I
  □FORTRAN
【OS】
  ■Windows         ■WindowsServer
  ■Linux           ■Unix(                        )
  □iOS
【WindowsのCLI】
  ■COMMAND.COM     ■cmd.exe
  ■WSH(VBScript)   □WSH(JScript)
  □WindowsPowerShell
【UNIXシェル】
  ■sh(BourneShell) □ash           □bash          □dash          □ksh
  □csh             □tcsh
【データベース】
  □Oracle                          □PL/SQL
  ■Microsoft SQL Server(MSSQL)     □Transact-SQL  ■Access
  ■MySQL
  ■PostgreSQL(pgSQL)               ■PL/pgSQL
  ■SQLite
  ■HiRDB           □Symfoware
【汎用機およびJCL】
  □MVS系(IBM)      □MSP(富士通)   ■VOS3(日立)
  □VSE系(IBM)
  □XSP(富士通)
  □GCOS(Bull)      □ACOS(NEC)
  □OS2200(ユニシス)                □MCP(ユニシス)
【オフコン】
  □富士通          ■NEC           □東芝          □三菱電機      □内田洋行
  □IBM             □ユニシス
分類:設計
ExcelVBA/文字が含まれている判定
2014年07月30日
オーソドックスな方法。文字位置を取得する「InStr()」を利用。
┌──────────────────────────────────────┐
│If InStr("文字列", "文") <> 0 Then                                          │
│    MsgBox "文が含まれている!"                                             │
│End If                                                                      │
└──────────────────────────────────────┘

正規表現による照合を利用する方法。
┌──────────────────────────────────────┐
│If "文字列" Like "*文*" Then                                                │
│    MsgBox "文が含まれている!"                                             │
│End If                                                                      │
└──────────────────────────────────────┘
メタ文字の意味は以下の通り。
┌───┬──────────────────────────────────┐
│?     │任意の1文字                                                         │
├───┼──────────────────────────────────┤
│*     │0文字以上の任意の文字                                               │
├───┼──────────────────────────────────┤
│#     │1文字の数値(0~9)                                                   │
├───┼──────────────────────────────────┤
│[A-Z] │文字群中のいずれか1文字                                             │
├───┼──────────────────────────────────┤
│[!A-Z]│文字群中にないいずれか1文字                                         │
└───┴──────────────────────────────────┘
分類:ExcelVBA
CSS/完成後表示
2014年07月29日
tableタグのなどで、(tdの)列を可変とした場合、
末尾の方に長い文字の行があると、初期表示から列幅が拡大する場合がある。

ちょっと見栄えが悪いので、その対策。

CSSの「visibility」属性の初期値を「hidden」(非表示)としておき、
裏で組み立てを完成させ、JavaScriptの「onload」の最後で
「visible」(表示)すればよい。

jQueryを使っているならばこんな感じとなる(CSSの定義とjQuery)。
┌──────────────────────────────────────┐
│table {                                                                     │
│    visibility          :hidden;                                            │
│}                                                                           │
└──────────────────────────────────────┘
┌──────────────────────────────────────┐
│$(function() {                                                              │
│    $('table').css('visibility', 'visible');                                │
│});                                                                         │
└──────────────────────────────────────┘
分類:CSS
DOSバッチ/バッチ名と実行ファイル名
2014年07月28日
バッチ名を考えるのがめんどくさい時、
つい実行ファイル名と同名をつけてしまうと大変なことになる。

実行ファイルを実行するのではなく、自身のバッチを実行してしまうことになるからだ。

例えば「hoge.exe」を実行する以下のようなバッチを「hoge.bat」として実行した場合。
┌──────────────────────────────────────┐
│hoge                                                                        │
└──────────────────────────────────────┘
再帰的に呼びだされるらしく、DOS窓に実行履歴が大量に出力されて止まらなくなる。
┌──────────────────────────────────────┐
│C:\>hoge                                                                    │
│                                                                            │
│C:\>hoge                                                                    │
│                                                                            │
│C:\>hoge                                                                    │
│                                                                            │
│:                                                                          │
└──────────────────────────────────────┘

次に、標準出力の向き先を変えて指定した場合。
┌──────────────────────────────────────┐
│hoge >log.log                                                               │
└──────────────────────────────────────┘
出力先「log.log」に出力される内容は、自身の実行履歴ただ一行。
┌──────────────────────────────────────┐
│                                                                            │
│C:\>hoge 1>log.log                                                          │
└──────────────────────────────────────┘

とにかく、何気なくはまってしまうので注意。
分類:Windows
正規表現/区切りもしくは行末まで
2014年07月27日
以下のようなCSVデータがあった場合、
「a」から始まるデータを取得したいとする。
(但し、「a」はデータの途中にはないものとする)
┌──────────────────────────────────────┐
│a123,b123,c123,a321,b321,c321                                               │
│b456,a456,c456,b654,a654,c654                                               │
│c789,b789,a789,c987,b987,a987                                               │
└──────────────────────────────────────┘
よって、「a」から区切りの「,」までかもしくは行末までという条件になる。

正規表現にすると以下のような感じになる。
┌──────────────────────────────────────┐
│a.*?(?=(,|$))                                                               │
└──────────────────────────────────────┘
分類:正規表現
PHP/日時の書式
2014年07月26日
現在時刻を「YYYY/mm/dd HH:ii:ss」と出力するのに
以下のように一つ一つ呼び出して文字列結合していた。
┌──────────────────────────────────────┐
│echo date('Y') . '/' . date('m') . '/' . date('d')                          │
│   . ' '                                                                    │
│   . date('H') . ':' . date('i') . ':' . date('s');                         │
└──────────────────────────────────────┘

でも、ちょくせつ書式を中にはめ込むことができるのだね。
┌──────────────────────────────────────┐
│echo date('Y/m/d H:i:s');                                                   │
└──────────────────────────────────────┘

っていうか前者だと、タイミングによって、
時と分とかが違ったりするリスクがありそうだ
例えば、11:59に時を取得し、12:00に分を取得した場合、「11:00」になったりして。
(これは大晦日とかだと年とかまで波及する)
#でも、秒が切り替わるちょっとした隙間だから稀だろうけど。

現に、間に「sleep(1)」とかいれて連続で出力してみると、
前後で値が変わってしまう。

つーことで、一回変数に代入してから分解した方が賢明のようだ。
分類:PHP
ネットワーク/pingの応答がない場合
2014年07月25日
接続は問題ないのに、pingを通すと「要求がタイムアウトしました。」が
返信される場合、以下を確認してみては?

ファイアウォールの設定で、
「ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)」などが
「いいえ(=□有効)」になっていないか?
分類:ネットワーク
C/ヘッダファイルのインクルード
2014年07月24日
ヘッダファイルのインクルードをソースファイル側でするべきか
インクルードしているヘッダファイル側でするべきか迷うことがある。

ということでまとめた。
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
【1】公開関数や公開グローバル変数を使用する場合
┌──┬───────────────────────────────────┐
│①.h│extern void 公開関数①();                                             │
├──┼───────────────────────────────────┤
│①.c│#include "①.h"                                                       │
│    │void 公開関数①()                                                     │
│    │{                                                                     │
│    │    処理;                                                             │
│    │}                                                                     │
└──┴───────────────────────────────────┘
┌──┬───────────────────────────────────┐
│②.c│#include "①.h"                                                       │
│    │公開関数①();                                                         │
└──┴───────────────────────────────────┘
  ②ではソースファイル側でインクルードする。
  →②のヘッダファイルでインクルードし、
    そのヘッダファイルをソースファイルでインクルードするといった
    まわりくどいことはしなくてもよい
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
【2】define定義はtypdef定義をヘッダ側でも使用する場合
┌──┬───────────────────────────────────┐
│①.h│typedef int 新型;                                                     │
└──┴───────────────────────────────────┘
┌──┬───────────────────────────────────┐
│②.h│#include "①.h"                                                       │
│    │extern void 公開関数②(新型 arg);                                     │
├──┼───────────────────────────────────┤
│②.c│#include "②.h"                                                       │
│    │void 公開関数②(新型 arg)                                             │
│    │{                                                                     │
│    │    処理;                                                             │
│    │}                                                                     │
└──┴───────────────────────────────────┘
┌──┬───────────────────────────────────┐
│③.c│#include "②.h"                                                       │
│    │新型  arg = 0;                                                        │
│    │公開関数②(arg);                                                      │
└──┴───────────────────────────────────┘
  ②のヘッダファイルにとって、①のヘッダファイルは必須なので
  ②ではヘッダファイル側でインクルードする。
  →別の③が、②のヘッダファイルのみをインクルードすれば
    完結する(①のヘッダファイルのインクルードがなくてもよい状態)ように
    なっていればよい
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
分類:C/C++
前へ 1 … 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 … 156 次へ