git-svnなgitレポジトリをcloneするの法
git svn clone は svn ログをたどるためでかい svn レポジトリになるととんでもなく時間がかかります。
なのですでに clone 済みの git レポジトリから clone したら簡単じゃんと思って素直に clone してみたのだけど、そのままじゃうまく clone 出来なかったのでメモ。
こんな感じでやればおk
# とりあえずレポジトリ作る
mkdir test
cd test
git init
# clone
git remote add origin http://co-workers-pc/dev/project/.git
git config --add remote.origin.fetch '+refs/remotes/*:refs/remotes/*'
git fetch
git reset --hard trunk
# git svn の remote を再設定
git svn init -s http://yourrepos/svn/project/
git svn rebase
なんだか手間かかるけど git svn clone するのと比べると圧倒的に速い。
いきなり clone しないで remote add して config を追加してあげたあと fetch するのがポイントか。
master を trunk として使わないなら git reset はいらんかな。あと、svn init で -s してないときはそもそも trunk ブランチとかないので注意。
今年も終わりますね
来年もよろしくお願いします。
まとめエントリを書こうと思ったけど、実家のネットが遅すぎて(ISDN!)書く気になれないのでこれにて。ここはssh経由のemacsで書いているのです。
今年末は原点に返ってblosxomをいじっております。
lighttpd 1.4.20 は CGI の STDERR をエラーログに出してくれない。
のでちょっとはまった。なんなんだ。
コードを見るとなぜか /dev/null にリダイレクトしちゃっている。
ログを追うと、
http://redmine.lighttpd.net/repositories/revision/lighttpd/2163
この変更によるものらしいが、正直何してるのかよくわからない。
とりあえず STDERR が闇に葬られるとか不便すぎるので
diff --git a/src/mod_cgi.c b/src/mod_cgi.c
index 6f27f8b..18f88c2 100644
--- a/src/mod_cgi.c
+++ b/src/mod_cgi.c
@@ -987,8 +987,6 @@ static int cgi_create_env(server *srv, connection *con, plugin_data *p, buffer *
*c = '/';
}
- openDevNull(STDERR_FILENO);
-
/* we don't need the client socket */
for (i = 3; i < 256; i++) {
if (i != srv->errorlog_fd) close(i);
などとしておいた。1.4.x 系では今のところ最新の 1.4.20 だけがこうなってる。
チケット作っとこうとしたらもうあった。
次のバージョンでは直ると良いね。
multiverse.elで現在のファイルのスナップショットを取る - '(rubikitch wanna be (a . lisper))
プログラミングしているとき、実験的修正をしたくなることがあるだろう。もし実験が失敗したときに元に戻す...なんてことは日常茶飯事だ。
RCS、CVS、Subversion、Gitなどのバージョン管理システムはまさしくそれをやっているのだが、未完成のままではコミットはできない。たとえば、複数の(細かな)実装が思い付いたとき、どっちかひとつをコミットしたいなんて場合とか。
そこにgitを一緒に入れるのはなぜなんだ?
それをやるためにgitみたいなdistributedなバージョン管理システムがあると言っても過言でないくらいだと思うのだが。
xcode でも toolchain でもビルドできる iPhone アプリ構成を作る手順メモ
まず、xcode で新規プロジェクト作成。Window-Based Application が余計なもの作らないのでおすすめ。
.
|____Classes
| |____my_test_projectAppDelegate.h
| |____my_test_projectAppDelegate.m
|____Info.plist
|____main.m
|____MainWindow.xib
|____my_test_project.xcodeproj
| |____project.pbxproj
| |____typester.mode1v3
| |____typester.pbxuser
|____my_test_project_Prefix.pch
こんなファイル構成ができあがる。
まず、nib ファイルは toolchain 環境では扱えないので MainWindow.xib は削除。Info.plist からも
<key>NSMainNibFile</key>
<string>MainWindow</string>
って部分を削除。nib ファイルを使わないということはすなわち xcode のインターフェースビルダーが使えないということだけどまぁしょうがない。
つぎ、プリコンパイルヘッダ (my_test_project_Prefix.pch) も僕はいらないので削除。また、project.pbxprojに
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = my_test_project_Prefix.pch;
という部分がDebugとReleaseの二カ所あると思うのでそこを
GCC_PRECOMPILE_PREFIX_HEADER = NO;
に変更。
Classes ってディレクトリ名が気に入らないので、src に変更。xcode側では読み込み直す。
アイコンとかリソースファイル用には resources ってディレクトリを作っておく。
最後に toolchain 用の Makefile をおく。
この時点でファイル構成は
.
|____Info.plist
|____my_test_project.xcodeproj
| |____project.pbxproj
| |____typester.mode1v3
| |____typester.pbxuser
|____main.m
|____Makefile
|____resources
|____src
| |____my_test_projectAppDelegate.h
| |____my_test_projectAppDelegate.m
こんな感じ。
これでどっちでもビルドできるようなアプリを書くことが可能。
めんどくさいので自動化したい。
追記@2008-12-11
project.pbxproj を直いじりすると、その後 xcode から実機デバッグしようとするとUUIDがちげーよとかいう警告がでるようになるっぽい。(実際にデバッグは出来るのけど)
直いじりするかわりに xcode のプロジェクト設定で GCC_PRECOMPILE_PREFIX_HEADE とかを編集すれば大丈夫。
KillAppleをCydiaからインストールできるようにしてみた
この間作った KillApple という iPhone のメモリに残ったビルドインアプリケーションを殺すアプリケーションですが、いろんなところでデモするとなかなか好評で、使いたいとおっしゃってくださる方もいたので、Cydiaからインストールできるようにしてみました。
Cydia のソースに
http://apt.unknownplace.org/iphone/
を追加すると、検索に KillApple が引っかかるようになると思いますのでそのままそれをインストールすればOKです。
今後作ったほかのアプリもここで公開していこうかなと思っております。
URLベースでのACLをkamaitachiにもつけた
Wowza Media ServerでSWFVerification(っぽいこと)をする方法 - blog.katsuma.tv
それなら kamaitachi でもできるよ。ってことで使いやすいようにサービス化。
AutoConnect の代わりに、AutoConnectACL というサービスを使うと URL ベースでのアクセスコントロールをつけることができるようにしてみた。
echo サンプルの例なら、
package Service::Echo;
use Moose;
extends 'Kamaitachi::Service';
with 'Kamaitachi::Service::AutoConnectACL';
sub allow_pages {
'http://www.unknownplace.org/*',
'http://unknownplace.org/*',
}
sub allow_swfs { 'http://unknownplace.org/*' }
sub on_invoke_echo {
my ($self, $session, $req) = @_;
$req->response(@{ $req->args });
}
のような感じで、AutoConnectACL を with して allow_pages と allow_swfs を定義すればそこに書かれたURLにマッチするアクセスだけを許可することが出来る。
いちおう Flash の流儀にあわせてなんか glob マッチ方式にしてるんだけど、使いにくいので正規表現でもいけるようにしてある。
sub allow_pages { qr{^https?://(www\.)?unknownplace\.org} }
とか Regexp リファレンスつかえばおk。
allow_pages が swf の貼り付けてあるページの URL、allow_swfsが swf 自体の URL にマッチする感じ。
kitasando.as #2 にいってきた
土曜に FMS 勉強会という名目で行われた kitasando.as で kamaitachi を紹介してきました。
スライド:
http://svn.coderepos.org/share/docs/typester/kitasandoas-2/start.html
本家 FMS の話と、Wowza の話がおもしろかった。Wowza完成度高杉だろ。
SWFVerification とか機能自体しらなかった。どうやるんだろうなぁ。connect時swfのURLは送られてくるけど、それだけじゃ無理だし。
adlがうごかなくてはまる
kamaitachi のサンプルアプリで Air アプリをつくろうとおもってつくろうとしたんだけど、adl がうまくうごかなくてはまった。
環境は OSX 10.5.5 + Air1.5 + Flex SDK 3.2.0.3958。
普通に実行すると
$ adl HelloWorld-app.xml
unknown error
Error: Error #2014: Feature is not available at this time.
at runtime::SecurityManager$/initAppDataDirRoot()
at runtime::SecurityManager$/GetPersistentStorageDirectoryName()
at runtime::AppRunner/run()
at global/runtime::ADLEntry()
こんなんなる。別にコードが悪い訳じゃなくて、adtでパッケージ作るとそれは起動できる。
でなんかよく見るとディレクトリ関係のとこでこけてるからためしに sudo でうごかしてやったらうごいた。。なんやねん。
どっかのパーミッションかえてやればいいんだろうけどそれがどこだかわからんなぁ。