ソフトウェア工学

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

1
データモデルは、いわゆる「NoSQL」データベースのスケーラビリティとパフォーマンスにどの程度影響しますか?
CAP定理(整合性、可用性、パーティション:2つを選択)を持たない限り、いわゆる "NoSQL"データベースについて話すことはできません。MongoDB(Partition、Consistency)とCouchDB(Availability、Partition)の間で言う必要がある場合、最初に考える必要があるのは「正しいデータが必要ですか、それとも常時アクセスする必要がありますか?」です。 これらの新しいデータベースは、パーティション分割されるように作成されました。しかし、私がそうしないとどうなりますか?リレーショナルデータベースではなく、キー/値、列、ドキュメントなどのデータベースを持ち、サーバーインスタンスを1つだけ作成し、決してシャードしないのが非常にクールだと思ったらどうでしょうか。その場合、可用性と一貫性の両方はありませんか?MongoDBは何も複製する必要がないため、利用可能になります。また、CouchDBにはデータのソースが1つしかないため、かなり一貫性があります。 それで、その場合、MongoDBとCouchDBはユースケースの用語にほとんど違いがないことを意味しますか?もちろん、パフォーマンス、API、およびその他は除きますが、基本的に異なる2つの要件セットを持つよりも、PostgreSQLとMySQLを選択することに似ています。 私はここにいますか?複数のインスタンスを作成しないことで、APまたはCPデータベースをACデータベースに変更できますか?それとも私が行方不明になっているものがありますか? 逆に質問してみましょう。リレーショナルデータベースを使用し、MySQLを使用して、それをマスター/スレーブ構成にするとどうなりますか。ACIDトランザクションを使用しません書き込みをすぐにスレーブに同期する必要がある場合、それをCPデータベースにしませんか?そして、事前に定義された間隔で同期するとどうなりますか。クライアントがスレーブから古いデータを読み取っても問題はありません。それがAPデータベースになりませんか?これは、ACIDコンプライアンスを放棄しても、パーティション分割されたデータベースにリレーショナルモデルを使用できるという意味ではないでしょうか。 本質的には、基になるデータモデルよりも、CAP定理で放棄する準備ができているものについてのスケーラビリティですか?列、ドキュメント、キーバリューなど、リレーショナルモデルよりもスケーラビリティを高めるものはありますか?パーティショントレランスのためにゼロから設計されたリレーショナルデータベースを設計できますか?(たぶんそれはすでに存在します)。NoSQLデータベースをACIDに準拠させることはできますか? 申し訳ありませんが、多くの質問がありますが、最近NoSQLデータベースについて多くのことを読みました。それらを使用することの最大の利点は、パーティションCAPだけでなく、データの「形状」により良くフィットすることですACIDコンプライアンスを放棄します。結局のところ、誰もがデータを分割するのに必要なほど多くのデータを持っているわけではありません。データのパーティション分割について考える前に、リレーショナルモデルを使用しないことでパフォーマンス/スケーラビリティの利点がありますか?

5
C ++よりも高速なJavaヒープ割り当て
私はすでにこの質問をSOに投稿しましたが、大丈夫でした。それは残念ながら閉じられました(再開するには1票しか必要ありません)が、誰かが私がここに投稿することを提案したので、それはより適切なので、以下は文字通り質問のコピーペーストです この答えに関するコメントを読んでいたこの引用を見ました。 オブジェクトのインスタンス化とオブジェクト指向の機能は、最初から設計されているため、非常に高速です(多くの場合、C ++よりも高速です)。コレクションは高速です。ほとんどの最適化されたCコードであっても、標準Javaはこの領域で標準C / C ++に勝ります。 あるユーザー(私が追加する可能性のある非常に高い担当者)は、この主張を大胆に擁護し、 Javaでのヒープ割り当てはC ++よりも優れています Javaでコレクションを守るこのステートメントを追加しました また、主にメモリサブシステムが異なるため、JavaコレクションはC ++コレクションに比べて高速です。 だから私の質問はこれのどれでも本当に真実でありえ、もしそうなら、なぜJavaのヒープ割り当てがそんなに速くなるのかということです。

6
シギルはソースコードを読みやすくしますか?
ほとんどのプログラミング言語では、変数にはPHPのような識別文字がありません。PHPでは、変数の前に$文字を付ける必要があります。 例; var $foo = "something"; echo $foo; ビジネスアプリケーション用の新しいスクリプト言語を開発していますが、ターゲットユーザーにはプログラミングのバックグラウンドがありません。これらの文字はコードを読みやすく、使いやすくしますか? PHPを使用する理由の1つは、$PHPがないと、名前が関数参照か変数参照かを判断できないためです。これは、言語が関数への奇妙な参照を許可しているためです。したがって、この$シンボルは、パーサーが名前空間を分離するのに役立ちます。 パーサーにはこの問題はありません。したがって、私の質問は読みやすさと使いやすさだけです。私はPHPで長年コーディングしてきたので、これを見る$fooと、これを変数として簡単に識別できます。私はこの識別子にバイアス設定を与えているだけですか?

2
2N lnNを理解しようとすると、クイックソートが比較されます
SedgewickのAlgorithmsブックでクイックソートの分析を行っていました。彼は、N個の異なる項目の配列をソートしながら、クイックソートで比較の数について次の繰り返し関係を作成します。 私はこれを理解するのに苦労しています...任意の要素がピボットになるには1 / Nの確率がかかり、kがピボットになると、左のサブアレイにはk-1個の要素があり、右のサブアレイには配列にはNk個の要素が含まれます。 1.パーティション分割のコストはどのようにN + 1になりますか?パーティション分割を行うのにN + 1回比較しますか? 2.Sedgewickは、kの各値について、それらを合計すると、分割要素がkである確率+上記の式を得る2つのサブアレイのコストを言います。 数学の知識が少ない人(私)が理解できるように、誰かがこれを説明できますか? 具体的には、方程式の2番目の項をどのように取得しますか? その用語の正確な意味は何ですか?

6
欠席の可能性を考慮して、誰の番がクロワッサンを購入するのかを調べます
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細がない回答は、編集または削除できます。 あるチームは、毎朝誰かがクロワッサンを持参することを決めました。毎回同じ人物であってはならないので、次の順番を決定するシステムが必要です。この質問の目的は、明日クロワッサンを持ち込む順番を決定するアルゴリズムを決定することです。 制約、仮定、目的: クロワッサンを持参する順番は、前日の午後に決定されます。 ある日、欠席している人もいます。アルゴリズムは、その日に出席する人を選択する必要があります。欠席はすべて1日前にわかっているため、クロワッサンの買い手は前日の午後に決定できると仮定します。 全体として、ほとんどの人はほとんどの日に出席しています。 公平を期すため、誰もがクロワッサンを他の人と同じ回数購入する必要があります。(基本的に、すべてのチームメンバーがクロワッサンに費やす金額が同じであると仮定します。) 名簿の退屈を軽減するために、ランダム性の要素、または少なくとも知覚されたランダム性を持つことが望ましいでしょう。これは厳しい制約ではありません。それは審美的な判断です。ただし、同じ人を連続して2回選ぶことはできません。 クロワッサンを持ってくる人は事前に知っておくべきです。したがって、人PがD日にクロワッサンを持参する場合、この事実は人Pがいる前日に決定する必要があります。たとえば、クロワッサンの持ち主が常に前日に決定される場合、前日にいる人の1人である必要があります。 チームメンバーの数は十分に少なく、ストレージとコンピューティングリソースは事実上無制限です。たとえば、アルゴリズムは、過去に誰がクロワッサンを持ってきたかの完全な履歴に依存できます。毎日高速のPCで最大数分間の計算で問題ありません。 これは現実世界の問題のモデルであるため、シナリオをより適切にモデル化していると思われる場合は、自由に仮定に挑戦したり洗練したりできます。 起源1:Florian Margaineによるクロワッサンの購入者を確認します。 起源2:誰がジルによってクロワッサンを買うつもりかを調べます。 この質問は、Gillesと同じバージョンであり、さまざまなコミュニティがプログラミングの課題にどのように対処するかを確認するための実験として、プログラマーに再投稿されました。

2
「ダングリングエルス問題」とスキャナーレス解析は何の関係がありますか?
Dangling Else問題に関するWikipediaの記事のこの文は理解できません。 [Dangling Elseの問題]は、コンパイラの構築、特にスキャナーレス解析でしばしば発生する問題です。 誰かがスキャナーレス解析技術がこの問題を悪化させる可能性があることを私に説明できますか?問題は文法にあるようです-曖昧だからです-解析手法の選択ではありません。私は何が欠けていますか?

4
これらの特定のテーブルには代理キーが必要ですか?
バックグラウンド このテーブルがあります +-------------------------+ +------------------------+ |Airport | |Country | |-------------------------| |------------------------| |airport_code string (PK) | |country_code string (PK)| |address string | |name string | |name string | +------------------------+ +-------------------------+ +-------------------------+ |Currency | |-------------------------| |currency_code string (PK)| |name string | +-------------------------+ airport_codeは、IATA(国際航空運送協会)の 空港コードです。飛行機で旅行する場合は、荷物タグで確認できます。 country_codeはISO 3166-1 A3標準の国コードです。オリンピックで見ることができます。 currency_codeは、IS0 417標準の3文字の通貨コードです。国際通貨交換の表示板で確認できます。 ご質問 これらの自然なPKは十分ですか? 業界全体で受け入れられているPKにとって十分な世界的に尊敬されている標準を使用していますか? この表には、何があっても代理変数が必要ですか?

2
誰かが同じ名前のオープンソースプロジェクトをフォークした場合はどうすればよいですか?
私はこのGPLプロジェクトを持っています、それは1年ほど行き詰まりました、私はアイデアが本当に好きです、そして誰かがそれを分岐させ、同じ名前を使用しましたが、コードを気にしません(結局GPLでした)しかし、私は名前が好きです。この種の状況のエチケットは何ですか? このプロジェクトは自分自身に利益をもたらすでしょう。私は気に入っていますが、その名前は売り物ではありませんでした。 編集:著者に連絡して名前を理解して変更するかどうかはわかりますが、今はそのプロジェクトに取り組む時間がないので、私は人々の「名前トロール」になりたくないです(小さなコミュニティ)、私はそれを今回にします、私の質問はフォークのエチケットについてです。プロジェクトが明らかに放棄された場合、彼らはフォークして同じ名前を使用できますか、または新しい名前を取得する必要がありますか?

8
何年も経った今でも悪いコードを書いている従業員に固執すべきでしょうか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 6年前に閉鎖されました。 私はこの質問をC ++プログラマーに投げかけています。a)C ++プログラマーだけが、例の技術的なメリットを判断できるからです。b)プログラマーだけが、このようなコードを書く他のプログラマーの気質を感じます。 人事部長と取締役は、単に現場で証拠を見ているだけで問題があることを認識しています。問題のプログラマーにより多くの時間を与えるかどうかは私の呼びかけです。エラーの多くは非常に基本的なレベルです-私の質問(プログラマーにとって)は、上級C ++開発者であると公言する人に、現在のコードのサンプルに基づいて疑いの利益を与えるべきかどうかです。非プログラマー-C ++プログラミング以外の人でも-これについて判断することはできません。 背景として、私は定評のある会社の開発者を管理するタスクを割り当てられました。彼らにはすべてのC ++コーディングを専門とする単一の開発者がいます(永遠に)が、作業の質はひどいものです。コードのレビューとテストにより、多くの問題が明らかになりました。最悪の事態の1つはメモリリークです。開発者はコードのリークを一度もテストしたことがなく、わずか1分でアプリケーションが多くのMBをリークする可能性があることを発見しました。ユーザーは巨大な減速を報告しており、彼の見解は「それは私とは何の関係もありません-彼らが終了して再起動すれば、それは再び良いことです。」 私は彼にリークを検出して追跡するためのツールを提供し、ツールの使用方法、問題が発生した場所、およびそれらを修正するために何をすべきかを実証するために何時間も座っていました。私たちは6か月後、新しいモジュールを作成するように彼に割り当てました。私たちがより大きなコードベースに統合される前に私はそれをレビューし、以前と同じ悪いコーディングを発見することに落胆しました。私が理解できないと感じるのは、一部のコーディングがアマチュアよりも悪いということです。たとえば、彼は別のクラス(バー)のオブジェクトを作成できるクラス(Foo)が必要でした。彼は、フーがバーへの言及を保持することを決めました、例えば: class Foo { public: Foo(Bar& bar) : m_bar(bar) {} private: Bar& m_bar; }; しかし(他の理由で)彼はFooのデフォルトコンストラクターも必要とし、彼の初期設計に疑問を呈するのではなく、このgemを書きました。 Foo::Foo() : m_bar(*(new Bar)) {} そのため、デフォルトのコンストラクターが呼び出されるたびに、Barがリークされます。さらに悪いことに、Fooはヒープから他の2つのオブジェクトにメモリを割り当てますが、デストラクタやコピーコンストラクタを作成しませんでした。したがって、Fooの割り当てごとに3つの異なるオブジェクトが実際にリークし、Fooがコピーされたときに何が起こったのか想像できます。そして、それは良くなるだけです-彼は他の3つのクラスで同じパターンを繰り返したので、1回限りのスリップではありません。非常に多くのレベルで概念全体が間違っています。 これが完全な初心者から来た場合、私はより多くの理解を感じるでしょう。しかし、この男は長年にわたってこれを行っており、過去数か月にわたって非常に集中的なトレーニングとアドバイスを行ってきました。彼はほとんどの時間、メンタリングやピアレビューなしで働いてきましたが、彼は変わらないと感じ始めています。だから私の質問は、そのような明らかに悪いコードを書いている人に固執しますか?

2
大きなプロジェクトレイアウト:複数のサブプロジェクトに新しい機能を追加する
バージョン管理管理システムで多くのコンポーネントを持つ大きなプロジェクトを管理する方法を知りたいです。 私の現在のプロジェクトには、4つの主要な部分があります。 ウェブ サーバ 管理コンソール プラットホーム。 Webとサーバーの部分は、私が書いた2つのライブラリーを使用します。合計で5つのgitリポジトリと1つのmercurialリポジトリがあります。プロジェクトビルドスクリプトはプラットフォームリポジトリにあります。構築プロセス全体を自動化します。 問題は、複数のコンポーネントに影響する新しい機能を追加するときに、影響を受ける各レポジトリに対してブランチを作成する必要があることです。機能を実装します。それを元に戻します。私の直感は「何かが間違っている」です。 単一のリポジトリを作成し、そこにすべてのコンポーネントを配置する必要がありますか?その場合、分岐が簡単になると思います。または、私が今やっていることをやるだけです。その場合、各リポジトリにブランチを作成するこの問題をどのように解決しますか?

3
JavaベースのWebアプリケーションとスタンドアロンJavaアプリケーションのマルチスレッド化の違い
私はかなりJavaに慣れておらず、私の経験はWebコンテナ(私の場合はJboss)で実行されているWebベースのアプリケーションに限られています。 Webアプリケーションの場合、Webコンテナがマルチスレッドを処理すると言ってもいいですか?その場合、Webベースのアプリケーションに新しいトレッドを導入できますか?そうすることには利点があり、どのシナリオでそれを行う必要がありますか?

2
レスポンシブWebデザインとユーザーエージェントスニッフィング
CSS3 mediaクエリ機能は、さまざまな画面サイズとデバイスに適応するWebサイトの開発に関して、多くの興味深い可能性をもたらしました。 ただし、実際には、CSS3 mediaクエリ機能、および「レスポンシブWebデザイン」の全体的な動きが期待どおりに機能しない可能性があるという感覚が得られ始めています。 問題は、結局のところ、Web開発者は、ユーザーがデスクトップ、タブレット、またはモバイルデバイスのいずれでコンテンツを表示しているかにほとんど関心があるということです。ただし、CSS3は画面解像度を検出する手段のみを提供します。理論的には、画面の解像度を検出することは、さまざまなデバイスに合わせて調整するための優れた方法のようです。しかし、実際には... 画面幅を出力するだけの簡単なJavascript関数があるとします。 function foo() { alert(screen.width); } 私のBlackberry Touchでは、これは以下を出力します: 768 私のサムスンギャラクシーでは、これは出力します: 800 そのため、この時点で、主流のスマートフォンの解像度はデスクトップレベルの解像度にかなり近づいています。ユーザーがスマートフォン、タブレット、またはデスクトップを介してWebサイトを表示しているかどうかを検出する機能は、画面の解像度だけが問題である場合、ますます困難になるようです。 これは、メディアクエリに基づくCSS3「レスポンシブWebデザイン」の動き全体の背後にある知恵全体に疑問を投げかけます。mediaクエリ機能は、さまざまなモバイルデバイスよりも、デスクトップ画面上のサイズ変更されたブラウザウィンドウへの適応に適しているようです。 モバイルまたはタブレットデバイスを検出するためのもう1つの可能な方法は、ontouchstartイベントがサポートされているかどうかを確認することにより、機能検出を使用することです。しかし、多くのデスクトップ画面がタッチをサポートし始めているため、これでも信頼性が低下しつつあります。 質問:それで... Web開発者として、RWDや機能の検出に頼ることができない場合、モバイルデバイスを検出するためのユーザーエージェントスニッフィング(常に信頼性が低いことで悪名高い)は本当に最適なオプションですか?

1
読みやすいClojureコードの書き方
私はClojureを初めて使用します。書いたコードは理解できますが、後で理解するのが難しくなります。 括弧を一致させることが難しくなります。 さまざまな状況での命名規則とインデントに関して従うべき一般的な規則は何ですか? たとえば、理解するためにサンプルの非構造化例を作成しましたが、2回目には完全に判読できません。 (defn f [{x :x y :y z :z [a b c] :coll}] (print x " " y " " z " " a " " b " " c)) 構造化を解除する場合、パラメータレベルで直接行うか、letフォームを開始してから続行する方が良いでしょうか?

1
開発スタックとは何ですか?
大学を卒業しようとしているので、今、仕事を探しているところです。インタビュアーから、現在の「開発スタック」とは何ですか? これはおそらく基本的な質問だと思います。しかし、誰かが「開発スタック」とは何かを説明してもらえますか?学校で使われる用語ではありません。

2
ASP.NETアプリケーションの展開を自動化するJenkins
Jenkinsを使用してASP.NET Webアプリケーションの展開を自動化/半自動化する可能性はありますか。制御されていないユーザーがユーザーIDとパスワードを入力する必要があるため、制御された環境または制御されていない環境にすることができます。ターゲットから宛先にファイルをコピーし、WebファームシナリオでSQLスクリプトを実行する方法を探しています。 編集 現在、アプリケーションをデプロイするために、batファイルを使用してapppool / sql cmdなどをxcopy / configureしています。ただし、これを機能させるには、プロダクションサポートチームがソースコードをダウンロードし、プロジェクトをビルドし、batファイルを実行してアプリケーションをデプロイする必要があります。 ここで、ユーザーがソースコードをダウンロードせずに展開を自動化し、エンドユーザーがURLにアクセスしてユーザーIDとパスワードのパラメーターを入力し、svnタグを選択するだけで展開されるようになります。ただし、Jenkinsは匿名ログインで実行されているため、スクリプトを実行する権限がないため、既存のbatファイルは機能しません。 それで、私はこの種の状況に代わるものが存在するかどうか知りたいです。入力されたユーザーIDとパスワードを使用してユーザーコンテキストを偽装し、既存のバッチファイルをそれ以上変更せずに実行できるようにするとよいでしょう。それが不可能な場合は、他のアイデアも検討したいと思いますが、パペットなどの自動ツールを選択する柔軟性がないため、これらのバッチファイルを使用する必要があります。

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