Markdown文書で画像の表示にURLを使わず埋め込む

今回から技術記事はHatenaBlogに書いていこうと思います。

忘備録

Markdownに画像を表示する場合、どうしていますか。おそらくimgurやGitHubなどに画像をアップロードしてURLを参照していると思います。

imgur.com

![airplane](https://homepages.cae.wisc.edu/~ece533/images/airplane.png)

が、機密性のある画像のURLをpublicに公開したくはないが、Markdownで書きたい場合はどうすればよいか。

A. Data URI schemeを使う

Data URI Schemeとはと言う方はWikipediaをどうぞ。

ja.wikipedia.org

何でも良いですが、画像をbase64 encodingします。

$ base64 airplane.png > airplane_base64.txt
![airplane](data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAIAAAB7GkOtAAAAB3RJTUUH0AESFgINTbbB1gAAAAlwSFlzAAC4jAAAuIwBzPa7LwAG32VJ.....)

この様に画像のURLを使わずに画像を埋め込むことが出来ました。

f:id:teitei_tk:20200425113315p:plain
markdown preview

問題点

GitHub flavored markdownではセキュリティ上に理由でbase64を利用した画像は使えません。

github.com

この点はGitHub flavoerd markdownを利用する時点である程度publicな文書だと思うのでおとなしくGitHubに画像をアップロードして使ったほうが良さそう。

ワイヤレスヘッドホン "Bose QuietComfort 35" レビュー

5年ほど前に使っていたヘッドフォンがご臨終なされました。

ついに長年使っていたヘッドフォンが壊れてしまった。南無。

使っていたのは Audio-TechnicaATH-A900というやつを使っていました。

audio-technica アートモニターヘッドホン  ATH-A900

audio-technica アートモニターヘッドホン ATH-A900

確か1万〜2万の間だったかな。そういった意味では十分にペイしたかなと思います。南無。

というわけで新しいヘッドフォンを探した。

イヤホンでも良いんですが、個人的にはヘッドフォンが良いなという事でヘッドフォンをメインに探してみました。
今回重視した点としては

  • ワイヤレスヘッドホンであること
  • 通勤時〜仕事中でなるべくシームレスに使えること
    • 通勤中はiPhone ~ 社ではMacに繋げることが出来る。
  • そこそこの音質

というわけで色々探していたら友人がBose QuietComfort 35を使っているとの事だったので、
いろいろと調べてみて、実際に店舗で視聴をして購入を決めた。

新しいヘッドホンを手に入れた。が、オタクなのでアニソンしか聞かないし、無駄感あるのは無視しておきます。

www.bose.co.jp

購入を決めた理由

ワイヤレスヘッドホンであること

これまであまり意識をしていなかったのですが、ワイヤレスヘッドホンは神。 線が無いので、仕事中席から少し離れて飲み物を取りに行く際にもつけたままなのはかなり良い。
通勤中も、仕事中もだいたいヘッドフォンをつける or 首に下げておいています。

無線LANが当たり前になっている今日このごろですが、改めてWirelessの利点を認識した。 Bluetoothが使えない端末のために有線のケーブルも入っているので、問題ない。

Nintendo SwitchBluetoothに対応してクレメンス・・・。

iPhone ~ Macでシームレスに使えること

これに関しては想像以上に良かったです。
専用のアプリでBose Connectというアプリがある。

www.bose.co.jp

これで接続先、iPhoneへの同期、接続先を選ぶことが出来る。 Bose Connectなのか、"QuietComfort 35"だからなのかは分からないが、同時に2台まで接続が出来る。

例えばFireTvStickに繋ぎながら冴えない彼女の育て方♭を見つつ、iPhoneFate G/Oをやるという事が出来る。
もちろん、両者の音は聞こえます。

接続先に繋いだ or 切れた場合は、機械音声でデバイスの接続状況をヘッドフォンから教えてくれるのでそこも体験としては良かった。
なお、発音する言葉は(お察し下さい

そこそこの音質

そこまで音質にはこだわらないが、でも一応の音質は欲しいと思っていたのでここは視聴して聞いてみた。
耳が貧弱なので、どういった音声なのかというのは分からないが、一定以上の音質であることは間違いないと思う。

使ってみた感想

Bluetoothなので不安定

無線の宿命なのか音がぶつ切りになることが多いです。
安定しているときもあるし、不安定なときもあったりと再現条件が謎。
まあ、ここは仕方ないかなと思っている。

バッテリーの持ち

バッテリーはそこそこ持つ印象です。
届いて初日にほぼほぼフル稼働で1日使ってみた結果、およそ40%ぐらい減りました。

物理ボタン

全てアプリというわけではなく、電源と音量調整、再生停止のボタンが物理である。
電源のオン・オフは1秒ほどで出来るので使わない時はすぐにオフにすることが出来る。

実はAudioTechnicaのATH-CKS55XBTというワイヤレスイヤホンを持っていたのですが、
電源のオン・オフが面倒で使わなくなった経緯があった、ここも良かったです。

所感

ぶつ切りになる事はありますが、どこに行くときでも持ち歩けるぐらいの大きさで、 なおかつワイヤレス、iPhoneをハブにして色んなデバイスに繋ぐことが出来るなど、かなり良い製品だと思います。

Chrome Headless Browserを触った所感と、Flowtype・ES2017構文を使ってChrome Headless Browserを動かすライブラリを作っている話。

Chrome Headless Browser、思った以上に需要ありそうなので書いてみます。

まずは触った所感ですが、社内LTの際に喋った資料があるのでそちらをペタッと。

まとめると

  1. Phantom.jsの死亡
    • 唯一のメンテナが今後はChromeHeadlessに乗り換えるであろうとメンテナを辞任
    • 今後の構想はあるのか、phantomiumというPhantomJS + ChromeHeadlessの単語が組み合わさったレポジトリはある。
  2. Googleが開発している安心感
    • 今後Chromeを手放すことはそうそうないと思うので、今後のベストプラクティスになる可能性が高い。
  3. Production環境への投入は待ったほうが良い。
    • 謎の –disable-gpu Option
    • APIが落ち着いていない。
    • Seleniumなど、各種エコシステムが対応してある程度枯れるのが半年、ベストプラクティスが確立されるのが1年後ぐらいかなと予想。

軽く触ってみた。

Shellでならさくっと触ることは出来ます。

1.HTMLをDumpする

  • $ chrome --headless --disable-gpu --dump-dom https://www.chromestatus.com/

あとはAWS Lambda + API Gatewayに突っ込んで見たりもしました。

  1. キャプチャの撮影
  2. ページをPDFへ変換

Flowtype・AsyncAwait(ES2017)を利用してライブラリを作っている話

Githubとかも見てみたんですが、特にライブラリが無かったので、最近のJavaScriptのキャッチアップを兼ねて自分で作っています。

github.com

Node.jsで作っています。超絶α versionです。

Architectureとしては、

  • Flowtypeによる型付け
  • AsyncAwaitサポート(babel-preset-2017)
  • Eslint、EsdocによるDocument生成

TypeScriptにするかFlowtypeにするか迷いましたが、
現在所属している会社ではFlowtypeを使っているのでキャッチアップを兼ねてFlowtypeにしました。

このライブラリで行っていることは、

  1. Chromeの立ち上げ
  2. Chrome Debugging Protocolへの接続とレスポンスの取得

です。

作った動機としては、JavaScript界隈のキャッチアップも兼ねているのですが、
iQOS2.4 Plusの予約システムがあまりにも(お察し下さい)だったので(お察し下さい)という理由です。

簡単な使い方

examples/ にサンプルを老いてあります。
ここではPDFを出力する例を貼ります。

gist.github.com

実行すると、PDFが生成されます。

$ ./node_modules/.bin/babel-node example/printPdf.js
1497867182283.pdf       LICENSE                 docs/                   lib/                    package.json            yarn.lock
Dockerfile              README.md               example/                node_modules/           src/

f:id:teitei_tk:20170619191438p:plain

ライブラリの中身

  1. Chromeの立ち上げ

lighthouseというライブラリを利用しています。

github.com

ソースコードを覗いてみると、Typescriptベースで、childprosessでchromeを立ち上げているようですね。
https://github.com/GoogleChrome/lighthouse/blob/master/chrome-launcher/chrome-launcher.ts

というわけでこのClassをImportして使っています。

// @flow
import { ChromeLauncher } from 'lighthouse/lighthouse-cli/chrome-launcher';

export default class Launcher {
// do something.
};

処理はココらへんです。

https://github.com/teitei-tk/Chaldeas/blob/master/lib/chrome/launcher.js

  1. Debugging Protocolへの接続

これはchrome-remote-interfaceというライブラリを利用しています。
github.com

簡単な使い方はREADME.mdに乗っていますね。

こちらもソースコードを覗いてみると、Chromeへ対してリクエストを覗いているWrapperですね。

所感

devtools-viewerを眺めてみると面白そうな物はいっぱいあります。

  1. ServiceWorker Chrome DevTools Protocol Viewer - ServiceWorker

  2. Profiler Chrome DevTools Protocol Viewer - Profiler

が、やはり目立つExperimentalの文字。 Production環境への投入はもう少し待ったほうが良さそうですが、触ってみると楽しいことがあるかもしれません。

そしてPullRequestをお待ちしております :) github.com

freeeに入社して3ヶ月が経った

あー、そうかもう3ヶ月かーと思ったので書くかと思った所存です。
ちなみにプレゼントはiPhone7 Plusにしました。

最初は入社して1ヶ月ぐらい経ったら書くかな。と思っていたのですが、
数ヶ月たったぐらいが熱も冷めてまともな記事かけるかなと思った所存です。
とは言え、自分の会社というバイアスがかかっているのでそこは承知の上でお願いします。

freeeについて

クラウド会計ソフトを作っている会社です。詳しくはこっちとか

jobs.freee.co.jp

自分はその中のSoftware Enginnerとして働いています。

会計ソフトって言うからお硬いんじゃないかなと思うかもしれませんが、
頭が金髪のPMが居たり、ピング髪のエンジニアが居たり、一部金髪のエンジニアが居たりなど
まあカラフルな人たちが集まっています。(色的にも人的にも

最近だとこんなのも出しました。 www.freee.co.jp

価値基準

自分が入社して一番驚いたのは、会社の価値基準を浸透している風土だったかなと思う。
freeeには下記の5つの価値基準が置かれている。

  • 本質的(マジ)で価値がある
  • 理想ドリブン
  • アウトプット -> 思考
  • Hack Everything
  • あえて、共有する

こういった価値基準を立てる会社は多いものの、
有名無実化されている会社ばかりだった。(少なくても自分が過去に居た会社は。
それが日常的な会話の中で皆恥ずかしがらずに普通に使われている事に驚いた事を覚えている。

最初はマジで価値があるとか大丈夫かよと思ったが、
入ってみると本当にその名の通り、ユーザにとって"本質的に価値がある"と思っている事を実行されており、ただ単純に良いなと思った。

特に自分が好きなのはあえて共有するという価値基準である、

人とチームを知る。知られるように
共有する。オープンにフィードバック
しあうことで一緒に成長する。

チーム思考な自分はこの価値基準はかなり良いなと思っていて、
社内では自称freee1のポエマーと名乗っており、社内のQiitaTeamでポエムをよく書いている。

技術スタック

使っている技術は一部ですが、下記な感じ

freee k.k. Careers - フルスタックエンジニア: Eng

その他にもKotlinやSwift、Slack、Mackerel・NewRelicなど
比較的スタートアップでよくあるRuby関係の技術スタックかなと思います。

ちょっと変わっているかなと思ったのは、(サーバサイド|フロントエンド)エンジニアという枠が無い。
もちろん皆、得意不得意はあるのだが基本はサーバサイドもフロントエンドも触っている。
良いか悪いかは個人次第だろうが、自分の様な器用貧乏にはちょうど良い。

勤務体系

自分は11時に出社し19時から21時の間に帰る感じで働いているが、
他の人は早く来て早く帰る人などもいる。

それ以外にもリモートワークも出来る。基本的にはオフィスに出社だが、
体調が悪い日だったり子供が病気になったりした時は自宅で作業することも出来る。
虚弱体質な自分にはありがたい。

福利厚生

飲食物

飲み物はfreeeeeeeです。正直あまり期待していなかったんですが、
入社してみると社内にファミレスにあるようなドリンクサーバーが置いてあって滅茶苦茶笑った。
(オフィスで利用を始めたのは弊社が初めてとか聞いた。
コーヒー好きな人の為にエスプレッソマシンがあったり、軽食(レトルト食品)なども無料で食べることが出来る。

これは人によってはブラックと言われるのかもしれないが、夕飯が無料で出る。
別に絶対食べる必要もなく、これを食べたから遅くまで残業しろという事では無い。

毎日Slackbotが締切の時間が近くなると通知をしてくれる。
通知してくれるGoogleスプレッドシートに名前を書くと、弁当を食べることが出来る。
f:id:teitei_tk:20170209210555p:plain

これらのお陰で自分はエンゲル係数がだいぶ下がった。

部活動

社内には部活動があって、
ロードバイクボルダリングといった運動系から、カラオケ・ボードゲーム部などかなり種類がある。
そういった部活の費用も一部負担してくれたりで行きやすいといった印象です。

書籍購入

書籍も業務に必要なものに関しては上長の承認などを得ずに購入申請を出来る。
自分もこの制度を使って会計に必要な本を申請したりなどもした。
その他に技術書なども購入している。
購入した本は持ち帰っても良いので、休日には購入してもらった本を外で読んだりなども出来る。

衣類

その他にも会社のロゴが入ったパーカーやTシャツなども無料で貰ったりもした。

弊社のロゴ入りパーカーを手に入れた

比較的衣服に興味がない自分はこれらのパーカーやTシャツなどは普通に着て出社している。

福利厚生などに関しては一人ひとりの節度やモラルによって守られているので、
自分はそこら辺考えながらやってます。

私が入社して行った3つの事

ここまでは弊社の紹介である。
色々と福利厚生があるが、大いなる力には大いなる責任が伴うって生きているばっちゃも言っていた。

というわけで自分が入社して大きくわけて3つやった事を振り返ってみる。

1. 技術スタックとドメイン知識の理解

技術スタックに関しては上記に上げたとおりRailsとReactだが、
自分はどちらもProduction環境では触ったことが無かった。

弊社はRailsの会社なので、キャッチアップをするために最初の1ヶ月は、
通勤中の電車でRails + React(Flux Architecture)で簡単なWebサービスを作ったりした。 特にFluxに関しては、触っても居なかったので苦労をしたが、今では読んだり書いたりすることが出来る。

今のところ決して技術的に貢献出来るているとは口が裂けても言えない状況だし、
むしろ足を引っ張っているところもあるので結果を出さないとなと思っている。

技術スタック以外には会計ソフトの会社なので簿記に関する勉強などもしている。
とはいえ、やる時間が取りづらかったりでまだ覚えたとは言い難い。

ここは振り返ってみてかなりの反省点だなと思った。

2. ポエム業

これはエンジニアリングではないのだが、社内で幾つかポエムを書いたりしていた。
それは自分の半生を書いた自己紹介だったり、入社して1ヶ月経って感じた駄目な所を上げてみたりなどである。
これは弊社CTOの@yokojiにも褒められたので、今後もやっていきたい所存。

3.朝会の改善

朝会の司会をやったりした。そのタイミングで朝会の企画運営を行っているところへ入ったり等をして、
朝会自体の改善だったり、啓蒙活動等をやったりした。
これまで朝会なるものを死ぬほど嫌っていた自分であったが、
キャリアの中で初めて組織の関わる事をやってみた。
チームビルディングとは難しいという知見を得ることも出来た。

組織に関わる事なんてつまんねーよなーと思っていたのだが、やってみると中々面白い。
今後はコードを書くだけでなく、チームビルディングなどもやっていきたいなと思っている。

振り返ってみたが、あまり結果を出せているとは言い難いなと思っているので、
今後はもっとやっていきの気持ちを高めつつ結果を出していかないとなと思っている所存。

所感

freeeに入社してよかったか?と聞かれると「毎日楽しくやっています。」と答えている。

転職AdventCalendar入社エントリにも書いたが、
比較的価値観の近い会社を選んだつもりだったので大体は自分に合っている。
(会社も馬鹿ではないので、ある程度空気感に合う人間を選ぶので当然といえば当然である。

今のところ居心地は良いので去るつもりは無いが、
それに甘えず価値を出していかなければ行けないなと自戒する日々であるかなと思う。

何か話を聞きたい人がいればMentionなりDMなりをくれれば気軽に紹介します。

スマートウォッチ、"Skagen Hagen Connected" レビュー

私事ですが、誕生日を迎えました。

amzn.asia

で、その際に嫁にSkagenの時計でHybrid Smart Watchである
Skagen Hagen Connectedを買ってもらったのでレビューでもしてみようかと思う。

形はこんな感じ。

少し早いですが、嫁から誕生日プレゼントとして時計を頂きました。感謝。 #スカーゲン #skagen

公式動画はこれ。


Skagen Brand Hagen Hybrid Smartwatch

ちなみにiPhoneユーザなので、iPhone前提です。
Androidも対応しているらしいですが、確認はしていない。

アプリ画面が英語になっているのはiPhoneの言語設定を英語にしているからです。
日本語には対応しているっぽいが、確認は(ry。

購入した経緯

なぜこの時計にしたかというと、一言で言うと外見である。

元々Skagenの時計は欲しいと思っていたのと、
Apple Watchを購入するタイミングを逃したからである。

AppleWatch・Android Wearを購入した人たちが1ヶ月ほどで
手首から消えてゆくのを見てきたので、時計としての魅力は薄いかなと思っていた。
それにiPhoneのヘビーユーザーである自分には
Notificationを受け取るための装置としてのSmart Watchは不要かなと思っていた。

が、この時計はSkagenの時計のデザインの良さがあるし、
Smart Watchで何が出来るかをエンジニアとして体験しておいたほうが良いなと判断した次第です。

何が出来るのか

スマートフォンとはBluetoothで同期をしてアプリで管理が出来る。

AppleWatchよろしくスマートフォンのNotification(通知)を受け取るのと、
Activity(徒歩数・睡眠時間)のトラッキングが出来るのが最大の特徴。

後はバイブレーションによるアラーム・異なるタイムゾーンの確認が出来る。

独自の機能としてはSkagen Linkというボタンに機能を1つだけ割り当てることが出来る。
機能としては下記

  • Ring Phone
    • スマートフォンから音をだすことが出来る。どこに置いたか忘れた時に鳴らしたりするのが一般的だろうか
  • Control Music
    • iTunesの再生・次の曲へ、前の曲へをそれぞれ1タップ、2タップ、ロングタップで操作が可能
  • Take Photo
    • ボタンを押すことでカメラのシャッターを切る。
  • Start Goal
    • 徒歩でどれぐらい歩いたかのゴールを設定出来る。使ったことが無いので詳細は不明。

これ等は全てアプリから確認&設定が出来る。

通知

勘違いしていたのだが全てのアプリからの通知を受け取ることは出来ない。
なのでソーシャルゲームからの通知など、日本独自のアプリの通知は受け取れないと思ったほうが良い。

とはいえSNSやチャットツール、メールの通知などは有名所は全て対応しているので問題はなさそう。
SlackやHipchatにも対応しているのはエンジニア的にありがたい。
かなり重要な要素だったが、LINEの通知にも対応しているのは本当に良かった・・・。
もちろん電話等の通知にも対応している。

通知を受け取ったらバイブレーションで教えてくれる。
後はSecond Displayという小さな針と文字盤がついているのだが、
そこに色が着いており、アプリによって通知を受け取った際にどこの色に対応割り当てるのかを判断出来る。
自分はSNS・メール、チャットツールを色によって分けている。

アクティビティ

スマートウォッチのメイン機能なのか、徒歩数や睡眠時間をトラッキング出来る。
最初は興味は無かったが、自分がどれだけ歩いているのか。どれぐらい眠っているのか データとして見るのは中々楽しい。

Apple純正のHealthアプリと連携することも出来るので閲覧性も悪くはない。
が、睡眠時間はHealthアプリに連携が出来ない。ここはアップデート待ち。

1週間ほど運用してみてわかったことは、
とにかく自分は寝る事を覚えたほうが良いという事だった・・・。

あとは、これは仕方ないと思うのだが、
キーボードをタイピングしているだけで徒歩数にカウントされてしまう。
なので徒歩数は割りと怪しいので、このデータを全て鵜呑みには出来なさそう。

使ったことはないのだが、
スマートウォッチでよくある徒歩数によってゴールを割り当てることが出来るらしい。 ウォーキングやランニングをする時にはかなり良さそう。

アラーム

バイブレーションによるアラームを受け取ることが出来る。
購入した当初は複数のアラームを設定することは出来るが、
バイブレーションに設定出来るアラームは1つだけで使いづらいかったが、
アプリのアップデートによって複数のアラームでも受け取れるようになった。

バッテリー

他のスマートウォッチは充電式が多いが、これはボタン電池交換式らしい。
コイン電池式で、交換に関しても特殊な機器などは要らず、コインで蓋を開けて交換出来るとのこと。

バッテリーの残量はアプリから確認が出来るので、ある日突然動かなくなったとかはなさそう。

公式では半年ほど持つと言う話だが、1週間ほどで電池メータが1つ減ったので、
おそらく3ヶ月ほどしか持たないのかもなぁと思っている。

とは言え、バッテリーをそこまで気にする必要が無いこと事は良いことだと思う。

不満点

  1. バイブレーションが弱い
    日中は分かるのだが、起床時のアラームは気づけ無いことが多い・・・。 バイブレーションの強さは最大にしていても割と弱いので辛い。

  2. 通知可能なアプリが少ない
    まあ日本の会社ではないので仕方ない。

  3. 通知可能アプリ数が6つ
    これはバッテリーとのトレードオフなのかもしれないが、せめて10ぐらいは受け取りたい。

  4. 重さ
    まあこれはハードウェア的な制約があるので仕方ない。あとはまあ慣れだろう。

所感

不満点は多々あるが他のスマートウォッチの電池の持ちとデザインのアレさを考えるとかなり良いと思う。

ascii.jp

www.gekokujo-labo.com

記念品としても良かったと思うし、時計自体は気に入っているので今後も使っていく。