文系seの備忘録

Excelの改行でひたすらスペースを打っていた機械音痴の文系seが日々の備忘録を綴る。

postgreSQLを使ってみよう

postgreSQLを使ってみようの巻。


postgreSQLとは?
- データベース管理システムの1つ。
- タダで使える。
- ネットに情報が沢山あるので勉強するのにいい
- SQL文法が充実

※ セットアップは省略




1.サービスの起動
# service postgresql start


2.ユーザの変更
postgreSQLのDBスーパーユーザであるpostgresユーザで操作する必要があるため。
# su - postgres


3.ユーザーの作成
※ スーパーユーザー以外にもDBを作成できるユーザーを作成する
-bash-3.1$ createuser testuser1
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n


4.DB作成
4-1.一度「su- postgres」を終わってrootに戻るためexitコマンド実行
-bash-3.1$ exit
[root @server1 ~]# su - testuser1
Linux 上のアカウントと PostgreSQL のアカウントが一致しないとエラーになるため

4-2.作成したユーザーでログインし直してDB作成
[testuser1 @server1 ~]$ createdb testdb1
CREATE DATABASE

4-3.作成したDBの確認
[testuser1 @server1 ~]$ psql -l


5.DBへの接続
[testuser1 @server1 ~]$ psql testdb1


6.テーブルの作成
6-1.作成前に現状のテーブル一覧を確認しておく
# \dt
リレーションがありません。 ←まだデーブルがないのでこう表示される
※ 「メタコマンド」といい、psglでDB接続後に実行可能な特有のコマンド。
6-2.テーブル作成
testdb1=> create table tbl1 (
testdb1(> id int primary key,
testdb1(> name varchar,
testdb1(> address varchar,
testdb1(> update timestamp
testdb1(> );
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "tbl1_pkey" for table "tbl1"
CREATE TABLE
6-3.作成したテーブルの確認
# \dt

7.データの挿入
csvデータのインポート
- 全てのカラムをインポートする場合
COPY tbl1 FROM '/home/service/hoge.csv' WITH CSV
※ WITH CSV: CSVファイルと認識してカンマ区切りのデータとして扱ってくれる
その他、「HEADER : 1行目を無視する」などoptionがあるので適宜追加して実行
- 一部のカラムをインポートする場合
COPY tbl1(id,title,update) FROM '/home/service/hoge.csv' WITH CSV
・行の挿入
INSERT INTO tbl1 VALUES (1, 'Cheese', 9.99);
※ 一度に大量のデータを挿入する場合はcopyコマンドを使うのが効率的。
本作業ではダミーデータをロードするためcopyを使用する。


8.ダン
$ pg_dump データベース名 > バックアップファイル名
pg_dumpの実体がある場所をフルパスで指定しないとpostgreとpg_dumpのバージョンが違うというエラーが出る
確かバージョン差異を無視するオプションあったはず。それをつければエラーでないかも


9.リストア
$ psql データベース名 < バックアップファイル名




【参考】
CentOSPostgreSQL を使ってみよう!(2)
http://lets.postgresql.jp/documents/tutorial/centos/2
postgreSQL基本操作
http://www.marronkun.net/linux/other/database_000014.html
PostgreSQL 9.3.2文書 COPY
https://www.postgresql.jp/document/9.3/html/sql-copy.html
・PostgresSQLのbackup, restore方法まとめ
http://qiita.com/rice_american/items/ceae28dad13c3977e3a8

jenkinsってなんだろう

  • jenkinsとは?


windowsのタスクマネージャーのweb版的なもの。
タスクマネージャーは自分のパソコンのみに設定がされる(20時になったら強制シャットダウン、とか)けど
jenkinsはweb上で複数人が設定可能。
一度設定すれば継続的に動いてくれる。


コマンドプロンプトからビルドやテストを実行しているのを、jenkinsに登録しておけば
決まった時間に自動で実行してくれる。



実行した結果の確認はjenkinsのページ上からは勿論、メールで飛ばすことも可能。
バグを埋め込んだ人にのみメールを飛ばす設定とかも出来る様子。



とりあえず今回は「jenkinsとは何なのか!?」というところまで。

自分はjenkinsに関しては新人時代にわけも分からぬまま使って、執事のオジサンが牙をむいた悪魔に変貌した記憶があります。。。


こういう本ってただ読んでるだけじゃ味気ないですね。実際に動かしてみたくなりました。

次は使い方についてまとめたいと思います。

最近買った本 Jenkins実践入門、リーダブルコード

・Jenkiins実践入門
~ビルド・テスト・デプロイを自動化する技術~

Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

Jenkinsを触る機会があるけど使い方を詳しく知らなかったので読んでみようと思いました。




・リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

こちらは先輩がおすすめと言っていたので。。
あまりコードレビューって受けたことないので自分のコードがイケてるのかどうなのか分からないんですよね。
タイトルのとおり、読みやすいコードっていうのを再度意識してみたいと思います。

もっと勉強初心者に優しいネット社会になればなーと思った

2chにて、19歳の少年が自動販売機のコードを組んでエラーになったので助けを求めていた。

blog.livedoor.jp

色々とツッコミポイントはあるかもしれないけど、専門学校入りたてでここまで書けるのはすごいな~って思う。

しかも、自分で「自販機のプログラム書いてみようかな!」って思って書いてみたわけだし、そのやる気が素晴らしい。


私が19歳のときなんていかに効率良く単位を取るか考えてたし、
ましてやプログラミングなんぞ全く知らなかった。



みんな誰だって最初は分からないことだらけなのに、質問したことにたいしてろくに答えずに「クソコード!」「文法すらまともに使えてないし・・」って否定ばかりして何がダメなのか教えてあげなかったら、その人のやる気や自信をなくすばかりでなんの解決にもならないよね。

プログラミング以外にも、知らないことに対してもっと気軽に訊けて、ここはこーすりゃいいんだよ!って回答がかえってくるような、初心者に優しいネット社会になればいいなって思いました。

プログラミング系資格を勉強することのメリット

oracle java silverの資格勉強は色んなところで生かされてます。
その直前まではローカル変数とグローバル変数すら分からない状態だったし、オブジェクト指向って何?クラスって何?
インスタンス化って何?みたいな致命的な状態でしたがそのへんの不明点は大体解消されました。


他の言語をやることになっても、javaではこう書くけどswiftだとどう書くんだろ?っていう風に調べられたり、
オブジェクト指向言語の考え方を流用できたりと、様々なメリットがありました。


なかなか資格の勉強って役に立つ実感が沸きづらいですが、すぐに実感でき、その後も「取って良かったな~」と思える資格でした。
javaの資格に限らずプログラミング系の資格は全般的に実感しやすいのかもしれません。


とはいえ、仕事でバリバリ使っているわけではないため忘れている部分もあるかと思います。
リハビリしつつ、goldの勉強をしていきたいです。


これを参考に、あとはプログラム書いて楽しみながらやっていきたいと思います。

オラクル認定資格教科書 Javaプログラマ Gold SE 7 (EXAMPRESS)

オラクル認定資格教科書 Javaプログラマ Gold SE 7 (EXAMPRESS)

(てかこれ2013年以降新版出てないのね)


本書の内容は以下の通り。

Javaクラス設計
ポリモフィズム
・ネストクラス
オブジェクト指向の設計
Java API
・コレクションとジェネリック
・例外処理
・入出力
・NIO.2
JDBC


面白そうなとこから責めてこうかな。
前にもちょっとかじったファイルIOのnio2とかやりたいな。



oracle系の資格は情報処理と違って随時受けられるから、自分でちゃんとスケジューリングしないとグダグダ遊んで終わりになっちゃいます;;
プログラミングが好きで純粋にソース書ければ良いっていうならいいけれど、資格取得をゴールとするならある程度の計画を立てないとまずいですね。。。



とりあえずは一通りさらってみよー。

改めて、Rubyとは何かをおさらいする

本日は5/6(金)。



社内は平和です。
人はあまりいませんが、何故か自分の周りはけっこう密集しています。

昼休み、やることないのでブログ書いてみます。



改めて、Rubyとは何かをおさらいします。




Rubyとは?
オブジェクト指向言語
javaではintやbooleanなど具体的な値を格納する基本データ型と参照型とに分かれるが、
Rubyは型定義がなく全て参照型となる。

インタプリター言語
javaみたいに事前コンパイル不要。



Rubyの特徴

・他のオブジェクト指向言語よりコードが少ない(気がする)


* java
クラス、mainメソッドが必要。


java hellowolrd

* ruby


ruby helloworld


- javaはクラス内でmainメソッドが実行されてるけど、rubyはクラス自体書いてない。
⇒ 実行時のクラス作成は不要(ref.http://www.rubylife.jp/ini/method/index1.html
- コマンドでrbファイル叩くから、最初に実行するとこはどこだ~?ってならないのでmainメソッド不要

・変数
- 動的型付け
変数の型がなく、どんな型も変数に入れられる。
- 変数の種類
変数の前にprivateとかつけるんじゃなくて、変数名で判断できるような名前にする
* ローカル変数
小文字アルファベット or _(アンダースコア)ではじめる
* グローバル変数
変数名の前に $ をつける
* クラス変数
変数名の前に @@ をつける
* インスタンス変数
変数名の前に @ をつける

 ・テーブル

  http://qiita.com/fakestarbaby/items/2e832be8aa5bc5e93e69#2-6

  * Hash.new で要素が空のハッシュオブジェクト作成

  * key, valueの記述は「=>」を使うことが推奨されている

    ex. { :id => abc }

 ・:id のようにコロンがついているもの

  任意の文字列と一対一に対応するオブジェクト

  http://docs.ruby-lang.org/ja/2.0.0/class/Symbol.html

  文字列だと別のオブジェクトになるけど、

   a = 'cat'

   b = 'cat'

  こう書くと同じオブジェクトを参照するようになる

   c = :cat

   d = :cat

  ・型変換

    - 文字列 ⇒ 数字 : num = "1".to_i

    - 数字⇒ 文字列 : str = 1.to_s


自分が使ってみた感想として、rubyはとっつきやすいオブジェクト指向言語って印象を受けました。

かなり素人目ですが、javaはクラスつくってコンパイルしてなんたらかんたら・・・みたいな色々裏の仕組みが複雑なのに対し、rubyはテキストファイルで書いたものがそのまんまコマンドで実行できるという単純な仕組みなので、オブジェクト指向を内部構造からしっかり把握しながら学びたい初心者さんには適してるんじゃないかと思いました。
なので、自分ももしかしたらjavaよりrubyのほうが根本的な理解を深めるには合っているのではないか?と思ったり・・。

ただ、rubyに慣れてしまうとカッコやセミコロンで記載するcやjavaが違和感に感じたり、微妙な文法の差に戸惑ったりすることもあるかもしれません。
でもそれはすぐ解決することだと思うので、総じて見ればrubyはプログラミングの入門言語として良い言語だと感じました。

rubyで自動化

以下ファイルをspecディレクトリ以下に置く。

・featureファイル (xxxxxx.feature)

  • シナリオ(テストケース)を記述

・stepファイル (xxxxxx_steps.rb)

  • シナリオの中身を実装

※ stepファイルの分割
tepが大きくなったときなどに分割する際は、"steps_for:~"で分割する

ex.

steps

gist3a141812a6258d30c64859e1863ac926


feature

gist0c9672b4e8047e00b1860a728a6c8b62





実行

bundle exec rspec spec/xxx.feature
(Gemfileで指定された環境をexecute(実行)して、rspecというテストのフレームワークで xxx.featureファイルを動かす・・ってかんじ(で合ってる?))
というか、bundler(gemfileの管理ツール)をインストールすると、bundle execを省略するとエラーになると思います。