how to install ruby 1.9.3p194 on CentOS 6.3

CentOS release 6.3 に ruby 1.9.3p194 (2012-04-20) をインストールしました。

zlib が必要です*1

$ sudo yum install zlib-devel

yaml-0.1.4 が必要です。

yaml-0.1.3 じゃ駄目です。yum じゃゲット出来なかったんで(yaml-cpp-devel は駄目げ)、ソース取ってきて make しました。
http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz

readline-devel が必要…かな?*2

$ sudo yum install readline-devel

Ruby on Rails を使う場合…

openssl が必要です。

$ sudo yum -y install openssl-devel

therubyracer(javascript engine)が必要です。

$ sudo yum install gcc-c++
$ sudo `whence gem` install therubyracer

あとはこんな感じで…。

$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.bz2
$ tar jxvf ruby-1.9.3-p194.tar.bz2
$ cd ruby-1.9.3-p194/
$ ./configure 
$ make
$ sudo make install

gem

$ sudo `whence gem` update --system

gem のバージョンが 1.8.24 になりました。

$ sudo `whence gem` update

json と minitest がアップデートされました。

追記(RoR を使う場合)

openssl-devel, ncurses-deve もインストールしておいた方がよさげ。*3*4
http://www.maepachi.com/blog/entry?border=0&id=98
http://r7kamura.hatenablog.com/entry/20110212/1297452845

あと

$ gem install debugger-ruby_core_source

も。

*1:http://d.hatena.ne.jp/dkfj/20081226/1230262374

*2:http://d.hatena.ne.jp/inouetakuya/20120320/1332243950

*3:readline-devel の方がイイかな〜。readline-devel をインストールしておけば不要な気もします。

*4:http://qiita.com/items/07aedbeca5da9d0bc792

アプリケーションのアップデート

proxmox でアップデートするには aptitude を使うんだぜ?
詳細は http://www.garunimo.com/program/linux/aptitude.xhtml なんだぜ。
大抵は

$ sudo aptitude update
$ sudo aptitude -y full-upgrade

でイイと思うんだぜ。
safe-upgrade の方がいいかもだけどよく分かんないんだぜ?
aptitude を引数無しで立ち上げたらこんなのが出てきてびっくりしたんだぜ…。
f:id:maangie:20120827201529p:plain

アルゴとリズム

ユークリッドの互除法

久しぶりにC#を触るので、とりあえずユークリッドの互除法を作ってみました。
コンソール版とフォーム版があります。

EuclideanAlgorithm.cs

namespace ユークリッドの互除法
{
    public class EuclideanAlgorithm
    {
        public int Exec(int m, int n)
        {
            if (m < n)
            {
                int tmp = m;
                m = n;
                n = tmp;
            }

            while (n > 0)
            {
                int tmp = n;
                n = m % n;
                m = tmp;
            }

            return m;
        }
    }
}

Console.cs

using System;

namespace ユークリッドの互除法
{
    class Console
    {
        static void Main(string[] args)
        {
            int m = Convert.ToInt32(args[0]);
            int n = Convert.ToInt32(args[1]);

            System.Console.WriteLine((new EuclideanAlgorithm()).Exec(m, n));
        }
    }
}

Form.cs

using System;

namespace ユークリッドの互除法
{
    public partial class Form : System.Windows.Forms.Form
    {
        public Form()
        {
            InitializeComponent();
        }

        private void TextChangedHandler(object sender, EventArgs e)
        {
            int m;
            int n;

            string result = "";

            if (Int32.TryParse(txtM.Text, out m) &&
                Int32.TryParse(txtN.Text, out n))
            {
                result = (new EuclideanAlgorithm()).Exec(m, n).ToString();
            }

            txtResult.Text = result;
        }
    }
}

FizzBuzz

じゃあ、FizzBuzz でも作ってみるかな、と。
yield 使ってるトコが C# ぽいですか。

FizzBuzz.cs

using System.Collections;

namespace FizzBuzz
{
    public class FizzBuzz
    {
        public static IEnumerable GetValue()
        {
            for (int i = 1; i <= 100; i++)
            {
                if      (i % 15 == 0) yield return "FizzBuzz";
                else if (i %  5 == 0) yield return "Buzz";
                else if (i %  3 == 0) yield return "Fizz";
                else                  yield return i;
            }
        }
    }
}

Console.cs

namespace FizzBuzz
{
    class Console
    {
        static void Main(string[] args)
        {
            foreach (object o in FizzBuzz.GetValue())
                System.Console.WriteLine(o);
        }
    }
}

Form.cs

namespace FizzBuzz
{
    public partial class Form : System.Windows.Forms.Form
    {
        public Form()
        {
            InitializeComponent();

            foreach (object o in FizzBuzz.GetValue())
                listBox1.Items.Add(o);
        }
    }
}

6.2に byobu をインストールする

$ RPM=epel-release-6-8.noarch.rpm
$ sudo rpm -ivh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/$RPM
$ wget http://ftp.iij.ad.jp/pub/linux/fedora/epel/RPM-GPG-KEY-EPEL-6
$ sudo rpm --import RPM-GPG-KEY-EPEL-6
$ sudo yum install byobu --enablerepo=epel-testing

以下を参照しました。
http://d.hatena.ne.jp/ocs/20120721/1342870128
http://nemf.info/2012/04/epel6-memo/