More Effective C#のもくじ

Chapter 1 ジェネリック

  • 1.xフレームワークAPIのクラスではなく、ジェネリッククラスを使え
  • 制約は必要最小限にして十分なものを定義せよ
  • 実行型チェックを使ってジェネリックアルゴリズムを特化せよ
  • ジェネリックを使ってコンパイル時型インターフェイスを強制せよ
  • ジェネリッククラスは、IDisposableを実装する型パラメータのサポートを忘れるな
  • 型パラメータのメソッド制約の定義にはデリゲートを使え
  • 規定クラスやインターフェイスのためにジェネリックな特別バージョンを書くな
  • 型パラメータがインスタンスフィールドでない限り、ジェネリックメソッドを選べ
  • out、ref引数よりもジェネリックタプルを使え
  • ジェネリックなインターフェイスとともに古いインターフェイスも実装せよ

Chapter 2 C#におけるマルチスレッド

  • スレッドを作らずにスレッドプールを使え
  • スレッド間通信のためにBackgroundWorkerを利用せよ
  • 同期のためにはまずlock()を使え
  • ロックハンドルのためにはできる限り小さなスコープを使え
  • ロックされたセクションからは未知のコードを呼び出すな
  • WindowsフォームとWPFのスレッド間呼び出しを理解せよ

Chapter 3 C#の設計実践

  • シーケンスのためには合成できるAPIを作れ
  • アクション、述語、関数から反復処理を切り離せ
  • シーケンスの要素は要求されたときに生成せよ
  • 関数引数を使って結合を緩めよ
  • メソッドグループは明快で完全なものを最小限の規模で作れ
  • 演算子の多重定義よりもメソッドの定義を優先せよ
  • イベントはオブジェクトを実行時に密結合することを理解せよ
  • イベントはvirtual宣言するな
  • 例外はメソッドの約束ごとが守れなかったときに使え
  • プロパティはデータふらしくふるまうように作れ
  • 継承と合成を区別せよ

Chapter 4 C# 3.0の新機能

  • 拡張メソッドでインターフェイスの最小限の約束を補え
  • 拡張メソッドでクローズジェネリック型を拡張せよ
  • ローカル変数はできる限り暗黙の型付けに委ねよ
  • 無名型を使って型のスコープを制限せよ
  • 外部コンポーネントに対する合成可能APIを作れ
  • 束縛変数の変更を避けよ
  • 無名型を使ってローカル関数を定義せよ
  • 拡張メソッドを多重定義してはならない

Chapter 5 LINQの操作

  • クエリ式からメソッド呼び出しの変換がどのように行われるかを理解せよ
  • 遅延評価クエリーを使うようにせよ
  • メソッドよりもラムダ式を使うようにせよ
  • 関数やアクションで例外を投げるな
  • 遅延実行と先行実行を区別せよ
  • 高価なリソースを抱え込まないようにせよ
  • IEnumerableデータソースとIQueryableデータソースを区別せよ
  • Single()とFirst()を使ってクエリのセマンティクスを指定せよ
  • Func<>ではなくExpression<>を格納するようにせよ

Chapter 6 その他

  • null許容値のスコープはできるだけ狭くせよ
  • コンストラクタ、ミューテータ、イベントハンドラのために部分クラス、部分メソッドを使え
  • 配列引数を使わず、Params配列を使え
  • コンストラクタで仮想関数を呼び出すのを避けよ
  • 大規模なオブジェクトでは弱参照を検討せよ
  • ミュータブルでシリアライズできないデータは自動実装プロパティにせよ

Effective C#のもくじ

Chapter 1 C#言語

  • アクセス可能なデータメンバの代わりに常にプロパティを使用すること
  • constよりもreadonlyを使用する
  • キャスト時にはisあるいはas演算子を使用すること
  • #ifの代わりにConditional属性を使用する
  • ToString()を常に実装すること
  • 値型と参照型の違い
  • 値型は不変かつアトミックにすること
  • 値型における0を正常な状態とすること
  • ReferenceEquals()とstaticメソッドのEquals()、インスタンスメソッドのEquals()、等号演算子==の関係を把握する
  • GetHashCode()の罠に注意する
  • foreachループを使用すること

Chaptert 2 .NETにおけるリソース管理

  • 割り当て演算子よりも変数初期化子を使用すること
  • staticメンバはstaticコンストラクタで初期化する
  • コンストラクタの連鎖を活用する
  • usingおよびtry...finallyを使用してリソースの後処理を行う
  • ゴミの量を最小限に抑えること
  • ボックス化、ボックス化解除を最小限に抑える
  • Disposeパターンの標準的な実装

Chapter 3 C#によるソフトウェアデザインの表現

  • 継承よりもインターフェイスの定義および実装を行うこと
  • インターフェイスを実装することと仮想関数をオーバーライドすることの違い
  • デリゲートを使用してコールバックを実現する
  • イベントにより発信インターフェイスを定義する
  • クラス内オブジェクトの参照を返さないようにすること
  • 命令形プログラミングよりも宣言型プログラミングを選択する
  • 型はできるだけシリアル化可能とすること
  • IComparableとIComparerを実装して順序関係をサポートする
  • ICloneableを使用しないこと
  • 変換演算子は使用しないこと
  • 親クラスの変更による指示がない限りnew修飾子は使用しないこと

Chapter 4 バイナリコンポーネントを作成する

  • CLS互換性のあるアセンブリを作成すること
  • 機能を最小限かつシンプルにすること
  • より小さく凝集したアセンブリを作成すること
  • 型の可視性を制限すること
  • 粒度の粗いWeb APIを作成する

Chapter 5 フレームワークを活用する

  • イベントハンドラよりもオーバーライドを優先すること
  • .NETランタイムの診断機能を利用する
  • 標準の設定メカニズムを使用すること
  • データベインドを活用およびサポートすること
  • .NETの検証機能を使用すること
  • ニーズに一致したコレクションを用意すること
  • 独自のデータ構造よりもDataSetを利用する
  • リフレクションを単純化するために属性を使用する
  • リフレクションを使用しすぎないこと
  • 完全にアプリケーション固有の例外クラスを作成する

Chapter 6 その他

  • 例外を強く保証すること
  • 相互運用を最小限にすること
  • 安全なコードを選ぶ
  • ツールとリソースについて選ぶ
  • C# 2.0への準備
  • ECMA標準について学ぶ

ソースコード、コードスニペット共有Webサービスまとめ

ちょっとしたソースコードの共有系のWebサービス。

利用可能(2013/11/12時点)

  • sourcepod.com
    シンプル。共有するURLを出力してくれるのが良いかも。
  • Snipt.org
    UIが綺麗。
  • Pastie
    超シンプル。
  • Pastebin.com
    言語が豊富。(PL/SQLとかT-SQLもある!)

サービス終了?※利用不可

  • codr.cc
  • ShareSRC

今ってC言語が人気ナンバーワンなんだ・・・

「C言語」人気ありますねー。

少し古い記事(2013年7月)

7月プログラミング言語人気 - PHP急上昇 | マイナビニュース

順位

  1. C
  2. Java
  3. Objective-C

過去5年間の傾向

  • Java ・・・下落傾向
  • PHP ・・・下落傾向だったが、最近巻き返し
  • T-SQL、PL/SQL ・・・成長率がアップ

C言語は昔から人気はあるかなと思うし、Objective-Cの影響もありそうだけど、
JavaやPHP、Rubyなんかの方が人気高いのかなと思ってた。

Rubyがおもったよりランクが低い。

T-SQLとかPL/SQL等のストアド系の言語の成長率アップってのが、なんか興味深い。
Oracleは以前の独壇場が消えたがまだまだ健在、SQL Serverは当初よりだいぶ普及してきたイメージはあるけど、最近はMySQLや他のデータストア使うことが多いし。
ストアド系の言語は淡々と・・・って感じなのかなって思ってたけど。

連携ではなく、必要なものだけTwitter→Facebookへ流す方法

f:id:redpanda:20131103002159j:plain

利用シーン

とりあえず、Twitterへは投稿する。
その中で、必要なものだけFacebookへ転送したい。

Twitterはどうでも良いけど、
Facebookのタイムラインはあんまり汚したくないんだよなぁってときに。

必要な設定

  • Selective Tweets(Facebookアプリ)

手順

  • Facebookにログインして、Selective Tweetsへ行く。
  • 「アプリへ移動」
  • 「The one and only step:」というところに、自分のTwitterアカウントを入力し、「Save」。
    ※アプリの許可メッセージが表示されたら、「許可」する。
  • 続いて、「Settings」タブにて、下記の項目にチェックを入れ、「Save Changes」で保存。 「Allow the #fb tag anywhere in the tweet?」

利用方法

Twitterで発言するとき、Facebookにも転送したい場合、
投稿の文末にハッシュタグ「#fb」を入れるだけ。

このメッセージはFacebookにも転送するぜ?#fb

こうすることで、Twitterには普通に投稿され、Facebook側にも同じ投稿がタイムラインに表示される。

NavicatでOracle接続時、ORA-28547が発生する

環境

  • Oracle 11.2.0.1.0
  • Navicat Premiam(v11)

現象

NavicatでOracle接続時に、下記のエラーとなる。

ORA-28547: connection to server failed, probable Oracle Net admin error

状況

  • SQL*Plusから接続可能。
  • また、他のツール(A5:SQL mk-2、CSE等)は接続できる。
  • A5:SQLに関しては、TNSもOCIも接続可能。
  • NavicatはMySQLには接続できた。

原因と解決

メニュ「Tools>Options」の「OCI」設定項目、「OCI library (oci.dll)」を下記の通り変更。

変更前:
C:\Program Files\PremiumSoft\Navicat Premium\instantclient_10_2\oci.dll

変更後:
D:\app\ss\product\11.2.0\dbhome_1\bin\oci.dll

Navicatを再起動で設定が反映される。

この後、接続をためしたところ、Oracleへすんなりと接続できた。