文字っぽいの。

文字を書いています。写真も混ざります。

Comparable#clampがSwiftにも欲しいので作った

Comparable#clamp という便利メソッドを知った。

blog.bigbinary.com

いままではこう書いていた

let number = 100
let lowerLimit = 0
let upperLimit = 20
min(max(lowerLimit, number), upperLimit) // => 20

Swiftにもほしいと思って調べたけど、Rangeの clapmped ってのだけ出てきて見つからなかったので書いてみた。

extension Comparable {
    func clamp(to limits: ClosedRange<Self>) -> Self {
        return min(max(limits.lowerBound, self), limits.upperBound)
    }
}

これを定義しておくと最初のコードは

let number = 100
number.clamp(to: 0...20) // => 20

と書けて便利。

もうちょっと良い書き方とかあったら教えてもらえると喜びます。

「ずるい」ではなく「いいなぁ」って言うとすべてが上手くいく

気がする。

子供のしつけで「ズルいわけじゃないんだよ」って教えるってのよく話題になる気がする。そもそも「ずるい」って

《形》人をだしぬいて自分が得をするような、正しくないやりかただ。わるがしこい。こすい。

という意味なので、ネガティブなんですよ。あいつは悪事を働いて不当に利益を得ている的な。だから「ずるい」って言われると「これは正当な権利でウンヌン」って説明から入るじゃないですか。マイナスイメージをゼロにしてから、じゃあ全員をプラスにするにはって話をしないといけない。これはすごいコストがかかって、だいたいマイナスをゼロにして「あー、疲れた」ってなって終わってしまう。

「いいなぁ」って会話から始まると、ゼロからプラスにする建設的な話がしやすい気がするんですよ。気がするだけだけどね。

株式会社はてなに入社しました

株式会社はてなに入社しました

今年もよろしくお願いします。

株式会社はてなに入社しました - hitode909の日記

「新卒が今の発言をしても許されるか?」という基準で自分の発言を鑑みる

3年も働いていると地位や信頼値にも変化があり感覚が鈍ってくるので、思考ゲームをして遊んでいる。

  • 自分の立場に甘んじた発言をしていないかが分かる(ときがある)
  • 覚悟をもって発言しているかが分かる(ときがある)
  • もし新卒がその発言ができない場合、心理的安全性が確保されていないと分かる(ときがある)

遊びです。当然ですが、発言の内容にもよります。

『吉田類の酒場放浪記』で紹介されたお店をGoogle Mapにまとめました。

こちらをご覧ください。

そうです。酒飲みが愛する情報番組である『吉田類の酒場放浪記』は、最高便利なのです。最高便利なの番組の情報がもっと簡単に使えるように、えっさほいさとGoogle My Mapにまとめたので共有します。

drive.google.com

このマップを使えば、どんな駅に降り立っても酒を楽しむことができます。ご自由にご利用ください。

備考

吉田類の酒場放浪記はHuluで見ることができます。

www.happyon.jp

掲載内容に問題がある場合は、ご連絡お願い致します。

静岡は浜松に行ってきた。

大学時代の友人たちと浜松に行ってきた。

忘年会か新年会をする予定だったのだが、予定が合わずに、浜松(東京と大阪の中間ぐらいだし)に集まって飲もうという事になった。

浜松はうなぎ以外にもすっぽんが有名らしいので、1日目の昼はすっぽんを食べた。

味がして美味しい。うなぎパイも有名なので、うなぎパイファクトリーに観光しにも行った。

労働の様子。ずっと見られながら働いてて大変そう。

これはパフェ。

夜は温泉に入って交互浴を楽しんだ後、浜松餃子とかスーパーでお惣菜とかを買って、ホテルで飲み会をした。トロイカカタンをやっていたら27時になり、「結婚とは」みたいな話をしながら寝た。

起きたのは10時で、モーニング?な時間なので、ブランチとしてうなぎを食べにきた。

藤田というお店で、1時間ほど並んで、20分ほど焼きを待って、ようやくありつくことができた。絶滅の片棒を担いだ感もありつつ、とにかく旨くて最高だった。

今は新宿についたところで、とにかく人が多くて厳しい。

最近、久しぶりに会う友人と「どんなノリで会話してたっけ?」と思案した結果、ラフな敬語で話しかける事が多くてコミュ症感が高まっているので、リハビリしていきたい。とにかく会話する社外の人間が、家族しかいないってのが良くなさそう。交流をしていきたい。

嫁の転職を支える技術

f:id:FromAtom:20180214204559p:plain
嫁を面接した企業が「あれ、これって……。」となる画像

はじめに

最近嫁が転職活動をしていたのですが、デザイナーは転職活動をする際に「ポートフォリオ」なるものが必要になるそうです。Webデザイナーである嫁は、このポートフォリオをWebサイトとして製作したいとのこと。

エンジニアリングを生業とする旦那として、ここは一肌脱がねばと思い、ポートフォリオサイトの構築をしました。

コントラクター(僕)のスペック

  • iOSエンジニア
  • Webアプリは過去にやっていた

クライアント(嫁)のスペック

  • デザイナー(仕事はWeb系)
  • Ruby, JavaScriptはほぼ書けない
  • HTML, CSSは書ける
  • Git, GitHubは使える

クライアント(嫁)の要望

  • パブリックに公開するのではなく、履歴書に添えたい
    • URLを知っている人しかアクセスしない
  • パスワード(BASIC認証)が欲しい
  • デザインはいちから自分で組みたい
  • SlimとSassを使いたい
  • イラストやロゴなど趣味や個人で依頼された仕事の制作物ものせたい

とのことです。最初はTumblrで簡単に作ればええじゃろと思っていたのですが、思いの外しっかりと仕組みを作る必要がありそうです。

成果物

実際に利用した構成を基に、テンプレートとして使えるように整形したのがこちらです。

github.com

どうぞご利用ください。

構成

iOSエンジニアとしてはServer-Side-Swiftを選択したいところですが、Middlemanを使いたかったのでRubyベースです。下記Gemfileを読めば、だいたいの構成はわかると思います。

source 'https://rubygems.org'
ruby "~> 2.4.0"

gem 'slim', '>= 3.0'
gem 'rake'
gem 'puma'
gem 'rack-contrib'

# For faster file watcher updates on Windows:
gem 'wdm', '~> 0.1.0', platforms: [:mswin, :mingw]

# windows does not come with time zone data
gem 'tzinfo-data', platforms: [:mswin, :mingw]

# Middleman Gems
gem 'middleman', '>= 4.0.0'
gem 'middleman-livereload'

静的ページ周りをMiddlemanで管理し、pumaを使ってBASIC認証を実現しています。

ホスティングとデプロイ

ホスティングはHerokuのHobbyプランを利用しました。Herokuを選んだ理由は、

  • 環境構築が容易
  • GitHubと連携した自動デプロイの仕組みが簡単に作れる
  • 他サービスの値段・手間を比較した時の約700円/月という安さ
  • HTTPSで提供できる

という感じです。

クライアントはプログラミングバリバリできるタイプではないので、絶対にデプロイは自動化しようと考えていました。HerokuはGitHubと連携し、 master が変更されると自動でデプロイしてくれる仕組みがあります。この機能のおかげでクライアントには「Pull Request作ってmasterにマージしたあと、数分待てばHerokuに反映されるから。」と伝えるだけでよく、非常に便利でした。

構成を考える際に気をつけたこと

クライアントがデザインに集中できるように気をつけました。RubyJavaScriptなどのコーディングをすることなく、ポートフォリオサイトが完成できるように留意して環境を構築しました。その為には、

  • ホットリロードの仕組みがある
  • 新しいページを作る際にプログラミングをしたり、コマンドを打つ必要が無い
  • SassとSlimもホットリロードされて使える
  • Herokuにサラッとデプロイできる

という要件を満たす必要がありました。やはりMiddlemanはよくできているため、「ここに置いて、こういう形式で書けば、こう使える」と教えるだけで済み、とても助かりました。

加えて、オーバーエンジニアリングをしないように気をつけました。クライアントが欲しているのは、転職活動時に履歴書として利用するポートフォリオサイトです。エンジニアとしては、CMSミニブログ的なシステムを開発したいと考えてしまいますが、今回の案件ではそこまでの機能は必要ありません。

さらに、なるべく早く開発を終えてクライアントにシステムを納品しなければ、転職活動期間中にポートフォリオサイトが間に合わないという、本末転倒な結果になってしまいます。そういった背景を加味した結果、今回の構成に落ち着きました。

最後に

このポートフォリオサイトの効果があったのか無かったのか分かりませんが、嫁は無事に転職することができました。めでたしめでたし。