ソフトウェア工学

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

4
データ値をプログラムにハードコーディングする利点はありますか?
私は独学で初心者っぽいコーダーなので、プログラマーの専門用語に釘付けにならなければ謝罪します。 私は、データのクエリからレポートを生成するツールを本質的に作成する開発者に継続的に更新されるデータを提供するプロジェクトに取り組んでいます。 関係者全員が、データ値(スキーマではなく、ドメイン/値自体)をレポート生成プログラムにハードコーディングする必要があると考えているようです。 たとえば、人員について報告しているとします。レポートは各部門の見出しを持つカテゴリに分割され、各部門の見出しの下に役職の小見出しが表示され、各小見出しの下に従業員のリストが表示されます。開発者は、部門と役職をハードコーディングしたいと考えています。一方、実行時にそれらをクエリし、レコードでソートし、そこにある値に基づいてレポートヘッダーを動的に生成できると思います。 潜在的な値のリストは時間とともに変化するため(たとえば、部門の作成/名前の変更、新しい役職の追加など)、コードを継続的に更新する必要があります。私は、コードのメンテナンス手順をスキップして、レポートを動的に整理できるように思えます。 私は開発者ではないので、何が欠けているのだろうと思っています。このようなツールに値をハードコーディングするとどのような利点がありますか?これは通常、プログラムの設計方法ですか?

1
Flask.runよりもフラスコCLIが推奨されるのはなぜですか?
Flask 0.11では、flaskCLIが導入されました。docsとchangelogの両方に、これが推奨されています。 開発サーバーのドキュメント: Flask 0.11以降、開発サーバーを実行するための複数の組み込み方法があります。最良の方法は、フラスココマンドラインユーティリティですが、このFlask.run()方法を引き続き使用することもできます。 コマンドライン フラスコ、それは優れたリロード体験を提供するため、コマンドラインスクリプト(コマンドラインインタフェース)が強くにより、アプリケーションをロードする方法を開発することをお勧めします。基本的な使用方法は次のとおりです。 $ export FLASK_APP=my_application $ export FLASK_DEBUG=1 $ flask run 変更ログ: クリックCLIシステムを介してローカルデバッグサーバーを起動flaskするflask.cliモジュールが追加されました。これはflask.run()、異なる設計と置換のために、より速く、より信頼性の高い動作をするため、古い方法よりも推奨されますFlask-Script。 これまでのところ、この「優れたリロードエクスペリエンス」に気付きませんでした。カスタムスクリプトでCLIを使用する意味がわかりません。 を使用する場合Flask.run、私は単にPythonファイルを書くでしょう: #!/usr/bin/env python3 from my_app import app if __name__ == '__main__': app.run(debug=True) CLIを使用する場合、環境変数を指定する必要があります。CLIドキュメントでは、これactivateはvirtualenvwrapper のスクリプトに統合できると述べられています。個人的には、これはアプリケーションの一部であると考えており、バージョン管理下にあるべきだと思います。残念ながら、シェルスクリプトが必要です。 #!/usr/bin/env bash export FLASK_APP=my_app:app export FLASK_DEBUG=1 flask run もちろん、Windowsユーザーが共同作業を開始するとすぐに、追加のbatスクリプトが伴います。 また、最初のオプションでは、実際のアプリを起動する前にPythonで記述されたセットアップを許可します。 これにより、たとえば Pythonでコマンドライン引数を解析する アプリを実行する前にロギングをセットアップする 彼らは、カスタムコマンドを追加することが可能であると宣伝しているようです。オプションのエントリポイントを介して公開される単純なPythonスクリプトを記述するよりも、これが優れている理由がわかりません。 Python実行スクリプトを使用して構成されたロガーを使用する場合のロギング出力の例: $ ./run.py …
13 python  flask 

6
「Cでアセンブラーを記述します。」なぜ低レベル言語の機械語翻訳機を高レベル言語で書くのですか?
私のマイクロプロセッサクラスのインストラクターが私たちに課題を与えて言った: 「Cでアセンブラーを作成します。」-私の最愛の教授 だから、私には少し非論理的に思えた。 私が間違っていなければ、アセンブリ言語は、機械語コードから高レベル言語の旅への最初のステップです。つまり、Cはアセンブリよりも高レベルの言語です。では、Cでアセンブラーを書く意味は何ですか?C言語がないのに、彼らは過去何をしていたのですか?彼らはマシンコードでアセンブラーを書いていましたか? 低レベル言語用の機械語翻訳を高レベル言語で書くのは意味がありません。 たとえば、そのアーキテクチャ用のCコンパイラさえない、まったく新しいマイクロプロセッサアーキテクチャを作成したとします。Cで記述されたアセンブラは、新しいアーキテクチャをシミュレートできますか?私はそれが役に立たないかどうかを意味しますか? ところで、GNU AssemblerとNetwide AssemblerはCで書かれていることを知っています。また、なぜそれらがCで書かれているのだろうかと思っています。 最後に、これは私たちの教授が私たちに与えた単純なアセンブラのソースコードの例です。 // to compile, gcc assembler.c -o assembler // No error check is provided. // Variable names cannot start with 0-9. // hexadecimals are twos complement. // first address of the code section is zero, data section follows the code section. …

3
Githubのライセンス
私は初めてGitHubにアップロードしていますが、ライセンスに関するあらゆる疑問に直面しています。トピックがネットで明らかになったことを知りませんでした!しかし、それが複雑であっても、私の状況は非常に典型的であるため、Githubを使用しているほとんどの人はこのことをすでに知っていると思います。 Maven(パッケージとビルドJavaマネージャー)のPOMでサードパーティのライブラリを参照しているアプリを公開してアップロードし、それらを明らかにコードで呼び出したいだけです。それらのいくつかはGPL、他のApache、他の複数のライセンスです... あなたは通常、これらすべてを心配する必要がありますか?バイナリやサードパーティのライブラリを配布したり、修正したり、商業的に使用したりすることはありません...「明示的に言及する必要がありますか?」どのファイルに?自分のライブラリにGPLライセンスを使用する必要がありますか? インターネット上の情報が文字通りどのようになっているのか不思議に思うのは、Spring、JUnitなどの使用を参照している通知を持っている人を見たことがないということです...
13 licensing  gpl  github 

6
円と楕円の問題は、関係を逆にすることで解決できますか?
持つCircle拡張Ellipse休憩にリスコフSubstition原理、すなわち、あなたはXとYが独立して楕円を描くように設定することができますが、Xは、常に円のためにYに等しくなければなりません:それは事後条件を変更するため、。 しかし、ここでの問題は、Circleを楕円のサブタイプにすることによって引き起こされたのではないでしょうか?関係を逆転させることはできませんか? ですから、Circleはスーパータイプです-メソッドは1つだけですsetRadius。 次に、setXとを追加して、楕円が円を拡張しsetYます。setRadiusEllipseを呼び出すと、XとYの両方が設定されます。つまり、setRadiusの事後条件は維持されますが、拡張インターフェースを使用してXとYを個別に設定できるようになりました。

3
webappをデプロイするシステムのヘルスチェックの範囲はどのくらいですか?
今日、Webアプリを展開するオーケストレーションシステムである長期実行サービスの「ヘルスチェックを記述する」タスクがありました。 私はそのようなヘルスチェックの範囲が何であるかを決定しようとしていますが、ヘルスチェックの範囲に関連するこれらの質問を思いつきました: オーケストレーションシステムがタスクの実行を報告している場合、サービスが正常であると考えるのに十分ですか? または、各サービスを手動でpingする必要がありますか? または、さらに進んで、Webページを表示するなど、Webアプリケーションが本来行うべきことを確実に実行しようとする必要がありますか? ヘルスチェックでは、いくつかの依存サービスも実行されていることも確認する必要がありますか?データベースまたはオーケストレーションシステム自体のように。または、それは別のヘルスチェックの責任ですか? そして最後に、依存サービスの1つが停止し、その後Webアプリが失敗した場合、WebアプリはWebアプリの障害ではないため、健康状態が悪い、または健康状態を報告する必要がありますか? これらは5つの個別の質問であることがわかっていますが、これらはすべて、Webアプリを展開する長期実行サービスのヘルスチェックの範囲に関連しているため、1つの質問にグループ化しておく方が理にかなっていると思いました。 健康なものの定義や、このようなものの標準的な健康チェックがどのように見えるべきかがわからないため、これを実装するのは困難です。 この特定のサービスのヘルスチェックには何を含める必要がありますか?

1
静的メソッドを悪用していますか?
数ヶ月前、私は新しいプロジェクトで働き始めました。コードを調べてみると、使用されている静的メソッドの量が多くなりました。としてのユーティリティメソッドだけcollectionToCsvString(Collection<E> elements)でなく、多くのビジネスロジックも保持されます。 私はこの背後にある理論的根拠の責任者に尋ねたとき、彼はそれが春の専制政治から逃げる方法だと言った。この思考プロセスに何かがあります:顧客の領収書作成方法を実装するために、サービスがあります @Service public class CustomerReceiptCreationService { public CustomerReceipt createReceipt(Object... args) { CustomerReceipt receipt = new CustomerReceipt(); // creation logic return receipt; } } さて、この男は、基本的にはクライアントクラスがSpring Beanでなければならないという制限を課しているため、Springによって不必要に管理されるクラスを持つことを嫌うと言いました。最終的にすべてをSpringで管理することになります。これにより、手順を踏まずにステートレスオブジェクトを操作する必要が生じます。ここに記載されている内容は多かれ少なかれhttps://www.javacodegeeks.com/2011/02/domain-driven-design-spring-aspectj.html したがって、上記のコードの代わりに、彼は public class CustomerReceiptCreator { public static CustomerReceipt createReceipt(Object... args) { CustomerReceipt receipt = new CustomerReceipt(); // creation logic return receipt; } } …



2
同期用のベクタークロックではなく明示的なDAG
私は、一連のピア間でのデータ同期へのアプローチを検討し始めました。ピアは切断された方法で動作し、ローカルの変更をマージするために相互に同期できる必要があります。 ピアは、ローカルアップデートを「3方向マージ」とマージできるはずです。そのため、同期ピアでは、どのファクトがより新しいかを知る必要がありますが、厳密な順序付けがない場合は、共通ルートに基づいてファクトをマージできる必要があります。 独立したピアが変更を行う場合、「クロック」を使用して「タイムスタンプ」を付けることができます。「時計」と「タイムスタンプ」という用語を使用しますが、ウォールタイムクロックを意味しません。私は、因果関係を明確にするイベントのある種の部分的な順序付けを意味します。それはだ「の前に起こった」非循環有向グラフ(DAG)を形成するイベント間の関係。 この部分的な順序付けを行う「通常の」方法は、ベクトルクロックを使用することです。ただし、これらは非常に大きくなる可能性があります。間隔ツリークロックなどの最近の開発では、タイムスタンプのよりコンパクトなストレージが提供されます。 私がまったく明らかにしていないのは、同期プロトコルが明らかにDAGを「単純に」明示的に保存しない理由です。(それともそうですか?) ピアは、UUIDをランダムに生成することにより(またはなどの他の手段により<peer-name> + <local-monotonically-increasing-counter>)、独立してタイムスタンプを作成できます。このタイムスタンプの順序は、そのピアにとって完全に明確です。 2つのピアが互いに同期すると、新しいタイムスタンプに同意できます。繰り返しますが、このタイムスタンプの順序は、両方のピアにとって明確です。 現在、ピア間でDAGの前に発生したイベントを渡す必要がありますが、これのストレージおよび帯域幅の要件はわずかです。時点はグラフの頂点です。そのため、1つまたは2つの着信エッジがあります(クライアント上のイベント用に1つ、クライアント間の同期用に2つ)。これは制限されており、ネットワーク内のピアの数に依存しません。 個々の時点を使用するには、これにつながる時点のグラフが必要です。しかし、私の知る限り、することができる任意のピアを知っている時点では(それはそれ自体を生成し、または他のピアとそれを生成し、またはそれと同期するときに、別のピアによってそれを言われていた)しているにも持っていましたその時点までの歴史について知る機会。おそらくこれには帰納的証拠があると思います。 DAGの保存と同期は明示的に簡単に思えますが、これは実際に使用されていますか?そうでない場合、ベクタークロックが優先されるのはなぜですか? ノート ピアツーピア クライアントサーバーソリューションよりもピアツーピアソリューションの方が望ましいです。 エンドトポロジとして考えられるのは、多数のクライアントが相互に複製するはるかに小さなサーバーグループに接続することです。ただし、この特定のトポロジを必要とするソリューションではなく、この特定のトポロジをサポートする一般的なソリューションがあると便利です。

2
OptionalsとNullableタイプの違いは何ですか
スイフトが持っていOptionalsます。C#にはNullable型があります。 両方が同じ目的を果たすことを伝えることができる限り、あるタイプの値に加えて、変数が値を持っているか未定義(初期化されていない)かを情報を保存します。 質問は、名前が異なるOptionalsだけのNullableタイプですか、または他の概念的な違いがありますか? 別の言い方をすると、概念自体について、または持っていない、Optionalsまたは持っていない言語の文脈で話すことはNullables、用語が使われていることを意味しますか? 言語でその機能を実装するとき、タイプに名前を付けるOptionals<T>か、Nullable<T>

4
Callable <T>とJava 8のSupplier <T>の違いは何ですか?
CodeReviewでのいくつかの推奨事項の後、C#からJavaに切り替えました。そのため、LWJGLを調べていたときに覚えていたことの1つは、への呼び出しはすべてDisplay、Display.create()メソッドが呼び出されたのと同じスレッドで実行する必要があるということでした。これを思い出して、私はこのようなクラスを作成しました。 public class LwjglDisplayWindow implements DisplayWindow { private final static int TargetFramesPerSecond = 60; private final Scheduler _scheduler; public LwjglDisplayWindow(Scheduler displayScheduler, DisplayMode displayMode) throws LWJGLException { _scheduler = displayScheduler; Display.setDisplayMode(displayMode); Display.create(); } public void dispose() { Display.destroy(); } @Override public int getTargetFramesPerSecond() { return TargetFramesPerSecond; } @Override public Future&lt;Boolean&gt; isClosed() …
13 java 


2
OOPの「オブジェクト」と「クラス」は、アセンブリ言語の観点からメモリ内でどのように編成されていますか?
オブジェクトはメモリ内でどのように編成されますか? たとえば、関数はメモリ内のコードの一部であり、スタックやレジスタを介してパラメータを期待し、独自のスタックフレームを処理することを知っています。 しかし、オブジェクトははるかに複雑な構造です。彼らはどのように編成されていますか?各オブジェクトにはメソッドへの「リンク」があり、アドレスを自分自身にそのメソッドに渡しますか? このトピックの良い説明を見るのは素晴らしいことです。 UPD。私は質問をより正確にし、主に静的型付け言語に興味があります。

6
ほとんどのサイトでメールのアクティベーションが必要な理由[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 現在、ほとんどの一般的なアプリケーションでは、メールによるアカウントのアクティベーションが必要です。開発したアプリを使ったことがないので、重要なセキュリティ機能が欠けていますか? メールのアクティベーションとは、サイトに登録すると、アカウントがアクティベートされる前にクリックする必要があるリンクを含むメールを送信することを意味します。
13 security  email 

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