新さくらVPSへの引越し vol.3 GitLab + Unicorn + Nginxの導入

新さくらのVPSへの引越しメモ vol.3 GitLab + Unicorn + Nginxの導入


vol.3 目次

  1. 依存モジュールの導入
  2. システム管理ユーザ作成
  3. Nginx
  4. GitLab用Ruby(rbenv + ruby-build)
  5. Gitolite
  6. GitLab
  7. Unicorn

いよいよGitLab環境を構築していきます!

続きを読む

新さくらVPSへの引越し vol.1 初期設定

新さくらのVPSへの引越しメモ vol.1 初期設定

vol.1 目次

  1. ユーザ作成
  2. 接続設定
  3. ファイアウォール設定
  4. サービス設定
  5. パッケージ管理設定

始める前に

さくらのVPSに契約すると、まずはrootでログインしてWebコンソールから初期設定を行う必要がある。
接続設定でSSHの設定をしてからは、普段使っている端末からリモートログインして作業を行うことが可能。

続きを読む

新さくらのVPSへの引越のついでにGitLab+Unicorn+Nginxで最新バージョン管理環境構築

さくらのVPSのリニューアルが発表された。


メモリやHDD容量がかなり強化されていて、HerokuなどのPaaSや、さくらのクラウドAmazonなどのIaaSに流れていった人もさくらのVPSに戻ってきそうな勢いらしい。


4/20まで乗換キャンペーンもやっているようなので早速新しいVPSに引越してみた。
せっかくなので、GitLab + Unicorn + Nginxで最新のバージョン管理環境を作ってみようかと。

GitLabとは、プライベートなGitHubを目指したOSSで、GitHubホスティングされている。

GitLab - Self Hosted Git Management

GitHubの無料アカウントではパブリックなリポジトリしか持てないので、仲間内でこそこそ開発してる人とか、スタートアップでお金があまりない時期の人とか、みんなに見せるほどでもないものを管理したりするのにはGitLabがちょうどいい。

ただ!!GitLabは導入が難しく開発も盛んでドキュメントもあまりないので、はまりやすく敷居が高いとの噂。

以下、新さくらのVPSへの乗換とGitLabの導入がうまくいったので、メモしておく。

再インストールしてやってみてもできたので、乗換の人ならハマらずにそのままいけるはず。
初回起動からGitLab起動まで、目安は1時間〜1時間半です。引っ越す人はぜひ!!

環境

新さくらのVPS CentOS6.2(デフォルト)1GB

目次

  1. 初期設定
    1. ユーザ作成
    2. 接続設定
    3. ファイアウォール設定
    4. サービス設定
    5. パッケージ管理設定
  2. 基本環境導入(スキップ可)
    1. zsh
    2. vim
    3. tmux
  3. GitLab + Unicorn + Nginxの導入
    1. 依存モジュールの導入
    2. システム管理ユーザ作成
    3. Nginx
    4. GitLab用Ruby(rbenv + ruby-build)
    5. Gitolite
    6. GitLab
    7. Unicorn


以下、続きます。

Problem 2

問題

フィボナッチ数列の項は直前の2項の和である。 最初の2項を 1, 2 とすれば、最初の10項は以下のようになる。

 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

400万以下の項のうち、偶数項の総和を求めよ。

回答

まずRubyPythonで解いてみる。

loop.inject([0, 0, 1]) {|(sum, a, b), _|
  raise StopIteration if a > 4_000_000
  [ sum + a.even? ? a : 0, b, a + b ]
}[0]
def fibs( max ):
  a, b = 0, 1
  while b <= max:
    yield b
    a, b = b, a + b

sum([ x for x in fibs(4000000) if x % 2 == 0 ])

手続き型の解法+ジェネレータ、畳込み演算、リスト内包表記など使ってみた。
手続き型と関数型がごっちゃだけど、そこのバランス感覚を身につけたい。


Haskellは調べてみたけどかっこよすぎて別次元。。。

The Fibonacci sequence - Haskell Wiki

sum [x | x <- takeWhile (< 4000000) fibs, even x]
    where fibs = 1 : 2 : zipWith (+) fibs (tail fibs)

遅延評価学ばねば。Haskell学ぶとRubyPythonの書き方も変わる気がする。
そしてRubyで無限ストリームほしい![0..]とか書きたい!


Rubyで遅延Enumerable作ってる方がいたので参考にさせて頂きます。

github - antimon2/enumerable_lz

ディレクトリ構造を保ったまま欲しいファイルだけをコピーする方法

eclipseでandroid SDKのソースコードを参照する方法

それ1行でできるよ!そう、Linuxならね。

というわけでandroidソースコードからjavaファイルだけ抜き出してandroid SDKの下に置いてみる。

コマンド

$ find {src_root}/ -name "*.java" -print0 | xargs -0 cp --parents -t {sdk_root}/platforms/android-X/src/

Linuxの人は以上。

Macの人は、BSD系のcpコマンドに--parentsオプションがないのでGNU版をインストールする必要がある。

Mac

$ brew install coreutils
  • cpコマンドだけをGNU版と置き換えたい人は.zshrcに以下を記述
alias cp="gcp"
  • 主要なコマンドを全部GNU版と置き換えたい人は.zshrcに以下を記述(パス、バージョンは環境に合わせる)
export PATH=/usr/local/Cellar/coreutils/8.15/libexec/gnubin/:$PATH

またfind, xargsの便利技についても書こうかと!

Problem 1

問題

10未満の自然数の中で3 または 5 の倍数の数は 3, 5, 6, 9 であり、 これらの合計は 23 である。
同様に、1,000 未満の 3 か 5 の倍数になっている数字の合計を求めよ。

回答

  • Haskell ※ご指摘頂いたので修正しました。ありがとうございます!
sum [ x | x <- [1..999], rem x 3 == 0 || rem x 5 == 0 ] 
(1..999).select { |x| x % 3 == 0 || x % 5 == 0 }.inject(&:+)
sum([ x for x in range(1000) if x % 5 == 0 or x % 3 == 0 ])

リストの内包表記と配列のsumを使えるHaskell, Pythonはほぼ同様に書ける。

Rubyにはリストの内包表記とsumがないので、injectを使った。
ActiveSupportにArray#sumがあるが、内部ではinjectを使って実装されているようだ。

def sum(identity = 0, &block)
  if block_given?
    map(&block).sum(identity)
  else
    inject { |sum, element| sum + element } || identity
  end
end

Array#sumを使うとしたらこうなるか

(1...1000).select { |x| x % 3 == 0 || x % 5 == 0 }.sum


個人的にはHaskellPythonのリストの内包表記、sumの使い方はどうも処理が追いにくい。
がしがし書かれるとどこから読んでいいか迷いそう。

その点Rubyはリスト操作が左から順に処理を追えるので見やすい。慣れですかね。

続きを読む