ソフトウェア工学

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

5
関数型プログラムがコンパイルの成功と正確さの間に相関関係があるのはなぜですか?
私がLINQを使い始めて以来、私は4年前から関数型プログラミングの傾向にあります。最近、私はいくつかの純粋な関数型C#コードを書いて、関数型プログラムについて読んでいることに最初に気付きました。 私はこれがなぜそうなのかを試してみましたが、成功していません。 OOプリンシパルの適用では、機能プログラムにはない「抽象化層」があり、この抽象化層により、実装が間違っていてもオブジェクト間のコントラクトを正しくすることができます。 誰かがこれを考えて、コンパイルの成功と関数型プログラミングのプログラムの正確性との相関関係の根本的な抽象的な理由を思い付きましたか?

3
「リフト表現」とは何ですか?
ここでこの用語に出くわしました: http://www.codemesh.io/codemesh2014/viktor-klang 「リフトされた表現であるFlow APIと、リフトされた表現を実行表現に変換するプラグ可能な方法であるFlow Materializationのデモを行います。」 グーグルはあまり役に立ちませんでした。

3
コードでExcel(xlsx)ファイルを生成するための良いデザインパターンは何ですか?
詳細については、下部の更新を参照してください。 Excelファイル(xlsx形式)としてデータを出力する必要があるプロジェクトがときどきあります。通常、プロセスは次のとおりです。 ユーザーが私のアプリケーションのいくつかのボタンをクリックする 私のコードはDBクエリを実行し、結果を何らかの方法で処理します 私のコードは、Excel com相互運用ライブラリまたはサードパーティライブラリ(Aspose.Cellsなど)を使用して* .xlsxファイルを生成します これをオンラインで行う方法のコード例を簡単に見つけることができますが、より堅牢な方法を探しています。私のコードがいくつかの設計原則に従って、私のコードが維持可能で簡単に理解できるようにしたいと思います。 xlsxファイルを生成する最初の試みは次のとおりです。 var wb = new Workbook(); var ws = wb.Worksheets[0]; ws.Cells[0, 0].Value = "Header"; ws.Cells[1, 0].Value = "Row 1"; ws.Cells[2, 0].Value = "Row 2"; ws.Cells[3, 0].Value = "Row 3"; wb.Save(path); 長所:それほど多くはありません。動作するので、それは良いことです。 短所: セル参照はハードコーディングされているため、コード全体にマジックナンバーが散らばっています。 多くのセル参照を更新せずに列と行を追加または削除することは困難です。 サードパーティのライブラリを学ぶ必要があります。一部のライブラリは他のライブラリと同様に使用されますが、それでも問題が発生する可能性があります。com interopライブラリが1ベースのセル参照を使用し、Aspose.Cellsが0ベースのセル参照を使用するという問題がありました。 上に挙げたいくつかの短所に対処する1つのソリューションを次に示します。データのテーブルを、セルの操作や他のセル参照を妨害することなく移動したり変更したりできる独自のオブジェクトとして扱いたいと思いました。擬似コードは次のとおりです。 var headers = new Block(new …

6
コンパイラがすべてをインライン化しないのはなぜですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 コンパイラはインライン関数呼び出しを行う場合があります。つまり、呼び出された関数のコードを呼び出し元の関数に移動します。これにより、コールスタックのオン/オフを切り替える必要がないため、処理が少し速くなります。 だから私の質問は、なぜコンパイラはすべてをインライン化しないのですか?実行可能ファイルが著しく高速になると思います。 私が考えることができる唯一の理由は、実行可能ファイルが非常に大きいことですが、最近では何百GBものメモリが必要なのでしょうか?パフォーマンスの向上はそれだけの価値はありませんか? コンパイラがすべての関数呼び出しをインライン化しない他の理由はありますか?

4
生のバイトをファイルに書き込むことに危険はありますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 私は、プログラミングパールの問題、具体的には、最大で10,000,000個の整数を含むファイルをソートするプログラムの実装(列1、問題3)に取り組んでいます。本はデータをファイルに保存する方法を指定していないので、整数を未加工バイトとして保存することを検討しています(未加工バイトを適切なオプションにする他の制約があります)。これほど低いレベルで働いたことはないので、注意すべき危険があるかどうか知りたいです。たとえば、生のバイトをファイルに書き込むときに、何らかの種類のファイルの終わりのシーケンスを誤って使用することを心配する必要がありますか? 編集: 私は今、私の質問がどれほど広いかを理解しています。ディスク上の他のファイルを誤って上書きするなど、より壊滅的な種類の問題を意味していました。申し訳ありませんが、私は元々明確ではありませんでした。
12 low-level  byte 

1
Web開発のGITワークフロー
ずっと前に、私が仕事をしている小さなWeb開発者チームは、Web開発にgitを使い始めました。当時は、ステージングまたはマスターに直接コミットし、2つの間で頻繁にマージしていました。それは何もないよりはましでしたが、混乱でもありました。 少し前に、gitflowワークフローを採​​用しました。それは確かに前に来た混乱よりも優れていますが、やや面倒で過度にリリース/マイルストーン指向です。私の仲間の開発者は、それがどのように機能するのか、何をマージすべきか、何をマージすべきでないのかを明確にするように頻繁に頼まれます。一般的に、リリースの特定のマイルストーンを追跡せずにコードを頻繁にデプロイするWeb開発作業には適さないようです。 友達の最近の提案で、GitHub Flowを見始めました。ここでスコットチャコンの投稿を読むと、これで問題が完全に解決されます。 それでは、なぜGitHubでgit-flowを使用しないのでしょうか?まあ、主な問題は、常に展開することです。git-flowプロセスは、主に「リリース」を中心に設計されています。運用環境に毎日(多くの場合1日に数回)展開するため、実際には「リリース」はありません。 FWIW、私はアトラシアンのサイトでこの素敵なワークフローのまとめを見ました:https ://www.atlassian.com/git/workflows#!workflow- feature-branch しかし、それらはすべて、小さなチームでのWeb開発には不適切な選択肢のように見え、頻繁な/毎日のリリースではなく、主要なアプリケーションリリースを対象としています。 これは、git-flowとgithub-flowを比較するよう求めるSEに関する質問です /programming/18188492/what-are-the-pros-and-cons-of-git-flow-vs-github -フロー それは一般的に良い答えですが、下のコメントで言及したように、meta.programmers.SEは一般的なワークフローのベストプラクティスに関する質問がここにあることを示しているようで、単なるgit-flowやgithubよりも幅広い回答のリストを期待していました-ウェブ開発に固有のフロー。したがって、ここで新しい質問が必要だと思います。 それで、かなり継続的な展開を伴うプロジェクトに取り組んでいる小規模なWeb開発チームにとって、最適/推奨のgitベースのワークフローは何ですか?それはgithub-flowか何かですか?

4
Microsoftが.NETを直接統合するのではなく、Office製品にVBAを同梱するのはなぜですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 VBAコードから.NETコードを呼び出すことは可能ですが、VBAが存在し続けるのはなぜですか?私が考えることができる唯一の理由はレガシーです。 並べ替えるだけScripting.Dictionaryで、必要なコードの量は恐ろしいものでした。 IDEはVisual Studio 2003のように見えます。そして、多くの小さな詳細があり、それはあなたを狂わせます(行の変更のように、コンパイルエラーのために警告を受け取ります)。または、複数のスプレッドシートを開くと、「VBAProject」に混ざってしまい、本当に混乱します。 モジュール/クラスモジュール/フォームの分割全体は実際にはそれほど悪くはありませんが、フォームに直接ロジックを書くか、すべてを処理する1つの巨大なモジュールを持つことになります。 Alt + F11を押してC#をハックできないのはなぜですか?
12 .net  vba 

1
Haskellファンクターのターゲットカテゴリーに派生型のみがあるのはなぜですか?
Haskellでは、Functorタイプクラスファンクターは次のように定義されます(Haskell wikiなどを参照)。 class Functor (f :: * -> *) where fmap :: (a -> b) -> f a -> f b これまで(私が間違っているなら、私を修正してください)私は理解したように、このようなファンクタは唯一のカテゴリは型コンストラクタを使用して構築され、例えば、対象カテゴリとして持つことができるよう[]、Maybe一方、など、1は任意のカテゴリを持つファンクタを考えることファンクターのターゲットとして、すべてのHaskellタイプのカテゴリーなど。たとえば、またはIntだけでなく、ファンクターのターゲットカテゴリのオブジェクトになります。Maybe Int[Int] Haskellファンクターに対するこの制限の動機は何ですか?
12 haskell 

10
クローズドソースのプログラミング言語は生き残ることができますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 友人がプログラミング言語を書いています。SGMLを連想させる構文を持っています。彼はそのためのインタプリタとIDEを書きました。彼と彼の同僚は社内でサーバーサイド言語として使用しています。また、コマンドラインツールを作成するためにも使用できます。 彼は、人々がそれを使用するためのライセンスを購入することを期待して、それを一般に公開したいと考えています。彼は、言語の実装を表現するコードを自分自身に保持したいと考えています。その中にはかなりの知的財産が縛られているからです。 私は彼に、クローズドソースのプログラミング言語の時代は終わったと言い続けています。「すべての主要言語を見てください。大半はオープンソースです。社外の人に自分の作ったものに注意を払ってもらいたいのなら、あなたもオープンソースにしなければなりません。」 彼に良いアドバイスをしていますか、それともあなたが支払う独自の言語の余地がありますか? 後 デンは、「...言語がどのようにクローズドソースになり得るかを説明してもらえますか?」と尋ねました。 「@Denあなたは良い点を言います。私の友人が避けたいのは、MicrosoftがJavaに似た言語を作成し、J ++と呼んで、そのJava性についてSunと訴訟を起こす状況です。 。実装によってビジネスが停止する可能性のある会社によって、構文およびプログラミング手法がハイジャックされるのをどのように保護しますか?」

4
クライアントの要件がまったく変わらないときにアジャイルを使用するのは間違っていますか?
最近、アジャイルが使用される主な理由の1つは、クライアントが要件を頻繁に変更するためだと言っている多くの投稿を見てきました。 ただし、クライアントが要件を頻繁に変更しないとしましょう。実際、クライアントには多少あいまいな要件もありますが(不当にあいまいなものはありません)、要件はしっかりしていますが、とにかくアジャイルを使用しています。 私がアジャイルを採用する理由は、ソフトウェアが非常に複雑であるため、実際にそれらに直面するまで認識できない問題や詳細が存在するためです。ウォーターフォールのような本格的な重度の計画アプローチを行うこともできますが、その後、すべての高レベル設計と低レベルコーディングシグネチャを完成させるのに数か月かかります。ただし、システムには非常に具体的な固定アーキテクチャ設計があります。 私の質問は、これは悪い、カウボーイコーディング、アンチパターンなどと見なされますか?アジャイルでの「やろう」という考え方ではなく、要件が安定しているときにコーディングを開始する前に、ウォーターフォールを使用し、可能な限り詳細に計画する必要がありますか? 編集:ここでの主要なポイントは、次のとおりです。要件の変更についてクライアントを責めることはできません。クライアントが私たちに非常に具体的な問題を指摘し、非常に合理的な詳細でウィッシュリストを提供し、私たちをそのままにしておくと仮定します最小のプロトタイプが完成したら終了します)。このシナリオでアジャイルを使用するのは間違っていますか?

2
Cで配列を関数の引数として渡すことができないのはなぜですか?
このコメントに続いて、私はグーグルでグーグルを試みましたが、グーグルフーは失敗しました。 リンクからのコメント: [...]しかし、重要なことは、Cでは配列とポインターが異なることです。 コンパイラの拡張機能を使用していないと仮定すると、通常、配列自体を関数に渡すことはできませんが、ポインタを渡し、ポインタを配列であるかのようにインデックス付けすることはできます。 ポインターには長さが付加されていないという事実に不満があります。配列を関数の引数として渡すことができないこと、または配列が暗黙的にポインターに低下することを不平を言うべきです。
12 c  history 


6
ダウンキャストを避ける方法
私の質問は、スーパークラスの動物の特別なケースについてです。 私のAnimal缶moveForward()とeat()。 Seal拡張しAnimalます。 Dog拡張しAnimalます。 そしてまた延びている特別な生き物がありますAnimalと呼ばれるがHuman。 Humanメソッドもspeak()実装しAnimalます(では実装されません)。 受け入れる抽象メソッドの実装では、メソッドAnimalを使用したいと思いspeak()ます。それはダウンキャストをしなければ不可能だと思われます。ジェレミー・ミラーは彼の記事で、ひどい臭いがすることを書いた。 この状況でダウンキャストを回避するための解決策は何ですか?

2
GitLabの同じサーバー上のCIランナーですか?
会社でGitLabサーバーを設定していますが、今はGitLab CIを追加しています。 このタスクを開始する前に、GitLabとGitLab CIで使用される同じサーバー上でランナーを実行する際に不利な点があるかどうかを理解したいと思います。 セキュリティ上の懸念があることを読みましたが、内部でのみ使用しているため、これが問題になるとは思いません。 何か不足していますか?

5
単純な置換でWindowsファイルパスをUnixファイルパスに変換しても安全ですか?
:だから、例えば私は、すべてのファイルのようなUNIXマシンにWindowsマシンから転送されるようにそれを持っていたと言うC:\test\myFile.txtには{somewhere}/test/myFile.txt(ドライブ文字は、この時点では関係ありません)。 現在、私たちが独自に作成したユーティリティライブラリには、すべてのバックスラッシュをスラッシュに単純に置き換えるメソッドが用意されています。 public String normalizePath(String path) { return path.replaceAll("\\", "/"); } スラッシュは予約されており、ファイル名の一部とすることはできないため、ディレクトリ構造を保持する必要があります。しかし、私が心配する必要があるかもしれないウィンドウとunixパスの間に他の複雑さがあるかどうかはわかりません(例:非ASCII名など)

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