JBOSSとSeasarとTeeda その1

WebLogic+Seasar2+Teeda+JDK1.5(JRockit)という環境か
JBOSS AS7.2+JDK1.7に移行することになりましたが問題多発です。
備忘録も兼ねて数回に分けてやったことを書いておこうと思います。

まずSeasar2ですが、
開発が止まっているプロダクトということもあり
JBOSS AS7.xそのままでは動きません。

JBOSSのAS5以前では内部のリソース管理に
vfsfile、vfszipというプロトコルを使っているようで
Seasar2もこのプロトコルには対応してますが
AS5移行ではこれがvfsというプロトコルに変更されているので
S2Containerがコンポーネントの自動登録をする際に失敗します。

http://ml.seasar.org/archives/seasar-dev/2013-July/001254.html
http://tech-sketch.jp/2012/09/sastrutsjbossas7.html

上記のサイトに解決方法が書かれており
解決する為の追加jarファイルと設定がありますが
AS7.0ではこれで良かったと思うんですが、これではダメ。
jarファイルの中にあるクラスを自動登録しようとするとエラーになります。

上記のサイトで公開されている
org.seasar.framework.util.VFSResourcesFactoryの中に
以下のコードがあります。

if (url.getPath().toLowerCase().endsWith(".jar/")) {
return handleJar(physicalURI, rootPackage, rootDir);
} else {
return handleDir(physicalURI, rootPackage, rootDir);
})

リソースがファイルなのかjarファイルなのか判定して
分岐している個所があるのですが、
AS7.2では【{JBOSS_HOME}/standalone/tmp/vfs/deploymentxxxxxx/xxx.jar/contents/zzz/】のように
.jarの後にPATHが続きます。
なので後方一致の個所を部分一致に直すなど対策が必要。
# もう1個所同じ判定があります。

また、

private Resources handleJar(URI physicalURI, final String rootPackage,
final String rootDir) throws IOException {
File f = new File(physicalURI);
File[] jar = f.getParentFile().listFiles(new FileFilter() {
public boolean accept(File pathname) {
return pathname.getName().toLowerCase().endsWith(".jar");
}
});

ここのphysicalURIという変数の値は
【file:/{JBOSS_HOME}/standalone/tmp/vfs/deploymentxxxxxx/xxx.jar/contents/zzz/】
という値になっているのでfile:とかcontents以降とかを消さないと
ファイルが見つからないエラーになります。

修正してJbossの依存jar追加してコンパイル・・・なので
面倒くさいけどしょうがない。

まだまだJBOSSトラップは続きます。

JBoss Enterprise Application Platform6 構築・運用パーフェクトガイド

JBoss Enterprise Application Platform6 構築・運用パーフェクトガイド

ロリポップで不正アクセス

レンタルサーバーサーバーを運営している
lolipopで不正ログインが多発しているらしい。

ロリポップからのお知らせ

前回のエントリーで書いた、2ちゃんねるビューア
流出事件が影響してるのだろうか。。。


どうやらロリポップwordpress
利用しているユーザーでログインIDがadminとかで
パスワードも1234とかpasswordとかシンプルにしていると
不正アクセス対象になりやすいとか。

パスワードはよく以下が使われやすいけど
この辺りにしてる人も変えた方がいいかと。

  1. 数字だけ 123456を設定している人が一番多いらしい
  2. qwerty キーボードの左上から順番
  3. monkey 猿。なんで使われてるんだろ?
  4. p@ssw0rd 昔流行ってました。aとかoを置き換えるやつ。置き換えるのはいいけど元ネタがメジャー過ぎる

ロリポップは対策として管理画面へのIP制限を推奨しているようだけど
外からスマートフォンでブログを更新したいとかあるだろうし、
パスワードの複雑化、ログインページのPHPファイルをデフォルトから変更、
IPではなく管理画面はベーシック認証でアクセス制御…とかの方が良いかな。

この手順は後ほど追記します!

こう連続で情報漏洩すると
利用者も自己予防できる知識は必須だと思う。

情報漏洩 9割はあなたのうっかりミス―今日からはじめる防衛術

情報漏洩 9割はあなたのうっかりミス―今日からはじめる防衛術

2ちゃんねるビューアの流出事件について

2013年8月25日に2ちゃんねるビューアという
2chの過去ログを見たり、プロバイダ規制されてても書き込みができる
有料サービスで情報流出があった様子。

私自身は利用してなければ2chに書き込みをしたことないので
被害はないのですが、これは一大事件ですよ。
デマ情報などもたくさん流れているようですが、
流出したとされるものは以下。

  • ユーザのメールアドレス
  • ログインID
  • パスワード住所
  • 氏名
  • 電話番号
  • クレジットカード番号
  • クレジットカードのセキュリティーコード

まずいですね。ホント。最近はクラウドクラウド言って、
従来からあるサービスも何でもクラウドと呼んで宣伝をしてます。
クラウドを利用してインターネット経由のブラックボックスな空間に
情報を集めるのはリスクも高いんですよ。
HaaS/IaaS環境の先駆者であるAmazon EC2
まだアメリカにしか拠点がなかった頃は
Amazonクラウドセミナーなどに参加してよく、
外国に個人情報含む様々な情報を保持するのは
セキュリティ的・ユーザーの印象的に大丈夫なのか・・・という
話をセミナー参加者同士でしたものです。

昨年、ファーストサーバがデータ消失したり
ユーザー間でデータ参照ができるようになってしまった
セキュリティ事故は記憶に新しく、けっこうな騒ぎになりましたが
今回はもっと重大だと感じます。
いくつか思うところを記載します。



クレジットカード情報の流出

これは見るからにヤバいですよね。
流出の疑いがある方は即座にカードの停止・再発行の手続きをすべきです。
っというか、どこにこの流出ファイルがあるのか知りませんが、
カード会社はこのファイルを何とか入手して対象カードの
強制停止とかできないものか・・・。
Webサービスを提供する側も平文でこういう重要情報持っちゃダメだよね。
日本も法律でクレジットカード情報をサーバに保持しちゃいけないとか
やった方がいいんじゃないか。
すべてのサービスが都度入力だったら公平だし
こんな事故を起こすくらいなら手間をかけた方がいいかと。



名前・住所などの個人情報

SNSに投稿すると位置情報が公開されることがあるし、
スマートフォンなどで撮った写真はジオタグという位置情報が
付与されたりするので実は住所ってけっこう簡単に手に入ってしまう。
個人情報は自分で守らないといけない世の中なんだよね。
ダイレクトメールとかたくさん来ちゃうのはまぁ、しょうがないとして
ストーカーとか気をつけましょう。危険を感じたら警察に!



メールアドレスの流出

政府、企業、大学のメールアドレスも含まれていたとか。
2chは今やアングラではなく、一般に認知された情報サイトなので
企業が調査などで普通に利用することもあるだろうが、
仕事のメールアドレスをプライベートで使った人もいるでしょう。
会社メールって苗字や名前がアドレスになっていることも多いので
特定もされやすい。仕事メールはプライベートに使っちゃいかんよ。
同姓同名がいてもメールアドレスが一致すれば個人が特定できちゃう。



書き込みの流出

これも漏れたが本当なのかわかりませんが、
↑にあげた情報と合わせれば誰が・いつ・なんて書いたのかわかっちゃう。
匿名掲示板なので普段は温厚なのに誹謗中傷を書く人もいるでしょう。
会社や個人の悪口や愚痴を書く人もいるでしょう。
匿名掲示板とはいえパブリックなスペースに
ネガティブ発言をするのは良くないですね。
いつどこで伝わるかわからない。
普段隠していることとか性癖とかまで伝わって
人間関係が壊れることだってある。
Twitterなどのつぶやきも気軽なので軽い気持ちで愚痴ったことが
取引先に伝わって契約解除・・・なんてもの良くあります。
インターネットは自由であって自由じゃない。


ツラツラと書きましたが、セキュリティ事故は本当に怖い。
私も職場で一番気をつけています。
言動・データや借用物の紛失などの人的事故や
システムによる情報漏えい。
プライベートでもサーバを持っているので今一度セキュリティを見直そう。

情報漏洩 9割はあなたのうっかりミス―今日からはじめる防衛術

情報漏洩 9割はあなたのうっかりミス―今日からはじめる防衛術

検索ロボット・クローラーからのアクセス

Googleのウェブマスターツールという
クロールとサイト評価を確認できる無料の管理者ツールがあります。
ここのブログも、もうひとつやっている楽器系のブログも
ウェブマスターツールで色々と確認をしながら運用しています。

エフェクター、レビューブログ

robot.txtやsitemap.xmlを登録することによって
定期的にGoogleBotがサイトをクロールしてくれますが、
新しい記事の投稿や更新をすぐにGoogleに通知するには
ウェブマスターツールのFetch as Googleという機能で
ページを教えてあげるとはやくクローラーが見に来てくれます。

単独ページの通知は週500回まで、
あるページを基点にそのページからリンクしている
ページも含めた通知は月10回まで利用可能です。

通知したからといって必ずクロールされるとは
限らないようですが、先ほど通知を行ったところ
1分以内でGoogleBotがサイトを見に来てくれました。

66.249.74.60 - - [25/Aug/2013:01:02:21 +0900] "GET / HTTP/1.1" 200 44551 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

ついてにApacheのAccessLogを色々確認して
どのくらい検索ボットがクロールにきているか見てみました。

66.249.74.60 - - [24/Aug/2013:19:15:15 +0900] "GET / HTTP/1.1" 200 26650 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7 (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)"

こちらはモバイル用のGoogle検索BOTです。
ユーザーエージェントをiPhoneに偽装しているみたいですね。
これでモバイル用のページをモバイル版Google
インデックスに載せているようです。
ちなみに、エフェクター、レビューブログの方では
同一URLでPCとモバイルなどのユーザーエージェントを
判断してページ内を動的に書き換えています。
レスポンシブなページやPC/モバイルで異なるURLにする・・・などしない場合は
HTTPヘッダに【Vary:User-Agent】を追加してユーザーエージェントによって
画面の内容が変わるよ!って通知しています。
こうしないとGoogleBotがPC/モバイル用の判断をうまくしてくれません。

66.249.74.60 - - [24/Aug/2013:15:00:54 +0900] "GET /xxx.jpg HTTP/1.1" 200 10143 "-" "Googlebot-Image/1.0"

Google画像検索のBOTも遊びにきてました。
やはりイメージのURLのみにアクセスしてきています。

66.249.74.60 - - [24/Aug/2013:17:47:28 +0900] "GET /glossary/ HTTP/1.1" 200 19406 "-" "Mediapartners-Google"

Google Adsense用のBOT
ページに最適化した広告を出す為にクロールしている様子。

209.85.238.60 - - [17/Aug/2013:07:58:14 +0900] "GET / HTTP/1.1" 200 38324 "-" "AdsBot-Google (+http://www.google.com/adsbot.html)"

209.85.238.60 - - [23/Aug/2013:09:39:36 +0900] "GET / HTTP/1.1" 200 45035 "-" "AdsBot-Google-Mobile (+http://www.google.com/mobile/adsbot.html) Mozilla (iPhone; U; CPU iPhone OS 3 0 like Mac OS X) AppleWebKit (KHTML, like Gecko) Mobile Safari"

Google Adwords用の検索BOT
以前Adwordsのつけていたからでしょうか。
広告のリンク先ページとしての品質評価をしているみたいです。
今はAdwordsを切っているのでモバイル版BOTはまだきますが、
PC版BOTはたまーにしかきません。

Yahoo
98.137.207.108 - - [17/Aug/2013:20:14:00 +0900] "GET /robots.txt HTTP/1.0" 200 111 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)"

MSN
65.55.213.242 - - [24/Aug/2013:23:39:18 +0900] "GET /sitemap.xml.gz HTTP/1.1" 200 1454 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)"

MSN画像
199.30.20.3 - - [24/Aug/2013:22:40:20 +0900] "GET /xxx.jpg HTTP/1.1" 200 65922 "-" "msnbot-media/1.1 (+http://search.msn.com/msnbot.htm)"

Bing
157.56.93.84 - - [24/Aug/2013:00:31:25 +0900] "GET /robots.txt HTTP/1.1" 200 111 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"


その他の有名サイトのBOTもちょこちょこきていますが
回数的にはGoogleに比べるとかなり少ないです。

74.112.131.243 - - [24/Aug/2013:01:29:34 +0900] "GET /robots.txt HTTP/1.1" 200 111 "-" "Mozilla/5.0 (compatible; Butterfly/1.0; +http://labs.topsy.com/butterfly/) Gecko/2009032608 Firefox/3.0.8"

199.59.148.209 - - [24/Aug/2013:23:09:45 +0900] "GET / HTTP/1.1" 200 44551 "-" "Twitterbot/1.0"

173.208.180.234 - - [23/Aug/2013:23:13:26 +0900] "GET / HTTP/1.0" 200 865 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.3; http://www.majestic12.co.uk/bot.php?+)"

5.10.83.3 - - [21/Aug/2013:03:26:56 +0900] "GET / HTTP/1.1" 200 41480 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)"

49.212.189.165 - - [24/Aug/2013:00:17:50 +0900] "GET / HTTP/1.1" 200 46072 "http://effector-review.com/" "QuerySeekerSpider ( http://queryseeker.com/bot.html )"

海外からなぞなBOTもいくつかきます。
Butterfly(74.112.131.243)とTwitterbot(199.59.148.209)は
Twitterの投稿を元にクロールする海外のBOTです。
MJ12bot(173.208.180.234)はイギリスのBOTみたいです。
こいつはかなりアクセスしてきています。
AhrefsBot(5.10.83.3)とQuerySeekerSpider (49.212.189.165)はよくわかりません。

なんか危うそうなのでそのうち、アクセス拒否するかもしれません。
クラックされる可能性もあるし、
変なとこにリンク張られるとページ評価も下がってしまうので。。。

アフィリエイトで年3000万稼ぐ人の検索キーワードの法則

アフィリエイトで年3000万稼ぐ人の検索キーワードの法則

Oracleテキストの仕組み

先日、Oracle Textにちょっと調べていて
なるほどなーって思ったので少し書いてみます。

OracleTextは前文検索が出来るOracleが提供している機能のひとつで、
Enterprise Editionはもちろんのこと、
Standard Editionでもついているので無償で利用できます。

さて、全文検索とは・・・


いわゆる「部分一致検索」とか「あいまい検索」とか言われるものですね。
例えばこのエントリーのタイトル【Oracleテキストの仕組み】では
中間に入っている【テキスト】という文字で検索ができること。
一般的なSQLのtitle LIKE '%テキスト%'にあたります。


まぁ、このLIKE検索でも機能的な役割は果たしますが
LIKE検索で%を前後につけるとINDEXが効かなくなるので
フルスキャンが走り、大変コストのかかる検索になります。
そこでこのOracleテキストの登場です。
MySQLにはFULLTEXTインデックスという似たようなものがありますね。

このOracleテキストを対象カラムに設定してSQLのWHERE句に
【CONTAINS(title, 'テキスト') > 0】という感じに
CONTAINS関数にカラム名と検索文字列を渡してあげます。
「> 0」がないとダメなので気をつけましょう。

ただ、いくらOracleテキストといえ、何千万・何億という
検索対象だとやはりちと、遅い。
そういう場合は全文検索用のミドルウェアであるApache Solrなどと
併用すると良いでしょう。
左のサイドバーのサイト内検索で
「Solr」と検索すれば以前の記事が見つかると思います。



さてOracleテキストの仕組みです。

単一項目にOracleテキストを付与すると内部で
複数のオブジェクトが生成されます。
仮に今回はENTRYというテーブルのTITLEカラムに
ENTRY_TITLE_ORATEXT_IDXという名前でOracleテキストを
作ったとします。

そうすると以下の3つが出来ます。

ENTRY_TITLE_ORATEXT_IDX
ENTRY_TITLE_ORATEXT_IDX$I
ENTRY_TITLE_ORATEXT_IDX$X



これらの内容はこんな感じ。


●ENTRY_TITLE_ORATEXT_IDX
これがOracleテキストのメインです。
このインデックスオブジェクトを経由して
残りのインデックスが呼ばれます。


●ENTRY_TITLE_ORATEXT_IDX$I

「$I」が付いたオブジェクト。
これは転置インデックスとなっています。
インデックスを付けたカラムの文字列を
トークンとして分解します。
基本的には日本語は2文字分割、英語は単語分割されます。
英語はスペースやハイフンなどの記号で単語化できますが
日本語は単語にするのが難しいので。。。

例えばこのエントリーと一つ前のエントリーの
タイトルである、

Oracleテキストの仕組み
OCNのネットワーク障害

からトークンを作る場合は以下のように分解されます。

  • Oracle
  • テキ
  • キス
  • スト
  • トの
  • の仕
  • 仕組
  • 仕み
  • OCN
  • のネ
  • ネッ
  • ット
  • トワ
  • ワー
  • ーク
  • ク障
  • 障害

こんな感じです。
どういつのトークンがあった場合は1つのレコードにまとめられます。
カラム構成は以下のような感じ。

・対象のトークンが含まれる実レコードの個数、
・実レコードが含まれるアドレス範囲、
・実レコードの場所

●ENTRY_TITLE_ORATEXT_IDX$X

これはトークン表に対するビットマップインデックスです。
トークン表をインデックスにすることにより
高速でデータの有無を判断して、
決められた範囲・レコードの場所(ROW_IDとかかな?)から
実レコード見つけるので高速でHITするわけです。


なかなか考えられている仕組みですね。
ちょっと関心しました。
2文字区切り(N-gram検索)なので
日本語の精度は微妙ですが、設定次第では辞書情報を持たせてより
精度の高い検索が出来ますが労力もかかります。

絵で見てわかるOracleの仕組み (DB Magazine SELECTION)

絵で見てわかるOracleの仕組み (DB Magazine SELECTION)

OCNのネットワーク障害

OCNで23日の23時半頃からネットワーク障害が起きているようです。

急につながらなくなったからモデムとルーター疑ったけど

DNS障害みたいです。

とりあえずパソコンやルーターDNSGoogleに変えると直ります。

パソコンでの設定方法はこちらを参考にしてみてください。

iPhone/iPadWiFi接続の方は

設定⇒Wi-Fi⇒繋がっているネットワークの【>】アイコンをタップ
DNSのところを8.8.8.8にして下さい。





全国的に起きている障害みたいですね。
これは責任者の方、飛ばされるのではないか・・・。

しかも週末の夜て。。。

【追記】

DNSというのは英語で書かれたURLから
接続するサーバを聞くためのシステムです。
それが繋がなくなったのでどこにも繋がらないわけです。
とりあえずGoogleDNSに変更していますが、
障害が落ち着いたら元に戻した方が良いかもしれません!

独自ドメインのWordPressでアフィリエイトブログ

このブログとは別でもうひとつギターの機材紹介ブログを
やってるんですが、せっかくやるならと
FC2で立ち上げたものをVPSサーバを借りて
独自ドメインで運用変更してみました。

エフェクター、レビューブログ


まず独自サーバにした理由をあげます。

・無料サービスはいずれなくなる可能性がある

独自ドメインだったらサーバを移行してもそれまでSEOが無駄にならない

・サーバの独自広告がつかない&自分のアフィリエイト広告が出せる
 ⇒ニッチなテーマなブログなのでサーバ代だけでもペイできたらうれしい。

・自分のサーバを持つとファイルサーバ代わりにしたり、
 技術検証したりと何かと便利

・なんとなく独自サーバの方がカッコイイしSEO効果がある
独自ドメインなんて.comで年間1000円かからないので
 たいしたコストじゃない

アフィリエイトで年3000万稼ぐ人の検索キーワードの法則

アフィリエイトで年3000万稼ぐ人の検索キーワードの法則


次にWordpressを選んだ理由ですが、
ここのブログでJAVAの話題が多いように
私はJAVAが得意です。
(ここ5年くらいは仕事ではマネージメントばかりですが。)

でも以前仕事でオープンソースのパッケージである
ZenCartとSugarCRMをカスタマイズしたことがあるので
PHPでできているWordpressは解析・カスタマイズがしやすいと踏んだから。

今は無料のWordpressテーマを元に
デザインをいじったり、
広告の出る位置、サイズなどを環境に合わせて
自動で最適化をしている程度ですが
UUやPVが増えたらユーザー参加型の機能を追加しようと思っています。

かゆいところに手が届くってのは
メンテナンスのモチベーション維持ができて楽しいです。
いずれここのブログもWordpress化するかもしれません。

近日中にどんなSEOアフィリエイトについても語ろうと思います。

本格ビジネスサイトを作りながら学ぶ WordPressの教科書2

本格ビジネスサイトを作りながら学ぶ WordPressの教科書2