標準機能でSSH接続できるIDEがあるらしい。It's IntelliJ IDEA!

本エントリーは下記バージョンで動作確認しています。

IntelliJ IDEA Ultimate 2017.3.2

Electron製のエディタであるAtomVisual Studio Code
拡張機能でConsole機能を有しており、ConsoleからSSH接続も可能です。

IntelliJ IDEAにもデフォルトでConsole機能があり、
さらにはSSH接続設定を保存できます。
つまり、IntelliJ IDEAをSSHクライアントのように使うことが可能です。

やっていきます。
今回はVirtual BoxのUbuntuに接続してみます。

1. SSH接続先を保存する

  1. 「File」→「Setting」を選択してSettings画面を開く。
  2. 「Build, Execution, Deployment」→「Deployment」を開く。
  3. 「+」ボタンを押下して、接続先サーバを追加する。

f:id:yasay:20180112101244p:plain
※Typeは"SFTP"を選択する。

2. 接続する

  1. 「Tool」→「Start SSH session...」を選択する。
  2. 接続先を選択する。

f:id:yasay:20180112101452p:plain

接続に成功! ↓
f:id:yasay:20180109184917p:plain

高度な機能は要していない

IntelliJ IDEAで保存するSSH接続先は、
主にデプロイメント機能で使用するための情報であり、
踏み台サーバを経由するなどの、SSHクライアントによくある高度な機能は
持ち合わせていないので、使い所が限られるというのが正直な所でしょうか。

(2018.7.20追記)踏み台サーバーを経由したい場合は、sshコマンドの標準ポートフォワーディングで
ローカルホストのポートを用意し、Intellij IDEAから用意したポートに接続すればよいですね。

(2018.7.20追記)参考サイト

tech.aainc.co.jp



例えば、Vagrantで起動したローカルサーバにデプロイするような使い方は
面白いと思います。

以上です!

スマートブレスレット「Excelvan I5 Plus OLED」は思いのほか便利だった

f:id:yasay:20180101032658j:plain
スマートブレスレット「Excelvan I5 Plus OLED」が思いのほか便利だったので
エントリーを残します。

スマートウォッチ(ブレスレット)の入門機として最適なお値段。

本スマートブレスレットはAmazonで約2,000円で購入できます。
Amazonは2,000円以上は配送料が無料になるので、丁度いいお値段ですね。
fitbitやApple Watchに手を出すお金は出せないけど、
入門機としては使いたい場合に最適なお値段です。

ただし、本機器は歩数や消費カロリーを自動同期しないので、
フィットネスに使用する場合はライフログを残しにくいと思います。

購入の目的は着信の通知

私の購入目的は着信の通知です。
生活スタイルにもよりますが、私の場合はLINEなどのメッセージよりも
着信のほうが重要な要件である場合が多く、着信を見逃したくないのです。

この用途について、本機器は充分な機能を保持しています。

  • 発信元の名前が表示される。
  • 着信している間は、強めのバイブレーションで通知してくれる。※ただし10秒くらい?

バッテリーは充分に持つ。10日間の連続稼動を確認!

使い方次第ではありますが、
自分の場合は着信の通知と起床タイマーとして使い、10日間の連続稼働を確認しました!
充電も約2時間程でフル充電できました。
バッテリーの残量を気にせず使えると言ってもいいでしょう。

f:id:yasay:20180101032727j:plain
シリコン製のリストバンドから本体を外すとUSB端子がむき出しになるので、
差し込むだけで充電できます。

主な操作方法

操作 方法
電源ON タッチパネルを押し続ける。
電源OFF スワイプで窓アイコン(メニューアイコン)を表示した後、タップして電源アイコンを表示した後、長押しする。
時計の表示切り替え スワイプで窓アイコン(メニューアイコン)を表示した後、タップして回転ボタンを表示した後、長押しする。

"スマホを探す"、"スポーツモード"、"睡眠管理"は使用しないので割愛します。
↓が説明書の操作方法。
f:id:yasay:20180101032803j:plain

動作要件

とあります。

↓が説明書
f:id:yasay:20180101032830j:plain

肝心の使用感は?

年末年始の11連休で利用しましたが、
重要な着信を見逃すことがなく、その役割を充分に果たしていました。
私の利用方法なら、コストパフォーマンスは非常に高いです。

しかしながら、下記の懸念点もあります。

稀にですが、スマートフォンとの接続が切れる。

"手首ジェスチャー"の機能をオフにしている場合に切断されることが多い気がするので、
基本的に"手首ジェスチャー"はオンで使用しています。

切断された場合は↓のように、ブルートゥースのアイコンが消えます。
f:id:yasay:20180109114058p:plain

他にも専用アプリ「Zeroner Health pro」を起動した直後に切断されることがあり、
この疑問について下記のような回答がされています。
"The app will read the connection status about bracelet and synchronization data, maybe there is a little delay on display, in fact, the app is connected with bracelet."
"アプリはブレスレットと同期データに関する接続ステータスを読み込みますが、実際には表示が少し遅れることがあります。実際、アプリはブレスレットに接続されています。"

とのことなので、問題ないでしょう。

この10日間で切断されていたのは3回。その内2回が"手首ジェスチャー"オフでした。
これくらいの頻度なら問題ないと思います。
それに、自分はこれが入門機なので他のスマートブレスレットの切断率と
比較する術がありませんので、しばらく本機器を使い続けるしかないでしょう。

もちろん不満な点もある

一番不満な点は、シリコン製のバンドは痒くなること!
睡眠監視機能があるようですが、痒くてつけたまま寝られません!
これは値段相応でしょうね。
必要であればTPU製の替えバンドの購入を検討したいです。

あと、日差しの強い場所では、視認性が悪いですね。
有機ELディスプレイなのでしょうがないところですが、
時計として使うなら視認性の悪さは不便な点となります。
f:id:yasay:20180109113943p:plain

しばらく使い続けて見て、気づいたことなどあれば
エントリーとして残していこうと思います!
以上です!

iPhoneで撮影した動画ファイル形式(.MOV)を自動でMP4に変換するスクリプト作りました

私は外付けHDDに写真や動画を保管し、
PS3をメディアプレイヤーにして再生しています。

この時、困ることがあります。
PS3はQuick Time形式の".MOV"の拡張子に対応していないことです。
iPhoneで撮影した動画は".MOV"の拡張子になるため、多くの動画が見れないことになります。

この問題を改善するために、スクリプトを作りました。
github.com

簡単に説明します。

HandBrake CLIのダウンロードが必要です。

スクリプトはただのシェルスクリプトで、HandBrake CLIを呼び出しています。
HandBrake CLIのダウンロードはこちらから↓
handbrake.fr

コマンドの解説はこちら↓
www57.atwiki.jp

スクリプト概要

環境変数で指定されたI/O用のディレクトリを参照し、
拡張子".MOV"のファイルが存在する場合、MP4に変換して変換元ファイルは退避します。
変換したファイル数をカウントしてSlackに通知します。
ただこれだけです。

実際の使われ方

スクリプトをcronで定期実行してます。バッチサーバ的な用途ですね。
ファイルの配置は共有フォルダになっているのでLAN内のPCなら可能になってます。

今後の改善点

Issueに挙げているのですが、
I/O用のディレクトリの階層構造に対応したいと思います。

簡単にですが、以上になります!
今年もよい年になりますように!

Freenomの無料ドメインの更新期限が迫ってきたので更新してみた

Freenomの無料ドメイン、皆さん使っていますか?
Freenom - 誰でも利用できる名前

私は去年登録し、結構便利に使ってます。
AWSのRoute53で管理してみたり、リダイレクトURLに使用してみたり。

その無料ドメインの更新期限が迫ってきているとFreenomさんから通知があったので、
無料で1年間、期間を伸ばしてみました。

手順を忘れるかもしれないので備忘として残しておきます!

ログイン後、「Service」→「Renew Domains」を選択する。

Freenomは結構ナビゲーションメニューが分かりづらいんですよねー。
ここさえ押さえておけばちゃんと更新できると思います。
f:id:yasay:20171231223655p:plain

更新したいドメインの「Renew This Domain」ボタンを押下する。

右端のボタンです。
f:id:yasay:20171231223856p:plain

「12 Monthes @ FREE」を選択して、「Order Now」ボタンを押下する。

更新期間はいろいろ選べますが、基本的にはもう1年更新でOKです。
f:id:yasay:20171231230954p:plain

Order Confirmation後にDomain一覧に遷移して、確認する。

無事に「Days Until Expiry」が378 Daysになりました!これでまた1年使えます!
f:id:yasay:20171231231555p:plain

Freenomの無料ドメインは今後自宅サーバドメインにも使っていきたいと思っています!

JJUG CCC Fall 2017に行ってきたよ!

今年の冬も来たぜ!JJUG CCC Fall!!
f:id:yasay:20180101024913j:plain:w350
http://www.java-users.jp/ccc2017fall/www.java-users.jp

レポート

10:00 ~ 10:45 Backlog:JavaからScalaへの移行の歩み

  • なぜ移行するのか?特に利点はないのに?
  • なぜScala + Play Framework?
    • 型推論、パターンマッチ
    • 静的型付け言語
    • JVM言語なのか既存知識から大きく離れない
  • 移行方法
    • ボツ案1:全てのアクションの移植が完了してから入れ替える
      • Tomcat版、Play版の両方に機能追加とバグ修正が必要。ドッグフィーディング。
    • ボツ案2:Javaから呼び出されるメソッドを少しずつScalaに移植
      • JavaScala間でEntitiyの相互変換するコードが必要になった
      • 他にも設計の差異を埋めるコードも必要
      • 移行完了後に捨てるコードに工数かけるのは辛い
    • 採用案:機能単位に作り切って、NginxでアクセスをPlay版に振り分ける
      • セッションを共有する仕組みをRedisで行う
      • 採用理由
        • ユーザーへの影響は抑えやすい
        • 完了後に捨てるコードはほぼない
        • Tomcat版の設計に引きづられることもない
      • JS/CSSの移行のために作ったツール
        • 旧ViewテンプレートからTwirlへの変換ツール
          • 正規表現を用いた補助的なもの
          • Tomcat版とPlay版の両方にアクセスしてDOMを比較するツール
      • 利点
        • 移植が正しくできていなくてもNginxの設定を戻せばいい
          • 簡単に戻せるのは精神的によい
      • 課題
        • 機能追加が並行して動いている場合に差分が出やすい
          • 最近はPlay版にのみ機能追加している
          • 性能評価とかあるといいかも
  • Scala初心者がJava -> Scalaへ移行した話
    • 勉強方法
      • 社内勉強会、研修、実業務
      • ドワンゴScala研修テキスト
      • 社内向けツールをScala, Play, Akka, WSで作った
    • はまりどころ
      • implicit class
      • for文(for comprehension)
      • 文法の違いとか

11:00 ~ 11:45 10年前のレガシーシステムをサーバーサイドKotlinでフルリニューアルしている話

speakerdeck.com

  • 背景・概要
    • 医師のキャリア支援事業の10年に一度のリニューアル
      • 600人日!
      • 複雑なアーキテクチャになっている。データ重複・ロジック重複・・
      • Javaの独自FW, viewの部分はXSLT・・。
      • KotlinのRest API, WebアプリはRails, Vue.js
        • 生産性上がるよね
      • プロトタイプ作成して経営会議
  • 承認までの道
    • 複雑かしたアーキテクチャによる悩み
    • 悩んだけど経営会議で承認された
      • 最優先の問題を粘り強く見極めた
      • 経営陣を説得する際、数値化は大事
  • 技術選定の理由
    • APIサーバ - 重複ロジック・DBを一元化したい
    • 型を用いてカッチリとやりたい
    • なぜKotlin?
      • 型あり
      • Spring Boot使える
      • Java製の社内ライブラリが使える
      • 学習コスト:RubyENGには親しみやすい構文
    • OR MapperはDoma2
    • Vue.js -> リッチなUIニーズに対応しやすい
  • Kotlin APIサーバの作り方
  • どこでもKotlinの紹介
    • Androidだけでなく、どこでも使えるという熱い思い

12:00 ~ 12:45 JJUG初心者のためのJava/JJUG講座

ランチセッションとても面白い話で引き込まれました。さすがですよね!

www.slideshare.net

13:30 ~ 14:15 サーバサイドKotlin

  • 一番にネックになったところは、日本語の響きが可愛いのでおっさんがことりんと呼ぶと(笑
  • Kotlinはそれほどとんがった言語ではない
  • 結論 - サーバサイドでも問題なくKotlinは使えます
    • lambdaでも使える
  • 利用箇所
    • Webアプリ
    • Lambdaの処理
  • なぜ、Kotlinにしたのか
    • Class定義いらない便利
    • 検査例外いらない便利
    • lombokよりスッキリで完結に書けるgetterとsetter
    • 不満はあってもJVM自体は悪くない
    • Scalaは悪くない、でも、難しい...
      • 言語が複雑、学習が容易ではない、型合わせゲームが好きになれない → 言語をちゃんと理解した気分にならない
    • JavaScalaの中間の存在として、使いやすいのではないか
  • サーバサイドでのミドルウェアとか
    • フレームワーク
      • Kotlin製
        • Ktor → チームでの開発は未知数
        • wasabi → Ktorに取り込まれた
        • Kara → JetBrainの人が開発
      • Java
    • OR Mapper
        • Exposed
          • kotlinっぽく書けるんだけどバグが多い。ドキュメントが不十分。割といばらの道なので、JavaのORMがいい
    • ビルド環境
      • gradle + Kotlin plugin + ALlOpen plugin
  • フレームワークやライブラリはサーバサイドで利用するには未成熟か開発体制が不十分
  • 無理をせずにJavaのエコシステムに乗ればいい
  • Streamの使い分けやannotationの違いなど

14:30 ~ 15:15 DockerではじめるJava EEアプリケーション開発 & Eclipse Collectionsの話

  • ビルド環境&デプロイ環境&データベースをDockerで使う
  • Eclipse CollectionsはStream APIより高機能・高パフォーマンスを維持している。
    • Eclipse Collections Kataをやれば、触ってみたい人はOK

15:45 ~ 16:30 「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~

www.slideshare.net

16:45 ~ 17:30 ついにきたリアルタイムSpark ビッグデータ処理の新定番「SnappyData」とは

www.slideshare.net

所感

Kotlinの事例はとても参考になりました

主にAndroid界隈で賑わっているKotlinですが、
サーバサイドの導入事例に触れたことは非常に有意義でした。
Microserviceアーキテクチャと併せる形で是非とも導入したいですね。

お昼から体力の限界でダウン気味でした

正直、午後のセッションはあまり頭に入りませんでした。
前日、深夜までコーディングしてたせいです。
セッションは勉強会とほぼ同義であるため、しっかり体調を整えて臨むべきでした。
次回に向けての反省点になります。

ランチセッションはとても面白かった!

残念ながらデューク弁当はゲットできなかったのですが(笑)。
JJUG会長の方のランチセッションは、Javaの過去のヒストリーも紹介していて、
知らなかったこともたくさんありました。このセッションを聞いて、
20代のエンジニアの方々がよりJavaに親近感を持ってくれたらと思います。

来年からはもう一度ボランティアから始めてみてもいいと思っています。

JJUG CCCは初回にボランティアとして参加しました。
2回目以降はセッションをもっと見てみたいと考え、一般参加として様々なセッションを見てきました。
元々コミュニティに貢献する取り組みをしたいと考えていますので、
2018年は特にコミュニティへの貢献のための取り組みを行ってもよいのではと思っています。

成子天神社

f:id:yasay:20180101030924j:plain
JJUG CCCに来るとついつい立ち寄ってしまう成子天神社。
仕事がうまくいくようにお願いしておきました。
「撫で牛」をヾ(・ω・*)なでなでしてご利益を頂きましたw

以上です!来年もJJUG CCC楽しみだなぁ!

IntelliJ IDEAからGitHubやBitbucketのリモートリポジトリに初期コミットする

よく使うので備忘録として残しておきます。
本エントリーは下記バージョンで動作確認しています。

IntelliJ IDEA Ultimate 2017.2.5

1. 前提としてリモートにリポジトリを作成しておくこと

各Gitホスティングサイトでよしなに

2. ローカルプロジェクトのGitを初期化する

  • VCS」→「Enable Version Control Integration...」を選択

f:id:yasay:20171024200807p:plain

  • Gitを選択してOKを押下

f:id:yasay:20171024200912p:plain

3. リモートリポジトリに接続する

  • プロジェクトを右クリック→「Git」→「Repository」→「Remotes...」を選択

f:id:yasay:20171024201046p:plain

  • プラスボタンを押下
  • 「Name」と「URL」に適切な値を設定してOKボタンを押下

f:id:yasay:20171024201216p:plain

4. pull & fetchをしてリモートからReadme.mdなどのファイルを取得する

よしなに

5. ユーザ名とEmailアドレスを設定する

よしなに下記のコマンドを
※名前とメールの値は適宜変更

git config --local user.name "user-name"
git config --local user.email "user-email"
git config --local --list

6. Unversioned Filesが大量に出てくるので"Add"する。

よしなに
f:id:yasay:20171024192550p:plain

7. Commitする

よしなに
f:id:yasay:20171024192859p:plain

8. Pushする

ここまで手順通りにやっていればpushに成功するはず・・
f:id:yasay:20171024201742p:plain

成功!お疲れ様でした!
f:id:yasay:20171024201840p:plain

以上です♪

「JAWS-UG CLI専門支部 #95 Lex入門」に参加しました

Lexってまだ日本に来てなかったんですね。
今回はバージニアリージョンでお試しです!
jawsug-cli.doorkeeper.jp

CLI専門支部への参加は今回で2回目でまだまだ不慣れなのですが、
ハンズオンの操作には慣れて来たような気がします。
(まぁ、基本コピペなんですがw)

つまづいたところ

jsonlintインストールしてなかった

インストールしようとしたら、ハンズオンから
どんどん置いてかれそうだったので、手順はスキップしました。

後ほど、下記手順を見てjsonlintをインストールしました。
qiita.com
次回は大丈夫!

めんどくさいからdefaultのProfileは設定したおいたほうがよさそう

個人的なaws cliの使い方として必ず"--profile"オプションをつけて実行しているんですが、
ハンズオンだとちょっと面倒なのでdefaultのProfileは設定しておいたほうがよさそう。
というか、ハンズオンの時だけ環境変数でprofileを指定しておいてもOK。

参考資料↓
qiita.com
(QiitaがSEOに力を入れてることもあって検索によく引っかかるなぁ)

iterm2はコピペに失敗した

特にjson形式の文字列をiterm2にペーストした時に
書式が崩れました。残念ですがハンズオンでは今後iterm2を使うことはないと思います。

所感

30分位でチャットボットの基本機能を構築できるって、
AWSやっぱ面白いなーと思いました。さすがマネージドサービス!
今回を通して、Lexの詳細な機能を深掘りするきっかけとなりそうでよかった。

(LexのWebコンソールからのService-linked role削除はとても分かりにくいですね・・
AWSさん改善よろしく・・
しかしながら、Service-linked roleをCLIから削除できないことも、問題な気がしますが・・)

CLI支部は参加すると何かしら有益な情報を持ち帰ることが多く、
結構ガチな感じの勉強会で楽しみにして参加してます。

懇親会にも参加したいとは思っているのですが、
体調が悪いことが多く、なかなか機会に恵まれません・・。
引き続きどうぞよろしくお願いしますー。

以上です!