プログラムの事とか

お約束ですが「掲載内容は私個人の見解です」

ディレクトリの一つ上のディレクトリをとる

ネタにもなれないような小ネタですが

そのものずばりなメソッドが無いかナーとググってみたんですが、バックスラッシュ探して文字列操作ってのが上位に出てきてそういものなのかな?と思って自作

public static string GetParentDirectory(string path)   // pathはファイルでもディレクトリでも可
{
    if (path.EndsWith(Path.DirectorySeparatorChar.ToString())) path = path.Substring(0, path.Length - 1);
    return Path.GetDirectoryName(path);
}

バックスラッシュの決め打ちが気持ち悪いのでPath.DirectorySeparatorChar

一つ上のディレクトリはPath.GetDirectoryNameメソッドで

一行目はpathの最後がセパレーター(バックスラッシュ)の場合にPath.GetDirectoryNameが私の望むものを返してくれないのでそのために入れてます(AppDomain.CurrentDomain.BaseDirectoryなどは最後にセパレーターがついて返ってくるんですよね)

異常値チェックしてないのでその辺は雰囲気で

どーでしょう?

de:code 2018に行ってきた

感想というか後で見る用のメモというかそんなの

セッション


DAY 1

KN01 基調講演

女性が活躍~とかそういうやつなのか平野さん以外全員女性だった。けど性別とか関係なくプレゼンの腕で登壇者を選んでほしかった (女の子がキャッキャウフフしているのを見るのは楽しいけどそういうイベントじゃないでしょ)

英語でしゃべってた3人のプレゼンはすごく安定してうまいと感じた。わざわざ日本に呼んでしゃべってもらうくらいの人だからなのか、私の中で英語補正が入っているのか

AD19 岩永さんのやつ

実を言うと.NET Frameworkはもうだめです。 突然こんなこと言ってごめんね。 でも本当です。

もうしばらくすると.NET Framework 4.8がリリースされます。

それが終わりの合図です。

って話だった気がする

AC14 高橋さんのMRのやつ

AC07 ユニティさんのMRのやつ

AI61 C#ニューラルネットワークを~

今回のde:codeから始まったシアターセッション (休憩中にEXPO会場で15分)

AD14 井上さんの.NETの話

クイズは全問正解できた。WPFのコードネームを覚えていた自分に関心した


DAY 2

AC02 かずきさんのデスクトップアプリの話

これからデスクトップアプリ作るならUWPだよね。サイドローディングが簡単になっているのは知らなかった

1803で増えたタイムラインに対応させる、っていうのは全然頭になかったのでなるほどって感じ (この手の技術について行けていない自分を再認識できた)

AD43 井上さんのVisual Studioの話

この辺は最新を追えている気がした

デモ見れてよかった

AD24 GitHubの人の話

エンタープライズ版なんてのがあるんだね

AC11 Windows MLの話

AD39 .NET CoreでCloud Native API~な話

dockerは必須

AD61 Blazorな話

シアターセッション

使えるけどまだ使っちゃだめよ、って話

使いたい

AC05 荒井さんのやつ

相変わらず見づらい、けど見ちゃう

Level 300なのでそんなに難しいことを言っているわけではなかった気がする (理解できないところが記憶から消されている可能性はある)

AD17 しばやん先生のやつ

ASP.NET Coreな話

冒頭で「シャッター音禁止」を明言してくれたので一度もシャッター音を聞かないで済んだセッション。超快適だった (音だけでなく写真撮る動作もうっとうしいし、全セッション写真禁止でもいいと思った)

話もデモも面白かった。 最終セッションなので1時間くらい延長してもいいのに (

クイズは全問正解できた

感想

アプリに不満はなかった。改善してるなーすごいなーって思った

今回から全席完全入れ替え制になってた。どこかでアナウンスしてたっけ?

twitterにスタッフに対する愚痴が流れたらしいけど、本職ってわけでもないだろうししょーがないとおもう。最後尾の札を持ったスタッフが列の中間くらいにいて多方面からそこに並ぼうとしているのはさすがにどうかと思ったけど

こういうのに参加しないとモチベーションが上がらないので行ってよかった

DateTimeOffsetの比較について

知っている人にとっては何をいまさら、な感じなことですが知らなくてググってしまったのでメモメモ

確認は.Net 4.7.2でやってます。それ以外の奴や今後のことは知らない

Q

var t1 = new DateTimeOffset(2018, 5, 15, 12, 0, 0, TimeSpan.FromHours(0));
var t2 = new DateTimeOffset(2018, 5, 15, 12 + 1, 0, 0, TimeSpan.FromHours(1));
var t3 = new DateTimeOffset(2018, 5, 15, 12, 0, 0, TimeSpan.FromHours(1));

Console.WriteLine($"{t1} : {t2} = {t1 == t2}");
Console.WriteLine($"{t1} : {t3} = {t1 == t3}");

DateTimeOffset型のt1~t3の比較です

コンソールにどうでるかというと

A

2018/05/15 12:00:00 +00:00 : 2018/05/15 13:00:00 +01:00 = True
2018/05/15 12:00:00 +00:00 : 2018/05/15 12:00:00 +01:00 = False

t1とt3が異なるのは当たり前ですが、t1とt2は同じ値ということになります

DateTimeOffset.Equals Method (DateTimeOffset, DateTimeOffset) (System)

にも同じこと書いてあるのでそういうものなんですね (UTCでの比較しかしないのかな?)

注意

そういうものなんですが、そういうものだと気づかずに困ったのが変更通知するプロパティです

// こんなの作ってあったとして
static ReactiveProperty<DateTimeOffset> Time = new ReactiveProperty<DateTimeOffset>();

Time.Value = t1;    // 変更通知が飛ぶ
Time.Value = t2;    // この代入では変更通知が飛ばない

って感じになります

ReactivePropertyが悪いわけではないですよ

自分で書いてもif (_time == value) return;とか書くしDateTimeOffsetが同じって言うなら同じ値なんですよね

気を付けよう