ソフトウェア工学

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

4
バージョン管理にgithub、ブランチ、自動リリースを使用する方法は?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 今まで、Git / Githubの基本的な概念のほとんどを理解していましたが、全体像を理解するのはまだ困難です。 これらは私がこれまでに何とか作業を始めたものです。 コミットをプッシュする ブランチで作業する Githubを継続的な統合システムであるTravis CIと統合する Travis CIを介して、マスターへのコミットごとに自動的にビルドし、リリースをGithubのリリースとしてZIPとしてリリースします。 しかし、私はこれまでにプロジェクトのアルファ版またはベータ版にしか取り組んでいなかったため、実際にバージョン付きリリースを見たことはありません。 したがって、バージョン管理、個別のバージョンの維持、バージョンの修正プログラムなどについて詳しく知りたいと思います。 次のことが起こるようにするにはどうすればよいですか: 私のプロジェクトの異なるバージョン、たとえばバージョン1.1.0と2.0.0を持っている バージョンの修正プログラムをプッシュしたり、バージョンを1.1.1や2.0.1に変更したりすることができます。 継続的統合システムがコミット時にそのバージョンを自動的にビルドし、成功した場合は、その特定のバージョンのリリースを公開します。 私は次のオプションの間で疑っています: バージョンごとにタグを使用する必要がありますか?もしそうなら、継続的インテグレーションシステムはどのようにしてリリースを自動的にビルドできますか? バージョンごとにブランチを作成する必要がありますか?もしそうなら、それはたくさんのブランチを作成しませんか(1.1や2.0ブランチのように、もちろんホットフィックスはそのブランチに行きます) バージョン番号はどのように指定しますか?バージョン番号を指定する構成ファイルを用意しても大丈夫ですか、それとももっと賢い方法がありますか?この場合、それが重要であれば、Javaプロジェクトになります。

2
Gitは、電源が切れたときにどの程度堅牢ですか?
ある日、私はGitを使用しており(まだ使用しています)、コミット中に電気が切れました。 私(実際には電気)が戻ったとき、gitリポジトリは破損していました。正確な名前は覚えていませんが、「無効なref」などのようなものでした。 操作の途中でコミットが中断されたと推測するのは簡単です(インデックスの追加を自動的に行うIntelliJを使用してコミットしていました)。また、実際には、「commit」は同じ名前のDBMS操作ほどACIDではないことを推測するのは簡単でした。 Q:レポ変更操作が原子性を尊重するようにする方法はありますか?すなわち、電気が再び落ちて、私がコミットしている場合、ファイルシステムが破損した状態にならないようにしたいです。
24 git 

4
プラグインは何を使用すべきですか:フック、イベント、または何か?
プラグインがプログラムフローに反応できるようにするアプリを検討してください。 これを達成する2つの方法を知っています:フックとイベント 1.フック メインプログラムフロー内の空の関数の呼び出しを使用します。これらの機能はプラグインによってオーバーライドできます。 たとえば、Drupal CMSはモジュールとテーマで利用可能なフックを実装しています。file_copy関数でフックを実装する方法の例を次に示します。 function file_copy(stdClass $source, $destination = NULL, $replace = FILE_EXISTS_RENAME) { // ... [File copying routine] // Inform modules that the file has been copied. module_invoke_all('file_copy', $file, $source); return $file; // ... } モジュールはmodulename_file_copy($file, $source)、module_invoke_allin によって呼び出される関数を実装できますfile_copy。この関数が終了すると、file_copy実行が再開されます。 2.イベント プラグインがリッスンできるイベントをアプリにディスパッチさせます。サブスクライブされているイベントを受信した後、プラグインはプログラムフローをインターセプトし、必要な操作を実行します。 たとえば、jQueryギャラリープラグインFotorama はいくつかのイベントを実装します。例として、イベントshowを発生させるメソッドの一部を次に示しfotorama:showます。 that.show = function (options) { …

6
最新のバージョン管理システムの利点の定量化[終了]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 私は、大規模な金融企業環境でチームリーダー/開発者として3年間の大半を担当しました。生産リリースプロセスは、Clearcaseを中心に展開するため、悪夢です。すべてのリリースを実行し、そこから取得したコードのみを本番環境に許可する変更管理グループがあります。 参加したときに最初にしたことの1つは、Gitでチームを設定することでした。誰もが、Clearcaseはひどく、日々のソース管理の問題を処理するには実用的でないことに同意しました。そこで、ローカルマシンに一種の「非公式」リポジトリをセットアップし、リリース時間前後にgitとClearcaseリポジトリを同期するスクリプトを作成しました。 このことは他のチームにも広まり、いくつかのチームが同じプロセスを採用しています。日々の活動にはgitを「非公式」に使用し、リリースにはClearcaseを使用して「公式に」使用します。私は、Gitの問題については、やる気になりました。 そのため、今週、インフラストラクチャの変更を担当するSVPとの会議を開催し、Gitのメリットを彼女に説明してもらいたいと考えています。明らかに、Clearcaseでの頻繁な暴言が彼女に届いたようです。彼女が私の主張を受け入れれば、私の雇用主がこの忌まわしいものを取り除くのを手伝うことに真剣に取り組むでしょう。 経営者との私の経験は、a)すべてについて非常に簡潔な説明を望んでいること、b)ドルの数字を含む事実のみに関心があることを教えてくれます。 開発者には、Clearcase(またはClearcaseを介した他のバージョン管理システム)を介したGitのメリットを説明できますが、技術的背景のない技術幹部にこれを行う方法について空白を書いています(彼女はMBAを取得し、地理学で学部を卒業しました)。 私が彼女に対して行った議論は、技術的な意味不明なもののように聞こえるか、個人的な好みを伝道していると感じています。 私が見つけようとしているのは、開発者がGitまたはあらゆる最新のソース管理システムでより効果的に作業することを示す具体的な事実です。 他のチームが内部でGitを使用し始めたという事実は意味のある兆候であると思いますが、個人的な好みとしては却下される可能性があるため、まだ十分ではありません。 私が本当に必要なのは、「このプロセスは20年間機能していましたが、なぜ変更する必要があるのですか?」引数。

8
特定の順序で関数を呼び出す必要があるインターフェース設計
タスクは、入力仕様に従って、デバイス内のハードウェアを構成することです。これは次のように達成する必要があります。 1)構成情報を収集します。これは、さまざまな時間と場所で発生する可能性があります。たとえば、モジュールAとモジュールBは両方とも(異なる時間に)私のモジュールにリソースを要求できます。これらの「リソース」は、実際には構成です。 2)これ以上要求が実現されないことが明らかになった後、要求されたリソースの要約を提供する起動コマンドをハードウェアに送信する必要があります。 3)その後のみ、前述のリソースの詳細な構成を行うことができます(およびする必要があります)。 4)また、2)の後でのみ、選択したリソースの宣言された呼び出し元へのルーティングを行うことができます(およびする必要があります)。 バグの一般的な原因は、それを書いた私でさえ、この順序を間違えていることです。コードを初めて見る人がインターフェイスを使用できるようにするために、どのような命名規則、設計、またはメカニズムを使用できますか?
24 c++  interfaces 

4
視覚障害のある同僚とのポーカーの計画
オフィスで、視覚障害のある新しい同僚を見つけました。 私はポーカープランニングの企画を担当しており、新しい同僚はチームのメンバーとして参加する必要があります。素晴らしいポーカーカードのセットがあり、そこにポーカーナンバーが計画されていますが、それはもちろん新しい同僚にとっては役に立ちません。 これまでは、見積もりに名前を付けるだけでこの問題を修正し、新しい同僚に残りの人がカードを置いた直後に見積もりを言うようにし、残りの人がカードを裏返し、見積もりに名前を付けました。 私の質問:このような状況を経験し、より良い解決策を持っている人はいますか?点字ポーカーカードのようなものはありますか? 現在のソリューションは機能しますが、たとえば点字ポーカーカードを使用することで、これは私たち全員にとって改善できると思います。

2
独自のHTTPステータスコードを作成する必要がありますか?(アラカルトTwitter 420:穏やかさを高める)
この質問は、Software Engineering Stack Exchangeで回答できるため、Server Faultから移行されました。 6年前に移行され ました。 私は現在、初めてのHTTP APIを実装しています。 適切な状況に適切なコードを実装することを決心しているため、HTTPステータスコードのウィキペディアページを見るのに多くの時間を費やしてきました。そのページには、420のコードがリストされています。これは、Twitterがレート制限に使用していたカスタムコードです。 ただし、すでにレート制限のコードがあります。429です。 これにより、ユースケースが既に存在するのに、なぜカスタムに設定するのか疑問に思いました。それはただかわいいだけですか?もしそうなら、異なる状況コードを返すことがどのような状況で受け入れられるようになりますか?また、クライアントに問題がある場合はどうなりますか? Mozillaがジョーク418: I’m a teapot応答を実装していないことをどこかで読んだので、クライアントは実装するステータスコードを選択すると思います。それが本当なら、Twitterの面白おかしい小さなコードがあなたの落ち着いたコードの問題を改善していると想像できます。 誤解しない限り、任意のコード番号を使用して好きなものを意味することができます。この規約では、404が見つからないことを意味し、429は簡単にすることを意味します。
24 api-design  http 

3
Python-'if foo in dict' vs 'try:dict [foo]'
これは、アヒルのタイピングの性質についての質問ではなく、pythonicを維持することについての質問です。 まず第一に-dictを扱うとき、特にdictの構造がかなり予測可能であり、特定のキーが通常存在しないが時々存在する場合、私は最初に2つのアプローチを考えます: if myKey in dict: do_some_work(dict[myKey]) else: pass そしてもちろん、イェ・オルデの「許し対許可」アプローチ。 try: do_some_work(dict[myKey]) except KeyError: pass Pythonの旅人として、後者は多くの方が好まれているように感じますが、Pythonドキュメントtry/exceptsでは実際の間違いがある場合に好まれているように思えます。 時折の辞書にmyDictにキーがなく、常にそのキーを持っているとは限らないことがわかっている場合、try / exceptは文脈上誤解を招く可能性がありますか?これはプログラミングエラーではなく、単なるデータの事実です。この辞書には特定のキーがありませんでした。 try / except / else構文を見ると、これは特に重要であるように見えます。これは、tryがあまりにも多くのエラーをキャッチしないことを確認する際に非常に役立つようです。次のようなことができます: try: foo += bar except TypeError: pass else: return some_more_work(foo) それはおそらく悪いコードの結果であるあらゆる種類の奇妙なエラーを飲み込むことにつながるのではないでしょうか?上記のコードは2 + {}、あなたが追加しようとしていることを見るのを妨げているだけで、コードの一部がひどく間違っていることに気付かないかもしれません。私はすべてのタイプをチェックすることをお勧めしません。それがJavaScriptではなくPythonである理由です。継続することを可能にします。 上記の例は、ストローマンの議論のようなものであり、実際には意図的に悪いことを理解しています。しかし、better to ask forgiveness than permission私はPythonの信条を考えると仕方がありませんが、砂の中の線が実際にif / elseとtry / exceptの正しい適用の間のどこにあるのか、特に何が期待できるかを知っているとき作業しているデータ。 私はここで速度の懸念やベストプラクティスについても話していない、私はそれがいずれかの方法で行くことができるように見えるケースの知覚されたベン図に静かに混乱しているが、人々は試行/除外の側で誤ります「誰かがそれがPythonicだと言った」からです。この構文の適用について間違った結論を出しましたか?
24 python 

6
javaがビルド言語として使用されないのはなぜですか?
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細のない回答は、編集または削除できます。 Javaが汎用言語であり、プログラムの構築がJava言語を使用して記述できるものである場合、なぜこれがビルドファイルを記述する最良の方法ではないのか、代わりにAnt、Maven、Gradleなどのツールを使用しますか?それはもっと簡単なことではなく、また別のプログラミング言語を学ぶ必要性を排除しませんか?(ところで-この質問は、C#などの他の言語にも適用できます)
24 java  c#  builds  build-system 


3
node.jsの初心者、イベントよりもコールバックを使用することで得られる利点は何ですか?
私は初心者のJavaScripterであり、V8エンジンの内部で何が起こっているのかを実際に知りません。 そうは言っても、node.js環境への初期の取り組みを本当に楽しんでいますが、グローバルイベントを生成する手段として、常にイベントを使用しています。 Objective-CまたはPythonプログラムで言うようなパターン。 私はいつもこのようなことをしていることに気付きます: var events = require('events'); var eventCenter = new events.EventEmitter(); eventCenter.on('init', function() { var greeting = 'Hello World!'; console.log('We're in the init function!); eventCenter.emit('secondFunction', greeting); }); eventCenter.on('secondFunction', function(greeting) { console.log('We're in the second function!); console.log(greeting); eventCenter.emit('nextFunction'); }); eventCenter.on('nextFunction', function { /* do stuff */ }); eventCenter.emit('init'); したがって、実際には、「非同期」のnode.jsコードを、期待どおりの順序で処理するコードに構造化するだけです。代わりに、それが理にかなっている場合は、「逆コーディング」のようなものです。これをパフォーマンス重視または哲学重視のコールバック重視で行うことに違いはありますか?イベントの代わりにコールバックを使用して同じことを行う方が良いですか?

5
Webサーバーは同一生成元ポリシーをどのように実施しますか?
私はRESTful APIの開発により深く取り組み、これまでにいくつかの異なるフレームワークと連携してこれを実現してきました。もちろん、私は同じ起源のポリシーに遭遇しましたが、今では(Webブラウザーではなく)Webサーバーがどのようにそれを実施するのかと思っています。私が理解していることから、ブラウザの最後にいくつかの強制が行われているようです(たとえば、サーバーから受信したAccess-Control-Allow-Originヘッダーを尊重します)。しかし、サーバーはどうですか? たとえば、WebサーバーがAPIにアクセスするJavascript Webアプリをホストしており、そのサーバーでもホストされているとします。私は、サーバーが同一生成元ポリシーを適用すると想定しているため、そのサーバーでホストされているJavaScriptのみがAPIにアクセスできるようになります。これにより、他の誰かがそのAPIのjavascriptクライアントを記述して別のサイトでホストすることを防ぐことができますか?それでは、Webサーバーは、同じWebサーバーから発信されたjavascriptを実行していると主張しながら、APIエンドポイントにAJAXリクエストを行おうとする悪意のあるクライアントをどのように停止できますか?最も一般的なサーバー(Apache、nginx)は、この種の攻撃からどのように保護しますか?または、これについての私の理解は何とか外れていますか? または、クロスオリジンポリシーはクライアントエンドでのみ実施されますか?

6
LMAXのチームがなぜJavaを使用し、GCを避けるためにアーキテクチャを設計したのですか?
LMAXのチームがJavaでLMAX Disruptorを設計したのに、GCの使用を最小限に抑えることがすべての設計ポイントであるのはなぜですか?GCを実行したくない場合、ガベージコレクションされた言語を使用するのはなぜですか? 彼らの最適化、ハードウェアの知識のレベル、そして彼らが置いた思考はただ素晴らしいですが、なぜJavaなのでしょうか? 私はJavaなどに反対ではありませんが、なぜGC言語なのですか?DのようなものやGCを使用しない他の言語を使用して、効率的なコードを使用できるのはなぜですか?チームはJavaに最も精通しているのでしょうか、それともJavaには私には見られない独自の利点がありますか? 手動のメモリ管理でDを使用して開発するとしますが、違いは何でしょうか?低レベル(既にある)を考える必要がありますが、システムがネイティブであるため、システムから最高のパフォーマンスを引き出すことができます。

3
静的ファクトリーとシングルトンとしてのファクトリー
私のコードのいくつかでは、次のような静的ファクトリーがあります。 public class SomeFactory { // Static class private SomeFactory() {...} public static Foo createFoo() {...} public static Foo createFooerFoo() {...} } コードのレビュー中に、これはシングルトンであることが提案され、注入されました。したがって、次のようになります。 public class SomeFactory { public SomeFactory() {} public Foo createFoo() {...} public Foo createFooerFoo() {...} } 強調すべきいくつかのこと: 両方の工場はステートレスです。 メソッド間の唯一の違いは、スコープ(インスタンスと静的)です。実装は同じです。 Fooは、インターフェースを持たないBeanです。 静的にするための引数は次のとおりです。 クラスはステートレスであるため、インスタンス化する必要はありません ファクトリをインスタンス化するよりも静的メソッドを呼び出す方が自然なようです シングルトンとしてのファクトリの引数は次のとおりです。 すべてを注入するのが良い 工場の無国籍にもかかわらず、注入によりテストが簡単になります(簡単にモックできます) 消費者をテストするとき、それはock笑されるべきです …


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