p2p bug tracking with sd
DESCRIPTION
SD is a new distributed issue tracking system designed for the open web.TRANSCRIPT
P2P Bug Tracking with SD
http://syncwith.us
curl fsck.com/sd|perl; ~/sd/bin/sd
SD を使った P2P バグトラッキング
Hi!
こんにちは
I’m Jesse (obra)
Jesse です
I own a small software company
小さな会社の社長をしています
(Best Practical)
I’ve been making issue trackers since
1995
1995年からバグトラッカーを作ってきました
Our softwarehas some bugs
うちのソフトには バグがあります
All softwarehas some bugs
どんなソフトでもバグはあります
(All software is made of bugs)
ソフトなんてバグでできているのです
I spend a lot of timeon airplanes...
私はよく飛行機に乗ります
...and at conferences with bad wifi
ネットにつながりにくいイベントにもよく行きます
I need to keep track of our bugs and our
work
でも、バグや仕事から目を離すわけにはいきません
I’m the boss
社長ですから
I have no excuse for not doing my work
言い訳は通用しません
I need to keep track of our bugs and our work even when I
don’t have net accessネットがなくてもバグや仕事は管理しないといけないのです
I’ve tried everything
あらゆる方法を試してみました
Text files
テキストファイル
Text files inversion control
バージョン管理したテキストファイル
IMAP Servers
IMAPサーバ
RSS Feeds
RSSフィード
Running RT onmy laptop
ラップトップで RTを走らせてみたり
Keeping browsers open
ブラウザを開きっぱなしにしてみたり
Nothing was quite right
どれもイマイチでした
So we built SD
そこで作ったのが SDです
SD is a Bug Tracker
SDはバグトラッカーです
SD is a DistributedBug Tracker
SDは分散型のバグトラッカーです
SD Features (の特徴 )
Tracks bugsCLIWeb UIScriptableWorks offlineAttachmentsCommentsCustomizable workflowCustom properties
P2P SyncTrac SyncRT SyncHiveminder SyncGitHub SyncGoogle Code SyncConflict ResolutionGit integrationDarcs integration
Principles of distributed computing
分散コンピューティングの原理
Bill Joy, Tom Lyon, Peter Deutsch and
James Gosling created these
ビル・ジョイらはこんなものを作りました
The network is reliable
ネットワークが信頼できて
Latency is zero
遅延時間はゼロで
Bandwidth is infinite
帯域幅は無限
The network is secure
ネットワークは安全で
Transport cost is zero
転送料はゼロ
The network is homogeneous
ネットワークは均質で
Topology doesn't change
ネットワークの構成は変化しない
There is one administrator
管理者はひとり
I didn’t make those up
私にはそんなもの用意できませんでした
Bill Joy, Tom Lyon, Peter Deutsch and James Gosling did
彼らは用意しましたが
Principles of distributed computing
Fallacie
sFall
acies
分散コンピューティングの原理
Those are all LIES
そんなものは真っ赤な嘘です
The network is not reliable
ネットワークなんて信頼できません
SD isn’t network-dependent
だから SDはネットワークに依存しません
Latency hurts
遅延時間もひどいものです
SD runs at the edge
だから SDは境界上で動作します
Bandwidth is always a problem
帯域幅はいつでも悩みの種です
SD knows which changesets you’ve
already seen
だから SDはどのチェンジセットを見たか覚えています
The network is insecure
ネットワークは安全ではありません
SD doesn’t depend on a network security
layer
だから SDはネットワークのセキュリティ層には依存しません
Topology is unpredictable
and fluid
ネットワークの構成は予測できませんし流動的です
SD is topology-agnostic
だから SDは構成不可知論の立場をとります
There is no administrator
管理者なんていません
(But there are many people who think
they’re administrators)
そのつもりでいる人はたくさんいますが
SD lets you implement policy in
the centralized systems it syncs to
だから SDは同期先の中央管理システム側でポリシーを実装できるようになっています
Transportcosts money
転送料はタダではありません
SD doesn’t use much bandwidth & can use
non-network substrates
だから SDはあまり帯域幅を使いません。ネットワーク以外の下位層にも対応しています
The network is heterogeneous
ネットワークは均質ではありません
SD is designed to sync to foreign
systems
だから SDは外部のシステムと同期できるようになっています
SD runs locally
SDはローカルで実行できます
SD plays wellwith others
ほかのソフトともうまくつきあえます
It syncs the way you do
同期の取り方は人間と同じ
Clone a project’s bugdatabase (over HTTP)
(HTTP経由で )プロジェクトのバグデータベースのクローンを作って
Work offline
オフラインで作業して
Pull changesets from anyone you work
with
仕事仲間からチェンジセットを取ってきて
Publish your database replica with
rsync
データベースの複製を rsyncで公開
Topology doesn’t matter...
ネットワークの構成なんて関係ありません
Don’t worry
ご心配なく
It won’t break
それでも壊れませんから
SD learns how to resolve each
conflict...
SDは衝突の解決策をひとつひとつ学んでいきます
...based on how everyone else
resolves it
ベースとなるのは、ほかの人がどう解決したかです
Using SD (CLI)
SDの使い方 (CLI)
Getting Started
使ってみましょう
SD Shell
$ sd
シェル
./
Getting help
$ sd help
ヘルプ
Creating a new project
$ sd init新規プロジェクトの作成
Project settings
$ sd settings
プロジェクトの設定
Config file
$ sd config
設定ファイル
Create a bug
$ sd ticket create
バグ情報を登録する
Listing bugs
$ sd ticket list
バグ情報の一覧表示
Show a bug
$ sd ticket show
バグ情報を表示する
Update a bug
$ sd ticket update
バグ情報を更新する
Log
$ sd log
ログ
Git Integration
$ git sd
Gitに統合
Using SD (Web)
SDの使い方 (Web)
Web? Isn’t SD anoffline tool?
あれ、 SDってオフラインツールじゃなかったの?
Local microserver
ローカルのマイクロサーバ
$ sd browser
Home
ホーム
Create a ticket
チケットを登録する
Search
検索
Show a bug
バグ情報を表示する
Update a bug
バグ情報を更新する
Comments
コメント
History
履歴
Working with others
ほかの人と一緒に作業する場合
Working with others(Using SD)
ほかの人と一緒に作業する場合(SDを利用 )
Any topology
ネットワークの構成は任意
It doesn’t matter who you sync with
同期する相手は誰でもかまいません
You get all the updates
eventually
そのうちすべての更新情報が届きます
Cloning
$ sd clone
クローン
clone makes a replica of someone else’s
database
クローンするとほかの人のデータベースの複製を作ります
Pulling
$ sd pull
取得
pull imports unseen changes from
another database replica
ほかのデータベースの複製から未見の変更をインポートします
Publishing
$ sd publish
公開
publish writes out a copy of your
database replica for sharing
データベースの複製のコピーをほかの人と共有できるように書き出します
(As SD changesets and static HTML)
SDのチェンジセットと静的な HTMLの形で
Hackathon mode(using Bonjour)
ハッカソンモード (Bonjourを使って )
Publish your replica
$ sd server
Pull updates
$ sd pull --local
更新を取得
Working with others(Using other systems)
ほかの人と一緒に作業する場合(ほかのシステムを使う )
But you already have a bug tracker?
もうバグトラッカーを使っていますって?
No Problem!
大丈夫!
I use at leasttwo others.
私も少なくともあと 2つ使っています
I wrote at leasttwo others.
少なくともあと 2つ書きました
We designed SD talk to foreign bug
trackers
Sdは外部のバグトラッカーともやりとりできるように設計しました
RT
RT::Client::REST(By DMITRI, DAMS & AMS)
Hiveminder
Net::Jifty(by SARTAK)
Trac
Net::Trac(by JESSE & TSIBLEY)
Google Code
Net::Google::Code(by SUNNAVY and FAYLAND)
GitHub
Net::GitHub(by FAYLAND)
Lighthouse(VERY beta!)
Net::Lighthouse(by SUNNAVY)
Redmine(Read-only for now)
Net::Redmine(by GUGOD)
Want to help with Bugzilla, Jira, FogBugz
or something else?
Bugzillaとかも使いたい?
Work with foreign
replicas in a Star
Topologyスター構成にすれば外部の複製も使えます
An SD node can act as a gateway
X
SDのノードはゲートウェイにもなります
Clone
$ sd clone
クローン
Clone from Google Code
$ sd clone --from gcode:k9mail
Google Codeから
Clone from RT
$ sd clone --from "rt:https://rt.cpan.org|DBI|"
RTから
Clone from Trac
$ sd clone --from trac:https://trac.parrot.org/parrot
Tracから
Clone from GitHub
$ git sd clone --from github:miyagawa/remedie
Githubから
SD reverse engineers a database history
SDはデータベースの履歴を逆解析します
Pull
$ sd pull
SD reverse engineers a partial database
history
SDは部分的なデータベースの履歴も逆解析します
Push
$ sd push
SD figures out local updates and sends
them upstream
SDはローカルの更新を見つけて上流に送ります
(Then it does a bunch of book-keeping)
それからさまざまな記録をつけます
So what’s that all look like in the real
world?
実際の例を見てみましょう
Google Code Alice’s SD Bob’s SD
Create some bugs
clone --from gcode:k9mail Alice’s SD makes a full copy of the k9mail from google code
Someone updates ticket 12
ticket update 13
ticket create
pull --from k9mail SD integrates upstream changes from Google Code since Alice ran the ‘clone’ command.
push --to k9mail SD figures out what’s changed locally since the original ‘clone’ command. SD then sends any changes that Google Code hasn’t seen upstream as ticket updates. Alice’s new ticket and her updates to ticket 13 are now part of the upstream bug database in Google Code
publish --to alice.com:public_html/k9
SD exports a full copy of Alice’s bug database and rsyncs it up to alice.com/k9. Anyone browsing alice.com/k9 can clone her SD replica. (Or see it in static HTML)
clone --from http://alice.com/k9 Bob makes a full copy of Alice’s SD replica of the k9mail database. He’s now free to make changes to his local database replica.
ticket update 45
ticket create
ticket create
ticket update 45
publish --to bob.com:public_html/k9 Bob publishes his full K9 bug database. Anyone browsing bob.com/k9 can clone Bob’s K9 replica. Anyone who already has a copy of Alice or Bob’s database can incorporate Bob’s new ticket and his changes to ticket 45.
pull --from http://bob.com/k9 Alice’s SD pulls all previously unseen updates from Bob’s published database replica and incorporates them. If Bob's edits to ticket 45 didn't conflict, Alice's SD incorporate them. If they did conflict, Alice will be prompted to resolve the conflict.
push --to k9mail Alice publishes all updates her bug database has seen since she last sent updates to Google Code. Google Code now has all of Alice and Bob’s changes.
Installing SD
SDのインストール
It’s time to get SD up and running
いよいよ SDを走らせてみましょう
SD is in Perl
SDは Perlで書かれています
SD uses 45-90 CPAN modules
45 ~ 90個の CPANモジュールを使っています
Are you afraid?
大変そう?
Don’t be
心配ご無用
I have a novel idea for
a Perl application
これまでの Perlアプリとは違う新しいやり方を思いついたんです
One-tweet install.
インストールはつぶやき 1回分
I’m installing #SD (http://syncwith.us) after seeing @obra’s talk at #YAPCASIA!
YAPCASIAで@obraの話を見て#SD (http://syncwith.us)をインストールしてる
80 bytes! I still have 60 to work with!
80バイト ! まだ 60バイトもありますよ !
I’m installing #SD (http://syncwith.us) after seeing @obra’s talk at #YAPCASIA!
curl fsck.com/sd|perl; export PATH=~/sd/bin:$PATH; sd
curl fsck.com/sd|perl; export PATH=~/sd/bin:$PATH; sd
You’ll need:
curl, perl 5.8, C compiler
必要なのは curl, perl 5.8, Cコンパイラ
You won’t need:
CPAN
CPAN不要
You won’t need:
to answer prompts
質問に答えたりする必要もなし
You won’t need:
to fix dependencies
依存モジュールの修正も不要
SD is in Perl
SDは Perlで書かれています
SD uses CPAN modules.
CPANモジュールも使っています
This is a blessing.
ありがたいことです
This is a curse.
呪いでもありますが
CPAN=
Dependency Hell
CPANは依存地獄です
When we first built SD, we used anything
we thought was useful
SDを最初に作ったときは便利そうなものを使いまくりました
(The first version of SD used a SVN
backend)
最初のバージョンはバックエンドにSVNを使っていました
The first ~useful version of SD:
最初のバージョンがほぼ使えるようになったときはこんな感じでした
123 Dependencies
123個の依存モジュール
...a couple hours later
…数時間後には
54 Dependencies
54個の依存モジュール
Only one needs a compiler.
コンパイラが必要なのは 1つだけ
Shipwright gives us one-command install
Shipwrightのおかげでコマンド 1つでインストールできるようになりました
curl fsck.com/sd|perl export PATH=$PATH:~/sd/bin
What’s that do?
どうなってるのか
curl
perl
$ head /Library/WebServer/Documents/sd
open (my $tar,'|tar xz 2>/dev/null');while (<DATA>) { print $tar $_; }close $tar;exec("cd sd-build; bin/shipwright-builder \ --install-base=$ENV{HOME}/sd");__DATA__?I?Isd-build.tar?<is?F???_1?䀌 yH?"#ٲ${U???H?eH...
Shipwright installs a few Perl modules...
Shipwrightは Perlモジュールをいくつかインストールします…
...in order
順にあげると…
Scalar-List-Utils String-BufferStack Class-Accessor Class-Data-Inheritable Scalar-List-Utils String-BufferStack Class-Accessor Class-Data-Inheritable Tree-DAG_Node Test-Simple Sub-Uplevel Test-Exception Array-Compare Test-Tree-DAG_Node Test-Simple Sub-Uplevel Test-Exception Array-Compare Test-Warn Template-Declare URI HTTP-Server-Simple Params-Util Class-Inspector Warn Template-Declare URI HTTP-Server-Simple Params-Util Class-Inspector File-ShareDir DBI DBD-SQLite HTML-Tagset HTML-Parser HTML-Tree Crypt-File-ShareDir DBI DBD-SQLite HTML-Tagset HTML-Parser HTML-Tree Crypt-SSLeay JSON YAML-Syck JSON-XS JSON-DWIW JSON-Any Mouse Any-Moose SSLeay JSON YAML-Syck JSON-XS JSON-DWIW JSON-Any Mouse Any-Moose Compress-Raw-Zlib Compress-Raw-Bzip2 IO-Compress libwww-perl HTTP-Compress-Raw-Zlib Compress-Raw-Bzip2 IO-Compress libwww-perl HTTP-Response-Encoding WWW-Mechanize WWW-Mechanize-GZip File-Slurp Test-Response-Encoding WWW-Mechanize WWW-Mechanize-GZip File-Slurp Test-MockModule Net-GitHub MIME-Types Class-Singleton Params-Validate MockModule Net-GitHub MIME-Types Class-Singleton Params-Validate version ExtUtils-CBuilder ExtUtils-ParseXS Test-Harness File-Temp Module-version ExtUtils-CBuilder ExtUtils-ParseXS Test-Harness File-Temp Module-Build DateTime-TimeZone List-MoreUtils DateTime-Locale DateTime File-Build DateTime-TimeZone List-MoreUtils DateTime-Locale DateTime File-MMagic Net-Google-Code Term-ReadLine-Perl Digest-SHA1 Digest-HMAC Net-MMagic Net-Google-Code Term-ReadLine-Perl Digest-SHA1 Digest-HMAC Net-IP Net-DNS Net-Bonjour TermReadKey UUID-Tiny XML-Atom-SimpleFeed IP Net-DNS Net-Bonjour TermReadKey UUID-Tiny XML-Atom-SimpleFeed Digest-SHA Exporter-Lite IPC-Run3 MIME-Base64-URLSafe Sub-Install Data-Digest-SHA Exporter-Lite IPC-Run3 MIME-Base64-URLSafe Sub-Install Data-OptList Sub-Exporter Path-Dispatcher Module-Pluggable Time-Progress Carp-OptList Sub-Exporter Path-Dispatcher Module-Pluggable Time-Progress Carp-Assert Proc-InvokeEditor Test-HTTP-Server-Simple Module-Refresh Carp-Assert Proc-InvokeEditor Test-HTTP-Server-Simple Module-Refresh Carp-Assert-More Test-LongString Test-WWW-Mechanize Test-Script-Run Assert-More Test-LongString Test-WWW-Mechanize Test-Script-Run prophet.git Devel-StackTrace Exception-Class Error RT-Client-REST Email-prophet.git Devel-StackTrace Exception-Class Error RT-Client-REST Email-Address YAML Path-Class Clone Hash-Merge UNIVERSAL-isa UNIVERSAL-can Address YAML Path-Class Clone Hash-Merge UNIVERSAL-isa UNIVERSAL-can Test-MockObject Net-Jifty Lingua-EN-Inflect Text-CSV Net-Trac boolean Time-Test-MockObject Net-Jifty Lingua-EN-Inflect Text-CSV Net-Trac boolean Time-Piece Test-MockTime DateTime-Format-Natural sd.git Piece Test-MockTime DateTime-Format-Natural sd.git
(104 dists with our sync plugins)
syncプラグイン経由で 104個
What’s wrongwith SD?
SDにバグがあったら?
$ sd clone --from http://fsck.com/~jesse/sd-bugs
Don’t want to install SD?
インストールはしたくない?
Point your browser athttp://fsck.com/~jesse/sd-bugs/html
ブラウザからでも大丈夫
What’s next?
SDのこれから?
Indexing
インデックス
GPG-signed changesets
GPG署名付きのチェンジセット
Actually releasing 1.0
本当に 1.0をリリースすること