<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="http://softblue.wetpaint.com/xsl/rss2html.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://softblue.wetpaint.com/scripts/wpcss/wiki/softblue/skin/highsociety/rss" type="text/css" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Software Blueprints - Recently Updated Pages</title><link>http://softblue.wetpaint.com/pageSearch/updated</link><description>Recently Updated Pages on http://softblue.wetpaint.com</description><language>en-us</language><webMaster>info@wetpaint.com</webMaster><pubDate>Mon, 04 Aug 2008 17:14:52 CDT</pubDate><lastBuildDate>Mon, 04 Aug 2008 17:14:52 CDT</lastBuildDate><generator>wetpaint.com</generator><ttl>60</ttl><image><title>Software Blueprints</title><url>http://www.wetpaint.com/img/logo.gif</url><link>http://softblue.wetpaint.com</link><description>The search for a blueprint format suitable in Computer Science</description></image><item><title>Alternative Description</title><link>http://softblue.wetpaint.com/page/Alternative+Description</link><author>phomer</author><guid isPermaLink="false">http://softblue.wetpaint.com/page/Alternative+Description</guid><comments>rambling</comments><pubDate>Mon, 04 Aug 2008 17:14:52 CDT</pubDate><description>An alternative description of the &amp;quot;Pipeline of Transformations&amp;quot; idea, is that it is just the minimalist independent set of &amp;quot;predicate transformers&amp;quot; as described by Harlan Mills (and probably Dijkstra). In Mills&amp;#39; 1977 paper on Software Engineering, he talks about how Dijkstra, as part of structured programming, provides a mathematical basis for modelling software. It comes down to a model: P {S} Q, where P is a pre-condition, S is the sequential action, and Q is the post-condition. Step-wise refinement can be used to break down S. &lt;br&gt;&lt;br&gt;If one looks at P, as a fixed state of data, ie a set of data-structures, static at the initial time, and Q as another static snapshot, then the &amp;quot;predicate transformers&amp;quot; in the model are just the steps necessary to map P -&amp;gt; Q. Mills states that this can be provable, but in the Pipeline idea, the whole essence of the idea is to provide all of the tiny &amp;quot;transformations&amp;quot; independently and allow the computer itself to reassemble the flow. Thus the underlying idea matches the mathematical model. &lt;br&gt;&lt;br&gt;You want, as your Q a screen full of data about a specific user in a computer system, and a list of their last ten actions within that system. P is the preceding screen, and all we need now is the full set of transformers that clear the screen and replace it with the correct underlying data. The big S, then is composed of many many small S&amp;#39;s, each of which gets data from a specific source, formats it for presentation and then places in on the screen somewhere. The users name for instance may come directly from the data store, while if the user is active, the last ten actions come from an internal system cache. This things are formatted, then wrapped in pretty output formatting and positions as described initial in Q. &lt;br&gt;&lt;br&gt;The big difference, is that the computer itself, on seeing a request for Q, executed thousands and thousands of underlying predicate transformer primitives. It did this by calculating the path between Q and P. The path is more or less dynamic, but it deterministic. The text for the first name is grabbed from the data store, and then concatenated with the last name and placed at an X,Y position as requested in Q. The last action id is grabbed from the cache and formatted as a clean integer. The time-since is computed from the current time, and the action time, and then display at X, Y. &lt;br&gt;&lt;br&gt;All the developers have done is supplied lots of predicate transformers like:&lt;br&gt;&lt;br&gt;(Date current, Date action) -&amp;gt; (timeSinceOccured) {&lt;br&gt; return current - action;&lt;br&gt;}&lt;br&gt;&lt;br&gt;(Name userFirstName, Name userLastName) -&amp;gt; (userFullName) {&lt;br&gt; return userFirstName + &amp;#39; &amp;#39; + userLastName;&lt;br&gt;}&lt;br&gt;&lt;br&gt;(Name userFullName) -&amp;gt; (presentFullName) {&lt;br&gt; return &amp;quot;&amp;lt;b&amp;gt;&amp;quot; + MixedCase(userFullName) + &amp;quot;&amp;lt;/b&amp;gt;&amp;quot;;&lt;br&gt;}&lt;br&gt;&lt;br&gt;etc.&lt;br&gt;&lt;br&gt;Mostly if you think of each predicate as a simple one-liner that&amp;#39;s close enough. The smaller, more atomic the transformations the better the computer system will be able to optimized and parallelized the processing. Note, there are no &amp;quot;function names&amp;quot;, just a set of inputs, and an output. The software, searching for the correct output will come across a series of transformers, and choose the correct one (based on internal state?) to get the data (maybe it just chooses all of them? Heuristic model?) &lt;br&gt;&lt;br&gt;Toss in millions of transformations, and a pick a bunch of Qs, (screens) and the system will be &amp;#39;definition&amp;#39; do the right thing. The &amp;#39;proof&amp;#39; of correctness is built into the mechanics. Q is the correct Q by definition (of course that might not be the Q you meant :-) Intrinsically, proving programs to be perfect is meaningless because that doesn&amp;#39;t imply they are doing useful things, but certainly in this case, typos at the mid-level won&amp;#39;t exist any more. More interestingly, if the visual transformation of the data is wrong, it is fairly trivial to create a new transformation to fix it. Testing and deployment are simple and obvious. The system is stable by virtue of the fact that the assembling of the code is not really done by the programmers, but by the machine.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;hr size=&quot;1&quot;&gt;&lt;br/&gt;</description></item><item><title>Graphitext</title><link>http://softblue.wetpaint.com/page/Graphitext</link><author>phomer</author><guid isPermaLink="false">http://softblue.wetpaint.com/page/Graphitext</guid><pubDate>Fri, 25 Jul 2008 15:25:10 CDT</pubDate><description> 			A picture is worth a thousand words, yet text succumbs to the power of regular expressions and full text searching. In looking for a format for software blueprints it would be nice to use pictures, but text is also just as useful. So perhaps the only answer is to combine the two:&lt;br&gt;&lt;br&gt;If you twist your mind, you can see that text is really just a bunch of little pictures (glyhps) all placed in a big sequence. Each character in the font is a primitive, and it doesn&amp;#39;t overlap its fellows, but other than that it is just one big set of little images. &lt;br&gt;&lt;br&gt;&lt;br&gt;PRIMITIVE ELEMENTS&lt;br&gt;&lt;br&gt;So what we want, is a set of primitives (like a font), that are arbitraty in size, and overlap each other. Position information is trickier, but where characters occur in an array (an implicit ordering), these primitives will have couple of navigation mechinisms: 1) a dynamically structured table (cells are all different sizes, based on their content). 2) explicity &amp;#39;graph&amp;#39; links between the elements (or not). 3) some storage order.&lt;br&gt;&lt;br&gt;#1 should be able to allow positional questions, such as what is left of X? #2 should group things together and allow specific traversal of the different groups. As well each primitive should have a name, and an instance_name (although it can be implicit). &lt;br&gt;&lt;br&gt;&lt;br&gt;NAVIGATION&lt;br&gt;&lt;br&gt;Then, the cell postion gives enough information for drawing the primitives, (and in the primitive set we know things like size, etc). The cell and graph positions along with some extensions should allow something &amp;#39;regular-expression-like&amp;#39; to be used to find specific patterns. Like fonts, the primitive sets are stored separately, from the graphitext files. The files can exist as images, or text, but their storage format should be text (display can be either). Any format like XML can be used, as the format is a listing of primitive instances with naming, and navigtional parameters. &lt;br&gt;&lt;br&gt;&lt;br&gt;SUMMATION&lt;br&gt;&lt;br&gt;The extensibility comes from being able to create abitrary primitive sets with any level of element decompostion. The sets could be just geometrical, like lines, circles, triangles, etc. They could be font&amp;#39;ish symbols, or they could be some mix. The sets themselves should be &amp;#39;formalized&amp;#39;, and locked into place, similar to handling known fonts (files should allow for primitive set embedding). &lt;br&gt;&lt;br&gt;&lt;br&gt;SIMPLIFED EXAMPLE:&lt;br&gt;&lt;br&gt;2 files, the first one is a primitive set for basic network topology, the other is a specific network.&lt;br&gt;&lt;br&gt;The first one is a listing of the elements, computers, routers, switches, cables, etc. For each primitive, there is a name, default information and a vector image. For example:&lt;br&gt;&lt;br&gt;NetworkElements.gpe&lt;br&gt;&lt;br&gt;&amp;lt;version value=1.0 /&amp;gt;&lt;br&gt;&amp;lt;primitive name=&amp;#39;computer&amp;#39;&amp;gt;&lt;br&gt; &amp;lt;width&amp;gt;40&amp;lt;/width&amp;gt;&lt;br&gt; &amp;lt;/height&amp;gt;80&amp;lt;/height&amp;gt;&lt;br&gt; &amp;lt;vector&amp;gt;&lt;br&gt;  &amp;lt;line x1=0 y1=0 x2=80 y2=20 /&amp;gt;&lt;br&gt;     (enough lines and things to make up a pretty picture of a computer, based on a 40x80 size)&lt;br&gt; &amp;lt;/vector&amp;gt;&lt;br&gt; &amp;lt;connect name=nextwork type=simple /&amp;gt;&lt;br&gt; &amp;lt;connect name=user type=simple /&amp;gt;&lt;br&gt;  ....&lt;br&gt;&amp;lt;/primitive&amp;gt;&lt;br&gt;&amp;lt;primitive name=&amp;#39;network cable&amp;#39;&amp;gt;&lt;br&gt;  ....&lt;br&gt;&amp;lt;/primitive&amp;gt;&lt;br&gt;&lt;br&gt;The for a specific instance, mynet.gsi&lt;br&gt;&lt;br&gt;&amp;lt;instance&amp;gt;&lt;br&gt; &amp;lt;primitive set=&amp;#39;NetworkElements.gpe version=1.0 /&amp;gt;&lt;br&gt; &amp;lt;computer name=&amp;#39;mymachine&amp;#39; /&amp;gt;&lt;br&gt;  &amp;lt;width value=28 /&amp;gt;&lt;br&gt;  &amp;lt;height value=47 /&amp;gt;&lt;br&gt;  &amp;lt;position x=12 y=23 /&amp;gt;&lt;br&gt; &amp;lt;/computer&amp;gt;&lt;br&gt; &amp;lt;computer name=&amp;#39;anothermachine&amp;#39; /&amp;gt;&lt;br&gt;   &amp;lt;width value=28 /&amp;gt;&lt;br&gt;   &amp;lt;height value=47 /&amp;gt;&lt;br&gt;   &amp;lt;position x=32 y=23 /&amp;gt;&lt;br&gt;  &amp;lt;/computer&amp;gt;&lt;br&gt; &amp;lt;router name=&amp;#39;local&amp;#39;&amp;gt;&lt;br&gt;  &amp;lt;position x=45 y=23/&amp;gt;&lt;br&gt; &amp;lt;/router&amp;gt;&lt;br&gt; &amp;lt;cable&amp;gt;&lt;br&gt;  &amp;lt;from&amp;gt;mymachine&amp;lt;/from&amp;gt;&lt;br&gt;  &amp;lt;to&amp;gt;local&amp;lt;/to&amp;gt;&lt;br&gt; &amp;lt;/cable&amp;gt;&lt;br&gt;&amp;lt;/instance&amp;gt;&lt;br&gt;&lt;br&gt;which if diplayed would show a pretty little picture of a small network. Also, one could lauch a grep-like client:&lt;br&gt;&lt;br&gt;graphitext --file mynet.gsi--path .&lt;br&gt;&lt;br&gt;&amp;gt; find {computer}*&lt;br&gt;&lt;br&gt; mymachine&lt;br&gt;  anothermachine&lt;br&gt;&lt;br&gt;&amp;gt; find *{connect}{local}&lt;br&gt;&lt;br&gt;  anothermachine&lt;br&gt;  mymachine&lt;br&gt;&lt;br&gt;&amp;gt; find {anothermachine}[next]&lt;br&gt;&lt;br&gt; local&lt;br&gt;&lt;br&gt;where the primitive tokens, the token names, instance names were all accessabile in a name space (segmented properly). Any unique extension operators (I used [next] for positioning) where also available in the syntax. In that way we entend out Regular expressions (which are really charset symbol indicators and operators) into a large family of applicable syntax that more or less does the same thing (the set of names is infinite, the set of operators is finite). &lt;br&gt;&lt;br&gt;I used a very simple example, only because I want to show that all of the main elements in the design are &amp;#39;extensions&amp;#39; on existing concepts, except for the positioning mechnisms. The natural ording one is easy, things are in the order they are definined in. The graph theory one is also fairly easy, there is a link between any two elements, if and only if the link is explicity, other wise it is not there (although I think primitive sets can set up &amp;#39;default&amp;#39; explicit links, just cause life would be ugly without them). The relative positing stuff is funny:&lt;br&gt;&lt;br&gt;&lt;br&gt;RELATIVE POSITIONING GRID&lt;br&gt;&lt;br&gt;1. generate a matrix with a 1x1 square for each square in the grid that covers the total size of the diagram. for the above example assume 100x100 works (can be larger than nessary, but not smaller). use a text layout grid (not a math one) starting with 0,0 in the top,left ,and 100,100 in the bottom right&lt;br&gt;&lt;br&gt;2. Layout all of the elements into the grid, using their position for the top,left location, and then span their size across rows and columns (as if working in HTML).&lt;br&gt;&lt;br&gt;3. Collapse all ununsed cells both vertically and horizontally into larger cells. Any row without an element start or end can be removed, the same with any column. This gives us an arbitrary grid with erratic, but relative cell sizes. &lt;br&gt;&lt;br&gt;4. Used the grid to answer questions like: on top of, to the left of, below, etc. Note that each thing in this table occupies one or more cells, and that the number of cells it occupies is relative to what is around it, not its size. &lt;br&gt;&lt;br&gt;(ok, strickly speaking, I am not sure if the grid is necessary to answer the questions, but you have to admit its a fun algorithm. I used it long time ago to layout complex tables in HTML, but it was constructed in that case in a top down fashion by splitting the current space into an arbitrary underlying grid.)&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;hr size=&quot;1&quot;&gt;&lt;br/&gt;</description></item><item><title>Vi</title><link>http://softblue.wetpaint.com/page/Vi</link><author>phomer</author><guid isPermaLink="false">http://softblue.wetpaint.com/page/Vi</guid><pubDate>Fri, 18 Jul 2008 16:41:29 CDT</pubDate><description>- text editor&lt;br&gt;- state-driven interface (command mode, edit mode).&lt;br&gt;- all commands are a simple syntax: [range] item action (can&amp;#39;t remember, but its documented in a book somewhere)&lt;br&gt;- calls out to sub-editor (ex) via colon syntax for heavy lifting, calls out to shell as well.&lt;br&gt;- limited configuration (.exrc file?)&lt;br&gt;- single file editing (new knock-offs like vim are better at this)&lt;br&gt;- standard &amp;#39;gap buffer&amp;#39; editor internal structure (?)&lt;br&gt;-base editor spawned a large number of vi-like clones (vim, vile, etc.)&lt;br&gt;&lt;br&gt;&lt;hr size=&quot;1&quot;&gt;&lt;br/&gt;</description></item><item><title>Systems to Blueprint</title><link>http://softblue.wetpaint.com/page/Systems+to+Blueprint</link><author>JSiegrist</author><guid isPermaLink="false">http://softblue.wetpaint.com/page/Systems+to+Blueprint</guid><pubDate>Fri, 11 Jul 2008 00:49:19 CDT</pubDate><description> 			&lt;h2&gt;The following systems are suggested as good modelling candidates:&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Text Editor: vi, Emacs, pico, ed, TextMate, MS Word, OO Writer&lt;br&gt;&lt;/li&gt;&lt;li&gt;IDE: Eclipse, Netbeans, Visual Studio, IdeaJ&lt;br&gt;&lt;/li&gt;&lt;li&gt;Build Systems: Make, Ant, msbuild, SCons, Rake&lt;/li&gt;&lt;li&gt;Graphics Editor: Photoshop, Gimp, Illustrator, Scribus, Corel Draw&lt;/li&gt;&lt;li&gt;Spreadsheets: Excel, Visicalc, Lotus 1-2-3, OpenOffice Calc&lt;/li&gt;&lt;li&gt;Instant Messaging: AIM, Trillian, ICQ, GoogleTalk, any Jabber client&lt;/li&gt;&lt;li&gt;Email: Eudora, Outlook, Thunderbird, Pine, web-based mail&lt;/li&gt;&lt;li&gt;Web Browser: Mosaic, Firefox, Safari, IE, Opera&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;Because a wide range is available for each class of utility, how does one look past the features on the comparison checklists to determine what core attributes make up that type of system? One could do detailed analysis of features and find a common subset, or you could do some sort of blackbox analysis and start out with what the goals of the tool user and look for necessary components to meet the usage criteria.&lt;br&gt;&lt;br&gt;A basic model of any computer program starts with a diagram of: Input --&amp;gt; Process --&amp;gt; Output. Would this picture be suitable as a high level description for any software system? Or are there differences now when you start considering interactive GUI-driven systems?&lt;br&gt;&lt;hr size=&quot;1&quot;&gt;&lt;br/&gt;</description></item><item><title>Alternative ls description</title><link>http://softblue.wetpaint.com/page/Alternative+ls+description</link><author>JSiegrist</author><guid isPermaLink="false">http://softblue.wetpaint.com/page/Alternative+ls+description</guid><comments>Moved from: Experiments</comments><pubDate>Fri, 11 Jul 2008 00:31:29 CDT</pubDate><description>I attempted to describe the same ls command without resorting to copying the existing description posted. Could the minimal differences between these be reconciled together or are the descriptions close enough together that it is not necessary?&lt;br&gt; &lt;br&gt;  &lt;ul&gt;&lt;li&gt;User executes the command: &amp;#39;ls&amp;#39; + args&lt;/li&gt;&lt;li&gt;The shell parses the command.&lt;/li&gt;&lt;li&gt;The shell invokes some code, passing in any arguments and a file system path (either cwd or a user-specified argument).&lt;/li&gt;&lt;li&gt;The code queries data from the file system based on any applicable arguments.&lt;/li&gt;&lt;li&gt;The code calculates metadata from the returned file system data.&lt;/li&gt;&lt;li&gt;The code formats its results based on any applicable arguments.&lt;/li&gt;&lt;li&gt;The codereturns the formatted results for display.&lt;/li&gt;&lt;/ul&gt;  &lt;br&gt;&lt;br&gt;&lt;hr size=&quot;1&quot;&gt;&lt;br/&gt;</description></item><item><title>Common Blueprints</title><link>http://softblue.wetpaint.com/page/Common+Blueprints</link><author>phomer</author><guid isPermaLink="false">http://softblue.wetpaint.com/page/Common+Blueprints</guid><pubDate>Thu, 10 Jul 2008 22:32:09 CDT</pubDate><description>If we look at common systems, then deconstruct them into their components, we should be able to get some fairly generalized blueprints. Following with the spartan programming philosophy, we want to create spartan blueprints -- only the absolute minimum details necessary to insure that the CORE system works as expected. Thus blueprints for an programming editor should allow for vi or emacs, for an IDE should allow for Eclipse or Netbeans, for build mechanics should allow for &amp;#39;make&amp;#39; or &amp;#39;ant&amp;#39;, etc. &lt;br&gt;&lt;br&gt;The usage of the thing is independent from the specific technological implementation. The technology does restrict some of the degrees of freedom, but the software still exists abstractly as a solution to a specific set of problems. Our modern technologies just happen to be the only crude mechanisms we have at the moment for construction, but that does not alter the real-world nature of the problem, it is entirely independent of the computer.&lt;br&gt;&lt;hr size=&quot;1&quot;&gt;&lt;br/&gt;</description></item><item><title>Models</title><link>http://softblue.wetpaint.com/page/Models</link><author>phomer</author><guid isPermaLink="false">http://softblue.wetpaint.com/page/Models</guid><pubDate>Mon, 07 Jul 2008 17:24:54 CDT</pubDate><description>Various fun ways of looking at software beyond the standard DFA, NDFA, Turing Machine, Pushdown DFA, etc. appraoches.&lt;br&gt;&lt;hr size=&quot;1&quot;&gt;&lt;br/&gt;</description></item><item><title>Pipeline of Transformations</title><link>http://softblue.wetpaint.com/page/Pipeline+of+Transformations</link><author>phomer</author><guid isPermaLink="false">http://softblue.wetpaint.com/page/Pipeline+of+Transformations</guid><pubDate>Mon, 07 Jul 2008 17:23:48 CDT</pubDate><description> 			Another, alternative model of looking at computation is as a series of pipelines of transformations. In this perspective, any simple operator is just a transformation that takes a finite set of heavily typed elements, and provides a &amp;#39;single&amp;#39; mutually exclusive set of transformations on it. In that way, if you were to watch the data as it exists on various places on disks, it is picked off in pieces. Each piece goes through a separate pipeline of atomic transformations, only joining together when the transformation is not mutually exclusive.&lt;br&gt;&lt;br&gt;If the system is encoded as a huge collection of all of the usable, simple transformations, then the system itself, in knowing that it needed a specific type of data, could produce a map backwards to get the data it needs, from the data that is available. The system could then parallelize, and optimize any of the pipelines entirely on it&amp;#39;s own, without the need for human intelligence. The trick to making this work, is that the transformations, while simple must be exceptionally strongly typed.&lt;br&gt;&lt;br&gt;transformation(in,out): in -&amp;gt; out  &lt;br&gt;&lt;br&gt;Then in a sense, any datum is the outcome of some atomic operation on some discrete series of datum:&lt;br&gt;&lt;br&gt;datum &amp;lt;= T(data-structure)&lt;br&gt;&lt;br&gt;Which means to get the specific data needed to make a screen for example, for each &amp;#39;discrete&amp;#39; piece of information on that final screen, the computer could trace backwards, following the transformation dependencies to their roots. The data for the clock traces back to the some location in memory were the time is updated. The banner comes from a image stored on disk, the user&amp;#39;s name is from some virtual temporary data-store related to a running session, etc. Some small amount of data sources makes up all of the data bound together to form a screen in an application. &lt;br&gt;&lt;br&gt;Some precedence would exist for the computer to choose between alternative data-stores, and alternative pipe-lines. Once a pipe-line is created, it&amp;#39;s path can be cached to speed up performance for the next time through. &lt;br&gt;&lt;br&gt;The data is strongly-typed, yet the pipeline optimizer can apply &amp;#39;generalized&amp;#39; sections when there is nothing specific. So, T(int, int) -&amp;gt; int for an &amp;#39;add&amp;#39; operation, or T(bond price, cash flows, date, accrued interest) -&amp;gt; Yield for something more specific. The transformations are always the &amp;#39;smallest&amp;#39; possible algorithm that will complete the work (there will always be alternative optimizations, that can be switched by statistics), needing the &amp;#39;least&amp;#39; amount of data. &lt;br&gt;&lt;br&gt;In this sense, since everything is atomic, and it all interconnects, down to the specific typing of the data, a large number of systems can be meshed together into a great big sea of transformations, perhaps millions of them, optimized over time by letting the computer keep records about usage. &lt;br&gt;&lt;hr size=&quot;1&quot;&gt;&lt;br/&gt;</description></item><item><title>Functions within a Context</title><link>http://softblue.wetpaint.com/page/Functions+within+a+Context</link><author>phomer</author><guid isPermaLink="false">http://softblue.wetpaint.com/page/Functions+within+a+Context</guid><comments>Moved from: Experiments</comments><pubDate>Mon, 07 Jul 2008 17:06:09 CDT</pubDate><description> 			There are many different ways of modelling computation, including famous ones like finite state machines (DFA) and Turing machines. From another perspective, we can see all behavior in a system as being a series of functions applied against data. The function is the active code, some type of algorithm (or heuristic), while the data is located in many different parts of the program.&lt;br&gt;&lt;br&gt;Function(context, arguments, data) =&amp;gt; (results, side-effects)&lt;br&gt;&lt;br&gt;For a simple model of the data, we&amp;#39;ll definite it to be a) context, b) function arguments and c) some set of data structures. As a result of the function executing, there is some primary data result, and some number of side effects. &lt;br&gt;&lt;br&gt;The context is important, because all significant computing exists with a context, like an operating system or a program, or some architectural structure, like a command shell. We strive to re-use our work, so we must separate out the &amp;#39;context&amp;#39; in which it runs, to keep it from being inter-mixed.&lt;br&gt;&lt;br&gt;The function arguments are also significant because there are the standard degrees-of-freedom within the behavior of the function. The context may provide some global effects (preferences, settings, etc), but the arguments localize the behavior to be what the user specifically intended. So, two executions of the same function at a similar time will likely operate in the same context, but with different arguments. &lt;br&gt;&lt;br&gt;Software is all about managing piles of data, so anything significant is really just a transformation on some data-structure. We can just assume one in the model to make it easier, as the top-most data-structure could be a list of references to other data-structures. We differentiate between the incoming data-structure and the out-going one because that allows for things like caching. They may be the same, or they may not, it shouldn&amp;#39;t matter to the model. The incoming one is the data, and the out-going one is the results. For functions like summaries, the two data-structures are not related at all, except by their computational ties. For functions like create or destroy, the data and the results are identical, yet altered by adding or removing things. &lt;br&gt;&lt;br&gt; Side-effects are separated because like context, there is much going on in a &amp;#39;system&amp;#39; that is beyond the standard behavior. For this model to be more usable than a DFA, it needs to more closely reflect the way computation is most often implemented, not it&amp;#39;s theoretical minimum. Software is always full of a huge number of side effects, it makes up a significant amount of complexity.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;hr size=&quot;1&quot;&gt;&lt;br/&gt;</description></item><item><title>Software Blueprints</title><link>http://softblue.wetpaint.com/page/Software+Blueprints</link><author>phomer</author><guid isPermaLink="false">http://softblue.wetpaint.com/page/Software+Blueprints</guid><pubDate>Mon, 07 Jul 2008 14:36:16 CDT</pubDate><description> 			This site is dedicated towards exploring blueprints for software development. This includes any and all issues related to blueprints, and how they can or cannot be used for software development.&lt;br&gt;&lt;br&gt;It is open to anyone that is interested in software and how it is developed. New Members are always welcome!&lt;br&gt;&lt;br&gt;Just interested in updates? You can subscribe to the RSS feed in Web Apps like Goggle reader to get the latest changes. You can find a link on the &amp;quot;What&amp;#39;s New&amp;quot; screen at the right-hand side.&lt;br&gt;&lt;hr size=&quot;1&quot;&gt;&lt;br/&gt;</description></item><item><title>Attempt #2 - Structured Requirements Definition</title><link>http://softblue.wetpaint.com/page/Attempt+%232+-+Structured+Requirements+Definition</link><author>JSiegrist</author><guid isPermaLink="false">http://softblue.wetpaint.com/page/Attempt+%232+-+Structured+Requirements+Definition</guid><pubDate>Fri, 20 Jun 2008 00:46:23 CDT</pubDate><description>There is no abstract available for this page revision.&lt;hr size=&quot;1&quot;&gt;&lt;br/&gt;</description></item><item><title>Simple Textual Blueprint</title><link>http://softblue.wetpaint.com/page/Simple+Textual+Blueprint</link><author>phomer</author><guid isPermaLink="false">http://softblue.wetpaint.com/page/Simple+Textual+Blueprint</guid><pubDate>Mon, 09 Jun 2008 11:09:05 CDT</pubDate><description>1. Take something simple, and describe it in text.&lt;br&gt;2. Reduce it to it&amp;#39;s essence, and then see if what is missing changes people&amp;#39;s intepreation?&lt;br&gt;&lt;br&gt;The simplest programming interface is a &amp;#39;command line&amp;#39; tool or program. The simplist one in most systems is the listing of the contents of a specific directory.&lt;br&gt;&lt;br&gt;Called various names, such as &amp;quot;dir&amp;quot;, &amp;quot;ls&amp;quot;, &amp;quot;lf&amp;quot;, etc.&lt;br&gt;&lt;br&gt;The underlying data belongs to a &amp;#39;file-system&amp;#39;. The context is usally some location in the file-system (having navigated their earlier), and some set of options to control the basic display of the function. &lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Thus, the user issues the command: ls&lt;/li&gt;&lt;li&gt;The code gets any &amp;#39;command&amp;#39; options.&lt;/li&gt;&lt;li&gt;The code gets the current location in the file-system.&lt;/li&gt;&lt;li&gt;The file-system returns some data for location. (file names, directory names).&lt;/li&gt;&lt;li&gt;The file-system generates some meta-data for the location. (count of items)&lt;/li&gt;&lt;li&gt;The code takes the data and the meta-data and &amp;quot;reformats&amp;quot; it based on the options.&lt;/li&gt;&lt;li&gt;The code displays the presentation version of the data (and meta-data) to the user.&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;There are probably not any side-effects (although read-access or an audit log could be updated some-else) (earlier, the shell updated it&amp;#39;s history (before the command even ran)).&lt;br&gt;&lt;br&gt;There is an infinitely large number of different presentation options. (sorting, filtering, coloring, screen positioning, etc.)&lt;br&gt;&lt;br&gt;The underlying data is driven by technical requirements (file-system is a crude database) and user requirements (user&amp;#39;s need to move around and manipulate different files and directories).&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;hr size=&quot;1&quot;&gt;&lt;br/&gt;</description></item><item><title>Attempt #1</title><link>http://softblue.wetpaint.com/page/Attempt+%231</link><author>JSiegrist</author><guid isPermaLink="false">http://softblue.wetpaint.com/page/Attempt+%231</guid><pubDate>Sat, 07 Jun 2008 00:55:15 CDT</pubDate><description>&lt;b&gt;Introduction:&lt;/b&gt;&lt;br&gt;What exactly are software blueprints? So far in discussions both online and in email, two possibilities have presented themselves: &lt;br&gt;&lt;br&gt; 1) A blueprint is an abstracted partial description of a software system that omits everything except for enough information to describe the most important parts of the system and the relationship between these parts, or&lt;br&gt; 2) A blueprint provides a complete description of the system, detailing every component, sub-component and the linkages between components. &lt;br&gt;&lt;br&gt;Of these two, I believe we have mostly discussed software artifacts of type #1, even though they aren&amp;#39;t really blueprints in the proper sense. After studying the problem for the past few days, I now believe that items of this kind are really design aids. As an important part of the software process, system design aids can best be represented as a combination of just two things:&lt;br&gt;&lt;br&gt; a) A description of the system data structures, and&lt;br&gt; b) A myth about the software system.&lt;br&gt;&lt;br&gt;&lt;b&gt;Detailed Description:&lt;/b&gt;&lt;br&gt;Data dictionaries are boring, unglamorous, and yet vitally important. Nothing more need be said about them because these are well known and already a common design document.&lt;br&gt;&lt;br&gt;Like all good myths, the software system one needs supporting characters who have been beset by evil (or in this case their business problem). The myth requires a hero who is the program to be designed and purpose built for slaying dragons and saving users in distress. A well-defined setting that describes the circumstances under which the hero will operate (OS, programming language, external interfaces, etc.) and the restrictions that will make its task more difficult is also necessary. Finally as the protagonist, the hero must have a fully fleshed out description allowing anyone to understand how it ticks.&lt;br&gt;&lt;br&gt;Software myths seems a good fit to the design task because they are understandable to programmer and nonprogrammer alike. The story can be expanded in a layered fashion, allowing the addition of detail if and when it&amp;#39;s needed. Most stories rely upon a number of literary and cultural conventions to fill in much detail that would otherwise need to be spelled out at length. Software stories can likewise make use of industry and company specific programming guidelines. One additional benefit to this format is that it&amp;#39;s fairly easy to analyze a story to see if it&amp;#39;s balanced and how the story parts fit together. In short, for a design aid, this seems like it is a good way to go.&lt;br&gt;&lt;br&gt;&lt;b&gt;Conclusion:&lt;/b&gt;&lt;br&gt;However, as I realized to my dismay last night, this is not really what a blueprint is or should be about. The blueprint needs to be a complete description of what the final system looks like. As a document, it is concise because it leaves out all information about why, for whom, how, or in what sequence the pieces should be built and assembled. This is exactly how the blueprints in the architecture field work. Architectural drawings are concise because they leave how to put the building together to the contractor, only specifying what the finished product needs to look like. This works contractors, tradesmen, and building inspectors are all expected to be trained in knowing the building codes, which their work must conform to.&lt;br&gt;&lt;br&gt;&lt;b&gt;Lessons Learned:&lt;/b&gt;&lt;br&gt;So in closing, while this first attempt at a usable software blueprint failed, I learned several requirements of any eventual software blueprint. These are as follows:&lt;br&gt; I) Software blueprints must only describe the parts of the system and how the parts fit together into the solution. Any other information is extraneous.&lt;br&gt; II) Software blueprints must not specify how the system, system components or sub-components are constructed. The blueprints should describe what parts are used to make up components and sub-components, and what functionality each component (or sub-component) provides, leaving questions of &amp;#39;how&amp;#39; up to the implementer.&lt;br&gt; III) Software blueprints must not impose any sequence on the construction process. Attempts at sequencing this work will only place unnecessary constraints on how this work is accomplished. Sequence of construction operations is extraneous to the overall description of the system anyway.&lt;br&gt;&lt;hr size=&quot;1&quot;&gt;&lt;br/&gt;</description></item><item><title>Proposed Blueprints</title><link>http://softblue.wetpaint.com/page/Proposed+Blueprints</link><author>JSiegrist</author><guid isPermaLink="false">http://softblue.wetpaint.com/page/Proposed+Blueprints</guid><pubDate>Fri, 06 Jun 2008 01:11:32 CDT</pubDate><description>This section of the wiki is where any attempts at software blueprints will be placed for public scrutiny and discussion.&lt;br&gt;&lt;hr size=&quot;1&quot;&gt;&lt;br/&gt;</description></item><item><title>Experiments</title><link>http://softblue.wetpaint.com/page/Experiments</link><author>phomer</author><guid isPermaLink="false">http://softblue.wetpaint.com/page/Experiments</guid><pubDate>Mon, 02 Jun 2008 16:18:13 CDT</pubDate><description>1. Expression of low, to medium complex architectural components in some type of simplified textual representation. &lt;br&gt;&lt;br&gt;If we take a bunch of non-trivial common pieces of software, and experiment with stripping down the irrelevant data and functionality into some minimal (canonical) form, will various different programmers and software developers differ on the significance of the remaining details? We do want to leave some wiggle room in the specifications for intrepetation, technologies, and conventions, but still control it enough that the &amp;#39;core&amp;#39; attributes of the system as conceptualized are the same ones that are built. &lt;br&gt;&lt;hr size=&quot;1&quot;&gt;&lt;br/&gt;</description></item><item><title>Requirements</title><link>http://softblue.wetpaint.com/page/Requirements</link><author>JSiegrist</author><guid isPermaLink="false">http://softblue.wetpaint.com/page/Requirements</guid><comments>Added more goals</comments><pubDate>Wed, 21 May 2008 02:03:24 CDT</pubDate><description> 			In an effort to ensure that work on this project is productive, we have determined the following set of operating principles for Software Blueprints:&lt;br&gt; 			&lt;div align=&quot;center&quot;&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Everything should be simple and obvious.&lt;/li&gt;&lt;li&gt;It should be as self-documenting as possible. &lt;/li&gt;&lt;li&gt; Consistency reduces complexity.&lt;/li&gt;&lt;li&gt;Every avenue is a possibility (at least for the first 100 years).&lt;/li&gt;&lt;li&gt;Each experiment as part of this project should be fairly focused.&lt;/li&gt;&lt;li&gt;Each investigation as part of this project should have specific validation criteria.&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;br&gt;The Software Blueprints project has as its end goal finding a solution to the ongoing &amp;#39;Software Crisis&amp;#39;. Our avenue of approach to this problem is to find or invent a better way to document software systems. It is believed that if a suitable &amp;#39;software blueprinting process&amp;#39; can be developed, we could expect to see at least an order of magnitude improvement in reliability, scalability, and software defect rates throughout the system lifecycle. We recognize that software engineering is a young field and that this is a very ambitious goal. However, through study and experimentation, we believe that this project can begin taking the first steps towards the eventual solution to the software problem.&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;/ul&gt;Provisional set of goals for the project:&lt;br&gt;&lt;ul&gt;&lt;li&gt;Identify requirements for the software blueprints themselves.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Validate the software blueprint requirements.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Identify what is necessary to fully specify a software system.&lt;/li&gt;&lt;li&gt;Identify what other fields have related &amp;#39;blueprint&amp;#39; requirements. &lt;/li&gt;&lt;li&gt;Identify what design artifacts these fields use as their completed specifications.&lt;/li&gt;&lt;li&gt;Identify existing software engineering artifacts and evaluate them for suitability as part of a software blueprint.&lt;/li&gt;&lt;li&gt;Develop any new software engineering artifacts needed for a concise set of software blueprints.&lt;/li&gt;&lt;li&gt;Experimentally validate the usefulness of each potential blueprint artifact.&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;hr size=&quot;1&quot;&gt;&lt;br/&gt;</description></item><item><title>Links</title><link>http://softblue.wetpaint.com/page/Links</link><author>JSiegrist</author><guid isPermaLink="false">http://softblue.wetpaint.com/page/Links</guid><pubDate>Wed, 21 May 2008 02:01:49 CDT</pubDate><description> 			&lt;u&gt;&lt;b&gt; 			A collection of URLs that are relevant:&lt;/b&gt;&lt;/u&gt;&lt;br&gt;&lt;br&gt;&lt;a class=&quot;external&quot; href=&quot;http://softblue.wetpaint.comhttp://theprogrammersparadox.blogspot.com/2008/05/software-blueprints.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;The Programmer&amp;#39;s Paradox Blog Post that Originally Started this Wiki&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Software Design:&lt;/b&gt;&lt;br&gt;&lt;a class=&quot;external&quot; href=&quot;http://softblue.wetpaint.comhttp://www.developerdotstar.com/mag/articles/reeves_design.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;What Is Software Design? - By Jack W. Reeves&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;external&quot; href=&quot;http://softblue.wetpaint.comhttp://www.developerdotstar.com/mag/articles/reeves_13yearslater.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;What Is Software Design: 13 Years Later - By Jack W. Reeves&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Background Information:&lt;br&gt;&lt;/b&gt;&lt;a class=&quot;external&quot; href=&quot;http://softblue.wetpaint.comhttp://en.wikipedia.org/wiki/Software_blueprint&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Wikipedia entry on Software Blueprint&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;external&quot; href=&quot;http://softblue.wetpaint.comhttp://www.software-development-blueprinting.com/application-development.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;One description of a software blueprinting language&quot;&gt;One description of a software blueprinting language&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;PDFs:&lt;/b&gt;&lt;br&gt;&lt;a class=&quot;external&quot; href=&quot;http://softblue.wetpaint.comhttp://portal.acm.org/citation.cfm?id=800127.804131&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Software Blueprints - By Patrica H Baucom&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Books:&lt;/b&gt;&lt;br&gt;&lt;a class=&quot;external&quot; href=&quot;http://softblue.wetpaint.comhttp://www.amazon.com/Software-Blueprints-Lightweight-Conceptual-Modelling/dp/0201398192&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Software Blueprints: Lightweight Uses of Logic in Conceptual Modelling - By David Robertson and Jaume Agusti&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Companies Offering Software Blueprint Services:&lt;/b&gt;&lt;br&gt;&lt;a class=&quot;external&quot; href=&quot;http://softblue.wetpaint.comhttp://www.software-development-blueprinting.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Software Development Blueprinting&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;external&quot; href=&quot;http://softblue.wetpaint.comhttp://www.dynamicanswers.com/Home/tabid/36/Default.aspx&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Dynamic Answers&lt;/a&gt;&lt;br&gt;&lt;hr size=&quot;1&quot;&gt;&lt;br/&gt;</description></item></channel></rss>