2018年12月28日金曜日

iCalendar 仕様

iCalendar 仕様

iCalendar コンテンツの作成にとりあえず役立ちそうな情報の抜書き。(正確な仕様は RFC にあたること)

目次

仕様書

iCalendar は RFC で定義されている。
  • RFC2445 (November 1998) Internet Calendaring and Scheduling Core Object Specification (iCalendar)
  • RFC2446 (November 1998) iCalendar Transport-Independent Interoperability Protocol (iTIP) Scheduling Events, BusyTime, To-dos and Journal Entries
  • RFC2447 (November 1998) iCalendar Message-Based Interoperability Protocol (iMIP)

全般

  • MIME タイプは text/calendar。テキストファイルとして記述。(RFC2445 3.1)
  • ファイル拡張子は ics、Macintosh ファイルタイプコードは iCal。free or busy time information のみ ifb。Macintosh では iFBf。(RFC2445 3.10)
  • 各行の区切りは CR+LF。(RFC2445 4.1)
  • 1行 75 octet 以内。行頭に空白を入れない。2行以上続ける場合に、2行目以降の行頭に空白を入れる。(RFC2445 4.1)
  • デフォルトの文字セットは UTF-8。(RFC2445 4.1.4)
  • 日付と時刻を一緒に記述する時は、間を T で区切る。例: 19980119T230000 (RFC2445 4.3.5)
    これらの日付時刻書式は、ISO 8601 Data Elements and Interchange Formate -- Information Interchange -- Representation of Dates and Times に定められた形式。
  • 時刻は、末尾に Z がつけば UTC、つかなければローカル時間。(RFC2445 4.3.12)

構造

   
BEGIN:VCALENDAR
PRODID:
VERSION:2.0
METHOD:PUBLISH
   
   
BEGIN:VTIMEZONE
TZID:...
   
   
BEGIN:STANDARD
 :
END:STANDARD
   
   
BEGIN:DAYLIGHT
 :
END:DAYLIGHT
   
   
END:VTIMEZONE
   
   
BEGIN:VEVENT
ORGANIZER:MAILTO:CI5M-NMR@asahi-net.or.jp
DTSTART;VALUE=DATE:20001009
DTEND;VALUE=DATE:20001010
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=MO;BYMONTH=10;BYSETPOS=2;WKST=SU
LOCATION:
TRANSP:TRANSPARENT
SEQUENCE:
UID:
DTSTAMP:
CATEGORIES:
DESCRIPTION:
 :
SUMMARY:
PRIORITY:
CLASS:PUBLIC
END:VEVENT
   
   
END:VCALENDAR
   

詳細

BEGIN, END

(RFC2445 4.4, 4.6) VCALENDAR, VTIMEZONE などすべてのコンポーネントは、必ず
BEGIN:コンポーネント名
ではじまり
END:コンポーネント名
で終わらなければならない。

VCALENDAR

(RFC2445 4.7)
CALSCALE
(RFC2445 4.7.1) ?????????????????? 今のところ、定義済みはデフォルトの GREGORIAN だけ。
PRODID
(RFC2445 4.7.3) 必須。iCalendar オブジェクトを生成したアプリケーションの識別情報。
VERSION
(RFC2445 4.7.4) 必須。RFC2445 は 2.0。
METHOD
(RFC2445 4.7.2) ???? 値には PUBLISH, REQUEST がある? MIME メッセージで使用する場合、Content-type "method" の値と一致しなければならない。
(RFC2446) ??????????????????????

VTIMEZONE

(RFC2445 4.6.5) タイムゾーンの情報を定義する。TZID と、最低1つの STANDARD または DAYLIGHT の定義を含んでいなければならない。
日本の場合は次の記述でよい?
BEGIN:VTIMEZONE
TZID:Japan
BEGIN:STANDARD
DTSTART:19390101T000000
TZOFFSETFROM:+0900
TZOFFSETTO:+0900
TZNAME:JST
END:STANDARD
END:VTIMEZONE
TZID
必須。タイムゾーンを識別するための文字列。
STANDARD
(RFC2445 4.6.5) 標準時刻の情報。DTSTART, TZOFFSETFROM, TZOFFSETTO を含まなければならない。 ただし Microsoft Outlook 2000 (以下 Outlook) では DTSTART を省略している?
DTSTART
タイムゾーンの使用がはじまった日時???
TZOFFSETFROM
(RFC2445 4.8.3.3) VTIMEZONE に必須。現在のタイムゾーンがはじまる前に使われていたタイムゾーンの UTC からのオフセット???(夏時間がある地域の場合は、夏時間のオフセット???)
TZOFFSETTO
VTIMEZONE に必須。現在のタイムゾーンの UTCからのオフセット???
DAYLIGHT
夏時間の情報。DTSTART, TZOFFSETFROM, TZOFFSETTO については STANDARD に同じ。

VALARM

(RFC2445 4.6.6) 未調査。

VEVENT

ORGANIZER
(RFC2445 4.8.4.3) カレンダー・コンポーネントのOrganizer(主催者)情報。グループのスケジュール・カレンダーをもつコンポーネントには必須。
ORGANIZER;CN=NOMURA Mahito:MAILTO:CI5M-NMR@asahi-net.or.jp
CONTACT
(RFC2445 4.8.4.2) カレンダー・コンポーネントに関連した情報のコンタクト先。
DTSTART
(RFC2445 4.8.2.4) 開始日時。定期的なイベントの場合は、最初の分の開始日時。
タイムゾーンを明示する場合は、
DTSTART;TZID=Japan:19970714T133000
のようにあらかじめ VTIMEZONE で宣言した TZID を指定する。
DTEND
(RFC2445 4.8.2.2) 終了日時。定期的なイベントの場合は、最初の分の終了日時。(祝日のように終日の場合は、翌日の 00:00:00 を指定すればよい?)
RRULE
(RFC2445 4.8.5.4) 定期的なイベントについて、頻度、月日、間隔などの規則。
RRULE;FREQ=DAILY;COUNT=10
(DTSTART の日から同一時刻で毎日、全10回) 以下の指定可能な属性は (RFC2445 4.3.10) を参照。
BYMONTH
実際の月の指定。
BYMONTHDAY
BYMONTH と組み合わせて、実際の日の指定。マイナスの場合は、DTSTART から値の分だけ先行する期間。
BYDAY
LOCATION
(RFC2445 4.8.1.7) 場所の指定。
TRANSP
(RFC2445 4.8.2.7) 設定した時間の状態。OPAQUE (デフォルト), TRANSPARENT が指定可能。 Outlook では「予定の公開方法」に反映される。これがなかったり TRANSP:OPAQUE だと「予定あり」、TRANSP:TRANSPARENT が指定されていると「空き時間」
SEQUENCE
(RFC2445 4.8.7.4) リビジョンのシーケンス番号。カレンダーコンポーネントがはじめて作成された時に0、Organizerによる修正更新があるたびに増分。
UID
(RFC2445 4.8.4.7) Unique Identifier、全世界でユニークな永続的ID。RFC 822 の addr-spec に従ったシンタックスを推奨。
メールやネットニュースのMessage-IDみたいなものか。
DTSTAMP
(RFC2445 4.8.7.2) オブジェクトの作成日時。 Outlook では必須。
CATEGORIES
(RFC2445 4.8.1.2) コンポーネントを分類するためのカテゴリー。 Outlook の「分類」に対応。
SUMMARY
(RFC2445 4.8.1.12) カレンダー・コンポーネントの短いサマリまたはサブジェクト。
件名、見出しに相当。
DESCRIPTION
(RFC2445 4.8.1.5) SUMMARY に対して、カレンダー・コンポーネントの完全な説明。
本文に相当。
PRIORITY
(RFC2445 4.8.1.9) 相対的な優先度を示す整数。最低は0(優先度なし)。
CLASS
(RFC2445 4.8.1.3) アクセス許可の区分。PUBLIC(デフォルト), PRIVATE, CONFIDENTIAL が定義済み
RELATED-TO
(RFC2445 4.8.4.5) 他のカレンダー・コンポーネントとの関連を示す。通常、該当するコンポーネントのUIDを指定。
RELTYPE
(RFC2445 4.2.15) RELATED-TO で示される他コンポーネントとの関係を明示する。PARENT(デフォルト), CHILD, SIBLING

テンプレート

テンプレート。
BEGIN:VCALENDAR
PRODID:-//NOMURA Mahito//Manually//EN
METHOD:PUBLISH
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Japan
BEGIN:STANDARD
DTSTART:19390101T000000
TZOFFSETFROM:+0900
TZOFFSETTO:+0900
TZNAME:JST
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
UID:
DTSTAMP:
SUMMARY:
LOCATION:
DESCRIPTION:
DTSTART;TZID=Japan:
DTEND;TZID=Japan:
RRULE:FREQ=;INTERVAL=;BYMONTH=;BYMONTHDAY=
CATEGORIES:
TRANSP:TRANSPARENT
PRIORITY:0
CLASS:PUBLIC
END:VEVENT
END:VCALENDAR

実装

Outlook 2000 用の .ICS を作る過程で気づいたことのメモ。
  • 1ファイルには1つの VCALENDAR しか記述できない? 2つ以上記述しても、Outlook では最初のものしか認識しない。
  • Outlook 2000 では、1年以上の周期をもつイベント RRULE:FREQ=YEARLY;INTERVAL=2 以上 を認識できない。ただし、月数で1年(12ヶ月)以上の周期は指定できる。
元ネタ http://www.asahi-net.or.jp/~CI5M-NMR/iCal/ref.html

ASP.NET MVCでiCalendarのサービスを追加

ASP.NET MVCのグループウェアを作成後
スマホでカレンダーを見たいと要望される。

ASP.NET MVCでiCalendarのサービスを追加
Nugetから iCal.Netを追加して対応しました。


2018年12月25日火曜日

ASP.NET MVCのKANBAN Library


ASP.NET MVCのKANBAN Libraryを探していたからNugetにあった。

元はgithubに
https://github.com/DlhSoftTeam/Angular-Kanban

個人で管理するならこれくらいで十分
todo見たいに管理出来るから簡単なイメージが良いです。

2018年12月14日金曜日

Telerik ASP.NET MVC Schedulerの日付設定

Kendo().Schedulerで当日日付の指定

@(Html.Kendo().Scheduler<AskaGroup.Models.EventViewModel>()
    .Name("scheduler")
    .Date(new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day))
    .StartTime(new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 9, 00, 00))

    .Height(600)
    .Views(views => {
        views.DayView();
        views.WeekView(weekView => weekView.Selected(true));
        views.MonthView();
        views.AgendaView();
    })
    .Timezone("Etc/UTC")
    .DataSource(d => d
        .Model(m => {
            m.Id(f => f.EventID);
            m.Field(f => f.OwnerID).DefaultValue('1');
            //Set the recurrence ID field from the model:
            m.RecurrenceId(f => f.RecurrenceID);
        })
        .Read("Event_Read", "SDL")
        .Create("Event_Create", "SDL")
        .Destroy("Event_Destroy", "SDL")
        .Update("Event_Update", "SDL")
    )
)

2018年11月27日火曜日

2018年11月6日火曜日

DataPump(expdp,impdp)処理をCtrl+C押しでキャンセルさせてしまった時の対処方法

DataPump(expdp,impdp)処理をCtrl+C押しでキャンセルさせてしまった時の対処方法

OracleでexpdpやimpdpといったData Pumpを実行中に、expコマンドのようにCtrl+Cで処理をキャンセルしてはいけません。 そこがややこしいところ。
もしCtrl+Cでキャンセルしても、処理はバックグラウンドで動き続けます。
というわけで、Data Pumpを実行中に誤ってCtrl+Cでキャンセルしてしまった時の対処方法をご紹介です。

JOB名から停止する

処理のJOB名を確認します。
1$ sqlplus sys as sysdba
2select * from DBA_DATAPUMP_JOBS;
3----
4job_expdp1
5----
動作中のJOB名が job_expdp1 ということが分かりました。
あとはこのJOBを指定してコマンドモードに接続して kill_job を発行すれば完了です。
1$ expdp hoge/hogepass attach = job_expdp1
2Export> kill_job
3このジョブを停止しますか([yes]/no)yes
これでバックグラウンドで動作していたData Pump処理が強制終了されます。

元ネタ http://www.lesstep.jp/step_on_board/oracle/77/

2018年11月2日金曜日

Oracle ExpDpのパラメータ and ImpDpのパラメータ

batch file
expdp user/pass@ORCL parfile=exp_m.txt

exp_m.txt
DIRECTORY=ORA_EXP
DUMPFILE=exp_m
LOGFILE=exp_m.log
reuse_dumpfiles=YES
TABLES=(hogehome)



batch file
impdp user/pass@ORCL parfile=imp_m.txt


imp_m.txt
directory=ORA_EXP
dumpfile=exp_m.dmp
logfile=impdp_m.log
TABLE_EXISTS_ACTION=REPLACE
TABLES=(hogehoge)