XPS 15 を買って2ヶ月ほどたった

ハード自体はEnterキーがちょい小さい以外は特に不満はない。


初期状態でアプリ頻繁にかたまったりOSがハングしていた
Dell、New XPS 12/13/15の致命的バグを修正したBIOSとドライバ配布
GPUドライバの停止やSkylakeのブルースクリーン問題などが改善
http://pc.watch.impress.co.jp/docs/news/742677.html
を入れてみたらOSはハングしなくなった。

[windows]GPU対応

アプリによっては固まる症状が幾つかみつかったのでGPUをOFFに。
Chrome は「ハードウェアアクセラレーションが使用可能な場合は使用する」をOFF。
VSCode は Code.exe --disable-gpu で起動でOKだったので code.bat を用意して対応。


問題は解消したがハード、ドライバ、OS、アプリのどれが本当の問題なのかどうすれば調べられるのかわからんな。。。

[windows]High DPI対応

Windows 10 Creators Update後はなにも設定しなくてもある程度対応された感じ。
文字をきれいに表示するには
アプリを右クリック > プロパティ > 互換性 > 高いDPIスケールの動作を上書きします -> システム(拡張)
現在サクラエディタだけは設定している。


Windows10 Creators Updateの新機能!高DPI設定でのデスクトップアプリの表示を改善
http://pcmanabu.com/improved-high-dpi-support-for-desktop-apps/
がイメージ付きで解説されていてわかりやすい。

java8 on AppEngine

Jun 20, 2013 10:48AM に初投稿された Java 8 support
https://issuetracker.google.com/issues/35895687
が3/14に動き始めた。


Java8 on App Engine Standard (Alpha)
https://docs.google.com/forms/d/e/1FAIpQLSflZkMzHP_pKBE5w-bZgTQPXT7V6iANJQhqjAjWAiCjOEVGDQ/viewform
で申請できるので一応申請してみた。
「User Guide AppEngine Standard Java 8 (external) - Invitation to comment」
ってメールが2週間後ぐらいにきた(一ヶ月ぐらい前の話なのでいまはもっとやはいのかな?)。
メールに設定方法や注意事項のかいてるGoogleDocsへのリンクがついてくるのでその通りやればよい(AppEngine SDKは最新が必要)。


Eclipseのpluginは https://cloud.google.com/eclipse/docs/ がまだ未対応(Project facet Java 1.8 is not supported by target runtime App Engine Standard Runtime)。でもlocalでJettyの実行は問題ない。


AppEngineへのdeployは maven 経由で行う。
mvn appengine:update
でOK。きちんと動いた。


サーバーの環境変数を表示してみたら
java.version=1.8.0_112-google-v7
java.class.version=52.0
になっていた。
console.cloud.google.com の versions のリストの runtime もちゃんと java7 ではなくて java8 になった。

振り返り

  • あまり忙しくない一年だった。めちゃくちゃ忙しくなりそうになったが。。。
  • HDPと結構格闘した一年だった。Hadoop/Spark系はプロダクトが多すぎだな。。。
  • Dockerを本格的に触り始めた。docker-compose 地味に便利だと気がついた。
  • AWS 認定ソリューションアーキテクト アソシエイトに受かった。試験受けたりするの何時以来だろう。。。
  • 受託開発だけではなくてプロダクトやサービスで毎月ある程度お金が入ってこないようにしないと今後はやはりつらそうだなー。
  • タブレットiOSからAndroidに乗り換えた。思ったよりもKindle Fire HDちゃんと動いたのでよかった。
  • グッドワイフ面白かった。Amazon Prime ビデオ値段の割によいね。
  • チビ達が元気に育ってくれていて何よりだ。

C# Intractive をコマンドラインから使う

>csi
Microsoft (R) Visual C# インタラクティブ コンパイラ バージョン 1.2.0.60317
Copyright (C) Microsoft Corporation. All rights reserved.

詳細については、「#help」と入力します。
> #r "System.Windows.Forms"
> using System.Windows.Forms;
> new Form().ShowDialog();

WinFormが表示された。
もちろんコード補完がきかないけど。
GroovyのGrape(http://docs.groovy-lang.org/latest/html/documentation/grape.html)みたいな nuget対応がほしいところだ。

> class Hoge
. {
. public String Id;
. }
(3,15): warning CS0649: フィールド 'Hoge.Id' は割り当てられません。常に既定値 null を使用します。
> var hoge = new Hoge();
> hoge.Id = "hoge";
> hoge
hoge.Id = "hoge";
> var hoge = new Hoge2();
(1,16): error CS0246: 型または名前空間の名前 'Hoge2' が見つかりませんでした (using ディレクティブまたはアセンブリ参照が指定されていることを確認してください)。
> hogehoge = new Hoge();
(1,1): error CS0103: 現在のコンテキストに 'hogehoge' という名前は存在しません。

結構ちゃんとエラーをだしてくれる。

https://github.com/scriptcs/scriptcs を使おうとした(こっちはnuget対応)が結局やめてしまったが今回は使うようになるかな?

C# Intractive をVisual Studioから使う

Introducing the Visual Studio 'C# REPL'
https://channel9.msdn.com/Events/Visual-Studio/Connect-event-2015/103
https://www.visualstudio.com/news/vs2015-update1-vsVisual Studio 2015 Update 1 に C# Intractive がはいった。
まだnugetに対応していなし、プロジェクファイルと連携していにけどすぐによくなるだろう(Update2 でもあまり変わってない感じ。。。)。

表示 -> その他のWindow -> C# インタラクティブ で起動して貼り付ける(一応ここでもコード補完が効く)。

Microsoft (R) Roslyn C# コンパイラ バージョン 1.2.0.60425
'CSharpInteractive.rsp' からコンテキストを読み込んでいます。
詳細については、「#help」と入力します。
> #r "C:\Users\udagawa\development\csharp\csharp6-test\csharp6-test-unit\bin\Debug\csharp6-test-unit.dll"
> using csharp6_test;
.
> var sample = new Sample{ id = 1 };
> sample
Sample { id=1, name=null }
> var sql = $"select {nameof(Sample.name)} from {nameof(Sample)} where {nameof(Sample.id)} = {sample.id}";
> sql
"select name from Sample where id = 1"
>

外だしSQLが少し書きやすくなる C# 6.0

nameof(xxx) と $"" の組み合わせが便利だ。
https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6#string-interpolation
https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6#nameof-expressions

外出しSQLが書きやすくなる。

    // Table名、コラム名と名前を合わせること
    public class Sample
    {
        public int id;
        public string name;
    }

    public class Param
    {
        public int Id;
    }

    [TestClass]
    public class TwoWaySqlTest
    {
        [TestMethod]
        public void TestCSharp6StringAndNameOf()
        {
            var sample = new Sample { id = 1 };

            var sql = $"select {nameof(Sample.name)} from {nameof(Sample)} where {nameof(Sample.id)} = {sample.id}";
            Assert.AreEqual("select name from Sample where id = 1", sql);

            var twoWqySql = $"select {nameof(Sample.name)} from {nameof(Sample)} /*IF pmb.{nameof(Param.Id)} != null*/where {nameof(Sample.id)} = {sample.id}/*END*/";
            Assert.AreEqual("select name from Sample /*IF pmb.Id != null*/where id = 1/*END*/", twoWqySql);

            var twoWayMulti = $@"
select {nameof(Sample.name)}
from {nameof(Sample)} 
/*IF pmb.{nameof(Param.Id)} != null*/where {nameof(Sample.id)} = {sample.id}/*END*/
";
            Console.WriteLine(twoWayMulti);
        }
    }

nameOfの渡す値はリファクタ可能だ(クラス名、プロパティ名の変更に対応)!!!
ない名前だときちんとコンパイルエラーになってくれる。
しかもきちんと文字列の中でコード補完(たとえばSample.とうてばプロパティ一覧がでてくる)も効くのだ。

いままで頑張ってGenして型セーフにしている部分がごそっと要らなくなる可能性ある。
クラスさえつくってしまえばNonSQL的な文字列指定なものでもこまることは減るかもしれない。

上記だとそのままSQLをそのまま流せないが、C# Intrative(VS 2015 Update1から)である程度解決するようになるかも。

Xamarin で作ったアプリを Fire HD 10 に入れる

Xamarinが動くかためしてみたがちゃんと動いた(Macからできるかは確認していないが)。


実際にはVisualStudioでXamarinをインストール時に
JDKAndroid SDK,Android NDK、Android がインストールされるので自分でいれる必要はないが別途入れなおした。


Xamarin.AndroidJDKAndroid SDK(http://developer.android.com/intl/ja/sdk/index.html から android-sdk_r24.4.1-windows.zip)をダウンロードしてきてVisaul Studio の Xamarin の設定にJDKAndroid SDK のインストール場所を設定。
Android SDK Manager で SDK等をインストール。
Android のバージョンは https://developer.xamarin.com/guides/cross-platform/getting_started/requirements/#windows
にある通り Android 6 API-23 を入れた。
ちなみに Fire HD 10 は Android 5.1 API-22。


Blank App(Android) でプロジェクト作って実行ボタンで
Fire HD に転送される(アプリ(8MB)と 初回のみMono Shared Runtime(38MB)。初回のみXamarin.Android API-23 Support(33MB))。
無事実行できた。


Xamarin.Forms は Blank App(Xamarin.Forms Portable) でプロジェクト作ったがビルドエラー。

Xamarin.Android for Visual Studio requires Android NDK, which is used to embed .NET assemblies into native libraries. While the NDK is generally not used for developing an Android application, we suggest you to install it. Please set Android NDK path on Tools->Options->Xamarin->Android Settings menu.

http://developer.android.com/intl/ja/ndk/downloads/index.html から
android-ndk-r11c-windows-x86_64.zip をダウンロードして NDK の場所を設定。
プロジェクト作りなおして実行ボタンで Fire HD に転送(アプリ(15MB))して実行できた。
Mono Shared RuntimeとXamarin.Android API-23 Support)が必要なのはXamarin.Android版と同じ。