バブルソート

問題を解くのにアルゴリズムの知識が必要だと感じたのでアルゴリズムを学習してみました。

アルゴリズムとは、数学、コンピューティング、言語学、あるいは関連する分野において、問題を解くための手順を定式化した形で表現したものを言う。

アルゴリズムの中には、ソートというものがあり、データをある順序に並び替える時に使われます。たとえば、ソートを使うことで、数字の小さい順や大きい順に順番を並び替えることができるのです。ソートにはいくつか種類があり、代表的なものにバブルソートクイックソート、選択ソート、交換ソートなどがあります。

問題は、単語を好きなだけ入力した後、sortメソッドを使わないで単語をアルファベット順に並び替えろというものです。

今回は初心者にわかりやすいバブルソートを使ってみました。

word = 'foo'
array = []

while not word.empty?
  word = gets.chomp
  array << word
end

i = 0
while i < array.length
  j = 1
  while j < array.length - i
    if array[i] > array[i+j]
      saving = array[i]
      array[i]  = array[i+j]
      array[i+j] = saving
    end
    j += 1
  end
  i += 1
end 

puts array

感想
これを機会にすこしづつ使えるアルゴリズムを増やしていきたいです。

Githubの基本

GitHubとは

ソースファイルのバージョン管理システムにGitというものがあります。
Gitはリポジトリ(管理保存場所)先として、ローカル、もしくはリモートを選択出来るのですが、GitHubはそのリモート先にあたるもので、プロジェクトの管理をWeb上で行うことが出来るサービスです。

GitHubを見れば、その人のプログラマーとしての力量がある程度わかってしまうみたい。GitHubを見て採用とかあるんだろうか。ちょっと怖い。。。

課題

Githubに自分のリボジトリを作成
・clone, pushの学習

リポジトリの作成
クリックしてNew Repositryを選択
f:id:korosuke565:20140220183918p:plain

名前をつけてCreate Reposityを選択
f:id:korosuke565:20140220183926p:plain

ローカルのPCで先程つけた名前と同じ名前のディレクトリを作成してターミナルで作業

touch README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:rakuda4989/リポジトリ名.git
git push -u origin master

・git remote add origin ~の部分でローカルのGitにリモート情報を設定
・git push ~でリモートのGitHubに送信

既存のリポジトリのクローン
既存の Git リポジトリ (何か協力したいと思っているプロジェクトなど) のコピーを取得したい場合に使うコマンドが、git clone です

今後の課題

・remote branchの作成
・pull —rebase, stash, stash popに挑戦

Gitスタート

昨日からGitの学習をスタートさせました。

Gitについては少しだけ使ったことがあり、git addやgit commitぐらいは知っています。しかし、まだGitを使いこなせるレベルとは到底言えないので、しっかり基礎から学習していこうと思います。早くプルリクが使いこなせるプログラマーになりたい。。。

Git入門
例のごとくドットインストールでGitを学習しました。ドットインストールさんには、いつもお世話になりっぱなしです。コマンドのメモを残します。

リボジトリの作成

git init

ステージングエリアにあげるためのコマンド

git add ファイル名
git add .

ステージングエリアからリポジトリにあげるためのコマンド

git commit -m "コメント"

履歴の確認

git log

ファイルの状況確認

git status

編集箇所を調べる

git diff

ファイルの削除

git rm ファイル名

コミットの修正

git reset commit番号

ブランチの作成

git branch ブランチ名

ブランチの一覧表示

git branch

ブランチの移動

git checkout ブランチ名

ブランチをマージ

git merge ブランチ名


まとめ
LInuxVimに引き続きコマンドの量が多いので少しづつ使いながらGitに慣れていこうと思います。

nginxのバーチャルホストを設定

まず、バーチャルホストという言葉を初めて聞いたので、バーチャルホストについて調べてみる。

バーチャルホスト(Virtual Host)とは1つのサーバで複数のドメインを運用する技術のことで、Webサーバ、メールサーバなどで利用される。

もちろんへっぽこプログラマーなのでドメインという言葉を聞いたことはあるが、よくわかっていない。そこで、ドメインについても調べる。

ドメインとは、ネットワークに接続しているコンピュータの場所を示すインターネット上の「住所」にあたります。「住所」ですから、同じものは世界にふたつとありません。たったひとつだけです。ドメイン取得は先着順になっており、基本的に、先に取得した人がいた場合は、後から申請しても取得できません。裏をかえせば、どんなドメインでも最初に申請すれば、それがあなたの「住所」になります。

バーチャルホストを使えば複数の住所をもつことができるということなのだろう。バーチャルホストの設定は/etc/nginx/sites-available/の下に書く。

server {
  listen 80;
  server_name korosuke.com.local;
  access_log  /var/log/nginx/localhost.access.log;
  error_log  /var/log/nginx/localhost.error.log;
  
  location / {
  root   /usr/share/nginx/test;
  index  index.html;
  }
}          

/etc/nginx/sites-enabled/の下のファイルにシンボリックリンクを張る

シンボリックリンク

あるファイル、ディレクトリにアクセスした際に、別のファイル、ディレクトリを参照できるようにする「リンク」機能。


ハマった点

Macのローカルの中の /private/etc/hostsファイルにも設定を書かなければいけない。ここを書いていないため、どつぼにはまっていた。

192.168.56.101  korosuke.com.local

f:id:korosuke565:20140217123633p:plain

追記
バーチャルホストの設定を1つしか書いてなかったので、もう1つ設定を書き加えたいと思います。

1 まずローカルのMacのhostsファイルに新しいドメインを足す。わかりづらいのですがkorokoro.com.localというドメインを追加しました。

##
 # Host Database
 #
 # localhost is used to configure the loopback interface
 # when the system is booting.  Do not change this entry.
 ##
 192.168.56.101  korosuke.com.local
 192.168.56.101  korokoro.com.local

2 次にdebianにある/etc/nginx/sites-availableの下にあるバーチャルホストの設定ファイルに新しい設定を追加をします。

server {
   listen 443 ssl;
   ssl on;
   ssl_certificate  /etc/nginx/server.crt;
   ssl_certificate_key  /etc/nginx/server.key;

    server_name  korosuke.com.local;
    access_log  /var/log/nginx/localhost.access.log;
    error_log  /var/log/nginx/localhost.error.log;

    location / {
        root   /usr/share/nginx/test;
        index  index.html;
    }
}

server {
   listen 443 ssl;
   ssl on;
   ssl_certificate  /etc/nginx/server.crt;
   ssl_certificate_key  /etc/nginx/server.key;

    server_name  korokoro.com.local;
    access_log  /var/log/nginx/localhost2.access.log;
    error_log  /var/log/nginx/localhost2.error.log;

    location / {
        root   /usr/share/nginx/test2;
        index  index.html;
    }
}

3 nginxを再起動させhttps://korokoro.com.localに接続します。

f:id:korosuke565:20140221110756p:plain

nginxのインストール

nginxなんて聞いたことがないし、そもそも読むことができない。エ、エヌジンエックス・・・。

nginxエンジンエックス(読みづらい名前つけやがって)はロシアのlgor Sysoevによって開発されたWebサーバ兼リバースプロキシのソフトウェアを指す。2002年に開発が始まり、2004年に公開され、今では焼く10%のシェアを持つまでに成長している。facebookWordPressにも導入されているようだ。

nginxのインストール

$ sudo apt-get install nginx

これでインストールはできるが古いバージョンなので新しいバージョンにする必要がある。ちなみにバージョン確認はapt-cache policy パッケージ名で行うことができる。

最新版をダウンロードするためにはパッケージの公開鍵をダウンロードしてapt-keyで追加するという作業をしなくてはならない。

$ wget "http://nginx.org/keys/nginx_signing.key"
$ sudo apt-key add nginx_signing.key

サイトをリポジトリに追加

$ sudo vi /etc/apt/sources.list

Vimファイルに以下を追加

deb http://nginx.org/packages/debian/ squeeze nginx
deb-src http://nginx.org/packages/debian/ squeeze nginx

アップデートして最新版をインストール

$ sudo apt-get update
$ sudo apt-get install nginx


サーバーを動かす

$ sudo service nginx start

ブラウザでIPアドレス:80をうつとWelcome to nginx!と表示されたら成功。

参考
http://nomnel.net/blog/install-nginx-in-debian-using-apt-get/

MySQLの基本的なコマンド

今日学習したMySQLのコマンドをメモ。

データベースの作成

mysql> create database blog_app;
Query OK, 1 row affected (0.00 sec)

create database データベースの名前で作成

databasesの一覧を表示

mysql> show databases;
+----------------------+
| Database             |
+----------------------+
| information_schema   |
| blog_app             |
| kowabana_development |
| kowabana_test        |
| mysql                |
| performance_schema   |
| test                 |
+----------------------+
7 rows in set (0.00 sec)

showはテーブルの一覧を表示する時にも使える

データベースの切り替え

mysql> use blog_app;
Database changed

これで7つあるデータベースからblog_appが選択された。

テーブルの作成

mysql> create table users(
    ->   id int,
    ->   name varchar(255),
    ->   email varchar(255),
    ->   password char(32)
    -> );
Query OK, 0 rows affected (0.04 sec)

テーブル名がusersでid,name,passwordが列のテーブルを作成しました。隣のinitやvarcharはデータの型を示します。intは整数,varcharは文字列で隣のかっこは文字数を示します。char型は文字の長さが決まっている時に使用するらしいです。

テーブルにデータを挿入

mysql> insert into users (id,name,password) values(1,'UB',555),(2,'kodama',777);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

データの中身を確認

mysql> select * from users;
+------+--------+----------+
| id   | name   | password |
+------+--------+----------+
|    1 | UB     | 555      |
|    2 | kodama | 777      |
+------+--------+----------+
2 rows in set (0.00 sec)


作業用ユーザーの作成

mysql> grant all on blog_app.* to ユーザー名@localhost identified by 'パスワード'
    -> ;
Query OK, 0 rows affected (0.01 sec)

作業用ユーザーでログイン

$ mysql -u ユーザー名 -p blog_app
Enter password:
||< 

DebianにMySQLをインストール

今日は、まずDebianMySQLをインストールしました。

MySQLのインストール

# aptitude -y install mysql-server-5.5

MySQLにログイン

# mysql -u root -p
Enter password:

mysql>_が表示されたらログインに成功です。
ちなみにuはユーザー、pはパスワードのことを指します。

MySOLからログアウト

mysql> exit
Bye

ログアウトするとbyeと言ってくれてちょっとかわいい。