ソフトウェア工学

システム開発ライフサイクル内で働く専門家、学者、学生向けのQ&A

6
リアルタイムのコラボレーション中に保存する方法
複数のユーザーに同じドキュメントを編集してもらいたい。私が直面している問題は、新しいユーザーが参加したときに、古いドキュメントが表示される可能性があることです。新しいユーザーが最新の変更を確実に取得する方法を教えてください。 私が考えたいくつかの解決策: すべての変更を保存します。UIの動作が遅くなり、dbに負荷がかかるため、このソリューションは好きではありません。 新しいユーザーが参加すると、他のすべてのクライアントで保存をトリガーします。他のクライアントが保存した後、ドキュメントをロードします。これにより、依然として矛盾が生じる可能性があります。 他の提案は参考になります。 更新:提案されたソリューションであるGoogle Realtime APIを調べたところ、次のことがわかりました。 アプリのユーザーはGoogleドライブを持っている必要があり、ドライブへのアクセスを許可する必要があります。これは、せいぜいぎこちないUIフローを提示したり、Googleドライブを持たないユーザーがリアルタイム機能を使用できないようにすることができます。 あなたの側で行われるすべての共有設定は、Googleドキュメント用に複製する必要があります。 更新2:目標を達成するために、GoogleのFirebaseを使用しました

4
IDEプロジェクトのリポジトリに何を含める必要があるか
この場合はNetbeansで作成されたプロジェクトを追加したいのですが、この質問はほとんどのIDEで一般的です。それは単に、リポジトリに何を含めるべきかということです。たとえば、Netbeansはnbprojectフォルダーを作成し、eclipseは.settingsフォルダーを作成します。これらをリポジトリに含めた場合、プロジェクト固有の設定を含めるか含めないことの利点/欠点は何ですか。 この場合、それは個人的なプロジェクトなので、他の人がプロジェクトに取り掛かることはないと思いますが、最小限のプロジェクト設定を追加して、プロジェクト自体が別のマシンで簡単に作業を開始できるようにするとよいでしょう。

3
頻繁に変更されるスキーマでのSQL Server変更データキャプチャの使用
構築中の新しいサブシステムでSQL Server変更データキャプチャを有効にすることを検討しています。 それは本当に必要なわけではありませんが、完全な履歴追跡可能性を求められており、CDCは最小限の労力でこの要件をうまく解決します。 私たちはアジャイル開発プロセスに従っています。つまり、この場合、新しい列の追加、他の列へのデータの移動など、データベーススキーマに頻繁に変更を加えます。 テーブルを作成し、そのテーブルに対してCDCを有効にしてから、新しい列をテーブルに追加する小さなテストを行いました。新しい列への変更は、CDCテーブルに登録されません。 CDCテーブルを新しいスキーマに更新するメカニズムはありますか。また、データベーススキーマを移行するときに、キャプチャされたデータを処理するためのベストプラクティスはありますか?

3
ゲーム開発のためにネットワークを介してクロックを同期する方法は?
時間ベースの要素が多いゲームを書いています。私は時間を使用して、ネットワークが停止し、パケットが通過していないときのプレーヤーの位置(およびパケットが受信されるまでの時間と受信されない時間)を推定します。それは、プレイヤーが方向を選択して動きを止めることができないという意味でパックマンタイプのゲームです。そのため、システムは理にかなっています(または少なくとも私はそう思います)。 だから私は2つの質問があります:1)ネットワークに遅延があるので、最初にゲームのクロックをどうやって同期させるのですか?2)それらを同期せず、それらが同じであると想定しても大丈夫ですか(私のコードはタイムゾーンに依存しません)。これは、人々が時計を変えてチートするような非常に競争の激しいゲームではありません。 ゲームはJavaとPythonでプログラミングされています(プロジェクトとして並行開発)

1
Pythonでのダックタイピング、データ検証、アサーティブプログラミング
アヒルのタイピングについて: アヒルの型付けは、メソッドと関数の本体の引数の型を常にテストするのではなく、ドキュメント、明確なコード、および正しい使用を確実にするためのテストに依存することによって支援されます。 引数の検証について(EAFP:許可よりも許しを求める方が簡単です)。ここからの適応例: ...それを行うにはよりpythonicと考えられています: def my_method(self, key): try: value = self.a_dict[member] except TypeError: # do something else これは、コードを使用する他のユーザーが実際の辞書やサブクラスを使用する必要がないことを意味します。マッピングインターフェースを実装する任意のオブジェクトを使用できます。 残念ながら、実際にはそれほど簡単ではありません。上記の例のメンバーが整数の場合はどうなりますか?整数は不変です。そのため、それらを辞書のキーとして使用することは完全に合理的です。ただし、シーケンス型オブジェクトのインデックス付けにも使用されます。メンバーが偶然整数の場合、例2ではリストと文字列、および辞書を通過できます。 断定的なプログラミングについて: アサーションは、プログラムの内部状態がプログラマが期待したとおりであることを確認する体系的な方法であり、バグをキャッチすることを目的としています。特に、コードの記述中に行われた誤った仮定や、他のプログラマによるインターフェイスの悪用をキャッチするのに適しています。さらに、プログラマーの想定を明確にすることで、インラインドキュメントとしてある程度の役割を果たすことができます。(「明示的は暗黙的よりも優れています。」) 上記の概念は競合する場合があるため、データの検証をまったく行わないか、強力な検証を行うか、またはアサートを使用するかを選択するときは、次の要因を考慮します。 強力な検証。強力な検証とはApiError、たとえばカスタム例外を発生させることです。関数/メソッドがパブリックAPIの一部である場合は、引数を検証して、予期しないタイプに関する適切なエラーメッセージを表示することをお勧めします。タイプをチェックすることで、のみを使用することを意味するのではなくisinstance、渡されたオブジェクトが必要なインターフェース(ダックタイピング)をサポートするかどうかも確認します。APIをドキュメント化し、予想されるタイプを指定し、ユーザーが関数を予期しない方法で使用する可能性がある場合、想定を確認すると安全です。私は通常使用isinstanceし、後で他のタイプやアヒルをサポートしたい場合は、検証ロジックを変更します。 断定的なプログラミング。私のコードが新しい場合、私はアサートをたくさん使います。これに関するあなたのアドバイスは何ですか?後でコードからアサーションを削除しますか? 私の関数/メソッドがAPIの一部ではないが、自分で記述、調査、テストしていない他のコードに引数の一部を渡す場合、呼び出されたインターフェイスに従って多くのアサーションを実行します。これの背後にある私のロジック-私のコードでよりよく失敗し、スタックトレースのどこかで10レベル深く、理解できないエラーが発生するため、多くのデバッグを行い、とにかくアサートをコードに追加する必要があります。 型/値検証をいつ使用するべきか、または使用しないべきかについてのコメントとアドバイスは断言しますか?質問の構成が最適ではないため申し訳ありません。 たとえばCustomer、SQLAlchemy宣言モデルである次の関数を考えてみます。 def add_customer(self, customer): """Save new customer into the database. @param customer: Customer instance, whose id is None @return: merged into global session customer …

3
キューを使用したPythonマルチプロセッシングとZeroMQ IPC
ZeroMQを使用してPythonアプリケーションを作成し、ZGuideで説明されているMajordomoパターンのバリエーションを実装するのに忙しい。 労働者とクライアントの仲介者としてブローカーを持っています。入ってくるすべてのリクエストに対して、いくつかの大規模なロギングを実行したいのですが、ブローカーがそのために時間を浪費したくありません。ブローカーはそのロギング要求を別のものに渡す必要があります。 私は2つの方法を考えました:- ロギング専用のワーカーを作成し、ZeroMQ IPCトランスポートを使用する キューでマルチプロセッシングを使用する その点でどちらがより良いか、より速いかわかりません。最初のオプションでは、通常のワーカーで既に使用している現在のワーカー基本クラスを使用できますが、2番目のオプションの方が実装が早いようです。 上記についてのアドバイスやコメント、あるいは別の解決策が欲しいのですが。

5
複数のif-elseでフラグを処理する方法
私のコードや他の人には、これが頻繁に見られるようです。それについてひどく間違っているように見えることについては何もありませんが、それはより良くできるように見えるので私を困らせます。Caseステートメントはもう少し理にかなっていると思いますが、多くの場合、変数はCaseステートメントではうまく機能しないか、まったく機能しないタイプです(言語によって異なります)。 If variable == A if (Flag == true) doFooA() else doFooA2 else if variable == B if (Flag == true) doFooB() else doFooB2 else if variable == C if (Flag == true) doFooC() else doFooC2 これを「因数分解」する方法は複数あるようです。たとえば、if-elsesの2つのセットで、1つのセットがFlag == trueのときに処理します。 これを因数分解する「良い方法」はありますか、またはこのif-elseアルゴリズムが発生した場合、通常は何か間違っていることを意味していますか?

6
SprintレビューでUIのない​​ソフトウェアをどのようにデモしますか?
基本的にはスクラムに従って、アジャイルなソフトウェア開発を行っています。私たちはスプリントレビューを行おうとしていますが、難しいと感じています。私たちのソフトウェアは多くのデータ処理を行っており、ストーリーはしばしばこれに関するさまざまなルールを変更することについてです。 UIまたは目に見えるワークフローの変更がない場合にスプリントで発生した変更をデモするためのいくつかのオプションは何ですか?その代わり、変更は数十分または数時間かかることもある処理ジョブの微妙なビジネスルールです?
10 agile  scrum  sprint 

1
github README.mdにはどのような情報を含める必要がありますか?
github READMEにどのような情報が表示されると思いますか? すべてをREADMEに入れますか?すなわち 前書き 取り付け バージョン ユーザーガイド 実装 テスト中 関連資料 または、README(紹介、インストール、バージョン)に特定のものを入れて、他の情報をGithub wikiに配置するのが最適でしょうか。

2
プロトタイプを作成するときにコンストラクターの使用が推奨されないのはなぜですか?
背景: JavaScriptでは、各オブジェクトタイプのコンストラクター関数にprototypeプロパティがあります。prototypeオブジェクトを参照する、そのプロトタイプチェーン内の次のステップアップとしてそれぞれ構成されたオブジェクトの使用。あるタイプを別のタイプから組み込みたい場合prototypeは、子タイプのを親タイプの新しいインスタンスに設定できます。 例えば: var Parent = function() { /* constructor business */ } Parent.prototype.parentProp = "some parent property"; var Child = function() { /* constructor business */ } Child.prototype = /*** !! Some prototype object goes here !! ***/ 私の質問はSome prototype object goes here、上記のコードの「」の場所にどのコードを配置する必要があるかを尋ねています。私の最初の本能は親のインスタンス(つまりnew Parent())を構築することですが、これはあるオブジェクトのプロトタイプを別のオブジェクトのプロトタイプにコピーする安全な方法ですか?、1人のユーザーが書き込みます: いいえ、new bar()プロトタイプオブジェクトには使用しないでください。 (...これは多くのSOの回答やコメントで見た意見ですが、これが現時点で手にしている唯一の例です。) もう1つのオプションは、Object.create(Parent.prototype)として使用することChild.prototypeです。私の知る限り、これによって新しいParentインスタンスも作成されますが、Parentコンストラクターは実行されません。 親タイプからプロトタイプオブジェクトを生成するときにコンストラクタ関数の実行を回避する必要がある理由を誰かが説明できますか?(おそらく複数の継承レベルで)発生するいくつかの重大な技術的問題はありますか?または、そのようなパターンは、プロトタイプのベストプラクティスと衝突するコンストラクタの誤用ですか(たとえば、プロトタイプの作成時にコンストラクタを実行すると、懸念の分離に違反します)?

2
フレームワークやライブラリを必要とせずに、node.jsでコンテンツをどのように提供しますか?
node.jsを学び、webアプリケーションを作成しようとしています。node.jsのみを使用して作成するように最善を尽くしていますが、プロセスを説明するリソースと例を見つけるのが非常に困難です他のフレームワークやライブラリを使用せずに。 具体的には、ハードコーディングされた文字列変数を使用せずに、HTMLおよびCSSコンテンツを提供し、node.jsだけを使用してHTMLおよびCSSファイルを動的に提供するにはどうすればよいですか?
10 node.js 

1
java.utilパッケージのスタックのオブジェクト制約言語(OCL)
私は試験が近づいています。私は過去の論文を調べて、何が期待できるかを考えています。私は次のものに少しこだわっていて、誰かがいくつかの例の答えを出すことができれば本当に感謝します。 次の各操作(java.utilパッケージのStackクラスに含まれる)のOCLに前提条件と事後条件を記述します。 (1)ブールempty()-このスタックが空かどうかをテストします (2)E peek()-スタックから削除せずに、このスタックの最上部にあるオブジェクトを調べます (3)E pop()-このスタックの一番上のオブジェクトを削除し、そのオブジェクトをこの操作の値として返します (4)E push(E item)-アイテムをこのスタックの一番上にプッシュします ここで、Eはスタック内の要素のタイプを示します。 私の試みは次のとおりです: Boolean empty() pre: none post: self -> IsEmpty() = true //should this be result -> IsEmpty() = true because it returns a boolean value? E peek() pre: self -> NotEmpty() = true post: result = ??? // I …
10 design  languages  object  ocl 

5
複数のエクスポートタイプ用の堅牢なアーキテクチャを設計していますか?
設計している次の機能のパターンまたはアーキテクチャガイダンスを探しています。基本的に、これは複数のエクスポートターゲットを備えたエクスポート機能であり、新しいエクスポートターゲットをプラグインする際に多くのコア変更を必要としない場合に十分に汎用的にする方法を探しています。エクスポートターゲットでは、PDF、PowerPointプレゼンテーション、Wordドキュメント、RSSなど、さまざまな種類の出力を単に参照しています。JSONとXMLで表されるデータの基本セットがあります。このデータは、画像(任意の数またはエクスポートタイプ(PNG、JPG、GIFなど)を使用)、グラフ、テキスト表現、表などを作成するために使用されます。 私は、すべてのレンダリングとレイアウトを、さらにエクスポートターゲットの追加を処理するある種のレンダリングまたはレイアウトエンジンに抽象化する方法を見つけようとしています。これにどのように取り組むかについてのヘルプ/提案/リソースは大歓迎です。前もって感謝します。 私が達成しようとしていることを図で表したもの。

1
制作用のHaskell言語拡張機能を学ぶ必要性
Haskellのコア言語は本当にシンプルです。オブジェクト指向のバックグラウンドから来て、主な困難は純粋な機能パラダイムに適応することです。 「基本的な」Haskellを学習している間、私は常に言語拡張をCSの人々のためのおもちゃとして、または言語の将来のバージョン(from future import ???Pythonなど)の実験として考えてきました。 しかし、YesodなどのWebフレームワークを見始めたとき、多くのソースファイルには3〜4個の拡張子が必要であることがわかりました。一部は非常にシンプルに見えます(StringOverload)。その他は本当に威圧的です(GADT、タイプファミリエ、テンプレートハスケル)。彼らのドキュメンテーションは、新しい図書館を「ただ」学ぶことを期待している誰かにとって怖い研究論文にリンクしています。 Haskellで生産的になるためにGHC言語拡張を学ぶ必要はありますか?もしあなたが本番アプリケーションのためにHaskell開発者を雇うとしたら、そのような知識を求めますか?
10 haskell 

5
効果的なチーム会議
私は、約20人の技術者がいる会社の8人のプログラマーのチームのチームリーダーです。彼らはさまざまなプロジェクトに取り組んでいます。これらのプロジェクトには、私の管理下にない他のチームの人々も含まれます。私の組織は適切なアジャイル開発を行っておらず、変更に対してある程度抵抗力がありますが、私はチーム内でスタンドアップミーティングを毎日開催しており、全員が役に立っていて、誰もが関与しており、 10〜15分。また、私は毎週、チームメンバー全員と個別のキャッチアップを行い、さまざまな一般的なトピック(技術的および非技術的の両方)と、さまざまな臨時のトピックミーティングについて詳細に話し合っています。 しかし、私が苦労しているのは、毎週のチームミーティングです。それは蒸気を失いつつあり、私は人々を興味を保つことができませんでした。 2週間または1か月の会議にする必要がある場合でも、私はまだ長い会議を開催したいと思います。目的は、スタンドアップ会議では時間を要するために行うことができないさまざまなトピックについて話し合うことでした。私からの更新には、彼らが取り組んでいる現在のすべてのプロジェクトの概要(スケジュールどおり、さまざまな遅延など)、方向の変更、将来のプロジェクト、開発プロセスの変更などが含まれます。私からの講義、そして少なくとも2人は明らかに除外され、残りはせいぜい穏やかな関心を持っています。 私は彼らに彼らの週について話すようにさせることによって人々をより魅力的にさせようとしました、しかし8人の人々でそれは長い時間がかかります(そして一部の彼らの仕事はそれほど多くを越えないため)、残りのチームのほとんどはそうします彼らの同僚がより詳細に取り組んでいることを気にしないでください(彼らはスタンドアップ中に高レベルの概要を取得します)。 だから、これらのミーティングの間、少なくとも一部の人々は非常に退屈していて、私がこれらを保持し続けるのはほとんど恥ずかしいです。それは私たちの活気に満ちた朝のスタンドアップミーティングとは全く対照的です。 人々の関心と関心を維持するために私ができることについて何かアドバイスはありますか?そして、どうすれば私からの独り言ではなく、みんなに物事を提示したり、全員を巻き込んだディスカッションを始めたりすることができますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.