037 今までありがとうございました!ブログの更新終了のお知らせ

20100416154931
お久しぶりです、id:EC-OneのAkiです!

前回のエントリから随分と間が空いてしまいました。
実は最近ナレッジセンターへの質問・相談が立て続けにやってきて、てんてこまいの日々を送っております。

4月からは新入社員を迎えて研修も始まり... ありがたいことにナレッジセンターはますます大盛況です!
学生の方も、社会人の方も、皆さん新年度は何かと慌ただしいことと思いますが、元気でお過ごしでしょうか?

さて、今日は皆さんに、ナレッジセンターレスキューサービスブログに関するお知らせがあります。

ナレッジセンターレスキューサービスブログ 更新終了のお知らせ

約1年前から「開発現場の実際とノウハウを公開する」ことを目的として、はてなダイアリーで始めた「ナレッジセンターレスキューサービスブログ」ですが、今回のエントリをもって更新はお休みすることとなりました。

このブログを通じて、イーシー・ワンの中に蓄えられていたナレッジを、少しでもオープンな形で提供することができ、とても楽しかったです。
サービス自体は今後も継続して社内外に提供してまいりますので、困ったときにふと思い出したら、どうぞお気軽にお問い合せ下さい。お待ちしております!

ブログを公開するにあたって親身にご協力いただいた株式会社はてなの田中様(id:mitsuki)、エントリの冒頭に掲載する後ろ姿の写真を撮らせてくれた社員の皆さん、エントリの内容を一緒に考えたり推敲してくれたナレッジセンターのメンバー、そして何よりこうしてブログを読んでくださっていた皆さま、本当にどうもありがとうございました。

今回をもって更新は終了となりますが、ここまでのエントリは引き続き公開されていますので、時折思い出して見にいらしていただけると嬉しいです。



20090826135203 今までのエントリ


技術に携わる皆さまが、いつも笑顔で過ごせるように、ナレッジセンターは今後も精進してまいります!
これまでご愛顧いただきまして、本当にどうもありがとうございました。
今後ともナレッジセンターレスキューサービス、そしてイーシー・ワンをどうぞよろしくお願いいたします。






JavaRuby及び周辺のソフトウェアを用いた開発に関して、企業があらゆる悩みごとを相談できるのが、ナレッジセンターの「レスキューサービス」です。
どんな相談でも親身に受け付けますので、レスキューサービスってなに?もっと知りたい!と思った方はお気軽に問い合わせ下さい。
問い合わせ画像リンク

036 インターネットに繋がらないマシン(CentOS)へのSubversion+Tracのインストール

お正月気分も抜けて、仕事をされている方はすっかり本調子でしょうか?
皆さん、こんにちは。id:EC-OneのAkiです。

最近、セキュリティ意識の向上により、さまざまな企業で「インターネットにつながらない環境」を多くみかけます。
CentOSなどのLinux系OSでは、何かをインストールする際に「ネットワークからダウンロードしてインストール」を行うコマンドを使うのがラク&一般的なのですが、いざネットにつながらない環境となると...?
今回はそんな「インターネットにつながらない環境」でのSubversionおよびTracのインストール作業についてお話しします。

インターネットにつながっているならば

インターネットに繋がっているならば、インストールされたばかりのCentOS5.4に、Subversion + Trac(日本語版) をインストールするのは容易いことです。(ここではApacheは既にインストール済であるものとします)

以下、対象マシンのアーキテクチャx86_64の場合です。

まず、

rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS//rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm

として、yumリポジトリを補強してから(そうしないと 古いバージョンのSubversionが入ってしまいます)

yum check-update
yum update

として、念の為、アップデートできるものは全てアップデートした後に、

yum install mod_dav_svn
yum install trac
yum remove trac
wget http://www.i-act.co.jp/project/products/downloads/Trac-0.11.5.ja1.zip
unzip Trac-0.11.5.ja1.zip
cd Trac-0.11.5.ja1
python setup.py install

とすれば終了です。あー、簡単!

ではインターネットにつながっていないなら?

しかし、インターネットに繋がっていない場合、インストールされたばかりのCentOS5.4に、Subversion + Trac(日本語版) をインストールするのは少々面倒になります。
依存関係やら何やら、といったややこしい事担当の yum というコマンドは、インターネットに繋がっていなければ役に立ちません。
yum(ヤム)が使えないだけに、やむなし!」と言ったってどうにもなりはしません。

その場合の手順ですが(x86_64の場合)、予め、自分のローカルPC(もちろんインターネットに繋がっている)に、ネットから、

neon-0.28.4-1.x86_64.rpm
sqlite-3.5.9-2.x86_64.rpm
subversion-1.6.6-1.rhel5.x86_64.rpm
mod_dav_svn-1.6.6-1.rhel5.x86_64.rpm
subversion-python-1.6.6-1.rhel5.x86_64.rpm
Trac-0.11.5.ja1.zip
setuptools-0.6c11-py2.4.egg
Genshi-0.5.1-py2.4-linux-x86_64.egg
mod_python-3.2.8-3.1.x86_64.rpm

たちを取得しておきます。

そしてこれらを、対象のインターネットに繋がらない CentOS 5.4 へ SFTPなどでアップロード。

その後、インターネットに繋がらない CentOS 5.4 上の適当なフォルダで、

rpm -ivh neon-0.28.4-1.x86_64.rpm
rpm -Uvh sqlite-3.5.9-2.x86_64.rpm
rpm -ivh subversion-1.6.6-1.rhel5.x86_64.rpm
rpm -ivh mod_dav_svn-1.6.6-1.rhel5.x86_64.rpm
rpm -ivh subversion-python-1.6.6-1.rhel5.x86_64.rpm
sh setuptools-0.6c11-py2.4.egg
easy_install Genshi-0.5.1-py2.4-linux-x86_64.egg
rpm -ivh mod_python-3.2.8-3.1.x86_64.rpm
unzip Trac-0.11.5.ja1.zip
cd Trac-0.11.5.ja1
python setup.py install

としてやれば、Subversionと日本語版Tracのインストールは完了です。

インストールが完了した後は、Projectの作成やら、認証関係の設定やら、tracのユーザ管理用のプラグインの追加やらが、"インターネットに繋がらない状態で"あるのですが、今回はその辺りの煩雑な設定は割愛します。

ちなみに、mod_python-3.2.8-3.1.x86_64.rpm については、捜すのに苦労しました。(結局 http://rpm.pbone.net/ で、mod_python.so と入力して SEARCH ボタンを押下)
本家のApacheのサイトにはC言語のソースしかなく、それをコンパイルするためのgccコマンドも対象のマシンにはなかったりしますから...

CentOSへのモジュールのインストールにyumが使えないというのは、高校生がせっかく習った判別式を使わずに二次方程式を解けと言われるのと同じ位致命的なことだ(?)、と実感したのでした。


ナレッジセンターでは「インターネットにつながらない環境で○○がしたい」などの相談も受け付けます。
トライアルで質問を無料で受け付けるキャンペーンも実施しておりますので、お気軽にお問い合わせ下さい!







JavaRuby及び周辺のソフトウェアを用いた開発に関して、企業があらゆる悩みごとを相談できるのが、ナレッジセンターの「レスキューサービス」です。
どんな相談でも親身に受け付けますので、レスキューサービスってなに?もっと知りたい!と思った方はお気軽に問い合わせ下さい。
問い合わせ画像リンク

035 jboss-5.1.0.GAでcronのような定期処理を実現


こんにちは、id:EC-OneのAkiです。
ちょっと間が空いてしまいましたが、その間、プロジェクト支援や調査依頼等でナレセンメンバ一同忙しくしておりました。
今回はそれらの調査の中から、ひとつご紹介したいと思います。

定期処理を行うには

定期的な処理を行うには OS の力を借りて実現する事が多いですね。Unix 系の cron や Windows 系のタスクスケジューラ等。
しかし、今回依頼のあったプロジェクトでは、運用チームとアプリ開発チームの分担やAPサーバ水平分散等の事情もあり、JBoss の機能を使用して実現することにしました。
それでは参りましょう!

JBossでの定期処理

jboss-5.1.0.GA 上で periodical な処理をする機能としては Timer と Scheduler があります。
Timer は実際に行いたい処理を設定ファイルの中に直接 beanshell というスクリプト言語で記述しなければなりません。
これに対して Scheduler は、設定ファイルの中で実行する java のクラスを指定する形ですので、今回のプロジェクトでは Scheduler での実現の方が良い、ということになりました。
以下、簡単な例です(WindowsXP 上の jboss-5.1.0.GA です)。

1. JBoss を起動します。

set JAVA_HOME=C:\Java\jdk1.6.0_16
set PATH=C:\Java\jdk1.6.0_16\bin;%PATH%
cd C:\jboss-5.1.0.GA\bin
run.bat

2. Scheduler でキックされる java のクラスを作成します。

package scheduler_sample;

import java.util.Date;
import org.jboss.varia.scheduler.Schedulable;
import org.apache.log4j.Logger;

public class Sample1ExSchedulable implements Schedulable {
    private static final Logger log = Logger.getLogger(Sample1ExSchedulable.class);
    private String arg1;
    private long arg2;

    public Sample1ExSchedulable(String arg1, long arg2) {
        this.arg1 = arg1;
        this.arg2 = arg2;
    }

    public void perform(Date now, long remainingRepetitions) {
        log.info("perform!!! now[" + now + "]" +
                 " remainingRepetitions[" + remainingRepetitions + "]" +
                 " arg1[" + arg1 + "]" +
                 " arg2[" + arg2 + "]");
    }
}

3. Scheduler でキックされる java のクラスをデプロイします
 ( Sample1ExSchedulable.javaコンパイルし、できたクラスファイルを scheduler_sample1.jar という名前の jar に固め、
  その scheduler_sample1.jar を C:\jboss-5.1.0.GA\server\default\deploy にコピーします)。

4. Scheduler の設定を行います。C:\jboss-5.1.0.GA\server\default\deploy にある scheduler-service.xml を以下のように編集します。

<?xml version="1.0"?>
<server>
  <mbean code="org.jboss.varia.scheduler.Scheduler"
         name="jboss.docs:service=Scheduler">
    <attribute name="StartAtStartup">true</attribute>
    <attribute name="SchedulableClass">scheduler_sample.Sample1ExSchedulable</attribute>
    <attribute name="SchedulableArguments">knowledge-center,123</attribute>
    <attribute name="SchedulableArgumentTypes">java.lang.String,long</attribute>
    <attribute name="InitialStartDate">NOW</attribute>
    <attribute name="SchedulePeriod">60000</attribute>
    <attribute name="InitialRepetitions">-1</attribute>
  </mbean>
</server>

5. 動作確認を行います。run.bat を実行しているコマンドプロンプトに、60秒ごとに、以下のログが出力されます。

13:17:15,963 INFO  [Sample1ExSchedulable] perform!!! now[Fri Nov 06 13:17:15 JST 2009] remainingRepetitions[-1] arg1[knowledge-center] arg2[123]

終わりに

以上が「OSに頼らずにJBossだけで定期処理を実現する方法」でした。
cron やタスクスケジューラ等での実装では、処理の先頭でまず JBoss が起動しているかいないかのチェックをしなければいけないケースがあります。この方法ではそもそも JBoss が起動している時のみ実行されますので、そのようなチェックが不要になります。意外と使えるケースがあるのではないでしょうか。

ナレッジセンターでは、「運用が楽になるようにアプリを作りたい」などの相談も受け付けます。
トライアルで質問を無料で受け付けるキャンペーンも実施しておりますので、お気軽にお問い合わせ下さい!







JavaRuby及び周辺のソフトウェアを用いた開発に関して、企業があらゆる悩みごとを相談できるのが、ナレッジセンターの「レスキューサービス」です。
どんな相談でも親身に受け付けますので、レスキューサービスってなに?もっと知りたい!と思った方はお気軽に問い合わせ下さい。
問い合わせ画像リンク

034 ITproで「ナレッジセンター」を題材にした連載が始まりました!


こんにちは、id:EC-OneのAkiです。

冷え込みが厳しい毎日ですが、皆さまいかがお過ごしですか?
今日は嬉しいお知らせがあるので、私の気持ちは春気分です!

企業システムでオープンソース活用時のトラブル解決法

日経BP社のITproで「企業システムでオープンソース活用時のトラブル解決法」の連載が始まりました

企業でLinuxをはじめとするオープンソース・ソフトを活用するには,商用ソフトと違うさまざまなノウハウが必要になります。この連載では,システム・インテグレータのイーシー・ワンで実際にオープンソース・ソフトのトラブル解決にあたってきた事例・ノウハウを基に,発生したトラブルやその解決手順をドキュメンタリ・タッチで紹介します。

企業システムでオープンソース活用時のトラブル解決法:ITpro

引用の通り、企業でオープンソースソフトウェアを利用する際に起こったトラブルと、その解決までの過程を描く連載なのですが、なんとその舞台がイーシー・ワンのナレッジセンターなんです。

気になる第1回は「Linuxセキュリティ機能の罠」

連載の第1回目は、「Linuxセキュリティ機能の罠」と題して、SELinuxのトラブルに見舞われた高野さんが主人公のお話です。

このプロジェクトは,あるユーザー企業で大規模Webアプリケーションの開発に取り組んできた。開発言語は「Ruby」,フレームワークとして「Ruby on Rails」(RoR),データベースには「MySQL」を採用。これをRed HatLinuxである「CentOS」上に配備して動作させる想定だ。
(中略)
高野氏はひとりほくそえんでいた。このプロジェクトで良い成果を収めれば,次の案件ではより重要なポジションを任せてもらえるに違いない。複数の案件でリーダー経験を積み,いずれはプロジェクト全体をまとめあげるポジションに着いて,華々しい舞台で活躍する。目の前に広がる輝かしい未来予想図に一人酔いながら,高野氏はテスト環境のセットアップに着手した。

しかし,そのテスト環境セットアップの過程に意地悪なトラブルが待ちうけていようとは,そのときの彼には知る由もなかった――

第1回:Linuxセキュリティ機能の罠 | 日経 xTECH(クロステック)

果たしてナレッジセンターは高野さんのピンチを助けることが出来るのでしょうか?
私、Akiもナレッジセンターのスタッフとして登場します。ぜひご一読下さい。

連載を通して「ナレッジセンターってこんなところなんだ」と知って欲しい

今回の連載はイーシー・ワンの社員であり、テクニカルライターとしてJavaPerlJRubyなどを題材にした記事や本を多く出している小竹さんが執筆を担当しています。
ナレッジセンターで実際に起こった事例についてヒアリングを行ったものを、ドキュメンタリ・タッチでまとめてありますので、非常に読みやすく笑いも交えた記事になっています。そして勿論、技術的な面でも間違いのないように、社内のアーキテクトがきちんと内容をチェックしています。

色々な人が協力して「ナレッジセンター」を舞台にした記事を書いてくれている、そしてその記事を読んでくれる方がいる、そう考えると本当に嬉しいものがあります。

知っている人にとってはなんでもないこと、あるいは周りに質問できるような人がいればすぐに解決するようなことでも、聞ける相手が見つからずに一人で考え込んでしまうことってありますよね。
元々ナレッジセンターは「そんな人の力になりたい」という想いから始まったサービスです。
この連載を通して、皆さまにナレッジセンターを疑似体験してもらえたり、少しでもナレッジセンターのことを知ってもらえたら嬉しい限りです。

ナレッジセンターでは、使ったことがある人ならすぐわかるような小さなつまづきでも、ご質問いただければ親身に対応いたします。
トライアルで質問を無料で受け付けるキャンペーンも実施しておりますので、連載をご覧になって気になった方はぜひお気軽にお問い合わせ下さい!







JavaRuby及び周辺のソフトウェアを用いた開発に関して、企業があらゆる悩みごとを相談できるのが、ナレッジセンターの「レスキューサービス」です。
どんな相談でも親身に受け付けますので、レスキューサービスってなに?もっと知りたい!と思った方はお気軽に問い合わせ下さい。
問い合わせ画像リンク

033 MySQLのはまりどころ(その2)〜不正データがエラーにならない


こんにちは、id:EC-OneのAkiです。

前回のエントリに引き続き、MySQLの小ネタをひとつ。

MySQLに不正な値を入れると...?

Oracle+Windows-31Jで構築したアプリをMySQL+UTF-8に変更していたエンジニアが気付いたこと。

Oracleは不正な値をINSERTやUPDATEで入れようとするとエラーになります。
不正な値とは、たとえば「カラムサイズを超える長さの文字列」等です。

日本語の文字列の必要バイト数は文字コードWindows-31Jであれば「1文字2バイト」で計算できます。
しかし、UTF-8にするとそれよりも必要バイト数が多くなります。これはUTF-8が日本語一文字に2〜4バイト使用するためです。

ところが、MySQLに明らかにカラムサイズを超える文字列を入れてもエラーになりません。
おかしいなと思ってデータを見てみると、そのデータの文章が不自然に終わってしまっています。
そうです、なんとMySQLはエラーにせずに黙って格納可能バイト数を超える部分をカットしてしまっていたのです。

日付・時刻の場合、不正な値を入れるとやはりエラーにならずに黙って「ゼロ」にしてくれます。
と言うことはたまたまタイミングよく閏秒の時に23時59分60秒という値をMySQLに入れると、それはゼロになってしまうということです。(最近のMySQL閏秒のときでもNOW()関数は23時59分59秒を返すようになっているようですが)

「何か間違っていたら最後の砦のDBが叱ってくれるはず」と思っていたのが、「間違っているかどうかは全て手前のアプリが自分で確認しなければならない」となるわけです。
まぁ、もちろんアプリでは入力チェックを行うようには作る&テストはするのですが、「DBに頼る事はできない」となった時点でちょっと負担が増える気はしますね...
しかし、この点だけを理由にMySQLをあきらめる必要はありません! なぜなら、不正な値に対してエラーを発生させる設定があるからです。

不正な値を入れるとエラーにしてくれる「STRICT_ALL_TABLES」設定

マニュアルの「SQLモード」のページにその設定に関する以下の記述があります。

STRICT_ALL_TABLES

すべてのストレージ エンジンに対して、Strict Mode を有効にする。無効データは排除の対象になる。

http://dev.mysql.com/doc/refman/5.1/ja/server-sql-mode.html#id3524189

この「STRICT_ALL_TABLES」設定によって、「不正データを水際で止める」事が出来るようになります!
この設定を使用するには、mysqldの起動引数に「--sql-mode="STRICT_ALL_TABLES"」オプションを追加するか、または設定ファイルmy.cnf(Unix)かmy.ini(Windows)に「sql-mode="STRICT_ALL_TABLES"」を追記します。
あー、良かった!

EC-Oneナレッジセンターは、OracleMySQLのような製品間の差異に関する相談でも親身に受け付けます!







JavaRuby及び周辺のソフトウェアを用いた開発に関して、企業があらゆる悩みごとを相談できるのが、ナレッジセンターの「レスキューサービス」です。
どんな相談でも親身に受け付けますので、レスキューサービスってなに?もっと知りたい!と思った方はお気軽に問い合わせ下さい。
問い合わせ画像リンク

032 MySQLのはまりどころ(その1)〜行ロックのつもりでテーブルロック


こんにちは、id:EC-OneのAkiです。

なかなか技術ネタが書けない今日この頃ですが、小ネタでもいいから書いてみようと思います。

MySQLのロック

数年前までは、EC-Oneが業務システムを開発する場合に、DBにOracleを使用することが多かったです。
ODBが適する業務の場合は別ですが、RDBが適する業務の場合のOracleの使用率はダントツ。
そのため、Oracle以外のRDBを使用する場合でも、最初のうちは「DB2Oracleとここが違う」等、Oracleとの比較で理解/説明しようとする事が多かったです。
そんな中で出会ったMySQLのハマりポイントをご紹介します。

MySQLって行ロックじゃないの?

MySQLを使用するといっても、そのエンジンにはInnoDBMyISAMがありますが、最近のデフォルトはInnoDBで、これは行ロックが基本となるエンジンです。
ちなみに、ちょっと前のMySQLはインストール時にMyISAMの方が有効になっており、MyISAMトランザクションに非対応なので期待した動作にならない(Rollbackしても値が戻らない)事がありました。

さて、行ロックのつもりでアプリを構築&テストしていたときのこと、「どうもテーブルロックになっているっぽい」との声が開発メンバから上がりました。
しかもそれが発生するのが特定のテーブルでだけという不思議な現象でした。

実はMySQL(InnoDB)は「当該テーブルにプライマリキーもユニークキーもない場合、ロックはテーブルロックとなる」のだったのです。
しかもそれはselect 〜 for update文のように「明示的に目的レコードだけをロックする」目的の場合でもやはりテーブルロックなのです。
文献を読めばわかること、かつ小さなことではありましたが、初めてMySQLを使用した我々には衝撃の事実だったわけです。これからMySQLを使用する方々は「行ロックとしたいテーブルにはプライマリキーまたはユニークキーを設ける」ようにご注意を!

ナレッジセンターでは、詳しく文献を読めばわかるかも知れないことや、使ったことがある人ならすぐわかるような小さなつまづきでも、ご質問いただければ親身に対応いたします。
トライアルで質問を無料で受け付けるキャンペーンも実施しておりますので、お気軽にお問い合わせ下さい!







JavaRuby及び周辺のソフトウェアを用いた開発に関して、企業があらゆる悩みごとを相談できるのが、ナレッジセンターの「レスキューサービス」です。
どんな相談でも親身に受け付けますので、レスキューサービスってなに?もっと知りたい!と思った方はお気軽に問い合わせ下さい。
問い合わせ画像リンク

031 OSC2009 Tokyo/Fall 2日目 本日もブース展示中!


おはようございます、id:EC-OneのAkiです。

本日もOSC2009 Tokyo/Fallにて、ブース展示を行っています。
ナレッジセンターレスキューサービスのチロルチョコを配布すると共に、売れるECを実現するためのネットショップ構築パッケージ「EC-Rider」のご紹介も行っております。

セミナー講演の合間にぜひお立ち寄り下さい。

ナレッジセンターではシステム開発に関する初歩的なご質問から、どこが問題なのかすら分からない入り組んだバグのお悩みまで、幅広くお応えしています。
トライアルで質問を無料で受け付けるキャンペーンも実施しておりますのでブースにてお気軽にお声がけ下さい。







JavaRuby及び周辺のOSSを用いた開発に関して、企業があらゆる悩みごとを相談できるのが、ナレッジセンターの「レスキューサービス」です。
どんな相談でも親身に受け付けますので、レスキューサービスってなに?もっと知りたい!と思った方はお気軽に問い合わせ下さい。
問い合わせ画像リンク