tag:blogger.com,1999:blog-40382048143975883972024-03-14T15:32:40.509+09:00魚の肴勉強したこと、調べたことを記録するAnonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.comBlogger22125tag:blogger.com,1999:blog-4038204814397588397.post-28131900454820853392018-08-30T14:33:00.002+09:002018-08-30T14:34:29.653+09:00Swap しているプロセスをリスト化する<textarea class="markdown" disabled="disabled" style="height: 300px; margin: 2px; width: 500px;"># Swap しているプロセスをリスト化する(CentOS 7)
スワップサイズの多いプロセスを探したかったのでメモ。
## スワップサイズが多いプロセス
```shell
$ grep VmSwap /proc/*/status | sort -nk2 -r | head
```
## スワップサイズが多いプロセスのプロセス名とPID
```shell
$ grep VmSwap /proc/*/status | sort -nk2 -r | head | sed -e 's/.*proc\/\(.*\)\/.*/\1/g' | xargs -I% ps -p % -o comm= -o pid=
```
</textarea>
Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.comtag:blogger.com,1999:blog-4038204814397588397.post-17191925585988360822018-08-30T11:52:00.000+09:002018-08-30T12:02:16.531+09:00BloggerでMarkdown (jQueryなし)<textarea class="markdown" disabled="disabled" style="height: 300px; margin: 2px; width: 500px;">
# 久々の投稿
久々に投稿をしようとしたら表示が壊れていた。。。
jQuery 依存なところや、リソースのとり方がちょっと稚拙で恥ずかしいところもあったので久しぶりに修正した。
テーマのヘッダにこれを挿入。
今後はもう少しBlogを書いていこうかと思案中。
```javascript
[].forEach.call(document.getElementsByClassName("markdown"),function(x){
var mydiv = document.createElement("div");
mydiv.className = 'showdown';
var converter = new showdown.Converter(),
text = x.defaultValue,
html = converter.makeHtml(text);
mydiv.innerHTML = html;
x.parentNode.replaceChild(mydiv, x);
});
```
</textarea>
Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com0tag:blogger.com,1999:blog-4038204814397588397.post-69622642195954140072018-01-12T16:30:00.000+09:002018-08-30T11:02:59.485+09:00新年の抱負 2018<textarea class="markdown" disabled="disabled">
# 新年の抱負
転職して2年が過ぎ、職場のシステム環境もだいぶ改善した。
そろそろ自分の成長に時間を使おうと思う。
今年は新しい技術や基礎的な仕組みの理解を深めていきたい。
## やりたいこと
- TLS1.3 の理解
- Go, Rust の勉強
- Kubernetes の検証 (オンプレで)
- 職場のシステムにコンテナ導入
- 英語の勉強
</textarea>Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.comtag:blogger.com,1999:blog-4038204814397588397.post-81088798453502422682013-10-08T00:19:00.002+09:002018-08-30T11:03:31.495+09:00Python3 をはじめるときに読むと良さそうなサイト<textarea class="markdown" disabled="disabled" style="height: 300px; margin: 2px; width: 500px;">
# 目的
Python3をちゃんとやる!のに役立ちそうなサイト
## 情報収集
- ['Dive Into Python 3 日本語版'](http://diveintopython3-ja.rdy.jp/index.html)
>2011年のものだが、書籍の日本語訳がのっていてわかりやすい。3.3との違いには注意
- ['Porting to Python 3'](http://python3porting.com/bookindex.html)
>こちらも、モダンPythonがまとまっていていい。
- ['Python 3.3 tutorial'](http://docs.python.jp/3.3/tutorial/)
>これはざっと目をとおした方がよさそう
- ['What's New In Python 3.3をざっと眺める'](http://www.slideshare.net/likr/whats-new-in-python-33)
>これは、自分でやっておこう。
</textarea>Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com0tag:blogger.com,1999:blog-4038204814397588397.post-28382390782429531192013-03-07T22:51:00.003+09:002013-03-12T00:09:01.958+09:00[Python] setup.py でリリースに最低限必要そうなものを調べた<textarea class="markdown" disabled="disabled" style="height: 300px; margin: 2px; width: 500px;">
Python の setup.py がまだわかっていなかったので、最低限必要だとおもうパラメータを1つ1つ検証した。
練習用のプロジェクトを作成したので、今度からはこれをつかってパッケージ化するぞ。
PyPIにアップする設定ははいっていません。
次は buildout を自分で使えるようにまとめよう。
<br/><br/>
## 作ったプロジェクト
- https://github.com/tinyseraph/SetupPyExersise.git
<br/><br/>
## 参考になったサイト
- [ドキュメント](http://docs.python.org/2/install/index.html#inst-config-syntax "ドキュメント 2.7")
- [bucho](https://bitbucket.org/ae35/bucho "bucho")
<br/><br/>
## 依存するパッケージ
- distribute
<br/><br/>
## 必須ファイル
- setup.py
- ソースコード
<br/><br/>
## プロジェクトのディレクトリ構成(サンプル)
パッケージの構成。
<pre class="log">
.
├── MANIFEST.in << バンドルするファイルのリスト
├── README.txt
├── scripts << コマンド類
│ ├── commandfile
├── setup.py << 本体
└── src << ソースルート
├── packagename << Python のパッケージ
├── __init__.py
├── echo.py
├── echolist.py
├── hoge
│ ├── __init__.py
│ └── echo.py
├── moduledata
│ ├── goodbylist
│ │ └── goodbylist.txt
│ ├── hellolist.txt
└── tests
├── __init__.py
└── echo_test.py
</pre>
<br/><br/>
## setup.py
</textarea>
<script src="https://gist.github.com/tinyseraph/5108158.js"></script>Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com1日本, 東京都35.6894875 139.6917063999999321.7112815 119.03740939999993 49.6676935 160.34600339999992tag:blogger.com,1999:blog-4038204814397588397.post-22233364725948478842013-03-05T22:00:00.000+09:002013-03-05T22:00:08.194+09:00Scala Conference in Japan 2013 いってきました<textarea class="markdown" disabled="disabled" style="height: 300px; margin: 2px; width: 500px;">
Scalaのカンファレンスへ参加してきました。
これからはScalaだ!と思ってコソコソ勉強してましたが、中々業務で利用する機会もなくもう一歩踏み込んでいませんでした。今後、業務で使用出来るよう情報収集のために参加しました。
とても楽しかった。
- [カンファレンスのページ](http://scalaconf.jp/ "リンク")
- 参加費: 3000 yen
## Scalaconfで聞いたセッション
- 「Up up and Out: Scaling Software with Akka」
- 「芸者東京とScala~おみせやさんから脳トレクエストまでの軌跡~」
- 「Scala in Model-Driven development for Apparel Cloud Platform」
- 「Coding in Style」
- 「エレガントなデータベース操作を実現するScala ActiveRecordのすすめ」
- 「Effective Actors」
- 「オブジェクト指向から視る "Better Java" としての Scala」
- 「Play Framework - The modern web framework that packs a punch」
<br/><br/>
## 感想
<br/><br/>
### 全体的な感想
今回のカンファレンスの感想をまとめると
0. Scalaの機能をちゃんと理解しよう
0. Play2 が大人気
0. Scala界のアイドルは IntelliJ IDEA
#### 1.Scalaの機能をちゃんと理解しよう
- Scalaz を使ってみよう
- trait を使いこなせるようになろう
- Try を勉強しよう
- overwride abstract を勉強しよう
<br/><br/>
#### 2.Play2 が大人気
- ちょっとまえまで Lift しかなかったなかで Play2 が伸びている
- 日本語ドキュメントがあってたしかにとっつきやすい
<br/><br/>
#### 3.Scala界のアイドルは IntelliJ IDEA
- すばらしいはやさでPlay2でアプリケーションがつくられるデモをみた
- Play2もすごいけど、IntelliJ IDEA もすごいという話しもちきり
<br/><br/>
#### その他
- Scala 結構使われてる
- 一方、Scalaをビジネスで使う場合には開発環境が安定していないところがあるみたい。sbtが今後の課題かな?
<br/><br/>
<br/><br/>
### セッションごとの感想
<br/>
####「Up up and Out: Scaling Software with Akka」
- Akka よさそう。
- Typesafe社の作った分散並列型アプリケーションフレームワーク
- Erlang の機能をとりいれているし、Javaで並列処理ができる
- Let it crash も見ておこう -> http://letitcrash.com/
<br/><br/>
####「芸者東京とScala~おみせやさんから脳トレクエストまでの軌跡~」
- Liftでサービス提供しているらしい。
- 芸者東京さんはプログラミング言語が6つ以上できるプログラマを雇うらしい
- 新しくてよいものをどんどん取り入れようとする姿勢はいいなぁと思った。
<br/><br/>
####「Scala in Model-Driven development for Apparel Cloud Platform」
- アパレル系システムのフレームワークにモデル駆動開発をとりいれているらしい
- Scalaのモジュールにも精通されていらっしゃる
<br/><br/>
#### 「エレガントなデータベース操作を実現するScala ActiveRecordのすすめ」
- まだちゃんとScala自体つかっていないので、そういうものがあるのかくらいにしかわからなかった。。。
- ORMはこれからいろいろ使ってみよう。
<br/><br/>
####「Effective Actors」
- 使ったことないけど,以下の2つが記憶に残った
- リモートコードは軽量なのでたくさん作ってクラッシュしても影響範囲を小さくなるように設計する
- コードはなるべくシンプルに
- 障害発生時にコントロールするゾーンはデフォルトを使わずにちゃんとわける
<br/><br/>
####「オブジェクト指向から視る "Better Java" としての Scala」
- IDEは重いのでエディタを使う
- マシンスペックは高いのを使え
- sbt のバージョンには気をつけろ
<br/><br/>
#### Play Framework - The modern web framework that packs a punch」
- セッションのなかで、play で新規ウェブアプリケーションを生成してから最後はWebsocketまで動かくデモをみた
- Play すご!っていうのとデモ技術すごいっ!というのを感じた。
- デモで使ったIntelliJ IDEA がTwitter上で注目されていた
<br/><br/>
<br/><br/>
## 最後に
非常に有意義な時間でした、これからScalaの勉強をもっとして何か自分でもつくれたらいいなと思います。
運営の方々ありがとうございました。
</textarea>Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com0日本, 東京都35.6894875 139.6917063999999321.7112815 119.03740939999993 49.6676935 160.34600339999992tag:blogger.com,1999:blog-4038204814397588397.post-82215734829761448862013-03-05T20:38:00.001+09:002013-03-05T20:39:49.507+09:00SSLサーバ証明書の作成手順 (備忘録)<textarea class="markdown" disabled="disabled" style="height: 300px; margin: 2px; width: 500px;">
最近、身近で秘密鍵にまつわる不幸なできごとがあったので備忘録。
<br/> <br/>
## 1.サーバキー(秘密鍵)の作成
- パスフレーズなし
<pre class="brush: shell">
$ openssl genrsa -out ./ssl.key 2048
</pre>
<br/>
- パスフレーズあり
<pre class="brush: shell">
$ openssl genrsa -des3 -out ./ssl.key 2048
</pre>
<br/> <br/>
## 2.CSR 公開鍵の作成
<pre class="brush: shell">
$ openssl req -new -key ./ssl.key -out ./ssl.csr
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Inc.
Organizational Unit Name (eg, section) []:-
Common Name (eg, your name or your server's hostname) []:ccm-lulu.com
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []
</pre>
<br/> <br/>
## 3.秘密鍵と公開鍵が一致するか確認する
<pre class="brush: shell">
$ openssl rsa -noout -modulus -in ssl.key | openssl md5 |tee > key.md5
(stdin)= 298e0cxxxxxxxxxxxxxxxxxxxxxc3def
$
$ openssl req -noout -modulus -in ssl.csr | openssl md5 |tee > csr.md5
(stdin)= 298e0cxxxxxxxxxxxxxxxxxxxxxc3def
$ diff key.md5 csr.md5
</pre>
<br/> <br/>
## 4.認証局へ公開鍵を登録依頼
- 認証局
- https://www.cybertrust.ne.jp/
- https://www.verisign.co.jp/
- https://jp.globalsign.com/
- ssl.csr を認証局へ提出
<br/> <br/>
or
<br/>
- オレオレ認証局
<pre class="brush: shell">
openssl x509 -in ssl.csr -out ssl.crt -req -signkey ssl.key -days 3650
</pre>
<br/> <br/>
## 5.認証局からサーバ証明書を受け取る
- ssl.crt
<br/> <br/>
## 6.ssl を利用するサーバに鍵とサーバ証明書を配置する
- ssl.key
- ssl.crt
<br/> <br/>
</textarea>Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com0日本, 東京都35.6894875 139.6917063999999321.7112815 119.03740939999993 49.6676935 160.34600339999992tag:blogger.com,1999:blog-4038204814397588397.post-18032000429202349382013-02-23T00:13:00.001+09:002013-02-23T00:13:32.363+09:00Windows 7 64bit 環境の Jenkins ジョブで Powershell ファイルを実行すると「スクリプトの実行がシステムで無効」になる<textarea class="markdown" disabled="disabled" style="height: 300px; margin: 2px; width: 500px;">
## 背景
Windows 7 上でJenkins を運用するとPowershell が利用できて便利!
定期的にExcelなどの情報も操作できる。
PowerShell のセットアップでps1ファイルから実行するために必須なのは、Set-ExecutionPolicy によるポリシーのレジストリ変更。
これで powershell コマンドと.ps1ファイルを指定してプログラムが実行できる。
なんのことはないし、ちゃんと動いた。
<br/><br/>
## 問題
ここで、今回つまづいたのでは Set-ExecutionPolicy で ps1 ファイルの実行を許可し、コマンドプロンプトでは実行できるにもかかわらず Jenkins では実行できない事象が発生。。。
こんなログがジョブ実行ででてしまう。何度もポリシーを見なおしたりマシンを再起動してみたけどエラーがでる。
<br/>
<pre class="log">
スクリプトの実行がシステムで無効になっているため、ファイル C:\hoge\job.ps1 を読み込めません。詳細については、「get-help about_signing」と入力してヘルプを参照してください。
発生場所 行:1 文字:12
+ .\job.ps1 <<<<
</pre>
<br/>
困って、最後に辿りついたのが 32bit, 64bit 版のPowerShellでポリシーがそれぞれ違うということ。
コマンドプロンプトでは 64bit 版を使っていて、Jenkins は 32bit 版をつかっていたみたい。
対応は簡単で、フルパスのpowershell を起動して Set-ExecutionPolicy を変更すればいい。
- [参考 Set-ExecutionPolicy コマンドレットの使用](http://technet.microsoft.com/ja-jp/library/ee176961.aspx)
- [参考 Unable to exec Powershell on one slave.](https://groups.google.com/forum/#!msg/jenkinsci-users/P5UhpfonBuI/xMfkkCRjwwAJ)
<br/><br/>
## 対策
32bit, 62bit版のPowerShellがある。
Windows界隈ではもしかして一般的?なのかもしれない。
知らなかった。。。
- 引用: [参考サイト](https://groups.google.com/forum/#!msg/jenkinsci-users/P5UhpfonBuI/xMfkkCRjwwAJ)
<pre class="log">
32-bit: C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
64-bit: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
</pre>
<br/><br/>
### 手順
- どちらも同じポリシーに設定
<pre class="brush: shell">
> C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
PS C:\hoge > Set-ExecutionPolicy RemoteSigned
PS C:\hoge > exit
>
> C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
PS C:\hoge > Set-ExecutionPolicy RemoteSigned
PS C:\hoge > exit
</pre>
[1]:http://blog.ccm-lulu.com/ "myblog"
</textarea>Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com0日本, 東京都35.6894875 139.6917063999999321.7112815 119.03740939999993 49.6676935 160.34600339999992tag:blogger.com,1999:blog-4038204814397588397.post-22403926578087247022013-02-20T22:00:00.000+09:002013-02-20T23:10:05.381+09:00Groovy のリスト操作の実験結果を備忘録<textarea class="markdown" disabled="disabled" style="height: 300px; margin: 2px; width: 500px;">
Groovy のリスト操作がわからなかったので、実験したので備忘録。
## ためしたメソッド
他にもやったら追記します。
もしかしたら、スライスとか他にもいい方法がありそうな。。。
- head
- tail
- スライス
- push
- pop
- リストの結合
## 結果
GroovyConsole で実行しました。
こういうツールがあるのもGroovyのいいところだなぁ。
<pre class="brush: groovy">
groovy> pa = []
groovy> pa << "a"
groovy> pa << "b"
groovy> pa.push("c")
groovy> pa.push("d")
groovy> println "01 check :" + pa
groovy> println "02 tail :" + pa.tail()
groovy> println "03 check :" + pa
groovy> println "04 pop :" + pa.pop()
groovy> println "05 check :" + pa
groovy> println "06 head :" + pa.head()
groovy> println "07 check :" + pa
groovy> println "08 index1:" + pa[1]
groovy> println "09 check :" + pa
groovy> println "10 slice :" + pa[1..pa.size()-1]
groovy> println "11 check :" + pa
groovy> println "12 slice :" + pa[0..pa.size()-2]
groovy> println "13 check :" + pa
groovy> pa = pa + ["d"]
groovy> println "14 check :" + pa
groovy> pa = pa - ["d"]
groovy> println "15 check :" + pa
groovy> println "16 push :" + pa.push("e")
groovy> println "17 check :" + pa
01 check :[a, b, c, d]
02 tail :[b, c, d]
03 check :[a, b, c, d]
04 pop :d
05 check :[a, b, c]
06 head :a
07 check :[a, b, c]
08 index1:b
09 check :[a, b, c]
10 slice :[b, c]
11 check :[a, b, c]
12 slice :[a, b]
13 check :[a, b, c]
14 check :[a, b, c, d]
15 check :[a, b, c]
16 push :true
17 check :[a, b, c, e]
</pre>
</textarea>
Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com0日本, 東京都35.6894875 139.6917063999999321.7112815 119.03740939999993 49.6676935 160.34600339999992tag:blogger.com,1999:blog-4038204814397588397.post-72519606896195992572013-02-15T17:45:00.002+09:002013-02-15T17:45:15.715+09:00tmux nested tmux (tmux の中で tmux) を使う設定(備忘録)<textarea class="markdown" disabled="disabled" style="height: 300px; margin: 2px; width: 500px;">
## やりたいこと
tmux を起動したターミナルからリモートサーバへ接続している場合、リモートサーバ上でもtmuxを使いたいときがある。
二重にtmuxを起動するとデフォルトの設定では手前(ターミナル側)のtmuxしか利用できず悲しい思いをしていた。
しらなかった、tmux ネストできる。
こちらのサイトを (Practical Tmux)[https://mutelight.org/practical-tmux] を参考にさせてもらいました。
ほかにも画面の調整をしてくれるオプションとかもあって便利。
<br/><br/>
### 設定
キーはこのみで。
<pre class="log">
#Command Sequence for Nested Tmux Sessions
bind-key a send-prefix
</pre><br/>
- おまけ
つかってるターミナルにあわせてリサイズをかけてくれるそうです。
画面サイズの違うマシンから同じセッションを開いているときに便利!
<pre class="log">
#Aggressive Resize
setw -g aggressive-resize on
</pre>
<br/><br/>
### 使い方
- tmux をリモートサーバでひらく
- ターミナルで開いたtmux の Ctrl + b あとに 設定した キー を押してショートカットをうつ
<pre class="log">
#縦分割
Ctrl + b, a %
#横分割
Ctrl + b, a "
</pre>
</textarea>Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com0日本, 東京都35.6894875 139.6917063999999321.7018745 119.03740939999993 49.677100499999995 160.34600339999992tag:blogger.com,1999:blog-4038204814397588397.post-46478620988573590882013-02-14T01:23:00.000+09:002013-02-14T01:24:24.683+09:00[CentOS] ネットワーク関連の便利なコマンドとかよくやる設定<textarea class="markdown" disabled="disabled" style="height: 300px; margin: 2px; width: 500px;">
CentOS のコマンドと設定。
Ubuntu については別で書く。
## 便利なコマンド
<br/>
### ipcalc コマンド
すんごい。便利。
ネットワークエンジニアの人にはそんなの暗算しなさいって笑われそうだけど。
設定した値の確認にも使える。
<br/>
<pre class="brush: shell">
$ ipcalc -n ${IP}
$ ipcalc -m ${IP}
$ ipcalc -p ${IP}
$ ipcalc -b ${IP}
</pre>
#### 使用例
<pre class="log">
$ ip addr show eth1 | grep inet\ | cut -d' ' -f6 | xargs ipcalc -n
NETWORK=172.16.200.0
$ ip addr show eth1 | grep inet\ | cut -d' ' -f6 | xargs ipcalc -m
NETMASK=255.255.255.0
$ ip addr show eth1 | grep inet\ | cut -d' ' -f6 | xargs ipcalc -p
PREFIX=24
$ ip addr show eth1 | grep inet\ | cut -d' ' -f6 | xargs ipcalc -b
BROADCAST=172.16.200.255
</pre>
<br/>
### netstat コマンド
- tcp ポートのポート調べる
<pre class="brush: shell">
$ netstat -ant
</pre>
- ucp ポートのポート調べる
<pre class="brush: shell">
$ netstat -anu
</pre>
<br/>
### nmap コマンド
ちゃんと空いてるポートを外から調べたかったら使う。
でも、使うときは迷惑かけないように慎重に。
<pre class="log">
sudo nmap -sS ${IP} -p ${fromPort}-${toPort}
</pre>
<br/>
#### sample
<pre class="brush: shell">
$ sudo nmap -sS 192.168.0.1 -p 1-1024
</pre>
<br/>
<br/>
### ip コマンド
だいたい以下のコマンドでネットワークの情報は引ける
<br/>
#### ip addr : 設定しているIPを確認/操作
<pre class="log">
ip addr {add|change|replace} IFADDR dev STRING [ LIFETIME ]
</pre>
<br/>
- show
<pre class="brush: shell">
$ ip addr
</pre>
<br/>
- add
<pre class="brush: shell">
$ ip addr add 192.168.0.100 dev eth0
</pre>
<br/>
#### 設定しているリンクのUP/DOWNを確認
<pre class="brush: shell">
$ ip link show
</pre>
<br/>
#### ARPキャッシュを確認
<pre class="brush: shell">
$ ip neigh show
</pre>
<br/>
#### ip route : 設定しているルーティングを確認/操作
<pre class="brush: shell">
$ ip route
</pre>
<br/>
#### 一時的にルーティングを登録する
<pre class="brush: shell">
$ ip route add default via 192.168.0.1
$ ip route add 192.168.100.0/24 via 192.168.0.1
</pre>
<br/>
## よくやるけど覚えてない設定
<br/>
### インターフェースをDHCPに設定する
<pre class="log">
DEVICE=eth0
BOOTPROTO=dhcp
HWADDR="NN:NN:NN:NN:NN"
ONBOOT=yes
</pre>
<br/>
<br/>
### インターフェースを固定IPにする
<pre class="log">
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.1.255
HWADDR="NN:NN:NN:NN:NN"
IPADDR=192.168.0.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
GATEWAY=192.168.0.1
</pre>
<br/>
<br/>
</textarea>Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com0日本, 東京都35.6894875 139.6917063999999321.7018745 119.03740939999993 49.677100499999995 160.34600339999992tag:blogger.com,1999:blog-4038204814397588397.post-10130505273333403172013-02-11T22:00:00.000+09:002013-02-11T22:01:49.998+09:00Ubuntu 12.10 で Oracle JDK の最新版をいれる方法 (備忘録)<textarea class="markdown" disabled="disabled" style="height: 300px; margin: 2px; width: 500px;">
Ubuntu 12.10 上に LXC を構築し, そのサーバー上でOracle Java 1.7 を最新にするときに少しこまったので、備忘録。
わりと面倒だった。。
## Oracle Java の最新版をいれる方法
## 手順概要
0. aptitude インストール
1. add-apt-repository インストール
2. Oracle Java インストール
<br/>
## お世話になったサイト
[aptitude の入れ方](http://www.stylesen.org/addaptrepository_command_ubuntu_1210_quantal)
[Oracle Java の入れ方](http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html)
<br/>
<br/>
### 現在のVersion 確認
<pre class="log">
ubuntu@vertx:~/src$ java -version
java version "1.7.0_09"
OpenJDK Runtime Environment (IcedTea7 2.3.4) (7u9-2.3.4-0ubuntu1.12.10.1)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)
ubuntu@vertx:~/src$
</pre>
<br/>
### aptitude から インストール
<pre class="brush: shell">
$ sudo aptitude install software-properties-common
</pre>
<br/>
### add-apt-repository インストール
<pre class="brush: shell">
$ sudo apt-get install add-apt-repository
</pre>
<br/>
### Oracle Java をインストール
<pre class="brush: shell">
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer
</pre>
<br/>
### alternatives 実行
- CentOS でいう "alternatives" の Ubuntu 版コマンドで切り替え
<pre class="brush: shell">
$ sudo update-java-alternatives -s java-7-oracle
</pre>
<br/>
### 現在のVersion 確認
<pre class="log">
ubuntu@vertx:~/src$ java -version
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build 1.7.0_13-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)
ubuntu@vertx:~/src$ </pre>
<br/>
</textarea>Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com1tag:blogger.com,1999:blog-4038204814397588397.post-38234797869155037042013-02-11T17:30:00.002+09:002013-02-11T17:30:40.570+09:00Ubuntu+Apache2 で モジュール有効は a2enmod(備忘録)<textarea class="markdown" disabled="disabled" style="height: 300px; margin: 2px; width: 500px;">
今回も自分の備忘録。
CentOS でしかApacheつかったことなかったので、モジュールの設定に手間取った。。。
これはUbuntuで伝統的な方法なのかなぁ。
<br/>
<br/>
## 追加したいとき -> a2enmod を使う
[a2enmod マニュアル](http://manpages.ubuntu.com/manpages/hardy/man8/a2enmod.8.html)
mods-enable ディレクトリ から mods-available ディレクトリへファイルが移動する。
<br/>
## 除外したいとき -> a2dismod を使う
[a2enmod マニュアル](http://manpages.ubuntu.com/manpages/hardy/man8/a2enmod.8.html)
<br/><br/>
### a2emod 空打ち
<pre class="brush: shell">
ubuntu@prx:/etc/apache2$ sudo a2enmod
Your choices are: actions alias asis auth_basic auth_digest authn_alias authn_anon authn_dbd authn_dbm authn_default authn_file authnz_ldap
authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cern_meta cgi cgid charset_lite dav dav_fs dav_loc
k dbd deflate dir disk_cache dump_io env expires ext_filter file_cache filter headers ident imagemap include info ldap log_forensic mem_cach
e mime mime_magic negotiation proxy proxy_ajp proxy_balancer proxy_connect proxy_ftp proxy_http proxy_scgi reqtimeout rewrite setenvif speli
ng ssl status substitute suexec unique_id userdir usertrack vhost_alias
Which module(s) do you want to enable (wildcards ok)?
ubuntu@prx:/etc/apache2$
</pre>
<br/>
この中から選ぶのかぁ。
<br/>
## リバースプロキシを有効にするコマンド
<pre class="brush: shell">
sudo a2enmod proxy
sudo a2enmod proxy_http
</pre>
<br/>
<br/>
## a2enmod を実行すると何がおきてる?
mods-available から mods-enable デェレクトリに mod_hoge.conf と mod_hoge.load ファイルがコピーされたのを確認。
たぶんやってるのはこれだけだと思う。
<br/>
## 設定(一番簡単なやつ)
<pre class="log">
$ vim mods-available/proxy.conf
<IfModule mod_proxy.c>
ProxyRequests Off
ProxyPass /hoge/ http://10.0.3.110:8080/
ProxyPassReverse /hoge/ http://10.0.3.110:8080/
</IfModule>
</pre>
</textarea>Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com1tag:blogger.com,1999:blog-4038204814397588397.post-5526840759965283932013-02-10T18:30:00.000+09:002013-02-10T18:39:41.487+09:00Vimを一から構築するときの手順(自分用のコンパイルオプション)<textarea class="markdown" disabled="disabled" style="height: 300px; margin: 2px; width: 500px;">
普段はあんまりいじらないので、vim を構築するときにすぐにわすれてしまうので備忘録。
## Vim の構築
<br/>
### vim のソースコードを取得
<pre class="brush: shell">
> hg clone https://vim.googlecode.com/hg/ vim
> cd vim
</pre>
<br/>
### for Ubuntu
<pre class="brush: shell">
> sudo apt-get install -y zlib1g-dev libreadline6-dev ncurses-dev python-dev gcc make
</pre>
<br/>
<br/>
### for CentOS
<pre class="brush: shell">
> sudo yum install -y zlib-devel ncurses-devel readline-devel python-devel gcc make
</pre>
<br/>
<br/>
### コンパイル
<pre class="brush: shell">
> ./configure --enable-multibyte --with-features=huge --enable-pythoninterp=yes
or
> ./configure --enable-multibyte --with-features=huge --enable-pythoninterp=yes --enable-fontset --with-python-config-dir=/usr/local/lib/python2.7/config
> make
> sudo make install
</pre>
--with-python-config-dir は環境によってかえること。
<br/>
<br/>
#### ちなみに... make test で失敗したら
・test_urllib2_localnet
このテストはhttp_proxy環境変数がセットされていると失敗するみたい。
http_proxy環境変数を削除すればパスする。
<br/>
<br/>
### プラグイン
<pre class="brush: shell">
> export GIT_SSL_NO_VERIFY=true
> git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
</pre>
<br/>
<br/>
### .vimrc の設定
github .vimrc をダウンロードか以下の記述を冒頭にいれておく
<pre class="brush: shell">
set nocompatible " be iMproved
filetype off " required!
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
Bundle 'gmarik/vundle'
filetype plugin indent on " required!
</pre>
</textarea>Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com0tag:blogger.com,1999:blog-4038204814397588397.post-5358980746356844702013-02-06T09:00:00.000+09:002013-02-06T15:26:36.811+09:00Groovy イイ!のあとに最初につまづいた。「each が止まらない。。。」<textarea class="markdown" disabled="disabled" style="height: 300px; margin: 2px; width: 500px;">
## 問題
<br/>
Groovy のリストで each() メソッドを使用するとreturnやbreakで終了せず、すべてのイテレータが処理される。
あれ、each が止まらない。
これは、Javaやpython,ruby の動きから想定していると予想外の挙動。。。
<br/>
<br/>
## 解決方法
**find()** を使う。
以下のページで解決策があった。結構有名な話みたい。
メタクラスでbreakを挿入したり、例外投げて止めるなどもあるみたい。
でも、find が一番シンプル。
<br/>
- ちなみに for ならとめられる
<pre>
for(i in 0..10){ hogehoge }
</pre>
<br/>
<br/>
参考リンク
[Groovy's each does not exit when using return](http://marcelo-olivas.blogspot.jp/2012/08/groovys-each-does-not-exit-when-using.html)
<br/>
勉強になりました。ありがとうございます。
<br/><br/>
<br/>
<br/>
## 実験
<br/>
<br/>
### hoge.each() 予想外の動き
<br/>
うわーん。return で処理がとまらない。。。
<br/>
<pre class="brush: groovy">
myList = (1..10)
def notBreak(yourList) {
yourList.each { list ->
if(list == 5) {
return true
} else {
return false
}
}
}
//assert existFiveBadCase(myList) == true
assert notBreak(myList) == [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
</pre>
<br/>
<br/>
### hoge.find()
<br/>
find 中で return trueするとそこで処理がとまる。
下のコードはまだ冗長だけど。数字の '5' を探す関数。
<br/>
<pre class="brush: groovy">
myList = (1..10)
def doBreak(yourList) {
def isExist = false
yourList.find { list ->
if(list == 5) {
isExist = true
return true
}
}
return isExist
}
assert doBreak(myList) == true
</pre>
</textarea>
Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com0tag:blogger.com,1999:blog-4038204814397588397.post-84027322718900013942013-02-05T22:00:00.000+09:002013-02-05T22:00:08.644+09:00Ruby の勉強記録 (classのクラス)<textarea class="markdown" disabled="disabled" style="height: 300px; margin: 2px; width: 500px;">
メタプログラミング Ruby が楽しい。
まだ理解しきっていない気がするので、忘れてもいいように実験の結果を残しておく。
<br/>
<br/>
## インスタンスのクラス名のパス
ClassのクラスはClassなのかぁ。
<br/>
<pre class="brush: ruby">
1.9.3-p194 :002 >
1.9.3-p194 :003 > a = "hoge"
=> "Hello, world"
1.9.3-p194 :004 > a.class
=> String
1.9.3-p194 :005 > a.class.class
=> Class
1.9.3-p194 :006 > a.class.class.class
=> Class
1.9.3-p194 :007 > a.class.class.class.class
=> Class
</pre>
<br/>
<br/>
## classのスーパクラスは何クラス?
<br/>
<br/>
### 継承はこうなる
String -> Object -> Class -> BasicObject -> nil
- 実験
<pre class="brush: ruby">
1.9.3-p194 :009 > a.class
=> String
1.9.3-p194 :010 > a.class.superclass
=> Object
1.9.3-p194 :011 > a.class.superclass.class
=> Class
1.9.3-p194 :012 > a.class.superclass.superclass
=> BasicObject
1.9.3-p194 :013 > a.class.superclass.superclass.class
=> Class
1.9.3-p194 :014 > a.class.superclass.superclass.superclass
=> nil
</pre>
<br/>
<br/>
## nil はどういう扱いになるのかな
<pre class="brush: ruby">
1.9.3-p194 :014 > a.class.superclass.superclass.superclass
=> nil
1.9.3-p194 :015 > a.class.superclass.superclass.superclass.class
=> NilClass
1.9.3-p194 :016 > a.class.superclass.superclass.superclass.class.superclass
=> Object
1.9.3-p194 :017 > a.class.superclass.superclass.superclass.class.superclass.class
=> Class
1.9.3-p194 :018 > a.class.superclass.superclass.superclass.class.superclass.class.superclass
=> Module
1.9.3-p194 :019 > a.class.superclass.superclass.superclass.class.superclass.class.superclass.class
=> Class
1.9.3-p194 :020 > a.class.superclass.superclass.superclass.class.superclass.class.superclass.class.superclass
=> Module
1.9.3-p194 :021 > a.class.superclass.superclass.superclass.class.superclass.class.superclass.class.superclass.class
=> Class
1.9.3-p194 :022 > a.class.superclass.superclass.superclass.class.superclass.class.superclass.class.superclass.class.superclass
=> Module
1
</pre>
<br/>
<br/>
## わかったこと
<br/>
<br/>
### クラスとインスタンスの関係
<br/>
<pre>
-----------------------------
インスタンス <= クラス
-----------------------------
"hoge" <= String
String <= Class
nil <= NilClass
NilClass <= Class
Module <= Class
Class <= Class
-----------------------------
</pre>
<br/>
<br/>
### クラスの継承の関係
<pre>
String -> Object -> Class -> BasicObject -> nil
</pre>
<br/>
<pre>
Class -> Module -> Object -> BasicObject -> nil
</pre>
モジュール挟まないのもあるのか。
Class クラスが特別な存在であることがわかった。
<br/>
<br/>
### インスタンスのメソッドについて
<br/>
"hoge".supreclass
nil.supreclass
<br/>
ともに同じNoMethodErrorが発生。
"hoge", nil レシーバのメソッドは .supreclass をもっていない。
つまり、NilClass, Stringクラスは superclassが定義されていない。
ここはどうなってるのか、今度調べてみよう。
<br/>
<br/>
<pre class="brush: ruby">
1.9.3p362 :017 > String.superclass.superclass.superclass.superclass
NoMethodError: undefined method `superclass' for nil:NilClass
from (irb):17
from /home/ya-ota/.rvm/rubies/ruby-1.9.3-p362/bin/irb:16:in `<main>'
1.9.3p362 :018 > "hoge".superclass
NoMethodError: undefined method `superclass' for "hoge":String
from (irb):18
from /home/ya-ota/.rvm/rubies/ruby-1.9.3-p362/bin/irb:16:in `<main>'
1.9.3p362 :019 >
</pre>
<br/>
<br/>
なにか変な勘違いしていたら、ご指摘いただけると幸いです。
</textarea>Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com0tag:blogger.com,1999:blog-4038204814397588397.post-42719103493895870552013-02-01T22:00:00.000+09:002013-02-05T23:19:09.297+09:00"Github Clone" の RhodeCode を構築 on CentOS 6.3<textarea class="markdown" disabled="disabled" style="height: 300px; margin: 2px; width: 500px;">
## RhodeCode ってなに?
Python製の github の clone。
git と Mercurial がつかえる
[RhodeCode](http://rhodecode.org/ "RhodeCode")
<br/>
<br/>
## 構築環境
- OS :Cent 6.3
- Python :2.6.6(デフォルト)
- VCS :Git, Mercurial
<br/>
<br/>
## インストール
お試しなので virtualenv で構築
[RhodeCode install](http://packages.python.org/RhodeCode/installation.html "RhodeCode install") を参考にした。
<br/>
<br/>
- インストールの流れ
0. python-devel インストール
0. git インストール
0. Mercurial インストール
0. python へ distribute インストール
0. virtualenv インストール
0. virtualenv 構築
0. RhodeCode インストール
<br/>
<br/>
## 環境構築
<pre class="brush: shell">
$ sudo yum install python-devel git hg curl
$ curl -O http://python-distribute.org/distribute_setup.py
$ sudo python distribute_setup.py
$ easy_install virtualenv
$ virtualenv --no-site-packages myenv
$ source ./myenv/bin/activate
$ easy_install rhodecode
</pre>
<br/>
- python-devel やらないとこれがでる。
<pre class="log">
error: Setup script exited with Python headers are required to build Mercurial
</pre>
<br/>
<br/>
## セットアップ
- セットアップ用のコンフィグ生成
<pre class="brush: shell">
$ paster make-config RhodeCode production.ini
Distribution already installed:
RhodeCode 1.5.2 from /path/to/lib/python2.6/site-packages/RhodeCode-1.5.2-py2.6.egg
Creating production.ini
Now you should edit the config files
production.ini
</pre>
<br/>
- セットアップ実行
<pre class="brush: shell">
$ paster setup-rhodecode production.ini
</pre>
<br/>
- 以下の表示がでたら作業ディレクトリをフルパスで指定する
<pre class="log">
Enter a valid absolute path to store repositories. All repositories in that path
will be added automatically:
</pre>
- ユーザとリポジトリ作成
<pre class="brush: shell">
mkdir -p /home/user/my_repo
paster setup-rhodecode production.ini --user=user --password=Ninni --email=user@yourdomain.com --repos=/home/user/my_repo
</pre>
## サービスの起動
<pre class="brush: shell">
paster serve production.ini
</pre>
<br/>
## 早速ログインして既存のリポジトリをclone!!
### あれ??クローン作るときに取得で失敗。。
- 失敗した時のログ
<pre class="log">
EnvironmentError: Subprocess exited due to an error:
</pre>
<br/>
- ここの情報で解決
[参考サイト](https://bitbucket.org/marcinkuzminski/rhodecode/issue/588/unable-to-browse-git-repositorieshttps://bitbucket.org/marcinkuzminski/rhodecode/issue/588/unable-to-browse-git-repositories)
<br/>
<br/>
### git 1.7.1 が古いのが問題
Git をソースコードからインストールします。。。
<br/>
<br/>
- Git をソースコード取得
<pre class="brush: shell">
$ git clone https://github.com/git/git.git
$ cd ./git
$ git tag
$ git checkout v1.8.?? #<-ここは好きにして
</pre>
<br/>
- ライブラリをいれる
<pre class="brush: shell">
$ sudo yum install -y curl-devel expat-devel openssl-devel gettext
</pre>
<br/>
- MakeMaker.pm ないっていわれたら
<pre class="brush: shell">
$ sudo yum install perl-ExtUtils-MakeMaker
</pre>
<br/>
- Git インストール
<pre class="brush: shell">
$ make NO_TCLTK=Yes prefix=/usr/local
$ make install
$ sudo yum remove git
$ source /etc/profile
$ git --version
</pre>
<br/>
<br/>
### (余談1) Git インストール
make でprefix してるのに、反映しない事象に出くわした。
とりあえず Makefile の一部を無理やり替え。。。
<br/>
<pre class="brush: shell">
$ vim Makefile
prefix = /usr/local
</pre>
<br/>
<br/>
### (余談2) あわわ相乗りしてる Jenkins で git のエラーでた。。
- git 1.8.x にしたらこれも登録しとこう。
<pre class="brush: shell">
$ git config --system user.email "yourmail@dokkasonohen.jp"
$ git config --system user.name "Fistname Lastname"
</pre>
<br/>
<br/>
</textarea>Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com0tag:blogger.com,1999:blog-4038204814397588397.post-21944151586859449932013-02-01T00:30:00.000+09:002013-02-19T00:44:15.623+09:00[CentOS/Ubuntu] 便利なコマンドの備忘録<textarea class="markdown" disabled="disabled" style="height: 300px; margin: 2px; width: 500px;">
便利と思ったものや教えてもらって関心したコマンド結構あるけど、いざ使おうとおもったら忘れてしまう。
そんなコマンドとコマンドオプションを備忘録 。
中にはそれ Bash じゃんってのもあるかも。。。
<br/>
<br/>
## find + xargs + grep でファイル内を再帰検索
自分はあんまり頻繁に使わないのでいつも help 見ちゃう。
たまにやりたくなるけどよく忘れる。
<pre class="brush: shell">
$ find ./ -name *.py |xargs grep -n4 "todo"
</pre>
<br/>
<br/>
### grep -vE で正規表現を使って除外
<pre class="brush: shell">
grep -vE "(dummy|127\\.0\\.0\\.1)" access_log
</pre>
<br/>
<br/>
## {} で 複数ファイルの同時tail
複数のファイルを一度に tail
<pre class="brush: shell">
$ tail -f "/var/log/httpd/logs/{access,error}_log
</pre>
<br/>
<br/>
## 数秒ごとにコマンド定期実行
Keepalived のIPのフェイルオーバを観察したり、特定の文字列を逐次カウントしておきたいときにコマンドを何回も打つのは面倒。
あとログとかもとっておくとあとから調べるのに楽だから取りたい。
<br/>
<br/>
### watch コマンド
-n{数字} : 秒間隔
<pre class="brush: shell">
$ watch -n3 "date '+%F %H:%M:%S'"
</pre>
<br/>
<br/>
### tee でファイルへ追記するオプション
-a [file] を使います。
<pre class="brush: shell">
$ tail -f /var/log/message | grep sshd | tee -a sshd.log
</pre>
<br/>
<br/>
### コマンドの標準出力の改行文字を削除
<pre class="brush: shell">
$ date "+%F %H:%M:%S" | tr -d "\n"
$ echo -n "hello"
</pre>
<br/>
<br/>
### あわせて便利
<pre class="brush: shell">
$ watch -n3 "date '+%F %H:%M:%S' | tr -d '\n' >> netstat.log && \
echo -n " = " >> netstat.log && \
netstat -ant | grep "httpd" | wc -l | tee -a netstat.log"
</pre>
<br/>
<br/>
## less で tail
less でファイル開いてる時に Shift + F
解除は Ctrl + c
<br/>
<br/>
## cut の書き方
<pre class="brush: shell">
$ cat access_log | cut -d' ' -f4-5,7
</pre>
<br/>
<br/>
## mv ってバックアップ機能あるんですよね
-b で指定するとバックアップ先にファイルがるとサフィックスつけて消さないでくれる。
<pre class="brush: shell">
$ mv hoge foo -b "bk"
</pre>
<br/>
<br/>
## 最後に
まだ、なんかいろいろ忘れてるきがするなぁ。
また今度、mkfifo, awk, sed はどっかでまとめよう。
<br/>
<br/>
<br/>
<br/>
</textarea>
Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com1tag:blogger.com,1999:blog-4038204814397588397.post-88883928777858932372013-01-24T20:20:00.000+09:002013-01-26T12:06:04.876+09:00 Intellij IDEA + Gradle GUI Plugin を Windows 7 で使うとエラー出る場合の解決方法<textarea class="markdown" disabled="disabled" style="height: 300px; margin: 2px; width: 500px;">
# 問題
Windows 7 のOS上で IntelliJ IDEA の Gradle GUI Plugin をインストールしてもエラーがでてしまって動作しない。むむっ!
問題は InntelliJ が自前のJREを呼びだすが必要なライブラリがないため動作しないこと。
解決するにはJAVA_HOMEの指定先としてJDKをのインストールパスを指定する。
<br/>
<br/>
- これがエラーの内容
<pre class="log">
Executing command: "tasks" Failed to connect to gradle process for command 'tasks'
ERROR: JAVA_HOME is set to an invalid directory: C:\Program Files\JetBrains\IntelliJ IDEA 12.0.2\jre
Please set the JAVA_HOME variable in your environment to match the location of your Java installation.
</pre>
<br/>
<br/>
* ちなみに
以下のところで同じ事で困ってる人いたので、環境変数だけ設定したが改善せず。
[gradle doesn't work in Intellij - problems with JAVA_HOME](http://stackoverflow.com/questions/5124368/gradle-doesnt-work-in-intellij-problems-with-java-home)
<br/><br/>
## 問題の構成
<pre>
OS: Windows 7 Ultimate
IDE: IntelliJ IDEA 12.0.2
IDEのインストールパス: %programfiles(x86)%\JetBrains\IntelliJ IDEA Community Edition 12.0.2\
</pre>
<br/>
<br/>
## 対策方針
IDEA IntelliJ のインストールパスに idea.bat というバッチファイルがある。
idea.exe ではなくidea.batで起動することでWindowsの環境変数を使用して起動できる。
すでにJAVA_HOMEが設定してあるなら idea.bat 起動だけでもいけるかも。
<br/><br/>
### 手順
1. Windows の環境変数にJAVA_HOMEをJDKのパスで登録 。
分からないかったら、ここのサイトが丁寧に解説してあります。
[環境変数の登録](http://sixwish.jp/Nyartoolkit/Android/section03/)
<br/><br/>
2. IntelliJ IDEA のショートカットの起動パスを idea.bat を指定する
<br/><br/>
3. ショートカットから起動
<br/><br/>
4. Gradle GUI が動作するか確認
<br/>
build.gradle ファイルのあるプロジェクトを開き、更新マークのボタンをクリックして
エラーがでなければOK
<br/>
以上。<br/><br/><br/>
以降 idea.bat を起動してGradle GUI もちゃんと動作するはず。
## 対策後の問題
idea.exe に起動時のオプションでJAVA_HOMEが指定できる??
idea.bat はJavaで起動してるからidea.exe のオプションとかは不明。
とりあえず、使えるのでいいか。
<br/><br/>
</textarea>Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com0tag:blogger.com,1999:blog-4038204814397588397.post-81912287831685320482013-01-15T08:30:00.000+09:002013-01-18T13:07:16.924+09:00Sphinx を CloudBees + Bitbucket + GAE で運用<textarea class="markdown" disabled="disabled" style="height: 770px; margin: 2px; width: 570px;">## 目的
今年は情報発信する年と意気込んで、資料公開用のWEBページを作ることにしました。
## 概要
ツールにはrstで記述できるSphinx を使用。
GAE + Bitbucket + CloudBees を使用するので準備が手間ですが、サービスを使用することでローカル環境で必須のツールはgitとテキストエディタだけ運用できます。
Bitbucket はrstファイルをそのままHTMLで閲覧できるのとソースの管理が充実していて便利です。 CloudBees のGitリポジトリを使用すればさらに手順は短くなりますね。
<br/>
<br/>
## 参考にさせていただいた資料
http://ymotongpoo.hatenablog.com/entry/20100320/1269074974
<br/>
<br/>
## 環境
### クラウド環境
- [Google app Engine](https://appengine.google.com/)
- [Bitbucket](https://bitbucket.org/)
- [CloudBees](http://www.cloudbees.com/)
<br/>
<br/>
### PCに必要な環境
- インターネット接続
- Python 2.7
- git
- テキストエディタ
<br/>
<br/>
## 作業手順
大まかには以下の流れです。
各種サービスの準備 -> git 環境構築 -> Jenkinsのジョブ作成 -> Jenkins でビルドとデプロイ実行 -> WEB公開
<br/>
<br/>
### 1. [GAE] 公開サーバとしてアプリケーションを新規作成
GAEで新規アプリケーションを作成。
ここで設定したApplicationIDはJenkinsの登録で使います。
- ID を 仮に"hoge-docs01"とする
<br/>
<br/>
### 2. [Bitbucket] sphinxのソースを管理するリポジトリを作成
リポジトリの種類はGit
- リポジトリ名 : hoge-docs01-repo
<br/>
<br/>
### 3. [CloudBees] Jenkins の準備
1. CloudBeesでアカウントを登録
アカウントの登録はサイトの指示に従って登録する。
2. Jenkins で プラグインのインストール
Jenkins は CloudBees ログイン後の画面の左上のタブの[Builds]をクリック。
Jenkinsを表示させたら、ジョブででSphinxを資料するためにPythonを実行できるプラグインをインストール。
<div class="note">
プラグインは左ペインから "Jenkinsの管理 > プラグインの管理 > 利用可能タブ" でインストール。
Python が使用できるようになっていればOK。
</div>
3. ジョブの作成とCloudBeesの公開鍵の取得
プラグインは左ペインから "新規ジョブ作成"をクリック。
ジョブ名は任意で、"フリースタイル・プロジェクトのビルド" を選択して OK をクリック。
ジョブが生成されると "CloudBees DEV@cloud Authorization" という欄に公開鍵されているので、Bitbucket のSSH key に登録。
BitbucketのManage Accountを表示するとSSH key があるので、登録する。
ここで、ジョブに最低限の設定を行う。
- ソースコード管理システム -> Git
- Repository -> ssh://git@bitbucket.org/{AccountName}/ccm-docs01.git
{AccountName} は自分のアカウント文字列に置き換える。
- ビルド・トリガ -> SCMをポーリング // スケジュール -> */15 * * * *
- ビルド手順の追加 -> Python builder
- Python version => System-CPython-2.7
- Nature => shell
- command (以下のコードを貼り付ける)
<pre class="brush: shell">
curl -s -o use-python https://repository-cloudbees.forge.cloudbees.com/distributions/ci-addons/python/use-python
PYTHON_VERSION=2.7.2 . ./use-python
# when using virtualenv, don't forget to source activate!
virtualenv -q myenv
source ./myenv/bin/activate
easy_install sphinx
ls
cd gaedir/rst
make html
</pre>
- ビルド手順の追加 -> Deploy Python Application for Google App Engine
- Application Directory は './'
- Application ID は作成したIDを記載
- Version はそのまま
以上で、一旦ジョブの設定は終わり。
### 4. [Local] 作業ディレクトリを作成
- ディレクトリを作成し、Git の初期化を実行
<pre class="brush: shell">
$ mkdir mysphinx
$ cd mysphinx
$ git init
$ git remote add origin ssh://git@bitbucket.org/{userAccount}/hoge-docs01-repo.git
</pre>
### 5. Sphinx 環境を構築
<pre class="brush: shell">
$ curl -O "http://svn.zope.org/*checkout*/zc.buildout/trunk/bootstrap/bootstrap.py"
$ python bootstrap.py -d init
$ vim conf.py
[buildout]
parts = py sphinx
[py]
recipe = zc.recipe.egg
interpreter = py
eggs =
bootstrap
[sphinx]
recipe = z3c.recipe.scripts
eggs =
sphinx
$./bin/buildout
$./bin/sphinx-quickstart
</pre>
### 5. GAE 用のコンフィグを作成
<pre class="brush: shell">
$vim app.yaml
application: hoge-docs01
version: 1
runtime: python
api_version: 1
handlers:
- url: (.*)/
static_files: _build/html\1/index.html
upload: _build/html(.*)/index.html
- url: /(.*)
static_files: _build/html/\1
upload: _build/html/(.*)
</pre>
### 6. rst で記事を書いて公開
<pre class="brush: shell">
$vim index.rst
Welcome to ccm-lulu.com's documentation!
=========================================
Contents:
.. toctree::
:maxdepth: 2
:numbered:
doc001
doc002
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
$vim doc001.rst
Hoge doc
========
hoge01
----------
- foo
- bar
hoge02
-----------
- barbar
- foofoo
</pre>
### 7. Gitリポジトリへpush
- 無視ディレクトリを設定
<pre class="brush: shell">
$vim .ignore
bin
parts
eggs
$ git add .
$ git push origin master
</pre>
### 8. Jenkins のビルド、デプロイを確認
CloudBees でgitのpush検知から、sphinx のビルドとGAEへのデプロイをコンソールから確認してください。
### 9. GAE で公開
GAEの管理コンソールで公開バージョンを指定して完了。
## 次回、通常の作業方法を記載します。
</textarea>Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com0tag:blogger.com,1999:blog-4038204814397588397.post-53156995475830443572013-01-11T08:40:00.000+09:002013-01-24T22:47:28.562+09:00Blogger で Markdown 記法で投稿する方法 <div>
Blogger に移行するにあたり、Markdownで記述する方法を調べた。<br />
showdown.js でいけるんじゃないかと思い検索するとダンコガイさんの方法でうまくいきました。<br />
<a href="http://blog.livedoor.jp/dankogai/archives/51818456.html">http://blog.livedoor.jp/dankogai/archives/51818456.html</a> の記事を参考にさせてもらいました。<br />
ありがとうございます。<br />
<br />
[手順]<br />
<br /></div>
<h3>
1.CSSスタイルを登録</h3>
テンプレート > カスタマイズ > アドバンス > CSS 追加で以下のスタイルを追加。<br />
<br />
<pre class="log">.markdown { width:100%; height:320px; overflow:scroll; background-color:#ffffff; }
.showdown { background-color:#ffffff }
</pre><br />
<br />
<h3>
2.HTMLテンプレートへJavaScirptを追加(showdown.js)</h3>
<br />
<pre class="brush: shell">
<script src="http://blog.livedoor.jp/dankogai/js/showdown.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
$(function(){
var sd = new Showdown.converter()
$('.markdown').replaceWith(function(){
return $('<div/>').html(sd.makeHtml(this.value)).addClass('showdown')
});
});
</script>
</pre><br />
<br />
<br />
<h3>
3.blogを書くとき</h3>
<textarea> タグの中にMarkdownで記述する。<br />
<br />
<h3>
<span style="font-size: small;">
コード</span></h3>
<br />
<textarea border-style:dotted="border-style:dotted" class="markdown" disabled="disabled" style="height: 301px; margin: 2px; width: 580px;"><br />
# test1<br />
Neko, __nyan__ **nya** nya-n [myblog][1] nya-n!<br />
## test2<br />
### tesst3<br />
<br />
- Apple<br />
- Orange<br />
<br />
---<br />
<br />
- AppleApple<br />
- OrangeOrage<br />
[1]:http://blog.ccm-lulu.com/ "myblog"<br />
</textarea><br />
<br />
<br />
<br />
<br />
<h3>
<span style="font-size: small;">表示はこんなかんじ</span></h3>
<br />
<textarea border-style:dotted="border-style:dotted" class="markdown" disabled="disabled" style="height: 301px; margin: 2px; width: 580px;">
# test1
Neko, __nyan__ **nya** nya-n [myblog][1] nya-n!
## test2
### tesst3
- Apple
- Orange
---
- AppleApple
- OrangeOrage
[1]:http://blog.ccm-lulu.com/ "myblog"
</textarea>
<br />
<br />
と、こんな感じでブログ書いていこうと思います。<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com0tag:blogger.com,1999:blog-4038204814397588397.post-48714202989012560982013-01-11T01:00:00.002+09:002013-01-11T01:00:46.772+09:00今年からちゃんと記録をつけます<textarea class="markdown" disabled="disabled" style="height: 122px; margin: 2px; width: 500px;">
今年からちゃんと調べたことは記録に残すことにします。
何回も同じ事を調べるのも勿体ないので。
ちゃんとドメインもとって気合いをいれました。がんばります。
宜しくお願いします。
</textarea>
Anonymoushttp://www.blogger.com/profile/09415308801468231929noreply@blogger.com0