ソフトウェア工学

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

1
時間の相関と周波数空間の乗算の計算の複雑さ
画像処理技術(パターン認識など)の2次元相関を使用しています。時間空間での相関よりも周波数空間での乗算を使用するタイミングをどのように判断するかについて、理論的なアプローチがあるかどうか疑問に思っていました。2 x周波数空間のサイズの方が明らかに高速ですが、11などの小さく素数なサイズはどうでしょうか。

3
Stack Overflowなどのサポートサイトは、有料サポートのオープンソースモデルを混乱させますか?
市場での関連性を維持するために、ソフトウェア会社の新しいビジネスモデルを調査しています。有料サポート付きのオープンソースモデルは当社製品に適しているように見えますが、Stackのようなサイトで一流のヘルプが無料ですぐに利用できる時代に、有料サポートモデルが実行可能かどうかについて懸念がありますExchangeネットワーク。 適切な事例-昨年、Win 7ライセンスと新しいハードウェアの支払いを望まなかったため、従業員をUbuntuに移動しました(さらに、モノラルプラットフォームは非常に魅力的でした)。私のスタッフにはLinuxの経験はありませんでしたが、AskUbuntu、Stack Overflow、および「For Dummies」の書籍をいくつか使用して、約120日間で相対的な能力を達成することができました。Ubuntuコンサルタントを7日間雇用してトレーニングとサポートを提供しましたが、それを超えると、あらゆる種類の有料の専門知識に0.00ドルを費やしました。 デューデリジェンスに関しては、小規模な顧客の1人と3か月間のフリーミアムペイドサポートモデルのベータ版を実行し、平凡な結果を達成しました。私たちのソフトウェアは非常に安定していて使いやすいので、顧客が多くの有料サポートを必要としなかったので、私はそれを考えたいと思いますが、私たちは、SLAの条件を、 Ubuntu。 私が検討している動きに関連する考え、アドバイス、または経験はありますか?何が機能し、何が機能しなかったのか、など?

7
再帰関数に反復/ループを含めることはできますか?
私は再帰関数について研究してきましたが、明らかに、それらは自分自身を呼び出す関数であり、反復/ループを使用しません(そうでなければ、再帰関数ではありません)。 しかし、例(8クイーンの再帰問題)のためにWebをサーフィンしているときに、この関数が見つかりました。 private boolean placeQueen(int rows, int queens, int n) { boolean result = false; if (row < n) { while ((queens[row] < n - 1) && !result) { queens[row]++; if (verify(row,queens,n)) { ok = placeQueen(row + 1,queens,n); } } if (!result) { queens[row] = -1; } }else{ result = …
12 java  recursion 

4
新しいオブジェクトに割り当てるときのスイッチまたは辞書
最近、ステートメントのDictionaries代わりに1-1の関係をマッピングすることを好むようになりましたSwitch。書くのが少し速く、精神的に処理するのが簡単だと思います。残念ながら、オブジェクトの新しいインスタンスにマッピングするとき、次のように定義したくありません。 var fooDict = new Dictionary<int, IBigObject>() { { 0, new Foo() }, // Creates an instance of Foo { 1, new Bar() }, // Creates an instance of Bar { 2, new Baz() } // Creates an instance of Baz } var quux = fooDict[0]; // quux references Foo …
12 c#  coding-style 

2
解析されたデータの自然言語処理の永続化
最近、スタンフォードのCoreNLPを使用して自然言語処理(NLP)の実験を開始しましたが、テキストマイニングアプリケーションなどのNLP解析データを保存する標準的な方法にはどのようなものがありますか? 面白いと思う方法の1つは、子を隣接リストとして保存し、再帰クエリをうまく利用することです(Postgresはこれをサポートしており、非常にうまく機能していることがわかりました)。 しかし、私は長年にわたってこの分野で働いている人々によって採用されてきた分析の種類に応じて、おそらくこれを行うための多くの標準的な方法があると思います。それでは、NLPで解析されたデータの標準的な永続化戦略とは何ですか?

3
@deprecatedのような実験的または不完全なAPIを文書化する方法は?
メソッドまたはAPIがコードベースにあるが、実装が完全ではないか、変更される可能性が高いため、使用すべきではないという意味で、「非推奨」と似ているが異なる用語はありますか?(ええ、私は知っています、これらの方法は公開すべきではありません、やだやだやだ。自分の状況を作り出したのではなく、それを最大限に活用しようとしています。) 人々は何を提案しますか?実験的、不完全、他の何か? まだ流動的なこのAPIのjavadocドキュメントを構築している場合、@ deprecatedタグを使用する必要がありますか、それともより良い規則がありますか?私にとって@deprecatedは、このAPIが古く、新しい優先メカニズムが利用可能であることを意味します。私の状況では、代替手段はありませんが、APIの一部のメソッドは終了していないため、使用しないでください。この時点では、それらを非公開にすることはできませんが、ドキュメントに明確な警告を記載したいと思います。

7
Big Oh表記は定数値に言及していません
私はプログラマーであり、アルゴリズムを読み始めたばかりです。表記法、つまり、Bog Oh、Big Omega、およびBig Thetaに完全には納得していません。その理由は、Big Ohの定義によるもので、関数f(x)が常にf(x)以上になるように関数g(x)が存在する必要があることを示しています。または、n> n0のすべての値に対してf(x)<= cn。 定義に定数値を記載しないのはなぜですか?たとえば、関数6n + 4の場合、O(n)と表記します。しかし、定義がすべての定数値に当てはまることは事実ではありません。これは、c> = 10およびn> = 1の場合にのみ有効です。cの値が6よりも小さい場合、n0の値は増加します。では、なぜ定義の一部として定数値に言及しないのでしょうか?

2
オブジェクト指向設計のアドバイスを探しています
私は産業環境でバルブを開閉するために使用されるアプリを開発しており、このような単純なことを考えていました:- public static void ValveController { public static void OpenValve(string valveName) { // Implementation to open the valve } public static void CloseValve(string valveName) { // Implementation to close the valve } } (実装は、バルブを制御するためにシリアルポートに数バイトのデータを書き込みます-バルブ名から派生した「アドレス」、およびバルブを開閉する「1」または「0」)。 別の開発者は、代わりに物理的なバルブごとに個別のクラスを作成するかどうかを尋ねました。のようなコードを書く方が良いと思いますPlasmaValve.Open()がValveController.OpenValve("plasma")、これはやり過ぎですか? また、私はいくつかの仮説的な将来の要件を念頭に置いて設計に取り組む最善の方法を疑問に思っていました: バルブの開閉に異なる値を必要とする新しいタイプのバルブ(0と1ではありません)をサポートするよう求められています。 単に「開く」または「閉じる」のではなく、0〜100の任意の位置に設定できるバルブをサポートする必要があります。 通常、この種のことには継承を使用しますが、最近、「継承を超える構成」に頭を悩まし始め、構成を使用するスリッカーソリューションがあるのではないかと考え始めました。

1
マージされたブランチの便利なgitコミットメッセージ
この質問のフォローアップとして: 自分でチームで作業している場合、ブランチをマージするときに、すべてのコミットを1つの差分にまとめてからその差分をマージすることで、有用なコミットメッセージを維持できます。そうすれば、ブランチでどのような変更が導入されたかを簡単に確認できます。また、マスターブランチを参照するときに、そのブランチで達成された機能/変更/その他を説明する1つの要約があります。 私の質問は、チームで作業するときにこれをどのように達成できますか?その状況では、ブランチはリモートリポジトリにプッシュされます。つまり、ブランチ内のすべてのコミットを1つのコミットにまとめることはできません。ブランチがパブリックである場合、マスターブランチで有用なマージコミットを1つ持つことができますか?(「有用」とは、マスター行のコミットが(1)ブランチで行われた内容の有用な要約と(2)同じものの差分を示すことを意味します。)
12 git  branching 

2
リリースノートの作成のグッドプラクティス
ソフトウェアのすべてのバージョンの配信時に、リリースノートを作成する必要があります。たとえば、リリースノートを作成するときに追加する用語の一部を次に示します。 発売日 解決したバグ それで十分ですか、それとも何かありますか?
12 release 

2
エンジニアのプロセスを分析するエレガントな方法はありますか?
コミットを測定することは不適切であるという感情がたくさんあります。 次のような、コミットよりも多くのソースを引き込もうとする研究が行われましたか? ブラウジングパターン IDEの作業(事前コミット) アイドルタイム マルチタスク これらの対策を行う簡単な方法は考えられませんが、何らかの研究が行われたかどうかは疑問です。 個人的な注意として、パフォーマンス評価にこれらを使用するかどうかに関係なく(または使用しない場合)、自分の「メトリック」を反映することは価値があると考えています。IEあなたの習慣を反映する偏りのない方法。しかし、これはQ&Aを超えた議論の問題です。

6
ゲッターとセッターを定義する順序は?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 ゲッターとセッターを定義する順序のベストプラクティスはありますか?2つのプラクティスがあるようです: ゲッター/セッターペア 最初にゲッター、次にセッター(またはその逆) ここで違いを明らかにするために、ゲッター/セッターペアのJavaの例を示します。 public class Foo { private int var1, var2, var3; public int getVar1() { return var1; } public void setVar1(int var1) { this.var1 = var1; } public int getVar2() { return var2; } public void setVar2(int var2) { this.var2 = var2; } public int getVar3() …

2
Javaプロジェクトの分離
大規模なJavaプロジェクトがあり、ビルドサイクルにmavenを使用しています。この1つのプロジェクトは広く使用されています-他のプロジェクト、さまざまなアプリケーション、その中に含まれているものと他の場所にあるもの...正直に言うと、それはちょっとした混乱です目的)、そして私はそれを少しきれいにしたいと思います。また、完全にはテストされていません(適切なユニットおよび統合テストなしで多くのビットが追加されています)。実行に時間がかかるか、実際に合格しないテストがいくつかあります...(uh-oh)-そうテストはMavenビルドサイクルでオフに切り替えられます(繰り返しますが)。 「最終」サブプロジェクト(または複数のサブプロジェクト)が必要とするさまざまなサブプロジェクトを選択できるように、この大きなプロジェクトを小さな特定のプロジェクトに分割することを考えています。 私の考えは次のとおりです。 大きなプロジェクトをさまざまなサブプロジェクトに分けると、各プロジェクトの責任が明確になります。 サブプロジェクトに分けることで、各サブプロジェクトのテストを個別にクリーンアップし、Mavenビルドサイクルでそのサブプロジェクトのテストを有効にできます。 これがビルド時間に与える影響について少し懸念しています。 大きなプロジェクトに構造を課す(つまり、小さなサブプロジェクトに入れる)と、コンパイラの速度が低下しますか? また、IDEでの編集時間にどのような影響があるかも少し懸念しています(主にIntellijを使用しています)。Intellijは依存関係ツリーを介して各プロジェクトを順番にビルドするようです。つまり、CがBに依存し、Aに依存し、Aを変更すると、Aがコンパイルしない限りBをビルドしようとしません。おそらくそれは有利ですが、たとえば、BおよびCで広く使用されているAのインターフェイスを変更すると、その変更によるすべてのエラーを修正するのに時間がかかることがわかりました... もう1つの質問は、ファクトリクラスの使用方法です。プロジェクトの一部の側面は外部jarに依存しています。時折(ありがたいことに頻繁に)これらは更新され、移行する必要があります。外部コードの正しいバージョンを指すFactoryクラスを使用してこれを処理する傾向があります(したがって、コードベース全体のすべての実装を変更する必要はありません)。 現時点ではこれはすべて大規模なプロジェクトですが、サブプロジェクトに切り替えることで、新しい外部コードを実装するための新しいプロジェクトを開発し、サブプロジェクトが完全に機能し、テストされていることを確認できます。次に、ユーザープロジェクトの依存関係/ファクトリクラスを切り替えます。ただし、大規模なプロジェクト全体でインターフェイスを広範囲に使用するため、これはより複雑になります。例えば サブプロジェクトA-インターフェースを含む サブプロジェクトB-インターフェースと古い外部jarはAに依存 サブプロジェクトC-B(およびAおよび古い外部jar)に依存し、Bのインターフェース実装を使用するFactoryクラスを含む Bの外部jarを変更する必要がある場合、次のことができます。 サブプロジェクトB_iiの作成-再びAに依存し、新しい外部jar 完全に機能したら、Cの依存関係をB_iiに追加し、インターフェイスの新しい実装を使用するようにFactoryクラスを変更できます。 すべてが機能したら、Cの元のBへの依存関係を削除し、必要に応じてサブプロジェクトBを削除できます。 これは賢明な方法ですか? だから、一般的に、私の質問は次のとおりです。 大規模なプロジェクトを解体した経験はありますか?共有したいと思うヒント/トリックはありますか? これは開発およびビルド時間にどのような影響を与えましたか? このようなプロジェクトのこのような分裂を構造化する上で、どのようなアドバイスを提供できますか?

2
シミュレーションおよびモデリング用のFP
シミュレーション/モデリングプロジェクトを開始しようとしています。OOPがこの種のプロジェクトに使用されていることは既に知っています。しかし、Haskellを勉強することで、コンポーネントのシステムのモデリングにFPパラダイムを使用することを検討しました。詳しく説明します。 データセット(温度や圧力、PDE、境界条件などのパラメーター)で特徴付けられるタイプAのコンポーネントと、異なるデータセット(異なるまたは同じパラメーター、異なるPDEおよび境界条件)。また、各コンポーネントに適用される関数/メソッドが同じであると仮定しましょう(たとえば、Galerkinメソッド)。オブジェクトの可変状態は、定数でないパラメーターに使用されます。 OOPアプローチを使用する場合、各タイプのデータをカプセル化する2つのオブジェクト、PDEを解決するメソッド(ここではコードの再利用に継承が使用されます)、およびPDEのソリューションを作成します。 一方、FPアプローチを使用する場合、各コンポーネントは、PDEのソリューションを取得するためにデータパーツとデータに作用する関数に分割されます。非定数パラメーターは、他の何かの関数として渡されるか(たとえば、時間)、ある種の可変性(可変性のエミュレーションなど)で表現されます。 結論として、FPアプローチの実装は、OOPアプローチと比較して、実際にはシンプルで管理しやすい(pdeを解決するために異なるタイプのコンポーネントまたは新しいメソッドを追加する)でしょうか? 私はC ++ / Fortranのバックグラウンドを持っていますが、プロのプログラマーではないので、間違いがあれば修正してください。

1
最短共通スーパーストリング:指定されたすべてのストリングフラグメントを含む最短ストリングを検索
いくつかの文字列フラグメントを考えて、すべてのフラグメントを含む最短の単一文字列(「出力文字列」)を見つけたいと思います。フラグメントは、出力文字列で互いにオーバーラップできます。 例: 文字列フラグメントの場合: BCDA AGF ABC 次の出力文字列にはすべてのフラグメントが含まれており、単純な追加によって作成されています。 BCDAAGFABC ただし、この出力文字列はオーバーラップを使用するため、より優れています(短い)。 ABCDAGF ^ ABC ^ BCDA ^ AGF この問題のアルゴリズムを探しています。厳密に最短の出力文字列を見つけることは絶対に重要ではありませんが、短いほど良いです。入力フラグメントのすべての順列を追加し、オーバーラップ(NP完全と思われる)を削除しようとする明白な単純なアルゴリズムよりも優れたアルゴリズムを探しています。 私は解決策に取り組み始めましたが、それは非常に興味深いことを証明しています。他の人が何を思い付くのか見てみたいです。しばらくして、進行中の作業をこの質問に追加します。

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