読者です 読者をやめる 読者になる 読者になる

blog.toxn

あしあと

.net, sqlserverで時間を扱う時のTipsとか

時間の計算とか、保存をする際に色々ハマったので。

はじめに

時間を扱うにあたって、実世界ではよくある「25時」とか「40時間」みたいな表記を.net frameworkSQL Serverなどで用意されている時刻型データではうまく扱うことができず、文字列型で保持するような記事が散見されるのだけど、できるだけ時刻型データを使う方向で調査し得られた知見を残す。

.net編

日時データはDateTime、時間はTimeSpanを利用する。

25時とか非実在の時刻を表現するために

一度、TimeSpanに入れて、DateTimeに加算する。

giste189915923de3dbbd94503b4e67dfc57

TimeSpanをLinqで扱うとき

TimeSpanのList等を使う際には、Ticksを使う。

LinqでTimeSpanは使えず、プリミティブな数値型しか受け付けてくれないので、Ticks(long型)を介して集計等を行う。

↓例

TimeSpan-sample01.cs

SQL Server

TimeSpanはTicksにしてbigintで保持

SQL Serverにはtime型があるが、有効範囲は00:00:00.0000000〜23:59:59.999999なので、24時間以上の時間は保持できない。(MySQLは838:59:59まで保持できるのに)

数時間ならばいいが、24時間を超えた経過時間を持つ際にはTicksでの保持になる。

既にTime型で持っている場合は、次の関数でbigintに変換すればよい。

TimeToTicks.sql

参考:

time (Transact-SQL)

stackoverflow.com

stackoverflow.com

T-SQLでカレンダーを作る

日付をキーとするようなデータを1ヶ月分表示するようなときに使える。 レコードが毎日作られるとは限らない場合、テーブルに保存されているデータだけではどこが欠けているのか分からないが、これを使えば全日分並べることができる。

declare @d as date = '2017-01-01';

with _month(i) as ( select 0 as i union all select i+1 from _month where i < datediff(day, @d, EOMONTH(@d)))
select * from (select cast(DateAdd(day, i, @d) as date) as 日付 from _month) as A

何をしているのか

変数でその月の初日を用意しておく

そのまんま。

declare @d as date = '2017-01-01';

再帰CTE(共通テーブル式)を使って、その月の日数を列挙していく

そのテーブル式にwith句で_monthと名前をつけた。 EOMONTH関数を使うとその月の末日を返してくれるので、datediff関数で1日から末日までの日数差を出す。 結果、1月ならば列iに0〜30の値が入ったテーブル_monthができる。

with _month(i) as ( select 0 as i union all select i+1 from _month where i < datediff(day, @d, EOMONTH(@d)))

用意した変数に、DateAdd関数で日数を足していく

intervalをdayにして、0〜その月の日数-1 を足していけばカレンダーの出来上がり。

select * from (select cast(DateAdd(day, i, @d) as date) as 日付 from _month) as A

あとは、別のテーブルの日付とjoinすれば完了です。

「あなたのセキュリティ対応間違っています」を読んだ

僕が辻さんを知ったのは@ITの連載「セキュリティ・ダークナイト」だった。 当時、情報技術者試験のために覚えた付け焼き刃程度の知識しかなくて、辻さんの活きた話をなんだかドキドキしながら読んだ記憶がある。

そこから数年の間に、社内で勉強会やったりSECCONの地方大会でいいとこまで行けたりして、情報セキュリティについて人より詳しくなったきっかけを与えてくれた人だと思う。

転職してからは今まで以上に周りの人のセキュリティ意識が無い環境…周りに相談できる人も居ないので、どうやればダウンロードサイトのDownload Now!みたいな明らかに怪しいボタンを押さないように教育伝えていったら良いんだろうとか、パスワード管理の現実的な運用ルールとは?とか考えることが多くなった。

そんな時に僕の前に現れたのが…一冊の本だった。

<ここまで前フリ>

あなたのセキュリティ対応間違っています

あなたのセキュリティ対応間違っています

内容としては、最近話題になったセキュリティ事故を挙げて、なぜ起こったのか?事故に対してどうするべきだったのか?背景も含めて詳しく解説されている。 いつうちで起きてもおかしくないなーというケースばかりだったし、どう対応するべきか?という部分は理想を押し付けるのでなく、現実的なアドバイスを提示してくれていて、セキュリティに詳しくない人に寄り添いたいという辻さんの思いがとても感じられました。

さっくり読める分量だったし、みんな読んだらいいんじゃないかな。

子育ては大変だ

先週息子が誕生し、奥さんの実家で家族3人になって初めての一夜を過ごしているのですが…

3時間間隔でおむつ交換、授乳サポート、布団の保温、げっぷが出るまで縦抱きとやってると約1時間はかかるので、2時間睡眠時間×3セットくらいでしょうか。
リアル「マジ2時間しか寝てないわー」状態。

抱いてて寝たな…と思って布団に入れるとハプハプ言い出すので、いつ寝てくれるか(僕はいつ寝られるのか)と時の長さを感じてこれがまた(´・ω・`)

世の中のお母さんたちはご苦労されてるなと、改めて思う次第です。

でも息子は可愛いんですよね。
お雛巻き(奥さんは「たけのこ太郎」とか「春巻きちゃん」と呼んでる)してあげると、実にかわいい。
そのまま寝てるとマジ天使。無駄に写真撮っちゃう。
いいカメラが欲しくなりますね。


独自ブラウザ実装メモ

C#.netで独自ブラウザ組んでるんだけど、いろいろメモ

全体像

Windows FormアプリにWebBrowserコントロールを貼るだけ。

でもタブにも対応したいので、TabControlを貼ってWebBrowserコントロールをもつTabPageを都度増やす。

タブのカスタマイズ

CodeProjectのCustomTabControlが手軽に使えて良いと思います。

Painting Your Own Tabs - Second Edition - CodeProject

WebBrowserコントロールのブラウザ変更

デフォルトはIE7です。不安になります。 レジストリで変更可能。アプリ名がKeyで、IEのバージョンがValue。

IEのバージョンは次の値を指定。

Internet Feature Controls (B..C) (Internet Explorer)

新しいタブで開く機能

これ、結構面倒。 WebBrowserコントロールで新しいウインドウ開くときはIEが開く。やめてくれー。

WebBrowserで新しいウインドウを開くイベントをキャッチして、ウインドウを開く処理を奪い取ります。 アクティブなHTMLタグ(aタグ)を特定し、URLを指定して新しいTabPageを開くようにすると同時にIEを開くイベントをキャンセルします。

今回はIFrameにも対応。ページ遷移しないWebアプリではIFrameを使うことも多い(と思っている)ので。 Document.ActiveElementを取得しても、IFrameの中身のどのタグがアクティブかまではわからず、もう一手間必要。 Document.Window.Framesからフレームを指定して、内部のActiveElementを見ればよい。

今回作りきれてない部分

javascriptのwindow.openとか使ったとき。

[System.Runtime.InteropServices.ComVisibleAttribute(true)] で、COM扱えるようにして、public void MethodA()をC#で実装したら、

javascript側でwindow.external.MethodA()みたいに呼び出してあげればよい。

できればC#メソッドを呼び出すためのjavascriptはブラウザ側から注入してあげるのが良い。

まとめ

こんな感じ。

gist7352a2294cf96b4d14e6

1年振り返り

ダイジェスト

仕事編

  • 転職して1年経ちました
  • 強力なメンバーが参入
  • 忙しくしています

プライベート編

  • 家族が増える予定です
  • ちょっとだけ引っ越しました
  • VCP更新しました
  • ネスペ落ちました
  • 2重飛びが10回できるようになりました

仕事

冬〜春 * 販売系のシステム開発 夏〜秋 * 社内のサーバ環境一新 * 情報統制管理の基盤づくり

秋に強力な開発メンバーが来てくれたのでチームとしてはバランスも取れてかなり強力になったと感じます。 最近はもっぱらインフラ関係の整備とシステム保守。

プライベート

近々父親になる予定です。 こんなんで大丈夫かと不安ではありますが、楽しみです。

これ毎年言ってる気がしますが、今年は輪をかけてインプットもアウトプットもしていないなーと思うことが多かったように感じます。 職場の環境が変わって、かなり自由に伸び伸びと仕事させてもらえていますので、ハングリーさに欠けてたのかもなーと。

来年はプライベートが忙しくなりそうですが、月に本1冊、最低1記事を続けます。 今年はお世話になりました。2016年もよろしくお願いします。

TMCTF Writeup

開催当日も仕事だったのでがっつり出来ませんでしたが、今まで参加したCTFと比べてレベル高くて降参って感じでした。

自力で唯一解けたのがMisc100

ACROSS

3 A technique used for a piece of email to be sent to specific organisations 

SPEAR PHISHING

6 An effective measure that protects unpatched vulnerabilities on a system 

VIRTUAL PATCHING

8 Indicator of Compromise 

IOC

9 The year the company hosting TMCTF was founded 

EIGHTY EIGHT (1988)

11 Malware or technique used by cybercriminals that were arrested by FBI in 2011. The company hosting TMCTF contributed to this case. 

DNS CHANGER

12 Global Technical Support and R&D Center of the company hosting TMCTF 

TREND LABS

14 A piece of malware that prevents you from accessing your files and asks for money 

RANSOMWARE

15 Something that was compromised in CMS in the following video: https://youtu.be/z5FXxnHiZOQ?list=PL08763C67B0C84AA1

VULNABILITY (2:18)

16 Annoying email or canned food 

SPAM

17 A server used by cybercriminals to communicate with a piece of malware planted in corporate network 

COMMAND AND CONTROL

19 Where the main character got infected with malware in the following video: https://youtu.be/ws7Hqb-GPnc?list=PL08763C67B0C84AA1

SxxxExxxTxxxx (DOWN19から)

21 Current CEO of the company hosting TMCTF 

EVA CHEN

23 Also known as 'internet' 

CLOUD

24 Breach detection solution from the company hosting TMCTF 

DEEP DISCOVERY

DOWN

1 Free malware scanning tool from the company hosting TMCTF

HOUSECALL

2 What assumuption does the narrator say is required in the following video: https://youtu.be/0hs8rc2u5ak

BREACH WILL HEPPEN (5:08)

4 A type of malware used for stealing data from corporate network 

BACKDOOR

5 Datacenter security platform from the company hosting TMCTF 

DEEP SECURITY

7 International law enforcement working with the company hosting TMCTF 

INTERPOL

10 The company hosting TMCTF 

TRENDMICRO

13 Malware that was prevalent in late 90s and now resurging in 2015 

MACROVIRUS

18 Cyber attack targeting specific organisation 

APT

19 System used for industrial control system 

SCADA

20 Where the company hosting TMCTF is headquartered 

TOKYO

22 A unique executive position within the the company hosting TMCTF

CCO

先頭の文字を並べるとSVIEDTRVSCSECDHBBDITMASTCになります。 MD5かけたのがflagなので、TMCTF{88f5505a45c9e176e36898095f505187}

あとはチームメイトが解いてくれましたが、200問題以降お手上げ状態。まだまだ実力不足だなーと感じました。