January 29th, 2012 | Tags: , ,

At some point during the frequent update orgy of my bellowed Ubuntu oneiric I over-updated…

The result was that every time I was attempting to open an URL within Thunderbird, my web browser (firefox) displayed following:

thunderbird urls not working

God knows I tried everything (forums, irc, blogs, twitters)… to no avail.

Help came unexpectedly from this thread.

Some dude explained how to change url-handler from firefox to chrome and that’s when it struck me.

Solution

 

I noticed in his post the line “firefox %s”. And was wondering why in my case the url is converted to “%u”. I checked the url-handler configuration of mine by:

$ gconftool-2 -g /desktop/gnome/url-handlers/http/command
firefox %u

and then changed it to:

$ gconftool-2 --type string -s /desktop/gnome/url-handlers/http/command "firefox %s"

Voilà, the problem solved!

March 21st, 2010 | Tags: , , ,

Firstly, I cheated. Actually this post should be named “JMX and application-specific resources”. But, since I found this architectural property of JMX while attempting to use the JPA within JMX managed bean, the title is what it is.

Secondly, this post is neither on what JMX is nor what JPA is. If you are unfamiliar with those – read basics someplace else. Be advised though that while there is plethora of excellent material on JPA (just google for it and you’ll find everything you could’ve dreamed about), there is next to nothing on JMX good enough for ME to understand it! Well yeah, there are number of docs and articles from Sun and independent authors available out there. Me, I am dissatisfied with all of them. For instance, how the heck I work with composite or tabular data types of the open beans or, in fact, how do I work with application specific resources, huh?

So, as I said, there was this use case I was working on – “Show me in a JMX managed bean some application configuration data out of persistence”. My application is a web-app running on the tomcat. I initialized MBean in her (bean’s) constructor and registered it with the default MBeanServer of the JVM with something like this:

MBeanServer server = ManagementFactory.getPlatformMBeanServer();
server.registerMBean(this, "name");

Within MBean I was using a DAO which loaded for me some config data over the JPA with Hibernate. To my great pleasure – the MBean worked at the first try until… I changed something. I did some minor optimization and my MBean broke down. For whole two days I and my colleague (wink Christian) were sweating hard to fix the bug.

The symptom was that the JPA couldn’t instantiate EntityManager anymore with the exception of something like “There are no providers for the persistence unit MyPersistenceUnit”.

After two day trial and error, endless reading and attempting to understand scarce JMX docs the issue turned out to be initialization of that DAO I mentioned earlier. Inside the DAO I was creating an entity manager like this:

emf = Persistence.createEntityManagerFactory("MyPersistenceUnit");
em = emf.createEntityManager();

In a web-app (EJB app to be precise) the JPA (or in fact Hibernate) expects a persistence.xml to be located in /META-INF/persistence.xml of the web-app. The persistence.xml is loaded then by Hibernate as a resource using context class loader of the current thread.

This is where things get ugly when using JMX. How I understand it, registering MBean with the platform MBean server causes the MBean methods be called from the system class loader of the JVM when the MBean methods are invoked by the call-backs(?) from the MBeanServer. Yes, the system class loader of the JVM (as in Java Virtual Machine). Not the class loader of the web-app, not even class loader of the tomcat, but the class loader of the JVM itself. Why? Because MBeanServer runs directly in JVM. This in turn means that if attempts are made to load resources located on the class path of the web-app in the MBean methods called back by the MBeanServer, they will fail since the class loader of the MBeanServer (the system class loader of the JVM) knows nothing about web-app or, in fact, any class path that lies below that of the JVM.

Workaround

Yeah, I can’t call it a solution since it’s not. But the workaround that worked for me was to initialize the DAO and store it (the DAO) as a class attribute of the MBean implementation before I hand the control over to MBeanServer. This way, the methods of MBean can work with the initialized instance of the DAO. This workaround sucks for number of reasons but I can’t seem to find a better one.

The final point is – any resource loading done in the methods of MBean invoked by call-backs from MBeanServer will fail since those invocations are done within thread of the JVM itself.

April 23rd, 2009 | Tags:

Just recentlly I was about to hold release planning workshop with domain experts of the customer. And to my huge surprize this customer were prepared! They made diagram that displayed current process. And I must admit I liked it.

I am using word “flowchart” to denote way my customer prepared their diagram because it displayed mixed flow of control and objects plus some additional support information. Sure there is similar diagram in UML – activity diagram. I find though activity diagrams quite difficult to explain for someone who is not familiar with UML. Yes, you can teach your customer UML, but what if he is not interested or willing to. What if there is actually alternative and more or less equal ways to display same information without having to learn UML.

Check out the flowchart of my customer (I beautified and modified it ofcourse):

flowchart-vs-flowchart-1

Well, original diagram was even simpler since it didn’t had object flow. I added object flow to the diagram by reflex and now am too lazy to delete it. I think you will still get the point. And the point is – besides simplified display of activities, there are two additional areas on the both sides of diagram that let you

1. much better understand who is having the ball at the moment

2. adds relevant information without cluttering diagram

Yes, it is possible to display same information using activity diagram, e.g. like this:

flowchart-vs-flowchart-2

My opinnion is – the UML-compliant version of diagram is cluttered, responsibilities not as clear as in first version, if activity is shared by two actors (like “agree on delivery conditions based on availability”) – for me a question pops up if placing activity on the border between two swimlanes is formatting error or intended. Additionally, I think that additional information in notes is not as prominent as it is in the first, non-compliant diagram. Finally, I should’ve ben adding third swimlane for final node since it is being executed by someone else and not purchasing agent.

Summary

Sure the differences between two diagrams above are not that huge. But I think that when it comes to acceptance of one or another modeling methodology the devil is in the detail. So I say, for the sake of your customer and productive joint effort, feel free to give up formalism and concentrate on enhancing understanding and readability versus trying to hold on to standard.

February 7th, 2009 | Tags:

The impact is so big I just had to write about it immediately. For a long long long time I am facing difficulties to find NEW music I really like.

There are some exceptions like soma.fm for example. The issue here is that unfortunately they too have limited selection and after some time one know their repertoire and artists by heart. When it happens, an era of repetition and mixing begins until…

I was watching some video on youtube.com with a background music that absolutely stunned me. Thanks to lord, some dude wrote it’s title and I went searching for it… boy I was surprised when I landed in internet site of original author of the song I heard… he offers ALL of his music FREE OF CHARGE to download directly from his site!!! That’s right, check out: http://www.generalfuzz.net/tunes.php

By the virtue of luck I browsed to the bio and blog of the general fuzz and besides his brilliant music I got an answer to why I have those difficulties finding music I like…

“Unsatisfied with the popular consensus that electronic music = techno…”

This and other thoughts of the general brought me better understanding of myself. Realizing that the most important thing in the music I listen is the music itself! It has to be rich with rhythm, sources, harmony and variation and it has to be about music.

I realized that I like instrumental music because voice overruns music with additional and different layer that has to be interpreted – the lyrics. Techno lacks variation, jazz – sources, modern jazz – oh so often groove or even rhythm. Acid jazz comes very close to what I really like, but when I listen to acid jazz I miss downtempo. Drum ‘n’ Bass although offers super rhythm, often lacks variation or groove… well I could go on and on with the list of “likes and dislikes” but the point is – music of general fuzz and his mindset matches to that of mine. When I listen to it sometimes I get the feeling that I have heard it already… in my dreams

November 28th, 2008 | Tags:

I hope my article will at least add to common understanding on this otherwise so poorly covered theme.

Last week I was crunching module loading for a product of ours requiring dynamically replaceable customer specific (business) module. There are dozens of poor variations on GPSModule Quick Start from original Microsoft Composite UI Application Block package all poorly constructed and even poorer explained. The answers I was looking for I found in this excellent blog of Rich Newman where I found out how exactly does module initialization work.

Generally you do three things

1. Move relevant code into separate project (that will later be compiled into separate assembly);
2. Implement class specializing Microsoft.Practices.CompositeUI.ModuleInit. This class will provide entry point for module loading where you will do initialization, loading and binding events for example;
3. Add to shell application ProfileCatalog.xml that will define what modules to load

Simple huh? Well not really. There are number of dodgy things about loading modules which are not related to module loading itself but rather to how you properly initialize business related code within module. In particular I’d like to touch two themes…

I will use this code as an example:

public class CustomerListModuleInit : ModuleInit
{
private WorkItem parentWorkItem;

[ServiceDependency]
public WorkItem ParentWorkItem
{
set { parentWorkItem = value; }
}
[EventSubscription("event://MyApplication/Administration/DisplayCustomerList")]
public void DisplayCustomerList(object sender, EventArgs e)
{
if (parentWorkItem.RootWorkItem is MyApplicationWorkItem)
{
WorkItem customerListWorkITem = parentWorkItem.RootWorkItem.WorkItems
.AddNew<CustomerListWorkItem>();
List<IPresenter> presenters = customerListWorkItem.GetPresenters();
presenters.ForEach(delegate(IPresenter presenter)
{
customerListWorkItem.Services.Get<IWorkspaceLocatorService>();
IWorkspace wks = locator.FindContainingWorkspace(customerListWorkITem, presenter.View);
if (wks != null) wks.Show(presenter.View);
});
}
}
}

Access to Workitem during module initialization

Because property ParentWorkItem has a [ServiceDependency] attribute it is clear that it will be injected by means of service locator. But the true question is - what ParentWorkItem? The answer is that the WorkItem that is passed is the WorkItem that caused the module to be loaded. We can clearly see it in LoadModules() method of CabApplication that in turn is is called directlly in Run() method of CabApplication.

private void LoadModules()
{
IModuleLoaderService loader = rootWorkItem.Services.Get<IModuleLoaderService>(true);
IModuleEnumerator modEnumerator = rootWorkItem.Services.Get<IModuleEnumerator>(true);
if (modEnumerator != null)
loader.Load(rootWorkItem, modEnumerator.EnumerateModules()); // ROOTWORKITEM !!!
}

As you can see first parameter of Load() method of loader is rootWorkItem in default application module loading algorithm. The reason why property is still called ParentWorkItem and not RootWorkItem is that in some cases if you do hocus pocus you could delegate loading of particular modules to any workitem. So to keep code error free in the class specializing ModuleInit I used parentWorkItem.RootWorkItem notation. This allows me to ensure that I always have reference to the RootWorkItem even in the cases where ParentWorkItem injected by service locator actually is one of child work items.

Event subscriptions

Another interesting thing about module loading is the way one can wire-up events. I mean, in some typical application of yours you might have shell application with some basic (or if you like cross-cutting) stuff in it such as user administration, master layouts, main menu or main page, etc. The actual business logic of your application might be implemented in different modules such as customer management, product catalogue and invoicing. Now, let us assume you would like to move your customer management into a separate module. You do that by performing three steps I described above. After you've done this it is time to wire-up your freshly created module into main application. Typically, you'd have for example main menu item for showing customer list. When user clicks on this main menu an event is fired. For example like this:

[EventPublication("event://MyApplication/Administration/DisplayCustomerList")]
public event EventHandler<EventArgs> DisplayCustomerList;

Now, you would like to handle this event in your customer management module and upon firing of event, create customer list work item that would do the job of showing application user that list of customers.

It took me some time to understand where to actually place event handler (or in terms of CAB - EventSubscription) that will handle published event, create customer list work item and run it. The way I did it is shown in code of CustomerListModuleInit class above:

public class CustomerListModuleInit : ModuleInit
{
...
[EventSubscription("event://MyApplication/Administration/DisplayCustomerList")]
public void DisplayCustomerList(object sender, EventArgs e)
...
}

Why like this? Well, for starters EventSubscription method must be in a class that is instantiated when event is fired. RootWorkItem itself can not have this method since it has no reference to CustomerListWorkItem which is located in a module. To instantiate CustomerListWorkItem upon module loading makes no sense as well, since there is no guarantee that application user will use it at all in current work session. Thus the only logical place that remains is - CustomerListModuleInit that is instantiated unconditionally and per definition should contain code that ensures module wire-up with main application. As soon as I realized this, the implementation became obvious :)

November 8th, 2008 | Tags:

Lord Jesus in the heaven! I refuse to reference System.Web in my Windows.Forms application… period! So i went to look for an alternative to HashPasswordForStoringInConfigFile. You need this if for example:

- in your win forms client you want to use same DB you are using in your web application;
- you use secure web-services which should authenticate user of your win forms client against her identity in DB of your web application;

Pretty much common scenarios, ey? I’ve still got sweaty armpits and bleeding nose from all the crunching through bazillions of forums and blogs. With no success.

Now, after two hours of putting bits and bytes together here’s WORKING version of the method in c# that will generate identical hash with that of HashPasswordForStoringInConfigFile from plain password stored in string:

string EncryptPassword(string password)
{
Byte[] passwordBytes = (new ASCIIEncoding()).GetBytes(password);

SHA1Managed hashProvider = new SHA1Managed();

hashProvider.Initialize();

passwordBytes = hashProvider.ComputeHash(passwordBytes);

hashProvider.Clear();

string encryptedPassword = string.Empty;

foreach (byte b in passwordBytes)
{
encryptedPassword += b.ToString(“X2″);
}

return encryptedPassword;
}

Don’t get fooled by simplicity of this method, because it wasn’t simple at all to make it work. Here are pitfalls I falled into:

- (new ASCIIEncoding()).GetBytes(password); <- do NOT use unicode encoding here no matter that your password contains unicode characters cause that’s how FormsAuthentication method does it;
- encryptedPassword += b.ToString(“X2″); <- forget “2″ in that format string and resulting hash will be ALMOST identical but not EXACTLY since FormsAuthentication generates with leading zero!
- no, the loop does not the same thing Convert.ToBase64String does, don’t even ask!

November 7th, 2008 | Tags: , ,

Part of this interview “Ivar Jacobson on UML, MDA, and the future of methodologies” where Mr Jacobson comments on main differences between software development methods based on explicit knowledge and those based on tacit knowledge lead me to thoughts I am willing to express in this post on knowledge within software development (methodology).

I am not going to elaborate on definitions here since there’s an excellent article “Convert tacit knowledge into explicit knowledge to ensure better application development” describing differences and co-relations between tacit and explicit knowledge. Please check both, interview and article before reading this since you will need some preliminary understanding about subject.

So, considering above thoughts of the Mr Jacobson and considering argument of Mr Kuhn on conversion process I must say that statement of Mr Jacobson on shortcomings of methodologies based on tacit knowledge was incomplete.

To quote Mr Jacobson on problems with methods based on tacit knowledge – “how do you teach that?” “how do you know what it is?” “(in a team with tacit knowledge) how do you get them to agree on what to do?” “how can you possibly grow that knowledge?”

Well, I have actually answers to those hypothetical questions:

“How do you teach that?” – well you don’t that’s the whole point you show and then show again until other people get the point
“how do you know what it is?” – again, you don’t but that’s OK since you don’t have to articulate it, just show
“(in a team with tacit knowledge) how do you get them to agree on what to do?” – to have a consensus all members must have either same (tacit) knowledge or there should be dominant expert who forces his tacit knowledge upon rest of the team. If this is not the case, getting agreement on what to do will turn out to be lengthy and unlikely productive process, but – result would be an answer to the next question.
“how can you possibly grow that knowledge?” – i say, same way you’d grow explicit knowledge – in a evolutionary way! How do you grow explicit knowledge in first place? To grow any method one will have to add new stuff and because its new there is no information about it within existing method.

To rephrase Mr Kuhn – invention itself is conversion or articulation of tacit knowledge through which it is converted into explicit knowledge. In other words to create explicit knowledge you NEED tacit knowledge in first place.

The conversion process described by Kuhn is looped tho, that is – as soon as you create explicit knowledge, you need tacit knowledge to evolve or re-define that explicit knowledge. New and better definition of explicit knowledge emerges after so called “revolutionary paradigm shift”. Users of this new knowledge start to gain new tacit knowledge immediately in the process of working with explicit knowledge and eventually put explicit knowledge under question thus sooner or later forcing next “revolutionary paradigm shift” and so on, and so forth.

I may be too bold stating that establishment of this cycle actually gave human kind that edge against other animal species by allowing to overcome shortcomings of evolving only with tacit knowledge (because its too slow). Evolution only with explicit knowledge would be even impossible (since It’s tangible. There’s no need to gain experience. It’s something that has been converted to a rule).

Ergo

Well, my conclusions are:

- tacit knowledge actually does the job of evolving things based on that knowledge
- explicit knowledge does the job of formalizing, explaining (learning) and distributing tacit knowledge

Today, only together they give evolution the speed we are used to, the speed we are not willing to give up. Projecting this on software development methodology is straight forward – only method that uses both types of knowledge has a chance of fast evolution.

Since, as far as I know, there is no method yet that would explicitly base itself on both knowledge types I am happy to say that we still got a lot of work to do and a lot of new things to invent :D

November 5th, 2008 | Tags:

Originally, I wanted to write new post every two to three days. But something messed up my plan… it happened yesterday, November 4th 2008 at 03:45. Her name is Līna, she weighs 3550g and is one of the three hottest women of my life. Check out her pics:

November 1st, 2008 | Tags: ,

This Entry is dedicated to my project Use Case “Bring Emma to kindergarten”, Please read the project page first to get the general idea.

Here it is, formalized requirements outline from the previous post.

Requirements Outline

Chapter  1. Purpose and Scope
1a. What is the overall scope and goal? – Main goal is to bring Emma every working day between 08:00 and 08:30 to Kindergarten
1b. Stakeholders (Who cares?) – Chris, Reinis
1c. What is in scope, what is out of scope? – Starts with getting up and ends with leaving Kindergarten

Chapter 2.  Terms Used / Glosary
Lunch – bread & fruits. Joghurt, pudding
Registration time – 08:00 – 08:30
Working day – Mo till Fr with the exception of school break, closing(?) days and comon holidays
KiGa – Kindergarten
Kindergarten – “zum St. Martin”, …. 92712 Pirk
Emma – child (daughter)
Lunchbox – pink, branded “Scouty” has picture of pony and sheep

Chapter 3. The Use Cases
3a. The primary actors and their general goals – Parents to bring Emma early and without the delay to Kindergarten;  Child to meet her friends, play, masquerade; Kindergarten personell – to register child upon arrival
3b. The business use cases (operations concept) – Bring Emma to kindergarten
3c. The system use cases – Bring child to kindergarten

Chapter 4. The Technology Used
Household, municipal infrastructure

4a. What technology requirements are there for this system? – municiapal infrastructure should be maintained; household should have power, water, clothing
4b. What systems will this system interface with, with what reqruiements? – phone, baker, butcher

5. Other Requirements
5a. Development process – not applicable
5b. Business rules
Time – 08:00 – 08:30
Child is dressed
Child is not crying in process
Child has lunchbox
Acceptance of the child towards other actors
5c. Performance – use case should be completed in approx. 1 hour
5d. Operations, security, documentation – security on stairs, street, depending on weather conditions (e.g. umbrela oder gloves), health; respective clothing for operations
5e. Use and usability – possibility to parallelize some steps should be investigated
5f. Maintenance and portability – Emma should be periodically washed and fed. Dress and lunchbox should be maintained. Is this Use Case applicable for any child?
5g. Unesolved or deferred – none

Chapter 6. Human Backup, Legal, Political, Organizational Issues
Q1. What is the human backup to system opertaion? – Reinis back ups Chris; Christa back ups Reinis & Chris; Mrs Schwab backs up Christa, Reinis & Chris
Q2. What legal and what political requirements are there? – Reinis wants to participate only if he is not tired or dozy
Q3. What are the human consequences of completing this system? – not applicable
Q4. What are the training requirements? – traffic rules, dressing up Emma, lunch, brush teeth, timing!
Q5. What assumptions, dependencies are there on the human environment? – health, acceptance of Emma

End! Now, let us see what exactly is the purpose (besides obvious one of capturing requirements) of this artifact and what value does it add to our project.

Requirements Outline, what gives?

I already explained in my previous post that I was looking for a way to somehow capture all those social or, in general, human aspects I am unable to capture directlly in use case due to its behavioral nature. So does Requirements Outline serve this purpose?

Short answer – yes, but it needs to be adapted.

Long answer – we have special case of having just one use case defining scope of our project. This demands certain adaption for the requirements outline. Also the fact that the System is not computer based but rather social makes some of the chapters not really usefull or even meaningful. Let us check out some detail:

For starters, 1b. – why isn’t Emma stakeholder? Our motivation was that she does not always care. Sometimes she is willing to go to kindergarten, sometimes she really don’t care and sometimes she wants to stay in bed and is not willing to go to kingergarten no matter argumentation. The discussion on what place does Emma take in this use case we will continue again at some point. Is our assumption that Emma is no stakeholder correct? Is Emma an actor then or, maybe, she is even a domain object? I am not naging on definitions here, but rather trying to bring in clarity since without clear definition we will be probably unable to state clear requirements.

then there’s 1c. – we had a somewhat lengthy discussion about if preparations on the previous evening are within scope. Pro arguments were “well but we need to prepare that food for breakfast” or “if am not going to set alarm clock, we might oversleep…”. Contra arguments were “well but you have to buy food before you can prepare it – should buying be within the scope aswell?” or “you set alarm clock not only to get up on time to bring emma to kindergarten but also to get to work on time”. As you can see defining scope is not trivial at all, especially in cases where parts of process are taken for self-evident. I mean everyone knows that to get up early you have to set up alarm clock and how to do it or, that you have to brush your teeth or eat breakfast in the morning or dont you? I think there is no best practice that guarantees right result. Why did we left preparations on previous evening out of scope? Cause my gut feeling said so!

3a. – check out we defined an Actor for Emma (child). Is this descission right? I mean, aren’t we just driven by our social standarts that prohibit us from treating a person as (domain) object? Wouldn’t it be more appropriate to define her as a part of the system, to neglect her free will and to leave within scope only her attributes and part of behavior relevant to fullfilling given use case?

3b., 3c. – well, duh! Is it really worth writing system use case just to display that we could theoretically generalize Emma to child?…

Chapter 4 – I was about to say “duh!” as we started to write down Chapter 4, but then I realized that this chapter must be adapted before we actually can write something about “technology”. What technology are we actually using in this use case? Alarm clock, kitchen gear, phone, shower head (thats right!), shoe cabinet (technologically very advanced thing) – all very important to optimally complete use case but too general to specifically elaborate on any particular one. Those are all elements of infrastructure! Thus I come to conlusion that Chapter 4 should actually be called “The Technology and Infrastructure used” and should include also descriptions of what infrastrcutre elements are used to accomplish given use case. There is Topic 5d. “Operations, security and documentation” that kinda offers place for mentioning infrastructure still I belive that infrastructure is one of those fundamental aspects of use case and since technology chosen is very often co-related with infrastructure available those two belong together.

4b. – just one remark. See, we mention baker and butcher. It was very nice to instantlly see an added value of actually considering different aspects of requirements. We startet to discuss that we would have to interact mit Phone in those cases when Emma can not attend kindergarten. One of us suddenlly asked, but what about Mrs Häring our baker – we would have to interact with her aswell in case we would forget to prepare lunch for Emma or if our fridge would be empty. In the context – visiting Mrs Häring takes 5-15 minutes thus having serious impact on reaching performance goals of use case and thus should be part of the requirements!

5b. – “Child is not crying in process” say what?!?!? Those of you who were already confronted with bringing their children to kindergarten know what I am talking about. In first couple of weeks or every time after lengthy vacation (or visit at grandmas’) was crying and not calming down for hours on in. Kindergarten personell even called us (using phone system :)) and asked to fetch Emma early since she wouldn’t calm down. This resulted in us having phones placed close and mobiles switched on every time we leave house during kindergarten hours.

5d.  – another reason to bring infrastructure to Chapter 4 is operations. We are using municipal infrastructure (pavement) which based on weather conditions or maintenance is not always really operational :)

5e. – I think we were unsure if we understood this topic correctlly. Any example or advice would be really appreciated. The only sentence we came up with you can see for yourself.

Chapter 6 Q2. – fact is that I am an “owl” and I must force myself to get up early. This is good to know since everytime Chris can not bring Emma to kindergarten she informs me in advance so that I can get to bed early and lessen “the pain”.

Summary

Finally, a decent best practice to structure all of the requirements. Did we really covered all of them? Again – time will tell as we advance with our project. Just reviewing initial conlusions I was able to draw from requirements outline I see solid base for further elaboration.

October 28th, 2008 | Tags: ,

This Entry is dedicated to my project Use Case “Bring Emma to kindergarten”, Please read the project page first to get the general idea.

Although we discuss only one use case, Terms & Conditions still apply. And, since we have a social kind of use case where all the “human stuff” is very important because the SuD itself runs on humans, their behaviors and issues. I was looking for a Template to structure requirements in a way that would allow to consider this human part of our use case.

Well, I took that easy path and adapted… Requirement Outline proposed by Alistair Cockburn who adapted it from the template that Suzanne Robertson and the Atlantic Systems Guild published on their Web site and in the book Managing Requirements (Robertson and Robertson, 1999).

Unfortunately, I haven’t thought of putting behind Topic numbers their names in the paper version of the Requirements Outline as we wrote it, since the template was in front of us and I kinda didn’t realize I have to show it people that might actually have no access to it. That’s why (and also because I wanted to have an English translation) I will write it (outline) down one more time and attach original version for those who love my handwriting.

Since this posting has already reached a critical mass, I will move English version of outline along with my analysis to the follow-up.