拡張メソッドのライブラリ一覧(C#)

OSSC#の拡張メソッドのライブラリを調べたメモです。
たくさんありつつも、デファクトスタンダートといったものはない印象です。

ASP.NET5(C#)をCoreOSのDockerで動かす

ASP.NET5の「1.0.0-beta4」を、AzureのCoreOSのDcokerで動かす手順をメモりました。

ASP.NET vNextのDocker

https://github.com/aspnet/aspnet-docker
https://registry.hub.docker.com/u/microsoft/aspnet/


AzureでCoreを作成
Dockerを使うためにCoreOSを使用します。
Azureでインスタンスを作るには、ギャラリーからCoreOSのStableを選択するだけです。


とりあえずはパスワードを指定しておけば、大丈夫です。


ASP.NETアプリを外からつながせたい場合はエンドポイントでHTTPを追加します。

CoreOSでは、DockerもGitも使える状態になっています。


Linux(CoreOS)にSSHクライアントから接続
プロビジョニングが終わったら、PuttyなどのSSHクライアントで繋ぎます。

#ホームへ
cd 

# 作業フォルダを作って移動
mkdir aspnet
cd aspnet

# ASP.NETのサンプルをGitから取得
git clone git://github.com/aspnet/Home.git

# 今回のデプロイ用のDockerの設定ファイルを作成
vim Dockerfile


Dockerファイルの編集
Dockerfileをvimエディタで作成し、以下の内容で保存します。(保存はESCキー後の、ZZ、終了は:q!)

FROM microsoft/aspnet:1.0.0-beta4
ADD ./Home/samples/1.0.0-beta4 /app
WORKDIR /app/HelloWeb
RUN ["dnu", "restore"]

EXPOSE 5004
ENTRYPOINT ["dnx", ".", "kestrel"]
  • Dockerfileの説明
    • beta4のMicrosoftのDockerはMono4.0.1をベースにしています。
    • Gitでとってきたサンプルファイルを渡し、dnu restore(旧 kpm restore)コマンドを実行しています。
    • その後ポート5004で公開して、dnx kestrel (旧k kestrel)コマンドを実行しています。
    • kestrelLinuxでも動くHTTPサーバーです。

この時点でのファイル構造(関係ないところは省略)

/home/aoki/aspnet

--Dockerfile
--Home
--.gitattributes
--.gitignore
--CONTRIBUTING.md
--GettingStartedDeb.md
--Home.sln
--LICENSE.txt
--README.md
--dnvm.cmd
--dnvm.ps1
--dnvm.sh
--dnvminstall.ps1
--dnvminstall.sh
--samples
--1.0.0-beta4
--HelloWeb
--HelloWeb.xproj
--Properties
--launchSettings.json
--Startup.cs
--project.json
--wwwroot
--image.jpg
--NuGet.Config



Dockerイメージ作成
Dockerイメージを作成します。

sudo docker build -t aspnetvnext .

しばらく待ちます。dnu restoreコマンドでアセンブリの取得をするので、時間がかかります。



実行結果

Sending build context to Docker daemon 2.177 MB
Sending build context to Docker daemon
Step 0 : FROM microsoft/aspnet:1.0.0-beta4
---> 94b7c4941bcc

Step 1 : ADD ./Home/samples/1.0.0-beta4 /app
---> 7577bcb65df0
Removing intermediate container dfdf4ce1d496

Step 2 : WORKDIR /app/HelloWeb
---> Running in 5c965567463e
---> c2445e98ce6b
Removing intermediate container 5c965567463e

Step 3 : RUN dnu restore
---> Running in 84f4580847b8
Restoring packages for /app/HelloWeb/project.json
GET https://www.myget.org/F/aspnetvnext/api/v2/FindPackagesById()?Id='Kestrel'.
GET https://nuget.org/api/v2/FindPackagesById()?Id='Kestrel'.
(省略)
OK https://www.myget.org/F/aspnetvnext/api/v2/package/System.Security.Cryptography.Hashing/4.0.0-beta-22907 643ms
(省略)
Installing System.Security.Cryptography.Hashing 4.0.0-beta-22907
Writing lock file /app/HelloWeb/project.lock.json
Restore complete, 565334ms elapsed
---> c08b36d2b243
Removing intermediate container 84f4580847b8

Step 4 : EXPOSE 5004
---> Running in 9c7ee0026d35
---> 6a7785a4718d
Removing intermediate container 9c7ee0026d35

Step 5 : ENTRYPOINT dnx . kestrel
---> Running in b092448c2d29
---> fbc1a2b1c89a
Removing intermediate container b092448c2d29
Successfully built fbc1a2b1c89a

STEP順に実行されます。
(以前と異なり、project.jsonだけではなく、project.lock.jsonなるものが生成されていました。人が触らないファイルのように見えます。)




Dockerイメージの確認

sudo docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
aspnetvnext         latest              fbc1a2b1c89a        11 minutes ago      778.7 MB

aspnetvnextという名前のDockerイメージができています。


Dockerコンテナに配置
Dockerのrunコマンドで、コンテナに配置します。

sudo docker run -t -p 80:5004 aspnetvnext

ポート5004を80に割り当てて実行。
エラーがあれば表示されます。


sudo docker ps -a

上記コマンドで実行できてているDockerコンテナを確認します。




正常起動した場合は

sudo docker stop <コンテナID>

で停止できます。


エラーがなければ、Dockerを-d(デーモン)オプションを付けてサービス実行します。(こちらは、エラーがあっても気づきません。)

 sudo docker run -t -d -p 80:5004 aspnetvnext

確認
画面から確認します。

無事動いていることを確認できました。



ASP.NET MVC 5実践プログラミング

ASP.NET MVC 5実践プログラミング」を読みました。
この本は、ASP.NET MVCを学ぶ上で最良の一冊です。

ASP.NET MVCは、昨今のMicrosoft Web技術のメインストリームといえる技術で、最新はバージョン5です。
Webにも多くの情報がありますが、最新のASP.NET MVCを効率的に学びたいときは、この本を読むことをお勧めします。

ASP.NET MVC5実践プログラミング

ASP.NET MVC5実践プログラミング

簡単なサンプルから始まり、徐々に理解を深めることができます。
そして、Razorの一つ一つの構文や説明も細かく書いています。

ASP.NETを活用して、素敵なサイトを作りたい方におすすめの一冊です。

ASP.NET vNext(Project K/KVM/KPM/KRE/KLR) VS14 CTP3もろもろ

[2014年10月追記]CPT4

  • CTP4についてメモ
    • KPM
      • ProgramFileやキャッシュを使って、毎回MyGetからとりにいかなくなりました。
      • 少しずつパフォーマンス改善されてます。
      • System.*はKPMではなく、KREからとるようにかわりました。
      • C:\Program Files (x86)\Microsoft Web Tools\Kpm
      • C:\Program Files (x86)\Microsoft Web Tools\Kre
    • パッケージ
      • 従来のパッケージ(EntityFramework6)
      • C:\Program Files (x86)\Microsoft Web Tools\Packages
      • KPM用パッケージ(EntityFramework7)
      • C:\Program Files (x86)\Microsoft Web Tools\Kpm
    • KREのパッケージ構造

C:\Program Files (x86)\Microsoft Web Tools\Kre>tree
Folder PATH listing
C:.
├───KRE-CLR-amd64.1.0.0-alpha4
│ └───bin
│ └───lib
│ ├───Microsoft.Framework.DesignTimeHost
│ ├───Microsoft.Framework.PackageManager
│ └───Microsoft.Framework.Project
├───KRE-CLR-x86.1.0.0-alpha4
│ └───bin
│ └───lib
│ ├───Microsoft.Framework.DesignTimeHost
│ ├───Microsoft.Framework.PackageManager
│ └───Microsoft.Framework.Project
├───KRE-CoreCLR-amd64.1.0.0-alpha4
│ └───bin
│ └───lib
│ ├───Microsoft.Framework.DesignTimeHost
│ ├───Microsoft.Framework.PackageManager
│ └───Microsoft.Framework.Project
├───KRE-CoreCLR-x86.1.0.0-alpha4
│ └───bin
│ └───lib
│ ├───Microsoft.Framework.DesignTimeHost
│ ├───Microsoft.Framework.PackageManager
│ └───Microsoft.Framework.Project
└───KRE-Mono.1.0.0-alpha4
└───bin
└───lib
├───Microsoft.Framework.DesignTimeHost
├───Microsoft.Framework.PackageManager
└───Microsoft.Framework.Project

    • Frameworkの名前
      • K10はaspnetcore50に、.NET45はaspnet50に変更。
      • サンプルを見ていると、.NET45と共存している場所もあったので、asp.net系のDLLのサブセットという意味合いになったよう。
  • 以下はついでメモ
    • DI
      • なんとなく見ていたら、DIを独自実装ではなく、UnityやNinjectといったライブラリを使う仕組みのようです。
    • xUnit.NET
      • K.Runner部分はASP.NETGitHubで作っている。k testという形で呼び出す。
    • ローカルIISやAzureへのデプロイは、
      • kpm pack --runtime KRE-CoreCLR-x86.1.0.0-beta1-10577
      • kpm pack --runtime KRE-CLR-x86.1.0.0-alpah4
      • IISでは、wwwrootを物理フォルダに設定
    • KPMのキャッシュの場所
      • C:\Users\aoki\AppData\Local\kpm\cache
    • VS14の設定
      • C:\Users\aoki\AppData\Local\Microsoft\VisualStudio\14.0
      • KRuntimeは「KRuntime.sdf」がある

以下元ブログ記事


以前会社の勉強会ASP.NET vNextについて発表した時の資料です。

CTP3の時に書いたメモ

この時はVisual Studio 14 CTP2でしたが、現在はCTP3が出ています。


ちらっとのぞいてみたところ、CTP2の時は各プロジェクトのPackagesフォルダにアセンブリが配置されていましたが、CTP3では、プロジェクト配下のPackagesフォルダが無くなり、%HOMEPATH%.KPM に集約されてすっきりしてました。


以下は気になったことの自分メモです

  • ちなみに、対象とするフレームワークの設定で、Core(K)を選んだときに保存される場所は、*.kprojではなく、*.kproj.userファイル(以下のイメージ)。実行時にどちらでも動くから「開発者の環境に依存するもの」という位置づけなんですかね。ちょっと違和感あり。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ActiveTargetFramework>K,Version=v1.0</ActiveTargetFramework>
  </PropertyGroup>
</Project>
  • *.kprojも変更あり。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">12.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  </PropertyGroup>
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
  </PropertyGroup>
  <Import Project="$(VSToolsPath)\AspNet\Microsoft.Web.AspNet.Props" Condition="'$(VSToolsPath)' != ''" />
  <PropertyGroup Label="Globals">
    <ProjectGuid>5613d12f-75e6-49d1-8a94-e1fed866c926</ProjectGuid>
    <OutputType>Web</OutputType>
    <RootNamespace>WebApplication2</RootNamespace>
  </PropertyGroup>
  <PropertyGroup Condition="$(OutputType) == 'Console'">
    <DebuggerFlavor>ConsoleDebugger</DebuggerFlavor>
  </PropertyGroup>
  <PropertyGroup Condition="$(OutputType) == 'Web'">
    <DebuggerFlavor>WebDebugger</DebuggerFlavor>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'" Label="Configuration">
  </PropertyGroup>
  <PropertyGroup>
    <SchemaVersion>2.0</SchemaVersion>
    <DevelopmentServerPort>49214</DevelopmentServerPort>
  </PropertyGroup>
  <Import Project="$(VSToolsPath)\AspNet\Microsoft.Web.AspNet.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>
  • project.jsonの中身
    • プロジェクトファイルの代わりにproject.jsonに含めるコードを書けるようになった。
      • 含めるコードは「"code": "**\\*.cs;..\\Shared\\*.cs"」、除外コード「"exclude": "buggy/**/*.cs"」、リソースファイル「 "resources": "embed/**/*.*"」のイメージ
    • configurationsで、コンパイラに与える指示でDebug、Release以外の指定が可能に。(デフォルトでこの2つは指定済み)
      • ちなみにRoslynに与える指示は"compilationOptions"で指定
    • ビルドイベントを「scripts」で設定できるように。ビルド前後、パッケージング前後、パッケージ展開前後のアクションを記載
      • プロジェクトディレクトリ「%project:Directory% 」、プロジェクト名「%project:Name%」、プロジェクトバージョン「%project:Version%」の変数を指定可能
    • アセンブリやプロジェクトの参照は、dependenciesに記載。
      • フレームワークによって依存する内容やバージョンが違う場合は、"frameworks" で指定
    • frameworksの指定は、net45かk10
{
  "version": "0.1-alpha-*",
  "compilationOptions": {
    "warningsAsErrors": true
  },
  "dependencies": {
    "Microsoft.Bcl.Immutable": "1.1.18-beta-*",
    "Microsoft.AspNet.ConfigurationModel": "0.1-alpha-*",
    "Microsoft.AspNet.DependencyInjection": "0.1-alpha-*",
    "Microsoft.AspNet.Logging": "0.1-alpha-*",
    "System.Data.Common": "0.1-alpha-*"
  },
    "scripts": {
        "prebuild": "echo before building",
        "postbuild": "echo after building",
        "prepack": "echo before packing",
        "postpack": "echo after packing",
        "prerestore": "echo before restoring packages",
        "postrestore": "echo after restoring packages"
    },
  "code": "**\\*.cs;..\\Shared\\*.cs",
  "configurations": {
    "Debug": {
      "compilationOptions": {
        "define": ["DEBUG", "TRACE"],
        "debugSymbols": "full"
      }
    },
    "Release": {
      "compilationOptions": {
        "define": ["RELEASE", "TRACE"],
        "optimize": true,
        "debugSymbols": "pdbOnly"
      }
    }
  },
  "frameworks": {
    "net45": {
      "dependencies": {
        "System.Runtime": "",
        "System.Collections": ""
      }
    },
    "k10": {
      "dependencies": {
        "System.Collections": "4.0.0.0",
        "System.Collections.Concurrent": "4.0.0.0",
        "System.ComponentModel": "4.0.0.0",
        "System.Console": "4.0.0.0",
        "System.Diagnostics.Contracts": "4.0.0.0",
        "System.Diagnostics.Debug": "4.0.10.0",
        "System.Globalization": "4.0.10.0",
        "System.Linq": "4.0.0.0",
        "System.Linq.Expressions": "4.0.0.0",
        "System.Linq.Queryable": "4.0.0.0",
        "System.Reflection": "4.0.10.0",
        "System.Reflection.Extensions": "4.0.0.0",
        "System.Resources.ResourceManager": "4.0.0.0",
        "System.Runtime": "4.0.20.0",
        "System.Runtime.Extensions": "4.0.10.0",
        "System.Threading": "4.0.0.0",
        "System.Threading.Tasks": "4.0.10.0"
      }
    }
  }
}
  • MyGetのURLを設定する場所は、*.slnと同じ場所のNuget.config。
    • Nuget.configなければ作る。デフォルトはaspnetrelease。aspnetmaster(Masterブランチ?)とaspnetvnext(開発中リポジトリ.DEVブランチ?)も指定できる。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <!--<add key="AspNetVNext" value="https://www.myget.org/F/aspnetrelease/api/v2" />-->
    <!--<add key="AspNetVNext" value="https://www.myget.org/F/aspnetmaster/api/v2" />-->
    <add key="AspNetVNext" value="https://www.myget.org/F/aspnetvnext/api/v2" />
    <add key="NuGet.org" value="https://nuget.org/api/v2/" />
  </packageSources>
</configuration>

参考資料

Windowsのタッチパッドで「2本指タップから右クリック」する設定(WindowsでMac風操作)

NEC LaVie Gのタッチパッド(NX Pad / Synaptics ClickPad)を使っています。
WindowsのタッチパッドをMacBookに近づける」にあるようにMacのトラックパッドに近い設定は大体できます。
ただし「2本指タップで右クリックメニュー」を出す設定は、いい感じにできません。

そこで、こちらのページで紹介されているようにレジストリをいじることで、指2本でトラックパッドをタップすることでコンテキストメニューを出せるようになります。

手順は以下の通り(レジストリをいじるので、自己責任でお願いします)

  1. WindowsキーとRキーを押す
  2. RegEditと入力
  3. HKEY_CURRENT_USER\Software\Synaptics\SynTP\TouchPadPS2を開く
  4. MultiFingerTapFlagsの値を3に
  5. 2FingerTapActionの値を2に
  6. ログオフ&ログイン

以上で、タッチパッドを2本指で触ることで、右クリックメニューが出せて、快適になります。

ちなみにWindowsPCをMacOS風に近づけたい場合、Dexpot(仮想デスクトップ)、VistaSwitcher(タスク切り替え)、LaunchySpotlight検索)、AutoHotkey例1 AutoHotKey例2(キーボードリマップやBetterTouchTool的)とか、ConEmu(マルチタブターミナル)とか使うと多少近づけることができます。ただWindows標準で使っていれば、それはそれで慣れるような気もします。

Windowsで使えるMongoDBのGUIクライアント「Robomongo」

タイトルのままですが、無料で使えるものでは、Robomongoが良さげでした。
GitHubで開発されており今のところGNUライセンスです。

Windowsだけではなく、Mac版もLinux版もあります。
コマンド補完機能もあります。

Sitecoreモジュールメモ(画像・ファイル系)

未検証ですが、Sitecoreの MarketPlaceで見つけたのでメモです。

  • IMAGE CROPPER
    • sc:imageで、 test.jpg?w=480&h=220&crop=1 のように書くと、クロップ(切り出し)できる
  • PIXLR IMAGE EDITOR
    • Media Librayの画像をPixlrというオンランイメージ編集サイトで編集できる
  • IMAGEPROCESSOR MODULE
    • フィールドレンダラー・プログラムで、画像の回転、グレー化、クロップができる
  • PDF THUMBNAIL HANDLER
    • ~/mediathumb/mypdf.pdf?w=100 という指定だけで、PDFのサムネイルを作成できる