ソフトウェア工学

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

4
GPLに独自のソフトウェアをGPLライブラリとリンクできるようにする抜け穴がありますか?
仮想のシナリオを調べてみましょう。 X社は、独自のライブラリ(B)と動的にリンクする独自のプログラム(A)を作成します。Y社は、GPLの下でライセンスされた置換ライブラリ(C)を使用するため、AとCの両方に動的にリンクし、Aが使用するAPI呼び出しをCが使用するAPI呼び出しに変換するラッパーライブラリ(D)を作成します。 DはCとともに使用することを目的としており、CのAPI呼び出しを使用するため、Cの派生物であるため、GPL *の条件の下で配布する必要があります。その結果、AとDを組み合わせた作品もGPLの条件の下で配布する必要があります。これは、Y社がAのソースコードを所有していないため不可能です。 、 問題はない。ただし、Y社の行動に関係なく、X社はBがなくてもAを配布することでGPLに違反しません。Dが存在するだけでは、AがCの派生作品(Dを介して) GPLも同様です。 さて、これは抜け穴がある:、Dの独自のバージョンを書いAとは別に、それを配布し、代わりにBのDを使用するようにエンドユーザーに伝えるからX社を止めるものは何もありませんA.を実行するとする場合それは、同社が可能であると思われますラッパーモジュールを使用して独自プログラムをGPLライブラリから隔離し、そのモジュールが個別に配布される限り、GPLに違反することなくGPLライブラリを使用する独自プログラムを設計する。 私の推論は正しいですか?これはGPLの本当の抜け穴ですか? * DはAの派生物でもありますが、このシナリオの目的のために、X社はDの作成を明示的に許可し、GPLの下でライセンスを許可しています。
15 gpl 

2
エンティティからDTOへの使用
基本的な階層型Webアプリケーションのフローを考え出そうとしており、競合する情報をオンラインで読んでいます。私が理解しようとしているのは、何らかのマッパーを使用して、DAOからサービスレイヤーへのDTOオブジェクトを引き続き使用する利点があるかどうかです。 私が予見する基本的な流れは次のとおりです。 UIモデル/フォーム->コントローラー コントローラーはモデルをドメインオブジェクト(エンティティ)に変換します ドメインオブジェクト->サービスレイヤー ドメインオブジェクト-> DAO DAO->ドメインオブジェクト サービス-> UI UIはドメインをUIモデルに変換します DTOに従った場合、DAOはエンティティではなくDTOを返します。(少なくともJavaでは)エンティティがアノテーション付きのPOJOになったため、DTOがわずかに機能しなくなったようです。つまり、メモリフットプリントが非常に小さくなっています。 これは事実ですか、それともDTOを使用してドメインオブジェクトをDAOレイヤー内に完全にカプセル化する必要がありますか?また、この場合、サービスレイヤーはDAOに何を渡しますか? 本当にありがとう!
15 java  entity  jpa 

2
xmlコメントに2つのハイフンを含めることができないのはなぜですか
XmlParserが2つのハイフン(--)がxmlコメントで許可されていないことを報告したときに、構成ファイルのxmlコメントにマークダウンコメントを適用していました。 XML仕様を確認すると、xmlコメントはSGMLパーサーとの互換性の理由から2つのハイフンを含むように設計されていないようです。 SGMLパーサーがコメントで二重ハイフンを許可しないのはなぜですか?
15 xml  sgml 

2
C11のkeywordsいキーワードはなぜですか?
現在、C11仕様のドラフトを読んでいます。新しく導入されたキーワード:_Bool, _Alignof, _Atomicのような標準の予約キーワードではなく、すべてカスタム拡張のように感じstruct, union, intます。 標準は基本的に標準化された拡張機能で構成されていることを理解しています...しかし、それでもひどいです!すぐに__Long_Long_Reallylong_Integer_MSVC_2020_t規格に忍び寄ってしまうかもしれません! 非標準コードの後方互換性がキーワードの新しいスタイルの唯一の理由ですか?
15 c  keywords 

4
成功または失敗が唯一の懸念事項である場合にブール値を返す
多くの場合、複数の場所で使用されているメソッドからブール値を返すことで、そのメソッドに関するすべてのロジックを1か所に収めています。(内部)呼び出しメソッドが知る必要があるのは、操作が成功したかどうかだけです。 私はPythonを使用していますが、質問は必ずしもその言語に固有のものではありません。考えられる選択肢は2つだけです 例外は発生しますが、状況は例外ではありません。関数が呼び出されるすべての場所でその例外をキャッチすることを忘れないでください 私がやっているようにブール値を返します。 これは、私が話していることを示す本当に簡単な例です。 import os class DoSomething(object): def remove_file(self, filename): try: os.remove(filename) except OSError: return False return True def process_file(self, filename): do_something() if remove_file(filename): do_something_else() 機能的ではありますが、私はこのようなやり方を本当に嫌いです。「臭い」がし、場合によっては入れ子にされたifが大量に発生することがあります。しかし、もっと簡単な方法は考えられません。 os.path.exists(filename)削除を試みる前に、よりLBYLの哲学に目を向けて使用することもできますが、その間にファイルがロックされないという保証はありません(可能性は低いですが可能です)し、削除が成功したかどうかを判断する必要があります。 これは「受け入れられる」設計ですか。そうでない場合、これを設計するより良い方法は何でしょうか?

4
一部のプログラマーがC、Python、C ++を異なるカテゴリーに分類するのはなぜですか?-レベルについて
私はpythonの入門コースを受講しており、講師はpythonは高レベル言語であり、CおよびC ++は低レベル言語であると言っています。紛らわしいです。C、C ++、Python、Javaなどはすべて高レベル言語だと思いました。 私はC、C ++などのstackoverflowで質問を読んでいたが、それらはすべてそれらの言語を高レベルと呼んでいるようだ。一部のプログラマーはこれらの用語を同じ意味で使用しているようです。

2
コンストラクタの代わりにファクトリメソッドを使用する必要がありました。それを変更しても下位互換性はありますか?
問題 ファイルからデータを読み取るためのメソッドDataSourceを提供するクラスReadData(および他のクラスもありますが、物事をシンプルにしましょう)があるとし.mdbます。 var source = new DataSource("myFile.mdb"); var data = source.ReadData(); 数年後、データソースとして.xmlファイルに加えて.mdbファイルもサポートできるようにしたいと決めました。「データの読み取り」の実装は.xml、.mdbファイルとファイルでまったく異なります。したがって、システムをゼロから設計する場合、次のように定義します。 abstract class DataSource { abstract Data ReadData(); static DataSource OpenDataSource(string fileName) { // return MdbDataSource or XmlDataSource, as appropriate } } class MdbDataSource : DataSource { override Data ReadData() { /* implementation 1 */ } } class XmlDataSource …

1
Web APIを保護するためのベストプラクティスは何ですか?
モバイルアプリがサーバーとデータベース(ASP.Net MVC 4にありますが、それはほとんど関係ありません)とやり取りするために、WebサービスAPIを構築する必要があります。ほとんどのアクションではユーザーをサービスに登録する必要はありませんが、アプリのユーザーのみにアクセスを制限したいと思います。 他の場所(たとえば、すべてのデータを必要としている人や非公式アプリを作成している人)からの呼び出しを拒否するための方法は何ですか? 私の最初のアイデアは、デバイスがサーバーにトークンを要求することです。トークンはランダムに生成され、そのまま送信されます。他のすべてのメソッドは、ソルトされたトークンのmd5ハッシュになる特定のヘッダーがリクエストヘッダーに含まれていることを確認します。サーバーはトークンとソルトを認識しており、ハッシュを計算して送信されたものと比較できます。さらに、トークンは限られた寿命であり、デバイスは1時間おきに別のトークンを取得する必要があります。 これは実装が非常に簡単で、おそらく100%の証拠ではありませんが、良いアイデアのようです。どう思いますか?

1
Debian用のPHP Webアプリケーションをパッケージ化するための優れたアプローチ
多くのPHP Webアプリケーションは、インストールおよびアップグレードのためにこのモデルに従います。 ソースtarボールを展開します。 Apacheをソースに向けます。 Webブラウザーをホームページに移動します。 セットアップのいくつかのWebページを調べます(たとえば、ライブラリの存在の確認、データベース接続情報の要求、データベーススキーマの作成または更新など)。 ユーザーがinstall/ディレクトリの名前を別の名前に変更し、アプリケーションがインストールされたことを認識できるようにします。 パッケージをインストールするユーザーに上記の手動ステップの多くを行わせることなく、これからDebianパッケージを作成する(簡単な)方法はありません。私はアプリケーションの開発者ではないため、アプリケーションのインストール方法を直接変更することはできません。 そのようなアプリケーションをパッケージ化するための典型的なアプローチは何ですか?

5
アップロードされた画像に名前を付けるためのベストプラクティスは何ですか?
ユーザーがプロフィール写真をアップロードできるフォームがWebアプリケーションにあるとします。 ファイルサイズ、サイズなどに関する要件はほとんどありませんが、ユーザーが画像をアップロードするときに、システム上でどのように名前を付ける必要がありますか?一貫性があり、一意である必要があると思います。 多分GUID? a5c627bedc3c44b7ae7c06a44fb3fcf8.jpg タイムスタンプ? 129899740140465735.jpg ハッシュ?例:md5 b1a9acaf295cf14ffbc5b6538294562c.jpg これを行うための標準的な方法または推奨される方法はありますか?

4
リレーショナルデータベースがSQLクエリのみを受け入れるのはなぜですか?
私の知る限り、ほとんどのリレーショナルデータベースはquery、引数としてSQL文字列を受け取る関数を除き、クエリ用のドライバレベルAPIを提供していません。 私はそれができるとしたらどれほど簡単になると思っています: var result = mysql.select('article', {id: 3}) 結合されたテーブルの場合、少し複雑になりますが、それでも可能です。例えば: var tables = mysql.join({tables: ['article', 'category'], on: 'categoryID'}); mysql.select(tables, {'article.id': 3}, ['article.title', 'article.body', 'category.categoryID']) よりクリーンなコード、文字列解析のオーバーヘッドなし、インジェクションの問題なし、クエリ要素の再利用の容易化...多くの利点が見られます。 SQLを介したクエリへのアクセスのみを提供するように選択された具体的な理由はありますか?
15 database  sql 

4
なぜCem Kanerはテストがバグを明らかにしないと時間の無駄だと考えるのですか?
肯定的なテストで機能を確認し、機能していることを証明するのはどうですか?時間の無駄だと言えますか?この引用の背後にある概念は何ですか? 失敗したテスト、つまりエラーを見つけられないテストは時間の無駄です。 Web Engineering:Cem Kanerを引用したWebアプリケーションの体系的開発の規律。
15 testing  theory 

3
ネストされた関数呼び出しが多すぎますか?
StackOverflowExceptionについてMSDNから引用: ネストされたメソッド呼び出しが多すぎるために実行スタックがオーバーフローしたときにスローされる例外。 Too manyここはかなりあいまいです。多すぎると本当に多すぎることをどのようにして知ることができますか?何千もの関数呼び出し?何百万人?私はそれが何らかの形でコンピュータのメモリの量に関係しているに違いないと思いますが、大体正確な大きさのオーダーを考え出すことは可能ですか? 再帰構造と再帰関数呼び出しを多用するプロジェクトを開発しているので、これが心配です。ほんの小さなテスト以上に使用し始めたときに、アプリケーションが失敗するのは望ましくありません。

5
技術的に熟練した上級ソフトウェア開発者が改善し続けるために研究できること[非公開]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 プログラミングを10年以上続けているとします。多くの言語を知っていますが、非常に詳細なレベルの言語はほとんどありません。ソリューションのアーキテクチャを設計し、より大きなプロジェクトに取り組み、提供してきました。パターン、ベストプラクティス、効果的なコーディングガイドライン、単体テスト、マルチスレッドなどを研究してきました。 そして、あなたは読んでいる本のほとんどが、100ページのテキストあたりますます価値のない情報を与えるという感覚を徐々に身につけます。そのため、収益は減少し始めます。あなたはまだ学びますが、飛躍的に向上することはありません。 学習が以前と比べて生産性が低下するのはなぜですか? 当時、それはあなたの考え方を変え、新しいことを教え、あなたの現在の職業を後に改善するか、新しいものを発明/管理/構築することを可能にする視野を広げました。なぜそうではないのですか?

1
Apacheライセンスと特許
Apacheライセンスが特許にどのように影響するかを理解しようとしています。Apache Webサイトhttp://www.apache.org/licenses/LICENSE-2.0セクション3に関して、最初の部分で、ライセンシーは特許に関してほとんど何でもできると言っていると言ってもいいですか? 後者の部分では、ライセンサーが自分の特許を侵害している人を訴えることにした場合、彼らはすべての特許を失うことになるのでしょうか、それともライセンシーについて話しているのでしょうか?

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