Eclipseのサーバランタイム環境にTomcatを追加する方法

Eclipseの再インストール後、
Javaのビルドパス設定でTomcatのライブラリを追加しようと思ったら
なかったので追加する手順をメモしておく。

まず先にTomcatをダウンロードして、インストールしておく。

設定 => サーバー => ランタイム環境 => 追加
から「Apache Tomcat」を選択し、
Tomcatをインストールディレクトリを指定して完了。
「ダウンロードしてインストール」ボタンがあるのでここからでもインストールできるようだ。

これで
「ライブラリーの追加」=>「サーバー・ラインタイム」
で選択できるようなる。

Ubuntu 12.04 LTS に最新の Nginx をインストールする

環境

$ cat /etc/issue.net
Ubuntu 12.04 LTS

$ uname -m
i686

aptパッケージのバージョンを確認

$ apt-cache show nginx
...
Version: 1.1.19-1ubuntu0.2
...


古いので公式サイトで公開しているUbuntu用パッケージをインストールする
http://wiki.nginx.org

どのバージョンかはこちらを参考
http://nginx.org/en/linux_packages.html

Ubuntu:
    Version 	Codename
    10.04 	lucid
    11.10 	oneiric
    12.04 	precise
    12.10 	quantal
    13.04 	raring


Nginxの公式リポジトリを使うようにするため、
/etc/apt/sources.list にリポジトリ追加する。

Nginx用のものを別ファイルで用意

sudo vi /etc/apt/sources.list.d/nginx.list

以下追加

deb http://nginx.org/packages/ubuntu/ precise nginx
deb-src http://nginx.org/packages/ubuntu/ precise nginx


PGP公開鍵を追加

curl http://nginx.org/keys/nginx_signing.key | sudo apt-key add -


apt-get update

sudo apt-get update


再度、パッケージ情報を確認

$ apt-cache show nginx
...
Version: 1.4.2-1~precise
...


Nginxのインストール

sudo apt-get install nginx


バージョン確認

$ nginx -v
nginx version: nginx/1.4.2


ブラウザで80ポート確認
http://localhost/

Welcome to nginx!

のページが表示される。

SSHターミナルで画面が固まって入力が受け付けなくなった場合

SSHターミナル上(puttyやらpoderosa)でたまに何かのキーを押し間違って画面が固まる現象が起きていたんだけどどうやら Ctrl+s を押していたようだ。
で、いつも諦めて新しいターミナルを開き直していたが解除できる方法があった。

Ctrl+q を押すだけ!

知らなかったよー(T_T)

MySoftBankのWeb明細をダウンロードする

前回に引き続き、今回はMySoftBankのサイトからiPhone使用料のWeb明細を自動ダウンロードする。
この電話料金内訳明細書PDFの保持期間は過去6ヶ月分まで。
PDFのファイル名にはダウンロード時のタイムスタンプがついているだけで何月のものかわからないのでプレフィックスに年月を追加した。


mysoftbank.rb

require 'mechanize'
require 'kconv'

class MySoftbankClient

  def initialize
    @agent = Mechanize.new
  end

  def top
    @agent.get('https://my.softbank.jp/msb/d/top')
  end

  def login
    top()
    @agent.page.forms[0].click_button
    f = @agent.page.forms[0]
    f.msn = '電話番号'
    f.password = 'パスワード'
    f.click_button
  end

  def bill_total
    top()
    @agent.page.link_with(:href=>/WCO010001/).click
    @agent.page.forms[0].click_button
  end

  def uchiwake(num)
    yyyyMM = @agent.page.forms[num].fields[0].value
    @agent.page.forms[num].click_button
    @agent.page.forms[0].click_button
    @agent.page.response["content-disposition"] =~ /"(.+?)"/
    @agent.page.filename = yyyyMM + "_" + $~[1].toutf8
    @agent.page.save
    puts @agent.page.filename + " saved."
  end
  
  def one_month_ago
    bill_total()
    uchiwake(1)
  end
  
  def two_month_ago
    bill_total()
    uchiwake(2)
  end

  def three_month_ago
    bill_total()
    uchiwake(3)
  end

  def four_month_ago
    bill_total()
    uchiwake(4)
  end

  def five_month_ago
    bill_total()
    uchiwake(5)
  end

  def six_month_ago
    bill_total()
    uchiwake(6)
  end

  def logout
    top()
    @agent.page.link_with(:href=>/doLogout/).click
    puts "logout."
  end

end


client = MySoftbankClient.new

client.login()

client.one_month_ago()
client.two_month_ago()
client.three_month_ago()
client.four_month_ago()
client.five_month_ago()
client.six_month_ago()

client.logout()


実行結果

$ ruby mysoftbank.rb
201302_電話料金内訳明細書20130318100543.PDF saved.
201301_電話料金内訳明細書20130318100545.PDF saved.
201212_電話料金内訳明細書20130318100547.PDF saved.
201211_電話料金内訳明細書20130318100549.PDF saved.
201210_電話料金内訳明細書20130318100551.PDF saved.
201209_電話料金内訳明細書20130318100553.PDF saved.
logout.

※追記(2013/12/01)
MySoftBankのサイト構成が変更になり、エラーになっていのでソースコードを修正した。

セゾンカードのWeb明細をダウンロードする

セゾンカードNetアンサーのWeb明細は過去3ヶ月分しかダウンロード出来ないので定期的にダウンロードしておかないと過去の明細が見れなくなってしまう。
毎回手動でログインしてダウンロードするのが面倒くさかったので、rubyのMechanizeを使って、過去3ヶ月分のCSVとPDFをダウンロードするスクリプトを書いた。

require 'mechanize'

class SaisonClient

  def initialize
    @agent = Mechanize.new
  end

  def login
    @agent.get('https://netanswerplus.saisoncard.co.jp/WebPc/welcomeSCR.do')
    f = @agent.page.forms[0]
    f.inputId = 'NetアンサーID'
    f.inputPassword = 'パスワード'
    f.submit
  end
  
  def top
    @agent.get('https://netanswerplus.saisoncard.co.jp/WebPc/NATOP.do')
  end
  
  def move(link)
    @agent.page.link_with(:href=>link).click
  end
  
  def meisai
    move(/USC0101BLC01/)
  end
  
  def this_month
    top()
    meisai()
    download()
  end
  
  def one_month_ago
    top()
    meisai()
    move(/fixTargetMonth=1/)
    download()
  end
  
  def two_month_ago
    top()
    meisai()
    move(/fixTargetMonth=2/)
    download()
  end
  
  def download
    csv_link = @agent.page.link_with(:href=>/USC0105BLP01/)
    pdf_link = @agent.page.link_with(:href=>/USC0104BLP01/)
    save(csv_link)
    save(pdf_link)
  end
  
  def save(link)
    link.click
    @agent.page.save
    puts @agent.page.filename + " saved."
  end
  
  def logout
    top()
    move(/USL0100BLC01/)
    puts "logout."
  end

end


client = SaisonClient.new

# ログイン
client.login()

# 今月分ダウンロード
client.this_month()

# 先月分ダウンロード
client.one_month_ago()

# 先々月分ダウンロード
client.two_month_ago()

# ログアウト
client.logout()

文字列内の数値部分を正規表現を使ってインクリメントする

perlを使って行う例。


置換対象のテキストデータ
target.txt

columnIndex1 = "aaa";
columnIndex2 = "bbb";
columnIndex3 = "ccc";

replace.pl

my $data = `cat target.txt`;
$data =~ s/columnIndex([\d]+)/columnIndex@{[$1+1]}/g;
print $data;

実行結果

columnIndex2 = "aaa";
columnIndex3 = "bbb";
columnIndex4 = "ccc";


ファイルに出力

my $data = `cat target.txt`;
$data =~ s/columnIndex([\d]+)/columnIndex@{[$1+1]}/g;

open(OUT, ">", "target2.txt");
print OUT $data;
close(OUT);



以上。
なんだけど @{[$1+1]} の部分が何をやってるのかよくわからないので調べた。


$1+1
文字列+数値だが「+」演算子使っているので数値と判断される。


[$1+1]
[ ] で囲むことで無名配列を作成し、そのリファレンスが返る。


@{[$1+1]}
@{ } で囲むことで配列のリファレンスから配列を取り出すデリファレンスを行う。


ってことかな。。



参考:
Perlの配列とハッシュを自由に扱う - サンプルコードによるPerl入門
http://d.hatena.ne.jp/perlcodesample/20100930/1278596435
ヒアドキュメントの中でPerlの式を書く
http://perl-users.jp/articles/advent-calendar/2008/14.html

Eclipse の static インポートの問題

import static xxx.yyy.zzz.FooConstants.*;

というような static インポートをした後に
「Ctrl+Shift+O」を使うと
.* がすべて展開されてしまう。

Window -> Preferences -> Java -> Organize Imports
Number of static imports needs for .*

がデフォルトで 99 になっているのでこれを 1 に変更することで展開されなくなった。