酒をやめてから1ヶ月くらいたった

酒をやめてから1ヶ月とちょっとになる。

webuilder240.hatenablog.com

もともとそこまで飲んでなかったのだけど、 すこし変化があったのでなんとなく書いてみる。

1.酒の席では意外と平気だった。

実は禁酒宣言したすぐあとに、2回ほどお酒の席があったのだけれども、 ふつーに断れました。 1回めは会社の人達と飲みに出かけるみたいな感じだったので、そこまで心配でもなかったけど、 2回目は初めての人・久しぶりの人がいる中での飲み会みたいな感じだったので、 どうかな、大丈夫かなと思ったけど、事情説明したら全然大丈夫だった。 でもまぁ、こんなところですいません。みたいなこと言われて、ちょっと申し訳無さあったけど、気にしないで行くことにした。 飲み会自体は楽しかったですよ。とても。 向こうはどう思っているかしらん

2 .なんか心配されるようになった

なにかあったの? 彼女にフラれたのか? 酒で失敗でもしたのか? 今やっている案件がうまく回るまでお酒我慢しているのか?

といらん心配されるようになった。

なにもないし、彼女にフラれてないし、酒で失敗は夏に1回しかしてないし、仕事と酒は関係ないし でいちいち説明する手間があるのがちょっと。。というところ。

3.夜にじっくり時間を使えるようになった

でもこれはデメリットでもあって、 飲みに行ってもはやく寝る理由もないので、 夜の時間を活かしてだんだんと夜行性になっている感じがするので、これはメリットでもあり、デメリットでもあるかなと。 最近は顕著で、寒いこともあってかどんどん朝が遅くなっていっている。

それでも時間がもったいないと思うことはなくなったので、これはいい方向に行っているということにしておく。

4.ポテチをたまに食べたくなるのでやっぱりやめられない。

お酒は関係なかった。 これから買いに行く。

[WIP] 弱小Railsアプリケーションで日毎のコメント数やユーザー数をなるべく重くない・お手軽な方法で集計したい

TODO

  • 日付毎の投稿数とかコメント数とか集まったいいね数の集計とって、ダッシュボードつくりたい。
  • できればコメント投稿された時にダッシュボードの情報が更新されてて欲しい。
  • グラフを出力するので0件だった時に0件って出て欲しい

制約

  • Rails + Mysql
  • PV月の1万〜2万くらい
  • リリースして1ヶ月ちょっとくらい。
  • 弱小Webアプリケーションだし、変にミドルウェア増やしたりとかでお金かけたくない。なるべくめんどうな方法はとりたくない
  • そこまで解析するデータも全然無いので(一番レコード数多いので1000件とか)有料サービスとかもったいないのでなるべく使わない。

とりあえず、ミドルウェアを追加とかしないで、なるべく他のものを使わず、なんとかできないか試行錯誤してみた。

やったこと

雑にActiveRecord使う

daily_comment_counts = Comment.where(created_at: from..to)
  .group("YEAR(created_at)")
  .group("MONTH(created_at)")
  .group("DAY(created_at)")
  .count()

コメントが存在するときは良いのだけど、データが0件だったときに歯抜けが生じてしまう。(弱小なのでコメントが無い日ももちろんあるのです…) グラフを表示する上で0件だった時に0件って出て欲しいので、却下。

SQL書いた

この辺を参考にして、やってみた。

http://symfoware.blog68.fc2.com/blog-entry-1713.html

あらかじめテーブルを作っといて、それをjoinするみたいな感じ。

これだとデータに歯抜けは生じない。 が、SQLに処理を書きすぎてしまってて、めっちゃ重い。 あと、そこまでSQL力無いので、これをメンテする自信ないし却下。

集計のバッチ書いて、別の集計用のModelに保存しておく

今度試してみる。 ただ、コメントを増えた直後にデータが連動しない。 ダッシュボードのデータがバッチ処理待ちになってしまう。 余裕あれば、AmazonのLambda使ってみたい。

別に集計用のモデル用意して、コメントが追加・削除された時に、集計用のModelの指定の日付のカウント数をインクリメント・デクリメントする

そこまでユーザーいないならって前提で、バイト先の人に聞いたら上記のバッチ処理にするかこの方法にするかのどっちかが良いとかえってきた。 いまはこの方法で進めている。

とりあえず、after_saveとかでモデルの保存や変更にHookして、 指定の日付とアクションに対してのレコードを別の集計用のModelに作っておいて、そこのカウント数をインクリメント・デクリメントしてあげればよいという雑な実装。 あとで理由は書くけど、更新するレコードがない場合は作成するように考慮してあげないといけない。

デメリット

  • とりあえず、できそうだけどなんか納得できてない部分がある。
  • コメント投稿・いいねがされる度に、データベースに対して、Updateがかかるようになってしまっている。
  • もっと他にいい方法があるはず、としか思えない。
  • やっぱり0埋めできないんじゃないの?

0埋めの件

これでやっても、投稿がなければ作成されない。 なので、0埋めをするには前もってレコードを作っておくしか無くて、cronで1日に1回、0時とかに予め更新用のレコードを追加してあげる必要がある。

0時とかの処理中にコメント数とかが増えても困るので、レコードが既に作ってあったら作成しない様にする、

筋が悪い実装かもしれないのでどうにかしたいけど。

稼働中のサービスに対しては?

歯をくいしばってRakeタスク書いて実行するしか無い。

途中から集計するものを増やす場合は?

歯をくいしばってRakeタスク書いて実行するしか無い。

途中からカウントする条件とかを変更する場合は?

歯をくいしばってRakeタスク書いて実行するしか無い。

弱小じゃなくなったらどうするの??

その時は資金力も出るくらいには間違いなくなっているし、リソース割けると思うし、 トレジャーデータなり、ビッククエリなり、スケールしやすそうのを使えばいいのではないでしょうか。 その段階まで来たら、歯をくいしばってRakeタスク書きたくない。

結論

  • ビッククエリとかそこまでしなくてもいいようなサイトさんの泥臭い知見もっと欲しい
  • もちろんこれは不正解な実装な気がするので、もっと詳しい人に話伺いたい。
  • 多分一番良いのはバッチ処理だと思っている。
  • 安くて柔軟に集計とかとれるいいもの・方法を誰か知りませんか?

trelloからリリースノートのテンプレートを雑に作るRubyスクリプト

弊社では全体のタスク管理にTrelloを使用してて、 アップデートの一覧もそのままTrelloにまとめている。 なので、リリースノートをそのままTrelloから吐き出せれば便利だと思ったので作ってみた。

Apiキーの確認やtokenの取得方法についてはこの記事を参照されたし。

qiita.com

雑なテンプレートのルール


# Release for {指定したTrelloのボードの名前} {リスト名}

## {カードの名前}  [カードにつけているラベルの一覧]

こんな感じにしてる。 簡易的なものなので、内容に関してはカード名だけで完結するようにした。

サンプルデータ

f:id:oh240:20160111005610p:plain

この内容はFirefoxのリリースノートから拝借しました。

実行結果

gistbb1fc797632db799cfeb

雑なスクリプト

実行前に"ruby-trello"をインストールしておいてください。(僕はbunlder使いましたが。)

gem install "ruby-trello"

gist1b1549869dd85b7ef17e

この雑なスクリプトに対して、

 ruby script.rb test_application 1.0.0

と実行してあげれば良い。

遅まきながら2015年の総括・2016年の簡単な目標について

業務でやったこと

結論として、色々なことに挑戦した2015年だった気がする。

swiftに挑戦

2014年の12月末頃から頼まれでSwiftを使用して、出金伝票アプリを作っていた。

ふくろう出金伝票

ふくろう出金伝票

  • andpartners inc.
  • Finance
  • Free

とりあえず、とっても簡単なアプリだったんだけど、CoreDataとか色々ハマってしまって、できたのが年が明けて2月の末くらいになってしまった。 多分結構致命的なバグとか放置しているので、使わない方が良い。 とにかく、これが自分にとってのiOSの処女作となった。 シンプルな割に画面数がとても多くなってしまったので、もう少しなんとか出来ればって思った。 参考になるOSSプロジェクトとかなくて、とても頭の悪い感じで力技で作成してしまったのが反省点。 今は全くアップデートとかしてないので、そのうちスクラッチで書きなおして、バージョンアップ版をリリースできればと思っている。

初めてまともにHTML+CSSに向き合った

そのあと1ヶ月くらいで既存サイトのスマートフォン対応をすることになった。

airista.jp

なんてことない、既存サイトをスマートフォンでちゃんと見れるようにするだけだったので、苦労は特になかったはずだったんだけど、 SEO対策で施している、セクショニングのせいで(これ、都市伝説じゃね?)HTMLの構造を実装上かなりしんどい感じになったので、 positionをえらい駆使したりして、辛い感じになった。 ちゃんとCSSを理解してできたのはこれが初めてな気がする。 jQueryにも初めてしっかり向き合ったのはこの時期だったので、jQueryの辛さを初めて痛感することにもなった、記念すべき案件である。

自分で書いた技術的負債を少しずつ返済

ここから7月くらいまで、作っているサービスに本腰を入れることができた。

ihav.it

やったこと

  • 画像を減らした&画像圧縮かまして、スマホでまともな速度で表示できるようにした。
  • bitbucketを使いたくないので、gitlabに移行した
  • サービスピポットによる、実装変更
  • ユニットテストのテストケース追加
  • Apacheで動いていたので、nginx + phpfpmに移行した。
  • Cakephpを2.3系から当時の最新版の2.6系にアップデート
  • Composerを使用して、無秩序なphpライブラリ管理に秩序をもたらした
  • jenkinsを導入して、テストが通らないととりあえず、リリースできないようにした
  • jQuery辛い部分にはVue.jsを導入して、辛さを解消し始めた。
  • slackでBot経由でdeploy出来るように
  • 美人を探すBotをつくった

いまはもっとやりたいことあるので、これにそこまで頑張らなくても良いかなぁとは感じている。 現状開店休業中って感じです。

ECサイト作った

そこから今度はお知り合いのお店の海外版のECサイトを作成することになりました。 海外での需要もよくわからない(検証できていない)ので、ミニマムスタートを推し進めていたのですが、 どういったわけか、ミニマムスタートみたいな感じではなくなってしまいました。(当時、EC-Cube3がっつり作った気がする)

とりあえずできたのですが、いまのところ全く売れておらず、見込みが違ったということでしょうか...

ともかく、EC-CUBEには死ぬほど苦労させられたので、もう二度と使わないと心に誓いました。 自分でECサイトの実装を書いたほうがマシだと思うくらい、当時はロクに動いてくれませんでした。

初めてのRuby,Rails,SinglePageApplication風Webサイト

ここからはお知り合いの方々がやっていて、直接運営に関わっている人が近くにいるということも有り、 システム化できずに苦労している、サイトのシステム構築を担当させていただきました。 正直な所これを一番頑張ってた。ここ2ヶ月位、土日もずーっとこれやってた。

元々はphperだったのですが、Railsに初挑戦してみたのですが、とても生産性が向上した気がしました。 phpだったらもっと時間も、スキルも必要だったのではないかと思うくらいです。

部分的にSinglePageApplicationっぽい感じで動かしている部分があり、 そこに関しては、まだモダンなJavascriptライブラリやフレームワーク(Vue.js)を使用して実装していきました。

RailsとSPAという組み合わせでnpmでJSをビルドしていたので、ハマりどころは結構あったのですが、 とりあえず、力技的に形にできたという様な感じでした。

初めて決済を要するサイトを構築だったので、少し失敗したところもありましたが、思っていた以上にトラブルが少なくすんでおりひと安心しています。

2016年はこのサイトの改修を中心に動いていくことになりそうです。 まずは、まだまだ未実装の機能があるのと、 ついで、テストとかをまだちゃんと書けていない段階なので、しっかりユニットテストを追加していく所存でございます。

サイトの公開自体はしているものの、ちょっといろいろあって、まだまだ公にはできそうにないのですが、 今まで僕が積み重ねたエンジニアリング力の集大成だと思えるくらいの出来になるまでこいつを磨き続ける予定です。

プライベートで書いていたもの・プライベートのなにか

そんなに無いけど、ちょっとお蔵出しです。

2015年プライベートなコード

jQueryの練習 github.com

Cakephp3の素振り github.com

Cakephp3でrake routes likeなコマンドを実行できるようになるプラグイン github.com

EMSの料金を算出できるライブラリ github.com

is.jsに感化されて、勢いで作ったライブラリ github.com

Vue,Fluxの素振り github.com

あとはいまの彼女ともう暫く先になりそうですが、結婚することになりました。 あとは、お酒をやめたことと僕に激似の知り合いがいるのでその人に会えたことくらいと思います。

2015年の総括

  • とりあえず、作れるようになりはじめたけど、同年代の素晴らしいエンジニアの方々には到底追いつけそうになく、かなり心が折れそうになっている。かなり辛い。
  • 技術力の向上はできたけど、ようやく半人前並みの実力がついてきた気がするけど、まだまだ残念なので、なんとかしたい
  • ほとんどエンジニアリングを1人でやっているので、既に自分の成長力の限界を感じている
  • 実装力はついてきた気がするけど、力技で書き続けている感じがするのでコードがかなり汚い

2016年の目標

  • いま進めているプロジェクトでマネタイズ出来るフェーズまで進めたい。
  • 進めている個人プロジェクトを本格的にリリースさせる。
  • 基礎ができてないので、基礎固め(アルゴリズムやらC言語やら数学基礎)の1年にしたい
  • 勉強会に積極的に参加して、友達つくりたい。いかんせん同業者の友達がいなさすぎる
  • LTでもいいので、勉強会で何か登壇して発表したい
  • OSSにコントリビュートする。
  • しっかり作ったライブラリをリリースして、だれかに使ってもらえるようにする。
  • キレイなコードを書けるようになる
  • もっとOSSのコードを読む
  • エンジニアリングの師匠が欲しい

酒やめる理由について

お酒をやめる理由について書いておく。

時間のムダ

僕はお酒が入っていると、すぐに眠たくなってしまう。

だれかとわいわい飲みに行くのがもったいない、面倒なのではなくて、 「うちに帰ってから何もできなくなる」というのがもったいないと思っている。 飲みに行ったりするのは、有意義で楽しいですし、大切だと思う。

友達も欲しいし。

けど帰ってから、すぐに寝ないでコード書いたり、いろいろ読んだりしたい気持ちもある。 だから飲まないって感じ。

もちろん、酒のんでないから割り勘ヤダみたいなのもないです。 その分たくさん食べます。

なので、みなさん今まで通りどんどん飲みには誘って欲しいと思っています。

大歓迎です。お酒は飲まないけど。

そこまで好きでもなかった

僕はおつまみがとても大好きだったけど、 そもそもおつまみにビールなんかいらなかった。

うまいものは食いたいけど、アルコールを自分から欲したことは殆ど無かった。

打ち上げとかはうまい食い物があればそれでいいと思っています。 食べ専。

そもそも体にあってなかった

実は一番のやめる理由はこれ。

飲酒すると大概体調悪い。 次の日まで大体支障をきたしている。 そもそも原因は他にもあるかもしれないけど、 とりあえず、飲酒したせいということにしておく。

父親も酔って何度も何度も酒で失敗しているところを見ているし、 そんな酒を飲む機にもいよいよならなくなってきたというのも一因。

まとめ

  • からだにあってないしあんまり好きじゃないからやめる
  • けど、のみには誘って欲しい(飲酒する人からするとすごいわがままだと思う。)
  • とりあえず、ジンジャーエールっていいたい。