管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

Windows 10でカレンダーをショートカットキーで開く

在宅勤務になり、机上にカレンダーを置かずに、Windows 10のカレンダー(タスクバー右端の日時をクリックすると出てくるやつ)を参照することが増えました。ショートカットキーで開けたらなーと思って調べてみたところ、ショートカットキーで開けたのでメモ

確認したバージョン

Windows 10 Home 2004
OSビルド 19041.746

カレンダーを開くショートカットキー

Win + Alt + D

参考にしました

Windows 10ではWinキーを使ったショートカットキーが増えましたね

Window関数で日付の”飛び”をチェックする(PostgreSQL)

Window関数を使って、日付が含まれるテーブルの、日付の”飛び”をチェックする

検証環境

PostgreSQL 9.6.4 on x86_64-pc-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit

今回集計対象のデータ

日ごとの電話番号別のパケット使用量です。日付の"飛び"とは、20210205→20210203の様に、日付が連続していないことです。なお、以下のデータには"飛び"はありません。

servicecode packet_date packet_withcoupon packet_withoutcoupon
AAAAAAAAAAA 20210205 0 1
CCCCCCCCCCC 20210205 1 0
DDDDDDDDDDD 20210205 0 0
BBBBBBBBBBB 20210205 273 1
AAAAAAAAAAA 20210204 0 1
CCCCCCCCCCC 20210204 1 1
DDDDDDDDDDD 20210204 0 0
BBBBBBBBBBB 20210204 467 1
AAAAAAAAAAA 20210203 1 1
CCCCCCCCCCC 20210203 1 1
DDDDDDDDDDD 20210203 1 0
BBBBBBBBBBB 20210203 250 1
AAAAAAAAAAA 20210202 1 1
CCCCCCCCCCC 20210202 1 1
DDDDDDDDDDD 20210202 1 1
BBBBBBBBBBB 20210202 273 1
AAAAAAAAAAA 20210201 1 0
CCCCCCCCCCC 20210201 1 0
DDDDDDDDDDD 20210201 1 0
BBBBBBBBBBB 20210201 110 0

テーブルデータを集計し、レコードの日付の1つ前の日付と、その差分を表示する

Window関数(lag)を利用して、1つ前のレコードを取得します。

select
    packet_date
 /* 日付昇順でソートし、lagで1つ前のレコードの値(1つ前の日付)を取得 */
   ,lag(packet_date, 1) over(order by packet_date) prev_date
 /* packet_dateは文字列型のため、Timestamp型にキャストの上差分を計算 */
   ,TO_TIMESTAMP(packet_date, 'YYYYMMDD') - TO_TIMESTAMP(lag(packet_date, 1) over(order by packet_date), 'YYYYMMDD') date_diff
from
    ( /* 日付の重複を排除した上で集計 */
     select
         packet_date
     from
         t_packet_volumes
     group by
         packet_date
     order by
         packet_date
    ) a
order by
    packet_date desc

実行結果はこんな感じです。

packet_date prev_date date_diff
20210205 20210204 1 day
20210204 20210203 1 day
20210203 20210202 1 day
20210202 20210201 1 day
20210201 20210131 1 day

上記のSQLを応用して、2日以上間隔が開いている日付を求める

上記のwhere句に

where
    lag(packet_date, 1) over(order by packet_date) prev_date > '1days'

としたら、where句にはWindow関数は使えん、と怒られたので、美しくないけど以下のように書いてみた

select
    *
from
   (
    select
        packet_date
       ,lag(packet_date, 1) over(order by packet_date) prev_date
       ,TO_TIMESTAMP(packet_date, 'YYYYMMDD') - TO_TIMESTAMP(lag(packet_date, 1) over(order by packet_date), 'YYYYMMDD') date_diff
    from
        (
         select
             packet_date
         from
             t_packet_volumes
         group by
             packet_date
         order by
             packet_date
        ) a
    order by
        packet_date desc
   ) b
where
    date_diff > '1days'
order by
    packet_date desc

from句内にlagを使ったSQLの結果を入れて、それに対して絞り込みを入れました。
実行結果は以下の通り。想定通りの結果が得られました。

packet_date prev_date date_diff
20201202 20201130 2 days

参考にしました

RDSでインスタンスが停止してからの経過時間を調べる(Powershell)

RDSは停止保持は最大7日までです。それ以上経過すると起動します。
マネコンを見ずとも、指定したRDSインスタンスが停止してからどれくらい経ったかを知りたかったので、Powershellスクリプトを書いてみました。
対象となるRDSの状態を、CloudTrailの結果から取得することで判定しています。
Powershellだと、JSONファイルのパースだとか、文字列日付のオブジェクト変換だとかを良しなにやってくれるのでサクっと書くことができました。

検証環境

PS C:\Users\hoge\> $PSVersionTable.PSVersion


Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      19041  610

ソース

単一のインスタンスのみを対象としています。
また、

  • AWS CLIがセットアップしてあること
  • CloudTrailの「lookup-events」可能な権限を有していること

が条件です。

param(
    [string]$rdsInstanceName    # RDSのインスタンス名
)

# エラーがあった時点で処理終了
$ErrorActionPreference = "stop"

function script:Main($filepath) {
    $filename = ".\temp_ctRDSStats.json"

    # 引数チェック(未指定なら終了)
    if($rdsInstanceName -eq ""){
        Write-Host "RDSのインスタンス名を指定してください"
        exit
    }

    # CloudTrailのAPIを叩いて結果をファイル出力する
    $ctRDSStats = (aws cloudtrail lookup-events `
    --lookup-attributes AttributeKey=EventSource,AttributeValue=rds.amazonaws.com `
    --lookup-attributes AttributeKey=ResourceType,AttributeValue=AWS::RDS::DBInstance `
    --lookup-attributes AttributeKey=ResourceName,AttributeValue=$rdsInstanceName `
    --query "Events[*].{EventName:EventName,EventTime:EventTime}" `
    --output json)

    try{
        $ctRDSStats | Out-File -FilePath $filename -Encoding utf8
    } catch {
        Write-Error "IOエラーが発生しました"
    }

    $ctRDSStatsJson = (Get-Content -Path $filename | ConvertFrom-Json)

    # オブジェクト化したJSONの先頭要素(一番最近発生したイベント)を取得
    # イベントに応じて処理を分岐
    # DeleteDBInstance-> 削除済みの旨表示
    # StopDBInstance-> 現在事項―イベント発生時刻を計算
    # StartDBInstance-> 起動中の旨表示
    # CreateDBInstance-> 起動中の旨表示

    # イベントが1つもなければ処理終了
    if($ctRDSStatsJson.Count -lt 1){
        Write-Host "イベントがありません"
        exit
    }

    $firstItem = $ctRDSStatsJson[0]

    if($firstItem.EventName -eq "StopDBInstance"){
        # 文字列からDateTime型に変換
        $eventTime = [DateTime]$firstItem.EventTime

        # 現在時刻 - イベント発生時刻を計算
        $now = Get-Date
        $dateDiff = $now - $eventTime

        Write-Host "インスタンス:" $rdsInstanceName "は停止から" $dateDiff.Hours "時間経過しています"
    }elseif ($firstItem.EventName -eq "DeleteDBInstance") {
        Write-Host "インスタンス:" $rdsInstanceName "は削除済みです"
    }elseif ($firstItem.EventName -eq "StartDBInstance" -Or $firstItem.EventName -eq "CreateDBInstance"){
        Write-Host "インスタンス:" $rdsInstanceName "は実行中です"
    }else{
        Write-Host "不明なイベントです:" $firstItem.EventName
    }
}

Main $rdsInstanceName

実行例

当該インスタンスが稼働中の場合

PS C:\Users\check_rds_wakeup_time> .\check_rds_wakeup_time.ps1 runningdb

インスタンス: runningdb は実行中です

当該インスタンスが削除済みの場合

PS C:\check_rds_wakeup_time> .\check_rds_wakeup_time.ps1 deleteddb

インスタンス: deleteddb は削除済みです

当該インスタンスが停止中の場合

PS C:\check_rds_wakeup_time> .\check_rds_wakeup_time.ps1 stoppeddb

インスタンス: stoppeddb は停止から 22 時間経過しています

当該インスタンスが存在しない場合

PS C:\Users\check_rds_wakeup_time> .\check_rds_wakeup_time.ps1 notexisteddb

イベントがありません

参考にしました

docs.aws.amazon.com

Dockerをバージョンアップしたら既存のコンテナで「Unknown runtime specified docker-runc」が発生したので対処したメモ

Dockerfileをビルドしたところ「invalid reference format」が表示されました。どうやらDockerが古いためらしく、Dockerをバージョンアップしました。その結果、既存のコンテナで「Unknown runtime specified docker-runc」が発生したので対処したメモです。

  • 確認環境
  • 発生事象
  • 対処(hostconfig.jsonの"Runtime"を"runc"に変更する)
    • ランタイムを調べる
    • hostconfig.jsonを直すため、Idを調査
    • hostconfig.jsonのあるフォルダへ移動(Idがディレクトリ名になっている)
    • hostconfig.jsonを修正
    • dockerのリスタート
    • 再度コンテナをstartする->OK
  • 参考にしました
続きを読む

pysparkでFitbitの睡眠JSONをパースして平日と休日の平均睡眠時間を求めてみた

pysparkでFitbitの歩数JSONをパースして、平日と休日の平均歩数を求めてみました。

↓PySparkで歩数JSONを平日・休日別に集計

↓Pythonでの睡眠時間比較

  • 確認環境
  • コード
  • 実行結果例
  • 2019年、2020年の月別、平日・休日別平均睡眠時間
  • 参考にしました
続きを読む

DockerでPySparkとJupyterNotebook環境を利用する

PySparkとJupyterNotebookが使えるDockerコンテナがあったので使ってみました。すぐに使い始めることができるので、Dockerのありがたみを感じます。
EMRを使う前にスクリプトの動確できる環境が欲しかったので助かっています。

  • 確認環境
  • コマンド
  • (おまけ) PowershellでLinuxの$PWDを実現する
  • 参考にしました
続きを読む

pysparkでFitbitの歩数JSONをパースして平日と休日の平均歩数を求めてみた

pysparkでFitbitの歩数JSONをパースして、平日と休日の平均歩数を求めてみました。

pysparkでの歩数JSONのパース↓

pythonでの歩数比較↓
www.k-hitorigoto.online

  • 確認環境
  • コード
  • 実行結果例
  • 2019年、2020年の月別、平日・休日別平均歩数
  • 参考にしました
続きを読む