しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

C#

.NET Core のバージョンが難しい

C#

ちょっと前に .NET Core のバージョンがよくわからないという話題が Twitter で上がりました。何のVersionを表示しているのか?有識者に聞かないと良くわからん。 pic.twitter.com/1gqVqpASxP— Takekazu Omi (@takekazuomi) 2017年3月8日@shibayan 全然わか…

CircleCI を使った .NET Core アプリケーションのビルドを高速化する

CI の SaaS はビルドの度にコンテナが生成されて、完了したら破棄されるといったように揮発する性質があるので、キャッシュが効かずに時間がかかりがちです。.NET Core の場合は NuGet パッケージのインストール処理で影響が出やすいです。特に dotnet コマ…

Connect(); // 2015 でリリースされた DNX と .NET Core / CLI について調べた

Connect(); // 2015 では ASP.NET 5 (DNX) や .NET Core の RC 1 が出たので、自分なりに整理するために色々と調べて OS X 上で実際に試してみました。RC 1 ではちゃんとインストーラーやドキュメントが用意されているので簡単です。 DNX / ASP.NET 5 http:/…

COM Interop の基本を IShellLink を使って学びなおした

C#

WinQuickLook で COM インターフェース定義を大量に手書きした時、自分の COM Interop の知識がイマイチなことに気が付いたので、とても分かりやすい IShellLink を使ってまとめます。ちなみに IShellLink はショートカットを作成するためのインターフェース…

P/Invoke と Win32 API の両方で文字コードの罠にはまった話

C#

最近真面目に作っている WinQuickLook は Win32 API と COM の塊なので、P/Invoke で割とはまりました。特に文字コード周りが致命的だったので、簡単に内容をまとめておきます。 DllImport のデフォルト文字コードは ANSI DllImport をデフォルトのまま使う…

GR-PEACH (PinKit) が届いたので .NET Micro Framework を使った開発を試してみた

C#

ESEC2015 でひっそりと予約していた GR-PEACH がやっと届きました、価格は 13k 程です。ESEC2015 で予約したときには 7 月中納品と言われた気がしますが、この際気にしないことにします。日本っぽいデザインのパッケージになっています。大きさはたばこの箱…

NMeCab でも mecab-ipadic-neologd を使ってみた

C#

Twitter で新しい MeCab 用の辞書が公開されたことを知ったので、例によって NMeCab で試してみました。[O] MeCab 用の新語辞書 mecab-ipadic-neologd を公開しましたMeCab に付いている IPA 辞書はかなり更新されていないので新語に弱いですが、今回公開さ…

.NET Core Runtime (CoreCLR) / .NET Compiler Platform (Roslyn) / .NET Execution Environment (DNX) の役割について理解したい

自分でも最近の .NET Core 5 周りで混乱してきたので、整理するために簡単にまとめました。略称も色々なので、そのあたりと役割も一緒に分かってる範囲で書きます。 .NET Core Runtime (CoreCLR) GitHub でオープンソースになると話題になった部分で、RyuJIT…

.NET Core Runtime (CoreCLR) を Ubuntu 14.04 LTS 上でビルドして実行まで試してみた

C#

以前、Raspberry Pi 2 で .NET Core Runtime (CoreCLR) をビルドしようとして挫折しましたが、x64 な Ubuntu を使えば問題なくビルドと実行が出来たので、内容をメモ程度に残しておきます。基本的な手順は CoreCLR の GitHub Wiki にまとまっています。この…

NMeCab で UniDic を使う 2 つの方法を試してみた

C#

前回 NMeCab を試した時には標準の IPA 辞書を使いましたが、今回は辞書として UniDic を使ってみました。UniDic プロジェクト日本語トップページ - SourceForge.JP最終更新日が 2013 年だったので、MeCab に付いている IPA 辞書よりは新しい気がします。と…

マルコフ連鎖を使って文章を自動生成するクラスを C# で書いた

C#

NMeCab で形態素解析が簡単に行えるようになったので、何となくマルコフ連鎖での文章生成を選びました。少し時間かけて C# で実装したので、作成したコードを GitHub に置いておきました。shibayan/MarkovDemoデフォルトでは MarkovKey クラス内で N = 2 と…

NMeCab と NuGet を使って手軽に形態素解析を試した

C#

Azure Search で久しぶりに形態素解析周りが気になったので MeCab でも使うかと思って調べると、今は C# で実装された NMeCab というライブラリがあるんですね。NMeCab - 形態素解析エンジンMeCabの.NET版 (エヌメカブ ケイタイソカイセキ エンジン メカブ …

Twitter や Facebook が SSL 3.0 を無効にしたので死にかけた話

C#

今朝、Twitter や Facebook が SSL 3.0 を素早く無効化したため、API を使って処理を行っていたアプリが全滅するという悲惨な出来事が発生しました。Twitter や Facebook の API を使っている場合、Global.asax.cs とかの初期化コードに以下のような設定を書…

SendGrid の公式 C# クライアントが残念な感じだったので

本来なら SendGrid の Template Engine を使ってみた的な内容になるはずだったんですけど、公式に提供されている C# のクライアントがバグ持ちで、直すには PCL を捨てないとダメなんじゃないかという感じだったので、カッとなってオレオレクライアントを作…

.NET Framework 4 から追加された ObjectCache と互換性のある RedisCache クラスを作った

.NET Framework 4 から追加された System.Runtime.Caching 名前空間に ObjectCache クラスと、その唯一の実装である MemoryCache クラスが用意されています。ObjectCache クラス (System.Runtime.Caching)ASP.NET には専用のキャッシュが用意されていますが…

接続文字列の書き方をまとめてみる(2014 年版)

接続文字列の書き方をまとめてみる - しばやん雑記 でまとめた内容が、流石にちょっと古くなってきたので Azure 周りも含めてアップデートを行っておきます。 SQL Server LocalDB LocalDB は SQL Server 2012 から追加された、インスタンスが常時起動しない…

Azure Web サイトの .NET Framework が 4.5.2 にアップデートされていた話

Windows Azure Web サイトがいつの間にか .NET 4.5.1 に対応していた件と Helios 0.1.4-pre の話 - しばやん雑記 で Azure Web サイトのランタイムが .NET 4.5.1 にアップデートされたと書きましたが、今日も Web サイトのアップデートがあったのでレジスト…

C# と FFmpeg を使って動画のサムネイルを生成してみた

C#

ちょっと前になりますが WPF を使って動画のサムネイルを生成してみた - しばやん雑記 で書いた通り WPF を使って動画のサムネイルを自動的に生成するコードを書いてみたのですが、これが Azure Web サイト上で動いてくれなくて困りました。やはりサーバー O…

System.Drawing が画像の方向を無視するので対応した話

C#

最近は仕事で画像をいろいろと弄ることをやっているのですが、スマートフォンで撮影された画像を System.Drawing で処理させると向きがおかしくなるんですよね。原因は Exif の orientation 情報を正しく処理していないからなんですが、これがまあまあ面倒な…

Windows Azure Web サイトがいつの間にか .NET 4.5.1 に対応していた件と Helios 0.1.4-pre の話

またも気が付かなかったんですが、Windows Azure Web サイトは .NET Framework 4.5.1 へのインプレース更新が行われたようで、いつの間にかに使えるようになっていました。基本的に Web サイトでの表記としては .NET Framework 4.5 で統一されているので、実…

.NET Framework の正規表現とメールアドレス検証に悩まされた件

今週は .NET Framework の正規表現とメールアドレス検証に目いっぱい悩まされました。事の顛末を説明すると以下のような感じ。 正規表現 Regex クラスはデフォルトでは文字クラスの扱いなどが、ECMAScript の挙動とは異なるので悩みました。もしかして:.NET…

.NET 4.5 で SmtpClient の挙動が変わっていたらしい

C#

.NET 4.5 で作ってるアプリケーションにメール送信機能があるんですが、どうも特定の環境で件名が文字化けする現象が発生しました。何故か件名の最後の方の文字だけ化けるという嫌な感じな化け方でした。ちなみに、日本語の件名なので以下の記事のように ISO…

AutoMapper の基本とちょっとした Tips

C#

AutoMapper最近はモデルの詰め直しをする時に AutoMapper を使うようになりました。MvcFutures には ModelCopier というコピー専門のクラスがあったりしますが、やはり自由度が低すぎるので AutoMapper が便利だと思います。インストールも NuGet から一発で…

Web API よりも HttpClient に注目したい

C#

NuGet で公開されていた System.Net.Http.dll が .NET Framework 4.5 では BCL 入りを果たしました。このアセンブリには HttpClient という全く新しい HTTP のクライアントが入っています。これって元々は ASP.NET Web API 向けに HTTP を綺麗にラップしたク…

WCF WebSockets で実現するリアルタイム Web

最近は Node.js と socket.io で WebSocket を使うことが多いようですね。Windows Azure でも動作する node.exe がリリースされたり、Microsoft もオープンソース寄りになってきたのかと思います。しかし!わざわざ .NET 開発者が Node.js を使う必要がある…

接続文字列の書き方をまとめてみる

C#

内容が古くなってきたので 接続文字列の書き方をまとめてみる(2014 年版) - しばやん雑記 にて Azure にも対応した 2014 年版を公開しました。毎回、本番環境にアップする前に迷うのが SQL Server の接続文字列だったりします。レンタルサーバでは基本的に…

Silverlight 4 と .NET Framework 4 間で共有可能なライブラリを作る方法

C#

毎回、どのアセンブリを参照しておけばいいのか忘れてしまうので強くメモしておきます。Sharing Silverlight Assemblies with .NET Apps - .NET Blog - Site Home - MSDN Blogs実際に利用可能なアセンブリは以下になります。 mscorlib System System.Core Sy…

.NET 4 の罠に引っかかった

C#

みについを .NET Framework 4 に対応させたバージョンを昨日、半自動更新でのアップデートを開始したのですが、今朝にテーマが読み込めなくて落ちるという報告を頂きました。帰宅後すぐに調査し始めたのですが 2 つの罠に引っかかったことがわかりました。 …

Repository パターンまとめ

C#

まとめになるかはわかりません。タイトルを思いつかなかっただけです。Repository for ASP.NET MVC - しばやん雑記 で Repository の使い方をちょろーんと書きましたが、IRepository で共通部分くくりだしてるのに、実装はそれぞれの Repository 任せってダ…

.NET Framework における GC と Mutex の関係

C#

Mutex を使ってアプリケーションの多重起動をブロックする場合、検索して見つかるのは以下のような実装。 Mutex mutex = new Mutex(false, "hoge"); if (!mutex.WaitOne(false, 0)) { // 既に起動されている return; } Application.Run(new Form1()); Mutex …

オブジェクト初期化子を使う

ものすごく楽です、特にプロパティが多い WPF 周りですっきりと書けるのがうれしいところ。これは惚れます。 Window window = new Window { Title = "新しいウィンドウ", Width = 300, Height = 300 }; と書けるのですっきりしていい感じです、イベントも指…

COM の CoClass について調べた

C#

COM の CoClass を .NET から使う場合は、空のクラス定義に ComImportAttribute と GuidAttribute を付け、同じように定義しておいたインターフェースにキャストするのが一般的です。しかし以下のようにインターフェースを new しているように書かれているコ…

.NET Framework に用意された 3 種類の Timer

C#

.NET Framework には 3 種類のタイマークラスが用意されています。 System.Timers.Timer System.Threading.Timer System.Windows.Forms.Timer それぞれ実装方法の違いで挙動が変わっているので、簡単に調べたものをメモしておきます。 System.Timers.Timer …

.NET Compact Framework で Win32 メッセージを処理する

C#

.NET Compact Framework に用意されている Form クラスには WndProc メソッドが存在しないので、ウィンドウプロシージャの処理をオーバーライドできません。Win32 メッセージを処理するためには Microsoft.WindowsCE.Form.EventWindow を使えば、WndProc を…

Runtime Callable Wrapper (RCW) を使う時の注意点

C#

Runtime Callable Wrapper (RCW) のおかげで、COM を簡単に C# などから使うことが出来ますが、今回素晴らしくその挙動ではまったので忘れないうちにメモ。 Marshal.ReleaseComObject の呼び出し Marshal.ReleaseComObject を呼び出す必要がないのは、キャス…

System.Drawing.Color で定義されている色の一覧を取得する

C#

GDI+ の Color クラスで予め定義されている色がどんな色なのかわからなかったので、リフレクションを使って取得するコードを書いてみました。特に難しいことはしていません。 var baseColor = new Color(); foreach (var propertyInfo in typeof(Color).GetP…