node.jsをherokuに乗せてみた

ずっと前からherokuがnode.jsをサポート開始したと聞いたが、なかなかやる気が出なくて試してなかった。今日やっと試してみたのでメモ。
OSXでのnode.jsの環境もこの機会でメモしとこうと。

node.jsのインストール

$ wget http://nodejs.org/dist/node-v0.4.12.tar.gz$ tar zxvf node-v0.4.12.tar.gz 
$ ./configure 
$ make
$ sudo make install

npm(node package manager)インストール

$ wget http://npmjs.org/install.sh
$ sudo ./install.sh

expressインストール

$ sudo npm install -g express
$ sudo npm install -g jade

expressアプリ作成

$ express node-js
$ node app.js
//ここでエラー。express が見つからないと
//app.jsの先頭に以下のパスを追加
require.paths.push('/usr/local/lib/node_modules');

無事に起動されてlocalhost:3000にアクセスできたら、herokuにpush。
通常のrailsのように以下のコマンドでcreate
$ heroku create

git push時に以下のエラーが発生

—–> Heroku receiving push
! Heroku push rejected, no Rails or Rack app detected

以下のコマンドで作成。heroku createとの違いはドメインは ***.heroku.comではなく、***.herokuapp.comになる。
$ heroku create –stack cedar

無事pushできてアクセスしてみると、またエラー
$ heroku logs
で見てみるとportが問題らしい。
app.jsのport設定を修正。

//app.listen(3000);
var port = process.env.PORT || 3000;
app.listen(port, function(){
     console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
});

Procfile作成

web: node app.js

もう一度push。
とりあえずできた。

http://node-js.herokuapp.com

OS X (Lion) に Hadoop をインストールしてみる

OS X (Lion) に Hadoop 0.21.0 インストールメモ

$ cd dl

$ wget http://ftp.jaist.ac.jp/pub/apache//hadoop/core/hadoop-0.21.0/hadoop-0.21.0.tar.gz

$ tar zxvf hadoop-0.21.0.tar.gz 

$ sudo mv hadoop-0.21.0 /usr/local/

hadoopユーザ作成

$ sudo dscl . -create /Groups/_hadoop PrimaryGroupID 1000
$ sudo dscl . -append /Groups/_hadoop RecordName hadoop

$ sudo dscl . -create /Users/_hadoop UniqueID 1000
$ sudo dscl . -create /Users/_hadoop RealName "Hadoop Admin"
$ sudo dscl . -create /Users/_hadoop PrimaryGroupID 1000
$ sudo dscl . -create /Users/_hadoop NFSHomeDirectory /var/lib/hadoop
$ sudo dscl . -create /Users/_hadoop Password "*"
$ sudo dscl . -append /Users/_hadoop RecordName hadoop

ssh設定

$ sudo su - hadoop
$ ssh-keygen
$ cd .ssh
$ cat id_rsa.pub >> authorized_keys

Hadoop設定

$ sudo vi conf/hadoop-env.sh 
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home

confファイル設定 /user/local/hadoop/conf/

core-site.xml 
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

  <property>
    <name>hadoop.tmp.dir</name>
    <value>/var/lib/hadoop</value>
  </property>

  <property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:9000</value>
  </property>

</configuration>

hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>

</configuration>

mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

  <property>
    <name>mapred.job.tracker</name>
    <value>localhost:9001</value>
  </property>

</configuration>

logsディレクトリ作成

$ sudo mkdir /usr/local/hadoop/logs
$ sudo chown hadoop:hadoop /usr/local/hadoop/logs

NameNodeのフォーマット

$ sudo su - hadoop
$ /usr/local/hadoop/bin/hadoop namenode -format

起動

$ sudo su - hadoop
$ /usr/local/hadoop/bin/start-all.sh

ssh拒否エラーが出た時は、コントロールパネルからリモートログインを許可

http://localhost:50070

アクセスしてみる。

Go Lang on AppEngine api_version 3 でいろいろ


Appengine SDKを1.6にアップグレード。
api_versionを2から3に変更。
するとエラーがたくさん。

undefined: “template”.MustParseFile
too many arguments in call to “template”.ParseFile
cannot use “Comment” (type string) as type “appengine”.Context in function argument:
string does not implement appengine.Context (missing AppID method)
cannot use nil as type string in function argument
not enough arguments in call to “appengine/datastore”.NewIncompleteKey

などなど。

以下が修正した箇所。

datastore.NewIncompleteKey("Comment", nil)
↓
datastore.NewIncompleteKey(c,"Comment", nil)

datastore.NewKey("Greeting", "", id, nil)	
↓
datastore.NewKey(c, "Greeting", "", id, nil)	

"template"
↓
"old/template"

templateが新しくなったようだが、取り敢えずの既存のやつを動かしたいので、oldにする。
datastoreから新しいキーを取得するときに contextを第一パラメータに追加。

以上で、api_version2で動いた奴が正常に動くようになった。

http://golangonengine.appspot.com/

Mac OSX ( Lion ) にRabbitMQをインストールしてみる。

Mac Portでインストール方法:

	
$ sudo port install rabbitmq-server

・・・・
--->  Computing dependencies for rabbitmq-server
--->  Dependencies to be installed: erlang libxslt libxml2
--->  Building erlang
Error: Target org.macports.build returned: shell command failed (see log for details)
Error: Failed to install erlang
Log for erlang is at: 
Error: The following dependencies were not installed: erlang libxslt libxml2
Error: Status 1 encountered during processing.
To report a bug, see <http://guide.macports.org/#project.tickets>

エラーだ〜

erlangでエラーになったみたい。

erlang だけインストールしてみる。

	
$ sudo port install erlang
--->  Computing dependencies for erlang
--->  Building erlang
Error: Target org.macports.build returned: shell command failed (see log for details)
Error: Status 1 encountered during processing.
To report a bug, see <http://guide.macports.org/#project.tickets>
$ 

失敗。ググッてみたらLionのmacportでどうもおかしいみたい。
Portをやめてソースコードからmakeしてインストールしてみる。
http://www.erlang.org/download.html
Source Fileをダウンロードして解凍

	
$ tar zxvf otp_src_R14B04.tar.gz 
$ cd otp_src_R14B04
$ ./configure --enable-hipe
$ make
$ sudo make install
$ erl -version
Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 5.8.5
Dongri-Jin:otp_src_R14B04 jp61077$ 
$ which erl
/usr/local/bin/erl
$ 

sudo port install rabbitmq-server 再挑戦みたけど駄目だった。やっぱり、erlangはmacportでインストールしないと駄目っぽい

	
$ sudo port -f -v install erlang +odbc
....

$ erl -version
Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 5.8.5
$ which erl
/opt/local/bin/erl
$ 

成功したようだ。
再挑戦

	
$ sudo port clean rabbitmq-server
Password:
--->  Cleaning rabbitmq-server
$ sudo port install rabbitmq-server

--->  Creating launchd control script
###########################################################
# A startup item has been generated that will aid in
# starting rabbitmq-server with launchd. It is disabled
# by default. Execute the following command to start it,
# and to cause it to launch at startup:
#
# sudo port load rabbitmq-server
###########################################################
--->  Installing rabbitmq-server @2.6.1_0
--->  Activating rabbitmq-server @2.6.1_0
--->  Cleaning rabbitmq-server
$ 

成功!

サーバーを起動

	
$ sudo rabbitmq-server

Mac OSX ( Lion ) に RubyOnRails3.1 環境構築

Macは Snow Leopard から Lion にアップグレードしたやつ。
Railsは3.0.3インストール済み。(Mac ( Snow Leopard ) に RubyOnRails3 環境構築

今回のそれのバージョンアップである。

環境確認

$ rails -v
Rails 3.0.3
$ which rails
/opt/local/bin/rails
$

アップデート

$ sudo gem update rails
$ rails -v
Rails 3.1.1
$

Heroku for Java

Heroku が Javaをサポートしたということで試してみた。

1. プロジェクト作成

$ mvn archetype:create -DgroupId=com.heroku.javanese -DartifactId=Javanese
$ cd Javanese
$ mvn eclipse:eclipse

eclipseにインポートして covert to maven project

2. HelloWorld.java作成

package com.heroku.javanese;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.*;

public class HelloWorld extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.getWriter().print("Hello from Java!\n");
    }

    public static void main(String[] args) throws Exception{
        Server server = new Server(Integer.valueOf(System.getenv("PORT")));
        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
        context.setContextPath("/");
        server.setHandler(context);
        context.addServlet(new ServletHolder(new HelloWorld()),"/*");
        server.start();
        server.join();
    }
}

3. pomファイル修正

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.heroku.javanese</groupId>
	<artifactId>Javanese</artifactId>
	<version>1.0-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>Javanese</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.eclipse.jetty</groupId>
			<artifactId>jetty-servlet</artifactId>
			<version>7.4.5.v20110725</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>appassembler-maven-plugin</artifactId>
				<version>1.1.1</version>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>assemble</goal>
						</goals>
						<configuration>
							<assembleDirectory>target</assembleDirectory>
							<generateRepository>false</generateRepository>
							<programs>
								<program>
									<mainClass>com.heroku.javanese.HelloWorld</mainClass>
									<name>webapp</name>
								</program>
							</programs>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

4. .gitignore ファイル作成

$ echo "target" > .gitignore

5. いろいろ設定

$ mvn install

プロジェクトルートに Procfile ファイル作成

web: sh target/bin/webapp

環境変数 REPO に .m2/repository 設定

$ export REPO=$HOME/.m2/repository

foreman インストール、起動

$ sudo gem install foreman
$ foreman start

6. ローカルアクセスしてみる。
http://localhost:5000/

7. heroku に deploy

$ git init
$ git add .
$ git commit -m "init"
$ heroku create --stack cedar
$ git push heroku master

# heroku.com でプロジェクト名変更
$ git remote rm heroku
$ git remote add heroku git@heroku.com:javanese.git
$ git push heroku master

8. できた〜
http://javanese.heroku.com

tomcat maven plugin 使ってみる

前提条件は apache,tomcat,maven がインストールされてる環境である。

1. Apache/Tomcat連携 (proxy_ajp.conf 作成)

[root@li336-103 ~]# vi /etc/httpd/conf.d/proxy_ajp.conf
ProxyPass /manager/ ajp://localhost:8009/manager/
ProxyPass /blog ajp://localhost:8009/blog

2. tomcat設定

[root@li336-103 ~]# vi /usr/local/tomcat/conf/tomcat-users.xml
<tomcat-users>
...
  <role rolename="tomcat"/>
  <user username="username" password="password" roles="tomcat"/>
...
</tomcat-users>

3. tomcat-maven-plugin インストール
tomcat-maven-plugin は Maven のセントラルリポジトリではなく、codehaus の Repository で提供されているので、pom.xml でリモートリポジトリ追加。
pom.xml

<project>
...
<repositories>
     <!-- tomcat-maven-plugin -->
     <repository>
          <releases>
               <enabled>false</enabled>
          </releases>
          <snapshots />
          <id>Maven Snapshots</id>
          <url>http://snapshots.maven.codehaus.org/maven2/</url>
     </repository>
</repositories>

<!-- tomcat-maven-plugin -->
<pluginRepositories>
     <pluginRepository>
          <releases>
               <enabled>false</enabled>
          </releases>
          <snapshots />
          <id>Maven Snapshots</id>
          <url>http://snapshots.maven.codehaus.org/maven2/</url>
     </pluginRepository>
</pluginRepositories>

...
</project>

4. tomcat-maven-plugin の設定
pom.xmlとsettings.xmlを設定

pom.xml

<build>
     <!-- tomcat-maven-plugin -->
     <plugins>
          <plugin>
               <groupId>org.codehaus.mojo</groupId>
               <artifactId>tomcat-maven-plugin</artifactId>
               <version>1.0-SNAPSHOT</version>
               <configuration>
                    <server>tomcat</server>
                    <url>http://hoge.com/manager</url>
               </configuration>
          </plugin>
     </plugins>
</build>

settings.xml

</settings>
...
  <servers>
    <server>
      <id>tomcat</id>
      <username>username</username>
      <password>password</password>
    </server>
  </servers>
...
</settings>

5. deploy

macbook:blog dongriab$ mvn tomcat:redeploy

GDD 2011 Dev Quiz 神経衰弱ゲーム

久しぶりにJavaScript書いてみた。プログラム書くほどのレベルでもないが。。。

必要な方はこちらから。。。

http://dl.dropbox.com/u/358152/temp/GDD2011-webgame.zip

www クリックするのが面倒だったので少し修正して完全自動化

http://dl.dropbox.com/u/358152/temp/GDD2011-webgame-2.zip

GDD 2011 Dev Quiz Android

Android 問題の回答 !

http://dl.dropbox.com/u/358152/temp/GDD2011-Android.zip

NexusOne 2.3.4 で MMS使えるようにする

iPhone3GのsimをN1に差した場合です。

まずは、@softbank.ne.jp メールアドレスを取得。(https://my.softbank.jp/msb/d/top)

次に 以下のファイルをダウンロードする。

http://db.tt/u3qoUjc

http://db.tt/dh6sr1v

http://db.tt/hQeqs83

1. update-mms-20110413.1-cm7-signed.zip を update.zip にリネームしてsdcardにコピー

2. 本体の電源が切れた状態から、ボリュームダウンキーを押しながら電源を入れる。ボリュームキーでカーソルを上下し、FASTBOOTを選択し電源ボタンで決定する。以下のコマンド実行

./fastboot-mac flash recovery recovery-clockwork-3.0.0.5-passion.img

3. recoveryを選択して apply /sdcard/update.zip

4. reboot

APN 設定

カスタムUser-Agent

メニュー → 設定 → User-Agent

以上で、MMSが使えるようになります。

update-mms-20110413.1-cm7-signed.zip が正しく動作しないときは http://takuo.jp/junk/Mms.apk/ で別のバージョン試してもOK

Follow

Get every new post delivered to your Inbox.