miyasakura’s diary

日記です。

何でもやる系フリーランスエンジニアがお金を払って利用しているもの

出費を振り返る意味も込めてフリーのソフトウェアエンジニアとしてお金払って{購入|利用}している{物|サービス|ソフトウェア}のまとめ。

Macbook Pro 15"

となるとこれ一択に。XcodeとかAndroid Studioとか立ち上げてビルドするには13"だと非力。

Jetbrains All Products Pack

仕事でよく使う言語がRuby/Scala/Java/PHP/Swift/Node.jsなどですが開発環境が揃っていた方が良いなと思い利用。IntelliJプラグイン入れるよりは個別のプロダクトの方が使用感が良い。

ちなみにSwiftはXcode派。

Photoshop CC

Webサイトを作っていると画像を加工したりの機会がよくあるので。

デザイナーさんから貰ったファイルを自分で切り出すことも多いので意外と出番が多い。

通常のCreative Cloudのプランは高いので自分ではそこまでの価値は出しきれないですが、Photoshopだけであれば1,058円なのでこれくらいはギリギリ必要経費かなと。

Sketch

最近はアプリ作ってないのであまり利用する機会は無い。。

Parallels Desktop for Mac & Windows 10

IE/Edgeでの動作検証とかe-Tax/eLTAXとかでWindowsはどうしても必要に。Macで頑張る方法もありそうですが、素直にWindows入れちゃうのが苦労もしないので良いかなと。

月一も使わないので起動する度にアップデートしがちなのつらいところ。

Microsoft Office

結局365を契約。。最近地味に使う機会が多い。

Norton Internet Security

案件によりますが、自分のPCを持ち込んで作業させてと主張するとポリシー上セキュリティソフトが必要と言われることがある。

Charles

https://www.charlesproxy.com/

いきなり入った案件でドキュメントがしっかりしていないケースはままあって、そんな時には外部動作から内部仕様を推測して理解していくのが最速。

新しい案件に携わった時に最初にキャッチアップする速度が早いだけで一目置かれるので、個人的には最重要なソフト。

Safari Books Online

年間$400で英語の技術系書籍/動画が見放題のやつ。(実際にはキャンペーンで加入したので$300)

新しい技術/フレームワークなどをキャッチアップしないといけないときはこれで探して勉強している。

特に動画はかなり利用している。オススメ。

Github 有料プラン

Private リポジトリは必要よね。

BEKANT (電気昇降式デスク)

http://www.ikea.com/jp/ja/catalog/products/S59187840/

家で作業をする場合は座ってばかりになるので立って作業ができるように。

こういうものを買っても3週間で結局は座りっぱなしになるという統計もあるものの、Apple Watchに立ちましょうと言われたタイミングで3分だけ立ち上がって作業というだけでもだいぶ違うなという印象。

MFクラウド

freeeでもなんでも良いけど今のところは税理士に頼まなくて良いかなというレベルなので利用中。

1password

あまりフリーランスとか関係ないものの、色々な企業と関わると自分自身のセキュリティは考えるようになるので、より強固なパスワードしたいという思いもあり利用中。

感想

あんまりフリーランスがとか関係ないのも多いですが、こうやってみると月または年で払っているものがそれなりにありますね。お金もっと稼がないとなぁ。。

2017年の振り返り

2017年は大きな変革のない年だったと反省していたのですが、改めて振り返ると意外と大きなイベントもありました。

まずは新しい仲間との出会い。

前年から一緒に事業をゆるゆるとやっていこうと言っていた友人が別の会社にコミットすることになったので、一人でやっていかざるをえない状況になりました。

その中でフリーランス仲間で一緒に何かしていこうという仲間を見つけることができました。

そしてセブへ行った一ヶ月も大きな一ヶ月でした。

英語力も身に付きつつ、そのタイミングで苦手な単価交渉もうまいことできたり、仕事につながる出会いもありました。

一年を通しての反省点としては、どれも中途半端になってしまったので来年は選択と集中をして、やりたいことをやれる年にしていかないとなぁと思っています。

仕事的には種まきをしていた部分もあるので、来年はしっかりと売上を上げるフェーズにしていくことが目標です。

振り返りメモ

技術

  • 一応使えるようになった
  • 自信を持って使えるようになってきた

仕事

  • 前年からの継続的な仕事が多かった
  • 一緒に事業を作ろうと言っていた友人が就職していった
  • 別の仲間と一緒にやるようになった
  • やる気の有り無しで生産性に大きく違いが出た一年
  • 周りを見ると面白そうなベンチャーは多かった

プライベート

  • 旅行
    • 箱根、沖縄、大分、仙台、熱海
  • 英語
    • セブに行った一ヶ月でTOEIC900超えたし出会いもあったし良かった
  • 運動
    • 続かず
    • 飲みすぎる回数は減らせた
  • 友人
    • 数年会っていなかった何人かに会いに行けた

エンタメ周り

  • ゲーム
    • やったのはゼルダbotw、マリオオデッセイ、サマーレッスン(psvr)、ポケgo、ポケ森
    • 一番楽しんだのはオデッセイ。ゼルダを楽しみ切るには時間が足りない
  • 映画
  • TV/動画

投資

来年の抱負

  • 人とのつながりを大切に
  • 選択と集中
  • やるべきことをやりきる

メモ:2017年に読んだ本

今年も備忘録。

マンガ

今年は400冊くらい購入してた。全部bookliveで買ってるからサービス終了とかになったら死ねる。今年新しく読んだマンガで印象に残ったものの感想をメモ。

  • キングダム
    • 今更読んだけど面白かった
  • かなたかける
    • この作者はマラソン/駅伝を書かせたら最強
  • 響~小説家になる方法~
  • 賭ケグルイ
    • 結構好き。スピンオフ系が色々出てるけどそれは練り込まれてないから面白くない
  • 能面女子の花子さん
    • 周りの視線を気にしない花子さんがかっこいい。自分も精神的に強くなりたい
  • 久住くん、空気読めてますか?
  • ショートケーキケーキ
    • 王道少女漫画系の中では一番好きな作者

マンガ以外

技術書含め思った以上に読んでなかった。。2~3章だけ読んだ本は他にも色々あるのとSafari Books Onlineで動画は結構みた気がするけどもうちょっと勉強しろよという…。

  • 英語耳
    • セブ行く前にやっといてよかったと思った本
  • 結婚式・二次会 友人・同僚のスピーチ for Men
    • そういえば3月に挨拶したなぁ
  • インフラエンジニアの教科書/インフラエンジニアの教科書2
  • スタンフォード式最高の睡眠
  • 人生の勝算
    • 人となりを知ってる人の本は面白い。この人は凄い人
  • ビジネスモデル症候群 ~なぜ、スタートアップの失敗は繰り返されるのか?
    • 和波さんの本。良い本。
  • 「東京DEEP案内」が選ぶ 首都圏住みたくない街
    • 引越しの参考に
  • エラスティックリーダーシップ ―自己組織化チームの育て方
    • 英語で読んだので理解度半分
  • 浪費図鑑―悪友たちのないしょ話―
    • 知り合いが作者だったので購入。同人誌の延長で本が出るって凄い。

見た:「悲しみの忘れ方 Documentary of 乃木坂46」

あまり使っていないnasneの容量がついに一杯になってきていたので年末の特番を取るために整理していたらなぜか乃木坂46の映画「悲しみの忘れ方 Documentary of 乃木坂46」が録画してあったので見てみました。

乃木坂46はそれほど詳しくないんですがソニーミュージックの人とほんの少し仕事のやり取りがあった中で話題が出て興味を持ったのもあり全く知らないわけでもないグループです。

映画の上映は2015年で紅白出場を惜しくも逃した翌年の春くらいまでの話でした。何人かの中心メンバーに焦点を当てて、それぞれの母親からの手紙のような形でナレーションが解説しながら進んでいきます。

乃木坂46のそれぞれのメンバーが悩みを抱えていながらも努力して乗り越えていく姿を追っています。

30代にもなると若者が頑張ってる姿を見ると無条件で応援しちゃいますね。

映画を見てあらためて思ったのは成長っていかに自分の今のコンフォートゾーンの外に出るかが大事だなぁということです。自分の能力以上のことを無理にやってやっぱり失敗してでも努力して成長してっていうのを繰り返して、それをどれだけ繰り返せるか。

それを本人の意志と関係ないレベルでやらされているのが多分アイドル達で、映画の中でもみんな精神的にすごく成長しているのがわかります。その意味でああやって無茶ぶりがある環境ってすごく羨ましいなぁと思ってしまいました。たぶん自分が入ったら耐えられなくてやめちゃうんですが。

翻って最近の自分はフリーランスになって1年半くらい経つのですが、気づいたらストレスのかからない状態になりがちなんですよね。怒られることも無いですし会社勤めみたいに責任ある業務を無茶振りをされることも無いのでプレッシャーみたいなのがありません。

最近はストレスの中で働くのはダメみたいな風潮はあってそれは同意なんですが、自分が仕事の幅を広げるときに発生するストレスは常にあって然るべきだと思います。ちょっと今が快適すぎるので2018年はもうちょっとストレスを感じる仕事に取り組んでいかないと。。

ということで乃木坂46の頑張ってる姿を見たらおじさんももうちょっと頑張ろうと思ったという話でした。

振り返り:2017年の仕事

使った技術とか振り返る。12月は(飲み会で)忙しくて書くの忘れがちなので思いったった今のうちに簡単にまとめる。

やったこと

  • 会計システムを作ってるところで常駐
    • 去年から引き続き
    • 使った技術: AWS全般, Docker, Scala, Java
  • スタートアップでiOSアプリ開発
    • 週2で2ヶ月という内容だったのであまり価値を残せなかった
    • Swift
  • Web系のインフラ構築
    • サーバ周りの知識やAWSの導入サポートなど
    • AWSとかXAMPPとか
  • Web系のアプリ開発
    • 緊急とのことで頼まれたので
    • PHP
  • なんかセブ島に語学留学に行ったらそこで知り合った人と組むことになった案件
    • 会社と絡んで進めている
    • Rails使ったり営業先についていったり
  • その他個人/チームで作っているもの
    • 2~3個
    • Rails, Node.js, Reactあたり

技術について

  • アプリ開発で言うと今までBtoCなものをやってきたせいもあり、設計とかどうでも良いと思ってた派なんですが、会計システムをいじってるとどうしてもビジネスロジックは複雑化するので設計とか大事だなとあらためて気付かされた
  • 言語としては Rails, Node, Java, Scala, PHP まで色々と触れたのは良かった
  • インフラ周りというかAWSはそれなりにわかってきた
  • フリーランス2年目でやっと技術について少し詳しくなってきた気がする
  • とはいえDDDもクリーンアーキテクチャ関数型プログラミングも自分の中であまり消化できていないので色々と課題がある

これから

少しずつ自分の向き/不向き・やりたい/やりたくないがわかってきたので、そろそろ何でもやってみるではなくて自分の方向性を決めていきたい。

Spring SecurityでAES暗号化された文字列をRubyで復号してみた

AESで暗号化されたテキストを手元で復号しようと思ったけど意外とAESのことを知らなくて苦労したので簡単にメモ。(勉強を兼ねて無理矢理RubyでやっただけでSpringで普通に復号すれば良いだけなので実用性は無いと思う。)

Spring Securityでの暗号化

こんな感じで暗号化されたもの。

package com.example.security;

import org.springframework.security.crypto.encrypt.Encryptors;
import org.springframework.security.crypto.encrypt.TextEncryptor;
import org.springframework.stereotype.Component;

@Component
public class Encryption {
    public String encrypt(String password, String plainText) {
        String salt = "0123456789abcdef"
        TextEncryptor encrypt = Encryptors.text(password, salt);
        return encrypt.encrypt(plainText);
    }
}

詳細な暗号化方式はと言うと、下記がドキュメントに書いてあった。

Spring Securityでは、共通鍵暗号化方式を使用した暗号化および復号の機能を提供している。
暗号化アルゴリズムは256-bit AES using PKCS #5’s PBKDF2 (Password-Based Key Derivation Function #2) である。
暗号利用モードはCBC、パディング方式はPKCS5Paddingである。

なるほど、わからん。Wikipediaとかみつつ方式について理解してみる。

  • 256は鍵の長さで、128, 196, 256から選べるうち256bitのものを使っている。鍵の長さが長いほうが(計算量が多くなるので)セキュリティ的に良い
  • 暗号利用モードとはブロック暗号化のメカニズムのことでCBC(Cipher Block Chaining)は前のブロックのXORを取ることでブロック単位での一致を判定することをできなくする
    • CBCの初期ブロックはIV(Initialization Vector:初期化ベクトル)を用いることでメッセージごとのユニーク性を確保する
  • PKCS #5は[暗号化]ブロック暗号とは(AES/DES/Blowfish PKCS5Padding ECB/CBC IV) - [技術資料 + 技術資料] ぺんたん info によると余ったブロックをどう埋めるかという方式
  • PBKDF2というのはパスワードから何かしらの鍵を生成するときに計算量を増やして総当りをしづらくする方式とのこと。パスワードとソルトを使ったハッシュ化を複数回イテレーションすることで実現する。
    • ハッシュ化の繰り返し回数はパラメータぽい

それぞれはわかったので全体の処理の流れを調べると Closure Library の暗号化モジュールの使い方 - WebOS Goodies この図がわかりやすかった。

saltとpasswordからpbkdf2を使ってkeyを生成 → 平文データをIVとkeyを使ってCBC方式によりブロック単位にAES暗号化 という流れ。

復号化にあたっては暗号化の方式がわかった上で、

  • 復号対象のテキスト
  • PBKDF2の
    • 繰り返し回数
    • Salt
    • Password
  • CBCのIV

がわかれば良さそう。上記の内、Spring Securityで外側から指定しないのは繰り返し回数とIVなのでこれが分かれば他の環境でも復号はできるはず。

Spring Securityのパラメータを調べてみる

Ruby で復号する

これらを踏まえてRubyで復号してみる。 class OpenSSL::Cipher (Ruby 2.6.0) を見つつ実装すると下記のようになった。

pack関数でバイト列に変換してあげないとダメだったところでややハマった。

require 'openssl'

salt = ['0123456789abcdef'].pack('H*') # 8バイト
password = 'somepassword'  # 暗号化時に入力したパスワード
cipher = '7bc2a6f8e684a2963285064524a0f85fb3b47bc6300c699699fe99387a9f7b10' # Spring Securityから出力された文字列

# PBKDF2によるkeyの作成。256は鍵の長さ。
key = OpenSSL::PKCS5.pbkdf2_hmac_sha1(password, salt, 1024, 256)

# IVを取り出す(16バイトだがhex文字列になっているので32文字)
iv = [cipher[0, 32]].pack('H*')

# AESによる暗号文本体
encrypted = [cipher[32, cipher.length]].pack('H*')

dec = OpenSSL::Cipher.new("AES-256-CBC")
dec.decrypt
dec.key = key
dec.iv = iv

decrypted = dec.update(encrypted) + dec.final

puts(decrypted)

ちなみにSpring Securityと同等の暗号化をRubyでしたい場合はこんな感じ。

require 'openssl'
require 'securerandom'

salt = ['0123456789abcdef'].pack('H*')
password = 'somepassword'
text = 'hirabun'

key = OpenSSL::PKCS5.pbkdf2_hmac_sha1(password, salt, 1024, 256)
iv = SecureRandom.random_bytes(16)

enc = OpenSSL::Cipher.new("AES-256-CBC")
enc.encrypt
enc.key = key
enc.iv = iv

encrypted = enc.update(text) + enc.final
cipher = (iv + encrypted).unpack('H*').first

puts(cipher)

感想

AES本体のアルゴリズムには踏み込んでいないものの、それでも結構知らない部分が多かったので勉強になった。ちなみにSpring SecurityのAES暗号時にはstrongという指定できるようでそちらだと AES with GCMとなって今回のCBC方式とは違うらしい。

何となくわかったつもりでブログにまとめようとしたら意外と理解していない部分が多かったので調べ直した部分も多く、やはりこういうアウトプットは大事だなぁと改めて思った次第です。

LINE WAVE先行体験版の雑感 - Amazon Echo、Google Homeと比較して

先日LINE WAVEが無事届きました。同じスマートスピーカーであるAmazon Echo, Google Homeの両方を持っているので相違点を中心に感想をまとめました。

EchoもHomeも年内には日本語対応してくるみたいですが、まだ英語でしか使えていないので、その点をご注意ください。

f:id:miyasakura:20170903110043j:plain

※写真一番右はAI搭載英会話学習ロボットのMusioさんです

LINE WAVEでできること

今はまだ音楽再生と天気予報とアラームくらいです。ニュースを流そうとすると「いま準備をしています」となるので、これから色々進化していくことでしょう。

Amazon Echoは自社サイトでのショッピングができたり様々なSkillで拡張できたり、Googleは自社サービスとの連携(Googleカレンダーの予定を読んでくれたり)が簡単だったりという特徴があると考えると、LINE WAVEも独自性をどう出していくか気になるところです。

ハードウェア周りについて

電源コネクタが刺しづらくかなりしっかり入れないと充電がされないのがいただけないところです。最初電源ケーブルがちゃんと入ってなかったようで、充電がされない状態でした。その後ちょっと移動させたタイミングでまた半分抜けてしまっていたようで朝になったら電池ゼロで落ちてしまいました。

大きさについては最初の印象は"でかいな"と思いました。高さはAmazon Echoより小さいですが幅を取っています。バッテリーがあるのとスピーカーに良いのを積んでいるのもあるのでしょうが、製品を小さくするコストは想像以上なんだろうなと勝手に思ってます。

赤外線で家電を操作できる機能はまだ試せていませんが、便利に使えそうで期待です。それよりも日本の家電メーカーがさっさとWifiBluetoothで操作できる機能をつけて欲しいと思うわけですが。赤外線での操作に満足しているとまたガラパゴス状態になる気がします。

物理ボタンが裏側に電源ボタンとマイクオフボタン、あと上部に6つの操作ボタンがあります。ボリュームの上げ下げと曲送りがあり、残り3つはショートカットキーを設定できる予定のようですが現在は固定で、プレイリスト再生と「クローバ」の呼び名を省略して音声操作できるというものです。

他製品は電源とマイクオフ、ボリューム操作くらいしか物理で操作するものはありません。必要ないと思うんだけどなぁ。。。まぁスマートスピーカーというよりは音楽再生ガジェットとして物理ボタンをつけたということでしょう。

ソフトウェア周りについて

Amazon Echo, Google Homeと比べると、応答が1秒程度遅いです。2製品は2秒弱程度で応答が始まるのに対し、WAVEは3秒弱かかります。この差は実際に体験してみると大きな差です。

Amazon Echoの開発時にベゾスは応答速度3秒以内を実現しろといってかなりこだわったらしいです。

そのラインは達成しているので使用感として大きく不満ということは無いのですが、普段Google Homeを使っていてその速度に慣れていると明確に「遅い」と体感できる差があります。

日本語の処理部分については、呼びかけても反応してくれなかったり、クラシック音楽を再生してほしいのに「クラシック」という名前の曲を再生したりもどかしい思いをすることがままありますが、日本語特有の難しさもあると思うので、ここは英語対応の他製品と比較しても仕方ないですね。

理解できない内容についても人工知能がなんとか答えようとしてくれます。他製品は「Sorry, I couldn't help with that.」と答えるところを、「私もそう思います」みたいな会話をしようとしてきます。

こういったところは個人的には求めていないのですが、日本市場には受けそうな気もするのでGoogle Homeなどとの戦いになったときに消費者がどちらを選ぶのかは気になるところです。

とはいえ人工知能自然言語を理解して会話ができるようになるには技術的なブレークスルーが必要なわけで、どんな内容にも答えさせようとするのはまだ時期尚早じゃないかなとは思います。

Clovaアプリについて

ここは流石LINEといったところで最初からクオリティ高いですね。とはいえ普段からClovaアプリを使うことも無いので、これが良いからといって製品の評価がすごく上がるというものでも無い気はします。

LINE WAVEという製品について思ったこと

これから出てくるであろう他社製品との差別化というところで、LINEの新着を教えてくれたりとか、お気に入りのLINE LIVEの時間を知らせてくれたりとか、今後はそういったLNIE製品群を活かしたパーソナライズに強みを持てると思います。

ただそうなるとあまり他人がいる状況で使うことが考えられず、持ち出して使うケースが少なくなって、バッテリーのメリットが無くなってしまいます。

という感じで、家に置いといてほしい製品なのか、持ち出してどこでも使って欲しい製品なのかがよくわからない製品だなぁというのが正直な印象です。

個人的にはスマートスピーカーは家においておき、ニュースを聞いたり予定を確認したりと、アシスタントとして使うものだと思っていて、補完的な製品としてAmazon Tapのような持ち運び用途のものを出すのが正しいかなと。

色々詰め込むと値段も高くなりますしサイズも大きくなって良いこと無いですからね。

「ホームアシスタント」「どこでも便利に音楽再生」という二兎を追ってしまった感じがあるので、これが吉と出る凶と出るかといったところです。

おわりに

スマホがあっても家でインターネットするならPCでいいじゃんと思っていたら、今となってはPCを立ち上げるのが面倒でスマホを使っています。同じように音声操作の便利さを一度覚えてしまうと、スマホを立ち上げるのすら面倒になって当たり前のように音声操作を使うようになっていくのではないでしょうか。

そういう意味で一家に一台スマートスピーカーという時代は来ると思っていて、それをどの製品が実現するのかという行方が気になります。

今回のLINE WAVEはそういうスマートスピーカーというジャンルに直球勝負を挑むのではなく、音楽再生というところに寄せてきている印象を受けました。

新しいジャンルではあるので一般消費者に受け入れやすいように敢えてそうしたのか、それとも直球勝負だとGoogleなどのプレーヤーに勝てないと判断したのかはちょっとわかりませんが、今後の進化の方向性に注目です。

写真とか

いくつか写真をとったので最後に貼り付けておきます。

f:id:miyasakura:20170903110621j:plain

外箱

f:id:miyasakura:20170903110635j:plain

内箱

f:id:miyasakura:20170903110646j:plain

開けるとこんな感じ。

f:id:miyasakura:20170903110700j:plain

サイズ比較。

f:id:miyasakura:20170903110712j:plain

後ろ側に電源ケーブルを挿すところと電源ボタン。

f:id:miyasakura:20170903110723j:plain

電源入れると光る。

f:id:miyasakura:20170903110737p:plain

アプリの接続画面。