布団が俺を呼んでいる

丘山大一のぶろぐ

NULL の容量って?

NULL を入れてしまうと、一般にパフォーマンスが落ちると言われていますが、果たしてファイルサイズに差は出るのでしょうか。
ちょっと試してみました。
以下、SQL Server2008R2で確認
詳細に調べられるだけの力量が無いので、SSMSで自動作成されたSQLをベースにザックリSQLです。

やっていることは、
1 空のテーブルを作成
2 20個の列を作成
3 1000万レコード挿入
4 ファイルサイズを確認
基本的に以上です。
比較したのは、
1 NULL 許容 × NULL格納
2 NULL 許容 × 空文字格納
3 NOT NULL × 空文字格納
の3パターン。

ベースとなる1のSQLは下記の通りです。

CREATE DATABASE [NullTestDB] ON  PRIMARY 
( NAME = N'NullTestDB', FILENAME = N'XXXXXXXXXXXXX\NullTestDB.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'NullTestDB_log', FILENAME = N'XXXXXXXXXXXXXXXXXXXXX\NullTestDB_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
GO
ALTER DATABASE [NullTestDB] SET COMPATIBILITY_LEVEL = 100
GO
ALTER DATABASE [NullTestDB] SET ANSI_NULL_DEFAULT OFF 
GO
ALTER DATABASE [NullTestDB] SET ANSI_NULLS OFF 
GO
ALTER DATABASE [NullTestDB] SET ANSI_PADDING OFF 
GO
ALTER DATABASE [NullTestDB] SET ANSI_WARNINGS OFF 
GO
ALTER DATABASE [NullTestDB] SET ARITHABORT OFF 
GO
ALTER DATABASE [NullTestDB] SET AUTO_CLOSE OFF 
GO
ALTER DATABASE [NullTestDB] SET AUTO_CREATE_STATISTICS ON 
GO
ALTER DATABASE [NullTestDB] SET AUTO_SHRINK OFF 
GO
ALTER DATABASE [NullTestDB] SET AUTO_UPDATE_STATISTICS ON 
GO
ALTER DATABASE [NullTestDB] SET CURSOR_CLOSE_ON_COMMIT OFF 
GO
ALTER DATABASE [NullTestDB] SET CURSOR_DEFAULT  GLOBAL 
GO
ALTER DATABASE [NullTestDB] SET CONCAT_NULL_YIELDS_NULL OFF 
GO
ALTER DATABASE [NullTestDB] SET NUMERIC_ROUNDABORT OFF 
GO
ALTER DATABASE [NullTestDB] SET QUOTED_IDENTIFIER OFF 
GO
ALTER DATABASE [NullTestDB] SET RECURSIVE_TRIGGERS OFF 
GO
ALTER DATABASE [NullTestDB] SET  DISABLE_BROKER 
GO
ALTER DATABASE [NullTestDB] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
GO
ALTER DATABASE [NullTestDB] SET DATE_CORRELATION_OPTIMIZATION OFF 
GO
ALTER DATABASE [NullTestDB] SET PARAMETERIZATION SIMPLE 
GO
ALTER DATABASE [NullTestDB] SET READ_COMMITTED_SNAPSHOT OFF 
GO
ALTER DATABASE [NullTestDB] SET  READ_WRITE 
GO
ALTER DATABASE [NullTestDB] SET RECOVERY FULL 
GO
ALTER DATABASE [NullTestDB] SET  MULTI_USER 
GO
ALTER DATABASE [NullTestDB] SET PAGE_VERIFY CHECKSUM  
GO
USE [NullTestDB]
GO
IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N'PRIMARY') ALTER DATABASE [NullTestDB] MODIFY FILEGROUP [PRIMARY] DEFAULT
GO



BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Table_1
(
C1 nvarchar(MAX) NULL,
C2 nvarchar(MAX) NULL,
C3 nvarchar(MAX) NULL,
C4 nvarchar(MAX) NULL,
C5 nvarchar(MAX) NULL,
C6 nvarchar(MAX) NULL,
C7 nvarchar(MAX) NULL,
C8 nvarchar(MAX) NULL,
C9 nvarchar(MAX) NULL,
C10 nvarchar(MAX) NULL,
C11 nvarchar(MAX) NULL,
C12 nvarchar(MAX) NULL,
C13 nvarchar(MAX) NULL,
C14 nvarchar(MAX) NULL,
C15 nvarchar(MAX) NULL,
C16 nvarchar(MAX) NULL,
C17 nvarchar(MAX) NULL,
C18 nvarchar(MAX) NULL,
C19 nvarchar(MAX) NULL,
C20 nvarchar(MAX) NULL
)  ON [PRIMARY]
TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE dbo.Table_1 SET (LOCK_ESCALATION = TABLE)
GO
COMMIT

Declare @p_NumberOfRows Bigint 
Select @p_NumberOfRows=10000000; 
With Base As
  (
    Select 1 as n
    Union All
    Select n+1 From Base Where n < Ceiling(SQRT(@p_NumberOfRows))
  ),
  Expand As
  (
    Select 1 as C From Base as B1, Base as B2
  ),
  Nums As
  (
    Select Row_Number() OVER(ORDER BY C) As n From Expand
  )
INSERT INTO Table_1
  Select n, null,null,null,null,null,null,null,null,null,
       null,null,null,null,null,null,null,null,null,null     
    from Nums  Where n<=@p_NumberOfRows
OPTION (MaxRecursion 0); 

EXEC sp_spaceused; 

2、3についてはそれぞれ列の生成、Insert文が異なるだけです。
なお、最初の一列目には値が格納されていますが、これはただ単にループを回した結果を確認したかっただけです。

さて、それでは結果です。
1 NULL 許容 × NULL格納:285056 KB
2 NULL 許容 × 空文字格納:285056 KB
3 NOT NULL × 空文字格納:285056 KB

全然変わりませんでした!!
あれー?
これじゃ記事として微妙(´・ω・`)

もしかしたら、テーブルや列の設定によって変わるのかもしれません。
あるいは1000万レコードでは差異が出ないとか。

気が向いたら他のRDBMSや設定でも試してみます。

ひと目でわかるMicrosoft SQL Server 2008 (マイクロソフト公式解説書)

新品価格
¥2,916から
(2015/10/7 22:05時点)

SQL Server 2008ビギナーズガイド

価格:5,184円
(2015/10/7 22:06時点)
感想(0件)

PowerShell コマンドの履歴

下記のように実行すると、hoge.txtに実行コマンドの履歴が残ります。

Start-Transcript -Path D:\hoge.txt

超便利です。早く調べておけばよかった。
まあ色々と機能・問題点があるようですが、まず簡単なことから覚えていくのが当ブログのモットー。

Windows PowerShell超入門 [4.0対応]

新品価格
¥2,160から
(2015/10/5 23:59時点)

Windows PowerShell超入門 [ 新丈径 ]

価格:2,160円
(2015/10/5 23:59時点)
感想(1件)

PowerShell Windows Server 起動時にサーバーマネージャーの自動起動を停止する

いやまあ、手動でやった方が速いですけど。
一括で基本設定したくなった時用のメモということで。
・・・・・・まあレジストリ弄っているだけなんですが。

Set-ItemProperty "HKCU:\Software\Microsoft\ServerManager" -Name "DoNotOpenServerManagerAtLogon" -Value "1"

どこかで役に立つ・・・・・・立たないか。

【改訂新版】 Windows PowerShell ポケットリファレンス

新品価格
¥3,002から
(2015/10/3 12:43時点)

Windows PowerShellポケットリファレンス改訂新版 [ 牟田口大介 ]

価格:3,002円
(2015/10/3 12:44時点)
感想(2件)

OneDirve アプリの更新に失敗したら、Ofiiceも一緒に全滅した

会社でプギャーしました。

Office365 のOneDriveにブラウザ経由でアクセスするの面倒だなー、と思ってアプリをインストールしました。
が、途中で失敗。
しかし、資料作成を依頼されていたので、ひとまずおいておき、Wordファイルを開こうとデスクトップのアイコンをダブルクリック。
「このファイルを開く方法を選んでください」
・・・・・・アレ?
さっきまで普通に関連付けされて開いていたのに。
まあインストールにコケた影響で、関連付けが外れてしまったのだろう、もう一度設定しなおせば・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・
・・・・・・
Program Files の中に、exeが無い・・・・・・(汗)
エクセルもワードも消えており、残っているのはアイコンやDLL。
これじゃあ開けなくてあたりまえですねー。
うわーん(泣)

うかつに色々試すと傷が広がる可能性があったので、システムの復元で戻しました。
同じような現象に当たった人っているんだろうか・・・・・・。
ちなみに、AD環境+Office365 (Office2013相当)です。

(無料電話サポート付)できる Office 365 Business/Enterprise対応 2015年度版 (できるシリーズ)

新品価格
¥1,944から
(2015/10/3 12:58時点)

できるOffice 365(2015年度版) [ インサイトイメージ ]

価格:1,944円
(2015/10/3 12:58時点)
感想(3件)

PowerShell Get-ChildItem の使い方

備忘。
Get-ChildItem で再帰でファイルを探し、結果を出力する。
  • Get-ChildItem D:\ -Recurse -Include FD* >D:\List.txt
  • Get-ChildItem D:\ -Recurse -Include FD*, *.vfd >D:\List.txt
※「\」は「¥(半角)」となります。

【改訂新版】 Windows PowerShell ポケットリファレンス

新品価格
¥3,002から
(2015/10/3 12:43時点)

Windows PowerShellポケットリファレンス改訂新版 [ 牟田口大介 ]

価格:3,002円
(2015/10/3 12:44時点)
感想(2件)

System Center 2012R2 の評価ガイドの取得先

よく探し回るので備忘で置いておく。

System Center 2012 も混じって出てくるから探しづらくて……。


Windows Server 2012 R2テクノロジ入門 (TechNet ITプロシリーズ)

新品価格
¥5,076から
(2015/9/29 00:00時点)

Windows Server 2012 R2テクノロジ入門 [ 山内和朗 ]

価格:5,076円
(2015/9/29 00:01時点)
感想(0件)

Windows Server 2008 R2 割り当てメモリが少ない時の Windows Update の限界

備忘。
環境によって異なるので、あくまで目安の一つとして。

下記のの環境下で作成された2008R2だと、Windows Updateが147個目で停止(進まなくなる)した。
・ホストサーバとして、Windows Server 2012R2 GUI にHyper-V機能を追加、その仮想環境下に作成。
・インストールOSはWindows Server 2008R2 SP1 GUI
・割り当てメモリ2G

メモリを増やせばもう少しいける?
この時は、Windows Updateを少しずつ実行することで対応。
約90個はいけた。

WINDOWS SERVER 2008 R2 テクノロジ入門 (マイクロソフト公式解説書)

新品価格
¥5,076から
(2015/9/24 21:34時点)

【送料無料】 Windows Server 2008 R2 テクノロジ入門 マイクロソフト公式解説書 / 山内和朗 【単行本】

価格:5,076円
(2015/9/24 21:34時点)
感想(0件)

Windows Server 2008R2 で KB2834140 の Windows Update に失敗する(更新が終わらない)

またまたWindows Update 失敗シリーズ。
別にやりたくてやっているわけではないのですが……。

環境としては下記のような状態。
・ホストサーバとして、Windows Server 2012R2 GUI にHyper-V機能を追加、その仮想環境下に作成。
・インストールOSはWindows Server 2008R2(無印)GUI
・割り当てメモリ2G

現象は下記。
・WIndows Update でKB2834140 の更新が8時間以上放置しても終了しない。
・この状態になると、タスクマネージャ等も起動しなくなる? ようだ。(放っておいたら起動するかも)
・MSDN の Windows Server 2008R2 で、Windows Update によってSP1 に上がった後に現象発生確認。

他には、
MSDN の Windows Server 2008R2 SP1 から始めた場合には現象発生せず。
・統合サービス を上げても現象は発生する。
・割り当てメモリを4GB,仮想CPUコアを4つに増やしてみても特に変わらず。

ググっていると、WIndows7で似たような現象にはまっている人がいるみたい。
ぱっと解決しなかったのでシルバーウィーク中に自宅の検証環境で試してみたら再現してしまったので、泣く泣く調査。
ひたすら時間がかかるので調べるのが非常に面倒臭い。

最終的に、基本的な対応でいけました。
KB2834140を最初にインストールせず、ひたすら後回しにして、一番最後に単独で入れたらOKです。

まあ、今更Windows Server 2008R2 を、しかもSP無しでスタートする人はあまりいないと思いますが。

WINDOWS SERVER 2008 R2 テクノロジ入門 (マイクロソフト公式解説書)

新品価格
¥5,076から
(2015/9/24 21:34時点)

【送料無料】 Windows Server 2008 R2 テクノロジ入門 マイクロソフト公式解説書 / 山内和朗 【単行本】

価格:5,076円
(2015/9/24 21:34時点)
感想(0件)

どこでも座れるリュックPlus レビュー

衝動買いしてしまったリュックのレビューをしたいと思います。
今回はパイプ椅子がくっついているリュックです。


販売元はコレ。

どこでも座れるリュックPlus ≪サンコー≫ BAKPK2C4

価格:5,280円
(2015/9/21 17:18時点)
感想(0件)


レビューといっても1日3時間程度背負って歩き回った後の感想に過ぎないのですが、まあ誰かの参考になれば。

■良いところ
・リュック全体のつくりはしっかりしている。
・荷物が思ったより入る。外側のポケットに雑誌(日経サイエンス)、Surfaceは余裕で入る。
・椅子は地味に便利? かもしれない。試しに使ってみたら回りの人が驚いていたw

■良くないところ
・肩掛け部分の紐がすぐ緩くなる。調整しても、歩いてるとスグに緩くなってしまう。
・仕方ないのだが、背中の部分に椅子が格納されているため、どうしてもフィットしない。
 ※このため、本当に長時間(たとえば、山登り等)での使用には耐えない。
・ポンチョいらないw

総括
・街中で長時間背負う必要がある、というような状況では非常に良いリュックだと思います。
・逆に、長時間(2時間以上)歩き続ける場合は微妙です。
・1時間程度なら、全く問題無し。むしろ使い勝手がいいです。

リュックを持っていない + 街中利用を想定 + ちょっと変わったものが欲しい。
こんな方向けではないでしょうか。
リュックを持っている + 登山もする + 小型パイプ椅子なら持っている
という人には必要ないと思います。
迷ったら買いでもOKだと思いますが、気になる方は各レビューサイトを回ってからどうぞ。

果実酒作った

折角のシルバーウィークなので、趣味の果実酒作りを。
今回漬けたのは梨と林檎。


材料は、
・梨 4個
 氷砂糖少な目(適当)
 ブランデー
・林檎 4個
 氷砂糖多め目(適当)
 レモン 1個
 ブランデー

普段はホワイトリカーで漬けるのですが、今回はなんとなくブランデーでいってみました。
収穫が楽しみ。

アデリア 果実酒瓶5号 4L

価格:698円
(2015/9/21 17:35時点)
感想(3件)

サントリー 果実の酒用ブランデー 1800ml 紙パック 1480円

価格:1,598円
(2015/9/21 17:36時点)
感想(1件)

布団が俺を呼んでいる | 丘山大一のぶろぐ

布団が俺を呼んでいる

丘山大一のぶろぐ

空文字を判定する最も効率のいいやり方は? (C#i編)

というわけでC#編。

ソース(前回書かなかったな)

効率のいい書き方?作法?そんなん知らんがな(邪悪)。

    class Program
    {
        static void Main(string[] args)
        {
            using (StreamWriter sw = new StreamWriter(@"D:\test.txt", true, System.Text.Encoding.Unicode))
            {
                Console.SetOut(sw);

                string s = string.Empty;
                var result = new List<TimeSpan>();

                var tryCounter = Enumerable.Range(1, 10).ToList();
                var roopCounter = Enumerable.Range(0, 10000000).ToList();

                Console.WriteLine(@"""""での判定");
                result.Clear();
                tryCounter.ForEach(i =>
                {
                    Console.Write(i + "回目:");
                    Console.WriteLine(
                    RunText(() =>
                    {
                        roopCounter.ForEach(r =>
                        {
                            if (s == "") { };
                        });
                    }));
                });

                Console.WriteLine(@"String.Emptyでの判定");
                result.Clear();
                tryCounter.ForEach(i =>
                {
                    Console.Write(i + "回目:");
                    Console.WriteLine(
                    RunText(() =>
                    {
                        roopCounter.ForEach(r =>
                        {
                            if (s == string.Empty) { };
                        });
                    }));
                });

                Console.WriteLine(@"String.IsNullorEmptyでの判定");
                result.Clear();
                tryCounter.ForEach(i =>
                {
                    Console.Write(i + "回目:");
                    Console.WriteLine(
                    RunText(() =>
                    {
                        roopCounter.ForEach(r =>
                        {
                            if (string.IsNullOrEmpty(s)) { };
                        });
                    }));
                });

                Console.WriteLine(@"Lengthでの判定");
                result.Clear();
                tryCounter.ForEach(i =>
                {
                    Console.Write(i + "回目:");
                    Console.WriteLine(
                    RunText(() =>
                    {
                        roopCounter.ForEach(r =>
                        {
                            if (s.Length == 0) { };
                        });
                    }));
                });

                Console.WriteLine(@"""""とequlsでの判定");
                result.Clear();
                tryCounter.ForEach(i =>
                {
                    Console.Write(i + "回目:");
                    Console.WriteLine(
                    RunText(() =>
                    {
                        roopCounter.ForEach(r =>
                        {
                            if (s.Equals("")) { };
                        });
                    }));
                });

                sw.Close();
            }
        }

        static TimeSpan RunText(Action a)
        {
            var t = DateTime.Now;
            a();
            return DateTime.Now - t;
        }
    }

結果

""での判定
1回目:00:00:00.1810066
2回目:00:00:00.1560072
3回目:00:00:00.1440069
4回目:00:00:00.1290084
5回目:00:00:00.1630423
6回目:00:00:00.1779770
7回目:00:00:00.1580394
8回目:00:00:00.1800101
9回目:00:00:00.1579818
10回目:00:00:00.1810102

String.Emptyでの判定
1回目:00:00:00.1690038
2回目:00:00:00.1430068
3回目:00:00:00.1370051
4回目:00:00:00.1190062
5回目:00:00:00.1190067
6回目:00:00:00.1090028
7回目:00:00:00.1030062
8回目:00:00:00.1020050
9回目:00:00:00.0900034
10回目:00:00:00.0890046

String.IsNullorEmptyでの判定
1回目:00:00:00.0770039
2回目:00:00:00.0740020
3回目:00:00:00.0680047
4回目:00:00:00.0670034
5回目:00:00:00.0720012
6回目:00:00:00.0670210
7回目:00:00:00.0619853
8回目:00:00:00.0610202
9回目:00:00:00.0610032
10回目:00:00:00.0600027

Lengthでの判定
1回目:00:00:00.0510044
2回目:00:00:00.0469995
3回目:00:00:00.0460022
4回目:00:00:00.0460020
5回目:00:00:00.0460034
6回目:00:00:00.0460022
7回目:00:00:00.0460020
8回目:00:00:00.0460016
9回目:00:00:00.0420017
10回目:00:00:00.0420029

""とequlsでの判定
1回目:00:00:00.0640032
2回目:00:00:00.0640030
3回目:00:00:00.0630028
4回目:00:00:00.0590029
5回目:00:00:00.0590028
6回目:00:00:00.0580030
7回目:00:00:00.0590032
8回目:00:00:00.0580030
9回目:00:00:00.0560021
10回目:00:00:00.0540025

総括

おおむねこの通りでした。
とりあえず「文字列 == 空」のような書き方はアカンということが分かった。
DelphiとC#は、開発者レベルで似ている(というか同……ゲフンゲフン)ですけど、結果が大分違うのが面白いですね。

※注意!

私の開発環境での結果です。
ロジックや書き方、環境によってなんぼでも結果は変わることをお断りしておきます。


C#実践開発手法 (マイクロソフト公式解説書)

新品価格
¥5,400から
(2016/5/22 17:14時点)

Windows Phone (Windows Mobile) アップデートの再起動ににかかる時間(trinity) 201605

「電話の更新」が昨日来ていました。
すぐに更新したかったのですが、寝る直前で気が付いた => 計測のためには起きてなくてはいけない
だったので、更新を延期。
本日更新しました。

再起動を手動でかける
というわけで手動でアップデート。
画面の歯車がクルクル回るのが約4分。
プログレスバーが約5分。
合計10分弱くらいでした。
前回よりわずかですが短い印象。
アップデート終了直後、「電話の更新」を覗いてみたら更新に失敗したぜ、みたいなメッセージが出ていましたが、数分してから再試行すると問題なくなりました。ただ単に起動直後にやったのがいけなかったみたい。

バージョン

OSのビルドバージョンは 10.0.10586.318 で変わっていません。
ファームウェアリビジョンは、 1028.020.001.61 になっていました。
本日時点の各バージョンは、
  • バージョン:1511
  • OSビルド:10.0.10586.318
  • ファームウェアリビジョン番号:1028.020.001.61
  • ハードウェアリビジョン番号:1.0
  • 無線ハードウェアバージョン:1.0
  • チップSOCバージョン:8952
ファームウェアリビジョンが上がっている=trinity側の更新だろ、ということでタイトルにはtrinityをくっつけました。
違ったらどうしよう。記事をなおそう。

まあアップデートはいいとして

MSさんちの方で携帯電話事業の動きがバタバタしていて、今後がとっても不安ですw


de:code 2016 参加してきました

楽しかったけど疲れたよ。

今年の感じ

期待されていたHolo Lens 関係があまりなかったので、デバイス的な盛り上がりにはちょっと欠けていた印象。
全体的には、
DevOps、Xamarin、ロボット(ボット)、UWPてな感じ。
スマホやらクラウドやらは当たり前になりすぎて、「それは前提として」話が進むのがなんともはや。
時代の流れは速いもんだ。

これから

感覚的には、Xamarinを押さえておくべきだと思った。
あんまり手を広げると学習効率が落ちるので、当面はWUP集中だけど、アンテナは立てておこう。


Creating Mobile Apps with Xamarin.Forms Preview Edition 2 (Developer Reference)

空文字を判定する最も効率のいいやり方は? (Delphi編)

現在いるプロジェクトではDelphiなる言語を使っています。
んで、他の人のソースを読んでいる���、空文字かどうかの判定の仕方には色んな書き方があるのだなあと思います。
代表的なのは、
(1) Result := s.IsEmpty;
(2) Result := s = '';
(3) Result := s.Length = 0;
(4) Result := s = EmptyStr;
等でしょうか。
ちなみに、私は基本的にIsEmptyメソッドをなるべく使う派です。
「''」と記述すると、後で読み返した時に
「これは本当に空文字で判定したいのだろうか?
 それとも実は半角スペースと比較するべきところを間違えてしまったのだろうか?」
等と疑わせてしまうこと、また本当にそのように間違える可能性が出てきてしまうためです。
 あとIsEmptyを使った方がコード上からカッコが減りやすいというのもある。IDEが貧弱なRadStudioではこれが割と重要。
 
さて、そうは言っても、「IsEmpty使おうぜ!」と主張しても使ってくれる人はなかなか増えません。
わざわざ書くのが面倒+間違いやすい「''」で書く人がほとんどです。

むう。何故だ。

と思っていると、MSDNの中で、(C#ですが)空文字判定方法について記述してある箇所を見つけました。
https://msdn.microsoft.com/ja-jp/library/ms182279.aspx?f=255&MSPPError=-2147217396
な、なるほど!
きっと速度差があるからみんな「''」を使うんだ!
理由があったんだね!

というわけで、それぞれの実行時間はどれくらいなのか。

2147483647 回ループを回してテストしてみました(適当な値をとるのが面倒だったので、Integer.MaxValue)。
以下、単位はミリ秒。
(1) IsEmpty
①37430
②37197
③37296
(2) 「''」
①36414
②36193
③36258
(3) Length
①40755
②40704
③40771
 
最速と最遅で比較すると、
(2) Result := s = '';
が最遅に比べ4578ミリ秒早いという結果になりました。
一回当たりおよそ
4578 / 2147483647 ≠
5000 / 2000000000 ≠
5 / 2000000 ≠ 0.0000025 ミリ秒早い。
ということになります。

おおー、なるほど、確かに早い。
なるほど、同じ結果が出るなら早い方を採用するのは理に適っている。
うん……正しい……
いや、たしかに正しいんだが……

全然変わんねえよ (´・ω・`)

実質0秒だよコレ。
これ以上速度を気にしなければならない要件なら、そもそもDelphi使わないわな。
それこそCとかアセンブラとか、もっと高速な言語を採用するわ。
やっぱり「''」と比較するコーディングは、昔から書いている人の単なる惰性な気がするなあ……。
一応、「早い」ということは分かったから、無暗にIsEmptyを進めるのは止めるけど……
やっぱり私はIsEmptyでいこう……。

※注意!
私の開発環境での結果+面倒だったのでデフォルト設定のDebugビルド結果です。
ロジックや書き方によってなんぼでも結果は変わることをお断りしておきます。



Delphi XE2プログラミング入門

新品価格
¥4,104から
(2016/1/18 20:58時点)

ようやくUWPアプリを一つ公開できた

クソアプリなんですけどね。

アプリ概要

Windows Store 公開。
ランダムな数値を生成する機能(だけ)
推奨はWindows Mobile。

※詳細はブログ上部の「公開アプリ」から。

目標達成

アプリを作りこむよりも、まずWIndows Storeでアプリを公開するとはどういうことなのか覚えたかった。
プログラムで何ができるか、ということも重要だけど、公開するということを考えた場合、公開先の事情も知っておかなければならない。
大家の事情を店子は知っておく必要があるのだ。
その目標は、まずは達成できた気がする。
……まあほとんどの時間はVisual StudioとかUWPアプリのエラー解決に費やされていた気がするが(汗)

今後
練習がてら、もう2~3個くらい軽いアプリを作成するつもり。


UWPアプリが、Windows Phone (Windows Mobile)  に配置できなくなった

最後に配置してから間が結構あったので、何がトリガーだったのか分かりません。
色々見ていると、
・OSのビルドバージョンが上がったから
・ストア申請用のパッケージを作成したから
あたりが原因ぽいですが、確証には至っておりません。

'Device' のブートストラップに失敗しました。デバイスが見つかりません。

最初に遭遇したエラー。
デバイスマネージャからデバイスを削除したらできた、という話があったので試してみたら突破できました。

DEP0001 : 予期しないエラー

すわ、OSのリフレッシュを試す必要があるか、と思いましたが、デバイス側(WIndows Phone側)のアプリを削除すればいけました。
同名のアプリが入っているところに、パッケージ化の設定がされたアプリを突っ込もうとしたしたから出た? ような気がします。

最近はUWPよりも ざまりん の方が盛り上がっているような気がしますが、当分はUWPでいこうかな。


Diginnos SIMフリー スマートフォン DG-W10M ( Windows10 mobile / クアッドコア / 5.0インチ / 1280*720 / デュアル SIM / LTE対応 / RAM1GB / ROM16GB )

新品価格
¥9,980から
(2016/5/14 22:56時点)

Windows Phone (Windows Mobile) Windows Update 後の再起動ににかかる時間(10.0.10586.318)

OSのビルドバージョンが10.0.10586.318に上がりました。

いつものように、更新後の再起動を手動でかけてみる

手動再起動GO!

今回はこんな感じでした

アップデートファイルのダウンロードや更新自体は完了しているので、再起動にかかる時間だけです。
手動で再起動をかけると、画面上に歯車が出てきてクルクル回り始めます。10分強。
それが終わると、ついに起動か、と思いきや、また何やらプログレスバーが出てきます。5分
大きく上記2ステップ、合計15分で更新が完了しました。
前回とあまり変わらないかな。

状況によって時間は大きく前後すると予想されますので、目安の一つとして。

更新内容や履歴はどこで確認する?

いかにもなページもあるんですが、本日時点では特に情報が記載されていないような……?

バージョン

端末はNuAns Neoです。
本日時点の各バージョンは、
  • バージョン:1511
  • OSビルド:10.0.10586.318
  • ファームウェアリビジョン番号:1028.020.001.53
  • ハードウェアリビジョン番号:1.0
  • 無線ハードウェアバージョン:1.0
  • チップSOCバージョン:8952


SDKの更新の影響で(?)UWPのプロジェクトとXAMLのプレビューが開けなくなった → 解決

上で書いていた問題、気が付いたら解決していたみたいです。

手順

  1. アプリケーションのターゲットバージョンを Windows10(10.0;ビルド10586) に変更。
  2. 開けなくなるでVisual Studio再起動。
  3. ソリューションを開くと、SDKの更新ができるようにるので更新。
  4. 更新にはちょっと時間がかかる。
  5. 再起動したら、無事開けるように。

良かった良かった。

Windows Phone (Windows Mobile) edge は shift jis 未対応?

文字化けじゃー(ぎゃー)

要約

会社から送られてきたhtmlファイルをedgeで開いたら文字化けした。
エンコードの設定をいじればいいだろ、と思ったら見つからず。
クライアントデスクトップのedgeでは文字化けしないんですけどね。

解決策

htmlファイルのヘッダーをいじってshift jis から utf-8 にしたら表示できた。

……全然解決策になっていない!


どうすればいいんでしょうね?

そもそもhtmlファイル自体、最初から文字コード指定を utf-8 なり16なりにしてくれよ、と思うわけですが、わざわざshift jis になっていたのは、おそらく人名や住所が入っている自動生成のhtmlファイルだからだと思われます。
utf-8 で表現できない漢字などに対応するためでしょう、たぶん。
文字コードの闇に深く立ち入るつもりは全くないので、この辺りは考えないことにする(逃げた)
MSさーん、対応してよー……といいたいですけど、対応してもあんまり旨みが無いよなあ……



(無料電話サポート付)できる Windows 10 Mobile FREETEL KATANA 01/02 対応 (できるシリーズ)

新品価格
¥1,080から
(2016/5/7 12:51時点)

de:code 2016 どのセッションに参加するかウジウジ考えてみる

セッションアンケートが来ていたので、それを見ながらうんうん悩む。

とりあえずこんな感じでアンケート提出

UWP 中心で組んでみた。

Day1 5 月 24 日 (火) 9:30 - 20:00
09:30 ~ 11:30 KeyNote すべての人の可能性を拡げるモバイルファースト、クラウドファーストの世界
13:20 ~ 14:20 CHK-004 プログラミング言語は何処へ向かうのか
14:35 ~ 15:35 CLT-003 UWP で業務パッケージやエンタープライズ LOB は行けるのか? ~ UWP アプリによる業務システムの開発と展開 ~
16:05 ~ 17:05 CLT-002 Windows 10 デバイスと UWP 完全解説
17:20 ~ 18:20 INF-027 セキュリティ マニアックス -サイバー攻撃の手口と防御手法- ~敵を知り、己を知れば百戦危うからず~

Day2 5 月 25 日 (水) 9:30 - 18:30
09:30 ~ 10:30 DEV-022 これから始める Xamarin ? 環境構築から iOS/Android/UWP アプリのビルドまで ?
10:45 ~ 11:45 DOO-013 Docker 最新動向と Azure Container Service 入門
13:10 ~ 14:10 INF-004 App Service を利用したウェブサイト構築における運用管理とセキュリティ対策
14:25 ~ 15:25 CLT-010 クラウドで広げる広がる UWP アプリの世界
15:55 ~ 16:55 CLT-014 ゲーム開発だけじゃない!Unityで作るUWPアプリ
17:10 ~ 18:10 CLT-012 インサイド UWPアプリ


Holo Lens も気になるけど、これは聞くより実物をじっくり見たい方なので後回し。
展示とかで見れたら嬉しいな。
Hyper-V やコンテナ回りも気になるので、様子を見ながら変えていきます。


Microsoft Windows 10 Home (32bit/64bit 日本語版 USBフラッシュドライブ)【新価格版】

新品価格
¥14,200から
(2016/4/27 22:05時点)