5000164 is here
My writing is my life.
No results for undefined
Powered byAlgolia
2017 年に取り入れてよかったもの

人生をよりよいものにするために

2017 年もいろいろなものを取り入れた。
その中でもよかったと思うものを振り返る。

前提

  • 2017 年に新しく導入したもののみを取り上げる
  • 導入してよかったと感じているのは 28 歳 男性 プログラマー

学習編

ポモドーロテクニック

2017 年に導入して 1 番よかったものはこれ。
今まで存在とやり方は知っていたが、自分には合わないだろうという偏見で 1 度も試したことがなかった。
リモートワークを行うようになったこと、勉強のタスクをうまく区切れなくて手をつけるのに億劫になってしまっていたことを解消するために導入した。
導入して 1 番よかったことは、今までの「このタスクをやるのに何分」という考え方から「25 分でここまでできる」という考え方に変わったこと。
目標の設定もしやすいし、振り返りもできるし、達成感も得られるし、非常におすすめ。

KPT による振り返り

改善を進めていくために振り返りを導入した。
その振り返り手法として KPT を使っている。
ポモドーロテクニックによって振り返りを行いやすく、いいところを考えて達成感を得られ、次への改善を考えられるなど、シンプルで使いやすい。

早起き

早起きはいいという話はよく聞くけど、あんまり信用していなかった。
でもやったことがなかったのでやってみた。
結果的には、後述する朝勉強との組み合わせによってとてもいいと感じるようになった。

朝勉強

朝早起きして、仕事の時間まで勉強をすることにした。
まだできないことも多いけど、できた日はとても達成感がある。
なぜなら夜に開放感が得られるから。
今までは仕事が終わった後に「疲れてるけど勉強しないと」という義務感があってつらかったけど、朝に勉強をしておくとそういう義務感がなくなってとても楽になった。

昼休み読書

昼休みは読書の時間にした。
1 日のルーチンに組み込むことによって意志の力を使って「頑張らないと」と思うことがなくなって楽になった。
ご飯の時も読みながら食べている。
後述する Kindle のおかげで実現することができた。

移動中読書

これも移動中は読書の時間と決めることで頑張る必要がなくなって楽になった。
こちらも Kindle のおかげで実現することができた。

時間帯でやることを分ける

タスクに優先順位をつけていて、勉強と仕事と雑務の優先順位が混ざった時にどこから手を付けるか迷ってしまうことがあった。
特に勉強や仕事のタスクは終わらないものもあるので、終わらせられるものをやろうとした結果雑務のタスクだけを消化してしまうなど。
朝勉強とあわせて、朝は勉強、勉強の後は仕事、仕事の後は雑務、と分けることでそれぞれの作業に手を付けることができるようになった。

電子書籍リーダー

電子ペーパーが切り替わるところがあまり好きじゃなかったので避けていたが、軽くて片手で持てて表示もきれいで画面も大きくて見やすいので買った。
その結果非常に良かった。
本を読む専用の筐体というのが本を読むぞという気持ちになっていい。

L 字デスク

L 字デスクに興味はあったが使ったことがなかったので買ってみた。
作業スペースが広くていい。

モニターアーム

モニターアームは高いと思っていたが、改めて見てみたら安かったので買ってみた。
デスクのスペースが広くなっていい。

仕事編

リモートワーク

生活の選択肢が増えるのがとてもいい。
移動時間がなくなるのもとてもいい。
ただコミュニケーションが非常に難しい。
自己管理も非常に難しい。
改善していきたい。

生活編

個人 Slack

Slack に自分用のワークスペースを作って運用し始めた。
RSS や Twitter の情報を Slack に集約することで情報収集しやすくなった。

COMP GUMMY

COMP はすでに導入していて、とてもいいものだけど、味が甘めでしょっぱいものが食べたくなってしまう問題があった。
COMP GUMMY は味が甘い系ではなくしょっぱい系で、噛みごたえもあり、 COMP と COMP GUMMY をあわせることで満足度が上がった。

空気清浄機

空気清浄機も買ったことがなかったので買ってみた。
買ったやつはあんまり評価良くないけど、ほこりをたくさん吸ってるのを見るとこんなにほこりを吸っていたのかとなって買ってよかったという気持ちになる。

収納

物が床に散らばっている状態だったので収納を買った。
収納を買うと物がしまえて便利だということに気付いた。
引っ越しをよくするので、その気になれば簡単に捨てられるものを探した結果ダンボール製の収納を買うことにした。

光目覚まし時計

こんなに高いものを買う必要はなかったかも知れないけど、朝起きる時間に明るくなるのは起きやすくなっていい。
他の光目覚まし時計を使ったことがないので比較はできないけど、今のところ満足している。

6 畳の部屋

6 畳の部屋がちょうどいい広さだと知った。

キッチン不使用

キッチンをまったく使用しない、食器や調味料、調理器具などもまったく買わないことで物とかかるお金を減らすことができた。
普段は COMP と COMP GUMMY を食べ、外食したくなったら外で食べている。
ただ、紙コップと割り箸はあった方が便利。

部屋に花を飾る

部屋に花を飾ると気持ちがいい。

風呂上がりに冷たいシャワーを浴びる

風呂上がりに汗をかき続けるのが不快だったけど、冷たいシャワーを浴びるようにしたらあんまり汗をかかなくなった気がする。

ツール編

ウィンドウマネージャー

今までウィンドウの位置を揃えたりしていた手間がなくなった。

入力切替

入力切替をトグル式に切り替えるのは現在の入力モードを把握する必要があって手間だった。
特定のキーを押すことで入力モードを指定できるのが日本語キーボードのメリットだったが、このアプリのおかげで英字キーボードがいいと思えるようになった。

パスワード管理

今まで KeePass を使っていたが、有料のサービスはやっぱり便利だった。

ポモドーロタイマー

Pebble に通知が来る Android アプリを探したところ、これが使いやすくてよかった。

まとめ

特に勉強する仕組みを作ることを意識した。
よいと思ったものはこれからも継続していきたい。

教養としてのScala ~ そろそろ始めてみたい2017冬 に参加した

Scala の勉強会

詳細

スライド

関連ブログ

各発表のメモ

頑張りすぎないScala

  • 楽しんでスカラやる
  • 無理しなくていい
  • でもやるからには関数型プログラミングを積極的に取り入れていくべき
  • 手続き型のオブジェクト指向プログラミングから関数型プログラミングが地続きになっているのが Scala の特徴
  • 次回教養としてのモナド

    • 気になる

今日から始めるスカライフ~MajiでKoiする5秒前~

プルプル…ボクはわるいScalaじゃないよ

例外は "投げない" ~Scalableエラー処理入門~

  • Either

    • 制御フローを整理
    • エラー処理を強制

とりあえずScalaをはじめるときに知っておきたい10個のこと

  • ??? というメソッド便利そう
  • Scala Scaps でぐぐる

感想

勉強になった。
Scala すごそうと思って、全然できない自分だめだって思ってたところあるけど、もっと頑張ろうって気持ちになった。
勉強会の後に少しお話を聞けたのがよかった。
ありがとうございます。
がんばろう。

青山エンジニア勉強交流会~Scala勉強会~に参加した

Scala の勉強会

詳細はこれ。

スライドはこれ。

イベントレポートはこれ。

各発表のメモ

PHPエンジニアが始めるScala

  • 型エイリアス

    • 知らなかった便利そう
  • Either って アイザー って読むの?

    • 調べたら イーザー でも アイザー でもいいらしい
  • for yield わからない
  • flatMap わからない

"cats" in practice. 関数型ライブラリcatsの紹介と アドテクシステムにおける使用例

  • モナドわからない
  • 圏論もわからない
  • for yield わからない
  • cats 使ってみたい
  • Try 型わからない

ScalaのDIパターンについて

  • Cake Pattern 初めてふわっと理解できたかも

    • でもやばい今もう忘れてる
  • テスト書く時それぞれでどうなるのか知りたい

Futureのおまじないを理解する

  • Future わからない
  • implicit してる

役に立たないScala入門はじめの0歩

  • メモリー食う

感想

Scala のモチベーション上げたくて参加した。
発表もわからないことが多かったし、懇親会でも全然 Scala の話できなかったし、もっと勉強しなきゃなーという気持ちになった。
キャリアパスというか、これからどうやって生きていくかをより考えているところなので、刺激になってよかった。
プログラミングしないと。
あと、帰ってる途中にそういえばケーキ食べ忘れたなーって思ってたら、イベントレポートにケーキ出し忘れてたって書いてあって安心 (?) した。

Scala で Slack bot

動機

Scala の勉強をするにあたって題材をどうしようか考えた。
Twitter のことを最近いいなと感じ始めていたのだけれど投稿するのが面倒くさくて、簡単に投稿できるようにしたかったので普段よく使っている Slack から投稿できるようにすることにした。

概要

Slack の bot に投げた内容をツイートする。

コード

ここです。

5000164/scala-bot

技術的なところ

Scala のライブラリと Java のライブラリ

build.sbt で slack-scala-client は追加できるのに twitter4j-core は追加できないと悩んでいたら、 % と %% が違うことを知った。

groupID % artifactID % revision のかわりに、 groupID %% artifactID % revision を使うと(違いは groupID の後ろの二つ連なった %%)、 sbt はプロジェクトの Scala のバイナリバージョンをアーティファクト名に追加する。 これはただの略記法なので %% 無しで書くこともできる:
sbt Reference Manual — ライブラリ依存性

slack-scala-client は Scala のライブラリなので略記法でいける、 twitter4j-core は Java のライブラリなので略記法ではいけない、ということだった。

モックを使ったテスト

コントローラーのテストを書く時に、副作用が出る部分をモックにしようとした。
調べたら Mockito というモックライブラリがよく使われているようなので、 ScalaTest と Mockito を使うことにした。

情報をうまく探すことが出来なくて動かすまでに少し時間がかかった。

class OperatorSpec extends FreeSpec with MockitoSugar {

のように MockitoSugar をミックスインしたり、

import org.mockito.Mockito.{never, verify, when}

のように verify をインポートしたりすることで動くようになった。

しかし、モックの返り値を設定する thenReturn に

when(mockTwitter.tweet("text")).thenReturn(Right(Unit))

のように Unit を渡すとなぜかコンパイルエラーになってしまい動かなくなったので、

when(mockTwitter.tweet("text")).thenReturn(Right())

のように書いている。

また、

verify(mockTwitter).tweet("text")

はちゃんと引数の検証ができて想定していない値が渡されたらテストがコケるのに対して、

verify(mockClient).sendMessage("channel", "message")

の方は引数の値に関わらず、関数が実行されていればテストが通ってしまう状態になっている。
関数が実行されていなければテストはコケる。

このあたりのコードはここに書いてある。

scala-bot/OperatorSpec.scala at master · 5000164/scala-bot

副作用がある関数の返り値

今回の場合では副作用は Twitter にツイートすることで発生する。
副作用がある関数の返り値をどうやって表現するか、 Boolean にするか Option にするかライブラリが投げるエラーをそのままキャッチするか、どれもしっくりこないと思っていて調べていたら Either を見つけたので使ってみた。
Either だと、エラーが起きたら文字列を返して、正常終了したら何も返さない、ということが表現できた。
ツイートに成功したらそのままで、ツイートに失敗したら失敗した旨を Slack に投げたいと思っていたので、

twitter.tweet(Command.content(message.text)) match {
  case Right(_) =>
  case Left(error_message) => client.sendMessage(message.channel, error_message)
}

のように表現することができた。

コマンドを増やしやすいような設計

今はツイートする機能だけだが、今後機能を増やしたいと思った時に追加しやすいように心がけた。
そのために DDD を意識しながら全体の設計を行った。
DDD はまだ全然勉強できておらず、これからたくさん学ぶ必要があるという感じだが、責任やレイヤーというものを意識した。

インターフェイス層としては

  • アプリケーションのエンドポイント
  • 発言されたメッセージの内容によって処理を振り分けるコントローラー
  • Twitter へ投稿する処理

というように分け、ドメイン層としては

  • メッセージの内容から指定されたコマンドを判定する
  • 実際に処理を行うコマンド

というように分けた。
判定したコマンドは case object としてコントローラーに返し、コントローラー側でパターンマッチを行って実際に処理を行うコマンドに投げる、という形にすることで、コマンドが追加しやすいようにした。

// コマンドに応じて処理を行う
Command.dispatch(message.text) match {
  case Some(TweetCommand) => // コマンドの内容を書く
  // 新しいコマンドを追加する時はここに書いていけばいい
}

まとめ

Slack から Twitter に投稿できるようになって便利。
小さいものでも、動くものを作ることで勉強になった。
これからも勉強を続ける。

高速化のために Hugo で CSS を HTML に埋め込む

速い is 正義

CSS は HTML に埋め込んだ方が速いらしい。
では Hugo でどうやってそれを実現するのか。
partial を使えばできそうだと思ってぐぐったらあった。

これに従って下記のように修正する。

<style type="text/css">{{ partial "css/main.css" . | print | safeCSS }}{{ partial "css/monokai.css" . | print | safeCSS }}</style>

これでできた。
コードはここ。

Minify はまだできてない

簡単にやる方法あるのかな。

2018.1.20 追記

CSS の Minify は YUI Compressor と WebStorm の File Watcher を使って実現した。

2018.8.18 追記

Hugo が minify に対応した。

開いているページのはてなブックマークのコメントページに移動するブックマークレット

コード

javascript:(function(){location=('http://b.hatena.ne.jp/entry/'+(location.protocol=='https:'?'s/':'')+location.host+location.pathname+location.search)}());

背景

はてなブックマークの人気エントリーを RSS で購読しているが、なんでこれが人気エントリーになっているんだろう?と思う時がある。
その時に毎回はてなブックマークを検索して、そこからさらに URL を入力して、とやっていたが、それが手間だったのでブックマークレットで遷移できるようにした。

参考

その判断は合理的か? - 本「不合理 誰もがまぬがれない思考の罠100」の感想

人間は合理的な判断を下せない

人間はさまざまな認知バイアスがかかり、合理的な判断を下すことができない。
この本では、簡単に認識が歪んでしまうことをさまざまな事実と実験から教えてくれる。
そして、合理的な判断を下せない理由と対策を示してくれる。

知る価値がある

認知バイアスの存在は知っていたし、気をつけていたつもりだったが、想像以上に影響が大きいものだと知った。
物事に対する認識が変わるほど非常に価値がある本。
どこかのタイミングでもう一度読むと思う。

プロフィールを GitHub にあげたらよかった

実際に作成したプロフィールはこちら。
5000164/profile

GitHub に公開するためにいろいろ情報を整理できた

今まで職務経歴書はテンプレートを埋めるだけという感じだったが、 GitHub で公開するにあたって情報をどのように見せればいいかと考えることでいろいろと整理することができてためになった。
特に文章をたくさん追加したことがこれまでとの大きな違いになる。
項目があってそれに答えるだけではなく、自分の価値をどうやって伝えればいいのかを考えた結果文章を追加する形になった。
そしてなによりも公開することで誰の目に触れるかわからないのでビビって推敲を重ねることができた。

転職活動をするにあたって職務経歴書を書いていた

職務経歴書をどうやって管理しようかなと考えていた時に、職務経歴書を GitHub にあげるという記事を見てなるほど便利だと思ったのでやってみた。
これを機に職務経歴書の書き方とかも整理できてよかった。

これから編集していくのも楽しそう

考えが変わった時とか、何か作った時とかにどんどん編集していくことを考えると、実績が増えたみたいで楽しそう。
うまく自分を表せるようになにかあったら更新していきたい。

Google 検索で日本語で検索するブックマークレット

2018.4.18 追記

元から下記の方法を使ったやり方が便利だった。

コード

javascript:(function(){location=(location.href+'&hl=ja')}());

背景

Google 検索の設定を英語にしているが、まだ読めないことがたくさんあるので日本語で検索したくなる。
URL に hl=ja というパラメーターをつけることで言語設定を日本語にして検索することができるのでそれを簡略するためにブックマークレットを使う。

Mistel Barocco の設定備忘録

設定

Mac Modifier Keys

  • Caps Lock: Control
  • Conrtol: Control
  • Option: Command
  • Command: Option

Mistel Barocco マクロ設定

  • Left Control: Fn
  • Left Command: Right Command
  • Right Command: Left Command
  • Backspace: \\
  • \: Backspace
  • Fn + \: Delete
  • Esc: `
  • Fn + Esc: Esc
  • Fn + H: Move Left
  • Fn + J: Move Down
  • Fn + K: Move Up
  • Fn + I: Home