プログラミング

プロおよび熱狂的プログラマーのためのQ&A

1
拡張メソッドをインターフェイスに適用できますか?
拡張メソッドをインターフェースに適用することは可能ですか?(C#の質問) たとえば、次のことを実現します。 ITopologyインターフェイスを作成する このインターフェイスの拡張メソッドを作成します(例:public static int CountNodes(this ITopology topologyIf)) 次に、ITopologyを実装するクラス(MyGraphなど)を作成すると、自動的にCount Nodes拡張機能が追加されます。 このようにして、インターフェースを実装するクラスは、拡張メソッドで定義されたものに合わせるためにセットのクラス名を持つ必要はありません。

8
2つの文字列を連結するために '+'を使用しない理由は何ですか?
Pythonの一般的なアンチパターン+は、ループで使用する文字列のシーケンスを連結することです。Pythonインタプリタは反復ごとに新しい文字列オブジェクトを作成する必要があるため、これは悪い結果となり、結果として2次時間がかかります。(最近のバージョンのCPythonは明らかにこれを最適化できる場合もありますが、他の実装では最適化できないため、プログラマーはこれに依存することをお勧めしません。)これ''.joinが正しい方法です。 ただし、(ここではStack Overflowを含めて)文字列の連結には決して使用すべきではなく、+常に''.joinまたはフォーマット文字列を使用するように言われたと聞きました。2つの文字列のみを連結しているのに、なぜこれが当てはまるのか理解できません。私の理解が正しければ、二次時間は必要ありません。またa + b、''.join((a, b))またはよりも読みやすく、読みやすくなっています'%s%s' % (a, b)。 +2つの文字列を連結するのに使用するのは良い習慣ですか?または、私が気付いていない問題はありますか?

3
量産コードでのマングースインデックス
and /のMongoose ドキュメントによるMongooseJSと:MongoDBNode.js アプリケーションが起動すると、MongooseはensureIndexスキーマで定義された各インデックスを自動的に呼び出します。開発には適していますが、インデックスの作成はパフォーマンスに大きな影響を与える可能性があるため、本動作ではこの動作を無効にすることをお勧めします。autoIndexスキーマのオプションをfalseに設定して、動作を無効にします。 これは、Mongooseを最適化するためにデプロイする前にmongooseから自動インデックス作成を削除して、Mongooseにアプリケーション起動時にすべてのインデックスを移動およびチャーンするように指示することを指示しているようです。これは理にかなっているようです。 量産コードでインデックスを処理する適切な方法は何ですか?たぶん、外部スクリプトはインデックスを生成する必要がありますか?またはensureIndex、単一のアプリケーションがコレクションへの唯一のリーダー/ライターである場合、DBの書き込みが発生するたびにインデックスを継続するため、不要な場合がありますか? 編集:補足として、MongoDBはインデックス作成の方法に関する優れたドキュメントを提供していますが、明示的なインデックス作成ディレクティブを実行する理由や時期については提供していません。インデックスは、既存のインデックスを持つコレクションでライターアプリケーションによって自動的に最新に保つ必要があるように思えます。これは、実際には1回限りのもの(新しいインデックスが適用されるときに行われる)です。この場合、Mongoose は、通常のサーバー再起動では何もしません。ensureIndexautoIndex

6
Javaで匿名の内部クラスを静的にすることは可能ですか?
Javaでは、ネストされたクラスはどちらでもよいしstatic、そうでなくてもよい。それらがstaticである場合、それらには包含インスタンスのポインターへの参照が含まれていません(これらは内部クラスとも呼ばれなくなり、ネストされたクラスと呼ばれます)。 static参照が不要なときにネストされたクラスを作成し忘れると、ガベージコレクションやエスケープ分析で問題が発生する可能性があります。 匿名の内部クラスstaticも作成できますか?または、コンパイラはこれを自動的に判断しますか(サブクラスがないため、可能です)。 たとえば、匿名コンパレータを作成する場合、外部への参照はほとんど必要ありません。 Collections.sort(list, new Comparator<String>(){ int compare(String a, String b){ return a.toUpperCase().compareTo(b.toUpperCase()); } }

4
なぜintを無効な列挙値にキャストしても例外がスローされないのですか?
私がそのような列挙型を持っている場合: enum Beer { Bud = 10, Stella = 20, Unknown } intこれらの値の外にあるをの型にキャストするときに例外がスローされないのはなぜBeerですか? たとえば、次のコードは例外をスローせず、コンソールに「50」を出力します。 int i = 50; var b = (Beer) i; Console.WriteLine(b.ToString()); 私はこれが奇妙だと思います...誰かが明確にできますか?
123 c# 


3
ggplot2を使用してRで透明な背景のグラフィックを作成する方法は?
ggplot2グラフィックスをRから透明な背景のPNGファイルに出力する必要があります。基本的なRグラフィックスではすべて問題ありませんが、ggplot2では透明度がありません。 d <- rnorm(100) #generating random data #this returns transparent png png('tr_tst1.png',width=300,height=300,units="px",bg = "transparent") boxplot(d) dev.off() df <- data.frame(y=d,x=1) p <- ggplot(df) + stat_boxplot(aes(x = x,y=y)) p <- p + opts( panel.background = theme_rect(fill = "transparent",colour = NA), # or theme_blank() panel.grid.minor = theme_blank(), panel.grid.major = theme_blank() ) #returns white …

1
Gitリポジトリのマスターに対して古いブランチを更新する
古いブランチになったGitリポジトリ(ローカルおよびリモート)があります。このブランチをマスターブランチで最新の状態にしたいのですが、方法はわかりません。また、おそらく多くのマージ競合が発生します。 この古いブランチをマスターブランチと同じ状態にするには、どうすればよいですか?
123 git  git-branch 

4
マルチプロセッシングの共有メモリオブジェクト
私はメモリに大きなnumpy配列があるfuncとします。この巨大な配列を(他のいくつかのパラメーターと共に)入力として受け取る関数があります。func異なるパラメータを使用して、並行して実行できます。例えば: def func(arr, param): # do stuff to arr, param # build array arr pool = Pool(processes = 6) results = [pool.apply_async(func, [arr, param]) for param in all_params] output = [res.get() for res in results] マルチプロセッシングライブラリを使用すると、その巨大な配列が複数のプロセスにコピーされます。 異なるプロセスに同じ配列を共有させる方法はありますか?この配列オブジェクトは読み取り専用であり、変更されることはありません。 arrが配列ではなく任意のpythonオブジェクトである場合、もっと複雑なことは何ですか?それを共有する方法はありますか? [編集済み] 私は答えを読みましたが、私はまだ少し混乱しています。fork()はコピーオンライトであるため、Pythonマルチプロセッシングライブラリで新しいプロセスを生成するときに追加のコストを呼び出さないでください。しかし、次のコードは大きなオーバーヘッドがあることを示唆しています: from multiprocessing import Pool, Manager import numpy as np; import …


11
.NET:必要な構成設定がない場合にスローする例外はどれですか?
標準的なシナリオは次のとおりです。 if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"])) throw new SomeStandardException("Application not configured correctly, bozo."); 問題は、例外がどれであるSomeStandardExceptionかが完全にわからないことです。 私は3.5フレームワークを熟読して2有望な候補が見つかりました:ConfigurationExceptionとConfigurationErrorsException。 System.Configuration.ConfigurationException 構成システムエラーが発生したときにスローされる例外。 備考ConfigurationExceptionアプリケーションの試みは、読み取りまたは構成ファイルへの書き込みデータが、失敗したした場合、例外がスローされます。これには、構成ファイル内の不正なXML、ファイルのアクセス許可の問題、および無効な値を持つ構成プロパティが含まれる可能性があります。 注意: ConfigurationExceptionオブジェクトは、下位互換性のために維持されます。ConfigurationErrorsException オブジェクトは、構成システムのオブジェクトを置き換えます。 この例外は実際には私が必要としているものに完璧に聞こえますが、廃止されたとマークされているので、ixnayはついに発表しました。 これは私たちを徹底的に不可解に導きますConfigurationErrorsException: System.Configuration.ConfigurationErrorsException 現在の値は、EnableSessionState値の1つではありません。 ご覧のとおり、そのドキュメントはまったく役に立ちません。(ローカルヘルプとオンラインヘルプの両方でそのようになっています。)クラス自体を調べてみると、私が望むものに対して大幅な過剰であることがわかります。 簡単に言うと、アプリケーションの構成設定がないか、無効な値が含まれている場合にスローされる標準の例外が必要です。フレームワークには、アプリケーションで使用できるようにそのような例外が組み込まれていると思います。(確かにそうでしたが、時代遅れとマークされ、スコープがはるかに大きいものに置き換えられました。) もしあれば、あなたはこれにどのような解決策を使用していますか?私はそれを吸い上げてこれについて自分の例外をロールバックする必要がありますか? 補遺を編集 デフォルト値を指定して続行できるかどうかを尋ねる人もいます。特定のケースでは、はい、そのようなケースでは、例外はスローされません。ただし、特定の設定では、これは適用されません。たとえば、データベースサーバー名と認証情報、認証サーバー、インストールされているサードパーティアプリケーションへのパスなどです。 また、私が主に取り組んでいるアプリケーションはバッチモードで実行されているコンソールアプリケーションであり、mainメソッドによってキャッチされ、適切に構成されていない場合は適切にログに記録される例外をスローすることにも注意してください。(これは私が継承したレガシーコードであり、現在はすべてが桃色だと想定しています。)

3
TPL TaskオブジェクトでDispose()を呼び出さないことは許容できると考えられますか?
バックグラウンドスレッドで実行するタスクをトリガーしたい。タスクの完了を待ちたくありません。 .net 3.5では、私はこれをしたでしょう: ThreadPool.QueueUserWorkItem(d => { DoSomething(); }); .net 4では、TPLが推奨される方法です。私が推奨する共通のパターンは次のとおりです。 Task.Factory.StartNew(() => { DoSomething(); }); ただし、StartNew()メソッドはTaskを実装するオブジェクトを返しますIDisposable。これは、このパターンを推奨する人々から見落とされているようです。Task.Dispose()メソッドに関するMSDNのドキュメントは言う: 「タスクへの最後の参照を解放する前に、必ずDisposeを呼び出してください。」 タスクが完了するまでタスクのdisposeを呼び出すことはできないため、メインスレッドを待機させてdisposeを呼び出すと、そもそもバックグラウンドスレッドで実行するポイントが無効になります。また、クリーンアップに使用できる完了/終了したイベントはないようです。 TaskクラスのMSDNページはこれについてコメントしておらず、 "Pro C#2010 ..."という本でも同じパターンを推奨しており、タスクの破棄についてはコメントしていません。 私がそのままにしておくとファイナライザーが最後にそれをキャッチしますが、これが戻ってきて、このような多くの火事をしていてファイナライザースレッドが圧倒されると、私に噛み付くのでしょうか? だから私の質問は: この場合Dispose()、Taskクラスを呼び出さなくても問題ありませんか?もしそうなら、なぜそしてリスク/結果はありますか? これについて説明しているドキュメントはありますか? それともTask私が見逃したオブジェクトを処分する適切な方法はありますか? または、TPLを使用してタスクを実行して忘れる別の方法はありますか?

13
log4netが機能しない
こんにちは、web.configにこの構成があります <log4net> <appender name="LogFileAppender" type="log4net.Appender.FileAppender"> <param name="File" value="mylog.log" /> <param name="AppendToFile" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="" /> <param name="Footer" value="" /> <param name="ConversionPattern" value="%d [%t] %-5p %m%n" /> </layout> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" > <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="[Header]\r\n" /> <param name="Footer" value="[Footer]\r\n" /> <param name="ConversionPattern" value="%d [%t] …
123 c#  .net-4.0  log4net 

13
C ++パフォーマンスの課題:整数からstd :: stringへの変換
以下にリンクされているstd :: stringコードに整数のパフォーマンスを超える人はいますか? そこに整数に変換する方法について説明し、いくつかの質問に既にあるstd::stringようなC ++で、この1は、しかし、提供するソリューションのどれも効率的ではありません。 これは、いくつかの一般的なメソッドと競合するためのコンパイル可能なコードです。 stringstreamを使用した「C ++の方法」:http : //ideone.com/jh3Sa sprintf。SO-ersは通常、パフォーマンスを重視する場合に推奨します。http://ideone.com/82kwR 一般的な考えに反しboost::lexical_castて、独自の実装(ホワイトペーパー)がありstringstream、数値挿入演算子を使用しません。この他の質問は悲惨であると示唆しているので、私は本当にそのパフォーマンスを比較してみたいと思います。 そして、デスクトップコンピューターで競争力のある私自身の貢献は、整数モジュロに依存するアルゴリズムとは異なり、組み込みシステムでもフルスピードで実行されるアプローチを示しています。 ベンのアルゴリズム:http : //ideone.com/SsEUW そのコードを使用したい場合は、簡略化されたBSDライセンスの下で使用できるようにします(商用利用が許可され、帰属が必要です)。聞いてください。 最後に、この関数ltoaは非標準ですが広く利用できます。 ltoaバージョン、それを提供するコンパイラを持っている人(ideoneは提供していません):http ://ideone.com/T5Wim パフォーマンス測定値を回答としてすぐに投稿します。 アルゴリズムのルール 少なくとも32ビットの符号付きおよび符号なし整数を10進数に変換するためのコードを提供します。 出力をとして生成しstd::stringます。 スレッド化およびシグナルと互換性のないトリック(たとえば、静的バッファー)はありません。 ASCII文字セットを想定できます。 INT_MIN絶対値を表現できない2の補数マシンでコードをテストしてください。 理想的には、出力はstringstream、http://ideone.com/jh3Saを使用した正規のC ++バージョンと文字ごとに同一である必要がありますが、正しい数値でも問題ないため、明確に理解できるものであれば何でもかまいません。 NEW:比較に必要なすべてのコンパイラーオプションとオプティマイザーオプション(完全に無効化されている場合を除く)を使用できますが、コードは少なくともVC ++ 2010およびg ++でもコンパイルして正しい結果を与える必要があります。 期待される議論 より優れたアルゴリズムに加えて、いくつかの異なるプラットフォームとコンパイラでいくつかのベンチマークを取得したいと思います(標準の測定単位としてMB /秒のスループットを使用しましょう)。私のアルゴリズムのコード(sprintfベンチマークはいくつかのショートカットを使用していることを知っています-現在は修正されています)は、少なくともASCIIの仮定の下で、標準によって明確に定義された動作ですが、出力に対して未定義の動作または入力がある場合無効です。指摘してください。 結論: おそらくそれぞれの実装が異なるため、g ++とVC2010では異なるアルゴリズムが実行さstd::stringれます。VC2010は明らかにNRVOでより良い仕事をしており、戻り値を取り除くことはgccでのみ助けられました。 sprintf桁違いに優れたコードが見つかりました。 ostringstream50倍以上遅れます。 チャレンジの勝者は、gccで自分の速度の350%を実行するコードを生成するuser434507です。SOコミュニティの気まぐれのため​​、以降のエントリはクローズされます。 現在の(最終?)スピードチャンピオンは次のとおりです。 gccの場合:user434507、8倍高速sprintf:http ://ideone.com/0uhhX Visual C ++の場合:Timo、15倍高速sprintf:http : //ideone.com/VpKO3

10
キー名に応じてHashMapから文字列値を取得します
HashMapさまざまなキーと値を持つを持っていますが、どのようにして1つの値を取得できますか? マップにと呼ばれるキーがありますmy_code。これには文字列が含まれている必要があります。マップを反復処理することなく、それを取得するにはどうすればよいですか? これまでのところ.. HashMap newMap = new HashMap(paramMap); String s = newMap.get("my_code").toString(); String「ABC」や「DEF」などのが表示されることを期待していますが、これは最初にそこSystem.out.println()に挿入したものですが、表示するとjava.lang.string#F0454 申し訳ありませんが、おそらくあなたが推測できるように、私はマップにあまり詳しくありません;)

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