ORACLEで和暦の一覧を取得するSQL

はじめに

和暦の一覧を取得するSQLです。
SelectBox等のリストとして利用できるかと思います。
適当に組み替えてvalueの値等を追加してください。

SQL

with master as (
    -- 疑似的な和暦のマスターです。
    -- このままでも、テーブルでも。
    select 'T' as code, '大正' as name, to_date('19120730','yyyymmdd') as start_date, to_date('19261224','yyyymmdd') as end_date from dual
    union all
    select 'S', '昭和', to_date('19261225','yyyymmdd'), to_date('19890107','yyyymmdd') from dual
    union all
    select 'H', '平成', to_date('19890108','yyyymmdd'), to_date('20190430','yyyymmdd') from dual
),
list as (
    -- 大正の開始からSYSDATE時点までのレコードを取得します。
    select add_months(to_date('19120101','yyyymmdd'), (level - 1) * 12) as temp from dual connect by level <= to_number(to_char(sysdate, 'yyyy')) - 1912 + 1
)
select
    code
    , name
    , rank() over (partition by code order by temp) as japan_year -- 年号毎の年を取得。
    , to_char(temp, 'yyyy') as ad
    , start_date
    , end_date 
from
    list
    inner join master on
        to_char(list.temp, 'yyyy') between to_char(master.start_date,'yyyy') and to_char(master.end_date,'yyyy')
order by ad, start_date
; 

さいごに

参考にしていただいた結果、何らかの不具合等が発生しても責任は負いかねます。
万が一そのままコピペで利用される場合でも、念入りに試験をお願いします。

ORACLEで特定のオブジェクトから関連するオブジェクトを取得するSQL

はじめに

時折業務中に特定のオブジェクト(ViewとかProcedureとか)から参照しているオブジェクトの一覧が欲しい時に利用しているSQLです。
階層問い合わせを利用して取得しています。

SQL

select
    name
    , type
    , referenced_name
    , referenced_type
    , level 
    , sys_connect_by_path(name,' -> ') as path
from
    user_dependencies 
start with
    name = [objectName] -- 調べたいViewとかProcedureとかの名前を入れます。
connect by
    nocycle prior referenced_name = name
order siblings by name; 

これでばーっと出てくるはずです。
必要な項目を適当に足したりしながら利用します。

おわりに

調査に利用するSQLに何か誤りがあると笑えないので、利用する際は他の手段でも一度ご確認ください。
何かあっても責任は負いかねます…。

Windows10上にVagrant+VirtualBoxで環境を作る

はじめに

Windows上に汚れたら使い捨てられる開発環境を作りたいと思い立ちました。 業務でよく使っているのはVMwareなのですが、折角なのでVirtualBox+Vagrantでubuntuの環境を立ち上げて見たいと思います。
そのメモです。

VirtualBoxのインストール

https://www.virtualbox.org/wiki/Downloads
Windowsなので”Windows hosts”のリンクからダウンロードします。
ダウンロード完了後、インストールを実施します。
いくつか質問が来ますが、次々進んで大丈夫(のはず)です。

Vagrantのインストール

https://www.vagrantup.com/downloads.html
Windowsの欄にあるリンクからダウンロードします。
32bit/64bitは端末に合わせてください。
こちらもいくつか質問が来ますが、次々進んで大丈夫(のはず)です。

インストール後に再起動を行います。
そしてコマンドプロンプトで

$ vagrant -v
Vagrant 2.2.3

な感じで表示されればOKです。

ディレクトリの作成

今回はubuntuが動く様にしたいので、以下の様なディレクトリを作成して移動します。

$ mkdir ./vagrant
$ cd ./vagrant
$ mkdir ./ubuntu
$ cd ./ubuntu

インスタンスの作成&実行

https://app.vagrantup.com/boxes/search
にアクセスし、利用したいBOXを探す。
今回はubuntuなので、
https://app.vagrantup.com/ubuntu/boxes/bionic64
を利用する事にする。
公式のBOXなのかな?

# 初期化。 この時点ではまだBoxはダウンロードされないのですぐに終わる。
$ vagrant init ubuntu/bionic64
# 実行。 ここでダウンロードが行われるので中々時間がかかる…。
$ vagrant up

ネット環境や時間によるとは思うのですが、私の環境ではかなり時間がかかりました。 20分~60分程…。 時間がかかりそうな場合は他の事でもして気長に待ちましょう…。

ダウンロードが完了するとubuntuを立ち上げようとしますが、この時BIOSがどうのでエラーが発生しました。
書かれているメッセージに従って、Windowsを再起動してBIOS画面に入り仮想化支援機能(?)を有効にします。 その後再度ubuntuを立ち上げると正常に起動しました。
BIOS画面は端末により異なると思いますので、以下のページ等を参考に設定しましょう。
ただ、ここで立ち上がらない原因はいくつかある様なので、状況によってGoogle先生等に訊いて進める必要がありそうです。

$ vagrant ssh

で、立ち上げたubuntuに繋がれば起動OKです。

とりあえずここまででubuntuが立ち上がりました。
しかしVagrantfileとかその他諸々にかなりの設定項目があるので、ほとんど把握できていません。 色々試したいと思います。

おわりに

この環境を使って、何かアプリを作っていきたいと思います。

普段、要件とか設計とかがメインになのでこの辺りは素人同然なので、ツッコミどころや誤りがあればご教授いただければありがたいです。
ありがとうございました。

ラズパイで定期的に撮影してGoogleDriveにアップ

はじめに

少し後に長期間自宅を空けるのでラズパイで定点カメラを作ります。
外から直接参照しようとすると、明るくないセキュリティの部分に不安があるのでGoogleDriveにアップロードしてそこで参照出来る様にします。

用意したモノ

動くRaspberyy Pi Model B+ ( OS:raspbian )
純正のカメラ ( https://amzn.to/2GkzC0D )

カメラを接続

カメラをラズパイに接続します。
接続するのはHDMI端子のところです。 破損させたりしない様に注意しながら引き上げます。 カメラを接続する時の向きは、HDMI端子側に銀色の部分が見える様にするのが正しい様です。

接続後、カメラの機能を有効にします。

$ sudo raspi-config

とすると設定画面が表示されるので

と進んでカメラの機能を有効にします。

カメラ撮影の確認

以下のコマンドで写真を撮影出来るか確認します。

$ raspistill -o test.jpg
$ ls -l
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Desktop
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Documents
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Downloads
drwxr-xr-x 2 pi pi    4096 11月 13 22:45 MagPi
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Music
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Pictures
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Public
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Templates
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Videos
-rw-r--r-- 1 pi pi 3262251  2月  4 00:38 test.jpg
drwxr-xr-x 3 pi pi    4096  2月  1 23:52 tool

な感じで撮影できていればOKです。
画像の確認は、ラズパイの画面で確認するか抜き出してきて確認するかで行います。

UPLOADの準備

写真を撮影出来たので、次はGoogleDriveにファイルをアップロードできる様にします。
GoogleDriveAPIを利用して自前で実装する事も可能だと思うのですが、現状あまり時間が無いので凄い人が公開してくれているモノを利用させていただきます。

gdrive
https://github.com/prasmussen/gdrive

README.mdでラズパイ向けのダウンロードパスを確認し、curlでダウンロードします。

# ダウンロード
$ curl -L -o gdrive-linux-rpi "https://docs.google.com/uc?id=0B3X9GlR6EmbnVXNLanp4ZFRRbzg&export=download"
# 実行権限付与
$ chmod +x gdrive-linux-rpi
$ ls -l
合計 6076
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Desktop
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Documents
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Downloads
drwxr-xr-x 2 pi pi    4096 11月 13 22:45 MagPi
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Music
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Pictures
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Public
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Templates
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Videos
-rw-r--r-- 1 pi pi 6180256  2月  4 23:27 gdrive-linux-rpi # ←ダウンロードしたファイル
drwxr-xr-x 3 pi pi    4096  2月  1 23:52 tool
# 好みの場所に移動
$ mv ./gdrive-linux-rpi /usr/bin

使いやすい様に”gdrive”とかでエイリアスを作っておくと便利だと思います。
ラズパイの場合は”~/.bash_aliases”に書いておけば良さそうです。

alias gdrive="gdrive-linux-rpi"

まずは認証を行う必要があるので、List取得用のコマンドを発行します。

$ gdrive list

すると、認証が必要だからとかと一緒にURLが表示されるのでブラウザにコピペしてアクセスし、認証を行い表示されるコードを貼り付けて認証を完了します。

アップロードの準備は出来たので、試しにアップロードを行ってみます。

# ディレクトリIDはブラウザでGoogleDriveにアクセスして対象ディレクトリを表示した時のURLで確認。
$ gdrive upload --parent [ディレクトリID] [アップロードファイル]

上記でアップロードされればOKです。

定期実行する為のShellを作成

定期実行はcronを利用する予定なので、Shellを作成し処理をまとめます。
流れとしては、

・ファイル名取得
・取得したファイル名で写真撮影
・取得したファイル名のファイルをアップロード

だけです。
以下、そのサンプルです。
写真ファイルを保存するディレクトリや、カレントディレクトリはお好みで。

#!/bin/bash

# ファイル名取得
# 形式:yyyyMMdd-hhmmss.jpg 
PIC_NAME="`date +%Y%m%d-%H%M%S`.jpg"
# 撮影
raspistill -o $PIC_NAME
# アップロード
# ※Shellの中ではエイリアスを使えない
gdrive-linux-rpi upload --parent [ディレクトリID] $PIC_NAME

作成したShellに実行権限を付与し、実行して撮影→アップロードが出来れば成功です。
尚、連続でやりすぎるとGoogleDriveAPIの制限に引っかかってエラーが発生します。 条件はいまいち不透明です…。

cron設定

次にcronの設定を行い、作成したShellを定期実行される様にします。

$ crontab -e

で、cronの設定を表示し、

*/5 * * * * [Shellをフルパス指定]

な感じで設定します。
上記の例だと5分おきにShellがキックされます。 cronの設定は、解りやすく解説しているページが多数ありますので、そちらを参照下さい。

おわりに

ここまでで定期的に撮影してGoogleDriveにアップロードが行われると思います。
簡単な処理で外出先から家の中を確認出来るので、それなりに使える…? と思っていますが、いざ何かがあったらどうしたら良いのか…という点に気付きました。 あまり確認しない方が良い気がしてきました。

今回はアップロードの部分を便利なgdriveに頼らせていただきましたが、近い内に勉強を兼ねて自前で実装したいと思います。

参考

ありがとうございました。