org-ruby 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.bnsignore +18 -0
- data/History.txt +24 -0
- data/README.txt +66 -0
- data/Rakefile +22 -0
- data/TAGS +128 -0
- data/bin/org-ruby +40 -0
- data/lib/org-ruby.rb +48 -0
- data/lib/org-ruby/headline.rb +75 -0
- data/lib/org-ruby/html_output_buffer.rb +80 -0
- data/lib/org-ruby/line.rb +172 -0
- data/lib/org-ruby/output_buffer.rb +154 -0
- data/lib/org-ruby/parser.rb +72 -0
- data/lib/org-ruby/regexp_helper.rb +156 -0
- data/lib/org-ruby/textile_output_buffer.rb +67 -0
- data/spec/data/freeform.org +111 -0
- data/spec/data/hyp-planning.org +335 -0
- data/spec/data/remember.org +53 -0
- data/spec/headline_spec.rb +55 -0
- data/spec/html_examples/block_code.html +29 -0
- data/spec/html_examples/block_code.org +35 -0
- data/spec/html_examples/blockquote.html +7 -0
- data/spec/html_examples/blockquote.org +13 -0
- data/spec/html_examples/inline-formatting.html +10 -0
- data/spec/html_examples/inline-formatting.org +17 -0
- data/spec/html_examples/lists.html +19 -0
- data/spec/html_examples/lists.org +36 -0
- data/spec/html_examples/tables.html +20 -0
- data/spec/html_examples/tables.org +26 -0
- data/spec/html_examples/text.html +2 -0
- data/spec/html_examples/text.org +16 -0
- data/spec/line_spec.rb +89 -0
- data/spec/parser_spec.rb +86 -0
- data/spec/regexp_helper_spec.rb +57 -0
- data/spec/spec_helper.rb +20 -0
- data/spec/textile_examples/block_code.org +35 -0
- data/spec/textile_examples/block_code.textile +29 -0
- data/spec/textile_examples/blockquote.org +13 -0
- data/spec/textile_examples/blockquote.textile +11 -0
- data/spec/textile_examples/keywords.org +13 -0
- data/spec/textile_examples/keywords.textile +11 -0
- data/spec/textile_examples/links.org +11 -0
- data/spec/textile_examples/links.textile +10 -0
- data/spec/textile_examples/lists.org +36 -0
- data/spec/textile_examples/lists.textile +20 -0
- data/spec/textile_examples/single-space-plain-list.org +13 -0
- data/spec/textile_examples/single-space-plain-list.textile +10 -0
- data/spec/textile_examples/tables.org +26 -0
- data/spec/textile_examples/tables.textile +23 -0
- data/spec/textile_output_buffer_spec.rb +21 -0
- data/test/test_orgmode_parser.rb +0 -0
- metadata +120 -0
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'stringio'
|
2
|
+
|
3
|
+
module Orgmode
|
4
|
+
|
5
|
+
class TextileOutputBuffer < OutputBuffer
|
6
|
+
|
7
|
+
def initialize(output)
|
8
|
+
super(output)
|
9
|
+
@add_paragraph = false
|
10
|
+
end
|
11
|
+
|
12
|
+
def push_mode(mode)
|
13
|
+
super(mode)
|
14
|
+
@output << "bc.. " if mode == :code
|
15
|
+
end
|
16
|
+
|
17
|
+
def pop_mode(mode = nil)
|
18
|
+
m = super(mode)
|
19
|
+
@add_paragraph = (m == :code)
|
20
|
+
m
|
21
|
+
end
|
22
|
+
|
23
|
+
# Maps org markup to textile markup.
|
24
|
+
TextileMap = {
|
25
|
+
"*" => "*",
|
26
|
+
"/" => "_",
|
27
|
+
"_" => "_",
|
28
|
+
"=" => "@",
|
29
|
+
"~" => "@",
|
30
|
+
"+" => "+"
|
31
|
+
}
|
32
|
+
|
33
|
+
# Handles inline formatting for textile.
|
34
|
+
def inline_formatting(input)
|
35
|
+
input = @re_help.rewrite_emphasis(input) do |marker, body|
|
36
|
+
m = TextileMap[marker]
|
37
|
+
"#{m}#{body}#{m}"
|
38
|
+
end
|
39
|
+
input = @re_help.rewrite_links(input) do |link, text|
|
40
|
+
text ||= link
|
41
|
+
link = link.gsub(/ /, "%20")
|
42
|
+
"\"#{text}\":#{link}"
|
43
|
+
end
|
44
|
+
input
|
45
|
+
end
|
46
|
+
|
47
|
+
# Flushes the current buffer
|
48
|
+
def flush!
|
49
|
+
@logger.debug "FLUSH ==========> #{@output_type}"
|
50
|
+
if (@output_type == :blank) then
|
51
|
+
@output << "\n"
|
52
|
+
elsif (@buffer.length > 0) then
|
53
|
+
if @add_paragraph then
|
54
|
+
@output << "p. " if @output_type == :paragraph
|
55
|
+
@add_paragraph = false
|
56
|
+
end
|
57
|
+
@output << "bq. " if current_mode == :blockquote
|
58
|
+
@output << "#" * @list_indent_stack.length << " " if @output_type == :ordered_list
|
59
|
+
@output << "*" * @list_indent_stack.length << " " if @output_type == :unordered_list
|
60
|
+
@output << inline_formatting(@buffer) << "\n"
|
61
|
+
end
|
62
|
+
@buffer = ""
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
end # class TextileOutputBuffer
|
67
|
+
end # module Orgmode
|
@@ -0,0 +1,111 @@
|
|
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.
|
@@ -0,0 +1,335 @@
|
|
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
|
+
|