社内交流会でLTをする機会があったので「ユビキタス言語」についてDDD本を再度読みなおしてみました。 speakerdeck.com 最近、「DDDは負け犬」みたいな話が少しバズりましたが、ユビキタス言語=ユーザの言葉と解釈するのはあまりに勿体無いのではないかなと思います。 ユビキタス言語はより良い・深いモデルを探求するために必要なものです。 スライドの補足 第2章はスライドに書いたことよりも、もっと多くのことについて言及されています。 ここでは、それらの省略してしまった部分を補足しつつ、スライド構成の今ひとつだった部分を正したいと思います。 まず、第2章最初の一文 しなやかで知識豊富な設計を行うには、用途の幅広い、共有されたチームの言語と、その言葉を使った活発な実験が必要である。 – 書籍「ドメイン駆動設計」(p.24) 省略しようがないくらいに、この一文に詰まっているのですが、スライド
ある出版社プロジェクトにおける事例 出版社は「書籍」と「雑誌」を制作している。制作した「書籍」と「雑誌」は、取次(※出版業界における卸のような位置付けの業態)や書店へ卸す。 「書籍」には返品があり得て、また在庫は会計上資産として扱われる。「雑誌」は返品はあり得ず、また在庫は資産として扱われない。 「書籍」には「ジャンル」という販売管理上の分類がある。具体的には下記の通り。 一般書籍 企画書籍(※雑誌と書籍の中間的なもの、書籍だが決して重版しない) 音響・映像媒体付き(※特別扱い) 成人向け(※特別扱い) 販売管理観点では、「雑誌」もある種の一つの「ジャンル」として扱っている。販売管理観点での「ジャンル」は、つごう下記5つという認識。 一般書籍 企画書籍 音響・映像媒体付き書籍 成人向け書籍 雑誌 「取引条件」という売価、支払サイト等に関わる諸条件が、おおよそ取引先(=取次や書店)×ジャンル
こちら2つを読んで ユビキタス言語とは ソフトウェア開発チーム全体で作り上げる共有言語 ドメインのユーザーが使う用語とプログラムを構成する用語を一致させた言葉 プロダクトオーナー、開発者間のコミニュケーションを円滑にするためのようなもの ユビキタスとは 「満遍なく」とか「どこにでもある」という意味 ユビキタス言語の考え方 その業務自体が、どのような考えでどのように動くのか プロジェクトにとっての最善の用語か ユビキタス言語における変更は、モデルに対する変更である ドメインエキスパートは用語や理解を伝えるために適切かどうかに、開発者は設計を妨害する不整合さがないかどうかに着目すべき ユビキタス言語のスコープ チーム。チームによって話されて、チームが開発する単一のドメインモデルで表現される 「業界全体で」とか「全社的に」あるいは「世界中で」共通なドメイン言語を想定したものではない(ユニバーサル
この記事は、ドメイン駆動設計 #1 Advent Calendar 2018の10日目です。 ユビキタス言語は大事 DDDは分類手法の一つという側面があります。 分類の道具は境界づけられたコンテキストと、ユビキタス言語です。 境界づけられたコンテキストで、システムの対象業務を分類し、境界づけられたコンテキスト内部ではユビキタス言語で言葉を分類します。 個人的に、ユビキタス言語はDDDを実践する上でとても大事なテクニックだと思うのですが、何を指すものなのか、どういうメリットがあるものなのかわかりにくいために、初心者にとってはわかりにくいものかもなー、とも感じます。 そこでこの記事では、ユビキタス言語についての私の知見を書いてみます。ユビキタス言語についての学習の助けになれば幸いです。 ユビキタス言語とは何か? ユビキタス言語の定義をする前に、「境界づけられたコンテキスト」について説明します。
Linux の共有ライブラリを作るとき PIC でコンパイルするのはなぜか 通常、Linux の共有ライブラリを作るときは各 .c ファイルを PIC (Position Independent Code) となるようコンパイルします。しかし、実は PIC でコンパイルしなくても共有ライブラリは作れます。それでは PIC にする意味はあるのでしょうか。 さっそく実験してみます。 int func () { printf(""); printf(""); printf(""); } PIC でコンパイルするには gcc に -fpic または -fPIC を渡します。-fpic の方が小さく高速なコードを生成する可能性がありますが、プロセッサによっては -fpic で生成できる GOT (Global Offset Table) のサイズに制限があります。一方、-fPIC はどのプロセッサで
凝集度(ぎょうしゅうど、コヒージョン、cohesion)とは、情報工学においてモジュール内のソースコードが特定の機能を提供すべく如何に協調しているかを表す度合いである。IPAが実施する情報処理技術者試験では、強度(きょうど、ストレングス、strength)という言葉が使われる。凝集度は順序尺度の一種であり、「凝集度が高い」とか「凝集度が低い」といった言い方で使われる。凝集度の高いモジュールは、堅牢性、信頼性、再利用性、読みやすさなどの点で好ましく、凝集度の低いモジュールは保守/評価/再利用/読解が難しいため好ましくないとされる。 凝集度は結合度と組み合わせて議論されることが多い。凝集度が高いモジュールは他との結合度が低いことが多く、逆に凝集度が低ければ結合度が高くなる傾向がある。ソフトウェアの品質を凝集度と結合度で表す手法は、Wayne P. Stevens(英語版)、Glenfold J
ICなどを製造する米GHI Electronicsが、.NET C#でコーディングができるスマートウォッチの開発メンバーを募集しています。 プログラミング可能なスマートウォッチといえば、↓でご紹介した製品もありました。 とはいえ、今回のGHIのプロジェクトは、企業の一般的なエンジニアの採用募集とはちょっと異なります。 まず経緯からですが、2013年にKickstarterで、.NET C#を実行するスマートウォッチのクラウドファンディングキャンペーンがスタートしました。(GHI Electronicsとは関係ないとのこと) ただ、これは1,012,742ドルと1億円近くを集めたにも関わらず、キャンペーンは失敗し、出資者は何の説明もなく、何も受け取ることもできませんでした。 今回のGHI Electronicsのプロジェクトは、これのリバイバルというかリベンジのようなところが出発点になってい
C標準ライブラリの<stdio.h>ヘッダで提供されるストリーム入出力関数において、複数スレッドから同時に対象ストリーム入出力操作を行ったときの振る舞い(スレッド安全性)に関するメモ。 まとめ: C99以前:POSIX準拠システムならばスレッド安全である。(それ以外は処理系の仕様を参照) C11以降:C言語仕様によりスレッド安全性が保証される。この振る舞いに関してはPOSIX相当。 POSIX POSIXシステムが定める全関数は基本的にスレッド安全(Thread-Safe)であると定義され、C標準ライブラリの関数fgetcやprintfなどを用いて、異なるスレッドから同時にストリーム入出力操作を行ってもよい。*1 POSIX規格(IEEE Std 1003.1-2008)より "Thread-Safe" の定義、およびflockfile, funlockfile関数仕様から一部引用(下線部
Section: C Library Functions (3) Updated: LinuxThreads Index JM Home Page roff page 名前 pthread_mutex_init, pthread_mutex_lock, pthread_mutex_trylock, pthread_mutex_unlock, pthread_mutex_destroy - mutex の操作 書式 #include <pthread.h> pthread_mutex_t fastmutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t recmutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; pthread_mutex_t errchkmutex = PTHREAD_ERRORCHECK
C++で副作用のない無限ループを書くと未定義動作になります。 「未定義動作」というのは口に出すだけでC++プログラマーを震え上がらせる力を持った言葉です。「鼻から悪魔が出てくる」という言葉で説明されるように、未定義動作を含むコードを実行した結果は何も保証することができず、バグの発見やデバッグすら困難にさせます。未定義動作下においてはコンパイラの気分によってコード片が消え、trueとfalseが同時に成立し、タイムトラベルを引き起こします1。 そのためC++ではうっかり未定義動作が埋め込まれないよう注意が払われるのが普通です。 さて、以下のC++のコードは未定義動作を引き起こします。 下の例は実際にclang/LLVMで最適化を有効にしてコンパイルするとでたらめな値を返す関数ができました。 この話をしたところ、何人かに驚かれたり異論を受け取ったりしたので、この話題について少しまとめてみました
プログラムが動作する上で必須に近い、「boolean」変数。安易に使いすぎると可読性の低下などにより、不利益を被ってしまうことがあります。 フラグの使用例 たとえば、改行コードを含んだ文字列の内容をheader部とbody部に分けるコードを考えてみましょう。 import java.util.*; public class Main { public static void main(String[] args) throws Exception { String input = "header\nbody1\nbody2\nbody3"; String[] lines = input.split("\n"); String header = null; List<String> body = new ArrayList<>(); // ヘッダー情報取得済フラグ boolean flag
動的計画法(どうてきけいかくほう、英: Dynamic Programming, DP)は、計算機科学の分野において、アルゴリズムの分類の1つである。対象となる問題を複数の部分問題に分割し、部分問題の計算結果の記録を利用して全体の問題を解く手法を総称してこう呼ぶ。 細かくアルゴリズムが定義されているわけではなく、下記2条件を満たすアルゴリズムの総称である。 帰納的な関係の利用:より小さな問題例の解や計算結果を帰納的な関係を利用してより大きな問題例を解くのに使用する。 計算結果の記録:小さな問題例、計算結果から記録し、同じ計算を何度も行うことを避ける。帰納的な関係での参照を効率よく行うために、計算結果は整数、文字やその組みなどを見出しにして管理される。 「動的計画法 (dynamic programming)」という言葉は1940年代にリチャード・E・ベルマンが最初に使いはじめ、1953年に
systemd stopで実行されるコマンド [サービス名].serviceファイルのExecStopパラメータに指定されたコマンドが実行される。 ExecStopが設定されていない場合は、KillSignalパラメータで指定されているシグナルをサービスのプロセスに送信する。 KillModeの設定に従って、サービスのグループに属するプロセスにも終了シグナルを送信する。 KillSignalのデフォルトはSIGTERMです。 KillModeのデフォルトはcontrol-groupで、サービスに属する子プロセスが終了されます。 [systemd.service] (https://www.freedesktop.org/software/systemd/man/systemd.service.html)より ExecStop= ExecStart=によって開始されたサービスを停止するために
SystemdユニットでExecStopを書いたのが初めてだったのだけれど、どうしてもExecStopを書くとTypeによらずstopされてしまう。 Typeがoneshotであるならばこれは正しい。 Type=oneshotである場合、.serviceユニット起動時にExecStartを実行し、この終了を待つ。 ExecStartプロセスの実行中はactiveとなり、実行が終了するとサービスそのものが終了したとみなし、inactiveになる。 Systemdユニットに詳しい人は割と少ないのでサービスタイプについて改めて解説しておこう。 oneshotは単純にその時に実行するだけのサービスである。 起動は実行終了を待ち、終了したらサービス自体を終了する。 simpleはデフォルトのサービスタイプである。 このサービスタイプはプロセスを実行していることで機能するサービスである。 フォアグラウ
注 この記事では、Python の便利なライブラリの一部を使用するように環境をセットアップする方法について説明します。これにより、ファイル システムの検索、インターネットへのアクセス、ファイルの種類の解析など、Windows 中心のアプローチからプラットフォーム間でタスクを自動化することができます。 Windows 固有の操作の場合は、Python 用の C 互換の外部関数ライブラリである ctypes、Windows レジストリ API を Python に公開する機能である winreg、Python から Windows ランタイム API にアクセスできるようにする Python/WinRT を確認してください。 開発環境を設定する Python を使用してファイル システムの操作を実行するスクリプトを記述する場合は、Microsoft Store から Python をインストー
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く