ソフトウェア工学

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

2
無効なフォーム送信でのPOST /リダイレクト/ GET?
Web開発の分野では、フォーム送信のフィールドが無効な場合にもPOST / Redirect / GETを実行することをお勧めしますか? 通常、この場合、機密性の高いトランザクションは発生しません。ただし、それにもかかわらず、POST / Redirect / GETパターンを利用することは依然として良い習慣であるという主張をすることができますか?

7
HTTPS経由の認証はアプリケーションを遅くしますか?
WebアプリケーションとRESTful Webサービスを構築しています。 Webサービスへのリクエストを認証する最良の方法に関するさまざまな記事を読んでいます。 私にとって最良のオプションは、HTTP基本認証を使用することです。私が読んだほとんどすべての記事は、認証はSSLまたは同等のもので暗号化されるべきだと言っています。 私はこれが何を含むのか完全にはわかりません。これは、Webサービス全体が安全なサーバー上にある必要があるということですか?これは遅くなりますか?

4
読み取り専用オブジェクトを返すベストプラクティス
C#でのOOPに関する「ベストプラクティス」の質問があります(ただし、すべての言語に当てはまります)。 たとえば、プロパティアクセサを介して、パブリックに公開されるオブジェクトを含むライブラリクラスを持つことを検討してください。 class A { // Note: List is just example, I am interested in objects in general. private List<string> _items = new List<string>() { "hello" } public List<string> Items { get { // Option A (not read-only), can be modified from outside: return _items; // Option B (sort-of read-only): …

1
CSSが変数と階層をネイティブにサポートしないのはなぜですか?
私はUI開発は初めてですが、CSSがどのように機能するかについて非常に不快に感じています。 私のユースケースは、特定のスタイルをdivページの特定の内部に適用したかったということです。 CSSの試行: div.class1 { font: normal 12px arial, helvetica, sans-serif; font-color: #f30; } div.class1 div.class2 { border: 1px solid #f30; } より少ない試み: @red: #f30; @font-family: arial, helvetica, sans-serif; div.class1 { font: normal 12px @font-family; font-color: @red; div.class2 { border: 1px solid @red; } それは繰り返すようにあなたを強制ので、CSSのバージョンでは、バグを誘発することができます#f30&div.class2あなたは階層変数の再利用を実現しようとするたびに。 私の質問: なぜCSSが物事を難しくしているのですか? LESSは特別なことは何もしません-明らかな改善を行い、CSSに変換するだけですか? そのような冗長なコーディングスタイルを促進するために、CSSはユーザーを動機づけたいと考えています。 CSSはLESSと同じであると強く信じています。確かに、CSSで物事がそのように行われる理由の明らかな利点を見落としています。これはレガシーな問題だと思っていましたが、CSS3でこれを解決しようとする試みが見られなかったときは驚きました。 …
11 coding-style  css  ui  css3 


1
Erlangはどのような意味のある方法で並行プログラミングの競合状態を防ぎますか?
Erlangの並行性について読むと、Akka並行性ツールキットを思い出します。どちらも、競合状態を防止または制限するツールを提供します。ただし、Akkaツールキットを使用すると、可変データへのリンクを他のプロセスに送信できますが、これはまだ安全ではありません。Akkaは便利なツールであると考えていますが、競合状態、デッドロック、飢starにつながるオブジェクトやデータへの順不同のアクセスに対する保護は提供しません。JavaまたはC#がC ++で記述できるほとんどの種類のメモリリークの書き込みから保護する方法で、安全でないコードを書くことを妨げません(ガベージコレクターをだましてJavaでメモリリークを作成できますが、割り当てたすべてのバイトを解放することを覚えておく必要があるよりも問題があります)。 Erlangは、並行プログラミングのある程度の正確性、パフォーマンス、および堅牢性を保証しますか?オペレーティングシステムは、システムリソースにアクセスするときに保護を提供すると思います(ドライバーライターが仕事を上手く行ったと仮定)。ACIDデータベースは、読み取りと更新の保護を提供します。これは解決可能な問題のようです。または、一般的な安全なソリューションは、並行性が提供するパフォーマンスの向上を消去しますか?他の言語またはツールキットは、Erlangが提供する(または提供しない)並行安全性を提供しますか? これは、どのプログラミング言語が見つけにくいバグをほとんど生成しないかに対する@ user1249の回答に対する@Malfistのコメントに対する追加の質問ですか?。

2
C#仕様のセクションの解釈が必要
私はC#仕様を読んでいます。セグメントで説明を使用できます: C#には統一型システムがあります。intやdoubleなどのプリミティブ型を含むすべてのC#型は、単一のルートオブジェクト型を継承します。したがって、すべてのタイプは一連の共通操作を共有し、任意のタイプの値を一貫した方法で格納、転送、および操作できます。さらに、C#はユーザー定義の参照型と値型の両方をサポートしているため、オブジェクトの動的な割り当てと軽量構造のインラインストレージが可能です。 この文脈で「軽量構造のインラインストレージ」とはどういう意味ですか?

5
Javaアプリケーションでランタイム例外をスローする
私は請負業者として、テクニカルリードの役割でクライアント用のエンタープライズJavaアプリケーションを設計しています。このアプリケーションはエンドユーザーによって使用され、退社時にアプリケーションをサポートするサポートチームが存在します。 私が一緒に作業している他のテクニカルリードは、例外処理によってコードがダーティになるという印象を受けています。システムはチェックされていない例外を処理する必要がないように、チェックされた例外をサービス層からのみスローし、残りのコードは他のすべての層からランタイム例外をスローする必要があります。 ビジネスアプリケーションで未チェックの例外をスローする必要はありますか? ランタイム例外に関する過去の私の経験から: 1)チェックされていない例外は、Javadocにも表示されないため、コードを予測不能にします。 2)ビジネスアプリケーションで未チェックの例外をスローするのは意味がありません。スローしてユーザーの顔にまっすぐに進むと、どのようにユーザーに説明するのですか?500 -Internal Error. Contact Administratorエンドユーザーにとっても、アプリケーションを管理するサポートチームにとっても何の意味もないことを示すWebアプリケーションを十分に見てきました。 3)ランタイム例外をスローすると、例外をスローするクラスのユーザーはソースコードを調べてデバッグし、例外がスローされた理由を確認することが強制されます。これは、実行時例外のJavadocが偶然見事に文書化されている場合にのみ回避できますが、これは決して事実ではありません。

3
低遅延Unix / Linux
ほとんどの低レイテンシ/高頻度のプログラミングジョブ(ジョブの仕様に基づく)は、UNIXプラットフォームに実装されているようです。多くの仕様で、彼らは「低遅延linux」タイプの経験を持つ人々に特別な要求をしています。 これがリアルタイムのLinux OSを意味しないと仮定すると、人々はこれが何を指しているのか私に助けを与えることができますか?CPUアフィニティをスレッドに設定できることは知っていますが、それ以上のことを要求していると思います。 カーネルのチューニング?(とにかく、ソーラーフレアのようなメーカーはカーネルバイパスネットワークカードを製造していると聞きましたが)? DMAまたはプロセス間の共有メモリはどうですか?人々が私に簡単なアイデアを与えてくれれば、Googleで調査をすることができます。 (この質問には、おそらく高頻度取引に精通した人が必要です)
11 c++  c  performance  linux  latency 

3
遠心性/求心性カップリングが良いか悪いか
今週はソフトウェアパターン試験があり、研究対象のトピックの1つは、遠心性カップリングと遠心性カップリングです。 パッケージが他の多くのタイプに依存する場合、そのパッケージのCe(遠心性結合)が高いことを理解しています。 例えば: class Car{ Engine engine; Wheel wheel; Body body; } このクラスは、エンジン、ホイール、およびボディのタイプに依存するため、遠心性の高いカップリングになります。 一方、他のいくつかのパッケージ(車、飛行機、自転車)に依存している場合、タイプ「ホイール」のCa(求心性結合)は高くなります。 私たちの試験で考えられる質問の1つは、Efferent / Afferentカップリングがいつ良いか悪いかです。論理的には、プログラムが高いEfferent / Afferentカップリングのパッケージ/クラスを必要とするため、これは私には奇妙に思えます。 誰かが、高遠心性または求心性結合がいつ/どこで良い/悪いかの例を持っていますか?? ありがとう!

2
「for」ループのカテゴリ
私は、Cコードの本体が分析されていたいくつかの研究を読んで一度覚えて、との調査結果は、大多数のことだったforの機能的等価物に対応し、ループが5程度のカテゴリーに分類することができmap、filter、fold、など 私はもうこの論文/記事を見つけることができないようです。誰かが私を指すことができますか?
11 research 

2
Javaの新しい開発は、ScalaやClojureなどの言語との相互運用性にどのように影響しますか?
私の知る限り、ScalaとClojureはどちらも新しい言語として設計されています。 JVMに依存する ScalaおよびClojureコード内でJavaクラスを使用できるという意味で、Javaコードと簡単に統合できます。 Java 8(以降のバージョンのJavaではさらに強力になる可能性があります)から、Java言語のセマンティクスに変更が加えられます。 これらの変更がJavaとScala / Clojureの間の相互運用性にどのように影響し、どのような結果になるかを尋ねたかったのです。たとえば、Java 8のラムダはオブジェクトではないため(ここを参照)、ScalaとClojureはオブジェクトではないJava値を処理する必要がある場合があります。これは問題になりますか? 次のシナリオを考えることができます。 ScalaまたはClojure言語は、新しいJavaセマンティクス(新しい非オブジェクト値を処理する)に適応するように拡張され、Javaとの相互運用性をサポートします。 ScalaまたはClojure言語は拡張されません。これは、関数値などの新しいJava機能を既存の概念にマッピングできる場合にのみ可能です。たとえば、Scalaでは関数もオブジェクトであるため、Java関数はScalaから見えるようになったときに再び何らかのオブジェクトにラップされると思います。 ScalaまたはClojure言語は、最新のJavaの開発に従うことなく、引き続きJava 6または7までの相互運用性をサポートします。これには、Javaのより保守的で安定したブランチに基づいてこれらの言語を使用できるように、Javaの古いバージョンが(少なくともOpenJDKまたは別のプロジェクトで)サポートされている必要があります。 要約:Javaの将来の開発がScalaやClojureなどの言語に影響を与え、Javaとの相互運用性を維持できると期待できますか?このトピックに関する進行中の議論は既にありますか? 注意 Scala、Clojure、およびその他のJVMベースの言語では、実装をJVMの新しいバージョンに更新するのに大きな問題はないことを想像できます(新しいJVM機能により、この実装がさらに簡単になります)。私の質問は、言語としてのJavaの機能と、JVMベースの言語が最新のJVMで実行されるかどうかではなく、他のJVM言語がこれらの新機能を「見る」/使用する方法に焦点を当てています。
11 java  scala  clojure 

2
仕事をコンピューターのネットワークに分割する方法は?
次のようなシナリオを想像してください。大量のデータを生成する中央コンピューターがあるとします。このデータは何らかの処理を経る必要がありますが、残念ながら生成には時間がかかります。処理がリアルタイムに追いつくために、より多くのスレーブコンピューターを接続します。 さらに、ネットワークの中間ジョブからスレーブが脱落する可能性や、追加のスレーブが追加される可能性を考慮する必要があります。中央コンピューターは、すべてのジョブが満足のいくように終了し、スレーブによってドロップされたジョブが別のジョブに再タスクされることを保証する必要があります。 主な質問は、これを達成するためにどのアプローチを使用する必要があるかです。 しかし、おそらく次のことが答えを見つけるのに役立ちます:私がやろうとしていることに名前やデザインパターンがありますか? これらのコンピューターを相互に通信させるという目標を達成するには、どのような知識領域が必要ですか?(例えば、私がある程度の知識を持っているデータベースで十分でしょうか、またはこれにはまだ知識のないソケットが含まれますか?) そのようなシステムの例はありますか?主な質問は少し一般的ですので、開始点/参照点があると良いでしょう。 注:私はc ++とWindowsの制約を想定しているので、その方向を指す解決策が評価されます。
11 c++  windows  networks 

5
JSONを使用するためだけにJSONを使用する必要があります
PHP / MySQlバックエンドを使用して、学習用のブログサイトを構築しています。すべてのユーザー入力は、POST要求で送信されたフォームで処理されます。 JSONを使用することで、機能がよりクリーンになり、機能の維持や追加が容易になりますか?または、理由もなく交換フォーマットを追加するだけですか? それで、本質的に、JSONを使用することでどの機能が最もよく実装されるでしょうか?
11 php  json 

3
ステートレスについての意味的な手がかりとしての「静的」?
私は最近、Javaの中規模プロジェクトをリファクタリングして、戻って単体テストを追加しました。シングルトンとスタティックをモックするのがどれほど苦痛であるかに気付いたとき、私はついにこれまで読んでいたものをついに「手に入れました」。(私は経験から学ぶ必要がある人の一人です。まあ。) ですから、Springを使用してオブジェクトを作成し、それらをワイヤリングするようになったのでstatic、左右のキーワードを取り除きました。(潜在的にそれをモックしたい場合、Math.abs()と同じ意味で本当に静的ではありませんよね?)問題は、staticメソッドが依存していないことを示すために使用する習慣になったことです任意のオブジェクト状態。例えば: //Before import com.thirdparty.ThirdPartyLibrary.Thingy; public class ThirdPartyLibraryWrapper { public static Thingy newThingy(InputType input) { new Thingy.Builder().withInput(input).alwaysFrobnicate().build(); } } //called as... ThirdPartyLibraryWrapper.newThingy(input); //After public class ThirdPartyFactory { public Thingy newThingy(InputType input) { new Thingy.Builder().withInput(input).alwaysFrobnicate().build(); } } //called as... thirdPartyFactoryInstance.newThingy(input); だから、ここが微妙な感覚になります。古い方法が好きだったのは、Math.sin(x)と同様に、ThirdPartyLibraryWrapper.newThingy(x)が毎回同じ方法で同じことをしたことを大文字が教えてくれたからです。オブジェクトに要求することをオブジェクトがどのように行うかを変更するオブジェクトの状態はありません。ここで私が検討しているいくつかの可能な答えがあります。 誰もこのように感じていないので、私には何か問題があります。たぶん、オブジェクト指向のやり方を実際に内部化していないだけかもしれません!たぶん私はJavaで書いていますが、FORTRANなどで考えています。(私がFORTRANを書いたことがないので、どれが印象的でしょう。) コードについての推論を目的として、不変性の一種のプロキシとして静的性を使用しているのかもしれません。そうは言っても、ステートフルなものとそうでないものを知るためにコードを維持するために、コードに手がかり はありますか? おそらく、良いオブジェクトのメタファーを選択した場合、これは無料で提供されるはずです。例えばthingyWrapper、Thingyそれ自体が可変である可能性のあるラップされた状態に依存していないように聞こえます。同様に、thingyFactoryサウンドは不変である必要がありますが、作成時に選択されるさまざまな戦略を持つことができます。

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