2014年1月26日日曜日

Vagrant の勉強は始めました

最近、サーバー環境の自動化関連ツールの動向が激しい気がしています。 特にお盛んなのは Chef だと感じています。

乗り遅れない為にも Chef の勉強を始めようと思ったのですが、調べていくうちに Vagrant という仮想サーバーの操作ツールを知ることになりました。 いつもであれば目的のものだけ勉強するところですが、この Vagrant が Chef の勉強をする上でもとても便利なツールとなりそうだということが分かってきました。 ので、少し遠回りではありますが Vagrant について学習することにしました。

今回も学習した結果を記事にしてみました。 やはり文章化することで、頭がとても整理されますし口でも人に説明しやすくなるように感じています。

ということで Windows 上で Vagrant による仮想サーバーの構築ができるようになりましたので、来週は本題の Chef の学習に取り掛かれたらいいなと思っています。

2014年1月6日月曜日

新年早々Rubyを猛勉強してみた

新年明けましておめでとうございます。

年末年始は奇跡の9連休だったわけですが、諸事情によりRuby環境構築について勉強する必要があり、毎日2~3時間コツコツと勉強しました。 せっかく勉強するのだから、勉強した成果をホームページにまとめようと思い立ち、勉強した内容を言語化することにしました。

完成したWEBページは下記のホームページになります。

Ruby環境構築入門
http://weblabo.oscasierra.net/ruby/

年始早々、「よく勉強した」感で満ち溢れております。 今年も邁進と飛躍(を目標と)する年にしたいと思います。

2010年7月5日月曜日

Pechait! - テレビやラジオの感想をTwitterで共有するサービス

どうも、OSCAです。

最近、勢いでテレビやラジオの感想をリアルタイムに共有するサービス「Pechait!」を作成しました♪ インターネットでラジオが聴けるradikoも開始されましたし、是非テレビやラジオを楽しみながら、Pechait!で他の方の感想もお楽しみください♪
http://www.pechait.com

このブログ「MemoIt」は技術のこと書くブログなので技術的なことを書くと、Pechait!は Google の AppEngine を利用しています♪ 言語は Java で、ひがやすをさんが作成しているSlim3を利用しています。

クラウドを利用したサービスを作成するのは初めてだったので、いろいろなTipsが必要だということを実感しております。 Key-Value Store もクセがありますので最初は苦戦の連続ですね。

AppEngine での作成Tipsなどは、また別の機会にでも書ければと思います。

とりあえず、今回は、Twitterでテレビやラジオの感想をリアルタイムに共有するサービス「Pechait!」を宜しくお願いします。

Pechait!
http://www.pechait.com

2010年3月26日金曜日

シェルスクリプト開発Tips

シェルスクリプトを作成する前に知っておくと良いこと

シェルスクリプトの文法チェックを行うには
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/780chshsyntax.html

シェルスクリプトをデバッグするには
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/784debugsh.html

シェルスクリプトの一部分をデバッグするには
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/787debugsspert.html

ShellEd : Eclipseプラグインのシェルエディター
http://sourceforge.net/projects/shelled/

2010年2月15日月曜日

Integer.parseInt()

先程、Java の Integer.parseInt メソッドについて思わぬ挙動をされて驚いたのでメモ。

どうやら、Integer の parseInt メソッドの引数に全角数字の文字を代入しても、true が返却されるのが仕様みたいだ。 ハマったー(汗)

そして、Apache Commons の StringUtils クラスの isNumeric メソッドについても同様だった。

僕にとっては思わぬ落とし穴だった(汗) う~ん、文字チェックの場合は正規表現で [0-9] のようにしっかり指定した方がよさげだ。

2009年12月8日火曜日

HttpClient4.0 を使ってみる (1) -とりあえず使ってみる編-

The Apache Software Foundation で開発されている HttpComponents である HttpClient のバージョン4.0がリリースされた。 ちょうど個人的にHTTPでゴニョゴニョする案件があるので、英語のチュートリアルを読みながらやってみた。

とりあえず、YAHOO!にPOSTでアクセスしてみた。(YAHOO!さん、ごめんなさい)

HttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost("http://www.yahoo.co.jp");

// SET PARAMETERS
List params = new ArrayList();
params.add(new BasicNameValuePair("hoge", "moge"));
post.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));

// EXECUTE
HttpResponse response = this.httpClient.execute(post);
System.out.println(response.getStatusLine().getStatusCode());
System.out.println(EntityUtils.toString(response.getEntity()));


HttpClient3.1の時とは、クラスからメソッドまで一新されているので、概念に慣れるまでは勉強が必要かな。特に上記の例を見て分かる通り、HTTPレスポンスの扱い方が大きく変わっている。

2009年11月17日火曜日

Java : ConcurrentModificationException

Javaでコレクション処理中に ConcurrentModificationException が発生したのでMEMO。

<要件>
要件は以下のようだった。
  • マップに含まれる要素を全て検査して、条件hogeに一致した要素をマップから削除する

<失敗なソース>
for( Iterator iterator = map.keySet.iterator(); iterator.hasNext(); ) {
    Object key = iterator.next();
    if( isHoge(key) ) map.remove(key);
}

この際、iteratorのnextメソッドで、ConcurrentModificationExceptionが発生した。

理由は、mapの持つ要素のコレクションをiteratorで回しているにも関わらず、ループの中でmap自体の要素を削除していっているため、ループのためのコレクションが保てなくなったため。


<修正後のソース>
Object[] keys = super.keySet().toArray();

for( Object key : keys ) {
    if( this.exceededLimitTime(key) ) {
        this.remove(key);
    }
}

あー、考えれば当たり前のことなのに、考えが一転倒になってしまって、ハマってしまった・・・(涙)

2009年11月6日金曜日

画像認証ライブラリー Kaptcha を使ってみる vol.1 (導入~画像表示)

Java用の画像認証ライブラリー "kaptcha" を使ってみようと思う。

このエントリーを読んでいる人に、ここで言うところの「画像認証」が何だかを説明する必要はないと思うので、「画像認証」についての説明は省略。 面倒くさいから説明しないんじゃないだk(ry

kaptchaを利用すると、
  1. ↓このような認証画像を作成してくれて
  2. それと同時に、作成した認証画像に書かれた文字列をセッション変数に代入してくれます
ので、あとは、入力ボックスなどに入力された値と、セッション変数の値を比較すれば、認証ロジックの完成です。



数ある画像認証ライブラリーの中でも、なぜ kaptcha にしたのかというと・・・・・・「実装が簡単だから」。 実装してみて改めて思ったが、驚くほど簡単だった! kaptchaは、Google code で Apache License 2.0 で公開されているプロジェクトなのだが、そのプロジェクトページに、「他の画像認証ライブラリーよりも優れているよ」という記述があるので、気になる方は是非チェックして欲しい。

1. kaptchaをダウンロード
前置きはこのくらいで、さっそくダウンロード! ダウンロードページから最新版をダウンロードしよう。 これを書いた 2009年11月06日現在の最新版は、kaptcha v2.3 だったので、kaptcha-2.3.zip をダウンロードした。

言うまでもないと思うけど、ダウンロードしたzipファイルは解凍してくださいね。

2. jarを配置
わざわざ説明するまでもないかもしれないけど、ダウンロードした kaptcha の jar を、J2EEプロジェクトの /WEB-INF/lib/ に、配置してくださいね。

3. 認証画像を表示してみよう
では早速、認証画像を表示してみよう!web.xml に記述しましょ。 ↓こんな感じです。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">

<servlet>
<servlet-name>Kaptcha</servlet-name>
<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Kaptcha</servlet-name>
<url-pattern>/Kaptcha.jpg</url-pattern>
</servlet-mapping>
</web-app>


ここでは、コンテキスト(context)直下の /Kaptcha.jpg にアクセスすると、認証画像が表示されるようにしました。 (というか、上記でダウンロードしたzipファイルに含まれているサンプルプログラムそのままです。)

tomcat とかのアプリケーションサーバーにデプロイして、早速アクセスしてみましょう。 ローカルのtomcatで試しているのであれば、 http://localhost:8080/context/Kaptcha.jpg にアクセスしましょう。 (URLは個人個人の環境にあわせてくださいね。 URLの context もちゃんと書き換えてくださいね。)

どうですか? 表示されましたか?

次回へ続く。

2009年11月2日月曜日

ロリポップ!でPHP5メモ

ロリポップ!で利用できるPHPのバージョンがPHP5に完全移行されることもあり、PHP5の設定に変更したときにハマったメモ。

apache権限で作成されたファイルが削除(変更)できない
この件は、いろいろなWEBページでも取り上げられていて、「サポセンに依頼した」とか書いてあるブログなどもあったが、2009年11月02日現在、ロリポップ!で提供している「ロリポップ!FTP」上からフォルダごとの設定で「apache権限からユーザー権限に変更する」みたいなチェックボックスでファイルのオーナーを変更できるようになっていた。 (問い合わせが多かったから、作ったのかな?)

サポセンに問い合わせしなくても大丈夫♪ これで変な心配しないで、PEARをgo-pear.phpからインストールできちゃうね♪

2009年9月14日月曜日

robots.txt まとめ

現在追記中。。。 (タブブラウザのタブを閉じるまえにココにメモww)

どこに配置するのか?
  • ドメインのルートに、「robots.txt」というファイル名で配置する。
  • レンタルサーバー等を利用している関係などでドメインのルートに robots.txt を配置できない場合は、各ページにrobot対策用のmetaタグを記述する。

利用上の注意点
  • robots.txt に強制力は無いため、robots.txtを評価しない検索エンジン(巡回プログラム)も存在する。 (クライアントに "検索エンジンには絶対に引っかかりません"などということは言わないこと!)


■参考サイト
検索エンジンロボットを制御する
http://tech.bayashi.net/pdmemo/robots.html

Google ウェブマスターツール -
robots.txt ファイルを使用してページをブロックまたは削除する
http://www.google.com/support/webmasters/bin/answer.py?hl=jp&answer=156449

Yahoo! Japan 検索 - クローラー
http://info.search.yahoo.co.jp/crawl/index.php

2009年8月17日月曜日

ゲームの「面」とは・・・?

友達と「しょこたん」こと中川翔子の話題になったのがキッカケで、しょこたんブログを読んだんだけど、とあるエントリーに「マリオの面に~」という記述があったんだ。 「面」って表現、久しぶりに見た気がする(笑) というか、今見ると何だか違和感のある表現だなぁ~。

たしかに子供のころ「STAGE」のことを「1面」「2面」と言って話をしていたけど、「面」ってなんだぁ~?

と思ってYahoo!知恵袋さんでも調べてみたところ、同じ疑問を持った人の質問を発見ー!

ゲームのstageのことを“面”と呼ぶようになったのは何故ですか?いつからですか?
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1322173313

テレビゲームの「1面」や「1き」って何ですか?
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1218807592

なるほどー。"画面"の"面"なのかぁ~。

ここからは僕の推測だけど、もしかしたら「面」という表現をした最初の人は、ゲーム開発者なのでは?(=ゲームプレーヤーではない) 僕もシステムエンジニアの端くれだけど、システムを開発していると、会議中などにポロッと深く考えずに発した言葉をプロジェクトが終わるまで(下手したら会社内でずっと)使うことって良くあります。

たとえば以前にあったのは、アプリケーションの一部のクラスファイルだけコンパイルし直して、そのクラスのみをデプロイすることを会議中にポロッと「差分デプロイ」なんて言ったら、プロジェクトの最後まで「差分デプロイ」と表現してたり。皆さんもそのようなこと、ありませんか?

だからたまに僕の周りでは新しい表現が発された時に「今、○○って言ったけど、以後、この○○って言い方で良い?」と確認することもあります。 下手にみんなが使い始めてしまうと、混乱を招く表現だったりするからね。

話が少しずれましたが、ということで、どうも「面」なんてことはプレーヤーが言いそうにないなぁ~と僕は思ったのです。 どちらかと言えばゲーム開発者が「面」と会議やら開発の行程でポロッと言ってしまい、それが広まったのではないのかなぁ~と思ったわけです。


あくまでも推測なので、正しい経緯をご存知の方は是非ご一報ください。

2009年2月24日火曜日

iBATISメモ

iBATIS for Java を利用するときに参考になる情報。

参考サイト
iBatisオフィシャルホームページ
http://ibatis.apache.org/

日本語マニュアルはココ
http://svn.apache.org/repos/asf/ibatis/java/ibatis-2/trunk/ibatis-2-docs/ja/

iBATISを使ったO/RマッピングによるDBアクセスの実例 - CodeZine
http://codezine.jp/article/corner/60

第2回:SQLを直接記述できるiBATIS(前編) - ThinkIT
http://www.thinkit.co.jp/free/article/0606/13/2/
第3回:SQLを直接記述できるiBATIS(後編) - ThinkIT
http://www.thinkit.co.jp/free/article/0606/13/3/

Taosoftware: iBatis アーカイブ
http://www.taosoftware.co.jp/blog/java/ibatis/

iBATISのキャッシュでディスクを使うなら、OSCache、EHCacheどっち
http://www.inter-office.co.jp/contents/109/


助言メモ
iBATISで参照(SELECT)した大量のデータをCSVファイルのようなファイルに出力するプログラムを書く場合は、 RowHandler の知識を勉強した上で iBATIS を利用した方が良いでしょう。 このことは、上記のリンクでは「
iBATISを使ったO/RマッピングによるDBアクセスの実例 3:CodeZine」で扱っています。


更新履歴
2009.12.15 - リンク先のURL変更を修正。

2008年10月2日木曜日

sudoではまった

Linuxコマンド「sudo」。sudoの使い方を同僚に説明する時に、先生役の自分がはまってしまった(汗)

現在利用しているローカルPC「mypc1」に、Linuxユーザ 「user1」「user2」 がいるとします。 今、user1からuser2のユーザでシェル「/opt/hoge/ls.sh」を実行したいと考えています。

シェルの中身は以下のようにしました。
ssh user2@mypc2 ls -al

たったそれだけ。さて実行だ。
[user1@mypc1 ~] $ sudo -u user2 /opt/hoge/ls.sh

しかし、たったこれだけの処理なのに残念な結果が返ってきた。
sesh: Error execing /opt/hoge/ls.sh: Exec format error

なんだコレーッ! むぅ~、lsをするだけで、なんでフォーマットエラーなんだッ! 悩むこと1時間。。。 これを読んでいるLinuxユーザの方なら、もぅお分かりになっているかも? はぃ、シェルが間違えていました。
#!/bin/bash
ssh user2@mypc2 ls -al

「#!/bin/bash」の行が足りなかったのですね(泣) 初歩的な漏れでした、こんなことがないよう、皆様をお気をつけください。


#
# キーワード「sesh: Error execing」でGoogleで検索しても
# 日本語ドキュメントがでてこなかったのでこの記事を書いてみました。
# 同じことで迷った方の手助けになればと思います。
#

2008年9月7日日曜日

HDDクリーニング♪

Windows XP マシーンの ハードディスクのクリーニングをしているときに、”Documents and Settings”フォルダが肥大化していることに気がついた。 その中でも明らかに不要なものを発見! さっそく撃退した♪

C:\Documents and Settings\All Users\Application Data\Apple Computer\Installer Cache

フォルダは、iTunesやQuickTimeが自動アップデートする時などにインストーラーがココに保存されて実行されるっぽい。 4,5回アップデートしたらしい形跡があって、それで400MBくらい占有していたので、さっそくポイした♪

みなさんも是非チェックしてみてください。

2008年8月29日金曜日

とにかくプロキシの設定をする

# この記事はコチラに移動しました。 最新版はコチラをご覧下さい。

社内にLinux PCを導入したのだけれど、そのLinux PCからインターネットに接続するためには会社のプロキシを経由させないといけないため、Linux PCにインストールされたアプリケーションにプロキシの設定をしないといけない・・・・・・そんなときに参考にしてください。

尚、私が利用している環境は CentOS, RedHat です。

本文では自社のプロキシを「proxy.mycompany.co.jp:8080」と仮定します。ここは環境に合わせて書き換えてください。

[yum]
「/etc/yum.conf」に以下の記述を追記します。

proxy=http://proxy.mycompany.co.jp:8080/


[wget]
「/etc/wgetrc」に以下の記述を追記します。

http_proxy=http://proxy.mycompany.co.jp:8080/


[rpm]
rpmコマンドを実行する際に、オプションで指定する。

$ rpm --httpproxy [プロキシサーバのIPかアドレス] --httpport [ポート番号] --import http://hoge.org//hoge/moge


[Apache]
Apacheのプロキシ設定で、さらにプロキシを通すようにする場合。(多段プロキシ)
プロキシ関連の設定をしている箇所に以下を追記。

ProxyRemote http http://proxy.mycompany.co.jp:8080/


※この文章は気づいたら、どんどんアプリを追記していく予定。

2009.03.25 - rpmコマンドの設定方法を追加。