BlackJumboDog on CoreCLR を.NetFrameworkで動かそうと思ったら・・・

ツイッターで、.NetFramework4.6で動かして、NUnitどうなの?という声をいただきまして、さっそく!project.jsonに以下を追加してみました。

  “frameworks”: {
“dnxcore50”: { },
“dnx461”: { }
}

う・・・。いやな感じに。

というのも、このSystem.Text.Encodingを含めは、23516で統一していたのですが、.netframework4.6では、どうやら違うバージョンになさいとのことです。バージョンを厳密にした思わぬ落とし穴でした。

(というか、、、少しおかしい気がします。機会があったらこの辺調べてみようかとは思います。dnx461でそもそもいいのとか。)

これを、それぞれのフレームワーク用に整えていけばよいのですが、今回の目的は、.NetFrameworkでも動かす!ではなく、テストの簡略化にありましたので、別の案を考えたほうがよさそうなところでもあります。

ただ、テストコードは、アプリケーションさえたたいてしまえばよいわけで・・・テストコードの結果さえ得られればよいわけで・・・という風にも考えられなくもないですね。

「NUnit dnx」とかぐぐっていたら、こんなものもありました。

https://github.com/xunit/dnx.xunit

Getting Started with xUnit.net (DNX / ASP.NET 5)

ちょっと興味が出てきます!これをNUnitのコードから移植してとかっていうのも面白そうですね!

(つづく

BlackJumboDog CoreCLR Ubuntu – Socketの置き換え APMからTAPへ

こんにちは!いきなり動いてるスクリーンショットから!!(Azure上のUbuntu14.04で動かしている様子です。)

というのも、動いてるだけでもすごいっていう気持ちを伝えたかったわけですが、今回に至るまでに行った変更点

  1. System.Net.Socketsのバージョンを他と統一し「4.1.0-beta-23516」としました。
  2. それに伴って、APMの実装は捨てられたため、TAPに書き直しました。
  3. パスの置換(\→.Netが提供するCharフィールド)を進めて動かしてみたところ、パスの置換が空回りして無限ループ!→修正済
  4. CPU利用率が起動直後で安定していても、10%以上という状況で、Thread.SleepをManualResetEventSlimに置換→アイドル中のレスポンスに1秒の遅延が発生。→検討中
  5. ConsoleTraceListenerの負荷がかかりそうなので、専用のタスクスケジューラ実装
  6. ログをそれっぽくフォーマットしました。

前回記事の、Begin/EndなどのAPM(非同期プログラミングモデル)なソケット実装がないとエラーになってました。これは、上のリンク先の通り、廃止されていくようです。このIssues(上と同じリンク) でその理由が書かれていました。Windowsに依存したようなものは排除する!っていう面白い話ですね。

ただ、これ変えてしまうと、そもそもポーリングしてるロジックとか全部作りなおしなわけで、結構時間かかってました&まだ懸念点が残ってます。行き詰っていろいろ試したのもあって、ソースの履歴が激しいことになっていてごめんなさいというところです。

また、ぜんぜん気づいていなかったのですが、Traceで出力したものは、Defaultのlistenerか何かによってだとは思いますが、しっかりとSyslogに出力されていました。(これはちょっと驚いた)

大物のWebServerが動いたので、懸念点を解消しつつデプロイ方向にシフトしていきます。

それではまた!

Windows Azure Storage for WordPress – Azure Blob Storage と Azure Content Delivery Network

初めてのAzureネタになりそうです、こんにちは!

ことの発端は、某きたあずの方から、これ使ったらいいんじゃないのー!?

Microsoft AzureのストレージからWordPressの画像を簡単配信

ということで、その方のブログ記事を紹介してもらいました。これのメリットは、PaaSなWebアプリにはストレージの制約があるようで、大量の画像とか動画(載せないとは思うけど)、サイズの大きなものがあると、そこで上限に達してしまう可能性があります。そうしたとき、一部のリソースをほぼ無制限に置けるStorageServiceに格納しておくことで、Webアプリが使うストレージの負担を減らせるってこと、単純なネットワーク負荷、CPU負荷メモリ負荷を減らせることですね。

もうちょっと踏み込んでサービスを組み合わせてみます。上記リンクの手順を行ったうえで、さらにAzure Content Delivery Network (CDN)という配信サービスを利用してみることにしました。

このサービスの特徴は、

  • キャッシュしてくれる
  • 複数の配信する場所があり、同じURLを参照しても、接続元の地域によって自動的に近い上記の場所を参照するようになっていること
  • 瞬間的な大量アクセスに対応させることができる
  • 反映されるまでにタイムラグがある。
といっても、このBlogにそこまで必要ないだろうというのと、Webアプリそのものにはかけていないので、画像、動画などメディアリソースにアクセスが集中するときに価値が出てくるかなぁというところです。
以下は、管理ポータルから作っている様子です。CDNというサービスを作成した後、その中にエンドポイントというものを作っています。

  1. 「名前」となっている項目にURLになるので、それっぽいものに
  2. 「配信元の種類」は、ストレージ、クラウドサービス、Webアプリ、カスタムの配信元がありますが、ストレージとします
  3. 自動的に、ストレージアカウントのホスト名がリストに出てきますので対象を選びました。
  4. あとはそのまま、追加!

 

そして、Wordpress側です。こっちにはCNAMEという項目がありますので、ここにCDNのエンドポイントURLを入力します。(スラッシュなしっぽい)

 

これで設定は完了のはずです。この投稿の画像は、さっそく利用しています。

CDN作成から配信されるまでのタイムラグですが、1時間くらいかかりました。それまでメディアファイルだけアップロードして待っていたのは秘密です。このタイムラグに困るときは、先ほどのWordpress側の設定からCNAMEを一度削除すればよいだけです。

それでは!

 

環境によるパスの違い – BlackJumboDog CoreCLR

前回から、Option.iniが読めてないのは見事的中しました。

https://github.com/darkcrash/bjd5/commit/789b737402a8e16b4d99147c6471eb83a426fce3?diff=unified#diff-e8a8a3be0e352480bc87c1f17ebc86bb

Windowsでは「\」をパスに利用しますが、Linuxでは「/」を利用します。ここにリテラルで「\」があったために、パスを拾えていなかったようです。これは、System.IO.Path.Combineメソッドを利用して対処しました。

でも、なんでこれで大丈夫なのだろうか?

という疑問が出てきましたので、ちょっとだけソースを追いかけてみました。

こうした環境の違いがあるために、.Net CoreのライブラリではPlatformによる違いを吸収する方法をとっているようです。

これが、Bjd(アプリ)が直接利用しているPathクラスの中身。(正確なバージョンまでは未確認。きっと多分)

System.Runtime.Extensions System/IO/Path.cs

中では「DirectorySeparatorCharAsString 」というフィールドを利用して、結合していますが、この実体はここにいません。

分割クラス(partial)となっており、

System.Runtime.Extensions  System/IO/Path.Windows.cs

System.Runtime.Extensions  System/IO/Path.Unix.cs

という風に複数定義されたものがありました。Unixでは「/」Windowsでは「\」(エスケープのため2文字なだけ)となっています。

これは、以下のプロジェクトファイルでターゲット($(TargetsUnix)、$(TargetsWindows))による切り替えが確認できます。

System.Runtime.Extensions.CoreCLR.csproj

つまり、プラットフォームごとに作られているものが違うということですね。

 

でも

2016-01-09 (1)

 

こ、今度は、BeginReceiveがないですと!!ポートが使われているよーはサービスを止めればよいとして、Windowsでは動いてるのに!!これも追いかけていこうじゃないですか!

それでは、また

 

 

Ubuntuで動いた!? BlackJumboDog CoreCLR

まずは無事に、動きました!DNX_TRACE=1から直接問題を検出できたわけではないですが、これを見ることによってどこまで動いているかの見当をつけることができたのは、StackOverflowExceptionのStackTraceを見れるのと見れないの違いくらいあるんじゃないかと思います。

2016-01-09

原因は、Consoleのサイズ取得もしくは変更をしようとしたところにありました。これは、本家Bjdにはない機能でした。GUIを捨てるときにどうしても何か見えるものをCUI上に出しておきたいと思ったのがきっかけです。Trace.Writeでトレースを出力するようにして、それをConsleに出力するためのTracelistenerを実装しています。

GitHub変更点

https://github.com/darkcrash/bjd5/commit/b42c4386866db1f681bbec13b6c20547b02e3320

Windows動かしている分には、サイズ変更できていましたが、SSH経由でそれをやると例外が発生していたようです。TryCatchを入れConsoleに出力したところメッセージが出てきましたので、取得または変更で間違いなさそうです。これもLinuxのGUI上からやったらどうなるかとかはわかりませんが、そんなことするなよって話もありつつ、やるならできない場合を考慮する必要があるようですね。

そもそも、何よ!って人に向けて

MSDN ライブラリ TraceListener クラス

これは、.NetFrameworkに昔からある機能で、Traceクラスを用いて、Writeメソッドやら、WriteLineとかで出したものを、受け取って何らかの処理をする機能を提供するための基底クラスです。ただ、.Net Core としても、Windows (ETW) があるようなので、Linuxでも動くならそっちのほうがよいでしょうね。

スクリーンショット見ると、サーバーは何も起動した形跡がないというオチが待っていました!おそらく、Option.iniを開けてとかその辺じゃあないのだろうかと思っていますが、本当に動くようになるまで戦いは続きます。

それでは、また!

 

 

 

 

 

Ubuntu dnxでTraceを出力する方法 – BlackJumboDog CoreCLR

前々日から、前日に続き

BlackJumboDogをUbuntu上で動かすために、いろいろ試行錯誤しています。どうやらUbuntuで動いていないのは本当に何か環境固有の問題ではないかと疑っています。

がしかし、何もエラーが出ずに困っていました。

そこで・・・

 

Creating a Cross-Platform Console App with DNX

https://github.com/aspnet/Home/wiki/Environment-Variables

 

ということで、環境変数を入れておけば、もっとトレース出すよ!ってことみたいです。ほかにもいろいろ変数があるようですね。

さておき、変数を設定して実行してみます。

env DNX_TRACE=1 dnx run

 

エントリポイントは再びお引越しして、bjdコマンドを定義してるので以下のように

env DNX_TRACE=1 dnx bjd

2016-01-07

何やら出てくるではありませんか!!

これをWindowsのものと比較してみます。

2016-01-07 (1)

 

アプリケーションが出すConsoleメッセージの直前は同じアセンブリを読んでるっぽいメッセージになってますね。

こうなると、PG側が悪いのではないかという疑いが出てきました・・・・!

ちなみに、UbuntuはAzureのもの使ってます。

明後日に続く!

VisualStudio がやっているdnxをLinux向けに置き換えるメモ2

前日に続き

まず、現状はうまくいっていません。ごめんなさい。

で、そもそもWindowsでもコマンドから実行させることができていない。VisualStudioで動いているからうごくもんだと思ったけど、そういうことではなかった・・・。

ので、Linuxの前にまずはWindowsのcmdからキックできることを目指すことにしました。

 

2016-01-06 (3)

ひとまず、program.csをエントリポイントとなっているアセンブリというかプロジェクトに移動させたところ動いたっぽい!いいんじゃないのいいんじゃないの!?

Ubuntuにもいっとこう!

明日に続く!

 

cheap mlb jerseys wholesale nfl jerseys cheap mlb jerseys wholesale nba jerseys

VisualStudio がやっているdnxをLinux向けに置き換えるメモ

ちょっとメモとして残します。

BlackJumboDogのせこせこ実装も無事終わって、Linux上で動かすための.SH作るためのメモです。

Windows上のDNXとDNUはLinuxのそれと同じように作られているのでそれを置き換えていきます。

[VisualStudio – build]

“[USER].dnx\runtimes\dnx-coreclr-win-x64.1.0.0-rc1-update1\bin\dnx.exe” –appbase “[REPOSITORY]\bjd5\Bjd.Common.CoreCLR” “[USER]/.dnx\runtimes\dnx-clr-win-x86.1.0.0-rc1-update1\bin\lib\Microsoft.Dnx.Tooling\Microsoft.Dnx.Tooling.dll” pack Generalversammlung “”[REPOSITORY]\bjd5\Bjd.Common.CoreCLR” –configuration Debug cheap nba jerseys –out “..\artifacts\bin\Bjd.Common.CoreCLR”

[VisualStudio – Blogはじめました run]

“[USER].dnx\runtimes\dnx-coreclr-win-x64.1.0.0-rc1-update1\bin\dnx.exe”  –appbase wholesale nba jerseys “[REPOSITORY]\bjd5\Bjd.CoreCLR” “Microsoft.Dnx.ApplicationHost”  –configuration Debug “BJD.CoreCLR”

 

[Linux – build]

dnu cheap jerseys from China restore

dnx –appbase “Bjd.Common.CoreCLR” ~/.dnx/runtimes/dnx-coreclr-linux-x64.1.0.0-rc1-update1/bin/lib/Microsoft.Dnx.Tooling/Microsoft.Dnx.Tooling.dll pack “Bjd.Common.CoreCLR” och –configuration Debug –out “artifacts/bin/Bjd.Common.CoreCLR”

[Linux – wholesale mlb jerseys run]

dnx –appbase “Bjd.CoreCLR” “Microsoft.Dnx.ApplicationHost”  –configuration Debug Energy “BJD.CoreCLR”

 

お、重い・・・。

動機があれだけど、NuGetデビュー・・・しようかなー

 

2016-01-05 (6)

そして、、、、動かないぜ。。。エントリポイントがそこにいないことが原因のような気がするので、ランタイムとVS、MSBUILDの動きをおいかけないとだめね。

明日からはMSBuildを食せるね!

 

 

最近取り組んでいること – BlackJumboDog CoreCLR ConsoleApp

こんにちは!

Blogを書いたのにあまり自己紹介とかもないので、少しづつ自分の取り組んでいることをここに残していこうと思います。元々Facebookで、画像アップロードしたりしてひっそり遊んでいました。こうやって活字にするはちょっとハードルがありますが、伝えていくという意味で、至らぬながらも挑んでいこうと思います。

BlackJumboDogのCoreCLR化

ということで、実はこのBlackJumboDogというのを使ったことはありませんでした。まずは、リンクを以下に張っておきます。

サイト:http://www.sapporoworks.ne.jp/spw/

CodePlex:http://blackjumbodog.codeplex.com/

GitHub:https://github.com/furuya02/bjd5

これ、すごいんですよねー!いろいろなサーバーの機能が詰め込まれている、C#で書かれてたアプリケーションなんです。HTTP、FTP、DHCP、DNS、SMTP、POP3、TFTP、Sip etc..

と全部で16ほどの機能を持っています。

これを、CoreCLRで動かしてみたいじゃない・・・?あれ、私だけ?製作者の方に許可をいただいて、がっつりやらしてもらうことにしました!

個々を見ていったとき多機能な部分もありますが、やはりお手軽さが非常に強いのかなぁって思いまして、option.ini(すべての設定を持つ構成ファイル)を本家のものでそのまま動かせるようにしてしまおうじゃないの!って考えています。

あ、そもそもCoreCLRなによ!?って方ですが、.NET Coreっていうものが作られています。これが、以下にあるように

http://www.dotnetfoundation.org/netcore

.NET Core has two cheap jerseys major components. It includes a small runtime that cheap jerseys free shipping is built Stellenangebote from the same codebase as the .NET Framework CLR. The .NET Core runtime includes the same GC Deadline and JIT (RyuJIT), but curves doesn’t include features like cheap jerseys Application Domains or Code Access Standard Security. The Blogはじめました runtime is delivered on wholesale MLB jerseys NuGet, via the Microsoft.CoreCLR wholesale MLB jerseys package.

ということで、かなり簡単に言ってしまうと.NetFrameworkからアプリケーションドメインとコードアクセスセキュリティを除外した軽量なフレームワークですよってことですね。ライブラリ(DLL)はNuGetから提供される。(事前にインストールしない)

これを動かすプラットフォームの一つにCore CLR(CommonLanguageRuntime)があるってことなんですね。ここで動くってことは、一応ASP.NET5上やらUWPからも実行できる可能性があるってことなんです。

可能性があるって言っているのは、実際にそれぞれの環境になると様々な制約があるので、コンソールアプリケーションのようには動かすことはできないことを意味しています。

ただ、Consoleアプリケーションは、特に制約がありませんので、まずはここを今目標として、せこせこやっているGitHubのリポジトリがこちらです。

https://github.com/darkcrash/bjd5

CoreCLRというブランチを作って、そこでせこせこ作っています。現在14/16まで移植していて、もうすぐ移植は完了し、デプロイメント手法の実装に移る予定ですー。

以下、CoreCLRとして、WebServerを動かしている様子です。

 

ある程度形になったら、また、ここで報告させていただきます!

それでは、また!

Blogはじめました

突然ですが、Blogはじめました。あけまして、おめでとうございます!

2016/01/01、Microsoft MVP awardを受賞いたしました。カテゴリは「Microsoft Azure」です。

これは何かというと、Most Valuable Professional

MVP とはどのような人?

Microsoft inl?gget! Most cheap nfl jerseys Valuable Samsung Professional Do? (MVP) cheap jerseys は、自身のマイクロソフト技術に関する知識や経験を最大限に活かしながら、他のユーザーを積極的にサポートしている、非常に優れたコミュニティのリーダーです。彼らは、技術専門知識に加えて自主性と情熱を兼ね備え、マイクロソフト製品の実用的な活用方法をコミュニティやマイクロソフトと共有しています。

ということのようです。

本音を言うと受賞するとは思っていなかったので、ぜんぜん心の準備とかできてなかったんですよね。

ただ、受賞したからには、より一層の高みを目指して情報発信にも力を入れていこうと決意しまして、Blogを開設いたしました。Microsoft wholesale jerseys China AzureのWebアプリでWordPressを動かしています。IaaSの知識はさほど多くはないので、PaaSでゆるーくテンプレートを用いて作りました。

自主性と情熱に関しては、持っているものを地道に書いていきたいなぁ。まずは、技術者、Azure、CoreCLRの面白さ楽しさを伝えていけたらいいな!っと思っています。

また、JAZUG札幌支部(きたあず)のスタッフもさせてもらっています。本部含めて以下、JAZUGというコミュニティの一覧を簡単にまとめました。

Japan Azure User Group (JAZUG)の一覧

 

どうぞ、よろしくお願いいたします。