特にたいしたものではないんですが、今朝たまたま見たらアクセス数の合計がちょうど 50000 だったのでキリ番ゲット的な気持ちで記念にキャプチャしました。
よくアクセスされるページは、Spring や JMockit 関連が多い模様。あと、最近は Vue.js 関連のアクセスが多くなってきました。しかし、アクセス元のサイト (Google, Bing, Yahoo!検索) によってアクセスするページの傾向が違うのはちょっと興味深い。
前回の続きというわけではないんですが、せっかく作成したインスタンスがあるので、Docker Compose を使って Redmine をインストールしてみました。備忘録。
AWS の10分間チュートリアルで EC2 インスタンスを起動してから HTTP アクセスするまで - kntmr-blog
一応、カーネルのバージョンを確認。
$ uname -r
4.14.47-56.37.amzn1.x86_64
$ sudo yum update -y $ sudo yum install -y docker $ docker -v Docker version 18.03.1-ce, build 3dfb8343b139d6342acfd9975d7f1068b5b1c3d3 $ sudo service docker start $ sudo usermod -a -G docker ec2-user # ec2-user を docker グループに追加 $ exit # ssh 再接続する $ docker info # sudo なしで OK
Install Docker Compose | Docker Documentation
$ sudo -i # スーパーユーザーで実行 $ curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose $ chmod +x /usr/local/bin/docker-compose # 実行権限付与 $ exit # スーパーユーザーここまで $ docker-compose --version docker-compose version 1.21.2, build a133471
適当なディレクトリに docker-compose.yml
を作成する。
$ vi docker-compose.yml
GitHub - sameersbn/docker-redmine: Docker Image for Redmine
内容は上記にある docker-compose-mysql.yml
とほぼ同じですが、少しだけ手を入れます。全体は以下の通り。
version: '2' services: mysql: image: sameersbn/mysql:latest environment: - DB_USER=redmine - DB_PASS=password - DB_NAME=redmine_production volumes: - /srv/docker/redmine/mysql:/var/lib/mysql redmine: image: sameersbn/redmine:latest depends_on: - mysql environment: - TZ=Asia/Tokyo - DB_ADAPTER=mysql2 - DB_HOST=mysql - DB_PORT=3306 - DB_USER=redmine - DB_PASS=password - DB_NAME=redmine_production - REDMINE_PORT=10083 - REDMINE_HTTPS=false - REDMINE_RELATIVE_URL_ROOT=/redmine - REDMINE_SECRET_TOKEN= - REDMINE_SUDO_MODE_ENABLED=false - REDMINE_SUDO_MODE_TIMEOUT=15 - REDMINE_CONCURRENT_UPLOADS=2 - REDMINE_BACKUP_SCHEDULE= - REDMINE_BACKUP_EXPIRY= - REDMINE_BACKUP_TIME= - SMTP_ENABLED=false - SMTP_METHOD=smtp - SMTP_DOMAIN=www.example.com - SMTP_HOST=smtp.gmail.com - SMTP_PORT=587 - SMTP_USER=mailer@example.com - SMTP_PASS=password - SMTP_STARTTLS=true - SMTP_AUTHENTICATION=:login - IMAP_ENABLED=false - IMAP_HOST=imap.gmail.com - IMAP_PORT=993 - IMAP_USER=mailer@example.com - IMAP_PASS=password - IMAP_SSL=true - IMAP_INTERVAL=30 ports: - "10083:80" volumes: - /srv/docker/redmine/redmine:/home/redmine/data
Docker Compose を実行して Redmine のコンテナを起動する。
$ docker-compose up -d # -d でバックグラウンド実行
10083 ポートで /redmine
にアクセスすると Redmine の画面が表示される。
前回インストールした Apache のリバースプロキシを使って、80 ポートの /redmine
でアクセスできるようにする。
$ sudo -i # スーパーユーザーで実行 $ vi /etc/httpd/conf.modules.d/00-proxy.conf # 下記参照 $ exit # スーパーユーザーここまで $ sudo service httpd restart
00-proxy.conf
の設定内容は以下の通り。
ProxyRequests Off ProxyPass /redmine http://127.0.0.1:10083/redmine ProxyPassReverse /redmine http://127.0.0.1:10083/redmine
80 ポートでアクセスすると Redmine の画面が表示されるはず。admin / admin でログインできます。
Docker Compose 便利。
JJUGナイトセミナー「Java SE 10 / JDK10 リリース特集」に行ってきました。簡単に所感をまとめます。
メモから抜粋。(資料が公開されたら貼っておきます)
www.slideshare.net
JDK8 までのリリースモデル
JDK9 以降のリリースモデル
例えば、OpenJDK 13 あたりのタイミングで有償版に切り替えると Oracle JDK 11 時点の機能しか含まれない
OpenJDK は再配布可能なライセンスになっている
Deprecated の運用ルールはこれまで通り
Oracle JDK 8 は2019/1までアップデートされる (個人利用に限り2020年末まで)
あとで資料公開されるかもしれませんが、同様の内容は以下にあります。
JDKの新しいリリース・モデル、および提供ライセンスについて
https://t.co/2doInAqbGx に適当に投げた質問が上位に来てしまった...
— kntmr (@knt_mr) June 20, 2018
適当に投げた質問がまさか上位に来るとは...。でも、普段聴けない話を聴くことができて面白かったです。
これまででいちばん胸熱なbugはどんなやつでしたか?
「コンパイラが落ちる系のバグ」「Project Lambda のときは毎週のように落ちていた」
Java バージョンアップについて
事前に日経xTECHのひとを呼んでインタビューをしていたとのこと。素晴らしい...。
バージョンアップ戦略はとても重要だなと思います。とは言え、6ヶ月リリースに追従するのはちょっと厳しいと思うし、バージョン固定はアレとなると、LTS に追従することになるかと思いますが、無償版を使うつもりならいよいよ本格的に AdoptOpenJDK を調べておいた方がよいのかなという印象。
以前、きしださんのエントリにいくつか載ってましたが、このあたりの詳細とか比較なんかを聴いてみたいです。
前回の続き
Vue.js で ToDo アプリを作る - kntmr-blog
前回作成した ToDo アプリはデータを LocalStorage に保存していましたが、今回は Firebase Realtime Database に保存するようにしました。また、Vuex の Plugins は使わず、mutations のところで state を書き換えるついでに Firebase の API を呼び出しています。が、これでいいのかどうかは微妙なところ...。
あと、他の端末が Realtime Database のデータを変更したことを検知できるようにコールバックを実装しています。(VueFire 使えばもっと簡単にできると思いますが、今回はあえて使わないことに...)
ソースコードはこちら。
参考にしたドキュメントは以下。
以下、備忘録。
> npm install firebase --save
Firebase の初期化は src/main.js
で実施。
import firebase from 'firebase/app' import 'firebase/database' var config = { apiKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", authDomain: "APPNAME.firebaseapp.com", databaseURL: "https://APPNAME.firebaseio.com", projectId: "APPNAME", storageBucket: "APPNAME.appspot.com", messagingSenderId: "xxxxxxxxxxxx" } firebase.initializeApp(config)
import firebase from 'firebase'
だけだとコンソールに警告が出るようです。必要なものだけ import
しましょうということっぽい。今回は Realtime Database だけ使うので以下のようにする。
import firebase from 'firebase/app' import 'firebase/database'
ビルドする。
> npm run build
Firebase プロジェクトとして初期化する。
> firebase login # ログイン > firebase init ? Which Firebase CLI features do you want to setup for this folder? Press Space to select features, then Enter to confirm your choi ces. Hosting: Configure and deploy Firebase Hosting sites ? Select a default Firebase project for this directory: APPNAME # 既存のプロジェクトを選択 ? What do you want to use as your public directory? dist # npm run build で dist に出力されるため、dist を指定する ? Configure as a single-page app (rewrite all urls to /index.html)? Yes ? File dist/index.html already exists. Overwrite? No # index.html は上書きしない
Firebase にデプロイする。
> firebase deploy
Android 端末でアクセスすると「ホーム画面に追加」が表示されます。初回アクセスでは表示されません。Android / iOS (Safari) ではオフラインでも動作します。また、Realtime Database の機能で端末間でデータが同期されます。オフラインで操作すると、次回オンラインになったときにデータが同期されます。すごい!
もともと PWA について調べるつもりで始めましたが、最初に vue init pwa todo-app
した以外は普通に Web アプリを作る感じになってしまいました。まだ、PWA や Service Worker あたりの理解が浅いので引き続き要学習。しかし、Realtime Database なかなか便利ですね。
試してみたついでに備忘録。
EC2 インスタンスを作成して起動。10分間チュートリアルは以下。便利。
EC2 インスタンスに ssh
でアクセスして、httpd をインストールする。
$ sudo yum install -y httpd24 $ sudo service httpd start
デフォルトでは ssh (ポート20) のインバウンドしか許可されていない。該当インスタンスを選択して、セキュリティグループの launch-wizard-1
をクリック。
ここで、セキュリティグループを編集する。
パブリック DNS かパブリック IP で HTTP アクセスすると、httpd のページが表示されるはず。
Node.js / npm をインストールする。今回は nvm
を使う。
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash $ source ~/.bashrc $ nvm ls-remote # 最新の安定版を確認してインストール $ nvm install v8.11.3 $ node -v v8.11.3 $ npm -v 5.6.0
GitBook の導入手順などをメモ。基本的なところはドキュメントに書いてありますが。
V2 changes - GitBook Documentation
node
と npm
のバージョンは以下の通り。
> node -v v8.11.2 > npm -v 5.6.0
尚、手元の環境が Windows だからなのか、いろいろと思った通りに動作しないところがあります。が、GitHub の issue にワークアラウンドが載っています。一応、PR があるはずなんだけど、マージはされてないっぽい?開発があまり活発じゃないんだろうか...。
gitbook-cli をインストール。初回の gitbook
実行時にコマンドがインストールされます。
> npm install -g gitbook-cli > gitbook --version CLI version: 2.3.2 GitBook version: 3.2.3
適当にプロジェクトフォルダを作成して初期化。
> mkdir sample > cd sample > gitbook init
今回は次のプラグインを使っています。
----- (2018/06/11 追記) -----
当初、gitbook-plugin-puml を使おうと思ってたのですが、gitbook-plugin-uml を使うことにしました。事前に以下の手順が必要になります。
また、手元の環境では、gitbook-plugin-uml のインストールでコケるので、git config --global url."https://".insteadOf git://
を実施。(パッケージをインストールしたら戻すこと)
(参考) https://stackoverflow.com/questions/31744852/npm-install-giving-error-while-accessing-git-url
----- (追記ここまで) -----
まずは、npm パッケージをインストール。
> npm install gitbook-plugin-uml > npm install gitbook-plugin-livereload
プロジェクトのルートに book.json
を作成します。
{ "plugins": [ "-sharing", "uml", "livereload" ], "pluginsConfig": { "uml": { "charset" : "UTF-8" } } }
プラグインインストール。
> gitbook install
以下のコマンドでビルドします。プロジェクトのルートに _book
が生成されるので、これを Web サーバーにデプロイします。
※ Windows 環境ではエラーになることがあります。ワークアラウンドは下記参照。
> gitbook build
ローカルで確認する場合は以下のコマンドを実行します。ローカルでサーバーが起動して localhost:4000 にアクセスすると画面が表示されます。また、ローカルでファイルを編集するとライブリロードされます。
※ Windows 環境ではエラーになることがあります。ワークアラウンドは下記参照。
> gitbook serve
PDF 出力には ebook-convert
というコマンドが使われるようです。このコマンドを使えるようにするには Calibre をインストールします。
calibre - Download for Windows
以下のコマンドで PDF を出力します。
> gitbook pdf ./ hoge.pdf
book.json
を編集します。
{ "plugins": [ "-sharing", "uml", "livereload" ], "pluginsConfig": { "uml": { "charset" : "UTF-8" } }, "styles": { "website": "styles/website.css", "pdf": "styles/pdf.css" } }
新しく css ファイルを作成して、カスタマイズするスタイルを定義します。HTML は Chrome の開発者ツールで class などを特定できますが、PDF のスタイルはちょっと分かり辛いかも。おそらく以下がオリジナルのファイルなのでこれを参考にする。
~/.gitbook/versions/3.2.3/node_modules/gitbook-plugin-theme-default/_assets/ebook/pdf.css
ワークアラウンドをまとめます。
gitbook serve
と gitbook build
でエラーになる場合~/.gitbook/versions/3.2.3/lib/output/website/copyPluginAssets.js
を以下のように編集します。
return fs.copyDir( assetsFolder, assetOutputFolder, { deleteFirst: false, overwrite: true, confirm: true // これを false に書き換える } );
(参考) https://github.com/GitbookIO/gitbook/issues/1309#issuecomment-273584516
また、旧バージョンの gitbook
ではエラーになりません。ただし、この方法だと検索機能が利用できなくなります。
旧バージョンをインストール。
> gitbook fetch 2.6.7 > gitbook -v 2.6.7
旧バージョンを指定してコマンドを実行。
> gitbook serve --gitbook=2.6.7 > gitbook build --gitbook=2.6.7
(参考) https://github.com/GitbookIO/gitbook/issues/1379#issuecomment-303628878
Windows 環境ではライブリロード時にサーバーが停止することがあります。以下の手順で回避できます。
gitbook serve
を実行_book
フォルダを削除する以降、ファイル編集後、正常にサーバーが再起動してリロードされるようになります。
(参考) https://github.com/GitbookIO/gitbook/issues/1379#issuecomment-320579569
gitbook-plugin-puml で日本語を使うと文字化けして表示されます。これは、plantuml-encoder の 1.2.4 で修正されているようです。が、gitbook-plugin-puml の package.json が plantuml-encoder@1.2.3 になっています。(2018/06/08 時点では 1.2.5 が最新の模様)
(参考) https://github.com/markushedvall/plantuml-encoder/issues/4
<プロジェクトフォルダ>/node_modules/gitbook-plugin-puml/package.json
を編集します。
"dependencies": { "plantuml-encoder": "1.2.3" // これを 1.2.5 に変更 },
<プロジェクトフォルダ>/node_modules/gitbook-plugin-puml/
でコマンドプロンプトを起動。
> npm install
これで gitbook build
or gitbook serve
すると正しく日本語が出力されるようになります。
以前、PWA の学習を兼ねて、Firebase にデプロイしたアプリを PWA 化してみる計画を立てたのですが、対象のアプリがイマイチなので、その代わりに Vue.js で ToDo アプリを作りました。
今のところ ToDo のデータは LocalStorage に保存するようにしています。次回は Firebase Realtime Database に保存するようにしてみようかと。で、PWA のアプリとして Firebase にデプロイ。
ソースコードはこちら。
以下、備忘録。
> vue init pwa todo-app > cd todo-app > npm install > npm run dev
ToDo データの永続化は Vuex の Plugins の仕組みを利用して、mutations に commit するタイミングで LocalStorage に保存する。
あと、前からちょっと気になってたけど、actions に dispatch するタイミングでフックする仕組みはないだろうか...。
Vuex の Plugins のところで、LocalStorage に保存しているところを Firebase Realtime Database を使うように差し替えられないか試してみる。