ソフトウェア工学

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

1
ベイズ分類器がスパムフィルタリングに使用されるのはなぜですか?
ベイジアンスパムフィルタリングについて読んでいて、理論は理解していると思いますが、メッセージに特定の単語が含まれている場合、メッセージがスパムである可能性を計算するためにこのアプローチが必要な理由がわかりません。 ユーザーによって「スパム」または「ハム」のいずれかに分類された一連のメッセージがあり、分類したい新しいメッセージ(選択した単語を含む)を受け取った場合、確実に行う必要があるのは、数を除算することだけです。単語を含むスパムメッセージの数、単語を含むメッセージの総数...なぜすべての方程式なのか?

3
PHPでは、スケーラビリティを考慮してどのようにコーディングしますか?
これは一般的な質問かもしれませんが、今後数か月間でなくても、実際に遭遇するすべてのユーザーのスケーリングに何が入るのでしょうか?私はいくつかの調査を行いましたが、行われることのほとんどはサーバー側で、キャッシュやその他の類似のものを使用しています。正しい方向の任意のポイントが参考になります。

4
本当に「プッシュ」というものはありますか?
電気信号の領域から脱出し、ソフトウェアを処理しているときに、定期的なポーリングが行われない「プッシュ」アーキテクチャのようなものは本当にありますか? あるレベルでポーリングしていないデザインは考えられません。それは常に、あなたが扱っている実際の抽象化/ APIの1レベルか2レベル下にあるようです。ほとんどの「プッシュ」接続の受信側のソケットは、着信要求などをポーリングするだけです。

2
ネストされたコレクションをよりエレガントに処理する方法はありますか?
私の質問はむしろデザインの質問です。私のプログラムでは、次のようなデータ構造に到達しました。 private ConcurrentHashMap<A, ConcurrentHashMap<B, ConcurrentHashMap<Integer, C>>> services = new ConcurrentHashMap<A, ConcurrentHashMap<B, ConcurrentHashMap<Integer, C>>>(); そのようなデータ構造をよりエレガントに処理する方法はありますか?ありがとう! edit:A、B、Cはビジネスクラスです。Aインスタンスは(関連付けとして)多くのBを「持つ」ことができ、Bは多数のマッピングを「持つ」ことができますInteger-C。

3
オーバーロードされた関数を正しくチェーンする方法は?
次のように増加するオプションのパラメーター(およびオプションのパラメーターと任意の数のパラメーターを許可しない疑似言語)を取る関数があるとします。 function doStuff(Param a) function doStuff(Param a, Param b) function doStuff(Param a, Param b, Param c) それらを単一の呼び出しに統合する良い方法は何ですか?2つのデザインを想像できます。 すべて落ちる: function doStuff(Param a) doStuff(a, defaultB) function doStuff(Param a, Param b) doStuff(a, b, defaultC) function doStuff(Param a, Param b, Param c) // magic goes here メリット:コードの重複が少なく、単一のデフォルトパラメータを簡単に変更できます。 欠点:多くの関数呼び出しにより、スタックトレースが読みにくくなるか、役に立たなくなる可能性があります。 または、「最後の」関数を直接呼び出します。 function doStuff(Param a) doStuff(a, defaultB, …

1
変更管理基準
ソフトウェアおよびその他の業界で広く受け入れられている変更管理標準はありますか?私はターゲットドメインがまったく異なる複数の企業で働いていました(投資銀行と通信)。企業は、非常によく似たグローバル変更管理(GCM)の組織とプロセスを持っていました。すなわち: 全社的なファイアウォールの変更、データベースの割り当て/サポート、バージョン管理システムのサポートなど、IT関連のすべての変更を担当するGCM部門がありました。 変更がフリーズするような考えがありました。変更の実装日が変更の凍結日と同じ場合、変更を実装することができませんでした。 ありましたGCM会議(カンファレンスコール)誰もが彼らの変更の必要性と重要性を議論したときには。GCM部門の担当者が毎週同時に開催しました(火曜日、グリニッジ標準時17:00など)。 変更は変更承認者によって承認されている必要があります。必須の承認者グループの独自のリストを持つさまざまな種類の要求がありました。グループには、いくつかのメンバーが異なるタイムゾーンで働いていました。グループ全体が変更を承認するためには、少なくとも1人のメンバーがGCMを承認している必要があります。スケジュールされた実装時間になる前に、すべての必須の承認者グループの承認が収集されている必要がありました。それ以外の場合は、実装されないという100%の保証がありました。 GCMプロセスの官僚主義は注目に値しました。それは純粋な官僚の地獄でした。ツールはひどく、人々は遅くて頑固でした。小さな変更を実装することはほぼ不可能でした。実装時間の前に最後の承認が得られない場合や、変更の凍結時に実装時間がスケジュールされていることが突然判明した場合があります。 私はそれを見てみたいので、GCMプロセスとそれらがさまざまな会社でどのように機能するかについての一般的な理解を得たいと思います。それがどこでもひどいひどいものなのか、それとも特定の企業でのGCMプロセスの実装が不十分なだけなのか知りたい。

1
HTML5ビデオスプライト
現在、単一のキャンバスに複数の同期されたビデオソースを動的に合成する必要があるプロジェクトに取り組んでいます。私がまとめた最初のプロトタイプはビデオをHTMLVideoElementsにロードし、次にrequestAnimFrameを(Paul Irishのshimを介して)使用してこれらを単一のキャンバスに描画し、異なる要素間の同期を維持しました。 これは機能的であり、システムはかなり良好に同期を保持できます(許容誤差+/- 80ミリ秒)が、控えめに言ってもやや非効率的です。私は最適化について考えてきましたが、かなり簡単に思える1つのアプローチは、すべてのメディアを1つの大きな「ビデオスプライト」に組み合わせてこれを提供することです。これにより、それを単一のビデオ要素にロードして、クライアント側で関心領域を抽出してレンダリングし、drawImage()ソース間の同期を管理する必要をなくすことができます。 他の誰かが過去に似たようなものを実装しましたか?もしそうなら、どのアプローチがあなたのためにうまくいきましたか?

3
メールアドレスの大文字と小文字の区別に関するプログラミング
多くのウェブサイトと同様に、ログインのユーザー識別子としてメールアドレスを使用しています。 RFC 5321 [ #2.3.11 ]には、電子メールアドレスのローカル部分は次のように記載されています。 アドレスのドメイン部分で指定されたホストのみがセマンティクスを解釈して割り当てる必要があります つまり、メールアドレスを処理するアプリケーションでは、GMailがユーザー名を決定するときにドットを無視する方法など、2番目に推測することはできません。また、ローカルパーツが指定されているため、アプリケーションはメールアドレスのローカルパーツを大文字と小文字を区別するものとして扱う必要があります。 しかし、ユーザーは愚かで、最近のケースでは、大文字のメールアドレスでサインアップした(そして確認メールを正常に受信してクリックした)ユーザーが、小文字のメール形式を使用しているため、ログインできないことに気付きました。住所。 受信トレイで大文字と小文字を区別するメールサーバーに遭遇したことはありません。一部がどこかに存在することは間違いありませんが、メールのユーザー名の大文字と小文字を区別することには、それを維持する問題よりも大きなメリットがないのではないかと疑問に思っています。 私は、GMailのドット処理やあらゆる種類のプラスアドレッシングをエミュレートすることはしません。なぜなら、それらはユビキタスであるとは思われず、大文字と小文字を区別するほど自動的に想定されないからです。しかし、私はそれが白黒のシナリオではないことを知っているので、誰かが実際に広範囲の大文字と小文字を区別するメールアドレスがどれくらいあるか知っているかどうか興味があります。

3
コードを適切に検証する方法は?
JavaScript / PHP / CSS / HTMLのWebアプリケーション用に約4000行のコードがあります。どうすれば適切にテストできますか? IEとSafariの最新バージョンのみをサポートしています。私はすべてのバグを解決しました。それをテストして、コードをロバストと呼べるようにするための良い方法はありますか? 私は、perl Mechanizeを使用してフォームに自動入力するか、同様のことを行うことを検討しました。 また、PHPクラスの内部動作をテストするためのPHPテストクラスもあります。ただし、満たす必要がある標準または適合性のガイドラインはありますか?このコードがコードの強盗などのIEEE xxx foo標準に合格していると言う方法はありますか? W3バリデーターを使用してHTMLを検証し、jslint.comを使用してJavaScriptを検証しました。 勤勉項目のリストはここにあります: HTML / CSSがW3検証に合格 JavaScriptはjslintを渡します PHPが内部PHPテストクラスに合格 ユーザーテスト ユーザーアクションのセットを作成し、perl mechanizeなどを使用して実装します。 コードをWebにリリースするための標準または手順はありますか?
8 php  javascript  html  css  testing 

2
ダウンキャストとアップキャストという用語は誰が決めたのですか?
私の知る限り、この用語は継承階層が伝統的にどのように表示されるかから来ており、下部に拡張型、上部に親型があります。 これは、次のleftcastingおよびrightcastingを呼び出す気がしない限り、少し無意味です。 用語がそのままである理由を私は探していませんが、コメントとして大歓迎です。私は最初にアップキャスティングとダウンキャスティングを紹介した人、そしてなぜ彼らがその名前を決めたのかについての参考文献を探しています。

5
Python:「インポート」を使用する意味は何ですか?
この点についてはあまり明確ではありません。独自のモジュールである.pyファイルがたくさんあるとします。 各.pyファイルがそのクラスを使用するときに他のファイルをインポートする必要があるのはなぜですか?それともそうですか?他の言語(Javaなど)は、同じディレクトリ内のクラス/ファイルを参照するときにインポートする必要がないことを確信していたからです。私は間違っているかもしれません。
8 python  modules  class 

7
プログラマーとして、私は私の手の甲のように何を知っているはずですか?[閉まっている]
現在のところ、この質問は、Q&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張ディスカッションを誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 システムやネットワークの管理ではなく、プログラミングのみに関連することについて話しています。 大学を卒業してプログラミングの仕事に就こうと思っているので、これについて知りたいです。これは主観的な質問のように思えるかもしれませんが、これは完全なものではなく、ベストプラクティスのカテゴリに分類されると思います。 プログラマーが彼が作業しているOS、彼が作業しているフレームワークのすべてのAPI、彼が使用している言語のすべての機能と癖、すべてのデータ構造とアルゴリズム、彼のすべての設定について知っているとは思えませんコンパイラ、リンカ、IDEなど。実用的ではないと思います。または彼はできますか? 通常の答えは「ほとんど」です。これは何ですか?約5年の経験を持つプログラマーにインタビューする場合、彼に何を知っていると思いますか?または、面接に出席し、約10年の経験がある場合、何を復習しますか?

8
一般的な単体テストの足場コードを作成することの利点と欠点
私のチームと私が取り組んでいるプロジェクトでは、大きな足場のコードが必要になることがよくあります。正しい値を持つドメインオブジェクトの作成、リポジトリのモックの設定、キャッシュの処理などは、すべてのテストで一般的に発生することです。多くの場合、ドメインの中心となる同じ基本オブジェクト(人、...)で作業しているため、他のオブジェクトで作業するために、多くのテストでこれらのオブジェクトのインスタンスが作成されます。基本ドメインを使用するさまざまなソリューションがたくさんあるので、この種のコードは多くの場合、それらのソリューションに分散しています。 私はこの足場の多くを行う共通のクラスを作成することを考えてきました。これにより、すべてが設定された完全にインスタンス化された人(リポジトリ経由のアクセス、キャッシングなど)をリクエストできます。これにより、個々の単体テストから重複したコードが削除されますが、テストごとに「多すぎる」コードが大量にあることも意味します(必要なパーツだけでなく、完全なオブジェクトが設定されるため)。 誰かこれをしたことがありますか?このアプローチを検証または無効にする可能性のある洞察、発言、考えなどはありますか?

7
吟味できない重要な入力をどのように検証しますか?
入力を吟味する実用的な方法がないときに、ユーザーが誤った入力セットを作成するのをどのように防ぐのですか? シーン Visual FoxProで書かれた小さなERPパッケージを変更します。パッケージの一部は、トラックのマニフェストとドライバーが配達ルートに送る請求書を印刷することに関係しています。入力として何も入力されない場合、印刷ルーチンはすべてを印刷しようとするため、高速プリンターで無駄になる大量のプリンター用紙が発生します。 私は、GUIインターフェース要素を書き換える立場になく、フレームワーク、ツールキット、またはその他の外部コードをこの状況で使用するように改造することもできません。理由はオフィスの政治に関連しています。既存のERPフレームワークを上書きできるとは言わないでください。これは私には選択肢がないためです。 問題 ユーザーは、圧力が高く、タイムクリティカルな環境にいます。各プロセスは数分または数秒で測定されます。つまり、処理時間をできるだけ最小限に抑える必要があります。この環境と気が散る可能性があるため、ユーザーはダイアログを頻繁に無視し、[Enter]キーを押すと、フォーカスがフォーム内をすばやく移動し、最終的に入力ダイアログのアクションボタンに移動して、自動印刷がトリガーされます。 。 入力は、日付範囲、ルート範囲、および受注範囲で構成されます。 頻繁なバックプリントが必要なため、日付範囲の入力を「今日の日付」に自動設定することはできません。また、エンドユーザーは真夜中に作業を行います。つまり、日付のロールオーバーは、変更を自動検出するルーチンを装備することなくこれを非現実的にします。 ルートの入力はハードコードできません。また、再印刷が必要なため(上記を参照)、すでに出荷されているルートからそれを推定することはできません。 販売注文の入力は、単一の注文または特定の範囲を印刷する場合にのみ意味があります。 したがって、率直に言って、入力を検証する実用的な方法はありません。 印刷をトリガーするアクションボタンはブロックできません。ユーザーの前にブロッキングダイアログを配置するという提案は無視されます。これがオプションではない理由については、私は自由に議論することはできません。ただし、この概念はサイトの他の場所で(別の視点から)すでに議論されており、拒否されました。 ソフトウェアが機能としてこれに対応する必要があるため、すべての入力が空のときに印刷出力をブロックすることは、設計決定として拒否されました。 ユーザー ユーザーはこれを繰り返さないよう繰り返し求められています。彼らはしばしばこのアドバイスを無視します。この不幸な出来事を引き起こすことは彼らの職長/マネージャーが対処するものではないので、行動を終わらせる圧力はありません。 組織 関係するワークフローには発言権はなく、そのワークフローによって影響を受ける既存のソフトウェアコンポーネントの変更のみです。 提供事業者 ベンダーは、元のソフトウェアベンダーからカスタムインストールとしてパッケージをセカンドソースします。ベンダーは、コードベースへの統合のために、すべてのコード変更をベンダーに送り返すことを要求しています。アーキテクチャに大幅な変更を加えると、広範なカスタマイズが行われるため、バージョンの移行中に将来のコストが増加します。場合によっては、プログラマーは、そのような大きな変更を完全に無視し、好きなように実行することを私に伝えさえしました。 ソフトウェア ソフトウェアの選択やインストールについては言うまでもないので、プラットフォームの変更は問題外です。 ソフトウェアの環境に関しては、印刷される各請求書は単一の呼び出しです。バッチ印刷機能はありません。印刷機能がシステムに統合されている方法(および一部の言語の癖)のため、そのAPIの周りにバッチラッパーを作成することはできません。これに加えて、プログラムのこの部分は、請求書印刷を実行する別のプログラムを呼び出し、次に、請求書を1つ印刷するprint-a-report APIを呼び出します。恐ろしいデザインですね。 入力フォームはフォームヘッダーの奇妙な組み合わせで、入力ボックスはありませんが、他のGUI要素を含めることができます。入力ボックスは実行時に定義されます。 目的 ソフトウェアは、ユーザーが誤ってすべての書類を印刷することを防ぎます。 この問題をどのように解決しますか?
8 gui  erp 

1
「コア」の基本を超えて学ぶために不可欠なClojureライブラリは何ですか[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 私は自分にClojureを教えています。私はライニンゲンを使い始めました。私はClojure Koansに取り組んでいます。次にLabREPLを実行する予定で、Noirを調べます。 私の質問は次のとおりです。上記の学習計画でカバーされているものを超えて知っておく必要のあるClojureのライブラリと関数は何ですか? Clojure Contribを見ると、多数のライブラリがあります。プロ(またはOSS)Clojure開発者として、日常的にどちらを使用していますか?どれがそれほど有用ではないか、そうでなければ一般的に使用されないか(つまり、難解であるか、日常のコーディングで頻繁に登場しない)。

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