MW211 EXIT

devlog
設計/型いろいろ
2014年09月14日
┌─────────┬───────────────┬────────────┐
│char              │character                     │文字                    │
│string            │character string              │文字列                  │
├─────────┼───────────────┼────────────┤
│int               │integer                       │整数                    │
│short             │short integer                 │短精度整数              │
│long              │long integer                  │長精度整数              │
│long long         │double long integer           │倍長精度整数            │
├─────────┼───────────────┼────────────┤
│decimal           │decimal                       │小数                    │
│numeric           │numeric                       │数値(小数)              │
│float             │floating point number         │短精度浮動小数点数      │
│double            │dobuble floating point number │倍精度浮動小数点数      │
├─────────┼───────────────┼────────────┤
│byte              │byte                          │符号なし 8ビット整数    │
│word              │word                          │符号なし16ビット整数    │
│dword             │double word                   │符号なし32ビット整数    │
│qword             │quadruple word                │符号なし64ビット整数    │
│int8_t            │signed 8-byte integer         │符号あり 8ビット整数    │
│uint8_t           │unsigned 8-byte integer       │符号なし 8ビット整数    │
│int16_t           │signed 16-byte integer        │符号あり16ビット整数    │
│uint16_t          │unsigned 16-byte integer      │符号なし16ビット整数    │
│int32_t           │signed 32-byte integer        │符号あり32ビット整数    │
│uint32_t          │unsigned 32-byte integer      │符号なし32ビット整数    │
│int64_t           │signed 64-byte integer        │符号あり64ビット整数    │
│uint64_t          │unsigned 64-byte integer      │符号なし64ビット整数    │
│signed char       │signed character              │符号あり 8ビット整数    │
│unsigned char     │unsigned character            │符号なし 8ビット整数    │
│signed int        │signed integer                │符号あり整数            │
│signed short      │signed short integer          │符号あり短精度整数      │
│signed long       │signed long integer           │符号あり長精度整数      │
│signed long long  │signed double long integer    │符号あり倍長精度整数    │
│unsigned int      │unsigned integer              │符号なし整数            │
│unsigned short    │unsigned short integer        │符号なし短精度整数      │
│unsigned long     │unsigned long integer         │符号なし長精度整数      │
│unsigned long long│unsigned double long integer  │符号なし倍長精度整数    │
└─────────┴───────────────┴────────────┘
分類:設計
設計/排他制御
2014年09月09日
ロック(排他制御)には以下の種類がある
  ①参照用共有ロック
  ②更新用共有ロック(楽観的ロック)
  ③更新用占有ロック(悲観的ロック)

参照の場合、他に影響を与えないから基本的にロックの必要はない。
但し、他が更新中の場合は、そちらを優先させなきゃならないので
その手続きとして「共有ロック」を行う。
「共有ロック」は、「共有ロック」同士(同時に参照のみ)なら排他なし、
他方が「占有ロック」ならその完了を待つことになる。
(逆に「占有ロック」しようという方は、本「共有ロック」の解除を待つ必要がある)
だから「共有ロック」とは、「ロック」とはいうものの実際には「ロック」はせず
他ロックのお伺いを立てる手続きのことといえる。

更新の場合、他に影響が大なので、占有する必要がある。
ということで、「占有ロック」を行う。
「占有ロック」は、「占有ロック」だろうが「共有ロック」だろうが
他でロックをしている場合はその完了を待たねばならない一方、
自分がロックしている間は他が待ちとなる強力なロックだ。
(後述の「楽観的ロック」との対比から「悲観的ロック」とも言われる)

ところで、更新の場合にもう少し穏便にロックできないものかという考えがある。
大々的に「占有ロック」をすると他から苦情が来るので
「占有ロック」なんかしないで、こっそり更新してしまいたいという場合だ。
そもそもなんでロックが必要かというと更新する対象を一旦参照するけど
それが更新前に誰かに変更されるとおかしくなっちゃうので、
その期間をまるごと占有しなければならないからだ。
だったら、更新時に誰かに変更されていたのをみつけたら
やり直してしまえばロックする必要がないじゃんというのが、
「楽観的ロック」の発想。
自分の優先度を下げる控えめなロックなため、他が他がと更新されまくると
なかなか更新できないという欠点は持つけれど。
一応、参照時には他の参照と同様に「共有ロック」はかけるので
「共有ロック」の分類に属する。
但し、更新処理時(最後の一瞬)は、さすがに排他制御かけなきゃなんないので
実際は「排他ロック」を行っている。
(但し、割合が低いので「共有ロック」が前面に出る感じ)
分類:設計
データオブジェクトの変遷
2014年08月14日
以下のような感じなんですかね。。。
┌──────────────────────────────────────┐
│DAO(Data Access Objects)                                                    │
│RDO(Remote Data Objects)                                                    │
│ADO(ActiveX Data Objects)                                                   │
│                                                                            │
│ODBC(Open Database Connectivity)                                            │
│OLE DB(Object Linking and Embedding, DataBase)                              │
│COM(Component Object Model)                                                 │
│                                                                            │
│JDBC(Java DataBase Connectivity)                                            │
│SOAP(Simple Object Access Protocol)                                         │
│                                                                            │
│SQL/CLI                                                                     │
└──────────────────────────────────────┘
┌──────────────────────────────────────┐
│┌───┐    ┌───┐                                                    │
││ DAO  │┬→│ ADO  │WindowsXP以前   =ADO2.x                            │
│└───┘│  └───┘WindowsVista以降=ADO6.x                            │
│┌───┐│  ┌───┐                        ┌───┐┌───┐        │
││ RDO  │┘  │ ODBC │                        │ JDBC ││ SOAP │        │
│└───┘    └───┘                        └───┘└───┘        │
│        ┌───┐  ┌───┐  ┌───┐                                  │
│        │ OLE  │→│ COM  │→│ .NET │                                  │
│        └───┘  └───┘  └───┘                                  │
└──────────────────────────────────────┘
分類:設計
人員配置の変遷
2014年08月11日
行きつく先は人工知能なのか。こんな段階を踏んでいるところだろう。
┌──────────────────────────────────────┐
│        ┌──────┐  ┌──────┐  ┌──────┐                │
│設計担当│アーキテクト│  │アーキテクト│  │アーキテクト│                │
│        ├──────┤  ├──────┤  ├──────┤                │
│製造担当│ プログラマ │→│  (ツール)  │→│  (ツール)  │                │
│        ├──────┤  ├──────┤  ├──────┤                │
│評価担当│   テスタ   │  │   テスタ   │  │  (ツール)  │                │
│        └──────┘  └──────┘  └──────┘                │
└──────────────────────────────────────┘

でも、実際は「システムエンジニア」という名のプログラマが全てを兼ねてたりする。
┌──────────────────────────────────────┐
│        ┌──────┐  ┌──────┐                                  │
│設計担当│アーキテクト│  │アーキテクト│                                  │
│        │     兼     │  │     兼     │                                  │
│製造担当│ プログラマ │OR│ プログラマ │                                  │
│        ├──────┤  │     兼     │                                  │
│評価担当│   テスタ   │  │   テスタ   │                                  │
│        └──────┘  └──────┘                                  │
└──────────────────────────────────────┘
分類:設計
設計/複数条件の順番
2014年08月06日
「if (条件1 and 条件2)」や「if (条件1 or 条件2)」のように
複数の条件を組み合わせて条件式の場合、
論理的には「条件1」と「条件2」の順番を入れ替えても問題ないことになるが
(「どっちも」もしくは「どっちか」ってことだから)
プログラムの場合は前から順番に処理をおこなっていくということに留意すべき。

つまり「条件1」が「条件2を判定しても問題ない」という条件の場合
「if (条件2を判定しても問題ない and 条件2)」となるが
これは順番を入れ替えたらエラーとなるわけだ。

つまりAND条件の場合、「条件1」が「偽」の時点で
「条件2」へは進まない(で「偽」と結論づける)。
一方OR条件の場合、「条件1」が「真」の時点で
「条件2」へは進まない(で「真」と結論づける)ということになる。

だから「if (isset($a) && ($a == 1))」のような条件式で
「$a」が定義されていなくても問題なく動くということになる。
順番無視だったら、「$a == 1」を先に処理して未定義エラーに
なってしまう可能性もあるってことになる。
分類:設計
座右の銘
2014年08月04日
・完璧とは、これ以上付け足すものがない状態ではなく、
  これ以上削ぎ落とすものがない状態である
・戦術的勝利で戦略的敗北を覆すことはできない
・選択と集中そして速度(スピード)
・愚者は成功体験に学び、賢者は歴史に学ぶ
分類:設計
ルール
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の配列定義など
    →一律最後にカンマを付けて改行にすれば行の入れ替えが容易だが
      余計なカンマを許容しないものとの統一感がなくなる
  →命名や記法については後で一括して置換するかツールで強制的に行うなら別だが
    開発者個々人に都度強制するのは逆効果になる
分類:設計
スキルマップ
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             □ユニシス
分類:設計
設計/サブウインド化を正規形にしてみた
2014年07月15日
┌──────────────────────────────────────┐
│【非正規形】別々の画面の状態                                                │
│┌──────────┐┌──────────┐                            │
││A画面              ││B画面              │                            │
││                    ││                    │                            │
││                    ││                    │                            │
│└──────────┘└──────────┘                            │
├──────────────────────────────────────┤
│【第一次正規形】一つの画面にまとめる                                        │
│┌──────────┐                                                    │
││A画面              │                                                    │
││                    │                                                    │
││                    │                                                    │
│├──────────┤                                                    │
││B画面              │                                                    │
││                    │                                                    │
││                    │                                                    │
│└──────────┘                                                    │
│→非正規形から退化して感じだが、手順を踏むとこうなる。                      │
├──────────────────────────────────────┤
│【第二次正規形】一方を非表示にし表示ボタンで切り替える                      │
│┌──────────┐                                                    │
││┌───┐┌───┐│                                                    │
│││A表示││B表示││                                                    │
││└───┘└───┘│                                                    │
│├──────────┤                                                    │
││A画面              │                                                    │
││                    │                                                    │
││                    │                                                    │
│├──────────┤                                                    │
││B画面              │                                                    │
││                    │                                                    │
││                    │                                                    │
│└──────────┘                                                    │
│→よくなってきた。でも初期表示で裏画面も読み出すので遅くなってしまう。      │
├──────────────────────────────────────┤
│【第三次正規形】表示ボタン押下の都度Ajaxで呼び出す                          │
│┌──────────┐                                                    │
││┌───┐┌───┐│                                                    │
│││A表示││B表示││                                                    │
││└───┘└───┘│                                                    │
│├──────────┤  ┌──────────┐┌──────────┐  │
││                    │  │A画面              ││B画面              │  │
││                    │←│                    ││                    │  │
││                    │  │                    ││                    │  │
│└──────────┘  └──────────┘└──────────┘  │
│→完成。(もちろん初期表示でどちらかを表示しておいてもよい)                  │
└──────────────────────────────────────┘
っていうか、一気に第三次正規形にいけそうだね。
分類:設計
Web画面設計/あるある(2)ボタンとタイトルの兼用
2014年07月12日
複数タイトルがあり、そのタイトルを押すことにより中身が表示される
…なんてケースで。

必然的というべきか、ボタンとタイトルが兼用状態となる。

でも…。

ボタンって結構「押せますよ」ってことをアピールする、
つまり目立ちたがり屋な訳だ。

一方、押しても何も変化しないタイトルは控えめになりがち。

っていうか、タイトルが目立ち過ぎてボタンの存在が霞むのもまずい。

ということで、綱引きが始まる訳です。
分類:設計
前へ 1 2 3 4 5 6 7 8 次へ