起業家

起業家

起業家

  • 作者:藤田 晋
  • 発売日: 2013/04/12
  • メディア: 単行本

読んだ。
アメーバの立ち上げ期が赤裸々に綴られていて、リアルだった。
共感したことはやはりサービスに熱狂するということ。


今自分達も起業しサービスを立ち上げて運営している。
全員が背水の陣でのぞみ日夜サービスをよりよくするために
熱狂と執着を繰り返しながらハッスルしている。


会社に勤めていたときも、担当するサービスに責任感を持ちコミットしていたつもりだけど、
やはり、今はその時とは比べられない程、熱狂していると思う。

熱狂できるものがあるというのはそれだけで、よいものだ。

感心した話 | 渋谷ではたらく社長のアメブロ

にも書かれていたけど、強い執着心と覇王色の覇気でこれからもがんばろうと思った。

サービスをつくる

何かをつくるということはとても楽しい。


仕事でも個人でもいくつかWEBサービスをつくってきたけど
今はとても充実していると言える。


エンジニアになって業務系やBtoCのシステム
インフラなど、やりがいのある仕事をこれまでもしてきたけど
どうしてもCtoCのサービスをやりたかった。


初めて本格的にインターネットに触れたのは高校生の時やったけど
あのときyahooやgoogle mixi 2chなどを見てこんな便利で楽しいものが
あるのかと感じたのが思いの原点だったような気がする。

あのとき自分が感じた便利だとか、おもしろいとかそういう感情を
他の人も抱いてくれるようなサービスが作りたいと思った。


でも実際やってみるとかなり大変です。


問い合わせや不具合の連絡は毎日くるし、考えないといけないことはたくさんあるけど
今のチームはどれも前向きに且つ、本質的にサービスを作っていけている。
これは何よりすばらしい。


大変だけど、ユーザー同士のやりとりや
レビューからサービスがキチンと使われていることが分かる。
自分が作っているものが役に立っている瞬間を垣間見れるのがいい、エンジニア冥利につきる。


自分がいつも使っている今は誰もが知ってるサービスも
最初はどっかのガレージでユーザーーからのフィードバックに一喜一憂しながら作られたんだろう。


ユーザーの期待を裏切らないよう引き続き精進したい。

rails mysqlでiPhoneアプリの絵文字対応

超久しぶりの更新 大丈夫生きてます。

色々あって今iPhoneアプリを作っていて
そのアプリで絵文字を使いたくて結構はまったので、対応したメモを残しておく。

ユーザーがDBに突っ込んでくるテキストに絵文字が入っていてrailsとDBはmysqlを使ってる。

Mysql2

railsでmysql2を使ってるが、gem mysql2がutf8mb4に対応していないので
下記を参考にbundleで入れたmoduleに手を入れた。

AWS - Rails + Mysql(utf8mb4) on Amazon RDS - Qiita
add utf8mb4 charset · f535df8 · brianmario/mysql2 · GitHub

mysql2の更新が待たれる。。。

Gemfileに下記を追加してもいいかも

gem 'mysql2', :git => 'git://github.com/tmtm/mysql2.git', :branch => 'utf8mb4'

database.ymlを変更しエンコードをutf8 -> utf8mb4に変更する

production:
  adapter: mysql2
  database: test
  encoding: utf8mb4

databaseをutf8mb4で作成する

create database test DEFAULT CHARACTER SET utf8mb4;

DBをマイグレーションする
※ utf8(3バイト) -> utf8mb4(4バイト)になったことにより
primary key, unique keyインデックスのbyteが767以上になってしまうカラムがあるのでVARCHARカラムなどは適切な値で正規化する

MySQLのUNIQUEなINDEXには長さ767byteまでしか使えない件と対策 - tanamonの日記

railsがデフォルトで作るschema_migration用のversionカラムも上記に該当するのでversionカラムをVARCHAR(15)に変更する

Rails3 と MySQL な環境で Unicode の絵文字を使う - SmallStyle(2011-12-05)

/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.2/lib/active_record/connection_adapters/abstract/schema_statements.rb
419行目を修正

schema_migrations_table.column :version, :string, :null => false, :limit => 15


railsからはJSONでアプリにレスポンスを返す仕様
jsonで出力する際にrailsがマルチバイト文字をescapeしている。
※下記が該当コード
http://blog.sosedoff.com/2012/04/26/emoji-and-rails-json-output-issue/

しかしこれは \u{123}とか\u{12345}みたいな4バイト以上の文字はescapeをミスる
Emoji range encoded in JSON mangled · Issue #3727 · rails/rails · GitHub

escapeを行っている ActiveSupport::JSON::Encodingを下記のようなファイルを作って対応

config/initializers/active_support_encoding.rb

module ActiveSupport::JSON::Encoding
  class << self
    def escape(string)
      if string.respond_to?(:force_encoding)
        string = string.encode(::Encoding::UTF_8, :undef => :replace).force_encoding(::Encoding::BINARY)
      end
      json = string.gsub(escape_regex) { |s| ESCAPED_CHARS[s] }
      json = %("#{json}")
      json.force_encoding(::Encoding::UTF_8) if json.respond_to?(:force_encoding)
      json
    end
  end
end

参考 : http://blog.sosedoff.com/2012/04/26/emoji-and-rails-json-output-issue/

これでなんとか対応できた。

googleのGoをインストール

今年のGoogle Developer Day 2011のdevquizgoogleが開発した
プログラミング言語Goの問題があったので、ついカッとなってインストールしてみた。

Mercurialが必要とのことなのでpythonを入れてみる。
バージョン管理システムsubversionとgitしか使ったことがない。
Mercurialもいい機会なので使ってみようと思う。

なんかpythonは普通に入ってたのでpython-setuptoolsを入れる。

yum install python-setuptools

Mercurialのインストール

easy_install mercurial
...
error: Setup script exited with Python headers are required to build Mercurial

なんか怒られた。。。

python-develも入れなきゃダメだった。

yum install python-devel

これでMercurialが入った。

hg version
Mercurial Distributed SCM (version 1.9.1)
(see http://mercurial.selenic.com for more information)

Copyright (C) 2005-2011 Matt Mackall and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

ここからはGoの設定

32bit か 64bitか確認

getconf LONG_BIT
32

環境変数を設定する。.bashrcに下記を追加

export GOROOT=$HOME/htdocs/go
export GOOS=linux
export GOARCH=386
export GOBIN=$HOME/bin
export PATH=$PATH:$GOBIN

確認

source .bashrc
env | grep '^GO'

binディレクトリ作成

cd; mkdir bin

Goをリポジトリから入手

hg clone -r release https://go.googlecode.com/hg/ $GOROOT

いよいよGoのインストール!

cd htdocs/go/src
./all.bash

ちょっと時間かかって....

N known bugs; 0 unexpected bugs

インストール完了っ!
mkdirしたbinの中にバイナリファイルができてる。

ls
6cov  6prof  8c  8l   ebnflint  godoc  gofmt      gomake  gopprof  gotry   govet   hgpatch
6nm   8a     8g  cgo  godefs    gofix  goinstall  gopack  gotest   gotype  goyacc  quietgcc

サンプルスクリプトを動かしてみる。

hello.go

package main
 
import fmt "fmt"  // 入出力フォーマットを実装したパッケージ
 
func main() {
  fmt.Printf("Hello, world\n")
}

32bitなので8g 8lを使用する。

8g hello.go
ls
hello.8   hello.go
8l hello.8
ls 8.out  hello.8  hello.go 

できたー。あとは実行!

./8.out 
Hello, world

動いたー!
ちょっとこれで色々やってみようと思う。

rubyスクリプト内でタイムアウトした時にプロセスをKILLする

お仕事でいろんな監視スクリプトを組んでミドルウェアやデーモンなどの監視をしています。
大体がrubyスクリプトで作っているのですが、そこで一部はまったことを記録しておきます。

監視の本体はHobbitというツールを使っています。
監視のスクリプトは各サーバで実行され、実行結果をHobbitのマスターに送信するという感じになっています。

今回は定期的にapacheのmod_statusのデータを取得し、httpdのプロセスの状態を監視するスクリプトで起きた現象です。

スクリプト自体はたいしたことをしていなくて

  1. mod_statusのデータを取得
  2. データを加工して欲しい情報に整形
  3. システムコマンドを叩いて追加データの取得
  4. hobbitにデータ送信

なんてことをしています。

問題はスクリプトがTimeOutした時に起こります。

timeout_time = 60
retry_count  = 3

begin
  timeout(timeout_time) {
    # ここにアレやコレや(上記の1〜3)の処理
  }
rescue Timeout::Error => ex
  retry_count -= 1
  puts Time.now.to_s + "=>" + retry_count.to_s

  if retry_count > 0
    sleep 5
    retry
  end
end

スクリプトではTimeOutした時はエラーをキャッチしてリトライ処理をするようにしています。

大体はリトライで正常終了するのですが、リトライが掛かった時にシステムコマンドで起動したプロセスがスクリプト終了時も残ってしまい、psコマンドを打つと監視スクリプトから呼び出されたプロセスで一杯になってしまっていました。
※ プロセスが生成されるのは上述のシステムコマンドを叩いて追加データを取得するタイミング

対策として、スクリプトから起動したプロセスのpidを取得し、タイムアウト時にKILLするように修正しました。

pidを取るように修正

io = IO.popen('ps --no-headers -C php-cgi | wc -l')
pid = io.pid
cgi = io.read.chomp

プロセスをKILLするように修正

rescue Timeout::Error => ex
  retry_count -= 1
  puts Time.now.to_s + " => " + retry_count.to_s

  # kill timeout process
  if pid > 0
    puts "kill timeout process => " + pid.to_s
    Process.kill('KILL', pid)
  end

  if retry_count > 0
    sleep 5
    retry
  end
end

これでタイムアウト時にプロセスをKILLすることができました。

フェイスブック 若き天才の野望

遅ればせながら読んだ。

僕は起業本とか結構好きで何本か読んでいたんですが、この本には結構しびれた。

特にfacebookを立ち上げる学生時代の話や
facebookが大きくなるまでの過程、
シリコンバレーの雰囲気が伝わってきました。

もちろん映画も見たけど
本からの方がザッカーバーグの考えや意思が理解できた気がした。

なにより、自分も何かやらなくてはという気持ちと
シリコンバレー行きたい!と強く思うようになりました。

なので今年は夏休みをとってシリコンバレーにいく。

ザッカーバーグfacebookを作った歳やインターネットの世界を
考えると、そんなに自分も若く無い。

いろんな可能性を見てこようと思う。
パロアルトのfacebook本社も見てくるぜ!

クックパッド主催 第2回「開発コンテスト24」に参加しました!

クックパッドさんが主催する開発コンテスト24に参加しました!

コンテストの概要は下記

開発コンテスト24

21時にお題が発表されて24時間以内に開発を行い成果を投稿するいわゆるHackathonでした。

肝心のお題は
『(普段の生活で)半径3m以内にいる人が困っていることを解決する 』

前々日ぐらいに社内の若手のエンジニアに声をかけて参加表明をしてくれた
@cutmailと@araiguma47とインターン生で会社にこもり開発を開始しました。

タイムテーブル

  • 21:00-22:00 環境構築
  • 22:00-01:00 ブレスト
  • 01:00-07:00 設計:開発開始
  • 07:00-10:00 仮眠
  • 10:00-20:00 実装

始まった最初は人数が多い中、環境のことをほとんど考えていなかったので
全員が入れるサーバ、ドキュメントルート、DBの設定などあわただしく始まりました
この辺がサクサク作れるようになったのでインフラやっててよかったーと思いました。

そのあと全員であーでもない、こーでもない、これいんじゃなね?
みたいな感じで2時間ほどブレスト大会

0時を回りはじめてそろそろ開発に着手しないとやばいってことで
出てきた案の中で思い思いのものをチーム毎に作ることにしました。

今回は仕事でまったく絡みの無い後輩二人と一緒に作ったのですが
役割分担が比較的明確にでき、案がでてからは
ほとんど実装に費やすことができたのが非常によかったです。

設計の様子


作ったものはandroidアプリで
着る服や自分のコーディネートに自信の無い人がtwitterで繋がっている
友達に自分の服装を写真で送り寸評をもらえるcoorde friendsというアプリです。

開発中


設計をしながら機能は増えていき24時間で作れるか結構心配でした(汗)

役割分担

@yutadayo

  • twitter連携
  • codeigniterを使った認証まわり
  • ユーザーの寸評投稿部分

@cutmail

  • 写真投稿
  • アプリ部分全て

@araiguma47

  • DBまわり
  • 画像処理
  • 寸評確認画面

アプリ


@araiguma47が前日のまどか☆マギカを見ていてほとんど寝ていない
@cutmailが仮眠に行ったまま帰ってこない
初めてアプリとwebまわりの連携ができたのが朝の10時で
全ての機能が実装できたのが7時とけっこうギリギリな感じで進んだ開発ですが
それぞれが仕事で学んだこと、得意な分野を活かして開発し
納得のいくものが作れたのは非常によい経験でした。

開発の跡

結果受賞することはできませんでしたが
合宿みたいにこもって皆で開発できたことはとても楽しく
各々の技術の共有ができたのでとても有意義でした。

これからもこういったイベントには積極的に参加していきたいと思います!

最後に開催してくださったクックパッドさんと開発を共にした後輩達に感謝です!
来年も参加するぜーー!