エンジニアになりたい

立派なエンジニアに憧れるへっぽこエンジニアのメモ書き

EPEL, Remi のインストール

yum のリポジトリである EPEL, Remi をインストールしたのでメモ。

では、EPELのダウンロードから。
下記サイト http://dl.fedoraproject.org/pub/epel/6/x86_64/

f:id:k_7016:20131027082702p:plain

epel-release-6-8.noarch.rpm

のリンクアドレスをコピーして、

wget します。

$ wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm



次にRemi のダウンロードです。
下記サイト http://rpms.famillecollet.com/

f:id:k_7016:20131027082656p:plain

必要なリンクアドレスをコピー。
私はCentOS の バージョン6なので印のついた部分です。

wget

$ wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm


ではインストールしていきます。
EPEL

$ sudo rpm -Uvh epel-release-6-8.noarch.rpm

Remi

$ sudo rpm -Uvh remi-release-6.rpm

EPELの設定ファイルの編集をします。

$ sudo vi /etc/yum.repos.d/epel.repo

[epel] 内の
enabled=1 を
enabled=0 に変更します。

これはデフォルトでEPELを使用しないという設定です。
Remiは最初から 0 のようです。

では試しにRemi を使えばPHPのどのバージョンがインストールされるか調べるコマンドを

$ yum info --enablerepo=remi php

インストールするには下記コマンド

$ sudo yum --enablerepo=remi install -y php

以上です。

Vagrant で 開発環境構築 Rails編

Vagrant で開発環境を構築したので備忘録を。
前の記事の続き的な感じなのでそこまでは飛ばします。

ドットインストールを参考にさせてもらいました。

まずはとりあえず、やり直しが効くようにプラグインの
sahara をインストール。

$ vagrant plugin install sahara

sahara の各コマンドは下記

# sandbox モードを有効に
$ vagrant sandbox on

# sandbox モードを無効に
$ vagrant sandbox off

# ステータス確認
$ vagrant sandbox status

# コミット
$ vagrant sandbox commit

# 状態を元に戻す
$ vagrant sandbox rollback



ではログインしてyum アップデートから

$ sudo yum update -y


ネットワークの設定。なんか早くなるらしい。
詳しく解説してくれているサイトです。
http://www.kunitake.org/chalow/2012-11-02-1.html

$ sudo vi /etc/resolv.conf

下記を追加

options single-request-reopen


ローカルの開発環境なのでファイアウォールをきります。

$ sudo service iptables stop
$ sudo chkconfig iptables off


アパッチをインストールして立ち上げ

$ sudo yum install -y httpd
$ sudo service httpd start
$ sudo chkconfig httpd on

ちなみに既にアパッチがインストールされているか調べるにはこれ

$ yum list installed | grep httpd


アパッチの接続確認する前に Vagrantfile を編集して

config.vm.network :private_network, ip: "192.168.33.10"

の部分をコメントインしておきましょう。

コメントインしたら Vagrant を再起動。

$ vagrant reload

そしたらコメントインしたIPアドレスに無事接続できるはずです。



では次に Ruby を rbenv で入れます。
詳細はここ

git が必要なのでインストール。

$ sudo yum -y install git

では下記コマンド達を打っていきます。

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l

これでrbenv がインストールされます。


次に ruby-build をインストール
詳細はここ

$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build



ruby をインストール

$ rbenv install -v 2.0.0-p247

お約束のrehash

$ rbenv rehash

今入れたバージョン使用するように設定。

$ rbenv global 2.0.0-p247

バージョンを確認します。

$ rbenv versions
$ ruby -v



では Rails のインストールに入ります。
まずは gem のアップデート

$ gem update --system

Rails のインストール
ドキュメントのインストールを省略するオプションをつけています。

$ gem install rails --no-ri --no-rdoc -V

お約束のrehash

$ rbenv rehash

確認

$ rails -v

以上です。

Ajax を JQueryで

Ajax を Jqury で実装する方法をメモしておきます。
基本的な$.ajax のやつです。

$.ajaxAjax通信に必要なパラメータをオブジェクトリテラルの形式にして
引数に渡してやるだけで使えます。

こんな感じです。

$.ajax({
	url: '[url]',
	type: '[GET | POST]',
	dataType: '[json | xml | html など]',
	data: [送信するデータ(ハッシュ形式)],
	timeout: [通信タイムアウト時間],
	success: function(date) {
		// 成功した時の処理
	},
	error: function() {
		// 失敗した時の処理
	}
});

他にもパラメータはありますが、基本的な部分だけ。
success のコールバック関数の引数は応答データです。
ステータス文字列、XMLHttpRequestオブジェクトも使用できます。

data に渡すデータをハッシュ形式に変換するなどの場合には
serializeArray()メソッドが便利です。

例えばform の内容をハッシュ形式に変換する場合には
下記のようにします。

$('form').serializeArray()


以上です。

生のJavaScript で Ajax

Ajax を 生のJavaScriptで実装する方法をメモします。

まずは、XMLHttpRequest オブジェクトの生成です。

var req;
try {
        // IE7.0 以降とそれ以外のブラウザ
	req = new XMLHttpRequest();
} catch (e) {
	try {
                // IE6.0
		req = new ActiveXObject('Msxml12.XMLHTTP');
	} catch (e) {
                // IE5.5
		req = new ActiveXObject('Microsoft.XMLHTTP');
	}
}

こんな感じでブラウザによってインスタンスの生成を分けます。

次にXMLHttpRequest オブジェクトによる通信の状態が変化したタイミングで
呼び出されるコールバック関数を定義します。

XMLHttpRequest オブジェクト の onreadystatechange プロパティに定義します。

req.onreadystatechange = function() {
	if (req.readyState == 4) {
		if (req.status == 200) {
			// 通信が正常に完了したときの処理を書く

                        // レスポンスをテキストとして取得
                        var resText = req.responseText;

                        // レスポンスをXMLとして取得
                        var resXML = req.responseXML;
		} else {
			// 通信が正常に完了しなかった場合の処理を書く
		}
	} else {
                // 通信中の処理を書く
	}
};

readyState プロパティでは通信の状態を確認できます。
4 は処理の完了です。

status プロパティは応答ステータスが確認できます。
200は処理成功です。

次にGET でサーバにリクエストします。

req.open('GET', '[URL]', true);
req.send(null);

[URL]に、リクエストするURLを入れますが、クエリストリングなどでマルチバイト文字
など使う場合は
encodeURIComponent()
エンコードしましょう。

POSTの場合はこういう感じになります。

req.open('POST', '[URL]', true);
req.setRequestHeader('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
req.send('[body]');

コンテントタイプを指定してやる必要があるようなので指定して、
sendの引数に要求本文を渡します。
ここでも必要ならばエンコード処理をしましょう。

以上です。

Scalaインストール

Scala をインストールしたのでメモ。
Macです。

http://www.scala-lang.org/

http://www.scala-lang.org/
ここからダウンロードして解凍。

解凍したファイルを/usr/local/share/ に移動。

mv scala-2.10.3 /usr/local/share/scala-2.10.3


次に環境変数を設定。
ホームディレクトリの.bash_profileに下記を追加

export SCALA_HOME=/usr/local/share/scala-2.10.3
export PATH=$PATH:$SCALA_HOME/bin


ターミナルを再起動して scala と打ってエラーが出なければ完了。

PHP 環境構築 MAMPで

PHPは普段使わないけどちょっと使うことがあったのでメモしときます。

まずはMAMPをダウンロード

http://www.mamp.info/en/index.htmlhttp://www.mamp.info/en/index.html


ダウンロードしたらそのままインストールして、
とりあえずMAMPを立ち上げて見る。
するとブラウザでこんな画面が立ち上がるのでこれでMAMPのインストールは完了。

f:id:k_7016:20131005142916p:plain

で、この画面の phpinfo でPHPのバージョンとかポート番号がわかる。

次に文字コードを指定して日本語を文字化けしないようにします。
php.ini を編集しますが、どこのphp.ini を編集するかは
phpinfo でわかります。
f:id:k_7016:20131005144418p:plain

で、その php.ini の下記の値を編集。

default_charset = "UTF-8"

mbstring.language = Japanese

mbstring.internal_encoding = UTF-8

mbstring.http_input = auto

mbstring.detect_order = SJIS,EUR-JP,JIS,UTF-8,ASCII

このサイトを参考にしました。
http://memocarilog.info/mac/3633
ありがとうございました。


あとは再起動をかけて
phpinfo でドキュメントルート調べて PHP ファイルを置けば完成です。

Play Framework の 簡単サンプルAPI

Play Framework でただ JSON を1つ返すだけの簡単な API サンプルを作ってみます。


1. プロジェクト作成からサーバ立ち上げまで

2. routes 編集

3. モデル作成

4. コントローラ作成


1. プロジェクト作成からサーバ立ち上げ

$ play new sample

sample はプロジェクト名のつもりです。
実行するともう一度名前入力を求められるので
もう一度 名前入れるか 空欄のままで Enter
すると、Java か Scala か聞かれるので僕は Java を選択

次に

$ cd sample
$ play

ディレクトリを作成したプログラムに移動し
play コマンドを実行で play コンソールが使えます。

ちなみに play コンソールで

eclipse

と打つとeclipse のプロジェクトに変換してくれます。

そして

run

でサーバが立ち上がります。
必要なライブラリもダウンロードされます。


2. routes 編集

conf/routes に下記を追加します。

GET    /team                        controllers.Application.get()

見たまんまですが、
/team というパスに GET リクエストを送ると controllers.Application クラスの
get()メソッドが動きますっていう意味です。


3. モデル作成
すごい簡単に作ります。

package models;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonProperty;

public class Team {
	public Team(){}
	public Team(int id, String teamName, List<Member> members) {
		this.id = id;
		this.teamName = teamName;
		this.members = members;
	}

	public int id;
	
	@JsonProperty("team_name")
	public String teamName;
	
	public List<Member> members;
	
	public static class Member {
		public Member(){}
		public Member(String memberName, int age) {
			this.memberName = memberName;
			this.age = age;
		}

		@JsonProperty("member_name")
		public String memberName;
		
		public int age;
	}
}


@JsonProperty アノテーションは JSON で扱う名前を指定します。

@JsonProperty("team_name")
public String teamName;

これで Java の teamName を JSON では team_name としてくれます。


4. コントローラー作成

package controllers;

import java.util.ArrayList;
import java.util.List;

import models.Team;
import models.Team.Member;
import play.libs.Json;
import play.mvc.Controller;
import play.mvc.Result;
import views.html.index;

public class Application extends Controller {

	public static Result index() {
		return ok(index.render("Your new application is ready."));
	}

	public static Result get() {
		List<Member> members = new ArrayList<Member>();
		members.add(new Member("たけし", 24));
		members.add(new Member("さやか", 23));
		members.add(new Member("けんじ", 25));
		Team team = new Team(1, "Aチーム", members);

		return ok(Json.toJson(team));
	}

}

index() はデフォルトであったものです。
僕は get() を足しました。
モデルの Team クラス をインスタンス化して JSON に変換してレスポンスを返します。


Json.toJson(team)

これだけで JSON に変換して Content-Type を application/json;
にしてくれてます。

ok() はステータスを 200 OK にしてレスポンスします。

以上、簡単なサンプルでした。

あと、API を試したいときにはクロームのアプリの
Dev HTTP Client とか Postman とかAdvanced Rest Client とかが使えます。
どれも簡単です。


ちなみに結果はこんな感じです。

{
    "id": 1,
    "members": [
        {
            "age": 24,
            "member_name": "たけし"
        },
        {
            "age": 23,
            "member_name": "さやか"
        },
        {
            "age": 25,
            "member_name": "けんじ"
        }
    ],
    "team_name": "Aチーム"
}

インデントは Postman がつけてくれただけだと思います。