ASP.NET MVC 5実践プログラミング
「ASP.NET MVC 5実践プログラミング」を読みました。
この本は、ASP.NET MVCを学ぶ上で最良の一冊です。
ASP.NET MVCは、昨今のMicrosoft Web技術のメインストリームといえる技術で、最新はバージョン5です。
Webにも多くの情報がありますが、最新のASP.NET MVCを効率的に学びたいときは、この本を読むことをお勧めします。
- 作者: 山田祥寛
- 出版社/メーカー: 秀和システム
- 発売日: 2014/09/22
- メディア: 単行本
- この商品を含むブログ (4件) を見る
簡単なサンプルから始まり、徐々に理解を深めることができます。
そして、Razorの一つ一つの構文や説明も細かく書いています。
ASP.NETを活用して、素敵なサイトを作りたい方におすすめの一冊です。
ASP.NET vNext(Project K/KVM/KPM/KRE/KLR) VS14 CTP3もろもろ
[2014年10月追記]CPT4
- CTP4についてメモ
- 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
CTP3の時に書いたメモ
この時はVisual Studio 14 CTP2でしたが、現在はCTP3が出ています。
ちらっとのぞいてみたところ、CTP2の時は各プロジェクトのPackagesフォルダにアセンブリが配置されていましたが、CTP3では、プロジェクト配下のPackagesフォルダが無くなり、%HOMEPATH%.KPM に集約されてすっきりしてました。
以下は気になったことの自分メモです
- project.jsonを編集して、たとえば、dependenciesに「"EntityFramework.InMemory": "7.0.0-alpha2-10018"」と書いたら、jsonファイル保存時にVSが依存性解決の確認を行う(KPMを動かす)
- 「"C:\Users\aoki\.kpm\packages\EntityFramework.InMemory\7.0.0-alpha3\lib\net45<K10とportable-net451+win81も>\EntityFramework.InMemory.dll"」がダウンロードされる。
- 7.0.0-alpha2-10018がダウンロードされるかと思ったら、7.0.0-alpha3だったので、少し想定とは違う..
- DLLのダウンロード前には、以下のリクエストを投げている。
- http://www.myget.org/F/aspnetrelease/api/v2/Packages()?$select=Version&$filter=(Id%20eq%20%27EntityFramework.InMemory%27)&$format=json
- MyGetで、該当ファイルを見つけられるので、
- http://www.myget.org/F/aspnetrelease/api/v2/package/EntityFramework.InMemory/7.0.0-alpha3-1049
- 等(取得できるURLのどれか)にアクセスして、「EntityFramework.InMemory.7.0.0-alpha4-10486.nupkg(実態はDLLが入ったZIP)」をダウンロード。
- http://www.nuget.org/api/v2/FindPackagesById%28%29?Id=%27EntityFramework.InMemory%27
- NuGetにもパッケージの確認をしているが、該当ファイルはなし
- http://www.myget.org/F/aspnetrelease/api/v2/Packages()?$select=Version&$filter=(Id%20eq%20%27EntityFramework.InMemory%27)&$format=json
- ちなみに、対象とするフレームワークの設定で、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
- ただ「https://github.com/aspnet/MusicStore/blob/dev/src/MusicStore/project.json」を見ると、aspnet50とaspnetcore50になっていた。cloud最適化されたaspnetのフレームワークという位置づけ? 少し気になる。
- プロジェクトファイルの代わりにproject.jsonに含めるコードを書けるようになった。
{ "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>
- MyGetのフィードを、Visual Studio OnlineのGITコードから生成できる
- http://www.visualstudio.com/en-us/myget-and-vso-vs.aspx
- GitHubからデプロイもできるので、ビルドはMyGet側と思われます
- ソリューションフォルダと同じところに置く、Global.jsonは、 ソースやKPMのパッケージの場所を指定可能
- CTP3で、project.jsonを編集しようとしたら、DLLのインテリセンスのために、以下のようなリクエストを投げているよう(40件ずつとるので、3回)
- http://www.myget.org/F/aspnetrelease/api/v2/Packages%28%29?$orderby=DownloadCount%20desc&$select=Id&$skip=0&$top=40&$filter=%28Id%20ne%20null%29%20and%20IsAbsoluteLatestVersion&includePrerelease=true&$format=json
- http://www.myget.org//F/aspnetrelease/api/v2/Packages%28%29?$orderby=DownloadCount%20desc&$select=Id&$skip=40&$top=40&$filter=%28Id%20ne%20null%29%20and%20IsAbsoluteLatestVersion&includePrerelease=true&$format=json
- http://www.myget.org/F/aspnetrelease/api/v2/Packages%28%29?$orderby=DownloadCount%20desc&$select=Id&$skip=80&$top=20&$filter=%28Id%20ne%20null%29%20and%20IsAbsoluteLatestVersion&includePrerelease=true&$format=json
参考資料
- .NET vNextの資料が参考になります
- ASP.NET vNextの本家ブログは、InfoQのこの記事からたどって読むとよさそう。
Windowsのタッチパッドで「2本指タップから右クリック」する設定(WindowsでMac風操作)
NEC LaVie Gのタッチパッド(NX Pad / Synaptics ClickPad)を使っています。
「WindowsのタッチパッドをMacBookに近づける」にあるようにMacのトラックパッドに近い設定は大体できます。
ただし「2本指タップで右クリックメニュー」を出す設定は、いい感じにできません。
そこで、こちらのページで紹介されているようにレジストリをいじることで、指2本でトラックパッドをタップすることでコンテキストメニューを出せるようになります。
手順は以下の通り(レジストリをいじるので、自己責任でお願いします)
- WindowsキーとRキーを押す
- RegEditと入力
- HKEY_CURRENT_USER\Software\Synaptics\SynTP\TouchPadPS2を開く
- MultiFingerTapFlagsの値を3に
- 2FingerTapActionの値を2に
- ログオフ&ログイン
以上で、タッチパッドを2本指で触ることで、右クリックメニューが出せて、快適になります。
ちなみにWindowsPCをMacOS風に近づけたい場合、Dexpot(仮想デスクトップ)、VistaSwitcher(タスク切り替え)、Launchy(Spotlight検索)、AutoHotkey例1 AutoHotKey例2(キーボードリマップやBetterTouchTool的)とか、ConEmu(マルチタブターミナル)とか使うと多少近づけることができます。ただWindows標準で使っていれば、それはそれで慣れるような気もします。
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つから構成されています。
- 私見や慣習よりも、検証と学び
- 組織と序列よりも、顧客にフォーカスしたコラボレーション
- ビッグバンキャンペーンよりも、最適化と繰り返しによるキャンペーン
- 静的な予測よりも、顧客発見プロセス
- 柔軟 対 厳格な計画
- 計画に従うことよりも、変化への対応
- 少ない大きな賭けよりも、多くの小さな実験
2012年6月にサンフランシスコで開かれたSprintZeroというイベントをきっかけに作られた声明です。完成というわけではなく、フィードバックを受け改善していくステータスのようです。
アジャイルマーケティングマニフェストは、以下の変遷をして今に至っているようです。
- Miguel Tam’s Manifesto for agile marketing – 2010/5/16
- Scott Brinker’s Ideas for an agile marketing manifesto – 2010/5/24
- Neil Perkin’s Agile Marketing – 2010/10/18
- PJ Srivastava’s The Agile Marketing Manifesto –2011/1/31
- Greg Meyer’s Ready, Fire, Aim – A Manifesto for Agile Marketing – 2011/10/15
- Wayne Kernochan’s A Draft Agile Business Manifesto (& Agile Marketing Manifesto) – 2012/4/12
Travis Arnold氏のブログにあるように、マニフェストの基本となるポイントは以下であると述べています。
- 透明で(Transparent)
- 持続性があり、(Sustainable)
- 相互作用があり、(Interactive)
- 測定可能で、(Measured)
- 反復して、(Iterative)
- 適切であること(Relevant)
このマニフェストは、アジャイルソフトウェア開発宣言のデジタルマーケティング版です。アジャイルソフトウェアの12の原則にあたるアジャイルマーケティングの原則(現時点では10個)も策定中のようです。