「集まれSwift好き!Swift愛好会 vol12」に行ってきた。勉強会に行く意味とは何か。

今回は「集まれSwift好き!Swift愛好会 vol12」に参加してきました。

love-swift.connpass.com

主催はG's ACADEMY TOKYO BASEさんです。シャレオツな内装は
一度見ていたほうがいいくらいオススメです。
http://gsacademy.tokyo/news/2016/06/000164.htmlgsacademy.tokyo


肝心の内容については・・・
なんというか、ブログに書くことがない内容でした。
Apple TVに関するLTは少し面白いと思いましたが、
その後は内輪のみで進行しているような状況にも見えました。

つまり、参加メンバーはたくさんいるんだけど、一部コアな顔見知りのメンバーが
LTの内容につっこみを入れて盛り上がってる…そんな状況です。

うーん、参加する意味あったのかな。
勉強会で何か収穫を得ようとしても、
参加した意味がなかったって感じている人は
結構いるみたいなんですよね。下記の記事も参考になったり。

www.buildinsider.net

貴重な時間を消費しているわけなので、
参考にならなかった勉強会は二度と行かないわけですよ。

なので、これからは下記のような方針でいきたいと思います。

  • アウトプットを伴う勉強会に参加する。LT登壇も含めて。
  • 小規模な勉強会よりも、人気のある勉強会や大規模カンファレンスに参加してみる。
  • 意味がなさそうな勉強会に参加する暇があったら本読んで実践する。

実りが少ない勉強会だと、お酒の力で参加メンバーと交流することくらいしかないですよねw
「No Drink, No Hack」の文化に染まりつつあるかもしれませんww
(前回のVuls祭りで味をしめた!?www)

散らばっていた自宅のPC環境を再構築した話

我が家のPCは5つもあるんです。
しかも古いマシンが多いため、スペックが低いものが多く、
しかもそれぞれが異なる役割を持っています。

  • メディア管理用PCの構成図

f:id:yasay:20161031150943p:plain

f:id:yasay:20161031151500p:plain

BunBackup,Time Machineによる自動バックアップがメインの構成図になります。
大切な情報を日々守っています。

よくよく考えなくても、3台もPC使うのってあまり意味がないんですよね。
なぜなら↓

  • 常時起動はしない。つまりサーバーの役割を持つPCは我が家にはない。節約のため。
  • Windows PCを2台持つ意味って現状ほとんどない。一つのWindows PCに集約させたほうがデータ管理もしやすい。


なので、再構築しました。
以下、新しい構成図。
f:id:yasay:20161031151526p:plain
見て分かる通り、一番スペックの高いMac miniに全てを集約しました。
Windowsの資産(アプリ)はBootcampで構築したWindows10 Proへ。
開発はこれまで通りMac OS Xを使う。

これで家の中もスッキリしました!2台のPCがお蔵入りに。
再構築の肝はAdobe CS3のインストールです。
CS3がWindows10 Proの64bitエディションで動くかどうかでした。
Bash on Ubunutu on Windowsを使いたかったので、64bitは外せないのです。

いろいろなサイトで報告されている、
「AdobePDF.dll」ファイルが見つからない問題は、
インストーラーをadobeのサイトからダウンロードすれば解消されます。
お試しあれ。

主な作業一覧↓

  • Windows10 Proのライセンス購入
  • Bootcampセットアップ作業
  • adobe CS3 Master Collectionのインストール
  • プリンタのセットアップ(Mac/Win(Bootcamp))
  • Blu-ray書き込みソフトのインストール(Win)
  • 設置場所の変更・配線・USBハブの増設


作業中のこと

  • 3TBの外付けハードディスクが自動節電モードに移行しない問題の調査
  • キーボード・マウスの無線化

バックアップツールはBunBackupを今まで使っていたのですが、rsyncに移行を進めています。
完全移行できたらエントリーを書きたいと思います!


ひとまずお疲れ俺。
ダウンロードやインストールって結構時間かかるから
しばらくはやりたくない(´・ω・`)

AWS - Qiitaのチュートリアルを最初からやってみる。

今月は前半はRSウイルスに感染し、
後半はノロウイルスみたいな症状に感染してホントひどかったです。
今年はこれ以上ひどい目にあいたくないのでインフルエンザワクチン接種したい。

ところで、私は残念ながら業務でIaasを使う機会が少ないので、
最近はAWSのキャッチアップを行ってます。

今回は、Qiitaの記事「0から始めるAWS入門」の手順を踏んで
LAMP環境を構築しました。集中してやれば2時間位で終わります。
qiita.com

もくもくやっていく!

続きを読む

MacBook Airを購入しました!

MacBook Air 13インチを購入しました!
まさかこんなに早くゲットできるとは思わなんだ。

これがもし2、3年前にMacBook Airを購入したとしても
充分にそのパフォーマンスを活かしきれていなかったと思うんですよね。
なぜなら、最近のモバイルネットワークの充実があるからです。
今やMVNO格安SIMを使用してテザリングが出来る時代なので、
バッテリー残量と高速通信残量さえ気をつければ
外出先で気軽にインターネットが出来る時代。時代は変わるものですね!

↓とある日常の一コマ↓

嫁「一緒にアニメ見よー」
俺「無理、今開発してるから。」
嫁「・・・」
俺「MacBookがあれば、アニメ見ながらでもできるんだけどね。」
嫁「でも高いんでしょ?」

食いついてキタ━━━━(゚∀゚)━━━━!!

俺「まぁ、それなりの金額はするけど、整備済製品なら安く買えるかも
  このMacbook Air 13インチなら130,000円くらい・・・
  (Webサイト見せながら)」

嫁「高い。10万くらいで買えないかな?」
俺「お、SSDが128GBなら95,000円であるよ!これなら買っていい?」

これはいける(゚∀゚)!?

嫁「なんでMacなの?windowsならもっと安いのあるんじゃないの?」
俺「MacならXcodeが使えるし、UNIX準拠でゴニョゴニョ(略」
嫁「ふーん、しょうがないか。買っていいよ。」

(´⊙౪⊙)۶ッッッッィィィィイイイイヨッシャアアアアァァァァ!!!!

嫁「その代わり結婚記念日とクリスマスと誕生日、なしな」

(^ω^)・・・分かってた

というわけで、いろいろ前倒ししてMacBook Air 13インチを手に入れました!
決まったら行動早いでー!
f:id:yasay:20161019144146p:plain
速攻ポチってた。翌日届いた。




f:id:yasay:20161020005323j:plain
整備済製品なので、パッケージがちょっと違いますね。


f:id:yasay:20161020005443j:plain
よく見ると箱には「Apple Certified Refurbished」の文字が。


f:id:yasay:20161020005615j:plain
充電中。キーボードはそこそこ打ちやすいし、
デザインも最高、Officeを買えばWindowsすら不要になるしmac大好き。
早速SlackとかiTerm2とか入れました。


[f:id:yasay:20161020005812j:plain
懸念してたSSDの容量も100GB以上余ってる。
うん、大丈夫そう。メモリが8GBなのもポイント。
コーディングくらいなら余裕でこなせる。


f:id:yasay:20161020005958j:plain
この日のために大事に取っておいた、熊本復興支援ステッカーと、
8年くらい前に台湾で買ったステッカーを貼り付ける。
勉強会とか行くとMacBookを持った方々が多いので、結構こういう
ステッカーとか重要だと思います。ベタベタ貼るのは好みではないのですが。


これでSwiftの勉強会がますます捗ります!
このエントリーもMacBook Airで書きました!

[2016/11/10 追記]
新型Mac Book Proの登場とほぼ同時に、
Mac全品が値下げされました。おそらく為替の影響かと思われます。
japanese.engadget.com
私が買った整備品済み製品とほぼ同じ価格で、新品が買えますね!

mac mini(2011)を外付HDDからデータ移行して復活させました。他、最近取り組んでいること等。

子供から風邪をもらい1週間半くらい体調不良でした。

f:id:yasay:20161016203453j:plain

実は我が家のmac mini(2011)は一度ハードディスクがクラッシュしまして、
お亡くなりになったことがあります。1年位前。

家族の写真が大量に入ってたので、
あの時はどうしようかとかなり焦りましたが、なんとかデータを抽出。
今は外付けHDD2台とBlu-rayにバックアップしているので、大地震でも起きない限り、多分大丈夫。

当時はリカバリ手段としてインターネットリカバリを使用。
外付けHDDにOS X Lionをインストールし、内蔵ハードディスクは引っこ抜きました。

最近、Windows PCよりMac miniを使って開発をする頻度が多く、
本腰を入れて内蔵ハードディスクを復活させました。

きっとおいらの知らない間に子供が落としたんだそうに違いない(困惑)

では、やっていきます。

ハードディスク交換のためには、裏面の蓋を開けパーツを外していく必要があります。
分解は多くの方がエントリーを書いてるのでさっさと開けていきましょう。
f:id:yasay:20161016203641j:plain
wifiユニットと、ファンを外した状態。
空っぽのところにハードディスクがついてました。
分解するには星型ドライバーが必要です。
私はAmazonでAnexのT-6とT-8を購入しました。

  • ハードディスクを取り付ける

Amazonで1TBのHDDを購入。
コストパフォーマンスを重視したので、SSDは選択しませんでした。
f:id:yasay:20161016204705j:plain
左が壊れたハードディスク、右が新しいハードディスク。
ケーブルを取り付けていく。


f:id:yasay:20161016204813j:plain
ハードディスクが収まった状態。

  • 元に戻す

どのユニットもケーブルで繋がってるので慎重にもとに戻していきます。
f:id:yasay:20161016205006j:plain
これで蓋を閉じて終了。

  • ハードディスクを初期化する

起動後、[command]キー + Rキーを押しっぱなしにしてOS X ユーティリティを起動します。
f:id:yasay:20161016205416j:plain
画像を見て分かるとおり、El Captainからインストールできます。
これは外付けHDDにインストールしているmacがEl Captainなので、
El Captainで復元できる様子。
まずは「ディスクユーティリティ」を選択して、
ハードディスクを初期していく。


f:id:yasay:20161016205711j:plain
初期化完了!

  • El Captainを内蔵ハードディスクにインストールする

OS Xを再インストール」を選択して、
内蔵ハードディスクにインストールしていく。
f:id:yasay:20161016205847j:plain
しばらく待ちます。

  • なんと、外付HDDからデータ移行できた!

データ移行どうしようかなと悩んではいたんですが、
移行ウィザードが起動してくれました!これは助かる!
f:id:yasay:20161016213745j:plain
一番上の「Mac, Time Machine バックアップ、または起動ディスクから」を選択する。


f:id:yasay:20161016213913j:plain
移行元の外付HDDを選択する。


f:id:yasay:20161016214059j:plain
転送する情報を選択。今回は全部移行。


f:id:yasay:20161016214234j:plain
転送中。結構時間かかります。気長に待ちます。


  • 移行完了!

無事に移行完了!スムーズにいけました!
インストールしていたアプリや、データなどもそのまま!
f:id:yasay:20161016214502j:plain


ついにmac mini(2011)が復活を遂げました!
これで開発も捗ります!今後はメモリを16GBまで増設したいと思います!


  • 最近取り組んでいること

最近は、Selenium×JUnit×Jenkinsによる連携と、
Spring4のMockRestServiceServerを用いた
APIのMock化に取り組んでいます!
少しずつブログでアウトプットしていければと思います!

  • 以下、参考資料

■交換したハードディスク
https://www.amazon.co.jp/exec/obidos/ASIN/B007XBU69O/henjinkutsu-22/ref=nosim

■使用したドライバ
https://www.amazon.co.jp/アネックス-ANEX-ヘクスローブドライバーT型-T6×50-No-6300/dp/B002SQLDSM/ref=sr_1_2?s=computers&ie=UTF8&qid=1476623987&sr=8-2&keywords=anex+t-6
https://www.amazon.co.jp/gp/product/B002SQLDU0/ref=pd_cp_60_2?ie=UTF8&psc=1&refRID=FE9JTGHANN0MHK10J57Y


■参考にした手順
[Apple]Mac mini (Mid 2011)のハードディスクを換装する 完全版 « 変人窟(HJK)

Vuls祭り行ってきた!そしてVuls使ってみた!

vuls-jp.connpass.com
今回はFuture Architect様主催です。
今をときめく脆弱性検知ツール、Vulsのお祭り第1回です。

f:id:yasay:20161001234659j:plain

ツールの内容が脆弱性検知ツールだけに、
セキュリティの専門家の方が参加されているように見受けられました。
手軽に使える脆弱性検知ツールでしかもオープンソースということで、
これからどんどん使用されていく可能性がありそうですよね!

何より日本人の方が開発してて、
Vulsに貢献したいと思ってしまいますね!

今回のVuls祭りはケータリングの料理とビール・アルコールを頂きながら、
LTを拝聴したりして、とても楽しかったです!(しかしなぜソフトドリンクがないのか(笑))

・・・なんと、このVuls祭りから1週間後、
GithubのTrendランク1位になったらしい。
f:id:yasay:20161001235458p:plain
ヤバい日本始まってる(大袈裟)。

  • 使ってみた

実際に使ってみます!
今回はmacをvuls実行のホストOSとし、
ゲストOSにVirtualBox上のUbuntuを使い脆弱性をチェックしてみました。

Vuls自体は、本当に簡単に導入できます。
今回はどちらかというと下記のような環境構築手順に時間を取ってしまいました。
(めちゃくちゃ勉強になった)

上記トピックについては別記事として今後書きたいと思います。
※ちょっとスクショの画質が悪いので、後ほど改善したいと思います。
以下、Vuls導入の手順的な↓


  1. go言語のインストール・環境変数の設定
  2. breawを使用してgo言語をインストールして、環境変数を設定しました。(SS省略)
  3. go-cve-dictionalyの取得
  4. 脆弱性情報を取得するためのツールを取得しました。(SS省略)
  5. cve情報の取得
  6. これが結構時間かかるけど、初回だししょうがない。インジケータ見るの楽しい。 f:id:yasay:20161003011438p:plain
  7. Vulsのインストール
  8. コマンド実行してインストールするだけ。
  9. 接続先サーバーの設定
  10. ここのssh接続で時間を取りました。次回以降はすぐ終わらせられるし、いい学習になりました。(SS省略)
  11. prepareコマンドの実行
  12. スキャン前にprepareコマンドを実行します。ここでもsudores関連で少しつまづいたところがあり、VulsのSlackで質問させていただきました。無事に解決して準備完了! f:id:yasay:20161003011925p:plain
  13. スキャン実行
  14. いよいよスキャン開始だぜー! f:id:yasay:20161003012324p:plain
    ↑おー、もりもりチェックしていく!

    f:id:yasay:20161003012551p:plain
    ↑結果は・・・ありゃ、今回は脆弱性検知なし。

  15. tui情報の確認
  16. 脆弱性検知の結果ファイルがあれば下記のようなイケてるTUIを使えるのですが、今回はお預けでした。 f:id:yasay:20161003012852j:plain


以上で、Vuls祭り & Vuls使ってみたレポートを終わります。
今後は、Vulsで下記のようなことをやってみます!

  • VulsRepoの導入
  • Vuls実行専用ユーザーの作成(標準化に準拠させる的な)
  • Slack連携
  • Dockerコンテナの脆弱性チェック

Vuls祭りのLTでも触れていましたが、
単純にSlackと連携すると大量の脆弱性情報が連携されてきて
情報が埋もれる可能性もあるということで、
特定のキーワードでフィルタをかけたり、視覚的に見れるVulseRepoを導入したいですね。

今後もVulsの動向を積極的に追っていこうと思います!


  • 参考リンク

■公式ドキュメント
vuls/README.md at master · future-architect/vuls · GitHub
https://github.com/future-architect/vuls/blob/master/README.ja.md

■Vuls関連ドキュメント
あなたのサーバは本当に安全ですか?今もっともイケてる脆弱性検知ツールVulsを使ってみた - Qiita
脆弱性検知ツールVulsの導入まで - Qiita
話題の脆弱性検知ツールVULSのインストール手順、使用方法の紹介 – ZacoDesign
vuls初歩的なエラーへの対処まとめ – ZacoDesign
(比較的)標準化をした Vuls/VulsRepo の導入 - Qiita

VIrtualBox関連
MacのVirtualBoxにLinuxのUbuntuをインストールする方法 / Inforati
VirtualBoxにUbuntu12.04をインストール - karakaram-blog

ssh, open-ssh関連
VirtualBox VMに入れたLinuxに、SSHで繋いだよ。 | Ginpen.com
http://blog.youria.jp/kyo/mac/ssh_ubuntu_on_virtualbox/
Ubuntuでsshdの設定をしてリモートから接続できるようにする - そ、そんなことないんだから!
入門OpenSSH / 第4章 OpenSSH を使う

■sudoersコマンド関連
一般ユーザーを sudo できるようにする - maruko2 Note.
sudoでNOPASSWD設定しても反映されない現象に遭遇

Java8のDate and Time APIを使いたい

Javaプログラマーなら、SimpleDateFormatを
使ったことのある人は多いのではないでしょうか。
私は業務では古いJavaのバージョンでも開発しているので、
今だにSimpleDateFormatは現役で使っています。

Java8ではDate and Time APIという新しいライブラリが導入され、
日付関連の処理が今まで以上に使いやすくなっている・・かもしれないので
実際に手を動かして確認してみる。
※Java7の環境ならJoda Timeを使えば似たような事ができます。Joda Timeは業務でも現役。
Joda-Time - Home


  • よくあるSimpleDateFormatの例
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 文字列を日付に変換
Date stringToDate = new Date();
try {
	stringToDate = sdf.parse("2012-12-12");
} catch (ParseException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

// 日付を文字列に変換
String dateToString = sdf.format(new Date());

// コンソール出力
System.out.println("stringToDate:" + stringToDate.toString());
System.out.println("dateToString:" + dateToString);
  • コンソール出力結果
stringToDate:Wed Dec 12 00:00:00 JST 2012
dateToString:2016-09-22

上記はよくある典型的な使用例です。
これをDate and Time APIを使って実装してみます。

  • 同じことをDate and Time APIを使ってやってみる。
// 文字列を日付に変換(Date and Time API Version)
LocalDate localDateToDate = LocalDate.parse("2012-12-12", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
LocalDateTime localDateTimeToDate = localDateToDate.atTime(00, 00);
		
// 日付を文字列に変換
Instant instant = new Date().toInstant();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneOffset.systemDefault());
String localDateToString = localDateTime.toLocalDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
		
// コンソール出力
System.out.println("localDateToDate:" + localDateTimeToDate.toString());
System.out.println("localDateToString" + localDateToString.toString());
  • コンソール出力結果
localDateToDate:2012-12-12T00:00
localDateToString2016-09-24

単純な日付型←→文字列の変換だと、コード量はあまり変わらない様子。

  • 比較もやってみる。
// 日付A
LocalDateTime compareDateA = LocalDateTime.of(2013, 3, 1, 10, 10);

// 日付B
LocalDateTime compareDateB = LocalDateTime.of(2013, 3, 1, 10, 5);

// 比較 引数より後の場合は0より大きい、引数より前の場合は0より小さい、等しい場合は0
System.out.println("日付Aと日付Bの比較結果:" + compareDateA.compareTo(compareDateB));
  • コンソール出力結果
日付Aと日付Bの比較結果:1
  • 個人的にはequalsメソッドによる比較よりも、ミリ秒比較のほうが分かりやすくて好きです。
// 日付Aのミリ秒
ZonedDateTime zdtCompareDateA = compareDateA.atZone(ZoneId.systemDefault());
long compareDateAMillis = zdtCompareDateA.toInstant().toEpochMilli();
System.out.println("日付Aのミリ秒:" + compareDateAMillis);
// 日付Bのミリ秒
ZonedDateTime zdtCompareDateB = compareDateB.atZone(ZoneId.systemDefault());
long compareDateBMillis = zdtCompareDateB.toInstant().toEpochMilli();
System.out.println("日付Bのミリ秒:" + compareDateBMillis);

// 単純比較
if (compareDateAMillis > compareDateBMillis) {
	System.out.println("比較結果:日付Aは日付Bより大きい(後)");
} else {
	System.out.println("比較結果:日付Aは日付Bより小さい(前)または、等しい");
}
  • コンソール出力結果
日付Aのミリ秒:1362100200000
日付Bのミリ秒:1362099900000
比較結果:日付Aは日付Bより大きい(後)

ふむ、今までのDate型と同じような比較が可能ですね。

  • Date and Time APIを使うメリットってなんだ?

上記のように一見するとどっち使っても同じのように見えるんですが、
Date and Time APIを使うことによって下記のようなメリットがあるんです。

  1. 日付の加算・減算にCalendarクラスを使う必要がない。
    JavaてDate型のみだと日付の加算や減算ってやりにくくてですね、
    加算や減算をしたいならCalendarクラスを使ったりして、上手にやりくりしないといけない。
    つまり生成するインスタンスが増えるんですね。コード記述も綺麗じゃない。
    Date and Time APIなら簡単に加算・減算ができる。

    • シンプルに日付を足してみる
    System.out.println("加算前の日付:" + compareDateA);
    // 1日足す
    compareDateA = compareDateA.plusDays(1);
    System.out.println("加算後の日付:" + compareDateA);
    
    • コンソール出力結果
    加算前の日付:2013-03-01T10:10
    加算後の日付:2013-03-02T10:10


  2. スレッドセーフである。
    マルチスレッドプログラミング時に、真価を発揮します。
    SimpleDateFormatはスレッドセーフではないので、マルチスレッド処理で
    期待していない結果を出す時があります。これは覚えておかないと、不具合の原因になります。
    Date and Time APIはスレッドセーフであるため、マルチスレッド処理で積極的に使っていけます。
    というか、SimpleDateFormatはマルチスレッド処理では使っちゃダメですね。

Date and Time API有識者の方々が
多くのナレッジを残してくれているので、私がBlogとして残すのも
今更感がしましたが、いい学習にはなりました。
下記に参考サイトを載せてますので、参考にしていただけると。

参考にしたサイト
EclipseのCtrl + SpaceがmacでSpotlight検索に化ける問題の解消方法
macのEclipseでコード補完のキーバインド変更 - xykの日記

■Date and Time API関連
Date and Time API 復習 - Qiita
Java8 新機能についてのまとめ 2 - A Memorandum
datetime - How to get milliseconds from LocalDateTime in Java 8 - Stack Overflow
ImmutableでスレッドセーフになったJavaの新しい日時APIの基礎知識 (1/5):ここが大変だよJava 8 Date-Time API(1) - @IT
http://www.coppermine.jp/docs/programming/2014/07/jsr310-essentials.html
http://www.coppermine.jp/docs/programming/2016/05/jjug-ccc-2016-spring.html