ポーカー、プログラミング、もぐ

ポーカーとプログラミングともぐもぐについてのブログ。

Node.js + PostgreSQLを使ってアプリケーションを作る(2) Hello World

目次

1, 環境構築

2, Hello World <- 今回

今回やること

必要なパッケージをnpmを使用してインストールし、Hello World (npmはNode.jsインストール時に同時にインストールされている)

手順

$ mkdir node-myapp && cd node-myapp
  • 2, npm initを実行 npm initは、対話的にNode.jsのプロジェクトの初期設定をし、package.jsonにその設定を書き込みます。 npmはNode.jsのパッケージ管理ツールで、package.jsonはその設定ファイルです。 別の環境でプロジェクトを開始するときも、package.jsonがあれば依存しているパッケージを簡単にインストールすることができます。 entry pointを変更していることに注意してください。
$ npm init
name: (node-myapp) 
version: (1.0.0) 0.0.1
description: sample node app
entry point: (index.js) app.js
test command: 
git repository: 
keywords: 
author: 
license: (ISC) 
About to write to /home/nodeuser/node-myapp/package.json:

{
  "name": "node-myapp",
  "version": "0.0.1",
  "description": "sample node app",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this ok? (yes) yes

これでpackage.jsonが作成されました。

  • 3, 必要なパッケージをインストール npmを使って必要なパッケージをインストールします。 このとき、--saveオプションや--save-devオプションを利用すると、インストールと同時にpackage.jsonにパッケージを追加してくれます。
$ npm install --save express
$ npm install --save-dev node-dev

今回はNode.jsのフレームワークであるExpressと、開発用のnode-devパッケージ(ファイルの変更を検知したら自動でプログラムを再起動してくれる)を追加しました。

var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

保存したら、

$ ./node_modules/node-dev/bin/node-dev app.js

でアプリケーションを実行します。

$ curl http://localhost:3000

とすると、「Hello World!」と表示されます。

  • 5, ホストマシンからアクセス ホストマシンからゲストマシン上のアプリケーションにアクセスするには、ポートフォワーディングの設定を行う必要があります。 Vagrantfileに
config.vm.network :forwarded_port, guest: 3000, host: 3000

を追加し、

vagrant reload

を実行します。 その後、ゲストマシン内でアプリケーションを実行してから、 http://127.0.0.1:3000/にアクセスして確認します。

ここまでのコードは

github.com

に公開してあります。

Node.js + PostgreSQLを使ってアプリケーションを作る(1) 環境構築

Node.jsを使ってデータベースアクセスを伴う簡単なアプリケーションを構築しましたので、その手順をまとめておきます。

前提

OS:Ubuntu 16.04

Node.js: v6.9.2(LTS)

フレームワークとしてExpressを使用

データベースにはPostgreSQLを使用

(Herokuにデプロイする予定なので)

今回やること

VirtualBox+VagrantBoxを利用してUbuntuを入れ、Node.jsをセットアップ

手順

  • 1, Ubuntu16.04環境を作成

ホストマシン上で

$ mkdir ubuntu && cd ubuntu
$ vagrant init bento/ubuntu-16.04

また後にプライベートネットワークを使うので、

$ vim Vagrantfile

としてVagrantfileを編集し、「config.vm.network "private_network", ip: "192.168.33.10"」の行をコメントアウトしておきます。 また、bento/ubuntu-16.04だとssh接続が出来ないことがあるようで (Timeout error during `vagrant up` · Issue #682 · chef/bento · GitHub) この場合、Vagrantfieに

config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
    vb.customize ["modifyvm", :id, "--cableconnected1", "on"]
end

を追加します。

編集が完了したら

$ vagrant up

で立ち上げます。(初回はBoxのダウンロードから行うので時間がかかります)

立ち上がったら

$ vagrant ssh

で接続します。 接続したら今後の作業を行うユーザー(nodeuser)を追加します。

$ sudo adduser nodeuser
$ sudo gpasswd -a nodeuser sudo
$ sudo su - nodeuser
  • 2, Node.jsをインストール

Node.jsのバージョン管理ツールであるnvm(https://github.com/creationix/nvm)を使ってNode.jsをインストールします。

$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
$ source ~/.bashrc 
$ nvm install v6.9.2

node -vでv6.9.2が表示されれば成功です。

3ヶ月ほど二人分の弁当を作って得られた知見

会社の周囲のランチが高いので普段は弁当を作って持って行っている。

3ヶ月ほど弁当を続けた結果、自分用のノウハウが溜まったので書き残しておく。

 

1, 工程

おかず作りはすべて週末で行っておく。

朝におかずを作るような時間の余裕はない。

朝は原則詰めるだけだ。

(おかずが切れたなどの非常時においてはこの限りでない)

 

2, おかずの種類

おかずは基本冷凍食品を使わずに作り置きにしている。

これは信条的なものではなく、単に昔食べた冷凍食品がマズくて今も使えないだけである。

おいしい冷凍食品を発見したら使うことも辞さない。

 

おかずの構成として、

主菜一品+副菜二〜三品としている。

主菜はたいてい肉・魚を持ってくるので、

副菜には野菜を使ったものを配置する。

また、おかずは

・緑のもの(ほうれん草、ブロッコリー、アスパラなど)

・黄、赤、オレンジのもの(人参、かぼちゃ、トマトなど)

の二種類があると彩りがよくなるので、副菜は

緑系+黄色系+ごはんの友系

をつくっておくとバランスがよい。

 

3, 調理にあたって

調理自体は週末、というか日曜の2時間ほどでやるので、

とにかく時間がかからないようにする。

レンジを使えるものはレンジで、

煮るものは先に煮ておいて、火にかけている間に次の材料を切るなどする。

また出汁を取るのも面倒なので、たいてい白だしを使う。

白だしはすばらしい。

 

4, 詰めるのにあたって

朝は時間が惜しいので、冷蔵庫から出したおかずを弁当箱にひたすら詰めるだけにする。

アルミのしきりなどもあまり使わない。あれは取るときに余計な分までひっついてきたりして面倒だ。

ただし、汁気が漏れるとよくない(何回かやらかした)ので、

汁気のあるおかずは詰める前に斜めにしたところにおいて、できるだけ汁を切っておく。

 

5, 一週間分の例

先週は下記のものをつくった。

・豚肉の揚げ焼き(細切れ肉を二〜三枚重ねて衣をつけ揚げ焼きにする。冷凍可能。主菜)

・牛肉のしぐれ煮(牛薄切り肉を細かく切って甘辛煮にする。主菜)

・菜の花のからし和え(茹でた菜の花を白だしでといた辛子であえる。副菜、緑系)

・アスパラのからし和え(茹でたアスパラを白だしでといた辛子であえる。副菜、緑系

・人参サラダ(細切りにした人参をレンジで火を通し、マスタードとはちみつと塩で適当に味をつける。副菜、黄色系)

・かぼちゃの煮物(切って煮る。副菜、黄色系)

・切り干し大根の煮物(戻して人参、油揚げと白だしで煮る。副菜、ごはんの友系)

基本的に切って火を通して味をつけるという単純な工程でできるものなので、それほど時間はかからずに済む。

また、主菜は一週間分より多めにつくっておいて、冷凍しておけば

あとで楽ができる。

コンピュータシステムの理論と実装読んでる

 

コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方

コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方

 

 基礎的なところからの知識が抜けてるなあと思うのでこういう感じの本を読んでいくことにした

現在4冊たまっている

 

章の終わりに練習問題があるので、その自分的な回答を書いていこうと思う

今はNandでXorとか作っている

アマゾンの商品を戦わせるWEBサービスをつくった

アマゾンバトラー

今のところシルバニアファミリーのおおきなおうちが激強。

 

やったこと

・Flaskでかいた

AmazonAPI使った

・Cloud9使ってみた

VPS借りた(Conoha。昔サービス券もらったけどどっかやっちゃった)

・Nginxはじめて使った

・Gunicornはじめて使った

ドメイン取得・設定

後でやったこと整理してかいとこ。

2016/03/01注:課金が切れたので確認できなくなっている。

最近のポーカーとか

・いろいろ忙しかったので三ヶ月ほどやっていなかった。

・時間をあけて久々にやってみたら、少しやりやすくなっていた

・レートは変わってないけど、相手の嫌そうなとこで打つとか

・逆に、負けてるときにはやめに引くとか

・やっと経験値が少し溜まってきたのかも

・でもライブは苦手だ

・ライブとオンラインが同じゲームってかんじがしない

・ライブはノイズが多い

・これも経験値を貯めるしか無いのか

SICPをやる記録 その4 1.2.1〜

反復と再帰を比較する際に、再帰プロセス (process) という概念と再帰手続 き (procedure) という概念を混同しないように気をつける必要があります。

 

 

f:id:asiagohan:20150721175040p:plain

再帰手続き(procedure)は、その定義が自分自身を参照するように表現されているものを言う。

構文的にそうなっているという事実を示している。

再帰プロセス(process)は、処理が「再帰的な」進行をするというだけで、構文を問題にはしていない。

 

一般的な言語では、再帰手続きを解釈すると、その再帰回数に比例してメモリ使用量が増える。

Schemeの実装ではそうはならない(末尾再帰)。