2012年12月5日水曜日

GeekExcel - Excelの小ワザ


Excelで個人的に便利だと思ったショートカットや機能をメモします。
思いついたらハッシュタグ「#GeekExcel」で呟いて、
それからこのページに追加するつもり…。

左寄せしつつ(中央揃えにせず)選択範囲を結合(Excel 2010)

名前をつけて保存(共通)

マクロ形式とマクロについて(Excel 2007, Excel 2010)






もし「そういえばこのワザ便利だから使っていいよ!」というのがあったら、
#GeekExcel でつぶやいてみてね!


2012年11月18日日曜日

[自動化][UWSC] UWSCを使ってWebテスト・Web作業の自動化(のはじめの一歩)

UWSCというツールを使って、この前初めてGUIテストの省力化スクリプトに挑戦しました。

このUWSCというのは、WindowsのGUI操作をスクリプトで記述することができ、
色んなオペレーションが自動化、省力化できるいい奴です。
VBAとバッチとPowerShellをひとまとめにして扱いやすくひとつの言語にしたみたいな、
大雑把にいうとそういうものです。
結構前からあるようなので、知ってる人からすると「うわーなついwww」みたいなところもあると思います。でもバッチリWindows 7 対応してて、良い感じです(多分)




で、どんなスクリプトを作ったかと言うと…具体的には、IEを開いて、決まったURLへアクセスし、アクセス完了後の画面をキャプチャし、Excelのシートに貼り付けるというものです。
URLはテキストでリストを作っておきます。フツーに1行に1個、アクセスしたいURLを書いておくだけです。

フローとしてはこんな感じ。

はじめ
IEとExcelを開いておく
用意しておいたURLから1行を拾う
(ここからループ)
IEをアクティブウィンドウにする
新しいタブを開いてURLを流し込む
Enterキーを押してアクセス
ページが開ききったらPrintScreen
Excelをアクティブウィンドウにする
貼り付ける
新しいシートを作る
(ここまでループ)
URLリストを閉じる
おわり



スクリプトはこんな感じ。
[ autoSitesViewing.uws ]
====================================================================

STOPFORM(False)     // Stopウィンドウは出さない

//パスなどの設定-------------------------------------------------------
//入力ファイル(URLリスト)のパスを指定
inputFilePath = "C:\Users\HogeHoge\Desktop\uwsc48c\URLList.txt"
// Excelのパス
excelPath = "C:\Program Files (x86)\Microsoft Office\Office12\excel.exe"
// IEのパス
iePath = "C:\Program Files\Internet Explorer\iexplore.exe"
//-----------------------------------------------------------------

//起動処理----------------------------------------------------------
// Excel起動
excel = EXEC(excelPath)
// 起動完了まで待つ(10秒以内想定)
sleep(10)
// ExcelのIDを取得
excel_id = GETID(GET_ACTIVE_WIN)

// IE起動
ie = EXEC(iePath)
// 起動完了まで待つ(10秒以内想定)
sleep(10)
// IEのIDを取得
ie_id = GETID(GET_ACTIVE_WIN)
//-----------------------------------------------------------------

//URLリストファイルを開く
txt_id = FOPEN(inputFilePath, F_READ)
//入力ファイルの行数を確認
rowNumOfFile = FGET(txt_id,-1)

//i行目を1行分だけ読むループで全部のURLを1行ずつ取得する
For i = 1 to rowNumOfFile
// URLの読み込み
bufferString = FGET(txt_id,i)
// IEをアクティブウィンドウに設定
acw(ie_id)
// 新しいタブを作る
CLKITEM(ie_id, "新しいタブ (Ctrl+T)")
//タブを作りきるまでスリープ(3秒想定)
sleep(3)
// アドレスバーにURLを入力
SENDSTR(ie_id, bufferString)
// Enterを押してサイトへアクセス
kbd(vk_enter,click,0)
// サイトの表示完了を待つ(10秒想定)
sleep(10)
// PrintScreenボタンを押す
sckey(0,VK_SNAPSHOT)
// Excelをアクティブウィンドウに設定
acw(excel_id)
// 貼りつけ
SCKEY(0, VK_CTRL, V)
// 次のURL用のワークシートの挿入
kbd(vk_shift,down,1000)
kbd(vk_f11,click,0)
kbd(vk_shift,up,10)
next

//読み込んだファイルのクローズ
FCLOSE(txt_id)

====================================================================


アクセスしたいサイトはこんなかんじでテキストファイルに羅列しておきます。

[ URLList.txt ]
====================================================================
http://www.takamagahara.com/printin/
http://jp.wsj.com/
http://www.nintendo.co.jp/
http://ja.wikipedia.org/wiki/%E5%AD%A6%E5%8A%9B
https://www.google.co.jp/search?hl=ja&lr=lang_ja&q=%E5%B3%B0%E3%81%AA%E3%82%86%E3%81%8B&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.&bpcl=38625945&biw=1366&bih=643&um=1&ie=UTF-8&tbm=isch&source=og&sa=N&tab=wi&ei=8amoUPi1CePqmAWes4HoBQ
http://www.microsoft.com/ja-jp/default.aspx
====================================================================

以下に自分用Tipsメモ

■よく考えれば当たり前な気がするけど、IEやOfficeはバージョンによってフルパスが異なるから、実行環境を確認しておくこと

■参考にしようとサイトググってると、Exec関数でプログラムを開いた戻り値がそのプログラムのIDとして使えるように見えるけど、なんかうまくいかなかったので、「GETID(GET_ACTIVE_WIN)」を使ってその時のアクティブウィンドウのIDを取得している

■キーボード操作はsckey()かkbd()で行う。その時に「どのキーボードを押すか」は専用の定数を使う。定数は「vk_hoge」の形で定義されている

■キーボードは押しっぱなし(Down)、ぽちっと押す(Click)、押しっぱなし解除(Up)がある。それぞれ待ち時間も指定できる

■clkitem()を使うと、今アクティブなウィンドウに対して「hogehogeをクリックして、それからfugafugaをクリックして」みたいな挙動が書ける。

■clkitem()で具体的な項目をクリックさせるにはそのアイテム名(名前)が必要。たとえば上記スクリプト内で、IEの新規タブ作成ボタンをクリックさせるために「"新しいタブ (Ctrl+T)"」というのを記述している。これはIE9がそのボタンに対して「新しいタブ (Ctrl+T)」という名前を定義しているからである。

■それはつまり、項目の名前が変わるとスクリプトを書き換えなきゃいけないということであり、名前が定義されていないものはclkitem()でクリックできないことになる。

■ではそのウィンドウのアイテムがどんな名前になっているかはどうやって調べればいいかというと、それはすでに偉大な先人がいて、ここに書いてあるスクリプトを実行してウィンドウパラメータを取得すると、バーっと名前が出てくるので、それを使う。数字とかじゃなくて本当に文字列な名前を使う。

■独自関数化(Function)できる

■テキストを入力できる状態ならsendstr()を使うと長い文字列もババっと入力できる


こんなところかな…。


これを取り扱った本もあるんですね。
評価が良くないのでアフィは張りませんが…。

短時間化できるものはドンドンやって、時間を作りたいものですね。
それだけのアイデアと実装力が必要ではありますが…精進精進。







2012年8月5日日曜日

電脳書房さんの不幸箱(2012年夏)を購入しました

TwitterのITクラスタにはお馴染みの電脳書房さん(

@bookcyber 

)がやっている不幸箱というものを買いました。

簡単に言えば福袋のようなものです。

ただ、不幸箱は福袋と違って明示的に
「これ売れ残りだからな!どうなってもしらんぞー!」
と謳っているところが違うし、ネタ的に面白いと思います。
福袋も暗にはそうなのかもしれませんが、一応
「良い物詰め合わせ」ですからね…。

箱はアリさんマークの某社のものでした。





一番上から数冊取り出してみると…お、オライリー!?


しかし売れなかったオライリーなだけあって、どれもちょっとだけ今のトレンドからずれちゃってる。
Googleのやつなんか感覚的に3世代ぐらい古い。
でもそれでもいろんなところで勉強になると思うからこれは普通に読むかなー。
Flashは多分使わないなー。今からFlashの勉強するにしても高い…お金ない…w
Oracleはちょっとオッっと思ったけど対応バージョンが7でした。
今は11が一番新しいのかな?10とか11とかじゃないとだめかもなー…
Eclipseの本は普通に読みたい。ちょうどこういう本欲しかったんだよね。


さて次はこれ!

うおー、い、一気に雰囲気が古臭くなってきた。
右三冊が強烈すぎる。これがあれか、
教科書でしか見たことがないPC-9800というやつか。
番号的にきっとその後継機ですよね。
ちょっと読んでみたけどやたらフェラーリの画像集を押していてワロタ
メモリを2Mも搭載しているらしい…。


         _人人人人人人人人人人人人人人人_
        >   そうなんだ、すごいね!      <
       ´ ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
            __、、=--、、         __
           /    ・ ゙!       /・   `ヽ
           | ・   __,ノ       (_    ・ |
           ヽ、 (三,、,         _)    /
            /ー-=-i'’       (____,,,.ノ
            |__,,/          |__ゝ
             〉  )          (  )



そして想像していた通りMS-DOSの本が…。
内容的にはCを使ったプログラムで面白そうであるが…
いかんせんレイヤ低すぎる。そしてDOS…。
このグループだと一番面白そうなのはクッキーの本かなー。
サーブレット/JSPの本はまだすぐ使えそうな本だけど、
私自信に興味が無いのと、そんな仕事が近くにないから距離感が…。


ちなみにこれ、UNIXの本なんですが…Disk付き!って書いてあるじゃん…?




ふ、フロッピー…しかもない。
今の学生さんはFDD触ったこと無いと聞きます。
私はギリギリありますね。高校生ごろから一気にUSBフラッシュメモリ・DVD・BDと置き換わっていったように感じます。


CQ!CQ!CQ! 「パケット通信」という名前の本でしたが、中身は思いっきりアマチュア無線でした。このへんも好きな人にはたまらんだろうなー。電波は苦手…波形の計算とか、波形の計算とか…。


こんな本もありました。やっぱり僕らはBASIC!
BASICて…でもVB6がまだ根強いシェア持ってるし、
実はBASICってすごいんだぞ!(たぶん)
この本はコラムが多いので教養本として読むことにします。




Pascalの本がある!俺Mac一台も持ってねぇ
DISK CHARGEという本はシーケンシャルアクセスを使ったプログラミングの本でした。
ストレージ屋さんならおっって思うのかなぁ…?




RS-232C!
人によっちゃ「新しいクルマですか?」とかいう流れになりそう。




うわー Lotus 1-2-3じゃないか!
すげー!



最後のグループ。
JSPとC#の本はまだ割りと使えそう。
あとJDBCの本は何気に当たりかも。
AndroidだとSqlite使うし、たぶん入門書として読める。

ネタ的に大当たりなのはたぶんこれ



インターネット最終戦争突入!
JavaでOSがなくなる!?
そういう話が流れてた頃もありました。
JavaはOSに依存しない素晴らしい言語なんです。
OS間の互換性とか移植性とか
普段は気にしませんが、必要に迫られると凄く重要になるトピックですよね。




9600bpsだと…?


ということで、以上約40冊の本を、そのまま本棚に収めることができるようなブルジョワなお家には住んでおりませんので、必要な本を選ぶ作業を行いました。




まず一次選抜として4つに分類。
--------------------------------
右上:読めば力になりそうだし、興味もある

右下:教養として読んでおくとどこかで役に立つ可能性があるし、
    ジャンル的に興味がる

左上:読めば力になりそうだけど、興味がない

左下:電子書籍化してくれるお店に転送
--------------------------------

さらに左下以外を再度選抜して以下のようになりました。




--------------------------------


左:読めば力になりそうだし、興味もある


中:興味がないけど、読めば力になりそうだからとっておく


右:教養として読んでおくとどこかで役に立つ可能性があるし、
    ジャンル的に興味がる

--------------------------------



【まとめ】
全体的な分野をまとめると、エンタープライズWebシステムみたいな感じのジャンル構成でまとまっていたように思います。特にJavaが多かった。
「お前Android使ってんだろJava勉強しろやゴルァ」と言われているようでした。
しかし思ったよりまとまっていた…。

もしかして、こんなつぶやきをしたから、あるものの中から見繕ってくれたのかな?














ということで、積み本がまた増えました。
もうしばらく新しい本いらんな…w

次は本棚が空っぽになるか、広いお部屋に引っ越したら
またお世話になります!





2012年7月8日日曜日

[PowerShell] 沢山のフォルダを自動で作ってくれるロボットできたよー\(^o^)/

沢山のフォルダを自動で作ってくれるPowerShell
「autoCreateFolders.ps1」書きました。
使い方は簡単。
1.まずこんな感じの「FolderList.txt」を作成します。

これは、フォルダツリーをタブで表したものです。
このファイルをインプットとして、このフォルダ構成の通りにフォルダを作成してくれます。

2.沢山のフォルダを作りたい場所に、ps1のファイルとFolderList.txtを置きます。

3.次に、PowerShellを起動します。実行権限はゆるくしておいてくださいね。


4.PowerShellのウィンドウにps1ファイルをドラッグ・アンド・ドロップしてEnterで実行します。

5.以下のように表示されれば成功です。フォルダができてるか確認してください。



4人のフォルダができています。


ちゃんとあのこの彼氏は三人目までいますね。


おかあさんの晩御飯も急遽炊込み御飯になっています。



もちろんお父さんに下町のナポレオンはありません。
かわいそうですね。


以下がプログラムです。
ちゃんと動くようになったので今日は黒霧島を飲もうと思います。
頑張った自分へのご褒美()


#-----------------------------------------------------------
# Author     :TearTheSky(てあざすかい)
# ProgramName:autoCreateFolders
# Discription:「FolderLists.txt」にかかれてあるフォルダ構成
#             の通りにフォルダを自動で作成します。
#-----------------------------------------------------------
#FolderLists.txtは定数として定義するので変更可能です
set-variable -name FolderLists -value "FolderLists.txt" -option constant

#-----------------------------------------------------------
# フォルダ作成関数
#-----------------------------------------------------------
Function Create-Folder( $folderName )
{
 if(Test-Path $folderName) {
 }
 else {
  $currentDirectory = Get-Location
  $createLocation = "$currentDirectory\$folderName"
  [void]$result = New-Item -type directory $createLocation
 }
}

#-----------------------------------------------------------
# 本編
#-----------------------------------------------------------
#このファイルがいる場所へカレントディレクトリを移動
$FilesPath = Split-Path $myInvocation.MyCommand.path
Set-Location $FilesPath

#FolderLists.txtの存在確認
$resultCheckFileExist = Test-Path -path $FolderLists
if($resultCheckFileExist -eq $false) {
 #いない場合は怒って終了
 Write-Host "そんなファイルは存在しません!"
 return
}
else {
 #存在する場合はファイルを読み込み
 $Input = Get-Content ".\$FolderLists" 
 #現在いる場所を示す変数$currentPath
 $currentPath = $filesPath 
 #このファイルがある場所を階層0とした時の
 #今いるフォルダ階層を示す変数$nowDepth
 $nowDepth = 0
 
 #配列の要素を追加する場合は += 演算子を利用しなければならない
 $lastPlace = @()
 $lastPlace += Get-Location | ForEach-Object{$_.Path}

 #$Inuputはテキストファイルそのものなのでそれを1行ずつ処理する
 ForEach($aLine in $Input) {
  #読み込んだ1行にかかれてあるフォルダ名でフォルダを
  #作成すべき階層を示す変数$depth
  $depth = 0
  #階層ごとの最後にいた場所を示す配列変数$lastPlace
  $lastPlace[$nowDepth] = Get-Location | ForEach-Object{$_.Path}
  
  #先頭のタブの数を確認し、それを階層とする
  for($index = 0; $aLine[$index] -eq "`t"; $index++) {
   $depth++
  }
  #----------------------------------
  #現在の階層との比較
  #----------------------------------
  #同じ階層の場合
  if($depth - $nowDepth -eq 0) {
   #タブ文字を取っ払う
   $createName = $aLine.SubString($depth)
   #フォルダをつくるよ!
   Create-Folder($createName)
   #作ったフォルダを次行くべきフォルダに設定
   $nextPath = $currentPath + "\" + $createName
  }
  #1つ下の階層の場合
  elseif($depth - $nowDepth -eq 1) {
   #次行くべきフォルダへ移動する
   Set-Location -path $nextPath
   #移動したので現在のフォルダパスとして今いる場所を設定
   $currentPath = Get-Location | ForEach-Object{$_.Path}
   #1つ下の階層に移動したはずなので階層をインクリメント
   $nowDepth++
   #タブ文字を取っ払う
   $createName = $aLine.SubString($depth)
   #フォルダをつくるよ!
   Create-Folder($createName)
   #次行くべき場所を設定(さっき作ったフォルダ)
   $nextPath = $currentPath + "\" + $createName
   #ここにいたことを$lastPlaceに記録する
   $lastPlace += Get-Location | ForEach-Object{$_.Path}
  }
  #階層が今いる場所より上だった場合(階層を戻る)
  elseif($depth - $nowDepth -lt 0) {
   #戻るべき場所へ戻る。戻ったら…
   Set-Location $lastPlace[$nowDepth - ($nowDepth - $depth)]
   #タブ文字を取っ払う
   $createName = $aLine.SubString($depth)
   #フォルダをつくるよ!
   Create-Folder($createName)
   #現在いる場所の階層数を$nowDepthに設定
   $nowDepth = $nowDepth - ($nowDepth - $depth)
   #移動したので現在のフォルダパスとして今いる場所を設定
   $currentPath = Get-Location | ForEach-Object{$_.Path}
   #次行くべき場所を設定(さっき作ったフォルダ)
   $nextPath = $currentPath + "\" + $createName
   #ここにいたことを$lastPlaceに記録する
   $lastPlace[$nowDepth] = Get-Location | ForEach-Object{$_.Path}
  }
  #どれにも当てはまらない場合
  else {
  #エラーメッセージを出力してスキップ
  write-host "フォルダ名:" + $aLine
  write-host "フォルダが作成できませんでした。階層指定が正しくない可能性があります。"
  Get-Location
  }
 }
 #最後にこのファイルがある場所へ戻って終了
 Set-Location $FilesPath
}

乙 いいちこフラスコボトル 麦30° 720ML
最近いいちこすごっくオシャレですよね。広告とか。
実はまだ飲んだことがない。
今度買ってみようかな。



:2012/07/09 追記;
・定義ファイルの説明を追記
・プログラムの一部を修正
定義ファイル「FolderLists.txt」が存在しない場合の出力が
Out-Stringでは正常に動作しない。
ので、Write-Hostを利用するよう修正



2012年6月27日水曜日

[PowerShell] 拡張子を見て整理してくれるロボット

PowerShellで簡単なプログラムを書いてみました。
簡単なと言っても自分にとってはわりと難しくて 4時間くらいかかっちゃいましたが…
 Windows7にある「ダウンロード」フォルダ内に散らばってる
色んなお宝を拡張子で分けて拡張子フォルダを作って
そこに片付けてくれます。


#-----------------------------------------------------------
#ガシャーン。拡張子判断ロボだよ。
#拡張子の名前でフォルダを作って放り込むすごいやつだよ
#-----------------------------------------------------------

#-----------------------------------------------------------
#フォルダ作成関数
#-----------------------------------------------------------
Function Create-Folder( $folderName )
{
 if(Test-Path $folderName)
 {
 }
 else
 {
  $currentDirectory = Get-Location
  $createLocation = "$currentDirectory\$folderName"
  New-Item -type directory $createLocation
 }
}

#-----------------------------------------------------------
#Main的な
#-----------------------------------------------------------
#PowerShellの実行権限を一時的にRestrictedまで拡大し実行可能にする
$myPolicy = Get-ExecutionPolicy
if( $myPolicy -ne "Unrestricted" )
{
 set-executionpolicy Unrestricted
}

#実行しているユーザ名を取得し、それを利用して「ダウンロード」フォルダへ移動する。
$targetDirectory = "C:\Users\" + $env:username + "\Downloads\"
cd $targetDirectory

#「ダウンロード」フォルダ内のすべてのファイルを配列として変数に格納
$downloadItems = Get-ChildItem

Foreach( $aItem in $downloadItems )
{
 #フォルダ/ファイル判定
 if ( $aItem.PSIsContainer )
 {
  Write-Host "フォルダ: " -NoNewLine
  write-host "$aItem - フォルダなので無視します。"
 }
 else
 {
  Write-Host "ファイル: " -NoNewLine
  write-host $aItem.PSChildName
  #ファイルなら拡張子の文字数を確認
  [string]$itemName = $aItem.PSChildName
  $intNuberOfKakutyousi = $itemName.length - $itemName.LastIndexOfany(".") - 1
  $kakutyousi = $itemName.substring( $itemName.length - $intNuberOfKakutyousi )
  Create-Folder($kakutyousi)
  Move-Item $aItem $kakutyousi
 }
}

#ExecutionPolicyをもとに戻す
if( $myPolicy -ne "Unrestricted" )
{
 Set-ExecutionPolicy $myPolicy
}


ていうかさ、このコードを色分けしてくれる機能すごいね。
 ここを参考にさせていただきました。 PowerShell自体は、
PowerShell基礎文法最速マスター と、TechNetのコマンドレット一覧と、
あとVBScript使ったことある人ならここもすごく役に立ちます。

 ひとまずブログに書けた。 ホントはGitの練習してGithubにアップしたい。



2012年6月9日土曜日

[Linux] VPSのrootユーザのパスワード忘れた


久しぶりにおうちでカタカタやったらいろいろひどかった…

・VPSにroot以外のユーザ作ってなかった。
・そしてrootのパスワード忘れた
・だから何もできなくなり、VPSのOS再インストール
・Botが載ってたけどいろいろデグレード
・なんとか復活したけど自動リプライ機能を失った
・なんでソースコード取ってないの俺…

ということで、Linuxの基本的な設定をいくつかやりました。
知識としてはだいぶ初級編。
でもコマンドでアカウント作成とか初めてやった…。


■Linuxに新規ユーザを追加
useraddコマンド
(参考)
http://kazmax.zpp.jp/linux_beginner/useradd.html

何かを作成するときはたいていコマンドでパパっとやっちゃう方法と
対話(Windowsならウィザード)でひとつひとつ入力していく方法が
あると思います。対話式だと多少めんどくさいけど、
意識しなきゃいけない設定はたいてい入力を促されるので便利。

今回はコマンド1行でアカウントを作成。しかしそのかわりに
ユーザに関する設定はほとんど行わず…そういう場合どうなるのか?
デフォルト値ですね。入力しなかった設定に関してはデフォルトの設定が
適用されて、それで勝手に作成される。
Linuxユーザ新規作成のデフォルト設定の確認は「useradd -D」コマンド。

CentOS release 6.2 (Final) x86_64 の場合の
デフォルトの設定はこうだった。
------------------------------
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
------------------------------

各設定の意味は上記の(参考)のページを確認してみましょう。
もっと勉強してbash以外のShellがイイ!とか言ってみたいなぁ…。
/etc/skel は覚えておくと便利かも。ユーザプロファイルのスケルトン
(ひな形)です。業務で間違ってrootユーザのプロファイル消しちゃって
上司からここ使えって教えてもらったことがあります…w


■新規作成したユーザに対するパスワードの作成
で、useraddコマンドで作成した
useraddコマンドで追加したユーザはパスワードを持っていないため
passwdコマンドでパスワードを作成する
http://www.geocities.jp/a1770053/jyoho/scsa/chapter6.htm
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230854/


■rootでのログインを禁止する
http://wiki.minaco.net/index.php?Linux%2Froot%E3%81%AB%E3%82%88%E3%82%8B%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E7%A6%81%E6%AD%A2
WindowsのAdministratorやLinuxのrootはユーザ名がわかってるから、
それだけでもう大きなセキュリティリスクとなります。
どこのおうちにいってもAdministratorはAdministratorだもんね。
なので、ログオンできなくしてしまいましょう。
/etc/ssh/sshd_config をエディタで開いて
「PermitRootLogin no」という行を追加してあげればいいみたいですね。
デフォルトだとyesにはなっているものの、
#PermitRootLogin yes とコメントアウトされているから、
何も書かなければログオンできる、ということなのでしょう。
#を外してyesをnoに変えるのでもいいですが、
私はすぐ下の行に「PermitRootLogin no」を書いてやる
書き方の方が好きです。そのへんは好みで済ませていいのかな?
こういうタイプの人が業務用プログラムを改修したときに前のコードを
コメントアウトして残してたりするのかな?まぁいっか。


■Botのデグレードした機能「定期Post」を復活させる
1時間に1回つぶやいていたので、それを復活させる。
cron.dに自分のBot用のcronファイルを作成し、そこにコマンドを書いてあげる
cronファイルの書き方は以下がわかりやすい。
http://www.server-memo.net/tips/crontab.html

適当な名前のCronが書かれているファイル…
、たとえば「CronOfBot」とかを作って、それをOSが決めている
「お前がつくった『ぼくのかんがえたさいきょうCron』はここに置け」
っていう場所に置いてあげる。
場所はCentOSの場合 /etc/cron.d/ の中。
覚えておくと便利なんだけど、CronでもApacheのモジュール用設定ファイルでも、
「おまえが作った『ぼくのさいきょう○○』はここに置け」っていうディレクトリ名は
○○.dってなっている。


■ファイルやディレクトリの所有者を変更
ファイルやディレクトリの所有者を変えるだけなら chown コマンドでおk。
その所有者に代行してもらうなら su コマンドでそのユーザになるか、
sudoコマンドで「管理者権限で実行」する。
sudoコマンドを使えるようにするには設定ファイルの編集が必要。

普段の作業用アカウントを作って、そいつでcronファイルを書いたまではいいが、
作ったcronファイルが/etc/cron.d/ディレクトリ内へコピーできない。
それは/etc/cron.d/ディレクトリの所有者がrootになっていて、
自分じゃコピーさせてもらえないから。
そういう場合の選択肢は3つ。
    1.諦める
    2.そのディレクトリの所有者に代わりにコピーしてもらう
    3.自分がそのディレクトリの所有者になる。

2.か3.を行うわけだけど、今回の場合は2.のほうがいいですよね。
/etc以下のディレクトリはWindowsでいえば「C:\Windows」みたいな
システム用の場所なので1ユーザの所有物にしちゃ(きっと)ダメです。

ということでsuコマンドでrootになってコピーしました。
あ、「su -」したほうがいいんだっけ…?あとで調べる。

で、いままで知らなかったんですけど、sudoコマンドには設定ファイルがあって、
そこをへんこうしてやらないと新しく作ったユーザはsudoできないんですよ。
/etc/sudoers っていうファイルを編集するんだけど、
visudo っていう専用コマンドで編集する。crontabみたいな。
下のページにものすごく詳しく書かれていて、とても参考になります。
http://linux.kororo.jp/cont/intro/sudo.php

こんなページを書ける人はすごいな…

で、なにすればいいかというと、自分がsudoしたいユーザを
追記してあげればいいです。

適当なところ…たとえばざっとファイルを見てみるとこういう場所がありました。

------------------------------
## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL
------------------------------

ここにこんな感じで追記してみました。
------------------------------
## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL
%Ore        ALL=(ALL)       ALL
------------------------------

そしたら俺(Ore)はsudoできるようになりました。
でもぶっちゃけこれでいい気がする。
------------------------------
## Allows people in group wheel to run all commands
%wheel        ALL=(ALL)       ALL
------------------------------

ユーザがWheelグループに入ってればだけど。


あー、スキルが足りない。
設定周りでやるべきこと他にありましたらぜひ教えて下さい!





2012年4月10日火曜日

CentOS 6.2にTrac 0.12.3をインストール


CentOS release 6.2 にTrac 0.12.3を入れた時のメモ

[必要なアイテム]
・Apache
・Python
・mod_python
・PostgreSQL
・Genshi
・Trac


[Apacheについて]
インストール時のパッケージ選択で入れた。(というか入る)
CentOSでのApacheを取り扱う際に最低限知っておかないといけないことは
(もっとあるだろうけど)以下に。
・httpd.confの場所
    /etc/httpd/conf/httpd.conf
・httpdの再起動
    /etc/init.d/httpd restart
・Apacheモジュール用(mod_pythonとか)のconfファイルの場所
     /etc/httpd/conf.d/


[Pythonについて]
CentOSはデフォでPythonが入る。
CentOS6.2が持ってるPythonのバージョンは2.6
私のCentOSはPython学習用に3.1を入れて、普段はそちらを起動するようにしています。
で、システムでは2.6を使うし、今回のインストールにも2.6を使ったので、
バージョンの使い分けに気をつける必要がありそう。


[mod_pythonについて]
最後に対応したので最後に書く


[PostgreSQLについて]
まずはインストールされてるのかを確認した。
下のサイトを読んで、確認は「rpm -qa」コマンドで行った。

CentOS で PostgreSQL を使ってみよう!(1)
http://lets.postgresql.jp/documents/tutorial/centos
--------------------------------------------------------
rpm -qa | grep Posposgtrgre
postgresql-contrib-8.4.9-1.el6_1.1.i686
postgresql-8.4.9-1.el6_1.1.i686
postgresql-libs-8.4.9-1.el6_1.1.i686
postgresql-docs-8.4.9-1.el6_1.1.i686
postgresql-server-8.4.9-1.el6_1.1.i686
postgresql-plpython-8.4.9-1.el6_1.1.i686
postgresql-odbc-08.04.0200-1.el6.i686
--------------------------------------------------------
8.4.9がインストールされている。最新版は9.1とかだけど、まぁいいか、
最新版に対応するのはとりあえずひと通り構成できるようになってからかな…。
ということでデフォルトでインストールされているPostgreSQLでTracを構成する。

早速試しにPostgreSQLを触ってみる。
--------------------------------------------------------
[root@Cent6-003-tan ~]# psql
psql: サーバに接続できませんでした: そのようなファイルやディレクトリはありません
                              ローカルにサーバが稼動していますか?
                              Unixドメインソケット"/tmp/.s.PGSQL.5432"で通信を受け付けていますか?
--------------------------------------------------------
ん?もしかして起動してないのかな?
ということで起動させてみる。
--------------------------------------------------------
[root@Cent6-003-tan ~]# /etc/init.d/posgres starttgresql start

/var/lib/pgsql/data is missing. Use "service postgresql initdb" to initialize the cluster first.
[失敗]
[root@Cent6-003-tan ~]# /etc/init.d/postgresql startrestart
postgresql サービスを停止中: [  OK  ]

/var/lib/pgsql/data is missing. Use "service postgresql initdb" to initialize the cluster first.
[失敗]
--------------------------------------------------------
起動も再起動も失敗…。なぜ??
あ、「postgresユーザ」になる必要がある?
--------------------------------------------------------
[root@Cent6-003-tan ~]# su -p posgtgres
-bash-4.1$ psql -l
psql: サーバに接続できませんでした: そのようなファイルやディレクトリはありません
                              ローカルにサーバが稼動していますか?
                              Unixドメインソケット"/tmp/.s.PGSQL.5432"で通信を受け付けていますか?
--------------------------------------------------------
違う…。わからん!ここでググった。その結果、
データベースクラスタの初期化をやっとらんではないか。
ということで以下のページを参考にさせていただいた。

使えば分かるPostgreSQL運用&チューニング(1)
PostgreSQL導入から接続まで
http://www.atmarkit.co.jp/fdb/rensai/postgresql/01/pgtune1-2.html

initdbコマンドをpostgresユーザで実行する。
--------------------------------------------------------
-bash-4.1$ exit
logout
[root@Cent6-003-tan ~]#
[root@Cent6-003-tan ~]# su - postgres
-bash-4.1$ initdb --encoding=UTF8 --no-locale
データベースシステム内のファイルの所有者は"postgres"ユーザでした。
このユーザがサーバプロセスを所有しなければなりません。

データベースクラスタはロケールCで初期化されます。
デフォルトのテキスト検索設定はenglishに設定されました。

ディレクトリ/var/lib/pgsql/dataの権限を設定しています ... ok
サブディレクトリを作成しています ... ok
デフォルトのmax_connectionsを選択しています ... 100
デフォルトの shared_buffers を選択しています ... 32MB
設定ファイルを作成しています ... ok
/var/lib/pgsql/data/base/1にtemplate1データベースを作成しています ... ok
pg_authidを初期化しています ... ok
依存関係を初期化しています ... ok
システムビューを作成しています ... ok
システムオブジェクトの定義をロードしています ... ok
変換を作成しています ... ok
ディレクトリを作成しています ... ok
組み込みオブジェクトに権限を設定しています ... ok
情報スキーマを作成しています ... ok
template1データベースをバキュームしています ... ok
template1からtemplate0へコピーしています ... ok
template1からpostgresへコピーしています ... ok

警告: ローカル接続向けに"trust"認証が有効です。
pg_hba.confを編集する、もしくは、次回initdbを実行する時に-Aオプショ
ンを使用することで変更することができます。

成功しました。以下を使用してデータベースサーバを起動することができます。

    postgres -D /var/lib/pgsql/data
または
    pg_ctl -D /var/lib/pgsql/data -l logfile start

-bash-4.1$ exit
logout
[root@Cent6-003-tan ~]# /etc/init.d/postgresql restart
postgresql サービスを停止中: [  OK  ]
postgresql サービスを開始中: [  OK  ]
--------------------------------------------------------
PostgreSQLの再起動もやってみたらちゃんとオッケー☆が出た。


試しに再度psqlコマンドでPostgreSQLを触ってみる。
--------------------------------------------------------
[root@Cent6-003-tan ~]# su - posgtgres
-bash-4.1$ psql -l
                                        データベース一覧
   名前    |  所有者  | エンコーディング | 照合順序 | Ctype(変換演算子) |    
クセス権    
-----------+----------+------------------+----------+-------------------+-------
----------------
 postgres  | postgres | UTF8             | C        | C                 |
 template0 | postgres | UTF8             | C        | C                 | =c/pos
tgres
                                                                        : postgr
es=CTc/postgres
 template1 | postgres | UTF8             | C        | C                 | =c/pos
tgres
                                                                        : postgr
es=CTc/postgres
(3 行)
--------------------------------------------------------
よし。

[Subversionについて]
とりあえずyumでインストールできるようなのでやってみる。
--------------------------------------------------------
[root@Cent6-003-tan ~]# yum install subversion
Loaded plugins: fastestmirror, security
Determining fastest mirrors
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Setting up Install Process
Package subversion-1.6.11-2.el6_1.4.i686 already installed and latest version
Nothing to do
--------------------------------------------------------
もう入ってる言われた。

Apache用モジュールっぽい「mod_dav_svn」も入ってる?
--------------------------------------------------------
[root@Cent6-003-tan ~]# yum install mod_dav_svn
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Setting up Install Process
Package mod_dav_svn-1.6.11-2.el6_1.4.i686 already installed and latest version
Nothing to do
--------------------------------------------------------
入ってるようだ。

[Tracについて]
じゃあ本体であるTracのインストールに取り掛かりましょう。
プログラムは日本語化パッケージを提供してるインタアクト社からダウンロードさせていただきます。
http://www.i-act.co.jp/project/products/products.html
落としたZipはお好きな場所へ。今回は/usr/local/src
--------------------------------------------------------
[root@Cent6-003-tan ~]# cd /usr/local/src/
[root@Cent6-003-tan src]# ls
Python-3.1.2  Python-3.1.2.tgz  Trac-0.12.3.ja2.zip  postgresql-9.1.3.tar.gz  python
[root@Cent6-003-tan src]# unxzip Trac-0.12.3.ja2.zip
(省略)
[root@Cent6-003-tan src]# ls
Python-3.1.2      Trac-0.12.3.ja2      postgresql-9.1.3.tar.gz
Python-3.1.2.tgz  Trac-0.12.3.ja2.zip  python
[root@Cent6-003-tan src]# cd Trac-0.12.3.ja2
[root@Cent6-003-tan Trac-0.12.3.ja2]# ls
AUTHORS            Makefile.cfg.sample  cgi-bin          setup_wininst.bmp
COPYING            README               contrib          trac
COPYING.trac-ja    README.trac-ja       doc              tracopt
ChangeLog          RELEASE              messages-js.cfg  wiki-macros
ChangeLog.trac-ja  TESTING-README       sample-plugins
INSTALL            THANKS               setup.cfg
Makefile           UPGRADE              setup.py
--------------------------------------------------------
よしいけた。setup.pyを実行してインストールするらしい。

[setup.pyができないよ…?]
むげんのかなたへーさーいくぞー
--------------------------------------------------------
[root@Cent6-003-tan Trac-0.12.3.ja2]# python setup.up.py install
  File "setup.py", line 21
    print "Trac requires Python %d.%d or later" % min_python
                                              ^
SyntaxError: invalid syntax
--------------------------------------------------------
あれ?
…あ、OSが使ってるPythonは2.6だからこうしなきゃってこと?
--------------------------------------------------------
[root@Cent6-003-tan Trac-0.12.3.ja2]# python2.6 setup.py install
Traceback (most recent call last):
  File "setup.py", line 160, in
    **extra
  File "/usr/lib/python2.6/distutils/core.py", line 113, in setup
    _setup_distribution = dist = klass(attrs)
  File "/usr/lib/python2.6/site-packages/setuptools/dist.py", line 221, in __init__
    self.fetch_build_eggs(attrs.pop('setup_requires'))
  File "/usr/lib/python2.6/site-packages/setuptools/dist.py", line 245, in fetch_build_eggs
    parse_requirements(requires), installer=self.fetch_build_egg
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 550, in resolve
    raise VersionConflict(dist,req) # XXX put more info here
pkg_resources.VersionConflict: (Genshi 0.5.1 (/usr/lib/python2.6/site-packages), Requirement.parse('Genshi>=0.6,<0.7dev'))
--------------------------------------------------------
なんか違うな…Pythonわかんないからエラー読めねぇや…。

(1時間経過)

…あ、Genshiインストールしてねぇじゃん!
ということでここからダウンロード

Genshi Downloads
http://genshi.edgewall.org/wiki/Download

そしてインストール。eggファイルなのでPythonのインストーラである
easy_installを使う。
--------------------------------------------------------
[root@Cent6-003-tan Trac-0.12.3.ja2]# cd /usr/local/src/
[root@Cent6-003-tan src]# ls
Genshi-0.6-py2.6.egg  Python-3.1.2.tgz  Trac-0.12.3.ja2.zip      python
Python-3.1.2          Trac-0.12.3.ja2   postgresql-9.1.3.tar.gz
[root@Cent6-003-tan src]# easy_install Genshi-0.6-py2.6.egg
Processing Genshi-0.6-py2.6.egg
creating /usr/lib/python2.6/site-packages/Genshi-0.6-py2.6.egg
Extracting Genshi-0.6-py2.6.egg to /usr/lib/python2.6/site-packages
Adding Genshi 0.6 to easy-install.pth file

Installed /usr/lib/python2.6/site-packages/Genshi-0.6-py2.6.egg
Processing dependencies for Genshi==0.6
Finished processing dependencies for Genshi==0.6
--------------------------------------------------------
Finished!
さぁ今度こそ、無限の彼方へ、さぁ行くぞ!
--------------------------------------------------------
[root@Cent6-003-tan src]# cd Trac-0.12.3.ja2
[root@Cent6-003-tan Trac-0.12.3.ja2]# pypython2.6 setup.py install
running install
running bdist_egg
running egg_info
creating Trac.egg-info
writing requirements to Trac.egg-info/requires.txt
writing Trac.egg-info/PKG-INFO
writing top-level names to Trac.egg-info/top_level.txt
writing dependency_links to Trac.egg-info/dependency_links.txt
writing entry points to Trac.egg-info/entry_points.txt
writing manifest file 'Trac.egg-info/SOURCES.txt'
reading manifest file 'Trac.egg-info/SOURCES.txt'
writing manifest file 'Trac.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-i686/egg
running install_lib
running compile_catalog_js
compiling catalog 'trac/locale/es/LC_MESSAGES/messages-js.po' to 'trac/locale/es/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/zh_CN/LC_MESSAGES/messages-js.po' to 'trac/locale/zh_CN/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/ru/LC_MESSAGES/messages-js.po' to 'trac/locale/ru/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/sv/LC_MESSAGES/messages-js.po' to 'trac/locale/sv/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/fi/LC_MESSAGES/messages-js.po' to 'trac/locale/fi/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/fr/LC_MESSAGES/messages-js.po' to 'trac/locale/fr/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/tr/LC_MESSAGES/messages-js.po' to 'trac/locale/tr/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/nb/LC_MESSAGES/messages-js.po' to 'trac/locale/nb/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/nl/LC_MESSAGES/messages-js.po' to 'trac/locale/nl/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/en_GB/LC_MESSAGES/messages-js.po' to 'trac/locale/en_GB/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/eo/LC_MESSAGES/messages-js.po' to 'trac/locale/eo/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/he/LC_MESSAGES/messages-js.po' to 'trac/locale/he/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/zh_TW/LC_MESSAGES/messages-js.po' to 'trac/locale/zh_TW/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/ca/LC_MESSAGES/messages-js.po' to 'trac/locale/ca/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/hy/LC_MESSAGES/messages-js.po' to 'trac/locale/hy/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/es_AR/LC_MESSAGES/messages-js.po' to 'trac/locale/es_AR/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/en_US/LC_MESSAGES/messages-js.po' to 'trac/locale/en_US/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/sl/LC_MESSAGES/messages-js.po' to 'trac/locale/sl/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/de/LC_MESSAGES/messages-js.po' to 'trac/locale/de/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/pt_BR/LC_MESSAGES/messages-js.po' to 'trac/locale/pt_BR/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/hu/LC_MESSAGES/messages-js.po' to 'trac/locale/hu/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/it/LC_MESSAGES/messages-js.po' to 'trac/locale/it/LC_MESSAGES/messages-js.mo'
compiling catalog 'trac/locale/ja/LC_MESSAGES/messages-js.po' to 'trac/locale/ja/LC_MESSAGES/messages-js.mo'
running generate_messages_js
generating messages javascript 'trac/locale/es/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/es.js'
generating messages javascript 'trac/locale/zh_CN/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/zh_CN.js'
generating messages javascript 'trac/locale/ru/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/ru.js'
generating messages javascript 'trac/locale/sv/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/sv.js'
generating messages javascript 'trac/locale/fi/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/fi.js'
generating messages javascript 'trac/locale/fr/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/fr.js'
generating messages javascript 'trac/locale/tr/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/tr.js'
generating messages javascript 'trac/locale/nb/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/nb.js'
generating messages javascript 'trac/locale/nl/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/nl.js'
generating messages javascript 'trac/locale/en_GB/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/en_GB.js'
generating messages javascript 'trac/locale/eo/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/eo.js'
generating messages javascript 'trac/locale/he/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/he.js'
generating messages javascript 'trac/locale/zh_TW/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/zh_TW.js'
generating messages javascript 'trac/locale/ca/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/ca.js'
generating messages javascript 'trac/locale/hy/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/hy.js'
generating messages javascript 'trac/locale/es_AR/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/es_AR.js'
generating messages javascript 'trac/locale/en_US/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/en_US.js'
generating messages javascript 'trac/locale/sl/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/sl.js'
generating messages javascript 'trac/locale/de/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/de.js'
generating messages javascript 'trac/locale/pt_BR/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/pt_BR.js'
generating messages javascript 'trac/locale/hu/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/hu.js'
generating messages javascript 'trac/locale/it/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/it.js'
generating messages javascript 'trac/locale/ja/LC_MESSAGES/messages-js.mo' to 'trac/htdocs/js/messages/ja.js'
running compile_catalog
compiling catalog 'trac/locale/es/LC_MESSAGES/messages.po' to 'trac/locale/es/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/zh_CN/LC_MESSAGES/messages.po' to 'trac/locale/zh_CN/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/ko/LC_MESSAGES/messages.po' to 'trac/locale/ko/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/ru/LC_MESSAGES/messages.po' to 'trac/locale/ru/LC_MESSAGES/messages.mo'
catalog 'trac/locale/fa/LC_MESSAGES/messages.po' is marked as fuzzy, skipping
compiling catalog 'trac/locale/sv/LC_MESSAGES/messages.po' to 'trac/locale/sv/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/fi/LC_MESSAGES/messages.po' to 'trac/locale/fi/LC_MESSAGES/messages.mo'
catalog 'trac/locale/el/LC_MESSAGES/messages.po' is marked as fuzzy, skipping
compiling catalog 'trac/locale/cs/LC_MESSAGES/messages.po' to 'trac/locale/cs/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/pt/LC_MESSAGES/messages.po' to 'trac/locale/pt/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/fr/LC_MESSAGES/messages.po' to 'trac/locale/fr/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/tr/LC_MESSAGES/messages.po' to 'trac/locale/tr/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/nb/LC_MESSAGES/messages.po' to 'trac/locale/nb/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/nl/LC_MESSAGES/messages.po' to 'trac/locale/nl/LC_MESSAGES/messages.mo'

(略)

Installed /usr/lib/python2.6/site-packages/Trac-0.12.3.ja2-py2.6.egg
Processing dependencies for Trac==0.12.3.ja2
Searching for Genshi==0.6
Best match: Genshi 0.6
Processing Genshi-0.6-py2.6.egg
Genshi 0.6 is already the active version in easy-install.pth

Using /usr/lib/python2.6/site-packages/Genshi-0.6-py2.6.egg
Searching for distribute==0.6.10
Best match: distribute 0.6.10
Adding distribute 0.6.10 to easy-install.pth file
Installing easy_install script to /usr/bin
Installing easy_install-2.6 script to /usr/bin

Using /usr/lib/python2.6/site-packages
Finished processing dependencies for Trac==0.12.3.ja2
--------------------------------------------------------
キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
ホントにインストールされたのか確認。
--------------------------------------------------------
[root@Cent6-003-tan Trac-0.12.3.ja2]# installtrac-admin help
trac-admin - Trac 管理コンソール 0.12.3.ja2

Usage: trac-admin [コマンド [サブコマンド] [オプション ...]]

コマンドを省略して trac-admin を実行すると、対話モードで起動します。

help     Show documentation
initenv  Create and initialize a new environment
--------------------------------------------------------
ちゃんと来てます!


[Subversionの準備とか]
主にディレクトリ作ってリポジトリ(プロジェクト?)作る。
場所は/var/svn
--------------------------------------------------------
[root@Cent6-003-tan Trac-0.12.3.ja2]# mkdir /var/svn
[root@Cent6-003-tan Trac-0.12.3.ja2]# cd /var/svn/
[root@Cent6-003-tan svn]# ls
[root@Cent6-003-tan svn]# pwd
/var/svn
[root@Cent6-003-tan svn]# svnadmin create PumpkinsProject
[root@Cent6-003-tan svn]# ls
PumpkinsProject
[root@Cent6-003-tan svn]# ls PumpkinsProject/
README.txt  conf  db  format  hooks  locks
[root@Cent6-003-tan svn]# cd ~
--------------------------------------------------------
この本に書いてる通りにやってます…。



チェックアウトの概念を正確に理解できてないけど、マウントっぽいノリってことでいいの?
いや、リポジトリから放出してるんだろうけどさ…勉強不足…。
--------------------------------------------------------
[root@Cent6-003-tan ~]# svn co file:///var/svn/birdPumpkinsProject/
リビジョン 0 をチェックアウトしました。
[root@Cent6-003-tan ~]# cd PumpkinsProject/
[root@Cent6-003-tan PumpkinsProject]# ls -la
合計 12
drwxr-xr-x  3 root root 4096  4月 10 04:06 2012 .
dr-xr-x---. 5 root root 4096  4月 10 04:06 2012 ..
drwxr-xr-x  6 root root 4096  4月 10 04:06 2012 .svn
[root@Cent6-003-tan PumpkinsProject]# svn mkdir trunk branches tags
A         trunk
A         branches
A         tags
[root@Cent6-003-tan PumpkinsProject]# svn commit -nm 'Create working directory.'
追加しています              branches
追加しています              tags
追加しています              trunk

リビジョン 1 をコミットしました。
[root@Cent6-003-tan PumpkinsProject]# cd trunk/
[root@Cent6-003-tan trunk]# pwd
/root/PumpkinsProject/trunk
[root@Cent6-003-tan trunk]# ls
kansei.png  sample.py ←持ってきた
[root@Cent6-003-tan trunk]# scvn add sample.py kanasei.png
A         sample.py
A  (bin)  kansei.png
[root@Cent6-003-tan trunk]# snvn commit -m 'Added new files.'
追加しています  (バイナリ)  trunk/kansei.png
追加しています              trunk/sample.py
ファイルのデータを送信しています ..
リビジョン 2 をコミットしました。
--------------------------------------------------------

次はTracのプロジェクト用ディレクトリとかを作る。
「trac-admin ○○○(ProjectName) initenv」コマンドを実行する。
--------------------------------------------------------
[root@Cent6-003-tan trunk]# cd /var/
[root@Cent6-003-tan var]# mkdir trac
[root@Cent6-003-tan var]# pwd
/var
[root@Cent6-003-tan var]# cd trac/
[root@Cent6-003-tan trac]# pwd
/var/trac
[root@Cent6-003-tan trac]# trac-admin  PumppkinsProject initenv
新規 Trac Environment /var/trac/PumpkinsProject の生成

はじめに、プロジェクトのデータベースの初期化と準備をするために、
あなたの環境についていくつか確認をします。

 プロジェクトの名前を入力してください。
 この名前は、ページのタイトルと説明に使用されます。

プロジェクト名 [My Project]> PumpkinsProject

 使用するデータベースへの接続文字列を指定してください。
 デフォルトではローカルに SQLite データベースを作成します。
 既に存在する PostgreSQL データベースを使うこともできます。
 (Trac では、接続文字列は厳密に表記する必要があります。
 詳細は Trac のドキュメントを参照してください)

データベース接続文字列 [sqlite:db/trac.db]>
--------------------------------------------------------
ここで困った…。
「データベース接続文字列」ってなんだ??
ということでググってみた。わかった。ここに書いてあった。ありがとうございます。

TracEnvironment – EC-CUBE Trac
http://svn.ec-cube.net/open_trac/wiki/TracEnvironment

読むまで気づかなかったけど、接続用のデータベースを作成しないといけない。
ということで作成する。別に外部に公開しないからいいんだけど、
外部公開用のサーバはユーザ名とかパスワードとか分かりやすいものにしちゃダメですよ。
(今回はユーザ名とパスワードを同じにした。)
ということで、もいっこターミナルを立てて、そっちで別途作業を行った。
--------------------------------------------------------
Last login: Tue Apr 10 03:00:42 2012 from 192.168.11.2
[root@Cent6-003-tan ~]# createuser -U postgres -E -P tracuser
新しいロールのパスワード:
もう一度入力してください:
新しいロールをスーパーユーザとしますか?  (y/n)n
新しいロールにデータベース作成権限を与えますか? (y/n)n
新しいロールにロールを作成する権限を与えますか? (y/n)n
[root@Cent6-003-tan ~]# createdb -U postgres -O tracuser -E UTF8 trac
--------------------------------------------------------
「tracuser」というユーザを作って、パスワードを決めて、
tracuserが所持するUTF-8エンコードのtracというデータベースを作った。
で、最初の方のターミナルに戻る。
--------------------------------------------------------
データベース接続文字列 [sqlite:db/trac.db]> postgres://tracuser:tracuser@localhost/trac

プロジェクトの生成と初期化
 デフォルトの Wiki ページのインストール
  TracRss を /usr/lib/python2.6/site-packages/Trac-0.12.3.ja2-py2.6.egg/trac/wiki/default-pages/TracRss からインポートしました
  TracRevisionLog を /usr/lib/python2.6/site-packages/Trac-0.12.3.ja2-py2.6.egg/trac/wiki/default-pages/TracRevisionLog からインポートしました
  TracSearch を /usr/lib/python2.6/site-packages/Trac-0.12.3.ja2-py2.6.egg/trac/wiki/default-pages/TracSearch からインポートしました
  TracBrowser を /usr/lib/python2.6/site-packages/Trac-0.12.3.ja2-py2.6.egg/trac/wiki/default-pages/TracBrowser からインポートしました
  TracRepositoryAdmin を /usr/lib/python2.6/site-packages/Trac-0.12.3.ja2-py2.6.egg/trac/wiki/default-pages/TracRepositoryAdmin からインポー

トしました

(略)

  TracImport を /usr/lib/python2.6/site-packages/Trac-0.12.3.ja2-py2.6.egg/trac/wiki/default-pages/TracImport からインポートしました
  TracChangeset を /usr/lib/python2.6/site-packages/Trac-0.12.3.ja2-py2.6.egg/trac/wiki/default-pages/TracChangeset からインポートしました
  TracNotification を /usr/lib/python2.6/site-packages/Trac-0.12.3.ja2-py2.6.egg/trac/wiki/default-pages/TracNotification からインポートしました

---------------------------------------------------------------------
Trac Environment 'PumpkinsProject' ができました。

今後、この環境の設定をする場合は、次のファイルを利用します:

  /var/trac/PumpkinsProject/conf/trac.ini

あなたがこの新しいプロジェクトのテストを考えているなら、
スタンドアロンウェブサーバ `tracd` を試してみてください:

  tracd --port 8000 /var/trac/PumpkinsProject

それから、ブラウザで http://localhost:8000/PumpkinsProject にアクセスします。
インストールしたバージョンに合わせた今後のセットアップ情報などが含まれた、
ドキュメントが閲覧できます。(例えばウェブサーバで公開する手順など)

最新のドキュメントは、プロジェクトのウェブサイトから入手できます:

  http://trac.edgewall.org/

Congratulations!
--------------------------------------------------------
きたわこれ。

あとはApacheの設定をちょっとやればおk。

[mod_pythonについて]
後回しにしてたmod_pythonについて。
実はインストールされてあるものだと思ったらなかった。
yumで一発だろと思ったらインストールできない。
なんで?
ググってみたら似たような事を先に経験されてる方が。

■CentOS6にTrac-0.12.2.ja1を入れる
http://d.hatena.ne.jp/kakk0u/20110927/1317137608

yumリポジトリに入ってないんだって。mod_python
そのかわりmod_wsgiは入ってるんだよな。
最初は下のページから直接落としてインストールしてみようとしたりしたけど、
http://archive.apache.org/dist/httpd/modpython/
結局うまくいかなくて、EPELリポジトリをCentOSに追加してそこからyumでインストールした。
EPELリポジトリについては以下のページがとても参考になりました。ありがとうございました。

EPEL リポジトリを活用して CentOS 5.x で Python 2.6 をインストールする
http://d.hatena.ne.jp/t2y-1979/20110430/1304140587


--------------------------------------------------------

試行錯誤してる途中によくわからないからhttpd-develとかちゃんと入ってるのかyumしてみたりした。
--------------------------------------------------------
[root@Cent6-003-tan mod_python-3.3.1]# um -y install httpd-devel
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package httpd-devel.i686 0:2.2.15-15.el6.centos.1 will be installed
--> Processing Dependency: httpd = 2.2.15-15.el6.centos.1 for package: httpd-devel-2.2.15-15.el6.centos.1.i686
--> Processing Dependency: apr-util-devel for package: httpd-devel-2.2.15-15.el6.centos.1.i686
--> Processing Dependency: apr-devel for package: httpd-devel-2.2.15-15.el6.centos.1.i686

(略)

Installed:
  httpd-devel.i686 0:2.2.15-15.el6.centos.1                                            

Dependency Installed:
  apr-devel.i686 0:1.3.9-3.el6_1.2         apr-util-devel.i686 0:1.3.9-3.el6_0.1      
  expat-devel.i686 0:2.0.1-9.1.el6      

Dependency Updated:
  httpd.i686 0:2.2.15-15.el6.centos.1       httpd-manual.noarch 0:2.2.15-15.el6.centos.1
  httpd-tools.i686 0:2.2.15-15.el6.centos.1 mod_ssl.i686 1:2.2.15-15.el6.centos.1    

Complete!
--------------------------------------------------------
Updateされた。
で、まずEPELのRPMを持ってきてインストールする。「イーペル」と読むらしい。
ここから落としました。日本語ページだとリンク切れになってたので英語圏から。
http://fedoraproject.org/wiki/EPEL

「If you are running an EL6 version: epel-release-6-5.noarch.rpm」
のとこから落としました。そしてインストール。
--------------------------------------------------------
[root@Cent6-003-tan conf.d]# cd /usr/local/src/
[root@Cent6-003-tan src]# ls
Genshi-0.6-py2.6.egg  Trac-0.12.3.ja2              mod_python-3.3.1         python
Python-3.1.2          Trac-0.12.3.ja2.zip          mod_python-3.3.1.tgz
Python-3.1.2.tgz      epel-release-6-5.noarch.rpm  postgresql-9.1.3.tar.gz
[root@Cent6-003-tan src]# rpm -Uvh epel-release-6-5.noarch.rpm
警告: epel-release-6-5.noarch.rpm: ヘッダ V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
準備中...

(略)

########################################### [100%]
--------------------------------------------------------

参考サイトに書いてある通りに、普段はEPELリポジトリを参照しないように設定を変更する。
--------------------------------------------------------
[root@Cent6-003-tan src]# vim /etc/yum.rfeepos.d/epel.repo
"/etc/yum.repos.d/epel.repo" 26L, 957C[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1 ←ここ
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
--------------------------------------------------------

そしてEPELリポジトリを明示的に指定してインストール!
--------------------------------------------------------
[root@Cent6-003-tan src]# yum search mod_python --enablerepo=epelinstall
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package mod_python.i686 0:3.3.1-14.el6.1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=========================================================================================
 Package               Arch            Version                     Repository       Size
=========================================================================================
Installing:
 mod_python            i686            3.3.1-14.el6.1              epel            290 k

Transaction Summary
=========================================================================================
Install       1 Package(s)

Total download size: 290 k
Installed size: 1.5 M
Is this ok [y/N]: y
Downloading Packages:
mod_python-3.3.1-14.el6.1.i686.rpm                                | 290 kB     00:00  
警告: rpmts_HdrFromFdno: ヘッダ V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Importing GPG key 0x0608B895:
 Userid : EPEL (6)
 Package: epel-release-6-5.noarch (installed)
 From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.
  Installing : mod_python-3.3.1-14.el6.1.i686 [                                    ] 1/1

(略)

Installed:
  mod_python.i686 0:3.3.1-14.el6.1                                                    

Complete!
--------------------------------------------------------
キタ━━━━━━(゚∀゚)━━━━━━ !!!!!

あとはhttpd.confに専用の設定を追加する。一番下にこんなん書いた。

#---------Trac Setting----------
#

    setHandler mod_python
    PythonInterpreter main_interpreter
    PythonHandler trac.web.modpython_frontend
    PythonOption TracUriRoot /PumpkinsProject
    PythonOption TracEnv /var/trac/PumpkinsProject

#-------------------------------

これも参考書の通り。
あとはhttpdを再起動して…
--------------------------------------------------------
/etc/init.d/httpd restart
httpd を停止中: [  OK  ]
httpd を起動中: httpd: apr_sockaddr_info_get() failed for Cent6-003-tan
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[  OK  ]
--------------------------------------------------------

ループバックアドレスの名前解決で怒られてるけどひとまずOK!

で、実際にアクセスしてみたらこんな感じになった。

ありがとうございました!

2012年3月4日日曜日

[Android]HelloWorld!を作るまで

Androidアプリ開発やりたいとか言って本を数冊買ってから一年ぐらいが経ちました。
このままじゃいかん。
いかん、ということでとりあえずHelloWorldから。

開発環境はさすがに本を読んで予め作っていたので、
アプリの作り方(Eclipseの操作)とインストールのやりかただけ。

【HelloWorld自体の作り方】
1分で作るAndroidアプリ HelloWorld!を作る
を参考にしました。というかそののままです。

【何かエラー出てる】
Error generating final archiveって何
ということで、ググッた結果、証明書に関するエラーで、
該当ファイルを一旦削除すればよいとのこと。(自動で再作成される)
あとで気づいたけど持ってる本にも書いてた…読めよ…

【apkファイルのインストール】
apkファイルをAndroid端末(実機)にインストールする方法の「マウントして端末内に保存したapkファイルからインストール」を参考にしました。
しかし、一点不明点発生。
「Eclipseで作ったapkファイルはどこにあるんだ」
調べた結果ここにありましたよ。
Androidアプリの配布、公開用のAPKファイルの在り処
先人がいっぱいメモしてくれてるからありがたい。


ということで、無事に実機にコピペしたHelloWorldをインストールすることができました。
これ去年やろうと思ってた時にやってれば今頃は大分違ってたんだろうなぁ…

参考にしようとして「LunaLanderの改造はめんどくさい!HelloWorldがいい!」
と思った本。これからもよろしく。



2012年1月15日日曜日

今年の目標書けるだけ(めざせ108個)

今年の目標を書きだす
目標なんてのは煩悩の塊なので、せっかくならば108コ書きだしてみようじゃないか。

1.体重12kg減
 今が79kgぐらいだから、-12kgで67kgか。

2.週に一度はジョギング
 今年は手帳に貼る用のシールを買った。ジョギングしたら手帳に貼る。
 ちなみに★と♪があって、★は運動したら、♪は勉強したら張るつもり。

3.週に一度30分以上のストレッチ
 体が固いと脂肪が燃えにくいから体柔らかくしろ!というアドバイスは
 ネット上でよく見るので、今年は定期的にストレッチしたい。
 ストレッチしたらこれもシール張ろう。

4.1年間で80冊以上の本を読む
 これは去年達成出来なかったので、今年も再設定。
 去年は結局一昨年と同じ40冊でした。
 でも去年と違って分厚い技術書が何冊か読めたし、
 小説も読むことができた。
 今年はもっと技術書の比率を増やしたい。

5.今年も入院しない
 大きな怪我なく過ごすのが一番。去年は春先にインフルエンザを患ったので、
 今年は月末にでも予防接種を受けに行きたい。

6.視力を悪化させない(1.0を守る)
 東京来てからやっぱり少しずつ目が悪くなっとります。守れ1.0

7.データベーススペシャリストに合格する
 そして合格お祝い金をだな

8.システムアーキテクトに合格する
 そして合格お祝い金をだな

9.色彩検定2級に合格する
 3年ほど前に3級に合格してからのブランク。
 今年は自分がやってみたいことにもっと素直に
 もっとストイックにいきたい。

10.Androidアプリ
 今年こそ(ry
 このままやらなさそうだなw
 まずいな

11.既読の雑誌をすべてPDFに
 とくに「これは紙で残したい!」という秀逸な号以外は全部PDFにしたい
 お家スッキリ化計画

12.既読の書籍もPDFに
 これもお家スッキリ化計画の一環。
 「これは残しておこう」と決めた本以外はドンドン電子化したい。

13.自分のウェブサイトを作る
 できればドメイン取って。
 とりあえず自分が使ってるサービスの自分のページのリンク集でもやるか

14.「どせいさん」の居場所を作る
 うちの部屋には「どせいさんひざたけぬいぐるみ」っていうのがいるんだけど、
 あまりにもでかすぎて押入れで眠ってる。
 もうすぐ2年間の冬眠となる。
 よろしくない。
 部屋の中に居場所を作ってあげたい。


15.毎週500円を貯金
 毎週500円玉を貯金箱に貯金する
 小さな貯金箱で、全部溜まったら10万なんだけど、
 3年ぐらいかかる。
 ミニツリーでも育ててるかのような感覚で貯めていこう。
 貯まったら生活が良くなることに全て使う。
 使い切る。

16.貯金箱で10万以上貯金
 こっちはこの前開けた貯金箱(下記参照)を今年もやろうという目標。
 (http://twitpic.com/83w8q1)
 (http://twitpic.com/83whov)
 (http://twitpic.com/83witm)
 (http://twitpic.com/83x2zb)
 これはほぼ100円で、500円玉と1000円札と1万円札がちょこっとあって、
 90%ぐらいたまってて全部で11万円だったんだけど、
 まぁそれぐらいになるように今年もためましょうという目標。
 満タンにならなくていいから貯め続ける。

17.ゲーム3本クリア
 東京に来て買ったゲームはきちんとクリアしないと
 ゲームに申し訳ない。
 継続力をつける練習にもなるだろうということで、
 とりあえず4ヶ月に1本ぐらいのペースを設定しよう。

18.ネットオークションを覚える
 一時の興奮で取得したはいいものの、今は部屋に置かれているだけの
 ゲーセンプライズのフィギュアとか、そういうのがいくつかある。
 お家スッキリ化計画の側面からも、オークションで売り出す方法を覚えたい。
 やってみれば案外直ぐなんだろうけどね、でも一回もやったことないんだ。

19.美術館に6回以上
 去年は12回(月一)行くと言っといて結局1回しか行かなかった。
 今年は半分でいいからまずは通えるようになりたい。
 そしてそんなゆとりを持てるように仕事を早く終わらせる力をつけよう。
 まだ印象派ブームは続いてるようだし、またあの油絵のリアル感を感じに行きたい。

20.写真24枚以上
 ケータイをスマフォ(Galaxy SⅡ)に変えてから、カメラがいい感じで、
 写真を取るのが楽しい。
 500PXっていうサイトにアカウント作ったんだけど、
 (http://500px.com/TearTheSky)
 そこに24枚以上アップしたい。月2枚の計算。

21.株取引を始める
 16番の貯金箱が開いたので、そのお金で株取引を始めたい。
 ということで証券口座は開設してみた。
 勉強しなきゃな。

22.株で儲けを出す。
 1円でもいい。負けない事を目標にしよう。

23.作曲する
 ググればドラムマシンのフリーソフトとかあるみたいだし、
 1回くらいちゃんとリズムもギターも声も入った曲を作ってみたい。
 演奏テクはない。

24.LPICを取る
 まずはレベル1から。

25.5時起きの習慣化
 そのためには22時半ぐらいには床につかなければならないわけで
 そのために日々時間と戦わないといけないわけで

26.ジョギングシューズを手入れする
 新しく買ったはいいけど一回も洗ってなければ、磨いてもいない。
 こんなにお世話になっているのに。
 ということで手入れの習慣をつける

27.ギタースタンドを買う
 むしろ今までなんで買わなかったし…

28.ディスプレイを買う
 でかいやつ

29.PCを処分する
 デスクトップタイプのしょぼいスペックのやつ

30.プログラミングをやる
  とりあえずJava

31.ムーンウォークをできるようになる
 練習動画を見てみたら面白かったので、
 せっかくならできるようになろう。
 見た人が「思ったよりもうまいw」とか
 言うようになればバッチリ。

32.視力を守る
 なんとかまだ裸眼なので、目薬とか目に良い事とか
 やってみて、メガネにならないようにする。
 メガネ自体は好きだけど、自分が身につけるのは
 伊達メガネで済ませたい

33.100以上の書類・雑誌をPDFへ
 受験した資格試験の問題とか、
 溜まってるビジネス雑誌とか
 そういうのどんどんPDFにする。

34.キャッシュ10万以上
 一昨年は給料日前によく現金が足りなくなって
 同期に5000円を借りることが多かった(あの時は本当にありがとう) 
 去年は現金が足りなくて親や同期に借りることはほぼなかった。
 今年はいつでも10万円おろせる状態をつくりたい。
 キャッシュがないのはこのご時世つらい。
 とりあえず10万から。

35.脳トレ100日
 懐かしき脳トレゲームを再開してみた。
 年間で100日くらいはトレーニングしたい。

36.編み物2つ
 実は簡単なマフラーが編めます。
 頑張っても横ストライプまでだけど。
 押入れに毛糸が眠ってたので、
 部屋を片付ける意味でもマフラーを編もう。

37.TOEICを2回は受ける
 とりあえず受ける

38.TOEICの成績をアップさせる
 つまり2回受けて2回目は点数アップさせようということ。

39.ネットバンキングができるようになる
 恥ずかしながら一回もやったことない。
 できるようになろう。

40.かぎ編みを覚える
 去年やりたかったけどできなかったから

41.ブログを週に1回は書く
 エントリにできなくてもいいからとりあえず書け

42.誕生日のケーキを作る
 手作りケーキを作って自分の誕生日をお祝いしよう!
 
43.なんか絵を描く
 なんでもいいから絵を描く。
 できれば色もつける

44.映画を観る
 溜まってる。とりあえず四半期に1本を目標に。
 映画を観るのがタスクとか…

45.夏休みと冬休みに大掃除をやる
 去年はやれてなかったから、ことしはやろう

46.帰る
 実家に帰る。とりあえず年末だけでいいか。

47.週末家計簿をそのまま続ける
 去年の秋ごろから週末に家計簿をつけはじめた。
 レシートを取っておいて、ざっくり合計を足して、
 それを記入していくだけ。今年もやろう。

48.勉強会・セミナーなどに10回
 外のお勉強会に行ってみよう。
 去年は初めて1回行った。
 今年はどどーんと10回を目標に。
 できるかなー。

49.ビジネスバッグを壊さない
 今のバッグを使い始めて2年経った。
 とりあえず、今のバッグに特に不満がないから、
 買い換える必要がないように定期的に中の掃除とかして、
 今年も活躍してもらう。
 バッグの買い替え周期ってどれくらいなんだろうなー。

50.「Holy Wars」をコピーする
実は去年の夏にいきなり思い立ってメガデスの楽譜を買いました。


…はいいんだけど、
全然練習できてなくて積み本になってる。
まずい!
ということで一番キャッチーなアノ曲を練習しましょうよ俺。



51.練習のためにCDを買う
いまポチった。

もうだめ。思いつかない。
去年は40コだったからまあいっか。
今年もがんばろう。