Hatena::ブログ(Diary)

udagawaの日記

2016-05-28

[]外だしSQLが少し書きやすくなる C# 6.0 外だし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から)である程度解決するようになるかも。

[]C# Intractive をVisual Studioから使う 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-vs で Visual 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"
>

[]C# Intractive をコマンドラインから使う 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対応)が結局やめてしまったが今回は使うようになるかな?

トラックバック - http://d.hatena.ne.jp/udagawa/20160528

2016-05-22 kindle Fire HD 10 入手

[]Fire HD 10 のセッティング Fire HD 10 のセッティングを含むブックマーク

iPad2が死亡したので急遽 Fire HD 10 をかう。


Amazon Prime にもはいったので当日きた。

Wi-Fiの設定したら直ぐに使えるようになった。

とりあえず機能制限でパスワードの設定。

思ったよりも縦長、でもAmazonプライムビデオ見ている限りあまり気にならない。

パフォーマンスは特に問題ない。

縦横固定のハードウェアボタンがないのはちょっと面倒。


iOSとちがってKindleアプリで完結できるので便利。

実際本の月一冊の無料はKindle端末からじゃないと選べないみたいだし。


Google Playを使えるようにする。

http://rootjunkysdl.com/files/?dir=Amazon%20Fire%205th%20gen

から Amazon-Fire-5th-Gen-Install-Play-Store.zip をおとしてきて

1-Install-Play-Store.bat を実行でインストールできた(シリアルナンバー7回クリックで開発者モードを有効にするのは他のAndroid端末と同じ)。

Amazonストアにない Chrome、ChromeCast、Dropbox などをいれた。問題なく動いている。


iOSとくらべて KindleやDropboxが使いやすい。Huluは微妙かな。

iOSとAndroidの動作の違いはそのうちなれるだろう。

[][]Xamarin で作ったアプリを Fire HD 10 に入れる Xamarin で作ったアプリを Fire HD 10 に入れるを含むブックマーク

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


実際にはVisualStudioでXamarinをインストール時に

JDK、Android SDK,Android NDK、Android がインストールされるので自分でいれる必要はないが別途入れなおした。


Xamarin.Android は JDK と Android SDK(http://developer.android.com/intl/ja/sdk/index.html から android-sdk_r24.4.1-windows.zip)をダウンロードしてきてVisaul Studio の Xamarin の設定にJDK と Android 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版と同じ。

トラックバック - http://d.hatena.ne.jp/udagawa/20160522

2016-03-02

[]CentOS に ansible 2.0 をインストールする CentOS に ansible 2.0 をインストールするを含むブックマーク

http://docs.ansible.com/ansible/intro_installation.html#latest-release-via-yum

にあるように

yum install ansible

だとまだ 1.9系のようだ

CentOS 6.7

> grep centos VagrantFile
  config.vm.box = "bento/centos-6.7"
> vagrant up
> vagrant ssh
$ cat /etc/redhat-release
CentOS release 6.7 (Final)
$ sudo yum install epel-release -y
$ sudo yum install gcc python-devel python-pip -y
$ sudo pip install pip --upgrade
$ sudo pip install ansible
$ ansible --version | grep ^a
ansible 2.0.1.0
$ python --version
Python 2.6.6

ansible 実行時に HAVE_DECL_MPZ_POWM_SEC となったら

https://github.com/ansible/ansible/issues/276 にあるように

sudo yum reinstall python-crypto

すればエラーがでなくなる。

CentOS 7.1

> grep centos VagrantFile
  config.vm.box = "bento/centos-7.1"
> vagrant up
> vagrant ssh
$ cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)
$ sudo yum install epel-release -y
$ sudo yum install gcc python-devel python-pip -y
$ sudo pip install pip --upgrade
$ sudo pip install ansible
$ ansible --version | grep ^a
ansible 2.0.1.0
$ python --version
Python 2.7.5

実際には sudo yum update -y したほうがいいだろうけど。。。

トラックバック - http://d.hatena.ne.jp/udagawa/20160302

2015-12-31

[]振り返り 振り返りを含むブックマーク

  • あまりちゃんと仕事した感じがしない一年だったな(育休2ヶ月とったってのもあるが)。
  • iOSからのAndroidポーティングで久しぶりにAndroidさわる。RxJava+retrofit, ButterKnife など進化していたが、UITableViewController+UINavigationController を Activity, Fragment でどう画面を構成してデータのやり取りするか悩み中。
  • C# 6.0 素敵。.NET Core、ASP.NET 5、EF 7.0 すげー楽しみだ。
  • Seasar2の代わりをどうしようかな、とも思うがJava系でなんとかしようとするからダメな気が。Docker上で.NET Coreを動かすのがいいような。来年の課題だな。
  • Rubyを2ヶ月ほどさわったけど型がないのでやっぱり好きになれない。CrystalがWindowsでもうごいてマルチスレッドの扱いがよさげなるなら Go じゃなくてCrystalがいいかなーと思う。
  • ブレイキング・バッド はシーズン4、5は抜群におもしろかった。シーズンの最後のほうが面白い作品って珍しかな。
  • Withings Activite 買った。時計するのって何十年ぶりだろう。充電いらずなのが気に入っている(実際半年以上変換いらず)
  • 今年は作るアプリやツールがどれも中途半端で放置しているのが多い。来年はなんとかしたいな。
トラックバック - http://d.hatena.ne.jp/udagawa/20151231

2015-11-24

[]Eclipse 4.5 で JUnit4.4がエラーになる Eclipse 4.5 で JUnit4.4がエラーになるを含むブックマーク

JUnitはバージョン 4.4をずっとつかいつづけていたが(Hamcrestを使いたくないので)

Eclipse4.5がバグっていて 4.6以上に上げる必要があるようだ。

Cannot run individual JUnit tests when importing Maven projects which uses JUnit < 4.6

https://bugs.eclipse.org/bugs/show_bug.cgi?id=479730


うーん、、、今回はEclipse 4.5の評価のためなのでしょうがないのでバージョンをあげた。

pomからhamcrestのexclusionを削除する。

JUnit 4.5以上にするときには、org.hamcrest がないとEclipseでJUnit実行時にエラーになるので。

Type Filterに org.hamcrest.* を足した。

いつも使うecliseのtemplateを久しぶりに修正。

org.eclipse.jdt.ui.typefilter.enabled=com.ibm.*;com.sun.*;sun.*;sunw.*;java.applet.*;java.awt.*;javax.swing.*;org.omg.*;java.sql.Date;org.hamcrest.*;

assrtThat, Matcher、Spec系は覚えることが多すぎて嫌い。

ちょっとさわらなくなったら全くコードが読めなくなる。

基本assertEqualsだけで頑張る。テストコードのテスト書くはめになったら意味がない。

Groovy の PowerAsset をどの言語も見習ってほしい。やはりJavaのテストは全部Groovyで書くべきなのかなー


Eclipseはcode tempalteに以下を足していて基本これで事足りている。

<template autoinsert="false" context="java-statements" deleted="false" description="assertEquals。equalsメソッドで比較" enabled="true" id="org.eclipse.jdt.ui.templates.ae_tag" name="ae">${staticImport:importStatic('org.junit.Assert.*')}assertEquals(${cursor}, );</template>
<template autoinsert="false" context="java-statements" deleted="false" description="assertTrue" enabled="true" id="org.eclipse.jdt.ui.templates.at_tag" name="at">${staticImport:importStatic('org.junit.Assert.*')}assertEquals(true, ${cursor});</template>
<template autoinsert="false" context="java-statements" deleted="false" description="assertFalse" enabled="true" id="org.eclipse.jdt.ui.templates.af_tag" name="af">${staticImport:importStatic('org.junit.Assert.*')}assertEquals(false, ${cursor});</template>
<template autoinsert="false" context="java-statements" deleted="false" description="assertNull。assertEqualsだとnullの比較はできない。" enabled="true" id="org.eclipse.jdt.ui.templates.an_tag" name="an">${staticImport:importStatic('org.junit.Assert.*')}assertNull(${cursor});</template>
<template autoinsert="false" context="java-statements" deleted="false" description="assertNotNull。assertEqualsだとnullの比較はできない。" enabled="true" id="org.eclipse.jdt.ui.templates.ann_tag" name="ann">${staticImport:importStatic('org.junit.Assert.*')}assertNotNull(${cursor});</template>

# assertSame, assertNotSame もたしているが基本ほとんど使わない。


なんてことをかんがえていたらJUnit5が心を入れ替えるようだ。。。。

https://github.com/junit-team/junit-lambda/wiki/Core-Principles#minimize-dependencies-especially-third-party


Goのテストみたいにassertすらないってのはやり過ぎだが、

必要なのはJUnit3+TestCaseを継承しないでよい+Annotaionでメタを表現+assertのLambda対応なんだと思う。

[]散歩のお供にaudible(オーディオブック)をためしてみたが。。。 散歩のお供にaudible(オーディオブック)をためしてみたが。。。を含むブックマーク

  • 1ヶ月無料体験あり:契約日から1ヶ月。退会しても退会日まではサービスは使える
  • 古いものか(著作権が切れたもの)か要約版が多い。揃えが少ない。
  • iOSのアプリの出来もいまいち。内部のナビゲーションの仕組みが貧弱だと思う。
  • 銀河英雄伝説はアニメ版の声優のやつじゃなくて(しょうがないけど)違和感がありむりぽ。。。
  • 結局解約した。
トラックバック - http://d.hatena.ne.jp/udagawa/20151124
['uda4ml', '@', 'yahoo.co.jp'].each {print it}