ソフトウェア工学

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

1
これはHaskellメイン関数の有効なデザインパターンですか?
いくつかのHaskellアプリケーションを開発した後、純粋でないコードと完全なコードから、不純なコードと失敗する可能性のある(部分)関数を厳密に分離していることに気付きました。これらの取り組みにより、アプリケーションに関連するメンテナンスコストが大幅に削減されました。私は、時間の経過とともに、この分離を実施するために同じ高レベルの構造に依存していることに気づきました。main 一般的に、私mainは次のような構造になります。 import System.Environment data ProgramParameters = P () data ComputationResult = I () main :: IO () main = getArgs -- Collect arguments >>= andOrGetUserInput -- Collect user input >>= impureOrFailableComputations -- Possible non-recoverable error(s) >>= either -- "Branch" putStrLn -- Print Any Failure(s) pureNotFailableComputations -- Finish the work …

1
複数の著作権者のBSDライセンステンプレートに記入するにはどうすればよいですか?
複数の著作権者がいるオープンソースプロジェクトに参加しています。プロジェクトは、3条項BSDライセンスの下でライセンスされています。残念ながら、個々のコードファイルには元の所有者(著作権ヘッダー)への参照は含まれていませんが、プロジェクト全体として、BSDライセンステキストを含む単一のファイルLICENSE.txtが提供されています。プロジェクトには、すべての著作権者を識別する個別のファイルも含まれています。 ただし、私は実用的な質問に苦労しています。BSDライセンスの最初の行は、著作権所有者を識別するためのものです。 Copyright (c) <year>, <copyright holder> 私たちの場合、著作権所有者は1人ではありません(少なくともプロジェクト全体では)。では、具体的に言えば、ここに何を入れればよいのでしょうか。ライセンス自体が「上記の著作権表示」を保持することを指しているので、私はそれを省略することはできません。ここにすべての著作権者をリストする、またはおそらく著作権者の外部リストを参照するための推奨される方法/形式はありますか?ちなみに私たちは10人以上の貢献者について話しているので、その一部は個人、一部の企業であるため、短いリストではありません。 私は他のいくつかのプロジェクトがどのようにこれを行うかを見ました(例:Linux)、ほとんどの場合<copyright owner>、ライセンスにビットが含まれていないGPLを使用することがわかりました。
8 licensing  bsd 

1
ASP.NET MVCアプリケーションをAmazon AWSに移動する
ASP.NET MVCアプリケーションを作成しましたが、開発サーバーからAmazon AWSに移動したいと思います。私の質問は、ASP.NETアプリケーションをAmazon AWSにどのように移行するのですか?これが私がこれまでに調査/発見したものです: セッションはインスタンス間で機能しないため、DynamoDBまたはmemcachedを使用して状態を保存する必要があります。Amazon ElastiCloudを使用してセッション状態の問題を解決する方法として、Enyimなどのさまざまなクライアントを調べました。 Amazonには、SMTP電子メール用のWebサービスがあります。そのため、Amazon SESを介して送信するようにSMTPメールを送信するコードを作り直し、DNSレコードを変更して、受信メールを別のメールサーバーに転送する必要があります。 ユーザーIDを管理するためのSDK(Amazon IAM)があります。このWebサービスを使用するには、認証コードを変更する必要があります。 おそらく私が知らないもっと多くの点があるでしょう。では、MVCアプリをAWSに移行するにはどうすればよいですか?

3
要求されたデータが多すぎる場合のHTTP要求に対する適切な応答
広告キャンペーンのトラッカーデータをリクエストできる広告配信プラットフォーム用のAPIを構築しています。多くの場合、キャンペーンは数億のリクエストを超えるため、テラバイトに相当するデータが大量に存在します。したがって、APIの利用者が一度に大量のデータをリクエストすること(リクエストがタイムアウトするなど)を防ぐ必要がありますが、それを行うためのベストプラクティスが何かはわかりません。 私がすでに特定したオプションは次のとおりです。 データのどのセクションが必要かを示す追加のパラメーターをリクエストに追加する データを切り捨て、どういうわけか、より具体的なフィルターを使用する必要があることをクライアントに伝えます HTTPステータスコード413で応答します(ただし、これは応答ではなく、大きなリクエスト本文のようです) ストリーミングAPIへの切り替え(TwitterのストリーミングAPIなど) しかし私の質問は、このような状況に対する標準的な実践/適切な対応は何ですか? 注:DoS攻撃はパブリックAPIではないため、それほど心配する必要はありません。

2
Rcppに依存するパッケージにはGPLライセンスが必要ですか?
計算にR(GPL)を使用する商用パッケージを書いています。GPLよくある質問は明確にGPLのプログラミング言語の通訳が「プログラム」(Rコードのテキストファイル)にライセンス制限を課さないと述べています。ここまでは順調ですね。 パッケージの一部は、GPLも使用するRcppを使用してコンパイルされます。FAQの次の段落は次のとおりです。 ただし、インタープリターが他の機能(ライブラリーであることが多いが必ずしもそうではない)に「バインディング」を提供するように拡張されている場合、インタープリタープログラムは、これらのバインディングを通じて使用する機能に効果的にリンクされます。 RがRcppライブラリ(Rcpp.dllwindowsパッケージ内)へのバインディングを提供していると解釈できます。安全な仮定は、これが私のコードをGPLで汚すということですが、これは本当に正しい結論ですか? 私の不確実性の一部は、私のコードとの間のリンクの緊密さですRcpp.dll。dllにはRcppへの参照がありますが、これらが開発環境への参照であるか、Rcppライブラリ内のシンボルへの呼び出しへの参照であるかを知るには十分な熟練度がありません。前者の場合は、RcppライブラリがライブラリではなくRによってリンクされていると思います。ただし、Rcppはコードの作成と実行を簡素化するための接着剤(実際には砂糖)を提供しているので、後者を疑っています。 コード配布には、GPLに関連する議論が無数にあります。いくつか例を挙げると: 仮想マシンの内部 知的財産の露出 GPL依存関係の結果 商用ソフトウェアでのGPLライブラリの使用 注意:私は一般的にOSSの大きな支持者であり、過去に開発と配布に参加しました。「コードの保護」に関する質問は、しばしばオープンソースプログラマーのハックルを引き起こし、ソフトウェア哲学についての激しい議論をしばしば引き起こします。私は双方の価値を認めており、私がその書簡と(可能であれば)法律の精神を確実に満たすことを望んでいます。ライセンスの抜け穴を探すつもりはありません。私はそれを解釈してコンテキストに入れる助けを探しています。 GPLを使用するには、Rcppに依存するRパッケージが必要ですか?
8 gpl  r 

5
原則として未定義の動作
CでもC ++でも、CまたはC ++標準に従って動作が定義されていないこの不正なプログラムは興味深いと思います。 #include <stdio.h> int foo() { int a; const int b = a; a = 555; return b; } void bar() { int x = 123; int y = 456; } int main() { bar(); const int n1 = foo(); const int n2 = foo(); const int n3 …

4
C#のソフトリアルタイムコードに対してどのような最適化を行うことができますか?
C#でソフトリアルタイムアプリケーションを作成しています。ネットワークからのハードウェア要求への応答などの特定のタスクは、特定のミリ秒以内に完了する必要があります。ただし、そうすることは100%ミッションクリティカルではありません(つまり、ほとんどの時間に時間どおりにあることを許容でき、1%は望ましくありませんが失敗ではありません)。したがって、「ソフト」な部分です。 C#はマネージ言語であり、マネージ言語はリアルタイムアプリケーションには特に適していません。ただし、C#で物事を成し遂げることができる速度、およびリフレクションやメモリ管理などの言語機能により、このアプリケーションを構築するタスクがはるかに簡単になります。 オーバーヘッドの量を減らして確定性を高めるために実行できる最適化または設計戦略はありますか?理想的には私は次の目標を持っているでしょう 「安全」になるまでガベージコレクションを遅らせる ガベージコレクターがリアルタイムプロセスに干渉することなく動作できるようにする さまざまなタスクのスレッド/プロセスの優先順位 C#でこれらを行う方法はありますか、C#を使用するときにリアルタイムに関して他に注意する点はありますか? アプリケーションのプラットフォームターゲットは、Windows 7 64ビットの.NET 4.0クライアントプロファイルです。現在はクライアントプロファイルに設定していますが、これはデフォルトのオプションであり、特別な理由で選択されませんでした。

2
単一のforループランタイム説明問題
さまざまなforループの実行時間を分析しています。知識が増えてきているので、この問題を理解したいと思っています。この問題は、まだ解明されていません。「エクササイズされる星の数」というこのエクササイズがあります。 for (int i = N; i > 1; i = i/2) System.out.println("*"); 選ぶべき答えは A: ~log N B: ~N C: ~N log N D: ~0.5N^2 答えはAであるべきと私はそれに同意するが、他の側に..ましょうと言うが、それでN = 500何を考えLog N、その後も?2.7になります。では、N=500上記の演習でそれを言うとどうなるでしょうか。それは間違いなく2.7以上の星を印刷するでしょうか?それはどのように関連していますか? forループが次のようになっていると言うのは理にかなっているからです。 for (int i = 0; i < N; i++) N星を印刷します。 私はここでこれについての説明を見つけたいと思っています。多分私はこれらすべてのことを間違って解釈し、それについて悪い方法で考えています。前もって感謝します。

2
なぜStringを(finalとして)宣言してから使用するのですか?
典型的なSpring MVCバリデータークラスでは、ErrorsオブジェクトにerrorCode値を挿入するときに、文字列(props.somefield.req)を使用した場合との違いは何ですか? errors.rejectValue("elementId", "props.somefield.req"); 宣言された静的な最後の文字列と対になる? private static final String SOMFIELD_REQ = "props.somefield.req"; ... errors.rejectValue("elementId", SOMFIELD_REQ); 少しでもパフォーマンスは向上しますか?スタックオーバーフローに関するいくつかの質問(Stringとfinal、Javaでfinal Stringを定義することは理にかなっていますか)を読みましたが、この質問の更新の質問に答えることはできませんでした。

4
インターフェイスの拡張メソッドをinterface.csファイルに含める必要がありますか?
この設定を想像してください: public interface IMass{ double Mass {get;} } public static class IMassExtension { public static double ToKg(this IMass massObject) { return massObject.Mass / 1000.0; } public static double CalculateInteractiveGravity(this IMass massObject, IMass otherMassObject) { return blah; } } 拡張クラスをインターフェースと同じファイル(つまり、IMass.cs)に配置してもよいですか、それとも別のファイル(IMassExtension.cs)に配置する必要がありますか? ここでは基本クラスは使用できません。想像してみて public class Person : Animal, IMass {} そして public class …

2
JavaScriptの文字列定数のベストプラクティス/理由[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 Java / C#のような静的言語では、コードに単独で挿入するのではなく、文字列または数値に定数を使用します。ただし、私はJavaScriptでのこの習慣を避ける傾向があります。最近では、私の周りの他の一部のコーダーがJSでこのアプローチを採用しているため、私またはおそらく彼らの推論を固める必要があると判断しました。 JavaScriptには、実際の「const」宣言構文はありません。通常は、大文字のプロパティを変更しないという非公式のポリシーで解決します。しかし、私の意見は通常、それらを完全に回避することです。それらの利点のほとんどはJavaScriptで失われるためです。Javaでは、ミススペル文字列が原因でプログラムを実行しようとしたときにプログラムが失敗します。その時点でプログラムを修正して次に進みます。両方のインスタンスが同じ定数を指している静的チェッカーを使用すると、コンパイル時に見つけることができるので、その問題を排除できます。あなたは常にあなたのスペルの正しさを発見しようとしているようしかし、JavaScriptは単純に、あらゆる場所にその問題を持っています実行時に: Library = { doThing: function() } setTimeout(function() Liberry.doThing() // No such object: Liberry }, 0); これに対する最善の安全策は、通常、「厳密な使用」です。それを好む開発者にとって、宣言されていない変数の問題をより迅速に見つけるためにそれを使用することに問題はありません。しかし、私の意見では、REST APIなどに文字列定数を提供しても、実際には何も保護されていません。もう一つの例: CompanyAPI.constants.ENROLL_URL = "/rest/enroll"; CompanyAPI.constants.FIRST_NAME = "firstName"; ajax({url: CompanyAPI.constants.ENROLL_URL, data: CompanyAPI.constants.FIRST_NAME }); // vs. ajax({url: "/rest/enroll", data: "firstName" }); ...あなたは上記を書くつもりでしたが、次にタイプミスをしました。おっと。 ajax({url: CompanyAPI.constants.ENROL_URL, data: CompanyAPI.constants.FIRS_NAME }); // vs. …

4
C#のフィールドとメソッドでプライベートを使用する必要がありますか?
私はC#に少し慣れており、次のことがわかりました。C#では、クラス内のすべてのフィールドとメソッドはデフォルトでプライベートです。これが意味すること: class MyClass { string myString } と同じです: class MyClass { private string myString } それで、それらは同じなので、フィールドとメソッドでprivateキーワードを使用する必要がありますか?多くのオンラインコードサンプルでは、​​コードでprivateキーワードを使用していますが、それはなぜですか?

2
PythonとRubyが変数の値の宣言と割り当てを区別しないのはなぜですか?
最も一般的な動的型付けスクリプト言語の2つであるPythonとRubyは、変数の宣言と変数への値の割り当ての間で構文を区別しません。 それは両方の言語であり、変数nを宣言してそれに値を割り当てることは次のようになります: n = 10 そして、後で変数に新しい値を割り当てても、まったく同じように見えます。 これにより、2つの大きな問題が発生します。 値を変更するときに変数の名前にタイプミスがあると、新しい変数が作成されてバグが発生します。 コードの意図が不明確になります。変数が最初に宣言されて使用される場所がわからないため、コードがさらに混乱する可能性があります。 私が理解していないのは、これらの言語にvar、宣言と割り当てを区別するために、宣言で使用するキーワードがない理由です。これによって言語の動的型付けが減ることはなく、欠点もありません。 変数を明示的に定義する必要がないことの利点は何ですか?

2
複雑なゲームのテスト駆動開発
暇なときにゲームのコーディングをしていますが、プログラミングに関しては、まだ初心者です。この質問がトピックから外れている場合や、他の人に役に立たない場合は、申し訳ありませんが、うまくいけば、役に立ちます。 コードの設計や、コーディングのさまざまな方法論やアプローチについての本を読むのに多くの時間を費やしてきました。この調査の過程で、私はテスト駆動開発の概念に出会います。このアイデアを支持する人々は通常、それについて非常に情熱的です。私はそれがソフトウェアを書くスピードと効率を助けることができると信じています。時間は非常に貴重なリソースであるため、プログラミングクラフトの知識を広げようとせずに、何とかやり過ごすのではなく、最善の方法で学ぶことを学びたいと思います。 とにかく、私は初心者だからといって、テスト駆動開発をゲームにどのように適用するか想像できません。この件についていくつかの記事を見つけましたが、あまり役に立ちませんでした。私が見た単体テストの例のほとんどは、非常に単純な定型の例、またはまったくゲームに似ていないソフトウェアの例です。 私自身のコーディングでは、同様の考え方でテスト駆動開発に取り組みますが、実際にはTDDとしての資格はないと確信しています。ゲームに追加する機能を実装するための最小限のコードを記述し、すぐにゲームをテストして、機能するかどうかを確認します。意図したとおりに起こらない場合は、すぐに変更を加えて、自分が望むものに近づけます。機能していないか壊れている場合、およびコードを読み取ってもバグを見つけることができない場合は、予期しない動作が見つかるまでデバッガーのメソッドを順に実行し、それを削除します。私が言おうとしているのは、ほぼすべての増分変更の後で、常にゲームをテストしているということです。テストは私の開発を推進します。「単体テスト」は私の頭の中にあります、 私の実際の質問に移ります。複雑なゲームの単体テストを作成するにはどうすればよいですか?複雑に言うと、ゲームプレイの多くの創発的な側面を意味します。つまり、ゲームプレイの本質は、プレイヤーの選択と組み合わされたゲーム内のさまざまな要素間の相互作用から生まれます。たとえば、手続き型の世界を持つローグライクなRPG。そのようなゲームのためにどんなユニットテストを書くでしょうか?このようなゲームにテスト駆動開発をどのように適用できますか?

1
新しいADTがデフォルトで静的内部クラスFragmentを作成するのはなぜですか?
正直なところ、これは新参者を混乱させるためだけに行われていると感じざるを得ません。完全なAndroid初心者によるStack Overflowのエラーのほとんどは、ほとんどの場合、静的内部クラスFragmentがあり、それがどのように機能するか、なぜそこにあるのかを理解しておらず、アクティビティを完全には理解していませんが、アクティビティを使用しようとしています何が起こっているかの背後にある概念。 認めざるを得ません。 "PlaceholderFragment"のアプローチも理解できず、静的内部クラスの使用はまったく拡張できません。あなたがしなければならない最初のことは実際のクラスを外で作成することです-しかし、なぜ初心者はそれをしなければならないのですか? 次の単純なフラグメントベースのandroidプロジェクト構造に似たプロジェクト構造を使用した場合、これははるかに効率的であると思います。 src 全パッケージ名 アクティビティ 主な活動 断片 FirstFragment SecondFragment 解像度 レイアウト 値 ... のコードで src / wholepackagename / activity / MainActivity: public class MainActivity extends FragmentActivity implements FirstFragment.Callback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getSupportFragmentManager().addOnBackStackChangedListener(new OnBackStackChangedListener() { public void onBackStackChanged() { int backCount = …

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