wallyqs-org-ruby 0.6.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. data/History.txt +41 -11
  2. data/README.rdoc +55 -50
  3. data/bin/org-ruby +11 -5
  4. data/lib/org-ruby.rb +20 -27
  5. data/lib/org-ruby/headline.rb +0 -10
  6. data/lib/org-ruby/html_output_buffer.rb +224 -143
  7. data/lib/org-ruby/html_symbol_replace.rb +359 -340
  8. data/lib/org-ruby/line.rb +91 -30
  9. data/lib/org-ruby/output_buffer.rb +147 -139
  10. data/lib/org-ruby/parser.rb +45 -111
  11. data/lib/org-ruby/regexp_helper.rb +52 -57
  12. data/lib/org-ruby/textile_output_buffer.rb +90 -37
  13. data/lib/org-ruby/textile_symbol_replace.rb +360 -341
  14. metadata +39 -200
  15. data/.bnsignore +0 -18
  16. data/.gitignore +0 -2
  17. data/Gemfile +0 -7
  18. data/Gemfile.lock +0 -36
  19. data/Rakefile +0 -33
  20. data/TAGS +0 -167
  21. data/announcement.txt +0 -24
  22. data/org-ruby.gemspec +0 -40
  23. data/spec/data/freeform-example.org +0 -113
  24. data/spec/data/freeform.org +0 -111
  25. data/spec/data/hyp-planning.org +0 -335
  26. data/spec/data/remember.org +0 -53
  27. data/spec/headline_spec.rb +0 -65
  28. data/spec/html_examples/advanced-code.html +0 -81
  29. data/spec/html_examples/advanced-code.org +0 -106
  30. data/spec/html_examples/advanced-lists.html +0 -31
  31. data/spec/html_examples/advanced-lists.org +0 -31
  32. data/spec/html_examples/block_code.html +0 -28
  33. data/spec/html_examples/block_code.org +0 -35
  34. data/spec/html_examples/blockcomment.html +0 -3
  35. data/spec/html_examples/blockcomment.org +0 -15
  36. data/spec/html_examples/blockquote.html +0 -7
  37. data/spec/html_examples/blockquote.org +0 -13
  38. data/spec/html_examples/center.html +0 -6
  39. data/spec/html_examples/center.org +0 -7
  40. data/spec/html_examples/code-comment.html +0 -18
  41. data/spec/html_examples/code-comment.org +0 -22
  42. data/spec/html_examples/code-syntax.html +0 -98
  43. data/spec/html_examples/code-syntax.org +0 -99
  44. data/spec/html_examples/comment-trees.html +0 -4
  45. data/spec/html_examples/comment-trees.org +0 -13
  46. data/spec/html_examples/custom-seq-todo.html +0 -15
  47. data/spec/html_examples/custom-seq-todo.org +0 -24
  48. data/spec/html_examples/custom-todo.html +0 -15
  49. data/spec/html_examples/custom-todo.org +0 -24
  50. data/spec/html_examples/custom-typ-todo.html +0 -15
  51. data/spec/html_examples/custom-typ-todo.org +0 -24
  52. data/spec/html_examples/deflist.html +0 -6
  53. data/spec/html_examples/deflist.org +0 -6
  54. data/spec/html_examples/entities.html +0 -4
  55. data/spec/html_examples/entities.org +0 -11
  56. data/spec/html_examples/escape-pre.html +0 -6
  57. data/spec/html_examples/escape-pre.org +0 -6
  58. data/spec/html_examples/export-exclude-only.html +0 -13
  59. data/spec/html_examples/export-exclude-only.org +0 -81
  60. data/spec/html_examples/export-keywords.html +0 -4
  61. data/spec/html_examples/export-keywords.org +0 -18
  62. data/spec/html_examples/export-tags.html +0 -8
  63. data/spec/html_examples/export-tags.org +0 -82
  64. data/spec/html_examples/export-title.html +0 -2
  65. data/spec/html_examples/export-title.org +0 -4
  66. data/spec/html_examples/footnotes.html +0 -10
  67. data/spec/html_examples/footnotes.org +0 -7
  68. data/spec/html_examples/html-literal.html +0 -2
  69. data/spec/html_examples/html-literal.org +0 -6
  70. data/spec/html_examples/inline-formatting.html +0 -20
  71. data/spec/html_examples/inline-formatting.org +0 -33
  72. data/spec/html_examples/inline-images.html +0 -10
  73. data/spec/html_examples/inline-images.org +0 -15
  74. data/spec/html_examples/link-features.html +0 -8
  75. data/spec/html_examples/link-features.org +0 -19
  76. data/spec/html_examples/lists.html +0 -23
  77. data/spec/html_examples/lists.org +0 -47
  78. data/spec/html_examples/metadata-comment.html +0 -27
  79. data/spec/html_examples/metadata-comment.org +0 -30
  80. data/spec/html_examples/only-list.html +0 -5
  81. data/spec/html_examples/only-list.org +0 -3
  82. data/spec/html_examples/only-table.html +0 -6
  83. data/spec/html_examples/only-table.org +0 -5
  84. data/spec/html_examples/skip-header.html +0 -3
  85. data/spec/html_examples/skip-header.org +0 -28
  86. data/spec/html_examples/skip-table.html +0 -4
  87. data/spec/html_examples/skip-table.org +0 -19
  88. data/spec/html_examples/subsupscript-nil.html +0 -3
  89. data/spec/html_examples/subsupscript-nil.org +0 -6
  90. data/spec/html_examples/subsupscript.html +0 -3
  91. data/spec/html_examples/subsupscript.org +0 -5
  92. data/spec/html_examples/tables.html +0 -35
  93. data/spec/html_examples/tables.org +0 -50
  94. data/spec/html_examples/text.html +0 -2
  95. data/spec/html_examples/text.org +0 -16
  96. data/spec/line_spec.rb +0 -155
  97. data/spec/output_buffer_spec.rb +0 -19
  98. data/spec/parser_spec.rb +0 -152
  99. data/spec/regexp_helper_spec.rb +0 -57
  100. data/spec/spec_helper.rb +0 -20
  101. data/spec/textile_examples/block_code.org +0 -35
  102. data/spec/textile_examples/block_code.textile +0 -29
  103. data/spec/textile_examples/blockquote.org +0 -13
  104. data/spec/textile_examples/blockquote.textile +0 -11
  105. data/spec/textile_examples/center.org +0 -7
  106. data/spec/textile_examples/center.textile +0 -6
  107. data/spec/textile_examples/footnotes.org +0 -7
  108. data/spec/textile_examples/footnotes.textile +0 -8
  109. data/spec/textile_examples/keywords.org +0 -13
  110. data/spec/textile_examples/keywords.textile +0 -11
  111. data/spec/textile_examples/links.org +0 -11
  112. data/spec/textile_examples/links.textile +0 -10
  113. data/spec/textile_examples/lists.org +0 -36
  114. data/spec/textile_examples/lists.textile +0 -20
  115. data/spec/textile_examples/single-space-plain-list.org +0 -13
  116. data/spec/textile_examples/single-space-plain-list.textile +0 -10
  117. data/spec/textile_examples/tables.org +0 -50
  118. data/spec/textile_examples/tables.textile +0 -40
  119. data/spec/textile_output_buffer_spec.rb +0 -21
  120. data/tasks/test_case.rake +0 -49
  121. data/test/test_orgmode_parser.rb +0 -0
  122. data/util/gen-special-replace.el +0 -37
@@ -1,24 +0,0 @@
1
- org-ruby version 0.6.1
2
- by Brian Dewey
3
- http://github.com/wallyqs/org-ruby
4
-
5
- == DESCRIPTION
6
-
7
- This gem contains Ruby routines for parsing org-mode files.The most
8
- significant thing this library does today is convert org-mode files to
9
- HTML or textile. Currently, you cannot do much to customize the
10
- conversion. The supplied textile conversion is optimized for
11
- extracting "content" from the orgfile as opposed to "metadata."
12
-
13
- == CHANGES
14
- * Added encoding directive to support Ruby 1.9.2
15
- * Included .org support for Tilt templates (thanks to crnixon)
16
- * #+BEGIN/END_SRC lang code blocks are embedded in code tags with class that specifies the coding language
17
- * CodeRay is used to give code syntax highlight support to #+BEGIN/END_SRC blocks
18
-
19
- * Minor Enhancements
20
- * Angle links in org-mode are embedded in anchor tags on html output
21
- * Headlines with the COMMENT keyword, and the PROPERTIES drawer are not exported
22
-
23
- * Bug fixes
24
- * Fixed bug with InlineExampleRegexp when a colon is at the beginning of a block
@@ -1,40 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- Gem::Specification.new do |s|
4
- s.name = "wallyqs-org-ruby"
5
- s.version = "0.6.1"
6
-
7
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
- s.authors = ["Waldemar Quevedo", "Brian Dewey"]
9
- s.date = "2012-02-26"
10
- s.description = "This gem contains Ruby routines for parsing org-mode files.The most\nsignificant thing this library does today is convert org-mode files to\nHTML or textile. Currently, you cannot do much to customize the\nconversion. The supplied textile conversion is optimized for\nextracting \"content\" from the orgfile as opposed to \"metadata.\" "
11
- s.email = ["waldemar.quevedo@gmail.com", "bdewey@gmail.com"]
12
- s.executables = ["org-ruby"]
13
- s.extra_rdoc_files = ["History.txt", "README.rdoc", "announcement.txt", "bin/org-ruby"]
14
- s.files = [".bnsignore", ".gitignore", "Gemfile", "Gemfile.lock", "History.txt", "README.rdoc", "Rakefile", "TAGS", "announcement.txt", "bin/org-ruby", "lib/org-ruby.rb", "lib/org-ruby/headline.rb", "lib/org-ruby/html_output_buffer.rb", "lib/org-ruby/html_symbol_replace.rb", "lib/org-ruby/line.rb", "lib/org-ruby/output_buffer.rb", "lib/org-ruby/parser.rb", "lib/org-ruby/regexp_helper.rb", "lib/org-ruby/textile_output_buffer.rb", "lib/org-ruby/textile_symbol_replace.rb", "lib/org-ruby/tilt.rb", "org-ruby.gemspec", "spec/data/freeform-example.org", "spec/data/freeform.org", "spec/data/hyp-planning.org", "spec/data/remember.org", "spec/headline_spec.rb", "spec/html_examples/advanced-code.html", "spec/html_examples/advanced-code.org", "spec/html_examples/advanced-lists.html", "spec/html_examples/advanced-lists.org", "spec/html_examples/block_code.html", "spec/html_examples/block_code.org", "spec/html_examples/blockcomment.html", "spec/html_examples/blockcomment.org", "spec/html_examples/blockquote.html", "spec/html_examples/blockquote.org", "spec/html_examples/center.html", "spec/html_examples/center.org", "spec/html_examples/code-comment.html", "spec/html_examples/code-comment.org", "spec/html_examples/code-syntax.html", "spec/html_examples/code-syntax.org", "spec/html_examples/comment-trees.html", "spec/html_examples/comment-trees.org", "spec/html_examples/custom-seq-todo.html", "spec/html_examples/custom-seq-todo.org", "spec/html_examples/custom-todo.html", "spec/html_examples/custom-todo.org", "spec/html_examples/custom-typ-todo.html", "spec/html_examples/custom-typ-todo.org", "spec/html_examples/deflist.html", "spec/html_examples/deflist.org", "spec/html_examples/entities.html", "spec/html_examples/entities.org", "spec/html_examples/escape-pre.html", "spec/html_examples/escape-pre.org", "spec/html_examples/export-exclude-only.html", "spec/html_examples/export-exclude-only.org", "spec/html_examples/export-keywords.html", "spec/html_examples/export-keywords.org", "spec/html_examples/export-tags.html", "spec/html_examples/export-tags.org", "spec/html_examples/export-title.html", "spec/html_examples/export-title.org", "spec/html_examples/footnotes.html", "spec/html_examples/footnotes.org", "spec/html_examples/html-literal.html", "spec/html_examples/html-literal.org", "spec/html_examples/inline-formatting.html", "spec/html_examples/inline-formatting.org", "spec/html_examples/inline-images.html", "spec/html_examples/inline-images.org", "spec/html_examples/link-features.html", "spec/html_examples/link-features.org", "spec/html_examples/lists.html", "spec/html_examples/lists.org", "spec/html_examples/metadata-comment.html", "spec/html_examples/metadata-comment.org", "spec/html_examples/only-list.html", "spec/html_examples/only-list.org", "spec/html_examples/only-table.html", "spec/html_examples/only-table.org", "spec/html_examples/skip-header.html", "spec/html_examples/skip-header.org", "spec/html_examples/skip-table.html", "spec/html_examples/skip-table.org", "spec/html_examples/subsupscript-nil.html", "spec/html_examples/subsupscript-nil.org", "spec/html_examples/subsupscript.html", "spec/html_examples/subsupscript.org", "spec/html_examples/tables.html", "spec/html_examples/tables.org", "spec/html_examples/text.html", "spec/html_examples/text.org", "spec/line_spec.rb", "spec/output_buffer_spec.rb", "spec/parser_spec.rb", "spec/regexp_helper_spec.rb", "spec/spec_helper.rb", "spec/textile_examples/block_code.org", "spec/textile_examples/block_code.textile", "spec/textile_examples/blockquote.org", "spec/textile_examples/blockquote.textile", "spec/textile_examples/center.org", "spec/textile_examples/center.textile", "spec/textile_examples/footnotes.org", "spec/textile_examples/footnotes.textile", "spec/textile_examples/keywords.org", "spec/textile_examples/keywords.textile", "spec/textile_examples/links.org", "spec/textile_examples/links.textile", "spec/textile_examples/lists.org", "spec/textile_examples/lists.textile", "spec/textile_examples/single-space-plain-list.org", "spec/textile_examples/single-space-plain-list.textile", "spec/textile_examples/tables.org", "spec/textile_examples/tables.textile", "spec/textile_output_buffer_spec.rb", "tasks/test_case.rake", "test/test_orgmode_parser.rb", "util/gen-special-replace.el"]
15
- s.homepage = "http://github.com/wallyqs/org-ruby"
16
- s.rdoc_options = ["--main", "README.rdoc"]
17
- s.require_paths = ["lib"]
18
- s.rubyforge_project = "org-ruby"
19
- s.rubygems_version = "1.8.10"
20
- s.summary = "This gem contains Ruby routines for parsing org-mode files."
21
- s.test_files = ["test/test_orgmode_parser.rb"]
22
-
23
- if s.respond_to? :specification_version then
24
- s.specification_version = 3
25
-
26
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
27
- s.add_runtime_dependency(%q<rubypants>, [">= 0.2.0"])
28
- s.add_runtime_dependency(%q<coderay>, [">= 1.0.0"])
29
- s.add_development_dependency(%q<bones>, [">= 3.7.3"])
30
- else
31
- s.add_dependency(%q<rubypants>, [">= 0.2.0"])
32
- s.add_dependency(%q<coderay>, [">= 1.0.0"])
33
- s.add_dependency(%q<bones>, [">= 3.7.3"])
34
- end
35
- else
36
- s.add_dependency(%q<rubypants>, [">= 0.2.0"])
37
- s.add_dependency(%q<coderay>, [">= 1.0.0"])
38
- s.add_dependency(%q<bones>, [">= 3.7.3"])
39
- end
40
- end
@@ -1,113 +0,0 @@
1
- #+BEGIN_EXAMPLE
2
- #+TITLE: Freeform
3
- #+AUTHOR:
4
- #+EMAIL: bdewey@gmail.com
5
- #+DATE: 2009-12-20 Sun
6
- #+DESCRIPTION:
7
- #+KEYWORDS:
8
- #+LANGUAGE: en
9
- #+OPTIONS: H:3 num:t toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t
10
- #+OPTIONS: TeX:t LaTeX:nil skip:nil d:nil todo:t pri:nil tags:not-in-toc
11
- #+INFOJS_OPT: view:nil toc:nil ltoc:t mouse:underline buttons:0 path:http://orgmode.org/org-info.js
12
- #+EXPORT_SELECT_TAGS: export
13
- #+EXPORT_EXCLUDE_TAGS: noexport
14
- #+LINK_UP:
15
- #+LINK_HOME:
16
- #+END_EXAMPLE
17
- Freeform
18
-
19
- This is my todo list, research file, and log record from working on
20
- the Freeform project.
21
-
22
- * Future ideas :someday:
23
- - Add *posts*
24
- - Enforce uniqueness of url_token
25
- - Add FeedSync support
26
- - Auto-recognize URLs
27
- - Edit in place
28
- - Import/export of content. I want it to be safe to store real content on the site.
29
- - Page reordering.
30
- - AtomPub support.
31
- - Organization:
32
- - Move pages around
33
- - Add tags and navigation by tags
34
- - Add a breadcrumb bar
35
-
36
- * TODO Add versioning support :current:feature:
37
-
38
- ** DONE UI rough-in
39
- CLOSED: [2009-11-26 Thu]
40
-
41
- ** DONE Author logging
42
- CLOSED: [2009-11-27 Fri]
43
-
44
- ** DONE Version table and model updates
45
- CLOSED: [2009-11-28 Sat 22:40]
46
- CLOCK: [2009-11-28 Sat 21:35]--[2009-11-28 Sat 22:40] => 1:05
47
- CLOCK: [2009-11-28 Sat 21:01]--[2009-11-28 Sat 21:25] => 0:24
48
- CLOCK: [2009-11-28 Sat 19:46]--[2009-11-28 Sat 20:54] => 1:08
49
- CLOCK: [2009-11-28 Sat 14:38]--[2009-11-28 Sat 15:08] => 0:30
50
- CLOCK: [2009-11-28 Sat 13:21]--[2009-11-28 Sat 14:37] => 1:16
51
-
52
- OK, my current thinking is to have each idea have many Changes. A
53
- change has many change records. A change record is a list of
54
- specific attributes that change, and includes the old and the new
55
- values. I'll use callbacks on the Idea model to maintain the
56
- changes.
57
-
58
-
59
- *** DONE Create version method
60
- CLOSED: [2009-11-28 Sat 22:40]
61
-
62
- *** DONE Make current method
63
- CLOSED: [2009-11-28 Sat 22:40]
64
-
65
- ** Update pages controller
66
-
67
- *** DONE Show versions
68
- CLOSED: [2009-11-30 Mon 00:34]
69
- CLOCK: [2009-11-29 Sun 21:27]--[2009-11-29 Sun 21:54] => 0:27
70
- CLOCK: [2009-11-29 Sun 15:40]--[2009-11-29 Sun 15:44] => 0:04
71
- CLOCK: [2009-11-28 Sat 22:44]--[2009-11-28 Sat 23:50] => 1:06
72
-
73
- I'm now at the point where I *list* versions, but I can't show
74
- them.
75
-
76
- - [X] I currently suspect that I broke my version recovery code
77
- when I switched the order of the idea_changes. I need to
78
- investigate why nothing's failing in the tests; I expected
79
- failures. Possible addition to test: start looking at those
80
- version numbers.
81
-
82
- OK, here's what was going on: In the test, you need to
83
- reload the idea_changes array from the database to get the
84
- database sort order. I also make sure I do this inside the
85
- Idea methods.
86
-
87
- **** DONE Write a test for Idea::attributes_for_change
88
- CLOSED: [2009-11-29 Sun 23:59]
89
- CLOCK: [2009-11-29 Sun 23:47]--[2009-11-29 Sun 23:58] => 0:11
90
- CLOCK: [2009-11-29 Sun 22:02]--[2009-11-29 Sun 23:42] => 1:40
91
- CLOCK: [2009-11-29 Sun 21:54]--[2009-11-29 Sun 21:56] => 0:02
92
-
93
- *** DONE Write integration tests that cover versions.
94
- CLOSED: [2009-12-11 Fri 23:25]
95
- CLOCK: [2009-12-11 Fri 20:27]--[2009-12-11 Fri 23:25] => 2:58
96
-
97
- *** DONE Recover versions
98
- CLOSED: [2009-12-12 Sat 22:09]
99
- CLOCK: [2009-12-12 Sat 21:02]--[2009-12-12 Sat 22:09] => 1:07
100
- CLOCK: [2009-12-12 Sat 20:13]--[2009-12-12 Sat 21:00] => 0:47
101
-
102
- *** DONE Move to recycle bin
103
- CLOSED: [2009-12-12 Sat 22:59]
104
- CLOCK: [2009-12-12 Sat 22:23]--[2009-12-12 Sat 22:59] => 0:36
105
-
106
- Note I'm avoiding logging delete operations because I'm presuming
107
- there will be a recycle bin, and therefore the *pages* controller
108
- will never actually delete files. At some point, when I want to
109
- support full FeedSync, I'll need to tackle this.
110
-
111
- The other timebomb: I don't know how well my logging scheme will
112
- work when pages move. I don't yet know if I will address this in
113
- the current sprint.
@@ -1,111 +0,0 @@
1
- #+TITLE: Freeform
2
- #+AUTHOR:
3
- #+EMAIL: bdewey@gmail.com
4
- #+DATE: 2009-12-20 Sun
5
- #+DESCRIPTION:
6
- #+KEYWORDS:
7
- #+LANGUAGE: en
8
- #+OPTIONS: H:3 num:t toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t
9
- #+OPTIONS: TeX:t LaTeX:nil skip:nil d:nil todo:t pri:nil tags:not-in-toc
10
- #+INFOJS_OPT: view:nil toc:nil ltoc:t mouse:underline buttons:0 path:http://orgmode.org/org-info.js
11
- #+EXPORT_SELECT_TAGS: export
12
- #+EXPORT_EXCLUDE_TAGS: noexport
13
- #+LINK_UP:
14
- #+LINK_HOME:
15
- Freeform
16
-
17
- This is my todo list, research file, and log record from working on
18
- the Freeform project.
19
-
20
- * Future ideas :someday:
21
- - Add *posts*
22
- - Enforce uniqueness of url_token
23
- - Add FeedSync support
24
- - Auto-recognize URLs
25
- - Edit in place
26
- - Import/export of content. I want it to be safe to store real content on the site.
27
- - Page reordering.
28
- - AtomPub support.
29
- - Organization:
30
- - Move pages around
31
- - Add tags and navigation by tags
32
- - Add a breadcrumb bar
33
-
34
- * TODO Add versioning support :current:feature:
35
-
36
- ** DONE UI rough-in
37
- CLOSED: [2009-11-26 Thu]
38
-
39
- ** DONE Author logging
40
- CLOSED: [2009-11-27 Fri]
41
-
42
- ** DONE Version table and model updates
43
- CLOSED: [2009-11-28 Sat 22:40]
44
- CLOCK: [2009-11-28 Sat 21:35]--[2009-11-28 Sat 22:40] => 1:05
45
- CLOCK: [2009-11-28 Sat 21:01]--[2009-11-28 Sat 21:25] => 0:24
46
- CLOCK: [2009-11-28 Sat 19:46]--[2009-11-28 Sat 20:54] => 1:08
47
- CLOCK: [2009-11-28 Sat 14:38]--[2009-11-28 Sat 15:08] => 0:30
48
- CLOCK: [2009-11-28 Sat 13:21]--[2009-11-28 Sat 14:37] => 1:16
49
-
50
- OK, my current thinking is to have each idea have many Changes. A
51
- change has many change records. A change record is a list of
52
- specific attributes that change, and includes the old and the new
53
- values. I'll use callbacks on the Idea model to maintain the
54
- changes.
55
-
56
-
57
- *** DONE Create version method
58
- CLOSED: [2009-11-28 Sat 22:40]
59
-
60
- *** DONE Make current method
61
- CLOSED: [2009-11-28 Sat 22:40]
62
-
63
- ** Update pages controller
64
-
65
- *** DONE Show versions
66
- CLOSED: [2009-11-30 Mon 00:34]
67
- CLOCK: [2009-11-29 Sun 21:27]--[2009-11-29 Sun 21:54] => 0:27
68
- CLOCK: [2009-11-29 Sun 15:40]--[2009-11-29 Sun 15:44] => 0:04
69
- CLOCK: [2009-11-28 Sat 22:44]--[2009-11-28 Sat 23:50] => 1:06
70
-
71
- I'm now at the point where I *list* versions, but I can't show
72
- them.
73
-
74
- - [X] I currently suspect that I broke my version recovery code
75
- when I switched the order of the idea_changes. I need to
76
- investigate why nothing's failing in the tests; I expected
77
- failures. Possible addition to test: start looking at those
78
- version numbers.
79
-
80
- OK, here's what was going on: In the test, you need to
81
- reload the idea_changes array from the database to get the
82
- database sort order. I also make sure I do this inside the
83
- Idea methods.
84
-
85
- **** DONE Write a test for Idea::attributes_for_change
86
- CLOSED: [2009-11-29 Sun 23:59]
87
- CLOCK: [2009-11-29 Sun 23:47]--[2009-11-29 Sun 23:58] => 0:11
88
- CLOCK: [2009-11-29 Sun 22:02]--[2009-11-29 Sun 23:42] => 1:40
89
- CLOCK: [2009-11-29 Sun 21:54]--[2009-11-29 Sun 21:56] => 0:02
90
-
91
- *** DONE Write integration tests that cover versions.
92
- CLOSED: [2009-12-11 Fri 23:25]
93
- CLOCK: [2009-12-11 Fri 20:27]--[2009-12-11 Fri 23:25] => 2:58
94
-
95
- *** DONE Recover versions
96
- CLOSED: [2009-12-12 Sat 22:09]
97
- CLOCK: [2009-12-12 Sat 21:02]--[2009-12-12 Sat 22:09] => 1:07
98
- CLOCK: [2009-12-12 Sat 20:13]--[2009-12-12 Sat 21:00] => 0:47
99
-
100
- *** DONE Move to recycle bin
101
- CLOSED: [2009-12-12 Sat 22:59]
102
- CLOCK: [2009-12-12 Sat 22:23]--[2009-12-12 Sat 22:59] => 0:36
103
-
104
- Note I'm avoiding logging delete operations because I'm presuming
105
- there will be a recycle bin, and therefore the *pages* controller
106
- will never actually delete files. At some point, when I want to
107
- support full FeedSync, I'll need to tackle this.
108
-
109
- The other timebomb: I don't know how well my logging scheme will
110
- work when pages move. I don't yet know if I will address this in
111
- the current sprint.
@@ -1,335 +0,0 @@
1
- #+TITLE: Introduction to Hyper-V Pre-Planning and Planning
2
- #+AUTHOR: Brian Dewey
3
- #+EMAIL: bdewey@microsoft.com
4
- #+DATE: December 9, 2009
5
- #+DESCRIPTION:
6
- #+KEYWORDS:
7
- #+LANGUAGE: en
8
- #+OPTIONS: H:3 toc:t \n:nil @:t ::t |:t ^:t -:t f:t *:t <:nil
9
- #+OPTIONS: TeX:t LaTeX:nil skip:nil d:nil todo:nil pri:nil tags:nil
10
- #+INFOJS_OPT: view:nil toc:nil ltoc:t mouse:underline buttons:0 path:http://orgmode.org/org-info.js
11
- #+EXPORT_SELECT_TAGS: export
12
- #+EXPORT_EXCLUDE_TAGS: noexport
13
- #+LINK_UP:
14
- #+LINK_HOME:
15
-
16
- * DONE Introduction
17
- CLOSED: [2009-12-09 Wed 15:18]
18
- CLOCK: [2009-12-09 Wed 15:00]--[2009-12-09 Wed 15:18] => 0:18
19
- CLOCK: [2009-12-09 Wed 10:02]--[2009-12-09 Wed 10:14] => 0:12
20
-
21
- The pre-planning activities for Hyper-V proceeded in three
22
- phases. In the first phase, we identified and wrote down a set of
23
- /business value propositions./ These are things we could pitch to
24
- customers as new value they would get from using Windows 8. To wrap
25
- up phase one, we worked with Mike Neil's team in Windows Server to
26
- rank the business value propositions. This step ensured that COSD
27
- and Windows Server operated from a common, agreed-upon set of
28
- priorities.
29
-
30
- For the second phase of pre-planning, we brainstormed all of the
31
- features we would need to implement to deliver on the value
32
- propositions from phase one. We captured a short description of each
33
- potential feature in a one-page spec.
34
-
35
- In the final phase of pre-planning, the dev team estimated how much
36
- dev effort would be required to implement each feature.
37
-
38
- By the numbers, our pre-planning work generated:
39
-
40
- - 19 different value propositions
41
-
42
- - 159 one-page specs
43
-
44
- - A 770-line spreadsheet containing dev estimates
45
-
46
- - 4.5 times the amount of dev work than we can tackle in a single release
47
-
48
- Moving from pre-planning to planning, our objective has been to
49
- understand and to shape overall Windows priorities so we can pick
50
- the /right/ 20% of work to commit to for Windows 8.
51
-
52
- This document gives an overview of the different pre-planning
53
- activities we did. It provides pointers to the pre-planning
54
- artefacts we produced and shows how we've been able to map our
55
- pre-planning work into planning.
56
-
57
- * Business Value Propositions
58
- CLOCK: [2009-12-07 Mon 09:09]--[2009-12-07 Mon 09:50] => 0:41
59
- CLOSED: [2009-12-01 Tue 10:52]
60
-
61
- One of the first pre-planning activities we did in Hyper-V was
62
- define a set of /business value propositions/ (BVPs). A business value
63
- proposition is an end-to-end hook that can convince a customer that
64
- Windows 8 is worth buying.
65
-
66
- Our BVPs are stored in the [[http://windows/hyper-v/initiatives/Value%20Propositions/Forms/AllItems.aspx][Hyper-V Portal]].
67
-
68
- ** Anatomy of a BVP
69
-
70
- Each BVP followed a simple, one-page template with the following
71
- parts:
72
-
73
- - Customer Summary
74
- - Storyboard
75
- - Requirements
76
- - Partner teams
77
-
78
- The following sections walk through each section and give an
79
- example from one of our BVPs, [[http://windows/hyper-v/initiatives/Value Propositions/DynamicDatacenter-ValueProp.docx][Resource-Smart Virtualization
80
- Infrastructure]] (also called /Dynamic Datacenter/).
81
-
82
-
83
- *** Customer Summary
84
-
85
- The /customer summary/ section is a one-sentence description of
86
- the customer value proposition, written from the customer's point
87
- of view. Each customer summary starts with the phrase, /I want.../
88
- The purpose of this section is to make sure we can give a concise
89
- description of what we expect the customer to accomplish.
90
-
91
- #+BEGIN_QUOTE
92
- /Example:/
93
-
94
- I want to add or remove computing resources to company owned
95
- virtualization infrastructure automatically, on-demand in
96
- response to rapidly changing business needs without any loss of
97
- business availability.
98
- #+END_QUOTE
99
-
100
- *** Storyboard
101
-
102
- To help people understand the customer scenario, the /storyboard/
103
- section walks through the steps the customer would take to get the
104
- new value from Windows 8.
105
-
106
- #+BEGIN_QUOTE
107
- /Example:/
108
-
109
- Comsco warehouse IT provides access to multitudes of different
110
- workloads including database servers, LOB applications, and
111
- homegrown three-tier distributed applications spread across two
112
- sites. Tim, administrator at Comsco IT, wants to see VM life cycle
113
- management (create, deploy, service, move and destroy) utilizing
114
- their existing tools and want it to be more efficient process than
115
- managing physical servers. Tim wants Microsoft software to
116
- automatically create new VM on server from a pool of physical
117
- servers and deploy workload in the VM when combined criteria of
118
- load balancing and resource utilization he defined are met. While
119
- Tim will continue to monitor real-time usage and Joe, who works in
120
- CIO office, wants historical trending of resource utilization of
121
- CPU, memory, power, storage, network bandwidth, storage bandwidth
122
- and backup bandwidth for selected VMs and workloads across all the
123
- servers. Based on historical trend analysis, Tim receives business
124
- logic requirements from the office of CIO and he defines per VM
125
- multi dimensional policy in Microsoft software to automatically
126
- control resource usage allocation, resource prioritization and
127
- resource move for above resource types. Tim also wants to service
128
- storage hardware without any downtime to running workloads. Tim
129
- wants MS software to freely move workloads between his primary
130
- site and across the town secondary site as needed without any
131
- downtime.
132
- #+END_QUOTE
133
-
134
- *** Requirements
135
-
136
- This section captures the core requirements for delivering the
137
- customer value. Knowing we would not be able to do everything, we
138
- categorized requirements into those needed for delivering good
139
- value, a better value, and best value. To minimize the
140
- randomization that could come from the bucketing, we identified
141
- the customers who would be satisfied by a given level of value.
142
-
143
- #+BEGIN_QUOTE
144
-
145
- /Example:/
146
-
147
- | Target Level | Customer | Example Requirements |
148
- |--------------+-----------------------------------------+-----------------------------------------------|
149
- | Good | Large/medium enterprises | Storage migration with zero business downtime |
150
- | Better | Early adopters at the Dyanmic I/O model | VM migration for load balancing |
151
- | Best | Hosters | Chargeback infrastructure |
152
-
153
- #+END_QUOTE
154
-
155
-
156
-
157
-
158
- *** Partner teams
159
-
160
- Because BVPs describe end-to-end value, none can be delivered just
161
- from the Hyper-V team. This section notes the partner teams we
162
- would need to reach out to.
163
-
164
- #+BEGIN_QUOTE
165
- /Example:/
166
-
167
- SCVMM, Failover clustering, Kernel, Intel & AMD
168
- #+END_QUOTE
169
-
170
- ** BVP Ranking
171
-
172
- Working with Mike Neil's team, the Hyper-V trio and PM leads ranked
173
- the BVPs based on the information we'd gathered through CFD
174
- sessions and on the importance of competing with VMWare. The
175
- consensus opinion is stored in a spreadsheet [[http://windows/hyper-v/initiatives/Value Propositions/ValueProposition-BucketTemplate-Master.xlsx][here]].
176
-
177
- For each BVP, we also identified the target value level -- would we
178
- aim for good value, better value, or best value?
179
-
180
- Here's our ranked BVP list.
181
-
182
- | Value Proposition | Customer Statement | Target Bucket |
183
- |----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------|
184
- | Resource-Smart Virtualization Infrastructure | I want to add or remove computing resources to company owned virtualization infrastructure automatically, on-demand in response to rapidly changing business needs without any loss of business availability. | Best |
185
- | Server High Availability | I want to ensure that my server applications are highly available. | Better |
186
- | Server Disaster Recovery | I want to ensure my business can quickly resume operations in the event of a disaster. | Better |
187
- | Platform Extensibility | I want a rich ecosystem so I'm not locked into a single vendor for storage, networking, etc. | Better |
188
- | Hosting | I need to be able to deploy thousands of physical servers into one or more farms dedicated for hosting. Provisioning of virtual machines must integrate fully into my back end network topology. Virtual machines must have strong network isolation. I must be able to monitor, change, charge for and throttle usage dynamically. I must be able to move virtual machines to another server in my farm with little or no downtime. | Better |
189
- | Scale Up | I want to get the maximum utilization from my hardware investment. | Better |
190
- | VDI | I want to control cost by deploying thin desktops and letting employees connect to a completely virtualized desktop. | Better |
191
- | Cloud Integration | I want to be able to dynamically enable movement of workloads between on premise and off premise without changing the operational or application model. | Better |
192
- | Security | I want to enhance the security of my system by making it more difficult for malicious programs to attack my operating system core. | Good |
193
- | Deployment | I want to increase efficiency in managing my datacenter & desktop infrastructure. | Better |
194
- | Green IT | I want to increase energy efficiency in my datacenter infrastructure. | Good |
195
- | Server test/dev | I want to quickly and easily create and test server applications. | Good |
196
- | Appliance Development Model | I want to reduce development costs by shipping a server application in a pre-configured VM. | Good |
197
- | Application Compatibility | I want users to have access to old applications even when I upgrade their desktop operating systems. | Cut |
198
- | Client test/dev | I want to quickly and easily create and test desktop applications | Cut |
199
- | Integration Testing | I want to quickly and easily test new applications and updates before deploying them | Cut |
200
- | Employee-owned hardware | I want to let employees use their own hardware to run corporate applications and connect to the corporate network in a secure way. | Cut |
201
-
202
-
203
- * DONE One-Page Specs
204
- SCHEDULED: <2009-12-07 Mon> CLOSED: [2009-12-07 Mon 16:39]
205
- CLOCK: [2009-12-07 Mon 16:26]--[2009-12-07 Mon 16:39] => 0:13
206
-
207
- Armed with the prioritized list of customer value propositions to
208
- consider for Windows 8, we started work on the next level of detail:
209
- What features would we need to implement to deliver the value
210
- proposition? Two main tasks refined our thinking in this
211
- area. First, we brainstormed all of the features required to deliver
212
- the target level of value in the BVP. Then, to reduce ambiguity, we
213
- wrote a /one page spec/ for each feature. What exactly does
214
- /cross-cluster live migration/ mean? The one-page spec tells
215
- you. The goal of the one page spec was to capture just enough
216
- information that a developer could estimate how expensive the
217
- feature would be to implement. Our one-page spec library is [[http://windows/hyper-v/w8/Specs/Forms/AllItems.aspx][here]].
218
-
219
- #+BEGIN_QUOTE
220
-
221
- /Example: Cross-cluster live migration/
222
-
223
- Key customer scenario: An enterprise is building large scale Hyper-V
224
- based infrastructure to run vast majority of server workloads with
225
- High-Availability is a requirement. Customer builds multiple
226
- clusters for one or more of the following business needs:
227
-
228
- # NOTE, for formatting reasons, don't fill the following.
229
-
230
- - To keep cluster size to be manageable based on preconceived perception of node failure time is linearly proportional to cluster size,
231
- - Due to increased business need they need to build new cluster once maximum supported cluster size is reached,
232
- - There are departmental clusters and temporarily there is a need to use extra capacity of a cluster when one cluster experiences capacity peaks.
233
-
234
- Customer would like ability to live migrate, quick migrate or move
235
- VMs from one cluster to other cluster for above mentioned needs.
236
-
237
- The goal is to provide more flexibility in VM mobility space without
238
- cluster as a boundary. Hyper-V needs to perform two operations in a
239
- transaction:
240
-
241
- - Live migrate VM from one cluster node to destination cluster node.
242
- - Live migrate VM’s storage from one cluster’s shared storage to another cluster’s shared storage.
243
-
244
-
245
- If any of the above fails, VM must continue to run on the source
246
- node.
247
-
248
- A user should be able to orchestrate live migration through Hyper-V
249
- manager, Failover cluster UI, WMI or Powershell.
250
-
251
- Live migration should perform necessary checks to ensure live
252
- migration requirements are met. Some of the examples in addition to
253
- other migration checks are, performing estimation of time to migrate
254
- VM, access to the VM storage and same IP network on destination to
255
- ensure VM will be able to migrate successfully without dropping a
256
- TCP connection. If Hyper-V cannot reliably guaranty retaining TCP
257
- connection live migration should fail and must ensure VM continues
258
- to run on source node.
259
-
260
- Administrator should be able to set cluster wide, Hyper-V wide or
261
- per VM policies around allowing or denying live migrating one or
262
- more VMs from one cluster to any particular cluster or any other
263
- cluster.
264
-
265
- User experience and workflow of orchestrating live migration within
266
- a cluster or across the cluster site should be the same.
267
-
268
-
269
- #+END_QUOTE
270
- * DONE Feature SWAGS
271
- CLOSED: [2009-12-09 Wed 08:57]
272
- CLOCK: [2009-12-09 Wed 08:46]--[2009-12-09 Wed 08:57] => 0:11
273
-
274
- SCHEDULED: <2009-12-07 Mon>
275
-
276
- Using the one-page specs, the dev team estimated the dev time it
277
- would take to implement each feature identified to deliver on the
278
- business value propositions. The estimates are kept in this
279
- [[http://windows/hyper-v/w8/BVP/BVP%20Feature%20Expansion.xlsx][spreadsheet]]. The estimaes are fine-grained. To stretch an analogy,
280
- instead of t-shirt sizes, we've got estimates of the yards of thread
281
- required to make the t-shirt. For each feature we identified in the
282
- BVP process, the dev team estimated how to break apart the work and
283
- estimated the number of weeks of senior, mid-level, and junior dev
284
- time it would take to implement the feature.
285
-
286
- The key conclusion from the exercise: Our eyes are *way* bigger than
287
- our wallets. In the BVP process, we identified about five times as
288
- much work as we will be able to deliver in Windows 8.
289
-
290
-
291
- * DONE Moving From Pre-Planning to Planning
292
- CLOSED: [2009-12-09 Wed 15:20]
293
- CLOCK: [2009-12-09 Wed 09:56]--[2009-12-09 Wed 10:01] => 0:05
294
- CLOCK: [2009-12-09 Wed 09:00]--[2009-12-09 Wed 09:01] => 0:01
295
-
296
- Pre-planning identified a significant amount of work we /could/ do
297
- in Windows 8. Our challenge in planning has been to identify the 20%
298
- of the work on our list that best aligns with the overall Windows
299
- vision, so we can commit to this as work we /will/ do for Windows 8.
300
-
301
- The business value propositions we defined in pre-planning lined up
302
- well with planning themes & subthemes. As we moved from pre-planning
303
- to planning, we narrowed down the list of BVPs that we focused on,
304
- and we worked through the established theme & subtheme
305
- planning. Through the Windows planning process, we have been able to
306
- work with our partner teams to find alignment on priorities.
307
-
308
- The following table shows how we mapped our BVPs to planning themes
309
- for the planning process.
310
-
311
- | BVP | Planning Theme (Subtheme) |
312
- |--------------------------------------------------------------------------+----------------------------------------------------------------------------------------|
313
- | Resource-Smart Virtualization Infrastructure, Hosting, Cloud Integration | Infrastructure Scaled for SMB, Enterprise, & Service Providers (Hosted Private Clouds) |
314
- | Server High Availability | Continuous Availability (Contiuous Availability) |
315
- | Server Disaster Recovery | Continuous Availability (Business Continuity) |
316
- | Platform Extensibility | Big Bet: Scale for Datacenters |
317
- | Scale Up, Green IT | Infrastructure Scaled... (Leverage the Hardware Ecosystem) |
318
- | VDI | Work Anywhere (Centralized Desktops) |
319
- | Deployment | Management (Solution Deployment) |
320
- | Server test/dev, Client test/dev | Streamline the developer experience *or* Desktop for enthusiasts |
321
- | Appliance Development Model | Infrastructure Scaled... (Virtual Appliance for Partners) |
322
-
323
-
324
-
325
-
326
- * TODO Conclusion
327
-
328
- Because of our pre-planning work, we've had good alignment between
329
- COSD (and now Windows Core) and Windows Server on overall Hyper-V
330
- priorities and directions. The work on estimating feature costs has
331
- enabled us to set realistic expectations on the scope of work we can
332
- deliver in Windows 8. Taken together, our pre-planning work should
333
- have made Hyper-V a more predictable and transparent partner team to
334
- work with in the planning process.
335
-