Mikimemo

個人的な技術・開発メモやポエム

UnityのAdMobプラグイン、Flurryプラグインを作ってみました

Unityで使えるモバイル向けのプラグインを作ってみました。

■ Unity AdMob Plugin
https://github.com/mikito/unity-admob-plugin

■ Unity Flurry Plugin
https://github.com/mikito/unity-flurry-plugin


両方ともパッケージを読み込み後、
プレファブ一個を追加してAPI Keyを設定するだけで使えるので導入も簡単だとおもいます。
iOSAndroidの切り替えも自動です。


AdMob、Flurryに関してはprime31のプラグインが既にありますけどね...
自分のサポートにあまり自信がないので、
企業などのちゃんとしたプロダクトに関しては上記の有償のプラグインを使ったほうが良いんじゃないかと思います。

トラブルが起きた際の損失は保証できませんのであしからず




最近はサーバーサイドをもっぱら触ってるのでUnity関連が全然トラックできてない...
先日Unite Japanにいってきましたが、最新の動向やらマニアックなTipsが知れていい刺激になりました。

Tic Tac Toe Countdownをアップデートしました

2010年にiOSネイティブで作ったゲームをアップデートしました。
https://itunes.apple.com/jp/app/tic-tac-toe-count-down/id348792842?mt=8

引き分けがない特殊ルールのまるばつゲームです。

前まで大学のサーバーに勝手にサイト置いてましたがそれも移しました。
http://mikinya.net/apps/tictactoe


更新内容は以下です

  • マルチタスクに対応して、アプリを中断しても途中からできるように(いまさら!)
  • iPhone5の解像度に対応(むしろRetina Displayにも対応してませんでた)
  • ゲーム中の画像リソースのクオリティをぐんとアップ!

いやぁリリースしたのはiPhone3GSとかそんな時代だったからなぁ
ソースコードがあるのかも怪しかった...学生のリソース管理怖い

アップデートにご協力頂いた皆様、大変ありがとうございました。
おいしいケーキでもごちそうします。

以下駄文

さてさて、今回(以前?)はObjective-Cで書いた完全にネイティブなアプリですが、
そのうちマルチプラットフォームのアプリも出したいですねー


今、Cocos2d-xに奮闘中ですが、環境構築や作業フローなどにやや煩雑さを感じます。
慣れればどうってことないでしょうが。

仕事でUnityを触ってると、開発効率に惹かれますが、ライセンス料金が個人で賄うにはきつい...
フリーではスプラッシュかえられないし、3Dのモデラーがいないと、宝の持ち腐れ感もありますし。

新しいゲームエンジンもいろいろと出てて、キャッチアップしていかないとなーと


作りたいものはたくさんあるんですけど、一番の問題は開発時間をどうとるかですね。
がんばっていこうかと思います。

Gitlabを5.0にアップデート

Gitlabが5.0リリースされました。

アップデートはまぁ近いうちとおもってましたが、
このタイミングでとは...

しかし、公式サイトみてみたらちゃんと3/22にリリースしますって書いてあった...

今回はちゃんと調べて選択しろってことを大変よく学びました。


なにはともあれアップデートしました。
5.0からはgitoliteがいらなくなり、構成、インストール手順も大きく変わってます。

公式の手順はこちら。
https://github.com/gitlabhq/gitlabhq/wiki/From-4.2-to-5.0

以下は作業のログです。
bundlerのおかげでrvm使うメリットはあまりないかもしれませんが、
バージョン違いのアプリケーション共存とかも考えて一応使う方向でいきます。
うーんrbenvをつかったほうがいいんですかね?

Gitlab停止

[mikito@nya ~]$ sudo service gitlab stop

gitユーザのシェル変更

[mikito@nya ~]$ sudo chsh -s /bin/bash git

リポジトリの所有者変更

[mikito@nya ~]$ sudo chown git:git -R /home/git/repositories/

gitlab-shellインストール

[mikito@nya ~]$ sudo su - git
[git@nya ~]$ git clone https://github.com/gitlabhq/gitlab-shell.git /home/git/gitlab-shell
[git@nya gitlab-shell]$ cp config.yml.example config.yml
[git@nya gitlab-shell]$ vim config.yml # gitlab_url編集
[git@nya gitlab-shell]$ ./support/rewrite-hooks.sh

gitlabコピー

[mikito@nya ~]$ sudo cp -R /home/gitlab/gitlab /home/git/gitlab
[mikito@nya ~]$ sudo chown git:git -R /home/git/gitlab
[mikito@nya ~]$ sudo rm -rf /home/gitlab/gitlab-satellites

RVM再度入れる

[mikito@nya ~]$ sudo su - git
[git@nya ~]$ curl -L https://get.rvm.io | bash -s stable --ruby
[git@nya ~]$ rvm install 1.9.3
[git@nya ~]$ rvm use 1.9.3
[git@nya ~]$ gem install bundler --no-rdoc --no-ri
[git@nya ~]$ gem install charlock_holmes --version '0.6.9' --no-rdoc --no-ri
[git@nya ~]$ rvm gemset create gitlab
[git@nya ~]$ rvm use 1.9.3@gitlab --default

gitlab update

[git@nya ~]$ cd gitlab
[git@nya gitlab]$ cp config/gitlab.yml config/gitlab.yml.old
[git@nya gitlab]$ git fetch
[git@nya gitlab]$ git checkout 5-0-stable
[git@nya gitlab]$ cp config/gitlab.yml.example config/gitlab.yml # 再度設定
[git@nya gitlab]$ bundle install --without development test postgres --deployment
[git@nya gitlab]$ bundle exec rake db:migrate RAILS_ENV=production
[git@nya gitlab]$ bundle exec rake gitlab:shell:setup RAILS_ENV=production
[git@nya gitlab]$ bundle exec rake gitlab:shell:build_missing_projects RAILS_ENV=production
[git@nya gitlab]$ mkdir /home/git/gitlab-satellites
[git@nya gitlab]$ bundle exec rake gitlab:satellites:create RAILS_ENV=production
[git@nya gitlab]$ bundle exec rake gitlab:wiki:migrate RAILS_ENV=production

パーミッションの設定など

[git@nya gitlab]$ chmod 700 /home/git/.ssh
[git@nya gitlab]$ chmod 600 /home/git/.ssh/authorized_keys
[git@nya gitlab]$ chown -R git /home/git/gitlab/log/
[git@nya gitlab]$ chown -R git /home/git/gitlab/tmp/
[git@nya gitlab]$ chmod -R u+rwX /home/git/gitlab/log/
[git@nya gitlab]$ chmod -R u+rwX /home/git/gitlab/tmp/
[git@nya gitlab]$ mkdir /home/git/gitlab/tmp/pids/
[git@nya gitlab]$ chmod -R u+rwX /home/git/gitlab/tmp/pids

unicorn設定

[git@nya gitlab]$ cp config/unicorn.rb config/unicorn.rb.old
[mikito@nya ~]$ cp config/unicorn.rb.example config/unicorn.rb
[mikito@nya ~]$ vim config/unicorn.rb # 待ち受けポートを変更
listen "127.0.0.1:8080", :tcp_nopush => true

gitconfig設定

[git@nya gitlab]$ git config --global user.name "Gitlab"
[git@nya gitlab]$ git config --global user.email "gitlab@gitlab.mikinya.net"

起動スクリプト更新

[mikito@nya ~]$ sudo -E curl --output /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/master/init.d/gitlab
[mikito@nya ~]$ sudo vim /etc/init.d/gitlab # rvm環境変数を追加
#
# set rvm environment valiables.
#
export PATH=/home/git/.rvm/gems/ruby-1.9.3-p392@gitlab/bin:/home/git/.rvm/gems/ruby-1.9.3-p392@global/bin:/home/git/.rvm/rubies/ruby-1.9.3-p392/bin:/home/git/.rvm/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/git/bin
export GEM_HOME=/home/git/.rvm/gems/ruby-1.9.3-p392@gitlab
export GEM_PATH=/home/git/.rvm/gems/ruby-1.9.3-p392@gitlab:/home/git/.rvm/gems/ruby-1.9.3-p392@global
export MY_RUBY_HOME=/home/git/.rvm/rubies/ruby-1.9.3-p392
export IRBRC=/home/git/.rvm/rubies/ruby-1.9.3-p392/.irbrc

VirtualHost再設定

[mikito@nya ~]$ sudo vim /etc/httpd/conf/httpd.conf
/home/gitlab/gitlab/public -> /home/git/gitlab/public
[mikito@nya ~]$ sudo /etc/init.d/httpd graceful

SSH 環境変数(参考: https://github.com/gitlabhq/gitlab-shell/issues/12

[mikito@nya ~]$ sudo vim /etc/ssh/sshd_config
PermitUserEnvironment yes
[mikito@nya ~]$ sudo su - git
[git@nya ~]$ env | grep -E "^(GEM_HOME|PATH|RUBY_VERSION|MY_RUBY_HOME|GEM_PATH)=" > ~/.ssh/environment
[git@nya ~]$ exit
[mikito@nya ~]$ sudo /etc/init.d/sshd restart

再起動

[mikito@nya ~]$ sudo service gitlab start

いらないの削除

[mikito@nya ~]$ sudo su - git
[git@nya ~]$ rm -rf bin
[git@nya ~]$ rm -rf gitolite/
[git@nya ~]$ rm projects.list
[git@nya ~]$ cd repositories/
[git@nya repositories]$ rm -rf gitolite-admin.git/
[git@nya repositories]$ rm -rf testing.git/
[git@nya repositories]$ rm -rf root
[git@nya ~]$ exit
[mikito@nya ~]$ sudo rm /home/git/gitlab.pub
[mikito@nya ~]$ sudo userdel -r gitlab

CentOS6にApache + RVM + UnicornでGitlab4.2構築

GitlabGithubオープンソースクローンで
プライベートリポジトリをつくることはもちろん、
ユーザ管理や公開鍵管理などをWebブラウザ上からできる、おされなツールです。

さらに、プロジェクト毎にWallやWikiが使えたり、ブランチのネットワークグラフを表示したり、マージリクエストの管理などもできます。


最近構築する機会があったのでメモ

# ただし、5.0へのメジャーアップデートでGitoliteが必要なくなるらしく、もっと簡単にインストールが済むようになるかもです。

とりあえず現時点の手順です。
極力手間をかけず、メンテもしやすいような感じで構成してみました。
メモ程度に残していたログを都合よくまとめただけなので、へんなとこあるかもです。
あしからず。

公式の手順はこちら
gitlabhq/installation.md at 4-2-stable · gitlabhq/gitlabhq · GitHub

必要そうなパッケージインストール

[mikito@nya ~]$ sudo yum -y install libyaml-devel openssl-devel gdbm-devel readline-devel ncurses-devel libffi-devel redis libxml2-devel libxslt-devel libicu-devel curl git-core openssh-server postfix

Redis起動、自動起動設定

[mikito@nya ~]$ sudo /etc/init.d/redis
[mikito@nya ~]$ sudo chkconfig redis on
[mikito@nya ~]$ chkconfig --list redis
redis 0:off 1:off 2:on 3:on 4:on 5:on 6:off

データベース設定(MySQL

[mikito@nya ~]$ mysql -u root -p
mysql> create user 'gitlab_user'@'localhost' identified by '*******'
mysql> CREATE DATABASE IF NOT EXISTS `gitlab_db` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlab_db`.* TO 'gitlab_user'@'localhost';

System User作る

[mikito@nya ~]$ sudo adduser -r -s /bin/sh -c 'git' -d /home/git -m git
[mikito@nya ~]$ sudo adduser -r -s /bin/sh -c 'gitlab' -d /home/gitlab -m gitlab
[mikito@nya ~]$ sudo chmod g+rx /home/git
[mikito@nya ~]$ sudo usermod -a -G git gitlab

gitlabユーザのSSH Key作ってコピーしとく

[mikito@nya ~]$ sudo -u gitlab -H ssh-keygen -q -N '' -t rsa -f /home/gitlab/.ssh/id_rsa
[mikito@nya ~]$ sudo cp /home/gitlab/.ssh/id_rsa.pub /home/git/gitlab.pub
[mikito@nya ~]$ sudo chmod 0444 /home/git/gitlab.pub

Gitolite設定

[mikito@nya ~]$ sudo su - git -s /bin/bash # gitユーザで作業
[git@nya ~]$ git clone -b gl-v320 https://github.com/gitlabhq/gitolite.git gitolite
[git@nya ~]$ mkdir /home/git/bin
[git@nya ~]$ sh -c 'printf "%b\n%b\n" "PATH=\$PATH:/home/git/bin" "export PATH" >> /home/git/.profile'
[git@nya ~]$ sh -c 'gitolite/install -ln /home/git/bin'
[git@nya ~]$ sh -c "PATH=/home/git/bin:$PATH; gitolite setup -pk /home/git/gitlab.pub"
[git@nya ~]$ chmod 750 /home/git/.gitolite/
[git@nya ~]$ chmod -R ug+rwX,o-rwx /home/git/repositories/
[git@nya ~]$ find /home/git/repositories -type d -print0 | xargs -0 chmod g+s

list of known hostsに追加とかcloneチェックとか

[mikito@nya ~]$ sudo su - gitlab -s /bin/bash # gitlabユーザで作業
[gitlab@nya ~]$ ssh git@localhost
The authenticity of host '[127.0.0.1]:2222 ([127.0.0.1]:2222)' can't be established.
RSA key fingerprint is 24:11:23:ff:35:72:9f:e0:5e:36:5f:c4:f9:4d:c7:f8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[127.0.0.1]:2222' (RSA) to the list of known hosts.
PTY allocation request failed on channel 0
hello gitlab, this is git@nya running gitolite3 v3.2-gitlab-patched-0-g2d29cf7 on git 1.7.1
...

実際に管理用のリポジトリcloneしてみる

[gitlab@nya ~]$ git clone git@localhost:gitolite-admin.git gitolite-admin
Initialized empty Git repository in /home/gitlab/gitolite-admin/.git/
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6/6), done.
[gitlab@nya ~]$ ls
gitolite-admin
[gitlab@nya ~]$ rm -rf gitolite-admin/

Git設定

[gitlab@nya gitlab]$ git config --global user.name "Gitlab"
[gitlab@nya gitlab]$ git config --global user.email "gitlab@gitlab.mikinya.net"

RVM & Gemインストール

[gitlab@nya ~]$ curl -L --insecure https://get.rvm.io | bash -s stable --ruby
[gitlab@nya ~]$ source .bash_profile
[gitlab@nya ~]$ rvm install 1.9.3
[gitlab@nya ~]$ gem install bundler --no-rdoc --no-ri
[gitlab@nya ~]$ gem install charlock_holmes --version '0.6.9' --no-rdoc --no-ri
[gitlab@nya ~]$ rvm gemset create gitlab
[gitlab@nya ~]$ rvm use 1.9.3@gitlab --default

Gitlabインストール

[gitlab@nya ~]$ git clone https://github.com/gitlabhq/gitlabhq.git gitlab
[gitlab@nya ~]$ cd gitlab/
[gitlab@nya gitlab]$ git checkout 4-2-stable
[gitlab@nya gitlab]$ chmod -R u+rwX log/
[gitlab@nya gitlab]$ chmod -R u+rwX tmp/
[gitlab@nya gitlab]$ mkdir gitlab-satellites
[gitlab@nya gitlab]$ cp config/gitlab.yml.example config/gitlab.yml
[gitlab@nya gitlab]$ vim config/gitlab.yml # host名とか設定
[gitlab@nya gitlab]$ cp config/database.yml.mysql config/database.yml
[gitlab@nya gitlab]$ vim config/database.yml

database.yml

#
# PRODUCTION
#
production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: gitlab_db
  pool: 5
  username: gitlab_user 
  password: "***********"
  # host: localhost
  # socket: /tmp/mysql.sock

unicorn設定

[gitlab@nya gitlab]$ cp config/unicorn.rb.example config/unicorn.rb
[gitlab@nya gitlab]$ vim config/unicorn.rb

unicorn.rb

# uncomment and customize to run in non-root path
# note that config/gitlab.yml web path should also be changed
# ENV['RAILS_RELATIVE_URL_ROOT'] = "/gitlab"

app_dir = "/home/gitlab/gitlab/"
worker_processes 2
working_directory app_dir

# Load app into the master before forking workers for super-fast
# worker spawn times
preload_app true

# nuke workers after 30 seconds (60 is the default)
timeout 30

# listen on a Unix domain socket and/or a TCP port,

#listen 8080 # listen to port 8080 on all TCP interfaces
#listen "127.0.0.1:8080"  # listen to port 8080 on the loopback interface
#listen "#{app_dir}/tmp/sockets/gitlab.socket"
listen      "127.0.0.1:8080", :tcp_nopush => true

pid "#{app_dir}/tmp/pids/unicorn.pid"
stderr_path "#{app_dir}/log/unicorn.stderr.log"
stdout_path "#{app_dir}/log/unicorn.stdout.log"

# http://www.rubyenterpriseedition.com/faq.html#adapt_apps_for_cow
if GC.respond_to?(:copy_on_write_friendly=)
  GC.copy_on_write_friendly = true
end


before_fork do |server, worker|
  # the following is highly recomended for Rails + "preload_app true"
  # as there's no need for the master process to hold a connection
  defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!

  ##
  # When sent a USR2, Unicorn will suffix its pidfile with .oldbin and
  # immediately start loading up a new version of itself (loaded with a new
  # version of our app). When this new Unicorn is completely loaded
  # it will begin spawning workers. The first worker spawned will check to
  # see if an .oldbin pidfile exists. If so, this means we've just booted up
  # a new Unicorn and need to tell the old one that it can now die. To do so
  # we send it a QUIT.
  #
  # Using this method we get 0 downtime deploys.

  old_pid = "#{server.config[:pid]}.oldbin"

  if File.exists?(old_pid) && server.pid != old_pid
    begin
      sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
      Process.kill(sig, File.read(old_pid).to_i)
    rescue Errno::ENOENT, Errno::ESRCH
      # someone else did our job for us
    end
  end
end

after_fork do |server, worker|
  # Unicorn master loads the app then forks off workers - because of the way
  # Unix forking works, we need to make sure we aren't using any of the parent's
  # sockets, e.g. db connection

  defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
  # Redis and Memcached would go here but their connections are established
  # on demand, so the master never opens a socket
end

フックの設定

[gitlab@nya gitlab]$ cp /home/gitlab/gitlab/lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive
[gitlab@nya gitlab]$ chown git:git /home/git/.gitolite/hooks/common/post-receive

gemインストール、Migration & Setup

[gitlab@nya gitlab]$ bundle install --deployment --without development test postgres
[gitlab@nya gitlab]$ bundle exec rake gitlab:setup RAILS_ENV=production

Applicationチェック

[gitlab@nya gitlab]$ bundle exec rake gitlab:env:info RAILS_ENV=production
[gitlab@nya gitlab]$ bundle exec rake gitlab:check RAILS_ENV=production

それっぽいのが出ればOKかと

起動スクリプト設定

[mikito@nya ~]$ sudo -E curl --output /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/4-2-stable/init.d/gitlab
[mikito@nya ~]$ sudo vim /etc/init.d/gitlab #RVMの環境変数の設定を追加

/etc/init.d/gitlab

#! /bin/bash

# GITLAB
# Maintainer: @randx
# App Version: 4.0

### BEGIN INIT INFO
# Provides:          gitlab
# Required-Start:    $local_fs $remote_fs $network $syslog redis-server
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: GitLab git repository management
# Description:       GitLab git repository management
### END INIT INFO

#
# set rvm environment valiables.
#
export PATH=/home/gitlab/.rvm/gems/ruby-1.9.3-p392@gitlab/bin:/home/gitlab/.rvm/gems/ruby-1.9.3-p392@global/bin:/home/gitlab/.rvm/rubies/ruby-1.9.3-p392/bin:/home/gitlab/.rvm/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/gitlab/bin
export GEM_HOME=/home/gitlab/.rvm/gems/ruby-1.9.3-p392@gitlab
export GEM_PATH=/home/gitlab/.rvm/gems/ruby-1.9.3-p392@gitlab:/home/gitlab/.rvm/gems/ruby-1.9.3-p392@global
export BUNDLE_PATH=
export MY_RUBY_HOME=/home/gitlab/.rvm/rubies/ruby-1.9.3-p392
export IRBRC=/home/gitlab/.rvm/rubies/ruby-1.9.3-p392/.irbrc

set -u
set -e

APP_ROOT="/home/gitlab/gitlab"
DAEMON_OPTS="-c $APP_ROOT/config/unicorn.rb -E production"
PID_PATH="$APP_ROOT/tmp/pids"
UNICORN_PID="$PID_PATH/unicorn.pid"
SIDEKIQ_PID="$PID_PATH/sidekiq.pid"
STOP_SIDEKIQ="RAILS_ENV=production bundle exec rake sidekiq:stop"
START_SIDEKIQ="RAILS_ENV=production bundle exec rake sidekiq:start"
NAME="unicorn"
DESC="Gitlab service"

check_pid(){
  if [ -f $UNICORN_PID ]; then
    PID=`cat $UNICORN_PID`
    SPID=`cat $SIDEKIQ_PID`
    STATUS=`ps aux | grep $PID | grep -v grep | wc -l`
  else
    STATUS=0
    PID=0
  fi
}

start() {
  cd $APP_ROOT
  check_pid
  if [ "$PID" -ne 0 -a "$STATUS" -ne 0 ]; then
    # Program is running, exit with error code 1.
    echo "Error! $DESC $NAME is currently running!"
    exit 1
  else
    if [ `whoami` = root ]; then
      sudo -u gitlab -H bash -l -c "nohup bundle exec unicorn_rails $DAEMON_OPTS  > /dev/null  2>&1 &"
      sudo -u gitlab -H bash -l -c "mkdir -p $PID_PATH && $START_SIDEKIQ  > /dev/null  2>&1 &"
      echo "$DESC started"
    fi
  fi
}

stop() {
  cd $APP_ROOT
  check_pid
  if [ "$PID" -ne 0 -a "$STATUS" -ne 0 ]; then
    ## Program is running, stop it.
    kill -QUIT `cat $UNICORN_PID`
    sudo -u gitlab -H bash -l -c "mkdir -p $PID_PATH && $STOP_SIDEKIQ  > /dev/null  2>&1 &"
    rm "$UNICORN_PID" >> /dev/null
    echo "$DESC stopped"
  else
    ## Program is not running, exit with error.
    echo "Error! $DESC not started!"
    exit 1
  fi
}

restart() {
  cd $APP_ROOT
  check_pid
  if [ "$PID" -ne 0 -a "$STATUS" -ne 0 ]; then
    echo "Restarting $DESC..."
    kill -USR2 `cat $UNICORN_PID`
    sudo -u gitlab -H bash -l -c "mkdir -p $PID_PATH && $STOP_SIDEKIQ  > /dev/null  2>&1 &"
    if [ `whoami` = root ]; then
      sudo -u gitlab -H bash -l -c "mkdir -p $PID_PATH && $START_SIDEKIQ  > /dev/null  2>&1 &"
    fi
    echo "$DESC restarted."
  else
    echo "Error, $NAME not running!"
    exit 1
  fi
}

status() {
  cd $APP_ROOT
  check_pid
  if [ "$PID" -ne 0 -a "$STATUS" -ne 0 ]; then
    echo "$DESC / Unicorn with PID $PID is running."
    echo "$DESC / Sidekiq with PID $SPID is running."
  else
    echo "$DESC is not running."
    exit 1
  fi
}

## Check to see if we are running as root first.
## Found at http://www.cyberciti.biz/tips/shell-root-user-check-script.html
if [ "$(id -u)" != "0" ]; then
    echo "This script must be run as root"
    exit 1
fi

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
  reload|force-reload)
        echo -n "Reloading $NAME configuration: "
        kill -HUP `cat $PID`
        echo "done."
        ;;
  status)
        status
        ;;
  *)
        echo "Usage: sudo service gitlab {start|stop|restart|reload}" >&2
        exit 1
        ;;
esac

exit 0

Gitlab起動、自動起動設定

[mikito@nya ~]$ sudo chmod +x /etc/init.d/gitlab
[mikito@nya ~]$ sudo service gitlab start
[mikito@nya ~]$ sudo chkconfig gitlab on
[mikito@nya ~]$ chkconfig --list gitlab
gitlab 0:off 1:off 2:on 3:on 4:on 5:on 6:off

VirtualHost設定、Apache反映

[mikito@nya ~]$ sudo vim /etc/httpd/conf/httpd.conf

httpd.confに以下を追加

NameVirtualHost *:80

<VirtualHost *:80>
  ServerName gitlab.mikinya.net
  DocumentRoot /home/gitlab/gitlab/public
  ProxyPass / http://127.0.0.1:8080/
  ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>

Apache反映

[mikito@nya ~]$ sudo /etc/init.d/httpd graceful

iOSとAndroidのプロジェクトを統合する

最近cocos2d-xをよく勉強してます。
cocos2dのドキュメントはたくさん出てくるけど、
なかなかxのは出てこない...

読み替えたり、挙動が若干ちがったりと一苦労です。

前、環境構築の時にもすこし触れましたが、
最初に悩んだXcodeのプロジェクトとAndroidのプロジェクトどう統合するかの手順をもう少し詳しく説明します。

正規の手順かはどうだかわかりません。

Androidプロジェクト作成

cocos2d-xのルートディレクトリにターミナルで移動してcreate-android-project.shを実行します。

$ ./create-android-project.sh

ルートディレクトリに移動しないといけないのが何ともですが、
Bundle IDなどを入力すると無事プロジェクトが出力されます。


MofuMofuというプロジェクトつくりました。


プロジェクトがcocos2d-xのルートに出力され、
ファイルがたくさんあってみづらいので、好きなところに移動させます。
自分はいつも~/Projectsってとこにいろいろ置いてます。

Xcodeプロジェクト作成

Xcodeを立ち上げCreate a New Xcode Projectで
Cocos2d-xを選びます。

こちらも手順どおりすすめて
さっき作ったAndroidプロジェクトの中に保存します。

XcodeのほうもMofuMofuというプロジェクト名で保存したので、
プロジェクト全体はこんな感じになります。

ここでいったんXcodeを終了させて
いま作ったXcodeプロジェクトのディレクトリ名をproj.iosに変更します。
こんな感じになります。

Xcodeプロジェクト設定

作成したXcodeプロジェクトを再度開きます。

XcodeからClassesを削除します。
またプロジェクト名/Resourcesの
CloseNormal.png
CloseSelected.png
HelloWorld.png
を削除して、アイコン画像やスプラッシュinfo.plistなどiOSアプリに必要なリソースだけにします。


次に、Androidプロジェクトと共有する
ClassesとResourcesのディレクトリをインポートします。

Fils -> Add Items To ....からproj.iosと同じ階層にあるClassesを選択します。
このときCopy Items Into...オプションは外します。

Resourcesも同様にインポートします。
最終的にXcodeはこんな感じになります。

これでXcodeの設定は完了です。
Runを実行してちゃんと起動すればOKです。

Androidプロジェクト設定

Eclipseを起動します。

File -> Importから
Android -> Existing Android Code Into Workspaceを選択

Cocos2d-xから出力したディレクトリを選択してインポートします。


ここで、Androidプロジェクトを移動してるのでLibraryの参照でエラーがでてます。
プロジェクト名をクリックしてでてくるProperties -> Androidメニューで
エラーになってるlibcocos2dxを削除します。
その後、環境構築でEclipseに追加してあったlibcocos2dxを再度設定します。


で、自分の環境だとAndroidManifest.xmlでもエラーがでてました。
どうやら生成されたアイコン名がiconからic_launcher.pngに変わってるらしく、そこを修正します。


次に、build_native.shを修正します。
COCOS2DX_ROOTを.bashrcとかに追加してある場合はコメント化、
それかCocos2d-xのルートディレクトリを直に設定します。

38 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
39 # ... use paths relative to current directory
40 # COCOS2DX_ROOT="$DIR/../.."
41 APP_ROOT="$DIR/.."
42 APP_ANDROID_ROOT="$DIR"


とりあえず設定はこれで終了です。
Androidでもビルドして起動してみます。

build_native.shを実行します。

$ .build_native.sh

Android機をつないで、
EclipseからRunします。
iOSと同じ画面が出たでしょうか。

実際の開発のながれ

Xcodeでソースなどを追加、編集、デバッグをメインでやって
ある程度機能ができたらEclipseでAndroidのデバッグって感じでしょうか。
jni/Android.mkにソースのリストを追加しないといけないないですし


まだまだ、わからいことが多いですが、
慣れてきたらそのうち開発自体のTipsものせていきたいです。

Node.jsとherokuで静的サイトを簡単につくる

Railsホスティングサービスherokuを使って、
無料かつ広告が挿入されてないホームページを作るってことをやってみました。

ただ、データベースもルーティングも使わない単たる静的ページにRailsを使うのも大げさだなぁと思い、
Node.jsを使ってみました。

テンプレートをGithubにあげておきました。
https://github.com/mikito/node-static-site

テンプレートといっても、必要最小限の機能を残しただけですが...
恐ろしくシンプルです。

下準備

まずherokuのアカウントをつくっておいてください。

さらにherokuのコマンドを使えるようにherokuツールもインストールしてください。
多分、アカウント作った後にherokuのダッシュボードの画面でダウンロードのリンクが表示されると思います。

herokuツールがインストールできたらターミナルからherokuにログインしておきます。

$ heroku login
Enter your Heroku credentials.
Email: ************@gmail.com
Password:

サイトつくってみる

Githubからテンプレをclone

$ git clone git@github.com:mikito/node-static-site.git mikinya-net

cloneしたディレクトリに移動

$ cd mikinya-net/

herokuアプリ作成

$ heroku create mikinya

herokuにアプリが作成され、さらにgit remoteにherokuが追加されます。

$ git remote
heroku

herokuにpushします

$ git push heroku master

一応プロダクション環境で起動しときます。

$ heroku config:add NODE_ENV=production

サイト開いてみます

$ heroku open

サイトの更新

サイトを更新する時はpublic以下を編集後、
git add、git commitしたあと再度

$ git push heroku master

です。

バージョン管理もできて一石二鳥だしFTPとか使わないので楽。なはず。

その他

Cocos2d-x環境構築

以前ハッカソンをやったときにCocos2d-xを触ってみたのでそのときのメモ。環境はMac

ダウンロード

http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Downloadからcocos2d-2.0-x-2.0.4みたいのをダウンロード。解凍したファイルを任意のフォルダに移動 。

iOS 手順

テンプレートのインストール

sh cocos2d-2.0-x-2.0.4/install-templates-xcode.sh -u

プロジェクト作成
  1. Xcode起動
  2. 新規プロジェクト作成
  3. cocos2d-xテンプレートが追加されているので選択
  4. 作成されたプロジェクトをRunすれば起動する

Android 手順

各種インストール
.bash_profile等でSDK Path設定

export NDK_ROOT="/SDKs/adt-bundle-mac/ndk/"
export ANDROID_SDK_ROOT="/SDKs/adt-bundle-mac/sdk/"

EclipseにCocos2dxライブラリをインポート
  1. file->importを選択
  2. Existing Projects Into Workspaceを選択
  3. Select root directoryでcocos2d-2.0-x-2.0.4フォルダの下の、cocos2dx/platform/android を選択
  4. Finishを選択してlibcocos2dxをインポート
    • このときcopy projects into workspaceにチェックを入れないようにする
Android Project作成
  1. cocos2d-2.0-x-2.0.4に移動しcreate-android_project.shを実行
  2. Bundle ID入力
  3. API Levelを選択
  4. プロジェクト名を入力
  5. cocos2d-2.0-x-2.0.4直下にAndroidプロジェクトが作成される
  6. Eclipseにインポート
ビルド

proj.androidにあるbuild-native.shを実行。このとき、Android Projectをcocos2d-2.0-x-2.0.4/から移動してるとエラーになるので.bash_profileに以下を追加

export COCOS2DX_ROOT="/SDKs/cocos2d-2.0-x-2.0.4"

さらに、build_native.shのCOCOS2DX_ROOTをコメント化

#COCOS2DX_ROOT="$DIR/../.."

これで、一応Eclipseでビルドして実行できるようになる。
やや無理矢理な感じがするけど、cocos2d-x直下にandroidプロジェクトを置けってことなんだろうか...


ちなみにソースを追加した場合jni/Android.mkのリストにも追加する必要がある。

LOCAL_SRC_FILES := hellocpp/main.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/HelloWorldScene.cpp \
../../Classes/GameOverScene.cpp

Android.mkへの自動追加はこの記事を参考にすればできそう

iOSAndroidソース統合

Androidプロジェクト作成後、Xcodeプロジェクト作成して、ディレクトリ構成を以下みたいにして、Xcodeプロジェクトごちゃごちゃいじった。もっと効率的に作成する方法があるんだろうか。

Hackathon/
├── Classes # AndroidiOSともにこのディレクトリのソースを参照
├── Resources # AndroidiOSともにこのディレクトリのリソースを参照
├── proj.android
│   ├── assets
│   ├── bin
│   │   ├── classes
│   │   └── res
│   ├── gen
│   │   └── jp
│   ├── jni
│   │   └── hellocpp
│   ├── libs
│   │   └── armeabi
│   ├── obj
│   │   └── local
│   ├── res
│   │   ├── drawable-hdpi
│   │   ├── drawable-ldpi
│   │   ├── drawable-mdpi
│   │   ├── drawable-xhdpi
│   │   ├── layout
│   │   └── values
│   └── src
│   ├── jp
│   └── org
└── proj.ios
├── Hackathon
│   ├── Resources
│   ├── ios
│   └── libs
└── Hackathon.xcodeproj
├── project.xcworkspace
└── xcuserdata