気ままなつぶやき

おべんきょしたこととか

【svn】バックアップをとりましょうの巻

(ΦωΦ)にゃ♪

今日はネコの日だって(ΦωΦ)

さてさて。svnのお話。

最近、とあるsvnを引き取ってくれといわれたので、引き取ったら、
バックアップが1年以上動いていなかった.....orz

てか、ディレクトリ毎まんまrsyncsしようとしてたらしく、それがこけてたよ|ωΦ)

svnにはsvnsyncという便利なコマンドがあります。
svnのミラーを作る感じ。
仮に本体が使えなくなっても、ミラーをとっておくとそっからデータを参照できたり、
最終的には本体に昇格させることも可能です

移行のときにも使えるよ(ΦωΦ)♪

前提

今回は、svnの本体はすでに存在してまふ。

svnのバージョンはこんな感じ。古め

$svn --version
svn, version 1.6.11 (r934486)

仮に、バックアップを取りたいリポジトリの名前をnekoとして
手順を説明していきます

バックアップ先のサーバさんの準備

バックアップ先のサーバさんにリポを作る

$cd /var/svn/repos
$/usr/bin/svnadmin create  neko

pre-revprop-changeを作る

svnsynvはフックの仕組みで動くので、リビジョンの変更可能にするために設定をいれます

cd neko/hooks
vim pre-revprop-change

pre-revprop-changeの中身はこれだけでOK。

#!/bin/bash
exit 0

フックスクリプトに実行権限を付与

$chmod +x pre-revprop-change

本体svnのuuidとバックアップ先のuuidをそろえる

#セット
$/usr/bin/svnadmin setuuid /var/svn/repos/neko ${本体svnのuuid}
#変更されていることを確認(本体のsvnのuuid調べるときもこのコマンド)
$/usr/bin/svnlook uuid neko

svn本体からsvnsyncの設定

本体に、ミラーさんはこのこだよって教える

※本体サーバ上で実行する

/usr/bin/svnsync init svn+ssh://${バックアップ先のIP}/var/svn/repos/neko svn+ssh://${本体svnのIP}/var/svn/repos/neko

今回はバックアップの方はhttpたててないので、svn+sshにしたよ

svnsync実行

$/usr/bin/svnsync sync svn+ssh://${バックアップ先のIP}/var/svn/repos/neko

動作確認

ちゃんとsyncできた?

最新のリビジョン番号みてみる

$/usr/bin/svnlook youngest neko

バックアップ先からチェックアウトできる?

適当なところからチェックアウトしてみて(ΦωΦ)♪

$svn checkout svn+ssh://${バックアップ先のIP}/var/svn/repos/neko
#なんとなくからじゃないよねーって確認した
$ ls 

ちなみに、下準備でsetuuidをちゃんとしてないと、
本体から、バックアップに切り替えたときに

svn: Repository UUID 'fecb33dc-96d4-4d15-a2d6-66e738cd1f83' doesn't match expected UUID '7c6c9d4a-4ae7-452e-9002-9b899cebdb0f'

みたいなエラーがでてうっとおしいよ

そのほか

全然本質じゃないけど、大きなリポをバックアップ取るときは
バックグラウンドで流すのを忘れずに。。

$nohup /usr/bin/svnsync sync svn+ssh://${バックアップ先のIP}/var/svn/repos/neko &

バックアップ先で様子見など。。

$while true; do svnlook youngest repo; sleep 5; done 

もっといい方法があるかもしれないけど、ひとまず。。

追記

同期先リポジトリのロックを取得できませんでした。現在 'hostname:378ba4cd-6fc1-48fa-bb22-33e092a7d8bb' が所持しています

途中でエラーになるとたまにでる

$ svn propdel svn:sync-lock --revprop -r 0 svn+ssh://${バックアップ先のIP}/data/svn/repos/neko
属性 'svn:sync-lock' をリポジトリのリビジョン 0 から削除しました

svnsync: Error while replaying commit

なんか、ファイル名に空白が入っていたよ(つд⊂)エーン
空白いやよー。

スキップオプションとかないので、こけたリビジョンのsvn diffとって

$svn diff -r 146:147 svn+ssh://${本体のIP}/var/svn/repos/neko

その変更をシンク先にコミット|o゚д゚)

なんかsync先のリビジョン番号をみているみたいなので、
うまくスキップできました。。。。

力技。。もっといい方法があるやも

【mac】texいれたお

珍しく資料を作る需要ができた。
ちょっとしたテキスト資料であれば、最近気に入って使っているTreeを使うんだけど
画像とか入れたり、ある程度きちんとした資料を作りたいので、
texを使う事にした。

なんでtex?

昔、大学で論文書くのに使ってたりして
pLatexがもともと好きだからっていう。。

HomeBrewでインストールできるのかね・・・?

HomeBrewとかでインストールできないかなーと探してみた。

$brew search tex
asciitex	chktex		latex-mk	rtf2latex2e	texwrapper
auctex		gettext		latex2html	texi2html	vilistextum
bibtex2html	html2text	latex2rtf	texinfo
blahtexml	itex2mml	libgtextutils	texmacs

If you meant `tex' precisely:

Installing TeX from source is weird and gross, requires a lot of patches,
and only builds 32-bit (and thus can't use Homebrew deps on Snow Leopard.)

We recommend using a MacTeX distribution: http://www.tug.org/mactex/

なんかMacTexを薦めてきた。。
MacTex...なんだろ。。pLatex使いたいんだけど。。
まあいいか。。。

MacTexいれる

なんかここに色々情報がのっていた
Mac - TeX Wiki

MacTexのダウンロード

公式サイトからパッケージをダウンロードしてくる
MacTeX - TeX Users Group

こっからシャキシャキ「続ける」ボタンの連打で行けるかと思ったんだけど
f:id:pnsk:20130211000533p:plain:w300

なんか4Gくらいディスク容量が必要らしい。
え。。そんなに何入れてくるの

ひどまず「続ける」をポチットする
f:id:pnsk:20130211001501p:plain:w300

ここで「カスタム」選択して、不要なインストールをやめよう
f:id:pnsk:20130211001652p:plain:w300


なんか軒並みダウンロードしそうなのを
f:id:pnsk:20130211001943p:plain:w300

2つにしぼった
f:id:pnsk:20130211002007p:plain:w250
http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?Mac#teb97a16
に説明が載ってるけど

TeXLive-2012:TeXLive本体
GUI-Applications:アプリケーションフォルダの中にTexフォルダができて
便利なツールがたくさん入るらしい。

これでインストール完了。

Texフォルダ

Texフォルダ確認。。
なんか色々入ってるけど、よくわからん
f:id:pnsk:20130211003418p:plain:w300

動作確認

tex編集用のフォルダを作成する

$ pwd
/Users/pnsk/Documents/workspace
$ mkdir tex
$ ls
direct		intellij	tex

texフォルダに移動して
ちょーシンプルなファイル(test.tex)を作成してコンパイルする

\documentclass[11pt,a4paper]{jsarticle}
\title{タイトル}
\author{pnsk}
\date{2013/02/11}
\begin{document}
\maketitle
\section{texいれてみた}
テスト
\end{document}

実行

$ platex test.tex
$ ls
test.aux	test.dvi	test.log	test.tex

dviファイルがみれない。。
dviファイルで更新した内容の表示確認したいんだけど。。

なんか面倒だからdviファイルをpdfに変換した

$dvipdfmx test.dvi 
test.dvi -> test.pdf
[1]
2146 bytes written

ひとまず。。

f:id:pnsk:20130211010732p:plain:w300

【読書】Webサービス開発 ~ [速習]リーンスタートアップ〜

本屋さんで目について思わず購入してしまった。

Webサービス開発徹底攻略 (WEB+DB PRESS plus)

一番初めの「[速習]リーンスタートアップ」の章のまとめ。
たかだか15ページくらいのものなんだけど。。

今考えているプロジェクトの進め方に模索しながら読んでみた。

リーンスタートアップ入門

リーンスタートアップの考え方の特徴は
「失敗」を前提にしていること

リーンスタートアップのプロセスは

  1. 仮説の設定
  2. 仮説の検証
  3. ピボッド(方向転換)

で構成される。

リーンスタートアップのプロセス


メモトピックだけまとめる。

「膨大なリソースを投入してロケットを打ち上げるのではなくて、
車の運転のように操作ごとにフィードバッグを得ながら
調整を行うプロセスを重視して運用せよ」

自分が現在立てている仮説に対して、本当にそれがあっているのかを確かめながら
「ユーザにとって」本当に価値のあるものを見つける事。

難しいけど、可能な限り考えていかなきゃなぁ・・・と。

自分の考える仮説が、どこまであっているのかを
振り返りながら、軌道修正しながら進めていかないと、
ただの独りよがりになっちゃうなぁ。


仮説の設定では、価値仮説と成長仮説をたてること。

価値仮説:なぜそれを使うか。

(ユーザ:  )は
(欲求:  )したいが、
(課題:  )ので、
(製品の特徴:  )に価値がある

成長仮説:なぜ利用者が増えるのか

(ユーザ:  )は、
(きっかけ:  )することで、
(需要の発生:  )するようになる

仮説の検証では、BMLループを行う

  1. Build
  2. Measure
  3. Learn

実用最小限のプロダクトを用意してBMLループを繰り返す

Build

できる限り最小限の労力と時間

Measure

コホート分析」

コホートはユーザグループのことをさす。
複数のユーザグループに施策の出し分けをして、比較評価する

「アクティブ比率に注目する」
 →プロダクトのパフォーマンスを純粋に評価するため

Learn

計測結果から、なぜその結果が得られたのかを考えること。

本文より
「どんなに多くのユーザの結果を拾っても、
やることだけが増えて余計に混乱し、次ぐに何をしたらよいかさえ
わからなくなります。」

この状況はよく目にするし、自分自身も陥らないように
とても注意を払う必要があるな。。

ピボット(方向転換)

成長がとまった、または鈍化した場合に考える

クックパッドの仮説

食品流通プロジェクトの例が書かれているのだが、

以下、メモ。

ピボット(方向転換)する基準について:
今やろうとしている施策の成功/失敗をあらかじめ定義しておく事

なるほど。これはやっておこう。



てか、すでにまとまっている内容を、さらに割愛するとか邪道かも。。(;゚ロ゚)ハッ

でも参考しにしお( • ̀ω•́ )✧

【読書】プロダクティブ・プログラマ 〜実践編〜

プロダクティブ・プログラマ -プログラマのための生産性向上術 (THEORY/IN/PRACTICE)


技法編の続き。

【読書】プロダクティブ・プログラマ 〜技法編〜 - 気ままなつぶやき

以前書いたの技法編と同じく
とても個人的な見解を織り交ぜて、気に入った部分だけをピックアップしますた

古代の哲学者の教え

複雑性には、2つある。

  • 本質的複雑性:本質的な複雑さ
  • 偶発的複雑性:本質に関係なく生まれてしまった複雑さ

この中から偶発的複雑性の原因を見つけだし、排除し、
本質的複雑性に対して対処する。

偶発的複雑性に時間をとられてはいけない

オッカムの剃刀

「ある事柄を説明するために、必要以上に多くの前提を仮定するべきではない」

デメテルの掟

情報隠蔽をしっかりしましょうということ。

ただし、「.を複数使うメソッド呼び出しをするな」という表現は誤解を招きやすい感。

過去の教訓

「昔のテクノロジーから得られる教訓にも目を向けてみる」
by 本書のNOTE

権威を疑う

開発チームをまたいだ標準化も、方法を誤ると
標準化されていないことよりも、悪となる可能性がある

「当たり前とされていることに疑問を持つ」

怒れるサル

「今までそうしてきたから」を理由にしてはいけない
「なぜそうしてきたか」を考えなければならない。

これは本当に大事なことだと思うなぁ(´・ω・`)

目的が達成できるのであれば、慣例に習う意味なんてないと個人的には思う。

流れるようなインターフェイス

DSLで主流になっているスタイル

JavaBeansの仕様から外れた例。

アンチオブジェクト

問題の「前景」と「背景」を入れ替えて、問題をより単純にして解決する

メタプログラミング

Javaのリフレクションは制限が強い
JVM上で動くGroovy。Javaより、簡潔にリフレクションのコードが記述できる
また、RubyJavaよりも遥かにメタプログラミングをサポートしている

ただし、使い方を誤ってはいけない

Composed MethodパターンとSLAP

Composed MethodパターンとTemplate Methodパターンの説明。

要は、処理をメソッドに分割しているのと継承。
再利用が可能になり、TDDも採用しやすくなる。

SLAP

Single Level of Abstraction Principle

「同じメソッドに属するコードの抽象化のレベルを統一する」

多言語プログラミング

これはスキップ

理想のツールを探す

理想のテキストエディアを求めて

「理想のエディタ」に必要な機能

不適切なツールを拒否する

適切なツールを選ぶのと同じくらい重要




こんな感じ(○゚ε゚○)

適切なツールを選択するって難しいな。
それがフリーのツールであれば、もう少し気楽に取り組めるんだけど
有償のものを導入したい場合は、失敗した時のリスクもあるから、色々検討が必要。

むずかしいね

【linux】ディスクパーティション

メモ。

今回はディスクパーティションを切ったよ。

なんで?

gitoriousサーバ構築するのにリポジトリに使う領域を分けたかった。
なんかIO使うものとかは、IO負荷分散のためにディスクパーティション切ったりするとよいのだって。

環境

$cat /etc/issue
CentOS release 6.2 (Final)

初期状態の確認

$df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/sda2              30G  1.6G   27G   6% /
tmpfs                 3.9G     0  3.9G   0% /dev/shm
/dev/sda1             504M   63M  416M  14% /boot

ディスクのパーティション情報の確認

#rootユーザで実行
$/sbin/fdisk -l
ディスク /dev/sda: 599.6 GB, 599550590976 バイト
ヘッド 255, セクタ 63, シリンダ 72891
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x0004a604

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1   *           1          66      524288   83  Linux
パーティション 1 は、シリンダ境界で終わっていません。
/dev/sda2              66        3982    31457280   83  Linux
/dev/sda3            3982        4243     2097152   82  Linux スワップ / Solaris

わいわいと情報がでてきたよ。
まあひとまず、/dev/sda3まであるってことがわかた
(ほとんど何もわかっておらんw)

ディスクパーティション追加

パーティションの追加をする

この一連の操作はLinuxコマンド集 - 【 fdisk 】 ハード・ディスクのパーティションを設定する:ITproがすごくわかりやすい。
細かいことはこれをみよう

$/sbin/fdisk /dev/sda

警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを
      強く推奨します。 and change display units to
         sectors (command 'u').

コマンド (m でヘルプ): n   #パーティションの新規追加
コマンドアクション
   e   拡張
   p   基本パーティション (1-4)
p
選択した領域 4
最初 シリンダ (4243-72891, 初期値 4243): 
初期値 4243 を使います
Last シリンダ, +シリンダ数 or +size{K,M,G} (4243-72891, 初期値 72891): 
初期値 72891 を使います

コマンド (m でヘルプ): p  #パーティション情報を表示して確認

ディスク /dev/sda: 599.6 GB, 599550590976 バイト
ヘッド 255, セクタ 63, シリンダ 72891
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x0004a604

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1   *           1          66      524288   83  Linux
パーティション 1 は、シリンダ境界で終わっていません。
/dev/sda2              66        3982    31457280   83  Linux
/dev/sda3            3982        4243     2097152   82  Linux スワップ / Solaris
/dev/sda4            4243       72891   551417213+  83  Linux

コマンド (m でヘルプ): w     #変更の保存
パーティションテーブルは変更されました!

設定が追加されているのを確認

$/sbin/fdisk -l

ディスク /dev/sda: 599.6 GB, 599550590976 バイト
ヘッド 255, セクタ 63, シリンダ 72891
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x0004a604

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1   *           1          66      524288   83  Linux
パーティション 1 は、シリンダ境界で終わっていません。
/dev/sda2              66        3982    31457280   83  Linux
/dev/sda3            3982        4243     2097152   82  Linux スワップ / Solaris
/dev/sda4            4243       72891   551417213+  83  Linux

sda4が増えているのが確認できたね。

サーバの再起動

設定を反映するためには再起動が必要。
サーバ再起動する前は、/dev/sda4がまだ存在しない

$/sbin/shutdown -r now

ディスクパーティションの追加が反映された

実際にできているのも確認

$ls /dev/sda4
/dev/sda4

ファイル・システムを構築する

$/sbin/mkfs.ext3 /dev/sda4

デバイスとファイルシステムのマウント

マウントするポイントとなるディレクトリを作成する

$mkdir data

fstabを変更してデバイスとマウントポイントの設定をする

$vim /etc/fstab

fstabには、下記のように項目を追加する

 /dev/sda4     /data   ext3   defaults        1 2

それぞれの意味は、前から

  1. マウントするブロックデバイス」
  2. マウントポイント
  3. ファイルシステム
  4. マウントオプション
  5. ファイルシステムをdumpする?(0:しない、1:する)
  6. システム起動時にfsckする?(0:しない、1以上をしている場合は「する」。あとはboot時の優先度になるので、1:ルートファイルシステムでチェック、2以降は:ルートファイルシステム以外を指定する)

fstabの編集を反映する

 $mount -a

確認

  $mount
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/sda4 on /data type ext3 (rw)

きたぜきたぜ

$df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/sda2              30G  1.6G   27G   6% /
tmpfs                 3.9G     0  3.9G   0% /dev/shm
/dev/sda1             504M   63M  416M  14% /boot
/dev/sda4             518G  198M  492G   1% /data

万歳三唱ヽ(`(∀`(´∀`)´∀)´)ノ

2012年を振り返り。

てか去年は違う方のブログに書いてた。
1年のふりかえり - pnskのブログ

2012年は本当に「試練の年」だったなぁ。

1月ー2月

某プラットフォームの認証システムを開発中。

開発メンバーは実質わたし1人。
同期がプロデューサーやディレクターとのやり取りをしてくれて
わたしは仕様変更や新しい仕様について実装していく感じ。
二人三脚だな。

もうただただ実装。
しんどいとか辛いとかそういった事に目を向けていては
リリースが間に合わないと思っていたので
ただただ必死w

得た事

大変な中でも、新しい技術を学んで時期であり、
エンジニアとしてはとても鍛えられた時期

新しいものに対する耐性が一気についた。

自分でも「あぁここ乗り越えたら大きく成長できるだろうな」と実感していた

3月-5月

1つの節目。

いつも背中を押してくれていた先輩社員の退社を知らされた3月の初め。
「まだ何も恩返ししてないのに」ただそれだけ思った。
急に知らされたのでショックすぎた。。

それから
一緒にやってきた同期と、もう一人いつも応援してくれた先輩も
会社を去っていった。

ごーん.....orzってかんじ。

開発に必死なのやら、ショックなのやらでもうどうしたらいいんだ状態で
入社してからこれほどにも押しつぶされそうになったことがなかったなぁ。

本当に背中を押してくれていた尊敬できる人たちが皆無になった時期ですた。

本当にただただ悲しさがこみ上げていた時期。

得た事

本当に精神的に鍛えられた時期。
これほど辛かった時期はないので、これ以上のことがへっちゃらになった

いいのかは謎w

6月-9月

孤独期

7月頃にずっと開発してきた認証システムのリリース。
本当にあれほどに「独り」を感じた事はなかったなぁw

6月に入社仕立てのメンバーと2人で認証システム。
てか実質ひとりであった。

毎日のようにVMWareが落ち、障害アラートがなり・・・。
毎日のように、仕様についてのお問い合わせとかがくる。

組織的にまだ新しく未熟な面もあったので、自分がもっていた常識が通じない。
アラートの反応スピードも、解決スピードもただただもどかしさを感じていた。

でもきっとわたしにスーパースキルがあれば乗り切れたのだろうな

9月にシステムを落ち着かせ、サーバを実機に変更し
認証チームに2人メンバーを追加してもらって、チームを去った。

10-12

開発標準化チームに専念

以前からやりたかった開発標準チームに専念する事になった
業務委託さん2人との3人体制。

本当に、自分がこれやろって思った事を進めていける場所。
でも、いくらさぼっても誰も文句を言われない場所。
5年目ですでに古株とか早いなぁ

今の環境に甘んじたら終わるなぁと思いながら
自分で自分の背中を押す感じ。

総括

お別れが多い1年でした。

その中で自分を、エンジニアとして1から磨き直さなきゃいけないなぁと
思った1年でした。

途中から模索しながら、過ごしていた気がする

そして最後の最後に、かわいい後輩が背中を押してくれた。

来年どうするか

自分次第でなんとかなるんじゃないの?

を都合良く使ってしまわない事。

もっとチャレンジしていこう。

【linux】mailコマンド

「すみませーん。
mailコマンドで送り主設定したいんですけどできないんですー」(○´ω`○)ゞ

っていうお問い合わせより。

いやいや、なんでまた・・・とか思ってたけど、
結論から言うと、CentOS6系では標準でmailコマンドが入っていないっぽい。

無知の知(・ω・。)

ちなみに5系の場合

$ cat /etc/issue
CentOS release 5.4 (Final)

φ( ゜゜)ノ

$/bin/mail -s test pnsk-mail@hogehoge.com -- -f test@test.mail

これで、
宛先がpnsk-mail@hogehoge.com
送り主がtest@test.mail

6系の場合

$ cat /etc/issue
CentOS release 6.2 (Final)
$ ls -l /bin/mail
lrwxrwxrwx 1 root root 5  119 19:14 2012 /bin/mail -> mailx

なんか、mailxコマンドになってる。
さっきのmailコマンドと同じ事をしようとするとこんな感じ↓

$/bin/mail -s "test" -r test@test.mail pnsk-mail@hogehoge.com

なんか宛先は必ず一番最後にもってこないとイケナイ。