[Postgresql] ローカルマシンから外部サーバー(Ubuntu)のDBに接続する

外部のIPアドレスからDBにアクセスできるようにするため、PostgreSQLサーバーの環境設定ファイルとなっている 外部サーバーのetc/postgresql/9.3/main/postgresql.confのlisten_address= …の箇所を

listen_addresses = '*'
に書き換えます。

次にPostgreSQL サーバーへの接続制限、認証方法に関する設定を行うための設定ファイルである、 /etc/postgresql/9.3/main/pg_hba.confに下記を追加します。

host all all ローカルマシンのIPアドレス/24 trust
自分のIPアドレスはwhat is my ipでGoogle検索をすると取得できます。

ちなみにすべてのホストからの外部DBへのアクセスを許可する場合は

host    all         all         0.0.0.0/0 md5
とします。

coを使って非同期処理を綺麗に書く

coを使うとJavaScriptの非同期処理を同期的に書くことができてかなり読みやすいコードが書けるようになります。

例えば、非同期にファイルの中身を取得するプログラムでもかなりすっきりとした感じになります。

'use strict';
let co = require('co');
let fs = require('fs');

let readFile = (path) => {
	return new Promise((resolve,reject) => {
		fs.readFile(path,(err,data) => {
			if (err) return reject(err);
			let jsonData = JSON.parse(data);
			return resolve(jsonData);
		})
	})
};


co(function *(){
	//success
	let read = readFile('./data.json');
	let data = yield read;
	//dataにdata.jsonの中身が入っている
	console.log(data)

}).catch((err) => {
	//error
	console.log(err);

});

node-scheduleで指定した時刻にタスクを実行する

Node.jsで指定した時刻にタスクを実行させるにはnode-scheduleというライブラリが便利です。 時刻の指定はCron方式、Date形式で指定できるのが気に入っていてとても柔軟に扱えます。

使い方

5分ごとにタスクを実行

 let schedule = require('node-schedule');

 let j = schedule.scheduleJob(' */5 * * * *', function(){
  //Do something

 });

3時間後にタスクを実行

  let schedule = require('node-schedule');

 //fireDate: タスクを実行する時刻
  let fireDate = new Date();
  fireDate.setSeconds(fireDate.getSeconds() + 60 * 60 * 3);


  schedule.scheduleJob(fireDate, () => {
   //Do something
  });

[Swift] Background状態で通信を行う

Background状態とは

アプリを使用している状態はForegroundといいます。アプリを終了すると、アプリはSuspendedになります。
Suspendedではコードを実行することはできませんが、このSuspendedになる前にコードを実行できるのがBackground状態です。

iOS7から用意されたNSURLSessionを使うことでBackground状態で通信処理が行うことができます。 NSURLSessionを使ったプロセスはアプリとは異なるプロセスへ移され、アプリの状態に関係なく通信処理を行います。
なので、アプリが終了されたとしても一連の通信処理を完了させることができます。

Example

func backgroundRequest(){
  let bgID = “backgroundID”
  let configuration:NSURLSessionConfiguration =      NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier(bgID)

  let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)
  let urlStr = “…”
  let params: [String: AnyObject] = [
                        "user_id":"foo"
                    ]
  let url:NSURL = NSURL(string:urlStr)!
  let request = NSMutableURLRequest(URL: url)  request.HTTPMethod = “POST”
  request.addValue("application/json", forHTTPHeaderField:"Content-Type")


  do {
      try   request.HTTPBody = “POST”
      NSJSONSerialization.dataWithJSONObject(params,               
      options: NSJSONWritingOptions.PrettyPrinted)
      let task = session.downloadTaskWithRequest(request)
      task.resume()
 }catch{
 }
}

func URLSession(session: NSURLSession, didBecomeInvalidWithError error: NSError?) {
	//failed
        session.finishTasksAndInvalidate()
}
    
func URLSessionDidFinishEventsForBackgroundURLSession(session: NSURLSession) {
	//success
        session.finishTasksAndInvalidate()
}