読者です 読者をやめる 読者になる 読者になる

駄文型

プログラミングとか英語とかの話題を中心にした至極ちゃらんぽらんな日記です。

開発者のための #OpenShift Tips

一応都度更新するかもしれないので、Gistで上げておいた。

OpenShift for Developers: A Guide for Impatient Beginners

OpenShift for Developers: A Guide for Impatient Beginners

広告を非表示にする

React.jsで1年アルバムを作成するWebサービスを子育ての合間に作った

動機

娘が10ヶ月になり、写真を見返すことで成長を実感できるようになってきた。ベビーアルバム(↓のようなもの)もかなり充実してきた。そこで同じように月ごとの写真を選んで並べるようなWebサービスがあると嬉しいんじゃないかと思って作ってみた。React.jsもチュートリアルだけやって特に使う機会もなかったので、個人プロジェクトを始めてみようというモチベーションをぶつけてみた。

成果物

kohei-kimura.github.io

f:id:koheikimura:20161228225840p:plain

ソースコード

github.com

現在の仕様

  • 月ごとに好きな写真を選んで1ページのアルバムを作ることができる。
  • 画像をクリックして写真を変更する。
    • 画像はローカルから選択できる。
  • アルバムタイトル、アルバムの説明、写真の説明は自由に変更可能。
  • リロードするとすべて消える。

今後の対応

  • README書く
  • 保存・SNSシェア機能
    • 現在の仕様だと作ってもファイルとして保存したり印刷したりする以外に保存する方法がない
    • 簡単にシェアできるようにしたい
  • リファクタ
    • ソースきたないので
  • SNSから画像を検索して自動で写真を決定する機能
    • Like数などから月間で最も人気のある画像を取得してそれをアルバムにできるといい
  • レスポンシブ
    • 対応したつもりだったが、できてなかった

自問自答

  • これReactで作る意味あるのか
    • 今のところReactでなければ行けない理由はない
    • 今後機能追加していく段階で優位性がでるかもしれない
    • リアクト チョット ツカエル 状態になりたかった

感想

CSSつらい。めっちゃつらい。小さい子供がいると、まとまった時間を取ることが難しいので、細切れの時間を有効に使う事が重要。臨機応変に家事・子育てモードとプログラミングモードを切り替えることも重要で、家事育児の時間はフルコミットして、余裕がある時間帯に作業に戻る感じ。パートナーとの連携が必須。

WebデベロッパーのためのReact開発入門 JavaScript UIライブラリの基本と活用

WebデベロッパーのためのReact開発入門 JavaScript UIライブラリの基本と活用

広告を非表示にする

fluentdコンテナをDockerで立ててRailsのログをTreasureData by IDCFに保存する

参考

fluent.configの作成

<source>
  type forward
  bind 0.0.0.0
</source>

<match td.*.*>
  @type tdlog
  endpoint api.ybi.idcfcloud.net
  apikey $API_KEY
  auto_create_table
  use_ssl true
  buffer_type memory
  flush_interval 60s
</match>

例によってendpoint api.ybi.idcfcloud.netのところが重要で、これがないとログインエラーになる。

ローカルで動作確認

まずfluent-plugin-tdをインストール

$ gem install fluent-plugin-td

fluentd を起動。

$ fluentd -c fluent.config

JSONを投げる。TreasureDataにテーブルができていればOK。DBは事前につくっておく。td.<db_name>.<table_name>

$ echo '{"app":"command", "id":1, "message":"Hi!"}' | fluent-cat td.fluent.test

Docker

FROM fluent/fluentd
COPY fluent.conf /fluentd/etc/
RUN gem install fluent-plugin-td

copyはfluent/fluentdでやっているので必要ないはずだが、なぜか僕のビルド先(OpenShift)で動かなかったので明示的に入れた。docker runで起動すれば動く

$ docker build . -t $CONTAINER
$ docker run -p 24224:24224 $CONTAINER

Rails

fluent-loggerをインストール。

$ gem install fluent-logger

application_conraller.rb に下記を追加。requestの内容をログに含めることもできる。あとはRailsを起動してアクセスすればログが溜まっていく。はず。

Fluent::Logger::FluentLogger.open(nil, :host=>ENV['FLUENTD_SERVICE_HOST'], :port=>ENV['FLUENTD_SERVICE_PORT'])
before_action :fluentpost
def fluentpost
  Fluent::Logger.post("td.#{db_name}.#{table_name}",{
    path:   request.fullpath,
    method: request.request_method,
    user:   user_name,
    body:   request.body,
    time:   Time.current.to_s
  })
end

広告を非表示にする

日報を支える技術

日報について

日報書いてますか。僕の所属するチームは拠点が東京と福岡に分かれている上、各自やっていることが独立していていてるので、お互いが現在やっていることを把握するために必ず日報を書くことをルールとしている。1日の業務の中で困っていることや躓いたところを共有することで解決策が見つかることもある。

日報のデメリット

とはいえ良くない面もあって、「コストがかかる」というのが日報の一番のデメリットだと言える。一日の作業を振り返って、どんなことをやったか、どんな問題が出たか、それにどう対応したか、明日以降はどうするのか、などを考えるのは結構大変だと思う。それをチームメンバー全員がやるとなると合計でかなりの工数になると思う。かと言ってあまりに簡潔に書きすぎると作業の進捗状況をマネージャーが把握できないので、ミーティングの時間が長くなり、結局工数が嵩む。非同期に情報をやりとりできる日報のメリットが小さくなってしまう。

Slack分報との比較

昨今では(1年くらい前から?)Slack分報というものが流行っている。ひとりひとりがチャンネルを持っているので気軽に書き込めるという特徴がある。作業中にハマったことを書き込むことで、ほぼリアルタイムにアドバイスをもらえることもある。困ったり悩んではいるけど直接聞くほどではない問題をスムーズに解決できる。これは日報にはないメリットで、日報で同じような効果を得るのは1日に1回になってしまう。

一方でデメリットとしては、Slackのチャンネルが増えすぎてしまうとか情報量が多すぎて追えなくなってしまうとか、などがあげられる。メンバーの生産性に影響してしまうので、大きすぎるチームにはあまり向いていないかもしれない。

本題

僕は「今日のノート」というのを毎日書いていて、それをほぼそのまま日報にしている。ノートには今やっている作業や問題点をどんどん書いていく。そうすることで1日を振り返ってやった作業を思い出す時間が必要なくなるので、日報を書くコストが少し減る(気がする)。時系列に書いていくので、どんな1日だったか読み手が想像しやすいないようになっていると思う。やった作業を逐一書き込んでいくので、あとから振り返りやすい。一度やった作業を忘れてしまった場合、ググるより先にまず過去のノートを検索することができ、効率がいい。ノートはMarkdownで書いてgitで管理している。楽に運用できるようにちょっとだけ工夫しているのでまとめておく。

tnコマンド

ただのシェルスクリプト。所定のフォルダに今日のMarkdownファイルを作成して開いてくれる。tnと打てばすぐにノートを書き始められるので便利。はじめるための障害を小さくすることで習慣が続くようにしている。フォルダは月ごとに分けているので、フォルダ作成も自動でやってくれるようにしている。

Atom

atom-editor

テキストエディタですね。使い慣れたものを使うのが一番だと思うけど、Atomスニペットが使えるのでありがたい。また、GoogleIMEの設定を変更して日本語入力中でも#*が半角になるようにしておくとMarkdownを快適に書ける。

スニペット 概要
table テーブル
l リンク
img 画像
b 強調
i イタリック
code コード
t チェックボックス
legal 著作権表示
lorem ダミーテキスト

【Atom】Markdownで使えるスニペット一覧 - Qiita

Markdown Here

markdown-here.com

ノートを日報としてメールで送ってチームに共有するのだが、僕は基本的に小見出しと箇条書きの他にコードやコマンドを貼り付けたりリンクを貼ったりする。その場合、生のMarkdownよりHTMLに変換された方が読みやすい。Markdown HereはChromeFirefoxSafariなどで使えるブラウザ拡張機能で、Markdownで書いた文書を一瞬で変換してくれる。ctrl + option + mで変換できる。

git

別にバージョン管理をする必要はないのだが、リモートリポジトリに置いておけば他の環境にコピーしやすい。GitHubでもいいんだけど、無料でプライベートリポジトリを使いたかったのでbitbucketにプッシュしている。

まとめ

どんな情報共有の手法を採用するかはチームの事情によると思うので、これが全てにおいて最適というやり方はないと思う。課題もたくさんある。もっと自動化して出来る限り日報を書くことにかかるコストを下げ、自分が取り組むべき問題にフォーカスできるようにしたいという思いがある。

Atom実践入門──進化し続けるハッカブルなエディタ (WEB+DB PRESS plus)

Atom実践入門──進化し続けるハッカブルなエディタ (WEB+DB PRESS plus)

広告を非表示にする

夫が17時に帰宅したらどうなるか #もしも定時で帰れたら

前にも書いたが、僕は今朝型勤務をしていて、16時半ごろには仕事を終えて17時前には帰宅する。平日のスケジュールをまとめてみる。

家族構成

  • 夫(僕)
    • プログラマ
    • いわゆるエスイーではない
    • 7:30-16:15勤務
    • 残業はしないさせない持ち込ませない生きて帰すな見たら殺せの精神
  • 妻(美人)
    • 今年娘を出産
    • 専業主婦
    • 美人
  • 娘(かわいい)
    • もうすぐ10ヶ月
    • はいはいしたり、つかまり立ちしたり目が離せない時期
    • かわいい

1日の流れ

  • 6:20 起床
    • 身支度、朝食
    • 妻がお弁当を作ってくれる(←ありがたい!!!)
  • 6:50 家を出る
  • 7:20 オフィスに着く、仕事開始

  • 16:30ごろ 仕事終わり

  • 17:00 帰宅
    • 帰ったときにはいつも夕飯の準備はほぼ終わっている(←ありがたい!!!)
  • 17:30 お風呂
    • 妻と手分けをして片方が入れて片方がお風呂に連れて行って迎えに行く
    • 娘が終わったら交代で自分たちも入る
  • 18:30 娘の夕飯
  • 19:00 夕飯
  • 19:30 片付け
    • 食洗機があるけど調理器具を手洗いしたりゴミをまとめたりで20分くらいかかる
    • 片付けてる間は妻に娘を見ていてもらう
  • 20:00 ゆっくり
    • テレビを見たりブログ書いたり
  • 21:00 寝かしつけ
    • そのまま自分たちも寝る
  • 21:30 就寝

娘のお風呂や夕飯の時間はその日の本人の気分次第で前後する。帰ったらお昼寝しているときもあるし、寝かしつけ中のときもある。

育児参加について

やっぱり娘が手がかかる時期なので、できるだけ家事育児に参加するように努力している。また、それ以上に仕事で疲れないための努力を最大限している。疲れたら何もしたくない。そのために長時間労働しないというのは本当に重要。妻にも育児で疲れてほしくないので、僕ができることはなるべくやっているし、効率化のための投資は惜しまないようしている。僕はがんばっているつもりでも、結局は家事育児の大部分は妻にやってもらっているので、僕の家事育児への参加が足りない部分があったら遠慮なく言ってもらうようにしている。

長時間労働は社会的な問題なので、行政や政治(つまり有権者全員)ががんばらないといけない面もあると思うが、オーバーワークにならないように会社側と交渉するとか、条件が良いところに移るとか、個人でできることもあると思う。全国のパパとママ、がんばってください。

DSC_0272

部下を定時に帰す仕事術 (ポケット・シリーズ)

部下を定時に帰す仕事術 (ポケット・シリーズ)

広告を非表示にする

【Rails】rake db:seedでテストユーザーを作成する

Rails力とSQL力が低すぎて基本的なことからググりながらできたので、メモっておく。

環境

参考

手順

  1. seeds.rb を編集
  2. rake db:seed (一度全削除したいときはrake db:setupとか)

これだけでいいはずなんだけど、今触っているRailsアプリにはユーザーのアクティベーションが必要で、何故かそれはUser.createでアクティブにできなかったのでDBを直接書き換えた。

  1. psql postgres でPostgresを起動
    • rails dbconsole を使えるならそっちでもいい
  2. \c $DB_NAME でDBに接続
    • rails dbconsole で入れば省略できるっぽい
  3. UPDATE users SET active=true 等でアクティベート

seeds.rb の中身(例)

100.times do |index|
  no = index + 1
  user = User.create(
    name:           "user_#{no}",
    email_address:  "email_#{no}@example.com",
    password:               "#{no}password#{no}",
    password_confirmation:  "#{no}password#{no}",
    address:        "aaaa",
    phone:          "bbbb"
  )
  user.save!
end

Ruby on Rails 5 超入門

Ruby on Rails 5 超入門

広告を非表示にする

iPhone 7 plusで今すぐ始める爆音シャッター生活

Untitled

買ったもの

iPhone 7 Plus 32GB ブラック

Why iPhone now?

フルチャージ入社による賞与的なアレです。あとiDとSuicaを一元化したかった。

32GBってwwwwww

すみません。

なぜジェットブラックを選ばなかったのか

32GBが欲しかったから。

なぜPlusか

ポートレートモード最高。無駄に撮りたくなる。

Untitled

シャッター音について

うるせぇ。。。

Untitled

広告を非表示にする