dotfileをgithubで管理する

今まではDropboxにいれてたから良いかーと、思ってたんですが履歴管理できるといいなーと思ってgithubにpushしてみることにしました。

※githubに入っているのはmac用のdotfileでwindowsやubuntu等で同じ環境使う場合はDropboxのファイルを使う

ホームディレクトリのdotfileをgithubにpushする

事前にgithubでリポジトリを新たに作成しておきます。今回はdotfilesというリポジトリを作成しました。

重要なのは.gitignoreでdotfileにpushしたいファイルを指定するところです。

$ cd ~
$ vi .gitignore

#全てのファイルを除外
/*
#全ての隠しファイルを除外
/*.

!/.bashrc
!/.bash_profle
!/.profile
!/.emacs
!/.emacs.d
!/.vim
!/.vimrc
!/.gitconfig
!/.gitignore
!/.screenrc

$ git init
$ git add .
$ git commit -m "first commit."
$ git remote add origin git@github.com:suusuke/dotfiles.git
$ git push -u origin master

https://github.com/suusuke/dotfiles

done.


追記
vimのプラグインをvim-pathogenで管理するようにしたのでその時のメモ。
何が出来るようになるかというと、~/.vim/bundleというディレクトリでプラグインの管理ができるようになるので、管理が分かりやすくなります。

こちらからスクリプトをダウンロードして~/.vim/autoload/にいれて~/.vimrc

call pathogen#runtime_append_all_bundles()

を記述しておく。

~/.vim/bundleディレクトリを作成しておく。

これだけでおーけー。

bundleという一つのディレクトリでプラグインの管理ができるので、githubから簡単にプラグインのインストール、アップデート可能になります。

早速、プラグインをインストールしてみました。

$ git submodule add git://github.com/tpope/vim-surround.git .vim/bundle/vim-surround
$ git submodule add git://github.com/scrooloose/nerdcommenter.git .vim/bundle/nerdcommenter
$ git submodule add git://github.com/Shougo/neocomplcache.git .vim/bundle/neocomplcache

設定は.vimrcに書けばおーけー。

お疲れさまでした。

cp -f でも上書きの確認表示が出てしまう

cp -fとやっても確認表示がでてきてしまう場合はcpのエイリアスを調べてみる。

aliasで調べてみる

$ alias 
alias cp='cp -i'

cpのエイリアスにcp -iが設定されていました。

\でエイリアスを無効にして実行する

$ \cp -rfp app/ .

\を付けて実行するとエイリアスを無効にして実行出来るということを初めて知りました。

DotCloud で PHP を動かしてみた

DotCloudとは

クラウドサービスの中でPaaSに分類されるもので、GoogleのApp Engineのように開発プラットホームを提供するサービスです。

2011.6.20現在、DotCloudはベータ版で公開されててinviteコードを貰えば無料で利用する事ができます。
inviteコードはメールアドレスを登録すると3,4日で届きます。

ちなみに、Webサーバーはnginx(エンジンエックス)というものを使っているそうです。

DotCloud

DotCloudを使ってみる

inviteコードが届いたので早速phpinfo()を表示させてみたいと思います。(Mac環境にて)
届いたメール内に登録用のURLが記載されているのでそこから、アカウントを作成します。

作成するとCheatsheetが表示されるのでそれを参考に設定します。

dotcloudコマンドのインストール

Pythonのeasy_installを使ってインストールします。

$ sudo easy_install dotcloud

これでdotcloudコマンドが使用できるようになります。

Applicationを作成する

$ dotcloud create suusuke

api keyの入力が求められるのでDotCloudの設定ページからapi keyをコピペします。

ここで決めた名前がURLの一部になります。
suusukeの部分がアプリケーション名になります。

サービス名を決めてデプロイする(PHP)

$ dotcloud deploy -t php suusuke.www

PHPで作成するのでタイプをphpにして、サービス名はwwwにしました。

phpinfoを出力するファイルを作成しpush

$ vi phpinfo.php
<?php phpinfo(); ?>

$ dotcloud push suusuke.www .

URLはhttp://..dotcloud.com/となるので、http://www.suusuke.dotcloud.com/phpinfo.phpにアクセスするとphpinfoが表示されます。

その他のコマンド等

sshで接続するときは

$ dotcloud ssh suusuke.www

で接続できます。

また、gitの環境がある場合はそのまま、DotCloudにpushできるようです。

DotCloud Document


追記
仙台駅から3Km圏内のツイートを表示するの作ってみた。作ってみたってほどでもないのですが…
http://www.suusuke.dotcloud.com/

TwitterとかInstagramもそうだけど、認証を必要としないAPI使うのは本当簡単だなと思う。
OAuthとか認証使うとちょっと大変になってくる。

LimonadeでURLに/?/を付けないでもアクセスできるようにする

InstagramのOAuth認証を試していたらコールバックURLに/?/が入っていると、設定したコールバックURLと異なるURLにリクエストが飛んできてました。

Limonadeではデフォルトで/?/callback/のようなURLになるので、ドキュメントに変更方法書いてあるはずと思ってみてみたら、READMEに書いてましたw

アプリケーションのルートディレクトリに次のような.htaccessを置くだけです。

<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  Options +Indexes
  RewriteEngine on

  # if your app is in a subfolder
  # RewriteBase /my_app/ 

  RewriteCond %{SCRIPT_FILENAME} !-f
  RewriteCond %{SCRIPT_FILENAME} !-d

  RewriteRule ^(.*)$   index.php?uri=/$1    [NC,L,QSA]
</IfModule>

アプリケーションルートがドキュメントルート以外(例えば/my_app/)の場合は、RewriteBase /my_app/のコメントを解除するとhttp://www.example.com/my_app/からhttp://www.example.com/でアクセスできるようになる。

参考URL:README

CakePHPでページの違う画面の内部リンクを有効にしたい場合

二通りやり方があって、一つは.htaccessでURLの#以降もCakePHPに制御させない方法と、javascriptで対応する方法。

今回はjavascript(jQuery)で対応してみました。

javascriptで実現する方法

遷移先のVIEWに下記を記述するだけです。

<script type="text/javascript">
$(document).ready(function () {
    if (location.hash) {
        y = $("*[name="+location.hash.slice(1)+"]").offset().top;
        scrollTo(0,y);
    }
})
</script>

location.hashで#xxパラメーターを取得して、それを使ってname属性でフィルターしたオブジェクトのoffsetを取得します。
あとは、そこまでスクロースする処理を行えば疑似的に内部リンクが有効になります。

.htaccessで実現する方法

.htaccessに下記を記述すると実現できるようです。(未検証)

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)(#*.*)$ index.php?url=$1$2 [QSA,L]
</IfModule>

SSHのアクセス元IPを制限する方法

TCP Wrapperを利用してSSHにログインできるIPを制限します。

設定ファイルは

/etc/hosts.deny (拒否するIP/ホストを設定)
/etc/hosts.allow (許可するIP/ホストを設定)

の二つです。

この設定ファイルで制御できるプロセスは次の二つです。

  • xinetd で制御されているプロセス
  • configure時に TCP Wrapper を使うと指定されたプロセス(←SSHはこっち)

SSHはxinetdで制御されてないけども、自分でhosts.{deny,allow}を読み込むみたいです。

設定は全ての接続を拒否して、指定したIPを許可するという流れが一般的です。

全てのアクセスを拒否

/etc/hosts.denyに下記を追記します。

sshd : all

指定したIPからのアクセスを許可

/etc/hosts.allowに下記を追記します。

sshd : 100.100.100.100
sshd : 192.168.1.1

TCP Wrapperで制御した場合はアプリケーションレベルでのアクセス制御になるので、IPレベルで制御したい場合はiptablesを設定する必要が有ります。

※本当はTCP Wrapperとiptables両方設定した方が良いのでしょうね。

CakePHP で RSS 取得して表示する

CakePHPでRSS取得する方法。

すげー簡単です^^

例としてlivedoor newsのトピックスを取ってきたい場合

コントローラーで

    function index () {
        uses('Xml');
        $xml = new Xml('http://news.livedoor.com/topics/rss.xml');
        $rss = Set::reverse($xml);

        return $rss['Rss']['Channel']['Item'];
    }

と書くだけ。$rssには取得したxmlが配列形式で格納されます。

requestActionから利用するときは

        if (empty($this->params['requested'])) {
            $this->cakeError('error404');
        }

と書いといて、requestActionからのみアクセスできるようにしておきます。

ビューからは

        <?php $index = $this->requestAction('/rsses/index/'); ?>
        <?php if ($index) : ?>
          <ul>
          <?php foreach($index as $item) : ?>
            <li><a href="<?php echo $item['link']; ?>" target="_blank"><?php echo $item['title']?></a></li>
          <?php endforeach; ?>
          </ul>
        <?php endif; ?>

このような感じで取ってきたRSSを表示すれば、簡単にサイトにlivedoor newsが表示できます。

WordPress 複数のカテゴリーを表示する

複数のカテゴリー、例えば特定のジャンルとエリアとかで検索したいと言った場合があると思います。
カテゴリーを親子関係にしておけば結構簡単に検索は出来るのですが、そうしたくない場合もあると思います。(わがままw)

query_postsのパラメーターに

<?php query_posts('cat=2,3'); ?>

とやればいいと思ったのですが、これだとカテゴリーIDが2または3のものと言うことになります。つまりOR検索。

AND検索したい場合は

<?php query_posts(array('category__and'=>array(2,3))); ?>

このように書けば、カテゴリーIDが2かつ3のものが検索できます。

query_postsのパラメーターは配列で渡すやり方と、文字列で渡すやり方があるのですがcategory__andは配列だけのようです。
なので、category__and使う場合は他のorderとかもキー&バリューで渡す形になります。

参考サイト:WordPressの基本操作と使い方

jQuery Mobile で iPhone 用のHTML作成

mod_rewiteでPC版、iPhone版ディレクトリを分ける

今回はトップページだけの手抜きiPhone対応(というか、ただやってみたかっただけ)なので、iPhoneの場合は/iphone/にリダイレクトするようにする。

.htaccess

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} iPhone
RewriteRule ^$ /iphone/ [R=301,L]

HTTPヘッダーのユーザエージェントで判定。

jQuery Mobile用のマークアップを追加

1時間で携帯サイトをスマートフォン対応にする方法とかjQuery Mobile デモのページを参考に変更。

done.

はじめてのgithub

githubは分散型バージョン管理システムのホスティングサービスです。
今回、Cutegramというinstagramに投稿されている可愛い写真をダラ見するサイトをつくってみたので、githubに登録してみました。

アカウントの作成とgitのインストール

まずはアカウント作成ページからアカウントを作成します。

macportsでgitをインストールします。

$sudo port install git-core

windowsの場合もこちらからダウンロードできるようです。

gitの初期設定

ユーザー名、メールアドレスを登録します。

$ git config --global user.name "Firstname LASTNAME"
$ git config --global user.email example@example.com

設定情報は~/.gitconfigに保存されます。

ソースのコミット

コミットするソースファイルがあるディレクトリに移動してgit initを実行します。

$ cd cutegram
$ git init

$ ll -a
drwxr-xr-x  12 suusuke  admin   408  5 24 14:51 .git

.gitというディレクトリが出来ます。

ここで、コミットしたくないファイルがある場合は.gitignoreというファイルを作成しそこに記述します。

$ vi .gitignore
.DS_Store

ローカル環境へコミット

git addコマンドでコミットします。

$ git add .
$ git commit -m "first commit"

SSHの公開鍵・秘密鍵の作成

ssh-keygenコマンドでsshの鍵を作成します。(rsa)

$ ssh-keygen -t rsa

作成されるとルートディレクトリの.sshに公開鍵と秘密鍵が作成されます。

$ ll ~/.ssh/
-rw-------  1 suusuke  staff  1743  5 24 14:49 id_rsa
-rw-r--r--  1 suusuke  staff   397  5 24 14:39 id_rsa.pub

公開鍵(id_rsa.pub)をgithubのアカウント設定ページに設定します。(コピペ)

githubリポジトリ作成

リポジトリ作成ページからリポジトリを作成します。

作成したら、最後にcontinueのリンクをクリックします。

githubにpushする

ローカルにコミットしたソースファイルをgithubにpushします。

$ git remote add origin git@github.com:username/cutegram.git
$ git push origin master