CSSのカラーコードを一括で短縮する

#fa05abのようにCSS等で指定するカラーコード。これは6桁または3桁の16進数で表現をしている。 6桁の場合はそれぞれ2桁ずつ、3桁の場合はそれぞれ1桁ずつを、RGBの順番にそれぞれの色の強さとして指定している。 6桁の指定で、2桁ずつ同じ文字を指定している場合は、3桁のカラーコードに短縮ができる。 例えば、#000000#000#ff00aa#f0aと。 このように短縮できるカラーコードを一括で変換したい事情があり、備忘録として残しておく。

変換

Macを想定。Linuxでもgsedsedと読み替えればOK。

GNU版のsedを使いたいので、brewでインストールしておく。

brew install gnu-sed

filelist.txtにファイルのパス一覧が入ってることを想定してるけど、ここはよしなに。

cat filelist.txt | xargs gsed -i -e 's/#\([0-9a-fA-F]\)\1\+\([0-9a-fA-F]\)\2\+\([0-9a-fA-F]\)\3\+/#\1\2\3/g'

macOSでVagrantのsshfsとGoogleのDriveFileStreamが共存できない

会社のMacGoogleのDriveFileStreamをインストールしたあと、Vagrantで開発環境を起動しようとしたらホスト側のディレクトリをマウントできずに起動に失敗してしまうようになった。

Vagrant起動時に出るエラー

Mounting SSHFS shared folder via reverse SSHFS mount failed. Please
look at the below output from from the processes that were run.

SSHFS command output:

mount_osxfuse: the file system is not available (255)

よく見てみると、Vagrantで使っているOSX_FUSEとDriveFileStreamで使っているDFSFUSEがかち合ってしまい、どちらか片方しか動作しないようだった。

ちなみに、Vagrantを先に起動しておいてDriveFileStreamを後から起動、そしてDriveFileStreamが起動失敗したときのエラーログ

ログファイルの場所: ~/Library/Application\ Support/Google/DriveFS/Logs/drive_fs.txt

2017-12-12T03:22:28ZE [123145566691328] stderr: mount_dfsfuse: the DFSFUSE file system is not available (255)
2017-12-12T03:22:28ZE [123145566691328] stderr: fuse: failed to mount file system: No such file or directory
2017-12-12T03:22:28ZE [123145569374208] mount.cc:92:Mount Could not mount fuse at /Volumes/GoogleDrive.

どうやったら回避できるかはまだ不明。

事業買収(譲渡)された時にエンジニアが確認・対応すべきチェックリスト

買収 Advent Calendar 2017 5日目の記事です。

自分が働いている会社または事業が買収(譲渡)されたときに、確認・対応すべきものをまとめてみました。
(ちゃんとまとめようと思ったんだけど、どうもやる気がでなくて箇条書きで…)
ちなみにこれは自分の経験談でもあります。

  • サービス内に記載している会社名、電話番号、 FAX番号、住所などの変更
  • 名刺の変更
  • 電話番号・FAX番号の変更、契約変更
    • 転送設定、期間、料金
  • 各種サービスのアカウント譲渡、名義変更
    • データセンターなどで運用しているオンプレなサーバ
    • AWS/GCP/Azure などのパブリッククラウドサービスで運用しているサーバ
      • アカウントの追加、アカウントへの移行、アカウントの切り離し
    • メール系インフラ(G Suiteや、Office 365など)
      • 転送設定、期間、料金
      • アカウント数での課金の場合、アカウント削除後同名のMLを作って、転送したい人をそのMLに登録するという手法をとることが多い。
    • AdobeやJetBrains IDE、その他契約中のソフトウェアについての契約、ライセンス
    • PC、携帯の入れ替え
      • 一時的にNASにバックアップ、または売却先にVPNを貼って売却先の共有ファイルサーバにアップロード
      • しっかりしているところだとVPNや共有ファイルサーバのアカウントは入社手続きがないと作れないので難しい場合がある
      • NASは2つ買っておいて、片方にバックアップしてもらって、受け渡し時にもう片方にコピーして両社が同じデータを持つようにして、不要なデータを持ち出していないかとかあのファイル貰ってないんだけど…と後からいざこざにならないように工夫をする場合もあるらしい。
    • その他会社支給品の返却

builderscon 2017 に行ってきた / DBの寿命は本当に長い

8/4, 8/5に開催されたbuilderscon 2017行ってきました。ブログを書くまでがbuildersconとのことなのでブログ書きます。

ちなみに、Find Job!という求人情報サイトもスポンサーをしております。 トートバッグの中にチラシが入ってるのでぜひ見てくださいね!!

チラシに印刷されたかわいいキャラクターは「アカボシ」ちゃんです。

www.find-job.net

心に残った言葉「データベースの寿命はアプリケーションよりも長い」

そーだいさんの発表で今回も「データベースの寿命はアプリケーションよりも長い」っていうワードがあったけど、これは本当に痛感しています。

いま自分が関わっているFind Job! という求人情報サイトは今年で20周年を迎えます。 その20年間のなかで、OSやプログラミング言語、アプリケーション、RDBMS(MySQL)は改修やバージョンアップを重ねていますが、Find Job! ができた当時にあったテーブルの構造はたぶんいまでもほぼ変わってないはず。本当にDBの寿命は長いです。

詳しくは言えませんが、さすがに20年間運用されて続けてきただけあって、いろいろつらいなと感じるテーブル構造なものもあります。
いまでこそ書籍やネットに設計手法やアンチパターンなどの情報はいくつもあるけど、当時はなかっただろうしこの現状はある程度仕方がないことだとは思います。

逆に言うと、いまは恵まれたことに(?)いい設計の話やアンチパターン、今回の発表のようなリファクタに関する話が広まっていて、(少し話がずれるけど)用途によってはRDBではなくNoSQLなDBを使うという選択も容易*1にできる時代です。さらに10年20年と続いていくサービスを開発するつもりならば、それらの情報をもとに徐々にDBをリファクタするべきだし、または新規に開発する機能・サービスではしっかりとDBの選定、設計をすべきだなと思いました。

発表の内容からだいぶ脱線しましたが、今回の発表を聞いて、DBのリファクタの手法や困ったときの相談先(=コミュニティ)を知れたので、今後実践していきたいです。
あと、発表の後半はけっこうエモくて勇気をもらいました。 いまでも少しずつではあるけどDBのリファクタは行っていて、先日もとある機能の改修の際にテーブル構造変えたり制約追加したりしてリファクタしましたが、今後も折れずに地道に頑張っていこうと思えました。

面白かった発表

分割QRコードの話

Twitterでも2回くらい言ってるけど、リアル謎解きイベントとかでアイテム(分割QRコード)を集めて、すべて揃うとメッセージが読める仕組みがあったら絶対おもしろい。
まぁ別に分割QRコードじゃなくてもよさそうだけど、通信は発生しないし、分割QRコードを読めるアプリさえ用意すればいいからお手軽かつそれっぽさが出ていいかな〜と妄想してました。

サーバレスの話

いまちょうど個人でも業務でもAWSのLambdaやらSQSやらその辺を使って開発をしていて、同じ壁にぶつかって(Macでビルドしたものが動かない…とか)、同じ解決方法をとっていて(Docker上でビルド)、とても共感できる話でした。

builderscon楽しかった

いくつも学びがあって楽しかったです。いつか自分も発表する側、運営する側にまわってみたいな〜って思いました。(高校の学園祭実行委員だったこと思い出して懐かしくなった)

最後に、水が重かった

最後に2つトートバッグもらったけど、それぞれのバッグにペットボトルの水が2本ずつ入ってて、その前にもらってた水と合わせると5本(合計約1.6kg)持って帰る事になり、けっこう大変でした。

*1:NoSQLの選択は容易ではあるけれど、安易に選択するべきではなさそう

星へ行く船シリーズを読んだ

読んだ。

星へ行く船シリーズ1星へ行く船

星へ行く船シリーズ1星へ行く船

コバルト文庫版は高校生の頃に友だちに借りて読んだことがあったんだけど、去年から新装・完全版(作者風に言うと決定版…かな)が発売され始めて、今年の3月で最終巻(5巻)が発売されたのでゴールデンウィークを利用して読んでみようと思ってまとめ買いした。
結局ゴールデンウィークこの間の記事にも書いたけどスターウォーズと劇場版コナンを観るのに使ってしまって、ゴールデンウィーク最終日にやっと1巻を読んだ。読み始まると止まらなくて、3日掛けて全5巻読み切った。

あらすじを引用するとこんな感じ。

森村あゆみ、19歳。“ちょっとした事情”で地球を捨て、火星へ家出中。無事に宇宙船が出航と思いきや、手違いで怪しげな男たちと同室に。男たちが関わるやっかいな事件に巻き込まれ―あゆみと太一郎の物語の出発点。
http://amzn.asia/7r8CVDn

この「星へ行く船」、ロマンチックSFというなかなか見ないジャンル。いわゆるラブコメSF。
あとで書くけど、新井素子が書く独特の文体も相まって、苦手な人は苦手かもしれない。

読んだ感想

高校生の頃に読んだっきりだったからほとんど覚えてなくて、おかげで新鮮な気持ちで読めた。
とは言いつつも読んでて少し思い出してきて、すごい懐かしい、というか主人公たちが相変わらずなキャラクターで(まぁ物語は同じなんだからそうなんだけど)安心した。

新装・完全版で各登場人物目線の短編も新たに追加されてたり、あとがきも新しく書かれてたり(と言ってもコバルト文庫版のあとがきも覚えてないんだけど)、満足感がある。

SFだし、新装・完全版で今風に書き直してるらしいんだけど、漂う80年代感。でもそれがいい。

新井素子作品との出会い

せっかくだから新井素子作品についても書きたい気分なので書く。

中学生の頃に母親に借りて読んだ「ひとめあなたに…」が新井素子作品との出会い。 「ひとめあなたに…」は、地球の余命があと1週間というニュースを見て、主人公は練馬から鎌倉まで彼氏に会いに行くことを決め、その道中でいろいろな人と会いながら鎌倉を目指す…というあらすじなんだけど、当時中学生だった自分には衝撃的・刺激的な話で、とても心に残ってる。

新井素子作品はいわゆるラノベの草分けと称されてるんだけど、そうであるならば「ひとめあなたに…」が初めて読んだラノベということになりそう。

新井素子作品のよさ

新井素子作品の特徴といえば、主人公目線で口語体で書かれていること。とくに主人公が女の子であることが多くて、地の文でも一人称で「あたし」と言う。
おかげでスラスラ読めるし、いつも主人公視点で読み進めていくとができるから感情移入しやすい。

あと、新井素子って「バカ」を「莫迦」って書くんだけど、それがまたいい味を出してて、口語体の文体と相まってなんというかかわいいんだよね。だからキャラクターに愛着がわくし、好きになる。

あとがきもおもしろい。
普段は、著者について知ってしまうと、著者の思想とかも踏まえて読んでしまって物語だけを純粋に楽しめなくなるのでなるべくあとがきを読まないようにしてるんだけど(同じ理由で声優とか俳優の顔とか日常とかあんまり知りたくない)、なぜか新井素子作品はあとがきまで読んでしまって、なおかつ、あとがきまで楽しめる。

地の文が口語体だったりしてクセがあるので好き嫌いは出るかもしれないけどぜひ読んでほしい作品。

5月4日、STAR WARSとコナンと

STAR WARS

5月4日といえばSTAR WARSという人も多いと思う。
STAR WARSでのセリフ「May the force be with you.」と5月4日の英語表記「May the fourth」を掛けてるというのは有名な話。

STAR WARS観たことなかった

今までSTAR WARSを観たことなかった。どうも自分は人気のものとか流行りものとかが苦手というひねくれた性格なので、食わず嫌いで観ようとしなかった。
けど、最近知り合いにおすすめされてGWを利用して観てみることにした。

観る順番に迷った

いままでSTAR WARSを観ようとしなかった一因でもあるんだけど、観る順番をどうするか調べる(考える)のが面倒くさかった。
今回観ようと思ってやっと重い腰を上げて調べた。

観る順番のパターンは2つあって、公開順かエピソード順か。
そもそもSTAR WARSは、エピソード4が一番最初に公開されてその後、5 → 6 → 1 → 2 → 3 という順番に公開されていて、エピソード順と公開順が一致していない。
なので、公開順で観るのかエピソード順で観るのかという選択肢が出てくる。
自分は、知り合いのおすすめと、公開順のほうが当時の観客と同じ視線で観れて楽しいかなということで、公開順で観ることにした。

観た感想

ということでTSUTAYAでBDを借りて公開順に1〜6まで観たんだけど、普通に面白かった。 いや、語彙力ない上にネタバレなしで感想を言おうとするとこうなる。

R2-D2かわいい。

ライトセーバーでの殺陣のシーンはあまり迫力を感じなくて残念だった。けど、エピソード3の殺陣は結構かっこよくて満足だった。

エピソード4(公開: 1977年)を観たときに「すげー、当時でもこんな映像作れたんだ」とびっくりしたんだけど、Wikipediaによると表現がCGに変更されていたり、シーンが追加されていたりとだいぶ修正が加えられているらしい。

まだエピソード7とローグワンは観てないので観ようと思うのと、エピソード8が今年12月に公開らしいので楽しみ。

コナン

実はもう一つ5月4日は大事(?)な日であって、工藤新一/江戸川コナンの誕生日。 アニメキャラの誕生日をお祝いする文化圏に住んでいないので、お祝いするという話ではなく、それにまつわる映画を観たという話。

今日観たのは、「時計じかけの摩天楼」と「世紀末の魔術師」

時計じかけの摩天楼

これはコナン初の劇場版作品。1997年公開。 誕生日前後に起こる事件の話。

うんちくを披露しておくと、白鳥刑事(正確には警部補。現在は警部に昇格してる。)が初登場する映画で、以後のTV放送のアニメでもレギュラーキャラクターとして登場するようになる。

世紀末の魔術師

劇場版3作目。作品名の通り世紀末ということで、1999年公開。 これは、コナンの姿で誕生日を明かしてしまい、新一と同じ誕生日ということで蘭に疑われる話。

初めて映画に怪盗キッドが出てくる作品。

世紀末の魔術師は全コナン映画の中で一番好きな作品であり、おすすめの作品。

今年の作品は…

から紅の恋歌<ラブレター>」はまだ観てない。毎年、全劇場版コナン(ルパンは除く)を観てからという自分ルールを作っているのと、空いた映画館で観たくてGW明けてからのほうが空くかなと思ってまだ観てない。
今年は、「迷宮の十字路」ぶりに平次と和葉がメインの話なので、かなり楽しみ。

ちなみにコナンは恋愛を絡めたアクション映画だと思ってる。

最低賃金API作った #API納品日

どうもこんにちは。さて、本日4/6はAPI納品日*1です。
みなさんちゃんとAPI納品しましたか?
納品できてない?ちゃんと納期は守ってくださいね。

最低賃金API

4月から新しい部署に配属となってそこでの大雑把な業務フローを聞いたんですが、そのフローの中に「求人の時給が最低賃金以上かどうかを人の目で判定する」というのがあって*2、そこは自動化できそうだなーとか思ったんですよ。

あとから検索してみたらさすがにAPIはなかったものの、作ってみた(けっきょく公開はされてなさそう)という話があり、あったら面白いし自分で作ってみるかって思って作ってみた。

github.com

Ruby地域別最低賃金の全国一覧 |厚生労働省スクレイピングしてJSONJSONPとして保存するスクリプトを書いた。 GitHub Pagesでホスティングをするために、JSONdocs/ ディレクトリへ出力してる。

まだできていないけど、CircleCIかなにかで1日1回更新するように定期実行できればと考えてたりする。 (そもそも各地域の最低賃金が更新されるのは基本的に10月なので、その前後で動いてればいい)

ついでに上記のなんちゃってAPIを呼び出せるJSモジュールも作ってみた。

github.com

パッと思いついたその日の夜にスクレイピングスクリプト書いてて楽しかった。久しぶりに趣味プログラミングした気がする。
JSONPを扱うのもこういうモジュールを作って公開するのは初めてだったから、そのへんの経験ができてよかった。

*1:詳しくは秒速5センチメートル見てね

*2:一応断っておきますが、最低賃金のチェックはエンジニアの業務ではなくCS/オペレーターの方の業務です