aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
✒
DevOps 開発手法
DevOps ( デブオプス ) は、ソフトウェア開発手法の一つ。
開発 (Development) と 運用 ( Operations ) を 組み合わせたかばん語であり、開発担当者 と 運用担当者 が 連携して協力する ( さらに 両担当者の境目もあいまいにする ) 開発手法をさす。
ソフトウェアを 迅速に ビルド および テスト する文化 と 環境により、確実なリリースを、以前よりも迅速に高い頻度で可能とする組織体制の構築を目指している。
» 概要
DevOpsをイメージした図。
開発 と 運用、それに 品質保証 が 交わる部分を DevOps としている。
従来の機能別に分離された組織では、このような 開発部門 と IT部門 の 部門間統合 は ほとんどない。
しかし、DevOps では、開発部門 、IT運用部門 、あるいは品質保証 ( QA ) 部門が協力するプロセスと方法を推進している。
CI/CD *1 が自動テストや頻繁な統合などソフトウェア開発そのものに着目するのに対して、
DevOps は CI/CD のような技術的な側面に加えて、開発や運用といった組織的・文化的な側面をも内包する。
語源
2008年のアジャイルカンファレンスにおいて、アンドリュー・クレイ・シェーファーとパトリック・デボイス が「アジャイル・インフラストラクチャ」について議論した。そして、DevOpsという用語は2009年ベルギーで初めて開催された「DevOpsDays」から普及し、以後、世界中の多くの国々で「DevOpsDays」カンファレンスが開催されている。[5]
» DevOpsとアーキテクチャ
DevOpsは文化的な移行と(開発、運用、テストの部門間の)協力の概念であることから、単独での「DevOpsツール」というようなものはなく、複数のツールで構成される「DevOpsツールチェーン」となる。
DevOpsツールは、主にソフトウェア開発とデリバリー・プロセスの側面を有しており、一般的には1つ以上のカテゴリに分類される。
Model View Controller
MVCの典型的な相関図
Model-View-Controller (MVC、モデル・ビュー・コントローラ) はUIを持つソフトウェアに適用されるソフトウェアアーキテクチャの一種である。
MVCはソフトウェアを処理/Model・表示/View・入力伝達/Controller の3要素に分割し、ソフトウェア内部データをユーザーが直接参照・編集する情報から分離する。
プレゼンテーション ( View・Controller ) とドメイン ( Model ) を分離しまたユーザー入力 ( Controller ) と表示(View)も分離することでソフトウェアの保守性・開発生産性を向上させる。
*1: 継続的インテグレーション と 継続的デリバリー Continuous Integration、CI Continuous Deployment; CD
✒銀鮭海苔弁
銀鮭海苔弁 …… お家騒動?
✒
何処かに、山本の見せ場を作るだろうとは思っていたが、
ここに持ってくるとは。
獣たちよ!、何故、小銃を乱射しない!。
それに、SISも、スタングレードとか使えよ。
しかし、最終回 …… 。スタッフのやる気の無さが滲み出ている …… 。
✒ 🍎 の 呪
Apple版 の Wizardry の ソースコード の 抜粋。
オリジナル の Wizardry は Pascal という言語で書かれている。
ただ、これはたぶんオリジナルのソースコードではなくて、
バイナリを逆アセンブルして Pascal に変換したか、
直で Pascal に変換するソフトを使ったものを人間が手を使って見やすくしたもの。
それを、さらに σ(^_^) が見易く(?)したもの。
で、これはキャンプ時に、ビショップがアイテムを鑑定する部分のルーチン。
BEGIN (* IDITEM *)
CHARX := LLBASE04;
XGOTO := XBK2CMP2;
REPEAT
GOTOXY ( 0, 18);
WRITE ( CHR(11));
WRITE ( 'IDENTIFY WHAT ITEM (0=EXIT) ? >' );
{ どのスロットにあるアイテムを鑑定する?と表示 }
GETKEY;
{ キーボードの入力を取得 }
ITEMX := ORD( INCHAR) - ORD( '0');
IF ITEPIX = 0 THEN
EXITIDIT
{ 入力が0ならキャラクター画面に戻り }
{ 他の数字であれば次にうつる }
UNTIL ( 0 < ITEMX ) OR ( ITEMX <= CHARACTR[ CHARX].POSS.POSSCNT );
IF CHARACTR[ CHARX].POSS.POSSESS[ ITEMX].IDENTIF THEN
EXITIDIT;
{ 得られたスロット番号のアイテムがすでに鑑定されているなら戻る }
CHARACTR[ CHARX].POSS.POSSESS[ ITEMX].IDENTIF :=
(RANDOM MOD 100) < (10 + 5 * CHARACTR[ CHARX].CHARLEV);
{ 1D100 の サイコロを振り、自分のレベルx5+10より下になれば鑑定成功となり、
そのスロット番号のアイテムに鑑定済みフラグをたてる }
IF CHARACTR[ CHARX].POSS.POSSESS[ ITEMX].IDENTIF THEN
CENTSTR( 'SUCCESS!') ELSE CENTSTR( 'FAILURE.);
IF (RANDOM MD) 100) < (35 - (3 * CHARACTR[ CHARX].CHARLEV))
THEN
BEGIN
MOVELEFT( IOCACHE[ GETREC(
ZOBlECT,
CHARACTR[ CHARX].POSS.POSSESS[ ITEMX].EQINDEX,
SIZEOF( TOBIREC))], OBJECT, SIZEOF( TOBJREC));
CHARACTR[ CHARX].POSS.POSSESS[ ITEMX].CURSED OBlECT.CURSED;
XGOTO := XEQPDSP
END;
EXITIDIT END; (* IDITEM *)
さて、有名な Supper BIshop だが、
キー入力の部分で、所持アイテム数の最大の 8 以下を押すことを暗に求めらる。
が、数字キーには、0~9があるわけで …… 。
もし、9が入力されても、( 0 < ITEMX ) OR ……となっているので、
前項が成立して、
9も受け付けてしまうのだ!。
9が指定されると、通常通り、鑑定判定が行われ、
鑑定に成功すると、鑑定成功として、アイテムの8ビット目が立てられる。
その位置には、自分自身の経験値のメモリがあり、
すなわち、(たぶん自身の経験値の)変数の8ビット目に1が立てられる。
すさまじい経験値が設定されてしまうバグ(スーパービショップ)がある。これは、
UNTIL (ITEMX > 0) OR (ITEMX <= CHARACTR[ CHARX].POSS.POSSCNT);