Font Awesomeみたいに使えるカスタムアイコンを作成する

クラスで指定してアイコンを使いたい。その方が、色とかを文字に合わせたり色々と便利。

Icomoonというサイトを使えば簡単にできた。

https://icomoon.io/app/#/select

ここでまず、Font Awesomeを選択した。そして右にあるボタンから「Import to Set」をクリック。

Screen Shot 2016-06-07 at 20.31.30

アップロードしたアイコンがコレクションに追加されたら、それを選択して「Generate Font」をクリック。ページの下の方。

Screen Shot 2016-06-07 at 20.32.35

そしたら、同じく右下にダウンロードボタンが出てきた。これで必要なファイルを取得できる。

Screen Shot 2016-06-07 at 20.33.07

あとは中身を見てCSSを書くだけ。素晴らしいサービスだ。

MacでとりあえずRailsを始める手順

Homebrewを入れる。
http://brew.sh/

Xcodeのライセンスを許諾しろと言われたら、Xcodeをインストールして起動し、Agreeする。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Gitを入れる。

brew install git

RubyをRbenvで入れて、railsのインストール。

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
source ~/.bash_profile
rbenv install 2.2.4
rbenv global 2.2.4
gem install rails --no-ri --no-doc

日米トップIT企業の近年の売上推移を比べてみた

まずは日本から。

Screen Shot 2016-05-01 at 18.40.00

売上だけで見ると、ずっと楽天が圧倒的。2008年の時点でサイバーエージェントグループの倍以上。その後もずっと右肩上がりに伸びていっている。

ソーシャルゲームで一世を風靡したDeNAとGREEのピークはそれぞれ2013年と2012年。両者とも、ピークの頃はサイバーエージェントの売上を上回っている。

楽天に比べると一見小さく見えるが、サイバーエージェントも順調に売上を伸ばし続けている。

mixiはずっと他の各社より小さい売上だったが、2015年にモンスターストライクのヒットで一気に伸びている。それでもまだトータルの売上はDeNAの方が上、というのが意外な気はする。ヒット作品が1個か複数あるかの違いだろう。

次に米国版。MicroSoft、Facebook、Google(Alphabet)、Twitter、Appleを比較してみた。

Screen Shot 2016-05-01 at 18.51.44

何よりAppleが圧倒的。ハードウェアを売っていて、時価総額世界1位なんだからそりゃあそうか。

Windowsを中心にソフトウェアの大元を支えているMicrosoftの売上もまだGoogleより大きい。Microsoftは本当のピークがもっと前にあったりするのかもしれないので、もう少しデータを集めてみたい気はする。

Google、Facebookは想像通り堅調に推移していて。でも2つの会社にこれだけの差があるというのには少し驚いた。Googleは企業向け個人向けと多くの有料サービスを抱えているのに対し、Facebookはほぼ広告一本だからだろうか。このあたりももう少し調べてみたい。

また、普段使っている限りでは実感がなかったが、こうやってグラフにしてみるとTwitterが低調にあえいでいるというのがよくわかる。比較対象が巨大企業とはいえ、グラフの上ではほぼゼロに見える。

今後は国(株式市場)をまたいだ比較や、IT企業以外の産業間の比較などもやってみたい。

Railsアプリ経由でDockerを動かす

Dockerを使って作ってみたいWebサービスがあるので、そのために勉強し直してみようと思う。

まずは、Vagrant上に遊び場を用意する。

mkdir docker_playground; cd docker_playground
vagrant init centos/7
vagrant up
vagrant ssh

VMにsshで入ったら、CentOS7用のDockerをインストールする。

参考:https://docs.docker.com/engine/installation/linux/centos/

$ sudo yum update
$ curl -fsSL https://get.docker.com/ | sh
$ sudo usermod -aG docker vagrant
$ sudo service docker start
$ exit 
$ vagrant ssh 
$ sudo docker run hello-world #=> Make sure it is working

ここまででDockerの準備は終了。

次に、Vagrant内に必要なRailsプロジェクトを作り、Dockerとやり取りする。まずは「Dockerイメージの作成」「コンテナでコマンドを叩いてアウトプットを表示」の2つだけをできるようにしてみたい。

ということで、Railsのインストールが必要になる。

# On Vagrant VM 
$ sudo yum install -y patch git gcc readline-devel openssl-devel nginx gcc-c++ bzip2 vim sqlite3-devel
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
$ rbenv install 2.2.4; rbenv global 2.2.4
$ gem install rails --no-ri --no-doc

JavaScriptのランタイムも必要なので、NodeJSを入れておく。

$ curl -L git.io/nodebrew | perl - setup
$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile
$ source ~/.bash_profile
$ nodebrew install-binary v5.11.0
$ nodebrew alias default v5.11.0; nodebrew use default

さて、いよいよRailsプロジェクトを作成する。

$ rails new DockerOnRails; cd DockerOnRails
$ rails s -b 0.0.0.0

ここまでで、Railsのデフォルトページがホストマシンからアクセスできればとりあえずオーケー。

ここからDockerを作成・管理できるようにしていく。Rubyからdockerイメージ・コンテナにアクセスできるdocker-apiというGemがあるのでそれを試したいが、まずは対応するDocker自体のコマンドを確認しておこう。まずはこれから行ってみよう。

$ docker run docker/whalesay cowsay boo 
 _____
< boo >
 -----
    \
     \
      \
                    ##        .
              ## ## ##       ==
           ## ## ## ##      ===
       /""""""""""""""""___/ ===
  ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
       \______ o          __/
        \    \        __/
          \____\______/
$ irb
irb) require 'docker-api'
irb) image = Docker::Image.create('fromImage' => 'docker/whalesay')
irb) image.run('cowsay boo')

動いてるっぽいんだが、アウトプットを受け取ることができない。コンテナで試してみよう。

irb) container = Docker::Container.create('Image' => 'docker/whalesay', 'Cmd' => ['cowsay', 'boo'])
irb) container.start
irb) container.streaming_logs(stdout: true) { |stream, chunk| puts chunk }
 _____
< boo >
 -----
    \
     \
      \
                    ##        .
              ## ## ##       ==
           ## ## ## ##      ===
       /""""""""""""""""___/ ===
  ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
       \______ o          __/
        \    \        __/
          \____\______/
=> " _____ \n< boo >\n ----- \n    \\\n     \\\n      \\     \n                    ##        .            \n              ## ## ##       ==            \n           ## ## ## ##      ===            \n       /\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"___/ ===        \n  ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~   \n       \\______ o          __/            \n        \\    \\        __/             \n          \\____\\______/   \n"

見事に表示された。あとはこれをRailsアプリ内で行えば良いということみたい。

それをやるためのRailsアプリ側の設計を考えてみよう。全体をContainersControllerで管理する。
ContainersControllerは#createで新しいコンテナを作成し、#indexで一覧を返し、#showで個々のコンテナを表示することができる。そして、#runアクションでコマンドを走らせ、アウトプットを受け取ることができる。こんな感じだろうか。

やってみよう。

$ rails g scaffolding Container image:string container_id:string; rake db:migrate

あとはコントローラのメソッドにContainerを作り出す命令を加えればオーケー。

  def show
    @docker_container = Docker::Container.get(@container.container_id)
    @docker_container.start
  end

  def create
    @container = Container.new(container_params)
    image = 'docker/whalesay'
    docker_container = Docker::Container.create('Image' => image, 'Cmd' => ['cowsay', 'boo'])
    @container.image = image
    @container.container_id = docker_container.id

    respond_to do |format|
      if @container.save
        format.html { redirect_to @container, notice: 'Container was successfully created.' }
        format.json { render :show, status: :created, location: @container }
      else
        format.html { render :new }
        format.json { render json: @container.errors, status: :unprocessable_entity }
      end
    end
  end

そして、View(app/views/containers/show.html.erb)に簡単なレンダリング。

 <p>
 <strong>Logs:</strong>
 <%= simple_format(@docker_container.streaming_logs(stdout: true)) %>
</p>

だいぶ崩れてるけど、動いているみたい。

Screen Shot 2016-04-24 at 16.46.48

当初の目標であった「コマンドと叩いてそのアウトプットを得る」こともできたのだが、それほどシンプルにうまくいかなかったので、それに関しては後日改めてまとめてみようと思う。

世界の一人あたりGDP

Screen Shot 2016-04-24 at 14.50.53

Screen Shot 2016-04-24 at 14.51.09

なんとまあ、日本は26位。とてもじゃないけど一流の経済国とは言えない気がする。。

GDP全体で世界1位のアメリカは6位ということで全く悪くない一方、中国は75位。インドに至っては143位ということで国によって一人当たりの生産性には極端に差があるということがわかる。

ただ、この一人当たりGDPという指標は、そのまま「国民一人当たりの生産性(付加価値をどれだけ作れるか)」に直結しているわけで、国としての経済的な力を考える上で最も重要な指標なんじゃないだろうか。

中国やインドは、国全体の平均が低くても、一定割合の人たちが高い水準を保てれば競争力は高くなる(単に母数がでかい)とは思うが、日本のように今後、人口の増加が見込めない国家ではこの指標がこれまで以上に重要になっていく気がする。

じゃあ、でもどうすればいいんだろう。イメージではあるが、この数字は「国としての総合的な教育水準」に関わりがあるんじゃないかという気はする。上位にランクインしている国を見ると、比較的規模は小さいものの、国家戦略として何らかの優位性があり、海外から優秀な人を呼び込んでいる(シンガポールなど)か、国内でしっかり稼げる人達を教育する仕組みが整っている(北欧など)というイメージがある。実際の所どうなのか確信はないが。。

一位のルクセンブルクを見ると、「重工業」「金融」「チョコレート・ワイン」「観光」が主な産業らしい。経済規模は青森県ほど。人口は48万人だから日本の各県庁所在地の半分ほど。二位はスイスか。三位のカタールはオイルマネーと言ってよさそう。

こうやってみればみるほど、日本の総GDPが世界三位ということすら奇跡的のように思えてくる。この国はこれからどうなっていくのだろう。

小さい国では、ある意味国としてどういう方向性を定めるのかが決めやすいというのはあると思う。逆に日本のようにある程度の規模があると、個々人の危機感も引き出しにくく、他人任せにしてしまいやすいのかもしれない。まんま大企業病だけど。

とはいえ、軸となる産業がいくつかあれば国として大きく伸びていくのは前例を見ても間違い無いので、やはりそこが勝負の分かれ目になるんだろう。ソニーや松下のような企業を日本のスタートアップ業界が生み出すことができるんだろうか。

やりたいことについて

人生は、「やりたいことをやるためのもの」だと思っている。しかしながら、一口に「やりたいこと」と言っても2つに分類できる。

  • やりたいし、今すぐにできること
  • やりたいが、できないこと

一つ目は簡単だ。やりたくて、今すぐできるんだったらやればいい。吉野家で牛丼が食べたいなら食えばいいし、食べたいラーメン屋があるなら行けばいい。

問題は二つ目だ。人生では往々にしてやりたいんだけどできないことが沢山ある。

例えば結婚しようと思ったら、大なり小なり稼がないと、一般的には難しいだろう。
海外旅行がしたければ必要なお金を稼ぐ必要がある。

お金以外にも、例えば憧れの人(男女問わず)にあいたいと思ったなら、自分がそれに見合う人間にならなくてはいけないはずだ。これも「やりたくてもできない」ことの範疇に入る。

また、自分の中だけでもそういうことはあるはず。

コンピュータサイエンスの古典を読もうと思ったら、それを読むための知識が必要になるし、カントの「純粋理性批判」を原著で読みたいと思えばドイツ語を学ぶ必要がある。これも、やりたいことをするために他のアクションを要求することの例だ。

そして、特に若い間は、「やりたくて今すぐできること」よりも「やりたいけどできないこと」の方が多かったりするはずだ。

さらに、人生は往々にして選択の連続であり、何もかもすることはできないため、どちらかを優先する必要があるのだ。

その人の運動量にもよるだろうが、「腹筋を割ってシックスパックにする」ことと、「毎日一風堂のラーメンを替え玉とともに食す」ことは一般的に両立できない。

人生には、意識するとせざるとにかかわらずそういうあらゆる選択肢がある。その中で、どの選択をしてきたか、ということの積み重ねこそがその人の人生と言えるのではないだろうか。

サイバーエージェントの決算を読んでみる

http://pdf.cyberagent.co.jp/C4751/lsfl/USD4/GUXv.pdf

まず、今4半期において、グループ全体の売上高は746億円。過去最高の売上高らしい。営業利益は112億円。

そのうち、メディア、広告、ゲームそれぞれの売り上げが53, 423, 276億円となっている。

YonYってのは前年比ってことらしい。前年同四半期と比べて23.3%増えるってのはすごいことだな。2010年は今の3分の1だったということを鑑みても、すごく順調に事業が伸びていっているみたい。

一方で営業利益の方は伸びたり減ったりで、右肩上がりとは行っていない。

社員数は今や3600人以上。

2016年度間の売り上げは3000億円を目指しているそう。4月現在で50%なら、まあ達成できそうだよな。これちょっとよくわからんのが、今4月だけど、4月からじゃないの?

他にも色々あるが、正直ようわからんなこれだけだと。
他の会社と比べてみると面白そうだ。

月ごとに目標を立てる

今までの自分の取り組みを考えていて、今後はいわゆる能力的な部分をつけていく以上に、自分自身の中で蓄積していけるもの、人にシェアできるものを磨いていきたいという思いが出てきている。

それがこうやって考えていることを文章にしてみることにつながっているわけだが、単純に「どうやって取り組みを考えると自分的に楽しめるか」ということを鑑みて、月ごとに目標を立て、月の終わりに振り返るというのが一番よかったなあと思った。

自分には、やると決めたら中長期的(数ヶ月から数年)の計画を立てて、ここまでにこうしていたい、というようなチェックポイントを自前で設けようとする気質があって、とはいえそれを今まで明確に意識することはなく、毎日のように何をするか考えて、どうしようああしよう、と迷走する部分があったと思う。

そんな中、気づいたのだが、人間が何か取り組みをし、振り返るための単位として1ヶ月というのは素晴らしくちょうど良い。

1週間では何かを続けたとはいえないし、3ヶ月以上ともなると管理が難しい。その頃には忘れてしまっている可能性も高い。1年では長すぎる。あと、重要なポイントとして、「今月はアメリカにいる」「今月はジムに行けない」と言った特殊コンディションもだいたい1ヶ月程度の単位で訪れるのだ。渡米をきっかけにジムに行かなくなるなどの生活の変化が出てしまうと、目標に支障が出る可能性は結構ある。

だから、もちろん今年はどうしたい、という目標は考えるものの、実際には毎月ごとに「今月はどうしよう」「今月はどうだった」と計画と振り返りを重ねていくことが一番ちょうどいいなあ、と考えている。