ページ

2015年2月6日金曜日

MacにMongoDB3.0をインストール

NoSQLを本格的に勉強しようと思いとりあえずMongoDB3.0をインストール

brewで行えば簡単そうですが、まだ(2015/02/06日現在)3.0できなさそうなので
手動にてインストール

インストール先
/Users/{ユーザ名}/mongoldb
※以後のユーザ名は自分の名前に書き換えて下さい.
$ cd ~/Downloads/
# DLと解凍しインストール
$ curl -O http://downloads.mongodb.org/osx/mongodb-osx-x86_64-3.0.0-rc6.tgz
$ tar -zxvf mongodb-osx-x86_64-3.0.0-rc6.tgz
$ mkdir -p ~/mongodb
$ cp -R -n mongodb-osx-x86_64-3.0.0-rc6/ ~/mongodb

# DLしたファイルを削除
$ rm -rf mongodb-osx-x86_64-3.0.0-rc6/
$ rm mongodb-osx-x86_64-3.0.0-rc6.tgz


# パスを通します.
$ echo "export PATH=/Users/{ユーザ名}/mongodb/bin:\$PATH" >> ~/.bash_profile
$ source ~/.bash_profile
$ mkdir -p ./data/db
$ mongod --dbpath ./data/db

# ちなみに以下のようにするとログが書き込みできます。
$ sudo mongod --dbpath ./data/db --logpath /var/log/mongodb.log



以下でアクセスするととりあえず動きました。
$ mongo
==================================
MongoDB shell version: 3.0.0-rc6
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings: 
2015-02-06T01:07:50.323+0900 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2015-02-06T01:07:50.323+0900 I CONTROL  [initandlisten] 
>
==================================


launchd/launchctlを利用し、起動時に実行できるようにします。
sudo vi /Library/LaunchDaemons/org.mongodb.mongod.plist
====以下を貼り付け=============================




        Label
        org.mongodb.mongod
        RunAtLoad
        
        ProgramArguments
        
                /Users/{ユーザ名}/mongodb/bin/mongod
                --dbpath
                /Users/{ユーザ名}/mongodb/data/db
                --logpath
                /var/log/mongodb.log
        


==========================

# 権限を付与
$ sudo chown root:wheel /Library/LaunchDaemons/org.mongodb.mongod.plist
$ sudo chmod 644 /Library/LaunchDaemons/org.mongodb.mongod.plist

# サービスの実行
$ sudo launchctl load /Library/LaunchDaemons/org.mongodb.mongod.plist

# サービスの停止
# sudo launchctl unload /Library/LaunchDaemons/org.mongodb.mongod.plist

次回に触ってみようと思います。
とりあえず今日はここまで 

2014年11月9日日曜日

Node.jsでpostgres接続する

Node.jsでサーバPGをしようと思いpostgresへ接続

Node.js v0.10.26
postgres 9.3.2
上記バージョンにて確認

Node.jsはインストールされているとして以下のパッケージをnpmでインストールする必要がある。
https://github.com/brianc/node-postgres
$ npm install pg

使い方ですが、サーバで利用を想定して行うといかになります。


var pg = require('pg'); 
var http = require('http');

var conString = "postgres://postgres:@localhost:5432/postgres";
var server = http.createServer();
server.on('request', doRequest);
server.listen(1008);
function doRequest(request, response) {
    var client = new pg.Client(conString);
    client.connect(function(err) {
    if(err) {
        return console.error('could not connect to postgres', err);
    }
    client.query('SELECT NOW() AS "theTime"', function(err, result) {
        response.writeHead(200, {'Content-Type': 'text/html'});
        if(err) {
            return console.error('error running query', err);
        }
        console.log(result.rows[0].theTime);
        response.write(result.rows[0].theTime + "");
        response.end();
        client.end();
    });
});
};

コネクションの関係も見ながら確認してみたのですが。
pg.ClientはdoRequest内で行い、client.endがコネクションを閉じるメソッドのため
これが必須です。これを省くとサーバが動作する限りコネクション数が増えるので注意です。

2014年10月5日日曜日

CentOS 6.5でPHP5.3→PHP 5.4にアップグレードする

CakePHP3系を利用したいと思いPHPを5.3からアップグレード

とりあえずCentOS 6.5系でPHP5.3のインストール手順
yum install php php-mbstring php-mbstring php-pear

PHP5.3からのアップレード手順
# yum install yum-fastestmirror
# yum upgrade
# yum update
# rpm –import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
# cd /etc/yum.repos.d
# wget http://rpms.famillecollet.com/remi-enterprise.repo
# yum --enablerepo=remi update
# /etc/init.d/httpd restart

単純ですが、重要な手順です。

2014年7月20日日曜日

AWSの勉強開始

やっとこさAWSの勉強を開始するようにと思い
とりあえず本を探したらおあつらえ向きの


7/16日発売でAWSのエバンジェリストが書かれている本だったので即買い
AWSの基本的なアカウントの作り方、サーバの構築に必要な内容がまとまっていたので
これから始める人向けの本です。

≪CHAPTER 1≫システム構築をインフラから始めるには
≪CHAPTER 2≫ネットワークを構築する
≪CHAPTER 3≫サーバーを構築する
≪CHAPTER 4≫Web サーバーソフトをインストールする
≪CHAPTER 5≫ HTTP の動きを確認する
≪CHAPTER 6≫プライベートサブネットを構築する
≪CHAPTER 7≫ NAT サーバーを構築する
≪CHAPTER 8≫DB を用いたブログシステムの構築
≪CHAPTER 9≫TCP/IP による通信の仕組みを理解する
≪Appendix A≫パケットキャプチャで通信をのぞいてみる
≪Appendix B≫ネットワークの管理・運用とトラブルシューティング

これらの構成でなっているのですがネットワークを構築する部分に
IPのセグメント分けがありこちらがためになります。

よくわるWordpressのインストール等もあるのでAWSをこれからの人にオススメです

2014年7月13日日曜日

TitaniumでNow Loadingを使ったHTTPClientを実装

スマホアプリを作成する際によくある話ですが
Web通信部分(Ti.Network.createHTTPClient)を利用すると
非同期通信で画面の制御が面倒なことがあるので
これを回避する1つの方法No Loading...を実装してみました。

利用するのは、ActivityIndicatorと呼ばれるのものでこれを利用しバックグラウンドでは
Web通信を画面では、Now Loadingを表示します。

index.js
=========
function doClick(e) {
    var loading = Alloy.createController('loading',{
    handler : function(client, e){
    Ti.API.info("Received text: " + client.responseText);
         alert('success');
    }
    });
    loading.getView().open();
}
$.index.open();
=========

index.tss
=========
".container": {
backgroundColor:"white"
},
"Label": {
top: 30,
width: Ti.UI.SIZE,
height: Ti.UI.SIZE,
color: "#000"
}
=========

index.xml
=========
<Alloy>
    <Window class="container">
        <Label id="label" onClick="doClick">Hello, World</Label>
    </Window>
</Alloy>
=========


loading.js
=========
var args = arguments[0] || {};
function showIndicator(e){
    $.activityIndicator.show();
}
var url = "http://www.google.co.jp/";
var client = Ti.Network.createHTTPClient({
onload : function(e) {
    args.handler(this, e);
    $.loading.close();
    $.activityIndicator.hide();
},
onerror : function(e) {
    Ti.API.debug(e.error);
    alert('error');
    $.loading.close();
            $.activityIndicator.hide();
        },
    timeout : 5000
});
client.open("GET", url);
client.send();
=========

loading.tss
=========
".container" : {
    backgroundColor: '#999',
    opacity: 0.6,
    height:Ti.UI.FILL,
    width:Ti.UI.FILL
}
=========

loading.xml
=========
<Alloy>
    <Window class="container" onOpen="showIndicator">
        <ActivityIndicator id="activityIndicator" message="Loading..."/>
    </Window>
</Alloy>
=========

ソースはこのようになっています。
loading自体はモジュールみたいな形で利用します。
順番としては
loadingをopen->load画面を表示->HTTPリクエスト->onload処理->画面を閉じる
が流れです。

意外と簡単にでき応用も利くのでおためあれ

gitに今回作った内容を公開いたしました。
https://github.com/genyasan/ti/tree/master/loading

2014年7月6日日曜日

CentOS 6.5にgit 1.9インストール手順

今更ながらgitを行うとおもいCentOS 6.5に2014/07/06現在最新のgit 1.9.0をインストールする手順です.
使い方は追々・・・
yumで一発で終わるかと思ったらなかったのでソースから最新版をビルド

su -
$ yum install -y zlib-devel perl-devel gettext gcc curl-devel
$ wget https://git-core.googlecode.com/files/git-1.9.0.tar.gz
$ tar xfvz git-1.9.0.tar.gz
$ cd git-1.9.0
$ ./configure
$ make
$ make install
$ git --version
git version 1.9.0
$ cd ..
$ rm -rf git-1.9.0
$ rm git-1.9.0.tar.gz 

手順はシンプルなので後は使いこなすだけ
そこそこ性能がないとmakeは数分かかりました。

Titanium画面遷移のしかた

Tiを利用した画面遷移の基礎的なものを作成してみました。
TiのWindowを利用すると画面遷移が行え親から子を作るようなイメージになります。
イメージをまとめるため簡素なものを作成してみました。

ちょこっとメモをかねて作成




index index2 index3
xml
<Alloy>
  <Window class="container">
    <Label text="index2を開く" onClick="openIndex2">
  </Window>

</Alloy>
<Alloy>
  <Window class="container">
    <Label text="index2を閉じる" onClick="closeIndex2" />
    <Label text="index3を開く" onClick="openIndex3" />
  </Window>

</Alloy>
<Alloy>
  <Window class="container">
    <Label id="param1" top="30" />
    <Label text="argsをチェックする"  top="30" onClick="argsCheck" />
    <Label text="index3を閉じる" onClick="closeIndex3" />
    <Label text="index2と3を閉じる" onClick="closeIndex2and3" />
  </Window>

</Alloy>
tss
".container" : {
  backgroundColor:'#0ff',
  top: 30,
  layout: 'vertical',
}
".container" : {
  backgroundColor:'#f00',
  top: 30,
  layout: 'vertical',
}
".container" : {
  backgroundColor:'#ff0',
  top: 30,
  layout: 'vertical',
}
js
function openIndex2() {
  var index2 = Alloy.createController('index2').getView();
  index2.open();
}

$.index.open();
var args = arguments[0] || {};

function closeIndex2() {
  $.index2.close();
}

function openIndex3() {
  var index3 = Alloy.createController('index3',{window : $.index2, text : "index2の中身を入れることができる."}).getView(); 
  index3.open();
}
var args = arguments[0] || {};

function argsCheck() {
  alert("このメソッドでもargsを参照できる:" + args.text)
}
function closeIndex3() {
  $.index3.close();
}
function closeIndex2and3() {
  $.index3.close();
  args.window.close();
}

// 引数を受け取る.
$.param1.text = args.text;


少し書き方を横着しましたgitとかに上げれればよいのですが現在勉強中。

こちらのソースを実行すると画像のようになるのですが、indexはそのままindex2をopenしているだけです。
Alloyから生成するためには「Alloy.createController」こちらを利用します。
さらに注意点としてopenするときはviewである必要があるので「getView()」メソッドが必要です。

index2のところで、自分をcloseする際には「$.index2.close();」と非常にシンプルになります。
ここはおまじないでよい気がしてきました。

openIndex3の点が面白いと思えるところです。
Alloy.createControllerをする際に引数を渡すことができます。
この引数がindex3のargsに格納され利用できるのですが。

index3内の「$.param1.text = args.text;」これは理解が行いやすいのですが。
あえてalertとcloseIndex2and3をつけた部分です。

clickイベントを実行した際にもargsが生成した際に利用したインスタンスが利用可能な点です。
これにより、alertで前のwindowであるindex2のデータを見ることができます。

closeIndex2and3についても、自信と、index2を同時にcloseすることができるのです。
基本的な点かもしれないですが意外と知らないなと思いフムフムなっとく

現状ものを作るよりも、知る方が多いので苦労します。