かきスタンプ

福岡でフリーランスの物流系のエンジニアやってます。

Windows環境にて Dockerを使用する(Hyper-V)

<環境>
ホストOS:Windows 10 Pro
※Home Editionでは、Hyper-Vが使えません。


Hyper-V を有効化

コントロールパネル → プログラムと機能 → Windowsの機能の有効化または無効化
にて、「Hyper-V」 のチェックをON。
 
f:id:kakisoft:20181126231119p:plain

その後、再起動。

dockerをインストール

Chocolatey(パッケージマネージャー) を使用しています。
Chocolateyのインストールはこんな感じです。
コマンドラインより実行して下さい。

choco install -y docker
choco install -y docker-compose
choco install -y docker-for-windows

完了。
 
dockerコマンドが使用できるようになっています。

初回実行時に以下のようなメッセージが出ますが、
再起動でOKです。 f:id:kakisoft:20181126225757p:plain

試しに Redmineのコンテナを動かしてみました。

Redmineコンテナ起動

docker pull redmine
docker run -p 8080:3000 -dti redmine

127.0.0.1:8080 にアクセスすると、ログイン画面が表示されます。

IDと初期パスワードは、「admin」です。

注意点

  • Hyper-V を ONにすると、virtualbox等の他の仮想環境ツールが上手く動かなくなる。(OFFにすると、再び使用できる。)
  • Hyper-V仮想マシンとして Vagrantを使う場合、設定が結構面倒。また、Hyper-Vに対応していない Boxも多い。

tsv・csv から INSERT文を作成するスクリプト

tsv または csv から INSERT文を作成するスクリプトを書いてみた。 https://kakisoft.github.io/MyTrivialTools/CreateInsertStatement.html  
 
ChromeFirefox で動作確認しています。  

使う場面

開発時、適当にテストデータを作って、サクッとデータを登録したい時。
 
f:id:kakisoft:20181028002204p:plain

ソース

特に隠してないので、「ページのソースを表示」で全部見れます。
表示されるソース 1つで動きます。
 
GitHub はこちら。
https://github.com/kakisoft/MyTrivialTools/blob/master/CreateInsertStatement.html
 
おかしい所を指摘したくなったり、突っ込み入れたりしたくなった場合は是非お願いします。

備考

フットワーク良く動かすために、外部ライブラリを使わず、素の JavaScriptオンリーで書いてます。

その他

データ長のチェック、数値チェック、必須入力チェックとか、今後入れ・・・なくてもいいかな、別に。
適当に使えりゃそれで。

IFTTT:RSS配信情報を Twitterに投稿する。

RSS配信情報を、Twitterに投稿する方法。
IFTTT という、異なるサービス通しを、上手い事繋げてくれるサービスを使っています。

ユーザ登録は、googleアカウントや FacebookでもOKです。
また、Twitter API登録は不要です。

ログインし、「My Applets」を選択

f:id:kakisoft:20180917010904p:plain

「New Applet」を選択

f:id:kakisoft:20180917010914p:plain

「+this」を選択

f:id:kakisoft:20180917010924p:plain

RSS Feed」を選択

f:id:kakisoft:20180917010933p:plain

特別な条件が無ければ「New feed item」を選択

f:id:kakisoft:20180917010943p:plain

RSS の配信元 URLを入力。その後、「Create trigger」

f:id:kakisoft:20180917010953p:plain

「+that」を選択

f:id:kakisoft:20180917011001p:plain

Twitter」を選択

f:id:kakisoft:20180917011009p:plain

特別な条件が無ければ「Post a tweet」を選択

f:id:kakisoft:20180917011014p:plain

投稿内容を編集する場合、「Add ingredient」にて、色々と設定できます。
f:id:kakisoft:20180917011635p:plain

投稿内容をセットし、「Create action」を選択

f:id:kakisoft:20180917011022p:plain

必要があれば 名前を変え、「Finish」を選択

f:id:kakisoft:20180917011300p:plain

こんな感じで投稿されます。

f:id:kakisoft:20180917011308p:plain

投稿されない場合

基本、ユーザの好きなタイミングでキックさせる事はできないのですが、明示的に起動させる事も出来ます。

「My Applet」→「Applets」→作成したApplet を選択

f:id:kakisoft:20180917011324p:plain

Check now をクリック

f:id:kakisoft:20180917011330p:plain

それでもタイムラグが発生する事があります。

ログ確認

稼働状況をログで確認できます。
f:id:kakisoft:20180917011341p:plain
f:id:kakisoft:20180917011350p:plain
f:id:kakisoft:20180917011359p:plain

RSSを自前で用意する場合

Feed Validation Service というサービスにて、 作成した RSSがフォーマットとして正しいかチェックできます。
URLを入力して確認できたり、配信する内容をコピペしてチェックする事ができます。   RSSのフォーマットの解説については、このサイト が良さげ。

RSS作成例

拡張子は、xmlでも rssでも OKでした。

<?xml version='1.0' encoding='UTF-8'?>
<rss version="2.0">
<channel>
<title>RSS Title</title>
<link>https://kakistamp.hatenadiary.jp/</link>
<description>HeadDiscription</description>
<language>ja</language>

<item>
<title>title001</title>
<link>https://kakistamp.hatenadiary.jp/</link>
<guid isPermaLink="false">1000000001</guid>
<description>description001</description>
</item>

<item>
<title>title002</title>
<guid isPermaLink="false">1000000002</guid>
<description>description002</description>
</item>

<item>
<title>title003</title>
<link>https://kakistamp.hatenadiary.jp/entry/2018/09/13/003657/</link>
<guid isPermaLink="false">1000000003</guid>
<description>description003</description>
</item>

</channel>
</rss>

必須項目

  • トップレベルの title
  • トップレベルの link(ユニークである事)
  • item内の guid
  • itemタグ内の link(これが無いと、登録時に IFTTTがエラーが出るケースがある。RSSのURLによってはスルーされたりと、よくわかりません。また、チェックが走るのは初回登録時のみで、以降は linkタグがない itemを追加しても問題なく認識されたりと、何だかよくわからない動きをする。)

注意点

  • itemごとの guid がユニークでなければ、投稿されない。
  • itemごとの title がユニークでなければ、投稿されない。
  • リンクを指定すると、リンク先が常に「ift.tt/2Nbjweo」と、変な名前になってる。(リダイレクトして、指定したページに飛ぶ)

辛みポイント

  • 構文に記述ミスがあるから投稿されないのか、追記した内容が配信済みと判断されて投稿されてないのか判別がつかない。
  • 「Check Now」を押しても、リアルタイムに更新されない。

 

特定のアドレスにメールを送る事でキックできるのですが、それでもリアルタイムという訳ではありませんでした。
実験してみたところ、最大 50分の遅延があったので、リアルタイム性を重視する用途には使いづらいです。

が、そうでない用途なら、無料でお手軽にできるので便利。

1月31日の1ヶ月後は何日? 3月31日の1ヶ月前は何日? 各種RDBで確認してみた。

『期限切れとなるのは、登録日より1ヶ月後です』
『1か月前に告知されます』
というのを見た時、「何日だろ?」と思ったのがきっかけ。
   
法的に決められたルールや、国際ルールがあるんかな。
パッとググってみた感じ、見つけきれなかったんで、RDBに聞いてみた。
 
試したのは、以下。

RDBにて、同じ結果となりました。

結果

確認した内容 結果
1/28 の1か月後 2/28
1/29 の1か月後 2/28
1/30 の1か月後 2/28
1/31 の1か月後 2/28
3/28 の1か月前 2/28
3/29 の1か月前 2/28
3/30 の1か月前 2/28
3/31 の1か月前 2/28
1/28 の1か月後(うるう年) 2/28
1/29 の1か月後(うるう年) 2/29
1/30 の1か月後(うるう年) 2/29
1/31 の1か月後(うるう年) 2/29
3/28 の1か月前(うるう年) 2/28
3/29 の1か月前(うるう年) 2/29
3/30 の1か月前(うるう年) 2/29
3/31 の1か月前(うるう年) 2/29

発行したSQL

MySQL

ver:5.7

SELECT
    DATE_ADD(CAST('2018/01/28' AS DATE), INTERVAL 1 MONTH) AS "1/28 の1か月後"
   ,DATE_ADD(CAST('2018/01/29' AS DATE), INTERVAL 1 MONTH) AS "1/29 の1か月後"
   ,DATE_ADD(CAST('2018/01/30' AS DATE), INTERVAL 1 MONTH) AS "1/30 の1か月後"
   ,DATE_ADD(CAST('2018/01/31' AS DATE), INTERVAL 1 MONTH) AS "1/31 の1か月後"

   ,DATE_ADD(CAST('2018/03/28' AS DATE), INTERVAL -1 MONTH) AS "3/28 の1か月前"
   ,DATE_ADD(CAST('2018/03/29' AS DATE), INTERVAL -1 MONTH) AS "3/29 の1か月前"
   ,DATE_ADD(CAST('2018/03/30' AS DATE), INTERVAL -1 MONTH) AS "3/30 の1か月前"
   ,DATE_ADD(CAST('2018/03/31' AS DATE), INTERVAL -1 MONTH) AS "3/31 の1か月前"

   ,DATE_ADD(CAST('2020/01/28' AS DATE), INTERVAL 1 MONTH) AS "2/28 の1か月後(うるう年)"
   ,DATE_ADD(CAST('2020/01/29' AS DATE), INTERVAL 1 MONTH) AS "2/29 の1か月後(うるう年)"
   ,DATE_ADD(CAST('2020/01/30' AS DATE), INTERVAL 1 MONTH) AS "2/30 の1か月後(うるう年)"
   ,DATE_ADD(CAST('2020/01/31' AS DATE), INTERVAL 1 MONTH) AS "2/31 の1か月後(うるう年)"

   ,DATE_ADD(CAST('2020/03/28' AS DATE), INTERVAL -1 MONTH) AS "3/28 の1か月前(うるう年)"
   ,DATE_ADD(CAST('2020/03/29' AS DATE), INTERVAL -1 MONTH) AS "3/29 の1か月前(うるう年)"
   ,DATE_ADD(CAST('2020/03/30' AS DATE), INTERVAL -1 MONTH) AS "3/30 の1か月前(うるう年)"
   ,DATE_ADD(CAST('2020/03/31' AS DATE), INTERVAL -1 MONTH) AS "3/31 の1か月前(うるう年)"

PostgreSQL

ver:9.6

SELECT
    CAST('2018/01/28' AS DATE) + interval '1 months' AS "1/28 の1か月後"
   ,CAST('2018/01/29' AS DATE) + interval '1 months' AS "1/29 の1か月後"
   ,CAST('2018/01/30' AS DATE) + interval '1 months' AS "1/30 の1か月後"
   ,CAST('2018/01/31' AS DATE) + interval '1 months' AS "1/31 の1か月後"
   
   ,CAST('2018/03/28' AS DATE) + interval '-1 months' AS "3/28 の1か月前"
   ,CAST('2018/03/29' AS DATE) + interval '-1 months' AS "3/29 の1か月前"
   ,CAST('2018/03/30' AS DATE) + interval '-1 months' AS "3/30 の1か月前"
   ,CAST('2018/03/31' AS DATE) + interval '-1 months' AS "3/31 の1か月前"   
   
   ,CAST('2020/01/28' AS DATE) + interval '1 months' AS "1/28 の1か月後(うるう年)"
   ,CAST('2020/01/29' AS DATE) + interval '1 months' AS "1/29 の1か月後(うるう年)"
   ,CAST('2020/01/30' AS DATE) + interval '1 months' AS "1/30 の1か月後(うるう年)"
   ,CAST('2020/01/31' AS DATE) + interval '1 months' AS "1/31 の1か月後(うるう年)"
   
   ,CAST('2020/03/28' AS DATE) + interval '-1 months' AS "3/28 の1か月前(うるう年)"
   ,CAST('2020/03/29' AS DATE) + interval '-1 months' AS "3/29 の1か月前(うるう年)"
   ,CAST('2020/03/30' AS DATE) + interval '-1 months' AS "3/30 の1か月前(うるう年)"
   ,CAST('2020/03/31' AS DATE) + interval '-1 months' AS "3/31 の1か月前(うるう年)"

SQL Server

ver:14.0

SELECT
    DATEADD(MONTH, 1, CAST('2018/01/28' AS DATE)) AS "1/28 の1か月後"
   ,DATEADD(MONTH, 1, CAST('2018/01/29' AS DATE)) AS "1/29 の1か月後"
   ,DATEADD(MONTH, 1, CAST('2018/01/30' AS DATE)) AS "1/30 の1か月後"
   ,DATEADD(MONTH, 1, CAST('2018/01/31' AS DATE)) AS "1/31 の1か月後"

   ,DATEADD(MONTH, -1, CAST('2018/03/28' AS DATE)) AS "3/28 の1か月前"
   ,DATEADD(MONTH, -1, CAST('2018/03/29' AS DATE)) AS "3/29 の1か月前"
   ,DATEADD(MONTH, -1, CAST('2018/03/30' AS DATE)) AS "3/30 の1か月前"
   ,DATEADD(MONTH, -1, CAST('2018/03/31' AS DATE)) AS "3/31 の1か月前"

   ,DATEADD(MONTH, 1, CAST('2020/01/28' AS DATE)) AS "1/28 の1か月後(うるう年)"
   ,DATEADD(MONTH, 1, CAST('2020/01/29' AS DATE)) AS "1/29 の1か月後(うるう年)"
   ,DATEADD(MONTH, 1, CAST('2020/01/30' AS DATE)) AS "1/30 の1か月後(うるう年)"
   ,DATEADD(MONTH, 1, CAST('2020/01/31' AS DATE)) AS "1/31 の1か月後(うるう年)"

   ,DATEADD(MONTH, -1, CAST('2020/03/28' AS DATE)) AS "3/28 の1か月前(うるう年)"
   ,DATEADD(MONTH, -1, CAST('2020/03/29' AS DATE)) AS "3/29 の1か月前(うるう年)"
   ,DATEADD(MONTH, -1, CAST('2020/03/30' AS DATE)) AS "3/30 の1か月前(うるう年)"
   ,DATEADD(MONTH, -1, CAST('2020/03/31' AS DATE)) AS "3/31 の1か月前(うるう年)"

Oracle

ver:11g

SELECT
    ADD_MONTHS(TO_DATE('2018/01/28'), 1) AS "1/28 の1か月後"
   ,ADD_MONTHS(TO_DATE('2018/01/29'), 1) AS "1/29 の1か月後"
   ,ADD_MONTHS(TO_DATE('2018/01/30'), 1) AS "1/30 の1か月後"
   ,ADD_MONTHS(TO_DATE('2018/01/31'), 1) AS "1/31 の1か月後"
    
   ,ADD_MONTHS(TO_DATE('2018/03/31'), -1) AS "3/28 の1か月前"
   ,ADD_MONTHS(TO_DATE('2018/03/31'), -1) AS "3/29 の1か月前"
   ,ADD_MONTHS(TO_DATE('2018/03/31'), -1) AS "3/30 の1か月前"
   ,ADD_MONTHS(TO_DATE('2018/03/31'), -1) AS "3/31 の1か月前"
   
   ,ADD_MONTHS(TO_DATE('2020/01/28'), 1) AS "1/28 の1か月後(閏年)"
   ,ADD_MONTHS(TO_DATE('2020/01/29'), 1) AS "1/29 の1か月後(閏年)"
   ,ADD_MONTHS(TO_DATE('2020/01/30'), 1) AS "1/30 の1か月後(閏年)"
   ,ADD_MONTHS(TO_DATE('2020/01/31'), 1) AS "1/31 の1か月後(閏年)"
    
   ,ADD_MONTHS(TO_DATE('2020/03/31'), -1) AS "3/28 の1か月前(閏年)"
   ,ADD_MONTHS(TO_DATE('2020/03/31'), -1) AS "3/29 の1か月前(閏年)"
   ,ADD_MONTHS(TO_DATE('2020/03/31'), -1) AS "3/30 の1か月前(閏年)"
   ,ADD_MONTHS(TO_DATE('2020/03/31'), -1) AS "3/31 の1か月前(閏年)"
FROM 
    DUAL

マークダウンで簡単にスライドが作れるサービス『GitPitch』の使い方(応用編)

GitHubアカウントがあれば、マークダウンでお手軽にスライドが作れるサービス「GitPitch」の使い方(応用編)を、スライドにしてみた。

https://gitpitch.com/kakisoft/HowToUseGitPitch3 f:id:kakisoft:20180913003110p:plain

GitPitchを使ってどんな事ができるのか、直感的に分かるようにしてみました。
 
第一弾として作成した、基本編はこちらです。
https://gitpitch.com/kakisoft/HowToUseGitPitch
f:id:kakisoft:20170706210414p:plain  
 
また、Font Awesome から提供されているアイコンが自由に使えるようになっていますが、全てを使えるわけではないようです。

どれが使えて、どれが使えないか分からなかったので、とりあえず全部並べてみました。
https://gitpitch.com/kakisoft/GitPitchIconList

↓こんな感じで一覧できるようにしています。
f:id:kakisoft:20180913003117p:plain

Vagrant:IPアドレスを振っていない仮想マシンに sshログインする方法

<環境>
ホストOS:Windows 10
ゲストOS:CentOS 7
仮想化ツール:VirtualBox
sshクライアントツール:Tera Term


Vagrantで作成した仮想マシンは、通常「vagrant ssh」コマンドでログインするかと思いますが、通常の sshログインも可能です。
 
以下、デフォルト設定で仮想マシンを立上げ、Vagrantfile は特に編集していない状態を想定しています。

Tera Teamを起動

設定は以下。

f:id:kakisoft:20180818225639p:plain

ユーザ名・パスフレーズを設定

f:id:kakisoft:20180818225653p:plain
続いて、秘密鍵を設定します。

秘密鍵を設定

秘密鍵のパスは、

(仮想マシンを作成したフォルダ)\.vagrant\machines\default\virtualbox

となっています。
種類を「すべてのファイル」にして、『private_key』を選択します。 f:id:kakisoft:20180818225707p:plain

ログイン

f:id:kakisoft:20180818225716p:plain


備考

以下のコマンドで、ssh 設定を確認できます。

vagrant ssh-config

f:id:kakisoft:20180820002851p:plain

Linux:アクセス有効期限って、2種類あったんだね。って事に気が付いたんで、整理してみた。

以下のコマンドで、ユーザアカウントの有効期限の状態を確認できる。

chage --list ユーザー名

出力例

[kakisoft@localhost ~]$ chage --list kakisoft
Last password change                             : Aug 06, 2018
Password expires                                 : Sep 05, 2018
Password inactive                                : never
Account expires                                  : Dec 12, 2017
Minimum number of days between password change   : 0
Maximum number of days between password change   : 30
Number of days of warning before password expires: 7

出力例(日本語ver)

[kakisoft@localhost ~]$ chage --list kakisoft
最終パスワード変更日                    : 8月 06, 2018
パスワード期限:                        : 9月 05, 2018
パスワード無効化中                     : なし
アカウント期限切れ                     : 12月 12, 2018
パスワードが変更できるまでの最短日数     : 0
パスワードを変更しなくてよい最長日数     : 30
パスワード期限が切れる前に警告される日数 : 7

 
 
有効期限には、以下の2種類がある。

アカウントの有効期限

この日にちが経過すると、アカウントがロックされて使用不可となる。
パスワードの有効期限とは無関係。

(アカウント有効期限が切れたユーザでログインした時のメッセージ例)
Your account has expired; please contact your system administrator

以下のコマンドで、アカウントの有効期限を設定できる。

sudo chage -E YYYY-MM-DD ユーザ名

有効期限を無期限にするには、日付の代わりに -1 を入力する。

sudo chage -E -1 ユーザ名

「-E 0」と入力すると、有効期限が 1970/01/01 となり、ログインが出来なくなります。

パスワードの有効期限

この日にちが経過すると、登録したパスワードではアクセスできなくなる。

(パスワード有効期限が切れたユーザでログインした時のメッセージ例)
You are required to change your password immediately (root enforced)

※パスワードの変更が促される。

以下のコマンドで、パスワードの有効期限を変えることができる。

<パスワードの有効期限の指定(単位は日)。以下では有効期限を 30日に設定>
sudo chage -M 30 ユーザ名

-M以降の数字を「10000」以上にすると、パスワードの有効期限を無期限に設定できる。

有効期限が切れる日にちは、「Last password change(最終パスワード変更日)」を起点に、上記の日数を足した日付となる。 「Last password change(最終パスワード変更日)」は、以下のコマンドで変更できる。

sudo chage -d YYYY-MM-DD ユーザ名