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のサムネイルを作成できる

ASP.NETのCompilerExceptionエラー「ソース ファイル 'C:\Windows\TEMP\xxx.cs' が見つかりませんでした。」

IIS/ASP.NET(Sitecore)でたまにでるエラー。

例外の種類: CompilerException
例外メッセージ: ソース ファイル 'C:\Windows\TEMP\xxxxxxx.cs' が見つかりませんでした。
場所 Sitecore.CodeDom.Compiler.CSharpCompiler.Compile(String sourceFile, String code, String assemblyFile, StringCollection referencedAssemblies)

http://blog.livedoor.jp/snowcastle/archives/51371864.html

C:\Windows\TEMPに適切な権限を与えると良い模様。

アジャイルマーケティングのマニフェスト

最近流行りつつある、アジャイルマーケティングについて少しまとめました。

agilemarketingmanifesto.orgというページにて「アジャイルマーケティングマニフェスト」が公開されています。マニフェストは以下の7つから構成されています。

  1. 私見や慣習よりも、検証と学び
  2. 組織と序列よりも、顧客にフォーカスしたコラボレーション
  3. ビッグバンキャンペーンよりも、最適化と繰り返しによるキャンペーン
  4. 静的な予測よりも、顧客発見プロセス
  5. 柔軟 対 厳格な計画
  6. 計画に従うことよりも、変化への対応
  7. 少ない大きな賭けよりも、多くの小さな実験

2012年6月にサンフランシスコで開かれたSprintZeroというイベントをきっかけに作られた声明です。完成というわけではなく、フィードバックを受け改善していくステータスのようです。


アジャイルマーケティングマニフェストは、以下の変遷をして今に至っているようです。


Travis Arnold氏のブログにあるように、マニフェストの基本となるポイントは以下であると述べています。

  1. 透明で(Transparent)
  2. 持続性があり、(Sustainable)
  3. 相互作用があり、(Interactive)
  4. 測定可能で、(Measured)
  5. 反復して、(Iterative)
  6. 適切であること(Relevant)

このマニフェストは、アジャイルソフトウェア開発宣言のデジタルマーケティング版です。アジャイルソフトウェアの12の原則にあたるアジャイルマーケティングの原則(現時点では10個)も策定中のようです。