gitで覚えるべきコマンド

・基本
add
mv
rm
commit
push
pull

・コミットログをキレイに保つために必要
reflog
reset –soft
reset –hard
rebase
commit –amend
rebase
push -f

・誰かと一緒にプロジェクトを進めるのに必要
git remote add
fetch
cherry-pick
revert

・キチンとソース(ログ)管理するのに必要
checkout -b
branch
branch -l
merge

それ以外はまだ使いこなせていないけれど。(tagとか?)

Updates

Updates

sinatraサーバーをchkconfigで自動起動

sinataraサーバーをEC2の起動時に自動的に起動して、
さらにTwitterのStreaming APIを監視するRubyプログラムも同時起動するのに一苦労。

– chkconfigで起動するシェル (td_aircon) を作成

$sudo su
# cd /etc/init.d/
# touch td_aircon
# chmod 755 td_aircon
# vim td_aircon

td_airconの内容

#!/bin/sh
# chkconfig: 2345 99 10
# description: launch TD_AIRCON sinatra server

export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"

cd /home/ec2-user/aircon/aircon-api/
thin start -C thin.yml
ruby tweet_checker.rb

今回は、thinを使ってsinatraサーバーを起動するので、以下のファイルを作る。

$ cd ~/aircon/aircon-api/
$ touch config.ru
$ vim config.ru

config.ruの中身

require 'rubygems'
require 'sinatra'

require File.expand_path "app", File.dirname(__FILE__)
run Sinatra::Application

thinの設定ファイルをつくる

$ cd ~/aircon/aircon-api/
$ thin config -C thin.yml 

出来た thin.yml の中身のポート番号を変更


---
chdir: /home/ec2-user/aircon/aircon-api
environment: development
address: 0.0.0.0
port: 4567
timeout: 30
log: log/thin.log
pid: tmp/pids/thin.pid
max_conns: 1024
max_persistent_conns: 100
require: []
wait: 30
daemonize: true

自動起動をchkconfigに設定・確認する

# cd /etc/init.d/
# chkconfig --add td_aircon
# chkconfig --list

sinatraサーバーをEC2で起動して外部からアクセス

EC2上でsintraを使ってサーバーを立てようとしたら、ハマったのでメモ。

デフォルトではlocalhost以外から接続出来ない設定になっている。
実行オプションを使って、

bundle exec ruby app.rb -o 0.0.0.0

または

bundle exec ruby app.rb -e production

で起動する。

 

Security Groupの設定で、4567番のポートを開けるのも忘れずに。

 

参考: http://qiita.com/u1_fukui/items/b86b21f6ed39f4c10d5d

MacにrbenvでRuby 2.0環境を追加

以前構築したMacのRuby環境に、Ruby 2.0系を入れようと思ったらハマったのでメモ。

まず、以前、openssl.org が落ちていたせいで、
一部勝手に書き換えていた部分 (http://soohei.net/1041) を元に戻す。

cd /usr/local
git reflog
git reset –hard HEAD@{0}

その後に、Homebrewの中身を最新にする

brew update
brew upgrade ruby-build

インストール可能なRubyのバージョン一覧を確認

rbenv install -l

2.0.0-p247 が出てくるのでインストールする

rbenv install 2.0.0-p247




Downloading ruby-2.0.0-p247.tar.gz…
-> http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p247.tar.gz
/usr/local/bin/ruby-build: line 144: pushd: ruby-2.0.0-p247: No such file or directory

BUILD FAILED

失敗する。

どうやらMac OS 10.8系だと、Homebrewを使わないでrbenv環境を作った方がいいみたい。
(ギルドの恋塚さんの助言、その後Homebrewでも出来るとわかった
→ http://shachi.hatenablog.com/entry/2013/08/06/191459 )

まずはHomebrewからrbenvとruby-buildをアンインストール

brew uninstall ruby-build
brew uninstall rbenv

rbenvのディレクトリが残っていたら一度削除
rm -rf .rbenv

新たに、rbenv, ruby-buildをgithubのレポジトリからclone

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

※ レポジトリのURL
https://github.com/sstephenson/rbenv
https://github.com/sstephenson/ruby-build

もう一度インストール

rbenv install -l
rbenv install 1.9.3-p448
rbenv install 2.0.0-p247

rbenv global 2.0.0-p247
rbenv rehash

ruby -v して、
ruby 2.0.0p247 と出力されたらOK

EC2でrbenv、Ruby, Apache, FTPのセットアップ

色々あって、新規に作ったインスタンスを最初からセットアップすることに。

 

SSHでアクセス

$ sudo yum update
$ sudo su

タイムゾーンの設定
# cp -i /usr/share/zoneinfo/Japan /etc/localtime

gitのインストール
# yum install git

 

==

rbenvを使ってシステムワイドにrubyをインストールする方法 #Ruby #rbenv – Qiita [キータ]
http://qiita.com/items/8e973a544b592376a07e

グループ staff の作成と、ユーザーの追加

# groupadd staff

# gpasswd -a ec2-user staff

# exit
$ logout

再度SSHで接続

 

====

rbenvのインストール

$ sudo su
# cd /usr/local

# git clone git://github.com/sstephenson/rbenv.git rbenv
# chgrp -R staff rbenv
# chmod -R g+rwxXs rbenv

# exit

$ vim ~/.bash_profile

.bash_profileに以下を追記

export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"

 

====

sudo su してもrbenvを参照するようにする

/etc/profile.d/custom.sh をつくって

export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"

を書き込む

色々インストール

 

====

http://blog.marsbar.us/blog/2013/03/13/aws-install-ruby/

$ sudo su
# yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel

# exit
$ logout

再度SSHで接続

 

====

RubyBuildのインストール

$ mkdir /usr/local/rbenv/plugins

$ cd /usr/local/rbenv/plugins
$ git clone git://github.com/sstephenson/ruby-build.git
$ chgrp -R staff ruby-build
$ chmod -R g+rwxs ruby-build

 

====

Rubyのインストール

$ rbenv install 1.9.3-p194

$ rbenv rehash
$ rbenv global 1.9.3-p194

$ which ruby
$ which gem

which gemでrbenvが参照されていることを確認する

 

====

Railsのインストールなど

http://www.rubylife.jp/railsinstall/rails/index1.html

$ gem install rdoc
$ gem install bundle
$ gem install rails

 

====

Apacheのインストールと自動起動の設定
http://live-cast.asia/blog/2010/10/amazon-ec2-for-setting-up-the-apache-micro-instances.html

$ sudo yum install httpd
$ sudo chkconfig httpd on

Apache起動
$ sudo service httpd start

 

====

FTPのセットアップ
http://dev.classmethod.jp/cloud/amazon-ec2-apache-ftp-setup/

$ sudo su
# yum install vsftpd
# vim /etc/vsftpd/vsftpd.conf

 

編集箇所

anonymous_enable=NO
ascii_upload_enable=YES(先頭の#を削除)
ascii_download_enable=YES(先頭の#を削除)


以下の行を追加

use_localtime=YES
force_dot_files=YES
pasv_min_port=60000
pasv_max_port=61000
pasv_address=xxx.xxx.xxx.xxx(Elastic IPアドレスを指定)

 

FTPの起動と、自動起動設定

# service vsftpd start
# chkconfig vsftpd on

 

iOS 開発メモ (2013年4月)

・UIViewのautoSizing

hoge.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

・文字列の置換

[hoge stringByReplacingOccurrencesOfString:@”検索する文字列” withString:@”置き換える文字列”];

iOS Push Notification

・キーチェーンアクセスから 証明書を書き出す (例: pns.p12)

openssl pkcs12 -in pns.p12 -out pns.pem -nodes

をターミナルから実行してpemファイルを作成。

・デバイストークンをハードコーディングして、簡単にテストする場合 (PHP)

Apple Push Notification Services Tutorial: Part 1/2 – Ray Wenderlich にサンプルコードがある。

デバイスIDの調べ方は、
iOSのRemote Notificationを試してみた – daicham blog
あたりを参考にiOSのAppDelegate.mに実装する。

<?php

// Put your device token here (without spaces):
$deviceToken = '1ED5B1EB97B788EE359233F5A547E881E3FEE0E2DED7A0AEB258ACD11050E051';

// Put your private key's passphrase here:
$passphrase = '';

// Put your alert message here:
$message = 'My first push notification!';

////////////////////////////////////////////////////////////////////////////////

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'pns.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

// Open a connection to the APNS server
$fp = stream_socket_client(
	'ssl://gateway.sandbox.push.apple.com:2195', $err,
	$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)
	exit("Failed to connect: $err $errstr" . PHP_EOL);

echo 'Connected to APNS' . PHP_EOL;

// Create the payload body
$body&#91;'aps'&#93; = array(
	'alert' => $message,
	'sound' => 'default'
	);

// Encode the payload as JSON
$payload = json_encode($body);

// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;

// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));

if (!$result)
	echo 'Message not delivered' . PHP_EOL;
else
	echo 'Message successfully delivered' . PHP_EOL;

// Close the connection to the server
fclose($fp);

をローカルに保存して (simplepush.php)

php simplepush.php

で実行する。

Connected to APNS
Message successfully delivered

と表示され、すぐ通知が飛んでくる。
(エミュレーターは非対応なので、検証出来るのは実機のみ、アプリを起動中は通知が来ないので注意)

Rubyの場合はこれを使うと良さそう。
jpoz/APNS · GitHub

CompassでCSSスプライトを自動化するメモ

background-sizeが使える環境(IE8を切れる環境)で、
Retinaなケースを考えて作る場合。(画像は@2xサイズで用意する)

 

・compassは最新のアルファ版を使うと良い (2013.4.14現在)

gem install compass --pre

Sprites are compiled in every call to sprite · Issue #897 · chriseppstein/compass

 

・pngの生成を高速化すっるには、oily_pngを入れると良い

gem install oily_png

パフォーマンスからみるSass/Compass 第2回:CompassによるCSS Sprite | MOL

 

・該当ディレクトリでターミナルから、監視開始

compass watch

 

・CompassのMixin

// スプライト画像
@mixin sprite-background($sprites, $sprites-img, $name) {
  background-image: $sprites-img;
  background-repeat: no-repeat;
  display: block;
  height: ceil(image-height(sprite-file($sprites, $name)) / 2);
  width: ceil(image-width(sprite-file($sprites, $name)) / 2);
  $ypos: ceil(nth(sprite-position($sprites, $name), 2) / 2);
  background-position: 0 $ypos;
  @include background-size(ceil(image-width(sprite-path($sprites)) / 2) auto);
}

$sprites: sprite-map("/common/sprite/*.png", $spacing: 4px);
$sprites-img: sprite-url($sprites);

#icon-large .sprite{
  @include sprite-background($sprites, $sprites-img, 'icon-large');
}

 

こんな感じ。

参考:
続☆Compassでさくっとスプライトを作る方法
Compassで複数のSprite画像を扱う
Using Compass to generate normal and retina sprite maps

 

background-sizeが使えないwebサイト制作時なんかを考えると、別の方法も必要になるので、後日検討。