2017年2月24日金曜日

Android で必要になるアイコンのピクセルサイズと画像リソース比率の一覧です。

Android で必要になるアイコンのピクセルサイズと画像リソース比率の一覧です。
Density アイコンのピクセルサイズ 画像リソース比率
xxxhdpi 192 x 192 400%
xxhdpi 144 x 144 300%
xhdpi 96 x 96 200%
hdpi 72 x 72 150%
mdpi 48 x 48 100%(基準)
ldpi 36 x 36 75%

2017年2月23日木曜日

Dapper 複数のパラメータ指定

 string sql = "SELECT * FROM USER_MST WHERE USERID = @UserId AND PASSWORD = @Password AND USER無効FLG = 0";

                db.Open();
                var recs = db.Query<USER_MST>(sql, new { UserId = iUserId, Password = iPassword });
元ネタ
http://sweets-junkie.hatenablog.com/entry/2014/03/07/010004

C#で使える軽量なORマッパー「Dapper」についてのナレッジが貯まってきたのでまとめてみます。
#1 Dapperとは
C#で書かれた軽量なORマッパー。
ただし、クエリ生成やソース自動生成などの機能は備えていない。
その代り高速。ORマッパーを嫌う人は速度面を指摘するけど、気になることはないと思う。
とにかく多機能なORマッパーを使いたい人はEntityFramework使ってどうぞ。

#2 導入方法
NuGetから「Dapper」検索GO!!

#3 使い方
①単一テーブルをSelectしてみる。
対象のテーブルは以下。
テーブル名:Users
カラム:UserName、Age
Dapperを使用してDBの取得結果をオブジェクトにマップするにはマップ先となるクラスを用意する必要がある。
基本的にはカラム名=変数名とする。大文字小文字は区別しない。
カラム名=変数名とならない場合はマッピングできないので、クエリ側でAS句を使い変数名と合わせる必要がある。
今回は以下のようなクラスを用意。

class User
{
     public String UserName { get; set; }
     public int Age { get; set; }
}
では早速Usersテーブルの情報をUserクラスにマッピング
public User GetUser()
{
   // DBコネクションを取得(ここは適当
  Connection con = ConnectionUtil.GetConnection("接続文字列");
 
  // DBに投げるクエリ @UserName はパラメータ
  String sql = @"SELECT * FROM Users WHERE UserName = @UserName";
  // クエリを実行して、取得結果をUserクラスにマッピング
  // パラメータは dynamic型で指定
  // SingleOrDefault() を使うと、複数件取得できた場合に例外、0件取得の場合にNullを返してくれる。
  // Single() を使うと、複数件取得、0件取得の場合に例外を発射する。
  return con.Query<User>(sql, new { UserName = "三木眞一郎" }).SingleOrDefault();
}
以上。これだけでマッピングされる。シンプルで超素敵。
ソースの説明はコメントを参照されたし。
②複数レコード取得してみる。
対象テーブルは①と同じ。
 public List<User> GetAllUser()
{
  // DBコネクションを取得(ここは適当
  Connection con = ConnectionUtil.GetConnection("接続文字列");
 
  // DBに投げるクエリ
  String sql = @"SELECT * FROM Users";
  // クエリを実行して、取得結果をUserクラスにマッピング
  // List<User>にキャストする
  return List<User> con.Query<User>(sql);
}
以上。キャストするだけでListにもマッピングできる。
③1対1の関係のテーブルをJOINして取得してみる。
対象のテーブルは以下。
テーブル名:Users
カラム:UserName、Age、JobId

テーブル名:Jobs
カラム:JobId、JobName
Jobsテーブルのマップ先としてUserクラスにJobクラスを定義する。
class User
{
     public String UserName { get; set; }
     public int Age { get; set; }
     public int JobId { get; set; }
     public Job Job { get; set; }
}
 
class Job
{
     public int JobId { get; set; }
     Public String JobName { get; set; }
}
UsersテーブルとJobsテーブルを結合してUsersクラスにマッピングしてみる。
public User GetUserAndJob()
{
  // DBコネクションを取得(ここは適当
  Connection con = ConnectionUtil.GetConnection("接続文字列");
 
  // DBに投げるクエリ @UserName はパラメータ
  String sql = @"SELECT * FROM Users u INNER JOIN Jobs j ON u.JobId = j.JobId WHERE UserName = @UserName";
  // クエリを実行して、取得結果をUserクラスにマッピング
  // Query<User, Jobs, User> は、<1つ目のテーブルのクラス、2つ目のテーブルのクラス、returnするクラス>
  // パラメータは dynamic型で指定
  // splitOnには2つ目のテーブルの開始位置のカラム名を指定
  // SingleOrDefault() を使うと、複数件取得できた場合に例外、0件取得の場合にNullを返してくれる。
  // Single() を使うと、複数件取得、0件取得の場合に例外を発射する。
  return con.Query<User, Jobs, User>(
     sql, 
     (user, job) => { user.Job = job; return user }, 
     new { UserName = "三木眞一郎" },
     splitOn: "JobId").SingleOrDefault();
}
以上。これも簡単。
ちなみに3つ以上のテーブルを結合する場合は、「con.Query」に3つ目のテーブルを追加して、splitOnにはカンマ区切りで区切り位置のカラム名を指定すればよい。
④ストアドプロシージャをよんでみる。
「sp_getUsers」というストアドプロシージャがあるとして。
public List<User> GetAllUser()
{
  // DBコネクションを取得(ここは適当
  Connection con = ConnectionUtil.GetConnection("接続文字列");
 
  // DBに投げるクエリ
  String procedure = "sp_getUsers";
  // クエリを実行して、取得結果をUserクラスにマッピング
  // CommandTypeにストアドプロシージャを指定
  // List<User>にキャストする
  return List<User> con.Query<User>(procedure, commandType: CommandType.StoredProcedure);
}

2017年2月20日月曜日

sqlcmdの使い方

sqlcmdの使い方

sqlcmd -S DBインスタンス -U ユーザーID -P パスワード -i sqlスクリプト


sqlcmd -S sv-sql2014\express -U develop -P kaihatu123 -i c:\temp\run.sql


オプション -E を使うと、Windpows認証になるので、 -U -Pは不要

2017年2月15日水曜日

D言語で作られたIDE & UIライブラリ

D言語で作成されたIDEとUIライブラリ
すべてD言語で作成されているのが、凄い。
https://github.com/buggins/dlangide

D言語自体がcross platformなので、これで Android と iOSまで手を広げてくれたらと
思ったら、DLangUI自体が、Android APIに刺激されて作ったそうです。

iOSまで、手を広げて欲しい~

2017年2月14日火曜日

MAGIC RIA 複数アプリを立ち上げた場合のライセンス振り分け

MAGIC RIA 複数アプリを立ち上げた場合のライセンス振り分け magic.iniの設定値 MaxConcurrentUsersに使用するライセンス数を設定する。 MaxConcurrentRequestsも、同じ値を設定する。

iOS Apps Reject

iOS Applicationを申請しましたが、Rejectされました。

最初、Appleからは、File Shareするなら、ウンタラカンタラ〜(英語わかりません)
このアプリはFile Share使わないよ、って返したのですが
Xcodeのinfo.plistにUIFileSharingEnabled keyがあって、初期値でtrueだそうです。
※初期値でtrueは、やめて欲しいです。

数回やりとりを行なって、ようやく上記のけyをfalseにすることが分かりましたが
info.plistを検索すると、違うkeyがhitしました。




Application supports iTunes file sharing このkeyをNOに変更しました。

これで再度申請してみます。

2017年2月10日金曜日

MAGIC 開発時の機能と操作: ナビゲータシートと特性シート

開発時の機能と操作: ナビゲータシートと特性シート

Magic eDeveloper V9Plus(V10も同様)では、開発時にナビゲータシートと特性シートを駆使します。
デフォルトでは、図のように横並びになっていますが、これだと使いにくいように思います。



また、2つのシートを重ね合わせてタブ(下方に表示されます)で切り替える使い方もあります。
再度、分離させたいときは、Ctrlキーを押しながらマウスでドラッグします。
各対応端末ごとに、以下のいずれかのサイズ1枚以上
3.5インチ端末用 4インチ端末用 4.7インチ端末用 5.5インチ端末用
640 x 920 640 x 1096 750 x 1334 1242 x 2208
640 x 960 640 x 1136 1334 x 750 2208 x 1242
960 x 600 1136 x 600

960 x 640 1136 x 640

iPad用 iPad Pro
1024 x 748 2048 x 2732
1024 x 768 2732 x 2048
2048 x 1496
2048 x 1536
768 x 1004
768 x 1024
1536 x 2008
1536 x 2048


Xamarin Forms のdeviceの判別

// 従来のコード(obsolute)
Deviec.OS == TargetPlatform.Android

// これから推奨されるコード
Device.RuntimePlatform == Device.Android
 
元ネタ
 ぴーさんログ

2017年2月9日木曜日

Dapper Micro-ORM

Dapper Micro-ORMをLinq To SQLと比較しました。

結果は、Dapperが2倍速い。

約74万件のレコードを読み込む処理があり
今まではLinq to SQLで処理が遅いと言われていました。

Linq to SQLで約40秒
Dapperでは、約25秒ほどでした。

ここまで、処理速度が違うと、Dapperに乗り換えようと考えてしまいます。

※Linq to SQLだと、DBからClass作成は、Drag and Dropで作成してくれるし
SQL書かなくて良いし、楽出来るんだけど....

Linq to SQLがもっと早くなれば良いんだけど~

2017年2月8日水曜日

.NET Core ORM

.NET Core用のORMを探していたら、.NET CoreのTeam Blogがあった。

https://blogs.msdn.microsoft.com/dotnet/2016/11/09/net-core-data-access/

この中で、Dapperのページを見ると、処理比較があり
.NET Coreでも、EFがあるから、EFで良いかな~と思っていたら
EFって、とっても重たいんですね。

DatabaseからClassを作ってくれる、Linq to SQLが個人的に楽できるから好きだったのですが
この処理比較を見て、愕然としました。

Dapperは、あの有名な StackOvewrFlowが使っている ORMらしいです。

StackOvewrFlowは、ASP.NET MVCを採用しているから
.NET Coreのライブラリも充実していた。


2017年2月7日火曜日

SQL Serverの移行で使用 DatabaseをSQLに変換





スクリプトを出力 -> 出力項目を選択 -> 詳細オプション -> スクリプトを作成するデータの種類を
スキーマ から スキーマとデータ 
に変更する。

2017年2月2日木曜日

MAGIC XPA RIA iOS用アプリ 起動時のurl

MAGIC XPA RIA iOS用アプリ 起動時のurlの設定

%EngineDir%\RIAModules\iOS\Source
settings.properties
ファイルを以下のように修正することでアプリケーションの特性を変更することができます。

URL
特性を空のままにした場合、ダイアログボックスが開き、エンドユーザが
URLを入力する必要があります。

URLに値を設定することで、初期表示 にurl入力が無くなる。

Setting.bundleの、item2に、接続するurlを指定する。

このurlは、外部設定のファイルを指定しました。


MAGIC RIAのセキュリティ設定 暗号化

MAGIC RIAのセキュリティ設定
暗号化

magic.iniの{MAGIC_SPECIALS] のセクション

SpecialClientSecureMessages=Y
SpecialClientCompressMessages=Y