狂ったお茶会のlog

後で起きる自分のためのメモ

レコード追加時にcreated_dateカラムに現在時刻が入って欲しい

前提

なんか適当に内容POSTするとmySQLのDBに書き込まれて表示されるwebページをつくった@php

やりたいこと

内容追加した時にcreated_dateカラムに現在時刻が入って欲しい

やったこと

変に悩んでしまったけど単純に $date = date('Y-m-d H:i:s');SQLで渡せば良かった。

別で、modified_dateカラムはtable作成時に

`modified_date` timestamp NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,

としてあるので、こっちは更新すれば勝手に書きかわる。
created_dateも単に作成時に default CURRENT_TIMESTAMP にすれば良かったのかもしれない。

Atomでインデントを一括で整形する

やりたいこと

Atomでインデントを一括整形したい。

結論

とりあえず、
Edit->Lines->Auto Indent で出来る。
atom-beautifyというパッケージもあるようだけど...

あと上記だとめんどくさいのでショートカットをつけたい。
ので、Atom->Open Your Keymap で keymap.cson を開いて以下のように設定を追加する。

# 自動インデント整形
'atom-text-editor':
  'ctrl-i': 'editor:auto-indent'

XCodeと同じにしたけど、かぶらなければ何のキーでも良いはず。

参考

最終的にはここを参考にしました。
【Atom】 インデントをショートカットキーに割り当てる(追記有:2016/03/07) – しきゆらの備忘録

マルチドメインの設定

やりたいこと

さくらVPSの自分のサーバにアクセスした時に表示されるファイルを置く場所は
/var/www/html/ なのだが、 /var/www/html/任意のフォルダ にしたい

やったこと

マルチドメインの設定をすればいいのかなということで

とりあえず任意の名前でフォルダを作成

mkdir /var/www/html/任意のフォルダ

設定ファイルを作成

vi /etc/httpd/conf.d/vhost.conf

設定ファイルの中身にこれを書く
※任意のドメインは適宜取得してあるものとする

NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /var/www/html/任意のフォルダ
ServerName 任意のドメイン
ServerAlias www.任意のドメイン
<Directory "/var/www/html/任意のフォルダ">
AllowOverride All
</Directory>
</VirtualHost>

httpd.confを再起動

/etc/rc.d/init.d/httpd restart

参考

だいたいここの通り
マルチドメインの設定 | 初心者でもわかる!さくらVPS | Sakura VPS 設定マニュアル

LAMP環境を作る

さくらVPSを借りた

ドメインの紐付けはなんかサイト上でごにょごにょやった

やること

apachemysqlphpのインストールをする

とりあえず、yumのupdateをする

# sudo yum update

yumでインストールすると全体的にverが古いものがインストールされるようだが、一旦

apache

apacheインストール
# sudo yum -y install httpd

バージョン確認する

# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Feb  9 2016 17:28:49

サーバの再起動時にapacheが自動で起動するようにする
# sudo chkconfig httpd on

自動起動設定確認

# chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

2〜5が「on」になっていれば自動起動の設定ができている とのことなのでok

Apacheの設定ファイル(httpd.conf)を編集する
とりあえずバックアップ
# sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf_20160227

vi で開いて編集
# sudo vi /etc/httpd/conf/httpd.conf

44行目 ServerTokensを「Prod」にする
78行目 KeepAliveを「On」にする
262行目 管理者のメールアドレスを編集(ServerAdmin アドレス)
331行目 Directoryのオプションで「Indexes」が有効になっているので、これにハイフン(-)をつけて無効化
536行目 ServerSignatureをOFFにする
それぞれ詳しくは参考URLへ

:wq で保存して終了

設定内容のテスト

# sudo apachectl configtest
Syntax OK

apache起動

# sudo service httpd start
Starting httpd:                                            [  OK  ]

http://(自分のサーバのIPアドレス) にアクセスしてapacheのページになれば、ok

MySQL

yumでインストール
sudo yum -y install mysql-server

ヴァージョン確認

# mysql --version
mysql  Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1

サーバ起動時に自動で起動するようにする
# sudo chkconfig mysqld on

Mysqlの設定ファイル(my.cnf)の編集するのでバックアップ
# sudo cp /etc/my.cnf /etc/my.cnf_20160227

編集する
# sudo vi /etc/my.cnf

以下あたりを追加

default-character-set=utf8
skip-character-set-client-handshake
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set=utf8

設定を保存したらMtSQLを起動
# sudo service mysqld start

Mysqlにログインするためのrootユーザーのパスワードを変更
X部分を適宜変える
# sudo mysqladmin -u root password 'XXXXXXX'

MySQLにログインしてみる # mysql -u root -p

PHP

インストール
# sudo yum install php-devel php-mbstring php-mysql php-gd php-mcrypt php-xml php-pear

ヴァージョン情報

# php -v
PHP 5.3.3 (cli) (built: Feb  9 2016 10:36:17)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

設定ファイルの編集
# sudo vi /etc/php.ini

以下あたりを修正
/検索したい語 で検索できる

error_log = /var/log/php_errors.log
date.timezone = “Asia/Tokyo”

リスタート
# service httpd restart

参考

さくらVPSサーバにLAMP環境(Apache,PHP,Mysql)を設定する | NEZU.log

WEBサーバーの設定 | 初心者でもわかる!さくらVPS | Sakura VPS 設定マニュアル

PHPの設定 | 初心者でもわかる!さくらVPS | Sakura VPS 設定マニュアル

さくらVPSにApache,PHP,MySqlを入れる | 離島に住みたいFEブログ

さくらVPSサーバーの初期設定とLAMP環境構築 - Qiita

gitでtagとtagの間の差分を出力する

やりたいこと

gitのプロジェクトで以下のような感じでtagがついてる時、tag1とtag2の差分を出してzipにしたい
f:id:dormouse666:20151102170106p:plain:w300
※SorceTreeで見た時

試したこと

上記のとおり、test1が古いtag、test2が新しいtag

(1) git archive --format=zip --prefix=root/ test1 `git diff --name-only test2 test1` -o archiveTest.zip
(2) git archive --format=zip --prefix=root/ test2 `git diff --name-only test1 test2` -o archiveTest2.zip
(3) git archive --format=zip --prefix=root/ test1 `git diff --name-only test1 test2` -o archiveTest3.zip

よくわかってない時の所感
(1)test1〜test2の間で失われたものが抽出された気がする
(2)test1〜test2の間で新しく追加されたものが抽出された気がする
(3)(1)と同じものが抽出された気がする

ググった
git diff の直前で指定してるコミットが抽出元のコミットだと理解
なので(1)と(2)の挙動の違いになる

git diff で指定してる2つのtagの順番に関しては、
git diff (基準) (変化後)
という扱いになる、が、上記のやり方だと、--name-only オプションがついていることによって、「差分があるファイルを(差分だけでなく)全部抽出する」ということになるので、(1)と(3)の違いが出ないということ

ちなみに--name-onlyオプションつけないと内容がそのまま出るのでarchiveに渡せなくて死ぬ

あと、tag1〜tag2間で削除されてるファイルとかあると以下みたいなエラーが出て死ぬ

fatal: pathspec 'hogehoge' did not match any files

--diff-filter=AMCR みたいにgit diffにオプションをつけるといいらしい(詳しくは参照URL)
それと、削除ファイルがある場合は、git diff (新しいコミット)(古いコミット)の順番でdiffしないと、オプションつけてても上と同じエラーが出て死ぬ

普通にdiff見る場合はgit diff (古いコミット)(新しいコミット)が見やすいが、上記の場合は差分があるファイルがわかればいいだけなので逆でもまあ結果的にはいい

最終的にやったこと

git archive --format=zip --prefix=root/ tag2 `git diff --name-only --diff-filter=AMCR tag2 tag1` -o archive.zip

蛇足

上記のやりかただと差分自体はわかんねーんだよなというのがあり
以下のように差分だけtxt出力もした

git diff --diff-filter=AMCRD tag1 tag2 >> ~/diff.txt

こっちの場合は、差分だけ出るので、git diff (古いコミット)(新しいコミット)の順番にする

2016/02/27 追記

commitコメントと変更ファイル情報を一緒に見たい時

git log --name-status --pretty=oneline tag1..tag2

--pretty=oneline つけると1行!楽!!!

上記をtxtに出力したい時

git log --name-status --pretty=oneline tag1..tag2 >> ~/diffLog_oneline.txt

-m をつけるとマージ情報も観れる

ブランチ間の特定のファイルのdiff

git diff tag1 tag2 ファイル名

参照

git tagで過去と現在のソースの差分をzipにまとめる | 株式会社アルベ | Arubeh Inc.
gitで差分ファイルを抽出してzipにまとめる方法 - HAM MEDIA MEMO
Gitを使って差分ファイルと差分情報を簡単に納品するコマンドのメモ - Qiita
git 差分を表示 (git diff) - saldnの物置

java事始め

しばらく前からjavaの勉強をはじめた

とりあえず投げつけてもらった入門書を読んだ

Amazon.co.jp: Java言語プログラミングレッスン 第3版(上): 結城 浩: 本

Amazon.co.jp: Java言語プログラミングレッスン 第3版(下): 結城 浩: 本

Eclipseをインストールした

最新が4.5.0だったのでそれ

eclipse入れる→古いJavaがないって言われるので入れる→Javaなんちゃらもないって言われる→( ゚ω ゚ )
みたいになった
これやったの1ヶ月前くらいなので記憶が定かではないが多分適当にいろいろ入れました
(eclipse最初に起動したらこれ↓に飛ばされたのでとりあえず入れた記憶)
(https://support.apple.com/kb/DL1572?locale=ja_JP)

Javaなんちゃらについて
JRE→実行環境
JDK→開発もできる
とのこと

蛇足だが
$ java -version で今どのverがPCに入ってるか見れる

こういう感じ

java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

EclipseTomcatを登録する

おおむね以下を参照しました
EclipseでTomcatをサーバーとして登録する - Qiita

記事内のTomcatのリンクは切れていたので

Apache Tomcat - Apache Tomcat 8 Downloads

↑の Binary Distributions の Core の zip を落としてきて設定した

Javaのプロジェクト作成する

Eclipseに慣れてないので手順を書いておく

eclipseのメニュー
File -> New -> Project -> Select a wizard のWeb -> Dynamic Web Project を選択
f:id:dormouse666:20151101162248p:plain:w300

Project name 入れて Next
f:id:dormouse666:20151101162310p:plain:w300

src を選択して Next
f:id:dormouse666:20151101162353p:plain:w300

Context root 入れて Finish
f:id:dormouse666:20151101162433p:plain:w300

するとBoardプロジェクトができたぞい
f:id:dormouse666:20151101162611p:plain:w300

プロジェクトの中にパッケージを追加していく

src 配下に追加していく Packageを選択
f:id:dormouse666:20151101162811p:plain:w300

パッケージの名前をつける
通例としてドメイン名みたいにする(以下ではcom.dormouse)とのこと(別に実在はしなくていい)
パッケージ名が違えば同じ名前のクラス名や処理でも置いておける
f:id:dormouse666:20151101162949p:plain:w300

com.dormouse を右クリックして
com.dormouse.actionというパッケージを作成
その中に Class を作っていく
f:id:dormouse666:20151101163349p:plain:w300 ↑IndexActionというクラスを作成した際の画面

クラス名は頭を大文字にするのが通例っぽい
あとGenerate comments にチェック入れておくと@authorとか勝手につけてくれる

java書く

IndexActionに書いたもの

/**
 * 
 */
package com.dormouse.action;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author dormouse666
 *
 */
public class IndexAction extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.getWriter().print("test"); //文字列を返す
    }
}

メモ
- crl+スペースで補完 処理内の何もないところでやるとその処理内で使えるやつ出してくれる、有能
- ctl+iでインデント揃えてくれる

WebContent のWEB-INF配下に web.xml を追加
f:id:dormouse666:20151101164508p:plain:w300

中身は投げつけてもらったのとよくわかってないのとで省略するが
以下みたいに作成したものを呼び出すときはこうしたいってのを書いておく

 <servlet>
        <servlet-name>IndexAction</servlet-name> <!-- なんでもいいけどクラス名にしておく -->
        <servlet-class>com.dormouse.action.IndexAction</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>IndexAction</servlet-name>
        <url-pattern>/java</url-pattern> <!-- このURLに来た時にIndexActionが呼ばれる -->
    </servlet-mapping>

tomcatに認識してもらう

eclipseのServersタブに、入れておいたTomcatがあるはずなので右クリックして上記のプロジェクトをaddする
これを
f:id:dormouse666:20151101165239p:plain:w300

こうじゃ
f:id:dormouse666:20151101165256p:plain:w300

こうなる
f:id:dormouse666:20151101165310p:plain:w300

そいでtomcatをリスタートさせて(このタイミングだと勝手にされてるかも)、
自分で web.xml に設定したURLを叩く
IndexActionに書いてたやつが表示される
f:id:dormouse666:20151101165358p:plain:w400

以上です

あと、tomcatのserver.xmlの下の方に、ContextのURLが書いてあるようなのでそこも見ておくとよいのかも
f:id:dormouse666:20151101165705p:plain:w300

PATHを通す

やったこと

PostgreSQLのソースをサーバにインストールする - 狂ったお茶会のlog
の微妙な続き

cd /usr/local/pgsql/bin   //場所移動
./pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/logfile start    //postgreSQL起動

上記記事でやってた↑の、場所移動して〜 ./つけてコマンド叩いて〜を簡単にするために
PATHを通しておく

rootになって以下の場所に移動

[interdev@dormouse666 ~]$ sudo su -
[root@dormouse666 ~]# cd /home/postgres

ディレクトリの中身見ると.bash_profileがいるので

[root@dormouse666 postgres]# ls -a
.  ..  .bash_history  .bash_logout  .bash_profile  .bashrc  .lesshst  .psql_history

PATHのとこに:/usr/local/pgsql/binを増やす
最初はPATH=$PATH:$HOME/binしかない。おしりに増やす

[root@dormouse666 postgres]# vi .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:/usr/local/pgsql/bin

export PATH

なお、.bashrcにPATH書いてもいいらしい。お好み?

そいで任意のユーザになって

[root@dormouse666 postgres]# su - postgres

最初に書いたコマンドを、場所移動も./つけるのもしないで叩く

[postgres@dormouse666 ~]$ pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/logfile start
server starting

動く
以上です

参考

desknet's NEO (Linux+PostgreSQL 9.2) インストールガイド|desknet's NEO

パスを追加したい〜.bashrc編〜 - ITmedia エンタープライズ