世界で通用するエンジニアになるための高度な技術記事（英語）

英語サイトでは、日本語のサイトでは絶対に手に入らないレベルの記事がわんさか読めます。今日はCodeProjectよりシステム構築をする上で知っておくべき深い知識を解説した記事を3行要約と共にご紹介します。


##C#と.NETの記事
C#や.NETのかなりディープな記事たちです。日本語ではあまり見かけない深い部分まで知れます。

■高パフォーマンスなクラスのデザイン方法
[Performance Considerations of Class Design and General Coding in .NET - CodeProject](https://www.codeproject.com/Articles/812678/Performance-Considerations-of-Class-Design-and-Gen)
・クラスvs値型のメモリ使用の詳細
・値型のGetHashCodeとEqualメソッドをオーバーライドする
・シールドクラスによりVirtualメソッドを避ける
・インターフェースのDispatchについて
・ボクシングを避ける
・for vs foreachはforを使ったほうが全ての場合で圧倒的に早い（foreachでも.NETが最適化してくれる場合もあるよ）
・キャストで避けるべきこと
・P/Invokeについて
・Delegateのコスト（特に生成が遅い）
・例外のスローは避ける
・Dynamicについて
・コード生成について
・プリプロセッサの使用を推奨
・一番大事なのは測ること（各種の測定方法を紹介）

■.NETの型システムの内部構造について
[.NET Type Internals - From a Microsoft CLR Perspective - CodeProject](https://www.codeproject.com/Articles/20481/NET-Type-Internals-From-a-Microsoft-CLR-Perspecti)
・メモリ構造、メソッドテーブル、デリゲート、Enum、Array、Genericsの内部構造について解説

■C#のあまり知られていないTIPS
[The C# trickbox - CodeProject](https://www.codeproject.com/Articles/693771/The-Csharp-trickbox)
・StructLayout
・Sealedクラス
・readonlyとconst
・内部クラス
・DebuggerAttributes
・usingエイリアス
・Enumと拡張メソッド
・ドキュメントにないキーワード、\_\_arglist、\_\_reftype、\_\_refvalue
・インデクサ
・ボクシング

##WEB、WPF、ネットワーク、DB
次はWEBやWPF、ネットワーク関連の記事です。

■Webサイトを高速化する方法
[Speed Up Your Website - By Example - CodeProject](https://www.codeproject.com/Articles/26376/Speed-Up-Your-Website-By-Example)
・WEBの基本知識（DNS、HTTP、リクエスト、レスポンス、HTML)
・ロード時間の最適化（HTML、画像、TABLEタグ、CSS、JavaScript)
・リクエスト・レスポンスのサイズ
・ドメインルックアップ
・CDNの利用
・AJAX

■SocketAsyncEventArgsを使用した高パフォーマンスなソケットコードの作り方
[C# SocketAsyncEventArgs High Performance Socket Code - CodeProject](https://www.codeproject.com/Articles/83102/C-SocketAsyncEventArgs-High-Performance-Socket-Cod)
・IO完了ポートとマルチスレッド
・TCPのアンマネージドコードによるメモリの断片化からのOutOfMemoryExceptionを防ぐコーディング方法。これはまじで罠です。ソケットを使ったプログラムをしている人は必読。

■高速でスケール可能なドメインをまたぐデータ転送のAJAXプロキシ
[Fast, Scalable, Streaming AJAX Proxy - continuously deliver data from across domains - CodeProject](https://www.codeproject.com/Articles/25218/Fast-Scalable-Streaming-AJAX-Proxy-continuously-de)
・マルチスレッドパターンのProducer＆Consumerパターンの実装
WEBサイトにファイルをポスト→ローカルのファイルシステムやAzureへ保存、みたいなシーンで活用可能。

■WPFのデータバインディング
[WPF Data Binding - Part 1 - CodeProject](https://www.codeproject.com/Articles/29054/WPF-Data-Binding-Part)
・基礎から順番に解説。非常にわかりやすい。

■データベースデザインにおける従うべき11のルール
[11 important database designing rules which I follow - CodeProject](https://www.codeproject.com/Articles/359654/important-database-designing-rules-which-I-fo)

##ライブラリ
凄いライブラリ達です。もちろん全てソースコード付き。

■高速なCSVリーダー（まじで速い）
[A Fast CSV Reader - CodeProject](https://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader)

■DbSharp（データアクセスのコード生成ツール）
[DbSharp -DAL generator tool- - CodeProject](https://www.codeproject.com/Articles/776811/DbSharp-DAL-generator-tool)
・コードジェネレータの設計方法の解説
・SQLサーバー、MySQL、テーブル、ストアドプロシージャ、ユーザー定義型に対応
・テーブル型の引数、Indentity,RowGuid,Timestamp、Enum、複数の結果セットに対応
・トランザクションも可能

■メールのライブラリ（SMTP、POP3、IMAP）
[Understanding the Insides of the SMTP Mail Protocol: Part 1 - CodeProject](https://www.codeproject.com/Articles/399207/Understanding-the-Insides-of-the-SMTP-Mail-Protoco)
[Understanding the insides of the POP3 mail protocol: Part 2 - CodeProject](https://www.codeproject.com/Articles/404066/Understanding-the-insides-of-the-POP-mail-protoco)
[Understanding the insides of the IMAP mail protocol: Part 3 - CodeProject](https://www.codeproject.com/Articles/411018/Understanding-the-insides-of-the-IMAP-mail-protoco)
・SMTP、POP3、IMAPのプロトコルの仕様の解説と実装

■TimePeriodライブラリ
[Time Period Library for .NET - CodeProject](https://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET)
カレンダーアプリとかで時間帯の重なりなど考えるときがありますが、この記事を読むとすっきりします。
・時間帯の重なりの計算概念について全て網羅
・上記を踏まえたクラスの設計と実装

■C#によるVectorクラス（3D空間を表現するクラス）
[A Vector Type for C# - CodeProject](https://www.codeproject.com/Articles/17425/A-Vector-Type-for-C)
・高等数学のベクトル、演算子、値型について詳しくなれます。

■MotionJPEGをストリーミング配信するサーバーの作り方
[Motion JPEG Streaming Server - CodeProject](https://www.codeproject.com/Articles/371955/Motion-JPEG-Streaming-Server)
・JPEGを連続的に配信することで動画配信する。
・市販のIPカメラはだいたいこの手法で動画配信。
・PCはもちろんのこと、モバイルでも閲覧可能。

■バーコード画像を生成するライブラリ
[Barcode Image Generation Library - CodeProject](https://www.codeproject.com/Articles/20823/Barcode-Image-Generation-Library)

■Lucene.net（全文検索エンジン）の紹介
[Introducing Lucene.Net - CodeProject](https://www.codeproject.com/Articles/29755/Introducing-Lucene-Net)

■C#によるネイティブベイジアンフィルタ（迷惑メール判別の手法）
[A Naive Bayesian Spam Filter for C# - CodeProject](https://www.codeproject.com/Articles/23472/A-Naive-Bayesian-Spam-Filter-for-C)
・迷惑メールフィルタが自分で簡単に実装できます。
・機械学習で学習させることにより、スポーツの記事とそれ以外を判別するなどの処理も実装可能。

■計算エンジンの作成（文字列の計算式を解析して計算する）
[A Calculation Engine for .NET - CodeProject](https://www.codeproject.com/Articles/246374/A-Calculation-Engine-for-NET)

##認識サービスの記事
IoTなどで使用可能な認識処理の深い知識が得られます。もちろんソースコード付きのライブラリもあるので自分のアプリに実装も可能。

■音声認識（音声→テキスト、テキスト→音声）と文脈解析
[Speech recognition, speech to text, text to speech, and speech synthesis in C# - CodeProject](https://www.codeproject.com/Articles/483347/Speech-recognition-speech-to-text-text-to-speech-a)

■画像解析の基本要素（全然基礎じゃないw大学修士レベル）
[Fundamentals of Image Processing - behind the scenes - CodeProject](https://www.codeproject.com/Articles/781213/Fundamentals-of-Image-Processing-behind-the-scenes)

■モーション認識のアルゴリズム
[Motion Detection Algorithms - CodeProject](https://www.codeproject.com/Articles/10248/Motion-Detection-Algorithms)
・AForge.netによるモーション解析

■C#による高速なオブジェクト認識処理
[Rapid Object Detection in C# - CodeProject](https://www.codeproject.com/Articles/826377/Rapid-Object-Detection-in-Csharp)
・Afford.netを使ったテンプレートマッチングによるオブジェクトの認識

もしこの記事を翻訳してほしいなどあればコメントしてください。時間が取れればざっくり翻訳くらいならしてみたいと思います。

##まとめ

CodeProjectは本当にいい記事が揃っています。みなさんも英語のサイトの記事を是非読んでみましょう。