世界的日曜WEBプログラマー日記 -11ページ目

世界的日曜WEBプログラマー日記

一年後に世界的なWEBサービスを運営するにはどうすればいいのか書いていく(予定)

Gitの使い方まとめ


かなりの今さら感がある記事。

Gitを後輩が使っていて質問されたことを中心に基本的な概念や使い方をつらつらと書いていこうと思う。
普通ならコミット、プッシュを最初に説明していくかもしれないけど、この記事ではGitの概念であるブランチを先に説明して、その後にCommit, Pushあと、ちょっとしたTipsとも言えないけどstashを説明し、終わる。

さて、Gitではサブバージョンと違ってブランチをどんどん切っていくことが需要となる。
開発の流れとしては
1.ブランチを切って、
2.作業を進めていき、
3.本流に統合する。(たいていはMasterという名前。便宜上、本流はMasterと今後呼ぶ)
という流れで開発を行う。

HEADとは現在指しているブランチのこと。最初であればmasterである。

新しく切るブランチのコマンドは
$ git branch iss53
となる。ブランチを作成した後はそのブランチへ乗り換える。(そのブランチへ移動)
$ git checkout iss53

この作業は実に多いため、ショートカットが用意されている。
$ git checkout -b iss53

SubversionのCheckoutは忘れて欲しい。GitでいうCheckoutはブランチ間の移動を指す。
チェックアウト実行により、HEADが移動する。
どこのGitかはcat .git/HEADを行うことで取得することができる。

ブランチを切った後、修正内容をMasterへ反映したい場合は
・masterブランチへ戻る。
・masterブランチを先ほどいたブランチの場所まで進める
を行う。ブランチに戻る(つまり移動する)には、先程のgit checkoutコマンドを使う。

masterブランチにいるときに、
$ git merge iss53
これでマージが完了する。
今はiss53とmasterが同じ場所にいることになっている。だからもうブランチはイラナイ。そこでブランチを消す。
$ git branch -d iss53

基本的には以上の流れ。
もし、Automatic merge failed; が出た場合、マージに失敗している。その時はどこで失敗しているのかGit statusで見ることができる。
衝突が発生している場合、unmergedでる。

そして、そのファイルにコンフリクトマーカーが挿入されている。
(<<<<<<< や ======= そして >>>>>>>)

これらを全て消し、どちらかが正しいのかを選択する。
全てが解決したら衝突していたファイルをgit addをする。

git statusを踏むことで、先程のUnmergedがModifiedに変更されているのが解る。

現在のブランチの一覧を見るには
$ git branch
をする。-vをつけるとハッシュキーも見える。

実際にGitサーバーを使って実際にコミットしてみる


Gitを使うにはサーバー(リポジトリ)を設置する必要がある。
・Githubサーバーを使う
・Bitbucketサーバーを使う
・自前でサーバーを作る。
この3つがある。今の時代、自分でサーバーを立てるなんてアホなことはやめる。
素直にGithubかBitbucketを使おう。

リポジトリを公開してもいい場合はGithubサーバーでアカウントを作成する。
もし、非公開のリポジトリを作りたい場合はbitbucketをおすすめする。
Githubでも非公開のリポジトリは作れるが有料である。

お弁当のマイ食ではエレガントなソースコードはもちろん社外秘なので、Bitbucketを使っている。
これはタダで運用できている。

リポジトリのコピー
$ git clone git@github.com:todoroki/gittest.git

これで終わり。。なんて楽なんだ。

さてファイルを作成して、それをコミットする。
$ git add your_edit_or_create_file.txt
$ git commit -m "Yes, I added or created this file."

これを繰り返し、ローカルにガンガンコミットする。あとはサーバーに上げるタイミングで

サーバーへアップロード
$ git push origin master


サーバーからのダウンロード
$ git push origin master


殆どこれで足りる。

ちょっと調子に乗ってきたら stash



ブランチを移動するときは編集ファイルがある場合、コミットしないと移動できない。もしくはstashをする。
stashはコミットはしない、一時ファイルの保存、スナップショットの作成と言う感じ。

# itanoブランチへ移動 & 編集 & add & commit
$ git checkout itano
$ echo "She got cosmetic surgery!!" >> roba_no_mimi.txt
$ git add roba_no_mimi.txt
$ git commit -m "secrete stuff is added."

ここで再度修正を加え変更しようとするとエラーが生じる
$ echo "Fix her nose!" >> roba_no_mimi.txt
$ git checkout master

ここでエラー出る。つまりコミットしていないから。素直にコミットをしてもいいが、ちょっとMasterブランチの様子を除くだけのためにコミットはメンドイ。そういうときは
こういう時はstashで一時保存してブランチへ移動できる。

$ git stash
$ git checkout master

再び戻る
$ git checkout itano
$ git stash pop


株式会社OctOpt
コンピューターサイエンス会社OctOptの技術公式ブログ
等々力 康弘
@rocky_house
ApacheでDjangoを動かす方法について記載する。目的としてはApacheの動いている環境で、Djangoのアプリケーションを動かすこと。その際にApacheを通してDjangoを呼ぶことにする。

ApacheとDjangoが連携するにはlibapache2-mod-wsgiライブラリが必要となる。
その他必要なライブラリがあるのでapt-getでインストールをする。

環境はUbuntuを想定しているがRedhat系でも動くことは確認している。
一応全体の流れが解るように1から構築の手順を示すが、細かいところは省略、あるいはリンクを張るので、各自そちら参照のこと。

簡単に全体的な流れを書いておく

I. 必要なライブラリのインストール
II. startproject と startappでDjangoサイトの作成
III. urls.pyを編集する。(全部で2つ)
IV. wsgiの記述
V. apacheの登録

となる。


1.次のモジュールをインストールしておく。
・libapache2-mod-wsgi
・python-django
・mysql-server-5.1

2.続いてDjangoのプロジェクトを作成する。
プロジェクト名は何でもいいがココではwebappsとした。
$ django-admin.py startproject webapps

3.webapps下にあるurls.pyを変更する。urls.pyがない場合は自分で作成する。次のような中身のファイルを作成する。
from django.conf.urls.defaults import patterns, include

urlpatterns = patterns('',
(r'^mytestapp/', include('webapps.matching.urls')),
(r'^$', include('webapps.matching.urls')),
)


目的としては、次のようにアクセスが可能となる。
・http://dynaptico.com/mytestapp
・http://dynaptico.com/
(ドメインがdynaptico.comであると仮定)
このあたりの設定はDjangoの公式ドキュメントを参照すること

4.続いてDjangoのアプリを作成する。名前をmatchingとしてみる。
$ django-admin.py startapp matching

アプリの名前は先ほど書いたwebapps/urls.pyに合せている。
settings.pyに作成したアプリを書くのを忘れないようにすること。

5.matching ディレクトリのurls.pyの作成
$ emacs webapps/matching/urls.py
Djangoのバージョンに依ってはアプリにもurl.pyがない場合がある。ない場合、次のようにかく
 from django.conf.urls.defaults import patterns
urlpatterns = patterns( 'matching.views',
(r'^$', 'greeting' )
)


6.続いてviews.pyにgreetingという関数を追加する。関数名はなんでもいいが、matching/urls.pyに書いた関数名に合せる。


from django.shortcuts import render_to_response
from django.http import HttpResponse

def greeting( request ):
html = <font color=#00FF33>"<html><body> Hello word </body></html>"</font>
return HttpResponse( html )



7.続いてwebapps下にwsgiモジュールを置く。
$ mkdir webapps/apache
$ touch webapps/apache/django.wsgi


なお、django.wsgiは自分で書く必要がある。どっかでダウンロードやapt-getで手に入るものでもない。
Webサイトの場所は/var/www/dynapticoにあると仮定する。

$ emacs webapps/apache/django.wsgi

 import os
import types
import sys

os.environ['DJANGO_SETTINGS_MODULE'] = 'webapps.settings'
os.environ['PATH'] = '%s:%s' % ('/usr/local/bin', os.environ['PATH'])

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

dynaptico_base = '/var/www/dynaptico'
sys.path.append(dynaptico_base)
sys.path.append(dynaptico_base + '/webapps')



8。最後にApacheの設定を行う。`
$ sudo emacs /etc/apache2/site-available/dynaptico

<VirtualHost *:80>
ServerName dynaptico.com
ServerAdmin webmaster@dynaptico.com
# DocumentRoot /var/www/dynaptico
DocumentRoot /var/www/dynaptico/webapps/matching
WSGIScriptAlias / /var/www/dynaptico/webapps/apache/django.wsgi

<Directory />
Order deny,allow
Deny from all
Options None
AllowOverride None
</Directory>
<Directory /var/www/dynaptico/webapps>
Options FollowSymLinks
AllowOverride FileInfo
Order allow,deny
allow from all
</Directory>
</VirtualHost>


次のコマンドで有効化
$ sudo a2ensite dynaptico
$ etc/init.d/apache2 reload


株式会社OctOpt
コンピューターサイエンス会社OctOptの技術公式ブログ
等々力 康弘
@rocky_house

m4a から mp3への変換方法( 2013/3/27 )


ffmpegをインストール
$ sudo apt-get install ffmpeg libavcodec-extra-53

そのあとに
$ ffmpeg -i newfile.m4a -ab 256k outfile.mp3
とすればいいだけ。256Kの部分を高くすれば音質が良くなる。

まとめてバッチ処理をしたいのであれば、
$ for x in *.m4a; do ffmpeg -i $x -ab 256k ${x%m4a}mp3; done
とする。${x%m4a}mp3の意味は、m4aをmp3という名前に置き換えている事を意味する。
これで、ローカルにある全てのファイルをmp3に変換してくれる。

ファイル名に空白がある場合うまく動かない。( My music here.mp3 とか)
空白は何かに変換しておく必要がある。
例えばPythonを使って空白をアンダーバーに変換する処理をしておく

$ python
> import glob, os
> for filename in glob.glob( '*.m4a' ):
>    os.rename( filename, filename.replace( ' ', '_' ) )

これをターミナルで走らせれば空白がアンダーバーに変換される。
My music here.mp3 --> My_music_here.mp3

株式会社OctOpt
コンピューターサイエンス会社OctOptの技術公式ブログ
等々力 康弘
@rocky_house