MacMiniでデュアルディスプレイが最強すぎた
私は今までMacMiniの2014年モデルをBenQのディスプレイに繋いでプログラミングやらやってました。
これ↓
APPLE Mac mini (1.4GHz Dual Core i5/4GB/500GB/Intel HD 5000) MGEM2J/A
- 出版社/メーカー: アップル
- 発売日: 2014/10/21
- メディア: Personal Computers
- この商品を含むブログを見る
BenQ モニター ディスプレイ GW2270HM 21.5インチ/フルHD/AMVA+/HDMI,VGA,DVI端子
- 出版社/メーカー: ベンキュージャパン
- 発売日: 2016/11/04
- メディア: Personal Computers
- この商品を含むブログを見る
- 出版社/メーカー: 東プレ
- 発売日: 2006/02/25
- メディア: Personal Computers
- 購入: 14人 クリック: 732回
- この商品を含むブログ (62件) を見る
最高だわ、MacでC#環境ないのでWindowsですが。手前のアームレストは自作でぶっちゃけかっこつけです。
あとMacMiniでデュアルディスプレイにするにはこいつが必要です。
Amazonベーシック Mini DisplayPort - HDMI 変換ケーブル 1.8m
- 出版社/メーカー: AmazonBasics
- メディア: Personal Computers
- この商品を含むブログを見る
これでしばらくは引きこもれそうです。
【Azure】インメモリ OLTPのセッション管理がBasicプランで使えなかった
tekitoumemo.hatenablog.com
以前書いた記事でインメモリOLTPのセッション管理を説明しました。
が
Azureにデプロイしたら以下のエラーが発生しました。
Unable to connect to SQL Server In-Memory session database. at Microsoft.Web.SessionState.SqlStore.SqlExecuteReaderWithRetry(SqlCommand cmd, CommandBehavior cmdBehavior) ...
SQL Serverのメモリ内セッションに接続出来ませんとのこと。昨日に記事に書いたIPアドレスや、セキュリティの問題かと思いBasicプランのhttpsで接続を試みると..
Unable to connect to SQL Server In-Memory session database. ...
エラーメッセージがわかりにく杉。エラー内容をいろいろ調べると以下の記事を発見。
azure.microsoft.com
AzureのPremiumプランからしか使えないらしい。。Premiumの最低プランでも5万以上するので普通に無理でした。
マネージインスタンス、エラスティクプールなどは使えるらしい。
諦めて普通にCookieセッションに変えました。
【.NET Core, Azure SQL Server】ubuntuを使って.NET CoreでAzure Databaseを扱う
前回は.NET Coreをubuntuで動かすものを記事にしました。今回はubuntu上で.NET Coreを使ってAzure Databaseを動かせるかという検証です。ubuntuに.NET Coreを動かす場合は以下を参考にしてください。
tekitoumemo.hatenablog.com
僕の持ってるサブPCはポンコツでSQL Serverを入れたらパンクしちゃいます。メモリが3.25G以上が推奨ってもう無理じゃん。。
tekitoumemo.hatenablog.com
qiita.com
AzureDatabaseで動かして開発できたらポンコツPCでもなにかと使える!と思って検証しました。また、ubuntu上でAzure SQL Serverを動かすにはどんな作業が必要なのかの検証も含め、実施しました。結果
楽勝でした
はい。
Azure Databaseを作成します。
[SQLデータベース]をクリック→[SQLデータベースの作成]をクリック
必要な情報を入力します。
- データベース名
- サブスクリプション
- リソースグループ
- ソースの選択
これらは任意の情報を入力してください。
- サーバー
Azure SQL Serverはデータベースのサーバーを構築しなければいけないのでこちらの設定を行います。
こちらも任意の情報を入力してください。
- SQLエラスティックプール
こちらは大規模なDBでスケーリングするときの予算や規模の設定が出来ます。今回は検証なので「いいえ」にしておきます。
- 価格レベル
超知りたいところですね。SingleDatabaseだとBasic、Standard、Preniumの3つがあるので、今回はBasicにします。2G使えて、東日本リージョンで月額600円代です。Standardの250Gが使えるプランでも月額1800円程度なのでめっちゃ安いです。以下の計算ツールで計算出来ます。
azure.microsoft.com
これらの情報を入力したら作成します。ものの5分で作成出来ます。
.Net Coreの準備をします。
今回はEntity Framework Coreを使います。めっちゃ雑ですが、Githubにサンプルを載っけてるので参考になればと思います。
github.com
onConfigメソッドを作成します。
using Microsoft.EntityFrameworkCore; using System.Data.SqlClient; protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // 接続文字列を指定する var connectionString = ""; optionsBuilder.UseSqlServer(connectionString); }
Nugetから「Microsoft.EntityFrameworkCore」、「System.Data.SqlClient」をインストールして下さい。接続文字列はAzure Portalに記載されています。真っ赤にぬりつぶされたところに記載されています。
モデルとモデルをマッピングする処理を記載します。
public DbSet<Test> _test { get; set; } public class Test { public int Id { get; set; } public string Name { get; set; } public DateTime CreateTime { get; set; } public Nullable<DateTime> UpdateTime { get; set; } } protected override void OnModelCreating(ModelBuilder modelBuilder) { // テーブルにマッピングする modelBuilder.Entity<Test>().ToTable("Test"); }
modelBuilder.Entityにジェネリックでモデルを指定し、ToTableの引数にテーブル名を指定します。その他、モデルクラスとプロパティを設定します。
呼び出しの実装を行います。
using (var dbContext = new AppDbContext()) { var test = dbContext._test.ToList(); }
これで一通り完成です。
それではVSCodeでデバッグしてみます。
例外が発生しました。このIPアドレスは接続出来ないよ!ってエラーです。Azure Databaseではファイアウォールが設定されているので接続するIPを除外してあげなければいけません。
ファイアウォールの設定を行います。
[概要]→[サーバーファイアウォールの設定]をクリックします。
[クライアントIPの追加]を押下します。先ほどアクセスしたので、そのまま設定が出来ます。もちろん、手動で入力することも出来ます。
設定が完了したら再度、接続してみます。
ちゃんとデータが取れました!
これで、ubuntu上で.Net Coreの開発がまともにできるようになりました。やっとこれでリビングで寝っ転がりながら開発ができる!
【.Net Core 2.0,Ubuntu】Ubuntu16.04でASP.NET MVCを動してみた
Ubuntu 16.04を入れたので、.NET Coreを入れて動かしてみました。結構、いろんな記事みて理解しながらやったので、まとめます。
.NET Coreを入れる
パッケージのダウンロード。今回は「.NET Core 2.1.0-preview1 」を入れます。
wget -q packages-microsoft-prod.deb https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb
パッケージのダウンロード
sudo dpkg -i packages-microsoft-prod.deb
apt-transport-httpsのインストール
sudo apt-get install apt-transport-https
アップデート
sudo apt-get update
.Net Core 2.0のインストール
sudo apt-get install dotnet-sdk-2.1.300-preview1-008174
Consoleアプリのビルドと実行
mkdir test cd test dotnet new dotnet restore dotnet run // 出力 // HelloWorld
一旦、NetCoreが動く環境になりましたが、MVCやSPAを作りたいので他に環境を作らなけばいけません。ちなみにここまでは以下の記事を参考にしました。めっちゃわかりやすい!
kledgeb.blogspot.jp
Nodeの環境を構築
NPMを入れる
sudo apt-get install npm
NPMを最新版にする
sudo npm install -g npm
NVMを入れる
$ git clone https://github.com/creationix/nvm.git ~/.nvm $ source ~/.nvm/nvm.sh
NVMのバージョンリストを確認。
nvm ls-remote
以下のような感じでバージョン情報がズラッと並びます。私はLTSの最新であるv8.10.0を入れました。
v8.9.0 (LTS: Carbon) v8.9.1 (LTS: Carbon) v8.9.2 (LTS: Carbon) v8.9.3 (LTS: Carbon) v8.9.4 (LTS: Carbon) v8.10.0 (Latest LTS: Carbon) v9.0.0 v9.1.0 v9.2.0 v9.2.1 v9.3.0 v9.4.0 v9.5.0 v9.6.0 v9.6.1 v9.7.0 v9.7.1 v9.8.0
デフォルトのバージョンを指定
nvm alias default v8.10.0
NVMは入れたほうが便利です。以下を参考にしました。
qiita.com
Yeomanインストール
sudo npm install -g yo
僕は間違えて古いnodeを入れていたので以下のエラーが発生しました。
saito@saito-Aspire-one-1-131:~$ sudo npm install -g yo [sudo] saito のパスワード: ERROR: npm is known not to run on Node.js v4.2.6 Node.js 4 is supported but the specific version you're running has a bug known to break npm. Please update to at least 4.7.0 to use this version of npm. You can find the latest release of Node.js at https://nodejs.org/ sudo apt install git
このエラーは古いバージョンは動かないよってやつで、nvmでバージョンを新しくしても発生するのでバッサリ削除して入れなおしました。以下を見ました。
stackoverflow.com
sudo apt remove nodejs npm curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - sudo apt-get install -y nodejs
ASP.Net Generatorをインストール
sudo npm install -g generator-aspnet
bowerをインストール
sudo npm install -g bower
.NET Coreに必要なものをひたすら入れる。片っ端から入れるので5Gぐらいは減ります。
sudo apt-get install dotnet-dev*
ここまでで一通りの環境構築は出来ました!
MVCを動かす
テンプレートの作成
mkdir test cd test yo aspnet mvc
ここでログを取り忘れちゃったんですが、コマンドがない!とのエラーが出ます。権限のエラーなので以下を実行します。わかりにくいエラーやな。
sudo chmod -R 777 ~/.config/".
再度作成し、プロジェクトの実行を行います。
yo aspnet mvc
やったー!
あとはnuget取って実行します。
dotnet restore dotnet run
http://localhost:5000/にアクセスして完成しました。
以下がめっちゃ参考になりました。
blankstechblog.com
VSCodeでデバッグする
VSCodeのデバッグは以下を参照。
ytabuchi.hatenablog.com
VSCodeでデバッグする際に以下のエラーが発生しました。
OmniSharp.MSBuild.ProjectManager Failed to load project ..
このエラーはOmniSharpが読み込めませんとのエラーのようで、ubuntuではmonoで動いているのでmonoを入れて対応します。
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF echo "deb http://download.mono-project.com/repo/ubuntu stable-xenial main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list sudo apt-get update apt-get install mono-devel
monoのバージョン等は以下から取得してください。
Download - Stable | Mono
この記事が参考になりました。
github.com
これで開発環境が完成しました。
やったね!
あとはどのぐらいこの環境で不便があるか触りながら開発してみようと思います。
ubuntu 16.04を入れるときにやったこと
ubuntuで.NETの開発をするためにクリーンインストールしました。過去にRails試したりしたとき何回も入れたときの記事がありました。
tekitoumemo.hatenablog.com
tekitoumemo.hatenablog.com
最近のWindowsUpdateが安定しなかったり、32GしかないのにWindows10だと20Gぐらいデフォルトで消費するので、もう完全に切り替えようと決意しました。メモリも2Gしかないくせにネットサーフィンしてるだけで1.8Gぐらい食ってもう話になりませんでした。
tekitoumemo.hatenablog.com
Ubuntuは入れると結構めんどくさいことがあるので、メモ程度に残しておきます。
日本語入力が効かない
[システム設定]→[言語サポート]
キーボードに使うIMシステムを「fcitx」に。
Caps LockをCtrlに変更する
僕の場合、Ctrl+Spaceで日本語変換する癖があるので、Caps LockをCtrlに変えます。大学生時代にHHKBを使ってた名残が未だに残ってます。
/etc/default/keyboardに以下を追加
XKBOPTIONS="ctrl:nocaps"
で再起動。
Ctrl+Spaceで日本語変換
入力メソッドのオン、オフで切り替えてください。
ショートカットの設定
Windowsと似た配置に変更。ここはお好きに。
wifiがつながらない問題
ipv6を無効化にするために/etc/sysctl.confに以下を追記します。
net.ipv6.conf.all.disale_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
これやらないと全く使い物になりません、少なくともぼくのPCでは。
あといろんな記事に8.8.8.8(Google PublicDNS)にすると早いって書いてありますが、別に変わらんので変更しなくて良いです。気休め。
Unity重すぎる問題
12.04あたりからUnityになって結構重くなりました。デフォルトで1.3Gも食うのでClassicに変更
sudo apt-get install gnome-session-fallback
18.04からUnityやめるらしいですね。唯一おしゃれなディストリビューションだったのに残念。UbuntuPhoneとかどこ行ったの?って感じ。
japanese.engadget.com
スクロールが使いにくい
通常は上下反対にスクロールするのが良いのですが、デフォだと上下同じ方向にスクロールしちゃいます。
ナチュラルスクロールにチェックを入れると違和感がないと思います。
軽量なペイントソフトを入れる
ブログを書く際に画像を添付するのですが、ちょっと加工が必要な場合もあるので簡単なペイントソフトも入れときます。
sudo apt-get install pinta
【C#、ASP.NET】SQL Serverでセッション管理する
ほぼ完成した。公開まであと少し。
ASP.NETのセッション方法はいくつかあるのですが、今回はインメモリ OLTP でセッション管理を行う方法を紹介します。以下を参考にしました。
blogs.technet.microsoft.com
インメモリ OLTP とは
正直、僕もよくわかってないのですが、データベースのメモリ最適化を行うための手法みたいです。まぁ勝手に最適化してくれて早くなったという感じでしょうか。
インメモリ OLTP (インメモリ最適化) | Microsoft Docs
まずMicrosoft.Web.SessionState.SqlInMemoryをNugetから取得します。
取得するとプロジェクト直下に「ASPStateInMemory.sql」というクエリが作成されるのでこちらをSQLServerで実行します。FileNameのところがDドライブの指定になってるので、環境に合わせて実行してください。あえて指定しなくてよいと思うので、削除しちゃってよい思います。
CREATE DATABASE [ASPStateInMemory] ON PRIMARY ( NAME = ASPStateInMemory, FILENAME = '{ここまでののパス}\ASPStateInMemory_data.mdf' ), FILEGROUP ASPStateInMemory_xtp_fg CONTAINS MEMORY_OPTIMIZED_DATA ( NAME = ASPStateInMemory_xtp, FILENAME = '{ここまでののパス}}\ASPStateInMemory_xtp' ) GO
Web.ConfigのsessionStateも自動で書き換わるのですが、以下の項目を環境に合わせて変更します。
<sessionState mode="Custom" customProvider="SqlInMemoryProvider"> <providers> <add name="SqlInMemoryProvider" type="Microsoft.Web.SessionState.SqlInMemoryProvider" connectionString="data source=sqlserver;initial catalog=ASPStateInMemory;User ID=user;Password=password;" /> </providers> </sessionState>
- data source : サーバー名
- catalog:カタログ名
- User ID:SQL ServerのユーザーID
- Password:SQL Serverのパスワード
これでセッション管理を行うとSessionsテーブルにデータが保存されるようになります。
めっちゃ簡単だねこりゃ。
【ASP.NET WEB API、MsTest】アノテーションをテストする
テストで正常パターン、異常パターンなど様々なテストを書くと思いますが、アノテーションのエラーを取るやり方が日本語で載ってなかったので書きます。stack traceでは以下に載ってました。
ASP.NETではアノテーションで大体のエラー処理が行えるのでめっちゃ楽なんですが、通常のメソッド呼び出しだとアノテーションが効きません。なので、アノテーションを効かせるコードを紹介します。
まず、アノテーションとはどういうものなのか?
アノテーション(英語:annotation)とは、あるデータに対して関連する情報(メタデータ)を注釈として付与すること。
ASP.NETでは、以下のように空白チェック、数値チェックなど、モデルのプロパティで自動に検知出来る仕組みがあります。
public class Models { [Required(ErrorMessage = "Hoge1がない!")] public string Hoge1 { get; set; } [RegularExpression(@"[0-9]+", ErrorMessage = "Hoge2が数字じゃない!")] public string Hoge2 { get; set; } }
こんな感じのやつです。
上記のモデルを使い、このメソッドをテストします。
// POST api/values public void Post(Models value) { }
で、次にMsTestでどう検知するか以下に記載します。
[TestMethod] public void Post() { // 準備 ValuesController controller = new ValuesController(); var json = File.ReadAllText("json1.json"); var model = JsonConvert.DeserializeObject<Models>(json); controller.Configuration = new HttpConfiguration(); controller.Validate<Models>(model); // バリデーションが取得可 //controller.ModelState }
まず、HttpServerのインスタンスを作成するためにcotroller.ConfigurationにHttpConfigurationを設定します。そのあとにcontroller.Validateにジェネリックで型とモデルを渡します。そうするとModelStateにエラーが検知され、assertやらなんやらでテストを書けば終了です。
これである程度のテストはなんとかなりました。
ちなみに
テストを書いててめんどいのが、webサイトのパスが取れんこと。以下のようなコードは当然取れないので諦めてカスタムビルドを作ってテスト用に作るしかないという結論に至りました。テストに関してはあまりわかってないからいい方法があるかも
HttpContext.Current.Server.MapPath("./")