ソフトウェア工学

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

3
識別子で「ies」の代わりに「ys」を使用して、検索および置換機能を容易にすることは理にかなっていますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 文法的には正しくありませんが、関数や変数などの識別子を書くときに、Yで終わる複数の単語に単に「s」を追加することは意味がありますか?この理由は、たとえば「company」を「vendor」に置き換えるなど、検索と置換が必要な場合、「company」は単数形と複数形(「company」と「company s」)の両方に一致するのに対し、複数形のスペルが正しい場合、2つの別々の検索を行う必要があります。
9 grammar 

1
最新のC ++へのキー/バリューストア開発の移植
Cassandraに似たデータベースサーバーを開発しています。 開発はCで始まりましたが、クラスがなければ非常に複雑になりました。 現在、私はすべてをC ++ 11に移植しましたが、まだ「モダンな」C ++を学習しており、多くのことについて疑問があります。 データベースはキー/値のペアで動作します。すべてのペアにはさらに多くの情報があります。いつが作成され、いつ期限切れになるか(期限切れでない場合は0)。各ペアは不変です。 キーはC文字列、値はvoid *ですが、少なくとも今のところ、値をC文字列として操作しています。 抽象IListクラスがあります。3つのクラスから継承 VectorList -C動的配列-std :: vectorに似ていますが、 realloc LinkList -チェックとパフォーマンス比較のために作成 SkipList -最終的に使用されるクラス。 将来はRed Black木も作ろうと思います。 それぞれIListに、キーでソートされた、0個以上のペアへのポインターが含まれています。 IList長くなりすぎた場合は、特殊ファイルとしてディスクに保存できます。この特殊ファイルは一種ですread only list。 キーを検索する必要がある場合は、 最初にメモリ内IListが検索されます(SkipList、SkipListまたはLinkList)。 次に、日付でソートされたファイルに検索が送信されます (最新のファイルが最初、最も古いファイル-最後)。 これらのファイルはすべてメモリにmmapされます。 何も見つからない場合、キーは見つかりません。 私はIList物事の実装に疑いはありません。 現在私を困惑させているのは以下の通りです: ペアは異なるサイズであり、それらはによって割り当てられnew()、それらをstd::shared_ptr指し示しています。 class Pair{ public: // several methods... private: struct Blob; std::shared_ptr<const Blob> _blob; }; struct Pair::Blob{ uint64_t …

3
小さいボックスから作成できる最大のボックスを抽出する私のアルゴリズムは遅すぎる
キューブベースのワールド(Minecraft、Trove、Cube Worldなど)を想像してください。すべてが同じサイズのキューブで構成され、すべてのキューブが同じ種類です。 目標は、最も少ない数の長方形のボックスで世界を表すことです(立方体をマージしますが、凸状の形状(長方形のボックスの形状)を保持します)。私のアルゴリズムはこれで成功しましたが、そのパフォーマンスは意図した目的には遅すぎます。より速いアルゴリズムはありますか? 私のアルゴリズムの疑似C#コードは基本的に次のとおりです。 struct Coordinate { int x,y,z; }; //<-- integer based grid HashSet<Coordinate> world; // <-- contains all the cubes //width, height, and length represent how many cubes it spans struct RectangularBox { Coordinate coord; int width,height,length; } void Begin() { List<RectangularBox> fewestBoxes = new List<RectangularBox>(); while(world.Count > …

1
外部修飾子クラスに基づく条件付きCSS-グッドプラクティス?
概要/背景:CSSコンポーネント 比較的大きなWebサイトの場合、SASSを使用して、コンポーネント内のCSSを管理しようとしています。コンポーネントの基本的な考え方は、コンポーネントはDOMの上位のコンテナ要素とは関係なく、どこでも同じように見える必要があるということです。 したがって、次のようなもの(SASS)は避けたいです。 // User picture component. .user-picture { img {..} } // Override user picture for the frontpage. body.page-front .user-picture img {..} 代わりに、ユーザーの写真をフロントページで違って見えるようにしたい場合は、別のコンポーネントにする必要があります。たとえば、SASS継承、またはミックスイン: // User picture component. .user-picture { img {..} } // User picture on frontpage. .user-picture-front { @extend .user-picture; img {..} } 次に、トップページのhtmlを調整して、異なるバージョンのユーザー画像を使用するようにする必要があります。 ここまでは順調ですね。私は、CSSコンポーネントについての私の現在の理解の図解として上記を投稿しました。 質問:モディファイヤクラス-良い習慣? 現在、問題が発生しています。一部のページの背景が暗い(黒)ため、テキスト、境界線などを白にする必要があります。 これはどういうわけかコンポーネントを超えています。同じコンポーネントにはデフォルトで暗いテキストが必要ですが、背景が暗いコンテナ内にある場合は白いテキストになります。 …
9 css  component 

3
シャンティングヤードアルゴリズムにおける関数の優先順位
ウィキペディアで説明されているように、シャンティングヤードアルゴリズムを使用しています。 演算子を処理するときのアルゴリズムの説明は次のとおりです。 トークンが演算子o1の場合: 演算子スタックの一番上に演算子トークンo2があり、 o1 is left-associative and its precedence is less than or equal to that of o2, or o1 is right associative, and has precedence less than that of o2, 次に、オペレータースタックから出力キューにo2をポップします。 o1をオペレータースタックにプッシュします。 ただし、次の例を示します。 入力: sin max 2 3 / 3 * 3.1415 アルゴリズムが/トークンをヒットした場合、何が起こるかについての説明は次のとおりです。 Token | Action | Output …

3
なぜPythonにはコンパイラとインタープリタの両方が必要なのですか?
Javaにはコンパイラーとインタープリターの両方が必要であるという事実を理解できます。ソースコードをバイトコードにコンパイルしてから、仮想マシン(Windows、Linux、Androidなど)がそのバイトコードを現在のアーキテクチャのマシンコードに変換します。 しかし、なぜPythonにはコンパイラとインタープリタの両方が必要なのでしょうか。Pythonはプラットフォームに依存しないため、解釈を使用しないのはなぜですか?私の知る限り、Pythonプログラム(バイトコードにコンパイルされたもの)を変更せずにWindowsまたはLinuxマシンで実行することはできません。それとも私は間違っていますか?

1
なぜApacheにはビルドと依存関係管理のための2つの別個のツールがあるのですか?
Apacheには2つの別個のツールがあります。 Apache Maven Apache Ant + Apache Ivy 彼らは両方とも同じニッチを埋めているようです。2つの質問があります。 2つのツールの主な違いのハイライトは何ですか? 2つの違いについて、本当に長い記事を書くことができると私は確信しています。詳細については探していません。 プログラミングの歴史-最終的に目的が非常に似ている2つの完全に独立したツールセットを作成するようにApacheが進化したのはなぜですか?

6
switchステートメントでswitchを減らす方法は?
データベースから2人に基づいて挨拶文を作成する方法を作成しています。 4つのパラメーターがあります。2つの名前(name1およびname2)および2つの性別(genderおよびgender2)です。 性別の組み合わせごとに、ある種の異なる出力があります。 たとえば、性別1がM(男性)で、性別2もであるM場合、出力は次のようになります。 Dear Sir name1 and Sir name2, 現時点では、私のスイッチは次のようになります。 switch(gender1){ case 'M': switch(gender2){ case 'M': printf("Dear Sir %s and Sir %s", name1, name2); break; case 'W': printf("Dear Sir %s and Madame %s", name1, name2); break; case 'R': ... } break; case 'W': switch(gender2){ case 'M': printf("Dear Madame %s …

4
rand()は、狭い範囲に対して同じ数値を再び与えます
20x20のグリッドがあり、プレーヤー(P)、ターゲット(T)、3人の敵(X)を表示するようなゲームを作成しようとしています。これらはすべて、を使用して割り当てられるX座標とY座標を持っていrand()ます。問題は、ゲームでより多くのポイント(エネルギーなどのリフィル)を取得しようとすると、範囲が小さいため(1から20まで)、他のポイントの1つ以上と重複することです。 これらは私の変数であり、私はそれらを割り当てていますどのようにして値:(COORDあるstructだけでXとYとの) const int gridSize = 20; COORD player; COORD target; COORD enemy1; COORD enemy2; COORD enemy3; //generate player srand ( time ( NULL ) ); spawn(&player); //generate target spawn(&target); //generate enemies spawn(&enemy1); spawn(&enemy2); spawn(&enemy3); void spawn(COORD *point) { //allot X and Y coordinate to a point point->X = randNum(); …
9 c++  random 

2
登録時にパスワードを自動生成するのは良い考えですか?
現在取り組んでいるプロジェクトの登録システムを開発しています。 プロセスが長すぎる場合、ユーザーはサインアップしない傾向があるため、私は(少なくとも最初は)電子メールのみを必要とすると考えました。ここで、自動生成されたパスワードを送信します(これにより、電子メールアドレスを確認することもできます) )。また、登録を迅速に完了するために、弱いパスワードを選択することもできなくなります。 今までのところ、マイナス面は発見されていませんが、このシステムを使用しているサイトを見たことがないので、残念な点がいくつかあります。 それは良い考えですか? PS:もちろんFacebookや他の同様のサービスを介してサインアップも実装し、人々がパスワードを必要とせずにすばやくサインアップできるようにしますが、多くの人は、プライバシーの懸念から、またはそうでないために、クラシックサインアップを選択したいと思うかもしれません。それらのサービスのいずれかを使用します。

1
unumはどのようにしてIEEEの負のゼロをエミュレートできますか?
私は現在、John Gustafson(Youtube)による「The End of Error-Unum Computing」を読んでいます。私がまだ確信がないのは、負の符号の付いたゼロによってIEEEで処理されたケースがunumでどのように処理されるかです。 したがって、最初に、unumは特定の正確な値(浮動小数点と同様)を表すことを許可し、さらに正確な値(正確な-∞と∞を含む)の間にある開いた間隔を表すことを許可します。したがって、完全な実数線は、正確な値と開いた間隔を交互に繰り返すことによって表されます。 -∞、(-∞、-maxreal)、-maxreal、... -smallsubnormal、(-smallsubnormal、0)、 0、 (0、smallsubnormal)、smallsubnormal、... maxreal、(maxreal、∞)、∞ このように、(IEEEの伝統では)アンダーフローやオーバーフローなどの例外的な値は、ほんの一部のオープンインターバルです。言い換えれば、これらの以前は特別な条件だったものが、今では通常のケースに変わります。 IEEEの-∞は、{-∞}と(-∞、-maxreal)の和集合に対応します。 そして、符号付きゼロは、間隔(-smallsubnormal、0)と(0、smallsubnormal)になる可能性があります。 ただし、1 /(-smallsubnormal、0)は(-∞、-maxreal)になり、-∞だけではなくなりました。一方、1/0は∞です。 これについて私がまだ躊躇しているのは、IEEE -0と+0で比較すると等しいことです。しかし、それらはunumにはありません。マッピングは100%ではないようです。だから、違いが現れるかもしれないコーナーケースがあるかどうか(そしてそれらのケースが本当に関連しているかどうか)? (私は、なぜ負のゼロが重要なのかを知っていますか?、 負の浮動小数点値の使用)

2
モジュール全体の使用状況を検証する必要があるのか​​、それともパブリックメソッドの引数だけを検証する必要があるのか​​?
パブリックメソッドの引数を検証することをお勧めします。 彼がnullを期待していない場合、nullをチェックする必要がありますか? メソッドはパラメータを検証する必要がありますか? MSDN-CA1062:パブリックメソッドの引数を検証します(.NETの背景がありますが、質問はC#固有ではありません) 動機は理解できます。モジュールが誤った方法で使用される場合は、予測できない動作ではなく、すぐに例外をスローする必要があります。 気になるのは、モジュールの使用中に発生する可能性のあるエラーは間違った引数だけではないということです。推奨事項に従ってエラーのエスカレーションを望まない場合に、チェックロジックを追加する必要があるいくつかのエラーシナリオを以下に示します。 着信-予期しない引数 着信-モジュールの状態が間違っています 外部呼び出し-予期しない結果が返されました 外部呼び出し-予期しない副作用(呼び出しモジュールへの二重入力、他の依存関係の状態を壊す) 私はこれらすべての条件を考慮して、1つのメソッド(申し訳ありませんが、C#ではありません)で単純なモジュールを作成しようとしました: public sealed class Room { private readonly IDoorFactory _doorFactory; private bool _entered; private IDoor _door; public Room(IDoorFactory doorFactory) { if (doorFactory == null) throw new ArgumentNullException("doorFactory"); _doorFactory = doorFactory; } public void Open() { if (_door != null) throw …


1
ImpactのようなMicrosoftフォントはオープンソースプロジェクトで安全に使用できますか?
MicrosoftのImpact.ttfフォントを使用する必要があるオープンソースプロジェクトを作成しました。周りを見回しましたが、MITプロジェクトの明確なライセンスオプションを見つけることができませんでした。 Microsoftのフォント(Impact.ttfなど)はMITライセンスと競合しますか?はいの場合、そのようなフォントを受け入れることができる別のオープンソースライセンスはありますか?

3
RESTは楽観的同時実行制御のみに制限されていますか?
環境 RESTアーキテクチャスタイルのステートレス性により、各リクエストは完全に独立しており、サーバーはクライアントに関する情報を決して保存しません。 したがって、どのクライアントがリソースのロックを取得するかをサーバーストアに要求するため、悲観的な同時実行制御は適していません。次に、Etagヘッダーを使用して、オプティミスティック並行性制御が使用されます。(ところで、私がそこに尋ねたように/programming/30080634/concurrency-in-a-rest-api) 問題 楽観的同時実行制御メカニズムの主な問題は、すべてのクライアントがいつでも任意の操作を実行できるようにすることです。 そして、RESTの無国籍原則を破ることなく、それを回避したいと思います。つまり、すべてのクライアントがいつでも操作を実行することはできません。 質問 私の考えでは、次のような準楽観的同時実行制御メカニズムで可能です。 クライアントはトークンを要求できます 生成できるトークンは1つだけで、有効期間は限られています リソース(POSTやPUTなど)で操作を実行するには、クライアントはこのトークンをリクエストの本文(またはヘッダー?)の一部として渡す必要があります。トークンを持たないクライアントは、これらの操作を実行できません。 これは、楽観的同時実行制御に非常に似ていますが、「すべてのクライアントがすべての操作を実行できる」とは逆に、1つのクライアントのみが一部の操作(トークンを取得したクライアント)を実行できる点が異なります。 このメカニズムはRESTアーキテクチャスタイルと互換性がありますか?それはその制約のいずれかを破りますか?私はSOについて質問することを考えていましたが、これはソフトウェア設計に関連する、よりハイレベルな質問のようです。

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