2010年10月30日土曜日

第19回すくすくスクラムに行ってきました。

10月25日(月曜日)に第19回すくすくスクラムに行ってきました。
http://kokucheese.com/event/index/4912/

"KANBAN AND SCRUM - MAKING THE MOST OF BOTH" の再演
ということで、かんばんとスクラムの比較についてでした。

当日のスライドは下記から見れるようです。
http://www.slideshare.net/kiroh/scrum-kanban
また、以下から「かんばんとスクラム 両者のよさを最大限ひきだす」のPDFを無料でダウンロードできます。
http://www.infoq.com/jp/minibooks/kanban-scrum-minibook


講演の合間に、
ワークショップやディスカッションの時間があり、とても理解しやすかったです。
以下は当日のメモです。
(あくまでもメモなので、詳しくは上記のリンク先を見て下さい。)


- 目的:スクラムとかんばんの違いを理解する。
- kanbanとは
-- 作業フローの可視化をする
-- 仕掛品の制限
-- 計測して最適化をする
-- Doneの定義を行う
- プロセスはツール
-- 適応度が多いチームほどプラクティスが少ないプロセス
--- RUP->XP->Scrum->kanban
- 状況によってツールを選ぶ (XP Scrum kanban)
- ツールは使い方を間違えるもの => ちゃんと使いこなすのが大事
- 仕掛品の制限
-- 仕掛品の制限による最適化
-- 状況によって改善することができる、必要がある
--- 客の状況や組織の状況によって・・・
-- 仕掛の制限で、プロセスが改善できるか考える(仕掛の制限によって出荷までのスピードを短くできるか考える)
--プロジェクトの失敗は
--- 強引なスケジュール
--- 仕掛品がとても多い状態
--仕掛の制限が
--- 低い => 怠けものが出る
--- 適切 => 心地いい
--- 高い => ゆとりがない
- Scrum/Kanban比較
--Scrum/Kanbanは => 透明性を高める
-- Scrum/Kanbanは経験を重視
-- Scrumはやること固定/ Kanbanは常に仕掛品があることが条件
-- Scrumはスプリントが終わるとタスク刷新/Kanbanは残る
-- Scrumは役割を設定 / Kanbanは設定しない。
-- Scrumはスプリントごとに成果物を出す / Kanbanはタイムスタンプを設定しない
-- Scrum はスプリントごとにタスク調整 / Kanban は時間がかかるものでも、終わるまでタスク終わらない
-- Scrum は見積もりをして、ベロシティで計測 / Kanbanは見積もりを数えるのみ(サイズは把握)
- 大切なのは
-- ゴールを把握
-- ツールを批難しない
-- ツールにこだわらない
-- 経験を楽しむ


ツールにこだわらないという言葉に激しく共感しました。
スクラムもかんばんも、ツールであり、
盲目的に「スクラムだからこうすべき」とか言うのではなく、
自分たちのチームに合ったプロセスに改善していかなくてはいけません。
ツールをどう使うかを考えなくてはいけません。
スクラムもかんばんもXPも、自分達にとってプラスになるとおもえれば、
どんどん取り入れて「僕が考えた最高のプロセス」を構築すべきなのです。

これは開発プロセスに限った話ではありません。
たとえば、どこかの企業で成果主義を取り入れ、
大きく利益を上げたとしましょう。
それをまねて自分たちの企業も成果主義を導入したが、
どうもいまくいかない、といったこともあるでしょう。
そのときに、「成果主義はダメだった」と結論を出すのは間違いです。
もしかしたら、成果主義の方法が間違っていたかもしれないし、
自分たちの文化に合わなかったかもしれないのです。
どうして失敗しながらのwhyを分析し、
どうすれば成功するのかを考えるべきです(もちろん、自分たちに合わないなら使わないのが正しいと思います)。

私たちのチームではスクラムを導入していますが、
反省会をしていない状態です。
これは悪しき文化です。
すぐにでも、スプリントが終わったあとに必ず反省会をやるように改善していきたいです。

このような素晴らしい学びの機会を得られたことに感謝します。

2010年10月24日日曜日

Shibuya.lisp Hackathon #1に行ってきました。

Shibuya.lisp Hackathonに参戦してきました。

LISP自体、書くのが久しぶりで、
行く前に久しぶりにちょっと書いてみたら、全然書けなかったので(TT)
いい機会なので、勉強するつもりできました。

当日はもくもくとコードを書いていたので、
もうちょっといろんな人と話せばよかったと思いました。反省。
自分は引っ込み思案でなかなか話しかけられないので、もうちょっとここら辺を克服したいと思います。

最後に成果発表の時間がありましたが、
皆さんの発表見て、「やっぱ格が違うなー。すごいなー。」と思いました。
もっとがんばらないと。


一応テーマとして、
svgをパースして
gauche-glで描画するということをして
勉強しようと思いました。

とにかく、
rectを描画することを目標にがんばり、
なんとか描画するまで行きました(すごく簡単なことなんですけどね;)

以下にコードを晒します。

process_svg.scm

(use sxml.ssax)

(define (translation_rect data)
  (let ((x1 0)
(y1 0)
(x2 0)
(y2 0))
    (map (lambda (x)
  (cond
   ((equal? (car x) 'x)
    (set! x1 (string->number (cadr x)))
    (set! x2 (+ x2  (string->number (cadr x)))))
   ((equal? (car x) 'y)
    (set! y1 (string->number (cadr x)))
    (set! y2 (+ y2 (string->number (cadr x)))))
   ((equal? (car x) 'width)
    (set! x2 (+ x2 (string->number (cadr x)))))
   ((equal? (car x) 'height)
    (set! y2 (+ y2 (string->number (cadr x)))))
   ))
data)
    (list x1 y1 x2 y2)))

(define (get_x1 data)
  (car data))
(define (get_x2 data)
  (caddr data))
(define (get_y1 data)
  (cadr data))
(define (get_y2 data)
  (cadddr data))

(define (process_element elem)
  (case (car elem)
    ('rect (translation_rect (cdr (cadr elem))))
    ('circle (print "circle"))
    ('line (print "line"))))

(define (parser data)
  (process_element
   (car (cdr (car (cdr (ssax:xml->sxml (open-input-string data) '())))))))


main.scm

(use gl)

(use gl.glut)
(load "./process_svg.scm")

(define setup-data
  (map 
   (lambda (x) (/ x 250))
   (parser "<svg><rect height="100" width="100" x="10" y="10"></rect></svg>")))

(define (disp)
  (let ((x setup-data))    
    (print x)
    (gl-clear-color 0.0 0.0 0.0 0.0)
    (gl-clear GL_COLOR_BUFFER_BIT)
    (gl-color 1.0 0.0 0.0)
    (gl-ortho 0.0 1.0 1.0 0.0 -1.0 1.0)
    (gl-begin GL_POLYGON)
    (gl-vertex (get_x1 x) (get_y1 x) 0.0)
    (gl-vertex (get_x2 x) (get_y1 x) 0.0)
    (gl-vertex (get_x2 x) (get_y2 x) 0.0)
    (gl-vertex (get_x1 x) (get_y2 x) 0.0)
    (gl-end)
    (gl-flush)))
(define (keyboard key x y)
  (cond
   ((= key 27) (exit 0))
   ))

(define (main args)
    (glut-init args)
    (glut-init-display-mode GLUT_SINGLE)
    (glut-init-window-size 250 250)
    (glut-create-window "nil window")
    (glut-display-func disp)
    (glut-keyboard-func keyboard)
    (glut-main-loop)
    0)


だいぶ汚いコードですが;
もうちょっとうまく書けるような気がするなー。。。

実行結果は以下です。

とりあえずここまでできたので、
XMLをちゃんと扱えるようにする。
circleといったほかのプリミティブを秒かできるようにする。
アニメーションをできるようにする。
までやりたいなと思います。

早く初心者から脱却したいなー。

(10/30追記)
ソースをGithub に公開しました。 
 
本当はもっとちゃんとしたものになってから公開しようかと思ったんですけど、
そんなこと言ってたらやらないまま終わっちゃいますからね。