Dockerを動かすためにvagrantにUbuntuをインストール

Dockerは軽量な仮想環境で、OSやアプリケーションを別の場所に簡単にもっていくことができます。Build once, run anywhere と呼ばれたりします。

Docker

Dockerはubuntu上で開発されているので、環境は、ubuntuをvagrantでインストールして、そこで作業していきましょう。ということで、vagrantのフォルダに移動し、コマンドラインからubuntuを入れます。

まず、vagrantから、boxesからtrustyをコピーします。
http://www.vagrantbox.es/
a

そして、vagrantのフォルダからコマンドラインで以下のように打ち込みます。

C:\Users\username\MyVagrant>vagrant box add trusty64 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box

インストールが終わったら、Dockerのファイルを作り、vagrant initをしましょう。

C:\Users\username\MyVagrant>mkdir Docker
C:\Users\username\MyVagrant>cd Docker
C:\Users\username\MyVagrant\Docker>vagrant init trusty64

そすると、vagrant fileが作られるので、vagrant fileの中で、以下のようにipのコメントを外して、任意のipアドレスを設定しましょう。ここでは、192.168.55.44としてます。

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  config.vm.network "private_network", ip: "192.168.55.44"

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  # config.vm.network "public_network"

その後、vagrant upとし、Ubuntu sshで接続完了です。

login as: vagrant
vagrant@192.168.55.44's password:
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-100-generic x86_64)

* Documentation: https://help.ubuntu.com/

System information disabled due to load higher than 1.0

Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.

CoffeeScriptのクラスの継承

Coffeeでもクラスの継承、オーバーライドなどできます。

class User
 constructor: (@name) ->
 hello: -> alert "hello, #{@name}"

class AdminUser extends User
 hello: ->
  alert "admin says..."
  super()

tom = new User "Tom"
alert tom.name
tom.hello()

bob  new AdminUser "Bob"
# alert bob.name
bob.hello()

Ada genericによるswap

with Ada.Text_IO;
use Ada.Text_IO;
with Ada.Integer_Text_IO;
use Ada.Integer_Text_IO;

procedure MyApp is
   generic
     type element is private;
   procedure Swap(a, b: in out element);

   procedure Swap(a, b: in out element) is
     tmp: element;
   begin
     tmp := a;
     a := b;
     b := tmp;
   end Swap;

   procedure SwapInt is new Swap(Integer);
   procedure SwapChar is new Swap(Character);

   i1: Integer := 3;
   i2: Integer := 5;
   c1: Character := 'a';
   c2: Character := 'd';
begin
  put(i1);
  new_line;
  put(i2);
  new_line;
  put(c1);
  new_line;
  put(c2);
  new_line;
  SwapInt(i1, i2);
  SwapChar(c1, c2);
  put(i1);
  new_line;
  put(i2);
  new_line;
  put(c1);
  new_line;
  put(c2);
  new_line;
end MyApp;
[vagrant@localhost ada_lessons]$ gnatmake myapp.adb
gcc -c myapp.adb
gnatbind -x myapp.ali
gnatlink myapp.ali
[vagrant@localhost ada_lessons]$ ./myapp
          3
          5
a
d
          5
          3
d
a

Ada procedure

with Ada.Text_IO;
use Ada.Text_IO;
with Ada.Integer_Text_IO;
use Ada.Integer_Text_IO;

procedure MyApp is
  procedure SayHi(name: in String) is
  begin
   put_line("hi!" & name);
  end SayHi;
begin
   SayHi("tom");
   SayHi("bob");
end MyApp;
[vagrant@localhost ada_lessons]$ gnatmake myapp.adb
gcc -c myapp.adb
gnatbind -x myapp.ali
gnatlink myapp.ali
[vagrant@localhost ada_lessons]$ ./myapp
hi!tom
hi!bob

Adaのloopとexit

Adaのloopは永久ループなので、exitで処理を抜けます。

-- Float
--変数
with Ada.Text_IO;
use Ada.Text_IO;
with Ada.Integer_Text_IO;
use Ada.Integer_Text_IO;

procedure MyApp is
   count: integer;
   i: integer := 1;
begin
 get(count);
 loop
   put(i);
   new_line;
   i := i + 1;
   exit when i > count;
 end loop;
end MyApp;
[vagrant@localhost ada_lessons]$ gnatmake myapp.adb
gcc -c myapp.adb
gnatbind -x myapp.ali
gnatlink myapp.ali
[vagrant@localhost ada_lessons]$ ./myapp
4
          1
          2
          3
          4

Adaの条件分岐

-- Float
--変数
with Ada.Text_IO;
use Ada.Text_IO;
with Ada.Integer_Text_IO;
use Ada.Integer_Text_IO;

procedure MyApp is
 score: integer;
begin
 get(score);
 if score > 80 then
    put_line("great!");
 elsif score > 60 then
 put_line("good!");
 else
 put_line("...");
    end if;
end MyApp;
[vagrant@localhost ada_lessons]$ gnatmake myapp.adb
gcc -c myapp.adb
gnatbind -x myapp.ali
gnatlink myapp.ali
[vagrant@localhost ada_lessons]$ ./myapp
25
...

戦闘機開発 Adaの定数と変数、四則演算

--定数
--変数
with Ada.Text_IO;
use Ada.Text_IO;
with Ada.Integer_Text_IO;
use Ada.Integer_Text_IO;

procedure MyApp is
 x: Integer;
 y: constant Integer := 3;
begin
  x := 5;
  put(x);
  new_line;
  x := 10;
  put(x, 5);
  new_line;
  put(y);
  new_line;
end MyApp;

四則演算

--定数
--変数
with Ada.Text_IO;
use Ada.Text_IO;
with Ada.Integer_Text_IO;
use Ada.Integer_Text_IO;

procedure MyApp is
 x: Integer;
begin
 put("your number? ");
 get(x);

 put(x + 3);
 new_line;
 put(x - 3);
 new_line;
 put(x / 3);
 new_line;
 put(x rem 3);
 new_line;
 put(x * 3);
 new_line;
 put(x ** 3);
 new_line;
end MyApp;

25を入力してみます。

[vagrant@localhost ada_lessons]$ gnatmake myapp.adb
gcc -c myapp.adb
gnatbind -x myapp.ali
gnatlink myapp.ali
[vagrant@localhost ada_lessons]$ ./myapp
your number? 25
         28
         22
          8
          1
         75
      15625

戦闘機開発 Adaで”helloworld”

Adaの拡張子は、adbです。myapp.adbファイルをつくり、早速コードを書いてみましょう。

with Ada.Text_IO;
use Ada.Text_IO;

procedure MyApp is
begin
  put_line("hello world!");
end MyApp;
[vagrant@localhost ada_lessons]$ gnatmake myapp.adb
gcc -c myapp.adb
gnatbind -x myapp.ali
gnatlink myapp.ali
[vagrant@localhost ada_lessons]$ ls
myapp  myapp.adb  myapp.ali  myapp.o
[vagrant@localhost ada_lessons]$ ./myapp
hello world!

戦闘機開発 vagrantでAdaの開発環境

Adaとは米国防総省が中心となって開発されているプログラミング言語です。戦闘機の制御などに使われています。

Ada

Adaはコンパイルしなければなりませんので、開発環境にGNATをインストールしましょう。コマンドは以下の通りです。GNATはGCCに含まれるAdaのコンパイラです。

[vagrant@localhost ada_lessons]$ sudo yum install -y fedora-gnat-project-common

実際にコンパイルする際には gnat makeとしますが、インストールが終わったら、バージョンを確認してみましょう。

[vagrant@localhost ada_lessons]$ gnat make --version
GNATMAKE 4.4.7 20120313 (Red Hat 4.4.7-17)
Copyright (C) 1995-2008, Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

さあ、ミサイル開発のスタートです。