ソフトウェア工学

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

3
一部のopensouceライブラリにコメントがないのはなぜですか?
これがほとんどのオープンソースライブラリで発生するかどうかはわかりませんが、私が知っている多くのライブラリ(OpenSSL、Webkitなど)はすべてコメントがないか、コメントがほとんどありません。 非常に少数のドキュメントは言うまでもなく、ソースコードを読むのは困難です。メンバー変数が何を意味するのか、またはこの関数が何をするのかはほとんど理解できません。これはコーディング標準の慣行に反しているようです 何故ですか?コメントをほとんど付けずに、これらのオープンソースに人々が協力するにはどうすればよいですか

2
レスポンシブWebデザインは、懸念分離の原則に反していますか?
複数のプレゼンテーションデバイス(モバイル、タブレット、ブラウザーのサイズなど)に対して単一の実装をどのように動作させるかについて、関心の分離の原則と共にレスポンシブデザインがどのように機能するのかと思います。それは原則を破っていますか? たとえば、応答が速く、5つのデバイスで動作するはずであることがわかっているWebページに変更を加えた場合、ソフトウェアの1か所から発生する可能性のある回帰により、開発を極端に難しくしていませんか? 確かに、コードの作成が少なくなり、複数のデバイスではるかに高速に動作するようになりましたが、今では、ページごとに徹底的なテストが必要になる可能性があります。これは、レスポンシブWebフレームワークを使用せず、ページ。

5
単一の反復ですべてのデータを収集するか、読み取り可能なコードの関数を使用するか
たとえば、最も高いランナー、最も速いランナー、最も軽いランナーを見つけるために必要な一連のランナーがあるとします。最も読みやすいソリューションは次のようになります: runners = getRunners(); tallestRunner = getTallestRunner(runners); fastestRunner = getFastestRunner(runners); lightestRunner = getLightestRunner(runners); ..各関数はランナーを反復処理し、最高の高さ、最高の速度、最低の重量を追跡します。ただし、配列を3回繰り返し処理することは、あまり良い考えではないようです。代わりにそれを行う方が良いでしょう: int greatestHeght, greatestSpeed, leastWeight; Runner tallestRunner, fastestRunner, lightestRunner; for(runner in runners){ if(runner.height > greatestHeight) { greatestHeight = runner.height; tallestRunner = runner; } if(runner.speed > ... } これは読みにくくありませんが、反復で抽出される情報の各部分にさらにロジックがあると、面倒になる可能性があります。 ここの中間点は何ですか?コードを論理ユニットに分割したまま、単一の反復のみを使用するにはどうすればよいですか?

3
Haskellでのパフォーマンスについて推論するのに適したタイミングはいつですか?
サイモンペイトンジョーンズ自身は、厳密でないセマンティクスのため、Haskellでのパフォーマンスについての推論が難しいことを認識しています。 Haskellで重要なプロジェクトをまだ書いていないので、疑問に思います。プロジェクトの最初(基本的なデータ構造とIOライブラリを選択するとき)にのみパフォーマンスについて推論できますか。問題が発生したときはいつでも、プロファイラーで処理しますか? 別の言い方をすれば、パフォーマンスの問題があるときにパフォーマンスへの対処を延期することは可能ですか(つまり、それほど痛くない)、またはGHCがコードを実行する方法を予測することを学ぶ必要があります(例:厳密性アナライザーが決定するものを推測する) )?

2
Webアプリはどのようにサブドメインを作成しますか?
サブドメインを使用するWebアプリのアーキテクチャを理解したい。私はこれをうまく表現しているとは思わないので、説明させてください。 TumblrやShopifyなどの多くのWebアプリは、サブドメインにユーザーのサイトを作成します。たとえば、私のtumblrアカウントはjohndoe、私のtumblrブログをで見つけたとしましょうjohndoe.tumblr.com。これがどのように実装されているか誰かが説明できますか?

3
「列挙可能」とはどういう意味ですか?
私の数学のバックグラウンドは非常に貧弱です(つまり、最後に行われた関連する数学のクラスは2年前に高校の三角法でした-別の時代の別の話)。私は「Javascript:The Definitive Guide」を読んでいますが、それは繰り返し使用されている用語であり、私はそれをちょっと試してみました。しかし、私は章(第6章-オブジェクト)に来ました。プログラミング/ OOPでの用語とそのアプリケーションの理解の欠如が学習プロセスに有害になり始めています。オンライン辞書は役に立たないので、誰かが説明しやすい定義や例を示していますか?

5
コンパイラのソースコードを読むのは良い考えですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 6年前休業。 私はコンピュータサイエンスを専攻している大学のジュニアです。たくさんのコードを書くだけでなく、他の人が書いたソースコードを読み始めて、コーディングスキルを向上させ、さまざまな方法でより良い方法や異なる方法を学びたいと思っています。C ++コンパイラのコードの重要な部分のいくつかを読み始めるべきだと思っていました。これは私が2つのことをするのに役立つと思います: コンパイラは難しいので、コードはこの難しい問題の解決策を表すので、エレガントなコーディングプラクティスを学びます。 これは、最もよく使用されている言語のコンパイル方法、詳細、各エラーの生成方法、コードの解析方法についても理解し、言語の仕様を理解するのに役立ちます。 これは良いアイデアだと思いますか?
8 c++  compiler 

2
C ++でのタスクベースのプログラミングには、新しい言語標準機能が必要ですか?
だから私はGoingNative 2012:誰もが質問できるインタラクティブパネルでこれらすべてのC ++マスターと共にYoutubeでこのビデオを見ました。 これは私が話していたビデオです:GoingNative 2012-1日目-インタラクティブパネル:ネイティブであることの重要性 そして時間0:24:00に誰かが非常に興味深い質問をしました: 私たちはしばらくの間、pthreadを使用したり、Windowsスレッドを使用したりして並行プログラミングを行ってきました。C++とCが並行プログラミングに追いついてうれしいですが、すでに5年または10年遅れているように思えます何年もの間、現在、これらの強力なマルチコアがすべてあり、これらのマルチコアのプログラミングはスレッドに基づくべきではなく、タスクベースである必要があり[...]、MicrosoftにはPPLライブラリなどがあり、これは完全にC ++標準には反映されていません。[...]私が恐れている唯一のことは、標準がスレッドにロックされ、タスクベースのプログラミングに移行するのが非常に困難になることです... 今、私はこれらの概念にかなり慣れていないので、少し混乱しています。実際にタスクベースのプログラミングとは何ですか。この用語は、ロックフリープログラミングと同じ意味ですか?これらの2つの同等の用語ですか、それらの間にリンクはありますか?


4
物事をチェックするためにたくさんループするスレッドを作成することはパフォーマンスへの影響ですか?
これは私がいつも疑問に思っている一般的な質問です。 一般に、CPUが「while not true ...」ループなどを実行するスレッドを作成することは集中的ですか? たとえば、次のようにするとします。 // pseudo-code new Thread(function() { while (!useHasDoneSomething) { // do nothing... } alert("you did something!"); } つまり、何かが発生するのを待つスレッドで実行されるコードの一部です。 何らかの理由で、これがCPUに圧力をかけると想像します。結局のところ、それは1つの小さなループですが、サイクルが行われた瞬間にループを再実行しています。これは、1ミリ秒に何回もサイクルを繰り返すことを意味しませんか?...ナノ秒あたり!? オペレーティングシステムはプログラムとスレッドを「処理」しますよね?しかし、それでもループの実行にはかなりの注意が必要です。CPUが他に何もすることができない場合、CPUはそのループに集中し、それによってすべてのアイドル時間を消費しませんか? すべて同じループを行うスレッドを1000個作成するとどうなりますか?それはパフォーマンス/ CPUサイクルにどのように影響しますか? さらに、これはイベントが内部でどのように機能するのですか?Java、.NET、Javascriptなどのイベント(ボタンを押す、ウィンドウのサイズ変更など)を「聞いている」とき、ループするスレッドが作成されていますか?

3
混合テキストでイタリックを反転させる正しいアルゴリズムは何ですか?
質問の動機は、以下のセクションに描かれています。テキストをイタリックにする方法はたくさんあるので、おそらく、「イタリックスワップアルゴリズム」は複数あるでしょう。この問題は、XHTMLコードの追加の難しさ、および<i>タグの使用を明らかにします。例: <!-- original text: --> <p id="p1"><i>Several more</i> Homo sapiens <i>fossils were discovered</i>.</p> <!-- same text, swapping italics: --> <p id="p2">Several more <i>Homo sapiens</i> fossils were discovered.</p> このように見えます さらにいくつかのヒトの化石が発見されました。 さらにいくつかのヒトの化石が発見されました。 アルゴリズムの紹介と議論 「レイアウトソリューション」の場合、最も簡単なアルゴリズムはfont-style、すべてのテキストブロックのCSSプロパティをチェックし、jQueryで反転します。 $('#myFragment *').each(function(){ if ($(this).css('font-style')=='italic') $(this).css('font-style','normal') else $(this).css('font-style','italic') }); しかし、このアルゴリズムはもう少し複雑なテストには耐えられません。 <p id="p3"><b><i>F</i>RAGMENT <big><i>with italics</i> and </big> withOUT.</b></p> 2番目に単純なアルゴリズムは具体的なソリューションであり、「例」セクションで使用されました。2つのステップがあります。 XHTMLフラグメントをイタリック体で囲みます。 …

2
ジャンプポイントサーチアルゴリズムはどのように機能し、なぜそれほど効率的ですか?
以下のアプレットを試してみたところ、Jump Point Searchと呼ばれるこの経路探索アルゴリズムは、A *やDijkstraよりもはるかに高速な結果をもたらすことがわかりました。 http://qiao.github.io/PathFinding.js/visual/ A *:46秒 ダイクストラ:1分39秒 ジャンプポイント検索:3秒未満 言うまでもなく、その結果にはかなり驚いています。視覚的な表現から、Jump Point Searchは(少なくともブロックの選択から)パスを見つける際に多くのランダムな推測(おそらく非常にインテリジェントなもの)をしているようですが、このアルゴリズムが悪い結果となったテストケースはまだ見つけていませんA *とダイクストラよりも結果。 このアルゴリズムはどのように機能しますか?A *やダイクストラと比べてどれほど効率的ですか?

2
Googleスケールでソースからコードベース全体を構築するにはどうすればよいですか?
最初の答え古い、最近アクティブに質問にリンクされている動画、Googleのリポジトリがどのように行われるかについて語っています。 言及された興味深いことの1つは、バイナリに依存することなく、すべてがソースからビルドされるという事実です。これは、依存関係が古くなって他のプロジェクトでまだ使用されているという問題を回避するのに役立ちます。 技術的にどのように可能ですか?私の会社で同じことを試してみると、会社のコードベースの規模とGoogleのコードベースの規模の大きなギャップを考慮しても、2つの理由で不可能です。 IDE(Visual Studio)は、たとえば50のプロジェクトを含む小さなソリューションでさえ大きな影響を受けるため、すぐに応答しなくなります。 静的分析は、コードベース全体のサイズによって処理されます。たとえば、コードメトリックスまたはコードコントラクトの静的チェックはほとんど不可能です(コードコントラクトはおそらく数日または数週間かかります)。 継続的インテグレーションでは、コンパイルにも非常に時間がかかり、多くの依存関係を持つプロジェクトが変更されるとすぐにサーバーがクランチされ、プロジェクトの大きなツリーを再コンパイルする必要があります。 中小企業はこれらの問題をどのようにして回避し、次のことができるのでしょうか。 パフォーマンスの低下に影響されずにIDEを使用します。 変更の結果、大量のコードベースを再コンパイルする必要がある場合でも、サーバーをクランチせずにコミットするたびにコードをコンパイルしますか?

3
変更を最小限に抑える単純な「デフラグ」ロジック?
編集: はっきりと私はこれをうまく説明しなかったので、例を使ってもう一度試してみましょう。私は与えられたサイズの「パイプ」を持ち、与えられたオフセットで信号がルーティングされます。パイプは、異なるオフセットの信号でフラグメント化される可能性があり、新しい信号を適合させることが不可能になります。パイプをデフラグするための信号の配置方法を教えてくれるアルゴリズムが必要です。しかし、実際には最小限の数の信号が移動しています!だから例のために.. サイズ16のパイプがあるとします。これには、サイズとオフセットが記述された次の信号があります。 offset 0: A (size of 4; fills slots 0-3) offset 5: C (size of 2, fills slot 5-6) offset 8: B (size of 4, fills 8-11) offset 14: D (size 2, fills 14-15) Pipe: AAAA_CC_BBBB__DD この場合、オフセット4および7で1つのスロットを開き、オフセット12-13で2つのスロットを開いています。次に、このパイプにサイズ4の信号を追加するとします。現在、そのための連続したスペースはありませんが、デフラグすると、十分なスペースがあることがわかります。「明白な」ソリューションは、次のようにすべての信号を「上部」でグループ化することです。 offset 0: A (size 4, fills 0-3) offset 4: B (size …

1
フォークされたプロジェクトのsetup.pyの承認されたベストプラクティス
環境: 私は何かをするツールがあるかどうかを探していました(私の場合、PythonテストフレームワークからのHTTPログインスペクションを可能にするプロキシを探していました)。 わずかな調整のみを必要とするツールが判明し、過去5か月(pymiproxy)に更新がないため、かなり安定していて成熟しているように見えたので、プロジェクトをフォークして(ここまで)、それを機能させました必要に応じて。元のプロジェクトの背後にある目標は単純さであり、特に関係するファイルの1つが現在の雇用主にとってのみ有用であるため、プルリクエストが受け入れられるとは思えません。 最後に、setup.pyファイルを更新する必要があると思いましたが、よくわかりません-私はフォークに対して「有用な」量の作業を行いました。元のファイルをそのままにして、自分のモジュールでサブクラス化している間、重要な追加機能。 Pythonによってインストールされるため、このモジュールの「作成者」であると主張するのが快適だとは思わないが、forkプロジェクトの作成者として、元のプロジェクトの作成者に宛てたサポートメールを残しておくことに抵抗がある。 質問: フォークされたプロジェクトの一般的に受け入れられているベストプラクティスは何ですか?プロジェクトの名前を変更して、目的が異なることを示す必要がありますか?元のプロジェクトはpip経由では利用できません。そうでない場合、私のプロジェクトの構造により、フォークの代わりに元のプロジェクトを依存関係としてラップするだけで済みます。実際に変更をロールバックし、これらを新しいプロジェクトに入れて、両方をpyplにリストする必要がありますか、それとも元の作者に代わってこれを行っているのですか? ノート: 速読を支援するために見出しが追加されました。私は受け入れられたベストプラクティスを探しているので、信頼できるブログの投稿であれ、同じことを行った他のプロジェクトの例であれ、それらをバックアップするための情報源がない意見はありません。
8 python  gpl 

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