<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>roundcrisis</title>
		<description>roundcrisis&apos;s adventures in code.</description>
		<link>http://roundcrisis.com</link>
		<atom:link href="http://roundcrisis.com/feed.xml" rel="self" type="application/rss+xml" />
		
			<item>
				<title>Bytesize Architecture Sessions for DDD Discovery</title>
				<description>&lt;p&gt;The &lt;a href=&quot;https://github.com/ddd-crew/ddd-starter-modelling-process/blob/master/README.md&quot;&gt;DDD Starter Modelling Process&lt;/a&gt; is an excellent guide when iterating through the design process. This process &lt;a href=&quot;https://github.com/ddd-crew/ddd-starter-modelling-process/blob/master/README.md#when-to-use-the-ddd-starter-modelling-process&quot;&gt;is recommended&lt;/a&gt; when planning or following significant change, or when there are changes in terms of personnel. Some good examples: major programme of work, beginning brownfield migration, re-organising teams, etc.&lt;/p&gt;

&lt;p&gt;I have been using Bytesize Architecture Sessions in a few of the sections of the Domain-Driven Design modelling process. This article focuses on the &lt;a href=&quot;https://github.com/ddd-crew/ddd-starter-modelling-process/blob/master/README.md#discover&quot;&gt;Discovery&lt;/a&gt; section of the starter process.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2026/ddd-crew-modelling-process--circles.png&quot; alt=&quot;DDD Starter Modelling Process&quot; /&gt; 
&lt;a href=&quot;https://github.com/ddd-crew/ddd-starter-modelling-process&quot;&gt;DDD Starter Modelling Process by DDD-Crew&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Discovery is about sharing domain knowledge. When domain knowledge is shared widely, the team builds a collective understanding that leads to software aligned with the domain. This enables both the team and the software to evolve with the business. Discovery is an enabling step that opens the door for more team members to bring forward innovation for the product.&lt;/p&gt;

&lt;h2 id=&quot;the-discovery-step&quot;&gt;The Discovery Step&lt;/h2&gt;

&lt;p&gt;In my experience, starting Discovery with &lt;a href=&quot;https://www.eventstorming.com/#styles&quot;&gt;EventStorming&lt;/a&gt; is a great way to understand the system in terms of what domain experts truly care about, how the system behaves through time, and so much more.&lt;/p&gt;

&lt;p&gt;After EventStorming, it’s useful to understand the current structural shape of your system, as it is right now. Use Bytesize Architecture Sessions with C4 to address this.&lt;/p&gt;

&lt;h2 id=&quot;bytesize-architecture-sessions-overview&quot;&gt;Bytesize Architecture Sessions Overview&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/images/2026/BAS-infographic.png&quot; alt=&quot;Bytesize Architecture Sessions Infographic&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://bytesizearchitecturesessions.com&quot;&gt;Bytesize Architecture Sessions&lt;/a&gt; are a workshop format that helps groups understand the systems they work on. Each session focuses on a specific section of a system. Over multiple sessions, the group will converge on a better shared understanding, develop a consistent vocabulary, and build a foundation for designing the future together.&lt;/p&gt;

&lt;p&gt;Each Bytesize Architecture Session lasts between 45 and 90 minutes and has four well‑defined parts: Session Goal, Alone Together, Convergence, and Introspection. You can model your systems using different tools, such as C4, Context Mapping, or the Bounded Context Canvas. For teams new to modelling I recommend starting with C4.&lt;/p&gt;

&lt;h2 id=&quot;c4-overview&quot;&gt;C4 Overview&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://c4model.com&quot;&gt;C4&lt;/a&gt; is a simple, hierarchical, and easy‑to‑learn modelling tool. It has four key diagrams. They move from high level abstractions of the &lt;em&gt;System Context&lt;/em&gt; where you think in terms of systems and people, the forest. Then, one level down are &lt;em&gt;C4 Containers&lt;/em&gt;, the trees. Below that are the &lt;em&gt;C4 Components&lt;/em&gt;, the branches. And at the most detailed level is the &lt;em&gt;Code Diagram&lt;/em&gt;, the leaves. This last diagram is customarily generated automatically.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2026/C4infographic.png&quot; alt=&quot;C4 Infographic&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;bytesize-architecture-sessions-for-discovery-a-practical-walkthrough-for-smaller-groups&quot;&gt;Bytesize Architecture Sessions for Discovery: A Practical Walkthrough for Smaller Groups&lt;/h2&gt;

&lt;p&gt;If you work with a cross‑functional team of ten people or fewer, the organisation of Discovery workshops is simpler.
You may start with a &lt;em&gt;Big Picture&lt;/em&gt; or a &lt;em&gt;Process Model&lt;/em&gt; &lt;em&gt;EventStorming&lt;/em&gt; workshop, then run a series of Bytesize Architecture Sessions over a few days to produce a System Context diagram and the chosen Container diagrams together.&lt;/p&gt;

&lt;p&gt;It’s best to hold the first session in person, as it’s easier to address any issues this way. It will enable better dynamics for questions and gathering feedback. Schedule the subsequent sessions a few days later.&lt;/p&gt;

&lt;p&gt;To kick the series off it’s a good idea to explain why the group should be doing this activity and an overview of the format. The goal and the activity should not be a surprise to any of the participants.&lt;/p&gt;

&lt;h3 id=&quot;discovery-kick-off&quot;&gt;Discovery Kick Off&lt;/h3&gt;

&lt;p&gt;As the Bytesize Architecture Session aspect of Discovery starts, ensure your participants are prepared:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Teach all participants about &lt;a href=&quot;http://c4model.com&quot;&gt;C4&lt;/a&gt;. A short explanation with examples works well&lt;/li&gt;
  &lt;li&gt;Ensure they have stationary, such as markers and suitably sized paper&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Proceed with the workshop:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Goal of the session&lt;/strong&gt;. State the goal of this session: “Create a System Context Diagram of the system as it &lt;strong&gt;currently is&lt;/strong&gt;”. Check for questions, ensure everyone is able to participate (e.g they can create a diagram individually). Ask attendees to confirm they understand the goal and that everyone attending is expected to create a diagram&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Alone Together&lt;/strong&gt;. Set up a timer for five minutes. All attendees create a diagram. When the timer elapses, everyone listens as each person describes their diagram without interruptions&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Convergence&lt;/strong&gt;. With the context from the previous step, create one System Context diagram that is the convergence of all ideas. This section is the longest, set up a timer for thirty  minutes.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Introspection&lt;/strong&gt;. Five introspective minutes to consider what each participant thought of the session. I generally run this as a fast mini-retro&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s highly likely that the individual diagrams will look different to each other. A common pattern, especially for those less familiar with C4, is to have different levels of abstraction present in the diagram. 
A good diagram is a useful outcome only if all attendees understand and learn why the diagram looks the way it does, and what each item in the diagram represents. It’s important to remember that the goal of running &lt;em&gt;Collaborative Modelling&lt;/em&gt;&lt;sup id=&quot;fnref:CoMo&quot;&gt;&lt;a href=&quot;#fn:CoMo&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; sessions like this one, is to grow understanding together.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Participating and co-creating is the outcome, the picture we create is a tool to help the participants retrace their steps.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;next-sessions&quot;&gt;Next Sessions&lt;/h3&gt;

&lt;p&gt;Help participants notice the effects of iteration, how they can point at an item in the diagram and understand how it got to its current state. This is why the &lt;strong&gt;Introspection&lt;/strong&gt; step at the end of the Bytesize Architecture Session is so valuable.&lt;/p&gt;

&lt;p&gt;The format for each of the following Bytesize Architecture Sessions will be the same as the first one. The goal should change as participants converge on the &lt;em&gt;System Context Diagram&lt;/em&gt;, and then, on the selected &lt;em&gt;Container Diagram&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Iterating on the diagrams is to be expected. For example, it’s common for the &lt;em&gt;System Context Diagram&lt;/em&gt; to need updates after working on the &lt;em&gt;Container Diagram&lt;/em&gt;.&lt;/p&gt;

&lt;h4 id=&quot;logistics-and-tooling&quot;&gt;Logistics and Tooling&lt;/h4&gt;

&lt;p&gt;For the next sessions, either the online or in-person format are fairly similar. Please see the &lt;a href=&quot;https://bytesizearchitecturesessions.com/tools/#online&quot;&gt;tools section&lt;/a&gt; of the Bytesize Architecture Sessions website for more information about options.&lt;/p&gt;

&lt;h2 id=&quot;bytesize-architecture-sessions-a-practical-walkthrough-for-bigger-systems&quot;&gt;Bytesize Architecture Sessions: A Practical Walkthrough for Bigger Systems&lt;/h2&gt;

&lt;p&gt;Larger systems tend to have more people involved. The most common case is when there are three to five teams working on a system. The teams might represent Engineering for the whole company or, for bigger organisations, they might represent a department.&lt;/p&gt;

&lt;p&gt;Before diving into the steps, it helps to clarify how people participate. Due to the number of people involved a neutral facilitator is strongly recommended. The facilitator guides the flow of the session, manages time, and ensures balanced participation. Their role is both about keeping the group moving, and creating the conditions for shared understanding. 
Participants with leadership responsibilities join as co‑explorers. They should pay special attention to the language use, how mental models differ across participants and teams, and where boundaries or abstractions are unclear. Noticing and making these explicit is where they can add significant value.&lt;/p&gt;

&lt;h3 id=&quot;before-the-sessions&quot;&gt;Before the Sessions&lt;/h3&gt;

&lt;p&gt;Engage with the organisation’s leadership to learn about who to invite. There should be at most twenty five participants present. Consider:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Overall team size&lt;/li&gt;
  &lt;li&gt;Cross‑functional representation. Include Engineering, QA, Design, Product, and Operations (especially teams handling configuration changes or customisation work)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With larger groups, it’s particularly valuable to do this first session in person, alongside other Design kick off activities. For example, run a &lt;em&gt;Big Picture&lt;/em&gt; &lt;em&gt;EventStorming&lt;/em&gt; on day 1 and run this first session on day 2.&lt;/p&gt;

&lt;p&gt;In addition to selecting the right participants, a few practical setup considerations are needed for the session to run smoothly:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;For a group this size a dedicated facilitator is needed&lt;/li&gt;
  &lt;li&gt;For an in person event, a room large enough to comfortably accommodate all participants. The room should have tables seating five people each&lt;/li&gt;
  &lt;li&gt;Access to a big screen, or alternatively as many large whiteboards as tables, or both!&lt;/li&gt;
  &lt;li&gt;Duration 90min.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;discovery-kick-off-1&quot;&gt;Discovery Kick Off&lt;/h3&gt;

&lt;p&gt;Once the date is set, the participants confirmed, and a facilitator in place, the following is a representative set of steps:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Logistics&lt;/strong&gt;.  In person, setup tables for up to 5 people per table. Once everyone has arrived, redistribute people so that each table has a mix of roles and team membership&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Teach C4&lt;/strong&gt;.  A short overview is best, and the infographic above provides a useful reference. Mention that they are going to try this in the next few minutes&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Goal of the session&lt;/strong&gt;. It’s the same as in the simpler case above: “Create a context diagram of the system as it is right now”. Make sure to mention that when the timer starts, everyone individually will create a diagram, and that when the timer elapses they will have to explain the diagram to the rest of the table.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Alone together&lt;/strong&gt;. Start the timer. Five minutes is a good default. At this point the room should be silent. When the timer elapses, each member of the table will explain the diagram they created to the rest of the table. Everyone else at the table is expected to listen, withholding questions and comments until everyone is done&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Convergence&lt;/strong&gt;. Set a timer for twenty minutes. On a per table basis they create one diagram together.
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Show and Tell&lt;/strong&gt;. A candidate from each table presents their diagram to the room. Ideally, the person who knows least about the system. Set another timer for three minutes and task the groups with cleaning up the diagram and preparing the speaker.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;What to expect&lt;/strong&gt;. It’s usual that the diagrams look different from each other. Often the language is generic, or the words used to describe the different parts of the system don’t match. When the boundaries very unclear, the abstractions between &lt;em&gt;System&lt;/em&gt; and &lt;em&gt;Container&lt;/em&gt; will be blurry. The key is for the participants to understand and bring the abstractions they know of into focus.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Introspection&lt;/strong&gt;. Use sticky notes and a timer to run a short retrospective for the group at large. Identify themes and discuss. Maximum ten minutes long.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The steps above described an in person event. To host this session online, an experienced facilitator is essential.&lt;/p&gt;

&lt;h3 id=&quot;next-sessions-1&quot;&gt;Next Sessions&lt;/h3&gt;

&lt;p&gt;Some considerations for the next Bytesize Architecture Sessions&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Revisit the guest list.  Depending on availability and roles they might be more or less suitable. Consider, are the participants able to contribute meaningfully? Does it help them in their role?&lt;/li&gt;
  &lt;li&gt;Have a strategy to make the outcomes of the sessions accessible to the wider organisation and consider a way to gather feedback&lt;/li&gt;
  &lt;li&gt;Start each Session with a short review of where you left the last time.  A quick overview is a great way to set the scene, then proceed with the goal&lt;/li&gt;
  &lt;li&gt;If hosting online, have a template ready. Include images from the previous Bytesize Architecture Session&lt;/li&gt;
  &lt;li&gt;Help participants see the effects of iteration. How they can point at something in the diagram and understand its current state. This is why the &lt;strong&gt;Introspection&lt;/strong&gt; step at the end is so valuable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The format of each of the Bytesize Architecture Session will follow the pattern of the infographic above. The goal should change according to how far people converge on the &lt;em&gt;System Context Diagram&lt;/em&gt; and then, to the selected &lt;em&gt;Container Diagram&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;It is possible that after working on the &lt;em&gt;Container Diagram&lt;/em&gt;, the &lt;em&gt;System Context Diagram&lt;/em&gt; needs to be updated. This reinforces the idea that the diagrams evolve with the group’s understanding rather than being fixed outputs.&lt;/p&gt;

&lt;h2 id=&quot;outcomes&quot;&gt;Outcomes&lt;/h2&gt;

&lt;p&gt;After a few Sessions the participants have:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Created a model of what they think their system looks like together. If there are unanswered questions or an unfinished diagram, the type of questions surfaced and how the diagram is not complete will make knowledge gaps visible&lt;/li&gt;
  &lt;li&gt;Shared what they know about their systems&lt;/li&gt;
  &lt;li&gt;Heard different perspectives and, ideally, incorporated sections into the model they created together&lt;/li&gt;
  &lt;li&gt;Learned C4 with hands-on experience&lt;/li&gt;
  &lt;li&gt;A suitable setup to continue iterating into deeper insights.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With time, assuming your organisation or teams adopt the practice, you will see the following effects:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Participants know this is a time and place for advice when making significant changes. This requires support from leadership to sustain the practice&lt;/li&gt;
  &lt;li&gt;Participants learn that no one knows everything. This tends to improve psychological safety&lt;/li&gt;
  &lt;li&gt;Designs become more nuanced, as participants get better at modelling&lt;/li&gt;
  &lt;li&gt;Everyone wants to learn DDD 🕶️ 📖&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;common-antipatterns&quot;&gt;Common Anti‑Patterns&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Staying on one discussion for too long. If participants are staying on a topic and not agreeing, perhaps more context is needed. The impasse can be either addressed offline or in a follow up session focusing on that issue only. At minimum, document the issue precisely, and move on towards the goal&lt;/li&gt;
  &lt;li&gt;Focusing on creating the perfect diagram, rather than understanding how the system works&lt;/li&gt;
  &lt;li&gt;Frustration because the diagram is “not finished” and the timer elapsed. Some level of discomfort with this is to be expected, however in this case it’s important to mention that we are constraining on time rather than completion. Indicate that the focus is on learning, understanding, and not the artifact. The models created are reflective of the systems, and those are never finished either&lt;/li&gt;
  &lt;li&gt;Treating Bytesize Architecture Sessions as a meeting instead of a workshop. This can be a problem if there are people that dominate the conversation. These type of issues might require coaching&lt;/li&gt;
  &lt;li&gt;Precisely planning a series of Bytesize Architecture Sessions with expected outcomes for each session. The way people collaborate, requires flexibility and meeting participants where they are at. Having a plan is ok as long as the plan can be updated.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;success-metrics&quot;&gt;Success Metrics&lt;/h2&gt;

&lt;p&gt;These can be useful metrics depending on your issues:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A couple of weeks after a knowledge sharing session, ask participants to explain why a system or decision is the way it is. Not what it does, but &lt;strong&gt;Why&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Track when new joiners stop needing extra context or ask for validation on decisions.&lt;/li&gt;
  &lt;li&gt;Incident response and diagnostic speeds up. How long does it take to identify the root cause, and how many people need to be involved?&lt;/li&gt;
  &lt;li&gt;Track the key-person risk. Identify top N people with the highest domain knowledge concentration in your organisation. Over time, are those same people still the ones with the highest domain knowledge concentration? Why?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Significant changes generally bring a high level of uncertainty. Bytesize Architecture Sessions help by creating a safe space for design, in a deliberate manner, in short and iterative bursts. 
Creating shared models help reduce risk and increase clarity. I have shared what works for me. I encourage you to try it and see how it works for you. Perhaps certain aspects of this practice needs to be adapted for your context in some way. I would be very happy to hear about it.&lt;/p&gt;

&lt;p&gt;The next post will describe how to use Bytesize Architecture Sessions for &lt;a href=&quot;https://github.com/ddd-crew/ddd-starter-modelling-process/blob/master/README.md#define&quot;&gt;Define&lt;/a&gt;. 
Until the next time.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:CoMo&quot;&gt;
      &lt;p&gt;Collaborative modelling is an approach experts, practitioners, and end-users, work together to create, refine, and validate models. Leveraging the diverse perspectives and expertise of the participants to enhance the model’s accuracy, relevance, and usability. By involving a wide range of contributors,it fosters a deeper understanding of complex systems and promotes shared ownership of the outcomes. (Adapted from https://www.michael-ploed.com/collaborative-modeling) &lt;a href=&quot;#fnref:CoMo&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
				<pubDate>Tue, 03 Mar 2026 00:12:00 +0000</pubDate>
				<link>http://roundcrisis.com/2026/03/03/bytesize-for-discovery/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2026/03/03/bytesize-for-discovery/</guid>
			</item>
		
			<item>
				<title>The Making of a Decision - Part 5 - Introducing Decision KP Maps</title>
				<description>&lt;p&gt;So much about decision making is about trust. Trust in the information and knowledge you have, trust in what your colleagues say they will do and how likely they are on delivering on their promises. 
When I was working with a client a few months ago, they had some difficulties progressing&lt;/p&gt;

&lt;p&gt;The series covers the topics described in &lt;a href=&quot;https://www.youtube.com/watch?v=Ie97Oe-t8Wk&quot;&gt;this talk: The Making of a Decision&lt;/a&gt;. This is part 5 of the series about decision making in software systems.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/09/01/making-of-a-decision/&quot;&gt;The Making of a Decision - Part 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/11/19/making-of-a-decision-2/&quot;&gt;The Making of a Decision - Part 2 - Knowledge&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2026/01/15/making-of-a-decision-3/&quot;&gt;The Making of a Decision - Part 3 - Tools for groups&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2026/01/22/making-of-a-decision-4/&quot;&gt;The Making of a Decision - Part 4 - Team and Personal Tools&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;The Making of a Decision - Part 5 - Introducing Decision KP Maps  - This post&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Part 1 of this series explored how power shapes organisational and architectural decision making by reviewing definitions, laws of power and more. Part 2 covered concepts and models relating to Knowledge, what we mean when we say we know something and who has the right to know things. Part 3 and 4 covered decision making tools for different group sizes. This is a post that introduces &lt;strong&gt;Decision KP Map&lt;/strong&gt;, the tool I created as result of learning and discussing so much about the subject.&lt;/p&gt;

&lt;h1 id=&quot;what-is-decision-kp-map&quot;&gt;What is Decision KP Map?&lt;/h1&gt;

&lt;p&gt;The process of making a decision involves people that have varying degrees of the capability to make change and people that have varying degrees of knowledge on the matter, sometimes people have both. 
This type of mapping I’m proposing is something you very likely, already do intuitively. Mapping will help you better understand:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The interactions between the people and the decision&lt;/li&gt;
  &lt;li&gt;The dynamic aspect of the relationship between people involved and&lt;/li&gt;
  &lt;li&gt;Developing patterns and what to do about them&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Decision KP Map is a mapping tool that helps visualise your &lt;strong&gt;subjective&lt;/strong&gt; perception of the community that enables decision making.The &lt;strong&gt;Key People&lt;/strong&gt;, in terms of their &lt;strong&gt;Knowledge and Power&lt;/strong&gt;. Both concepts are the reason for the name of this tool.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Edit 04th March 2026:
Given this definition of stakeholder&lt;sup id=&quot;fnref:StakeholderEW&quot;&gt;&lt;a href=&quot;#fn:StakeholderEW&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;A stakeholder in the architecture of a system is an individual, team, organization, or classes thereof, having an interest in the realization of the system.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Key People are all stakeholders. Meaning that Decision KP Maps is another way to do stakeholder mapping. Thanks Dianing Yudono for your feedback&lt;/p&gt;

&lt;h2 id=&quot;who-is-this-tool-for&quot;&gt;Who is this tool for&lt;/h2&gt;

&lt;p&gt;This tool is especially helpful for people who are part of the decision making process or who are the decision makers themselves. It’s useful for those who value knowledge in a particular context.&lt;/p&gt;

&lt;p&gt;People who do software design, architecture, or have team‑leadership responsibilities are likely to find this tool most useful.&lt;/p&gt;

&lt;h2 id=&quot;a-sample-decision-kp-map&quot;&gt;A sample Decision KP Map&lt;/h2&gt;

&lt;p&gt;Below you’ll find an example map where I added people from history, and others described by roles to help create a baseline.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2026/decision-kp-map-default.png&quot; alt=&quot;Decision KP Map Example&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to read this map&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Capability to make change&lt;/strong&gt;. On the horizontal axis the scale moves from &lt;strong&gt;can’t&lt;/strong&gt; to &lt;strong&gt;can&lt;/strong&gt; make change happen. You might think of it as  a proxy for influence, power and the like. Avoid fixing your view on hierarchy alone, because that gives an incomplete picture. Instead, answer Who is actually able to bring about change in the given context?
  Begin by recognising the individuals who can make change, then examine the factors that enable them.&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Valid and/or accepted knowledge and information&lt;/strong&gt;.The vertical axis denotes a spectrum from &lt;strong&gt;doesn’t have&lt;/strong&gt; to &lt;strong&gt;has&lt;/strong&gt; accepted, valid knowledge. While debating decisions, note the individuals with thorough understanding and note how they have actively enriched the knowledge pool. A common pitfall is to always credit the most senior person; instead, recognise the genuine source of the information.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;People position&lt;/strong&gt;. Where you position people depends on your subjective understanding. What is important is that the whole map is self consistent. A good way to do this is place all the people and then check that all the people are placed somewhere that makes sense when comparing it with others in the map, for example you might think: JP knows as much as QW about this subject, AR is nearly as able to make change as RB but just not as much.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have added historical figures to the map, together with a few roles to illustrate the map’s range:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Katherine_Johnson&quot;&gt;Katherine Johnson&lt;/a&gt;&lt;/strong&gt; @ Crewed NASA space flights team. My knowledge on her role is based on reading online about her work after seeing the film &lt;a href=&quot;https://en.wikipedia.org/wiki/Hidden_Figures&quot;&gt;Hidden Figures&lt;/a&gt;. We can understand that she was uniquely capable as well as extremely limited in capability to make change due to social and cultural constraints. If I had to add her to a map she will be in the top left quadrant.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Don_Syme&quot;&gt;Don Syme&lt;/a&gt;&lt;/strong&gt; @ F# Programming Language Project. Don has the most knowledge about the F# programming language project as well as complete control over the direction of the language… as far as I know. If we were drawing a map about who we should probably involve when it comes to changes to the F# programming language, it would be a good idea to:
    &lt;ol&gt;
      &lt;li&gt;Attempt to validate that Don has the authority assumed and,&lt;/li&gt;
      &lt;li&gt;If incorrect, Don would still have a lot of knowledge and influence on the project. You definitely would want to ask his advice when it comes to decision making in this space. In a case like this, you might add him in some maps and omit on others.&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Intern&lt;/strong&gt;. An intern is someone that is trying to learn the profession. Even if a particular intern is extremely capable, it would be irresponsible to not supervise their work and take either their knowledge or capability to make change for granted.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Propaganda writer&lt;/strong&gt;. Please remember this is an example, very few people within companies act this way on purpose. If you ever had to interact with someone that is writing a piece that is either disinformation (deliberately hiding the truth) or misinformation (incorrect but not clear if deliberate) the result has similar outcomes. It’s harder to make decisions when people like this are in the mix. They might have sufficient capability to make change and push outcomes towards their agenda, based on information you know or suspect to be incorrect.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;how-does-it-work-a-simple-example&quot;&gt;How does it work? A simple example&lt;/h3&gt;

&lt;p&gt;To understand how to create and read a map, please see the following map and description&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2026/d-kp-map1.png&quot; alt=&quot;Initial state&quot; title=&quot;Decision KP Map a simple example&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Upper Portion&lt;/strong&gt; 
   The map shows 🟨Danna P, an Engineer, who has a great deal of knowledge about the decision. This knowledge is accepted and, as far as you know, correct. They also have some ability to make change happen. Although 🟪Bo L outranks 🟨Danna P, 🟨Danna P has slightly more capability to influence change in the context of this decision.&lt;/p&gt;

    &lt;p&gt;Also in this part of the map is 🟪Bo L,a Principal Engineer, who has slightly less knowledge and slightly less capability to make change on this decision.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Left Side&lt;/strong&gt;
   Moving down the vertical axis, we see 🟦Keiko J, an Intern who knows roughly half as much as 🟪Bo L about the subject of the decision and has very little leverage.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Middle Right&lt;/strong&gt;
   At a similar level of accepted knowledge, we have ⬛Miles P, who has some capability to make change in this context. We also have 🟩Geordi Z, an Engineering Manager, who has a great deal of capability to make change happen but does not have much context or knowledge  about the decision.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Lower Middle Right&lt;/strong&gt;
   Finally, we have 🟧Ro H, an Engineering Manager with about the same level of capability to make change as ⬛Miles P. However, their knowledge is incorrect and outdated, and they did not show curiosity about validating it during this interaction.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note: The shape of this map is a common pattern that often appears during unexpected technical incidents, where decisions require coordination between those who understand the problem and those who are positioned to make decisions about it.&lt;/p&gt;

&lt;p&gt;Continuing with the example, a few days have elapsed and things have changed. How? The map below depicts a meeting where things have changed slightly since last time.&lt;/p&gt;

&lt;p&gt;What happened:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;🟪Bo L asked ⬛Miles P, someone 🟩Geordi Z respects at a technical level, to have a chat with 🟩Geordi Z about this decision. This had the effect of levelling up 🟩Geordi Z’s knowledge as well as increasing ⬛Miles P’s capability to make change, due to the influence increase on 🟩Geordi Z.&lt;/li&gt;
  &lt;li&gt;It improved BL’s capability to make change slightly as GL brokered the conversation between ⬛Miles P and 🟩Geordi Z&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/images/2026/d-kp-map2.png&quot; alt=&quot;After a few days &quot; title=&quot;Decision KP Map example after a few days&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;strengths&quot;&gt;Strengths&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Highlight misalignments. It’s a tool to prompt reflection, help you guide stakeholder engagement and discussion, and improve collaboration in decision making. It also helps you question your &lt;a href=&quot;https://en.wikipedia.org/wiki/Chris_Argyris#Work&quot;&gt;ladder of inference&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Dynamic Tracking. Repeated use helps with capturing the dynamic interactions of the decision, which is essential in decision processes.&lt;/li&gt;
  &lt;li&gt;Clear and easy to learn. The core idea is straightforward, and does not require deep technical skills or complex software.&lt;/li&gt;
  &lt;li&gt;Discover patterns. Over time, it can help discover some basic patterns and biases of individuals across decisions. For example, you might notice that when certain people enter the room, knowledge-sharing stops, or specific topics become off-limits. These might be essential to the making of this decision. I will be following up on the patterns that keep repapering in a another post soon.&lt;/li&gt;
  &lt;li&gt;Scale up your leadership team. Mapping can help those new to leadership to navigate decision making, perhaps initially with some coaching. Many people who write code (roles and titles vary) enter decision making with a significant level of technical knowledge but limited understanding of how the rest of the decision making process works. This tool can help them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;limitations&quot;&gt;Limitations&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Ideal for decisions with less than 15 stakeholders. it becomes too hard to track everyone otherwise&lt;/li&gt;
  &lt;li&gt;Mapping takes time. Those who would benefit from this tool the most tend to be in back to back meetings&lt;/li&gt;
  &lt;li&gt;Lack of digital support. Experienced mappers might not feel this pain so much, but for those new to tools like this it can be overwhelming.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;how-to-start-mapping-paper-or-online&quot;&gt;How to start mapping? Paper or Online&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Offline&lt;/strong&gt;. Paper is a low friction solution and preferred by many, harder to share.
    &lt;ul&gt;
      &lt;li&gt;For names, use initials or some code name and a reference page that you can easily move around.  Sticky notes with bluetack has worked well for me&lt;/li&gt;
      &lt;li&gt;If you are adding anything that is not a person to the map, such as arrows or extra context, add it in a different colour.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Online&lt;/strong&gt;:
    &lt;ul&gt;
      &lt;li&gt;Any online board (Miro, tldraw, FigJam, etc) will support this&lt;/li&gt;
      &lt;li&gt;A board per decision - Name board with the problem statement until a decision has been made. When a decision is made, rename the board to reflect the decision.&lt;/li&gt;
      &lt;li&gt;I use a colour per person if the group is small. if two people represent a group I use the same colour&lt;/li&gt;
      &lt;li&gt;I tend to copy the last map and move whatever is needed in the new map&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some people have requested digital support for this tool. It might be worth building, though to do that I would love to know that some of you would use it. Please try mapping with existing tools first and let me know what’s missing.&lt;/p&gt;

&lt;h3 id=&quot;other-uses&quot;&gt;Other uses&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Retrospectives or Project kick-off sessions. I can imagine some scenarios where this might work extremely well, I can also imagine this being a disaster. This is why I advocate this as a solo tool&lt;/li&gt;
  &lt;li&gt;Teaching people who are levelling up. This was mentioned by most of the people trying this tool&lt;/li&gt;
  &lt;li&gt;Share with others what you think it’s happening&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;more-to-do&quot;&gt;More to do&lt;/h2&gt;

&lt;p&gt;These are some areas I haven’t had the chance to investigate yet:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Scaling the practice&lt;/strong&gt;. Decision KP Maps are ideal for decisions that involve ~20 people. It becomes harder to map when mapping more people  in cross-functional groups&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Pair subjective view with data driven metrics&lt;/strong&gt;. To investigate, this is a subjective tool. How could it be used along other feedback and data-driven mechanisms? If you are a manager and keen to try this tool, I would like to talk to you. Please reach out.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Structured guidance on interpretation of the maps&lt;/strong&gt;. Decision KP Map users map similar things in different ways, however there are emerging patterns and there is a lot to learn by collecting and sharing them. 
  Some examples that have already surfaced (I’m starting to think of it as the “pattern zoo”):
    &lt;ul&gt;
      &lt;li&gt;“CxO or &lt;a href=&quot;https://www.launchnotes.com/glossary/hippo-in-product-management-and-operations&quot;&gt;HiPPO&lt;/a&gt;🦛 bomb”.  What should you look for in your map to detect this situation? Are you the HiPPO?&lt;/li&gt;
      &lt;li&gt;The elephant 🐘 into the room. What does a map look like when someone brings a topic everyone knows to be problematic but it’s not possible to discuss?&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;How to use it in sense making scenarios?&lt;/strong&gt; I believe it could be useful in some particular settings, for example in kick-off workshops. However this is something that needs to be tested.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are curious about any of these and would like to try the tool either with or without my guidance, please &lt;a href=&quot;&quot;&gt;reach out&lt;/a&gt; I would be very happy to hear about it.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Through this series we dived into rich concepts, practical examples and tools or models to improve the process of making a decision. In this article I have introduced you to Decision KP Maps. What is it, illustrative examples, strengths and limitation of the mapping technique as well as the work planned to grow the tool.
I have been collecting feedback on the tool usage over the last six months and plan to share of the insights from the pioneers using this tool&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:StakeholderEW&quot;&gt;
      &lt;p&gt;See source https://www.viewpoints-and-perspectives.info/home/stakeholders/ &lt;a href=&quot;#fnref:StakeholderEW&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
				<pubDate>Wed, 04 Feb 2026 00:12:00 +0000</pubDate>
				<link>http://roundcrisis.com/2026/02/04/making-of-a-decision-5/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2026/02/04/making-of-a-decision-5/</guid>
			</item>
		
			<item>
				<title>The Making of a Decision - Part 4 - Team and Personal Tools</title>
				<description>&lt;p&gt;The series covers the topics described in &lt;a href=&quot;https://www.youtube.com/watch?v=Ie97Oe-t8Wk&quot;&gt;this talk: The Making of a Decision&lt;/a&gt;. about decision making in software systems.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/09/01/making-of-a-decision/&quot;&gt;The Making of a Decision - Part 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/11/19/making-of-a-decision-2/&quot;&gt;The Making of a Decision - Part 2 - Knowledge&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2026/01/15/making-of-a-decision-3/&quot;&gt;The Making of a Decision - Part 3 - Tools for groups&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;The Making of a Decision - Part 4 - Team and Personal Tools  - This post&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2026/02/04/making-of-a-decision-5/&quot;&gt;The Making of a Decision - Part 5 - Introducing Decision KP Maps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Part 1 of this series explored how power shapes organisational and architectural decision making by reviewing definitions, laws of power and more. Part 2 covered concepts and models relating to Knowledge, what we mean when we say we know something and who has the right to know things.&lt;/p&gt;

&lt;p&gt;In this post, we will leverage what we learned and turn to tools that help to use these concepts in practice. The following is not a comprehensive list. These are tools I’m familiar with that helped me solve issues in the past. Each tool’s ‘Why use this tool’ section explains how it tackles specific decision-making problems at a high level. For more nuance or extra details please see the resources I linked to or send me some comments or questions.&lt;/p&gt;

&lt;p&gt;I decided to group these tools by the size of the group that it affects, as the decision to adopt them is with different roles.
For each tool, I will include an overview, provide links to learn more and explain how the tool relates to the topics discussed.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2026/tools-group-ind.png&quot; alt=&quot;Tools for teams and individuals&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;within-a-team&quot;&gt;Within a team&lt;/h2&gt;

&lt;h3 id=&quot;bytesize-architecture-sessions&quot;&gt;Bytesize Architecture Sessions&lt;/h3&gt;
&lt;h4 id=&quot;overview&quot;&gt;Overview&lt;/h4&gt;

&lt;p&gt;Bytesize Architecture Sessions are a workshop format that helps teams understand the systems they work on. Each session focuses on a small slice of a system. After a few sessions, your team will be understand their software systems more consistently, grow a common vocabulary and ultimately build tools to design the future together.&lt;/p&gt;

&lt;p&gt;Bytesize Architecture sessions are used in decision-making to facilitate collaborative software design through a structured workshop format that prioritises shared understanding. This approach focuses on cross-functional small groups of eight to ten people engaging in iterative one-hour modelling sessions.&lt;/p&gt;

&lt;p&gt;It can be used in the Discovery phase of decision making for understanding the current state and in the Design phase to support option generation or to investigate each option as a group.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2026/BAS-infographic.png&quot; alt=&quot;What is Bytesize Architecture Sessions&quot; /&gt;
Learn more:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;📹 A Talk: &lt;a href=&quot;https://vimeo.com/842232215&quot;&gt;Knowledge Sharing is Systems Building - Andrea Magnorsky&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;🗒️ Reference Site: &lt;a href=&quot;https://bytesizearchitecturesessions.com/&quot;&gt;Bytesize Architecture Sessions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;🏛️ OPL reference &lt;a href=&quot;https://openpracticelibrary.com/practice/event-storming/&quot;&gt;Open Practice Library: Bytesize Architecture Sessions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;📔Case Study : &lt;a href=&quot;https://bytesizearchitecturesessions.com/news/jean-de-barocchez-documentation/&quot;&gt;Using Bytesize Sessions to Improve Documentation Practices by Jean de Barochez at Payfit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;why-use-this-tool-in-the-context-of-better-decision-making&quot;&gt;Why use this tool, in the context of better decision making&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Easy to learn and introduce: Easy to try, can be a key unlock. Not a big time investment for knowledge sharing.&lt;/li&gt;
  &lt;li&gt;Improve Understanding: The sessions help groups improve their understanding of complex systems. Each participant “tells the story” of what they modelled, allowing the rest of the group to see exactly how their colleagues perceive the system&lt;/li&gt;
  &lt;li&gt;Improving Knowledge Flow: Since documentation alone is often insufficient to carry important design ideas, these sessions bridge the gap through continuous, close connection between team members. By coming together after individual work, the team benefits from the highest level of insight and combined experience of the group&lt;/li&gt;
  &lt;li&gt;Resetting Power Dynamics: “Alone Together” is a key aspect here. By having participants model solutions individually before sharing, the process ensures that no single person’s voice influences or dominates the initial creative phase.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;decision-records&quot;&gt;Decision Records&lt;/h3&gt;

&lt;h4 id=&quot;overview-1&quot;&gt;Overview&lt;/h4&gt;

&lt;p&gt;The idea behind ADRs is to record &lt;em&gt;significant&lt;/em&gt; architectural decisions  in a format that is both concise and based on an accepted template.
Recording decisions helps with making better decisions. As a side effect, there is a quick reference to understand what has been done in the past and why. 
ADRs provide a modular way to capture the rationale, context, and consequences of architecturally significant choices. Specifically designed to address the shortcomings of traditional, large-scale documentation in agile environments.
ADRs should document the specific forces at play. Including technological, political, social, and project specific factors that influenced a decision.&lt;/p&gt;

&lt;p&gt;Learn more:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;🗒️ A post: &lt;a href=&quot;https://web.archive.org/web/20260112225348/https://aws.amazon.com/blogs/architecture/master-architecture-decision-records-adrs-best-practices-for-effective-decision-making/&quot;&gt;Master architecture decision records (ADRs): Best practices for effective decision-making&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;why-use-this-tool-in-the-context-of-better-decision-making-1&quot;&gt;Why use this tool, in the context of better decision making&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Consistent Format. While code and documentation are often insufficient carriers of complex design ideas, ADRs function as a conversation with a future team member. This aspect of the documentation can be modular and version controlled.&lt;/li&gt;
  &lt;li&gt;Record the context of decisions. Even if you cannot follow the full Architecture Advice Process approach, you can begin by recording your decisions. See this great story  &lt;a href=&quot;https://virtualddd.com/facilitating-archdes/systems-change-transparency/&quot;&gt;The Reality of Systems Change: Facilitating Architecture with Transparency&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;personal&quot;&gt;Personal&lt;/h2&gt;

&lt;h3 id=&quot;left-hand-column&quot;&gt;Left Hand Column&lt;/h3&gt;

&lt;p&gt;The Left-Hand Column is a reflective tool developed by Dr Chris Argyris designed to help individuals understand the hidden assumptions and internal dialogues that occur during communication. It is useful for handling difficult conversations, managing awkward meetings, and processing power-related stress. The tool derives from the work on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Chris_Argyris#Work&quot;&gt;ladder of inference&lt;/a&gt; where, given some data, you quickly form views about a person’s predispositions and eventually act accordingly (see video below for further explanation).&lt;/p&gt;

&lt;p&gt;To use this technique, you typically document a conversation by splitting a page into columns:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The Right-Hand Column: What was said and the facts&lt;/li&gt;
  &lt;li&gt;The Left-Hand Column: Your record what you were really thinking and feeling but did not express at the time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The ultimate objective is to become conscious of the dichotomy between words and thoughts. And to challenge your assumptions about why you are interpreting events in a particular way.&lt;/p&gt;

&lt;p&gt;In my practice, I use the left-hand column to note what I think, what I think others might be thinking or note that they are not acting as I expected.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2026/left-side.png&quot; alt=&quot;Left Side Column &quot; /&gt;&lt;/p&gt;

&lt;p&gt;Learn more:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;🗒️ Blog post: &lt;a href=&quot;https://www.joyfulimpact.co/blog/5-tools-for-high-stakes-communication-left-hand-column-right-hand-column&quot;&gt;Tools for High Stakes Communication: Tool #2, Left Hand Column/Right Hand Column by Alex Johnston &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;📹 Ladder of inference: &lt;a href=&quot;https://youtu.be/CsdODSBEeJA&quot;&gt;Ladder of Inference&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;why-use-this-tool-in-the-context-of-better-decision-making-2&quot;&gt;Why use this tool, in the context of better decision making&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Understand power dynamics, starting with self awareness. This tool allows you to pause and inspect your reactions and those of others.&lt;/li&gt;
  &lt;li&gt;Improving Knowledge Flow: Decisions require asking the right questions and understanding the problem from multiple perspectives. By inspecting your internal dialogue, you can identify where communication is breaking down and maybe people are making incorrect assumptions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;influence-mapping&quot;&gt;Influence Mapping&lt;/h3&gt;

&lt;h4 id=&quot;overview-2&quot;&gt;Overview&lt;/h4&gt;

&lt;p&gt;Influence Mapping is a visual tool used to navigate the decision environment surrounding a central decision-maker, or “the D”. It addresses the &lt;a href=&quot;https://www.linkedin.com/posts/charleslambdin_good-work-does-not-go-unnoticed-if-thats-activity-7311063535705300993-zIbO&quot;&gt;“Sir Galahad Fallacy”&lt;/a&gt;, the mistaken belief that technical facts and “better arguments” alone are sufficient to persuade others. Since architectural choices are often a record of hidden power structures, this tool helps externalise complex socio-technical forces.&lt;/p&gt;

&lt;p&gt;Key steps:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Listing and casting: Identifying the authority figure (“D”) and categorising stakeholders.&lt;/li&gt;
  &lt;li&gt;Rating metrics: Plotting individuals on a matrix based on their level of support and their organisational influence.&lt;/li&gt;
  &lt;li&gt;Visualising relationships: Drawing arrows to show influence paths, where line thickness represents “permission”, the level of receptivity one person has toward another’s influence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ultimately, influence mapping helps with understanding that decision-making is about the community around the decision, even if there is one person taking the full responsibility for it. It can help to evolve the broader decision landscape and leverage existing dynamics, ensuring that technical proposals are taken seriously within the organisation’s social context.&lt;/p&gt;

&lt;p&gt;Learn more&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;🗒️ Blog post series: &lt;a href=&quot;https://thelaterallens.substack.com/p/influence-mapping-part-1&quot;&gt;Influence Mapping (Part 1) By Charles Lambdin&lt;/a&gt;- An in-depth series about what is influence and much more. 100% recommended.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;why-use-this-tool-in-the-context-of-better-decision-making-3&quot;&gt;Why use this tool, in the context of better decision making&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Map power flows. A tool that helps with mapping how one subjectively understand power flows.&lt;/li&gt;
  &lt;li&gt;Community around decision. Helps you navigate and understand better the group or community around the decision. You will need to speak with people, now you know who to approach, why and have better questions to ask.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;decision-kp-map&quot;&gt;Decision KP Map&lt;/h3&gt;

&lt;p&gt;Decision KP Map is a mapping tool that helps visualise the subjective perception of the community of decision makers, the Key People,  in terms of their Knowledge and Power.&lt;/p&gt;

&lt;p&gt;It’s a map where you can place your subjective understanding of where people sit in terms of:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;How much accepted knowledge they can access and,&lt;/li&gt;
  &lt;li&gt;How much change they are able to effect.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A Decision KP Map always has a specific context, for example an architectural decision. Over the course of a decision, one would generate multiple maps. People can be added or removed as needed.&lt;/p&gt;

&lt;p&gt;Learn more:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;🗒️ Blog post: [Introducing Decision KP Map] - The post covers what it is, how it works, and most importantly, how can it help you.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;why-use-this-tool-in-the-context-of-better-decision-making-4&quot;&gt;Why use this tool, in the context of better decision making&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Understand and highlight misalignments. An easy to learn tool that helps evaluate your misalignments and question your  &lt;a href=&quot;https://en.wikipedia.org/wiki/Chris_Argyris#Work&quot;&gt;ladder of inference&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Dynamic Tracking: Repeated use helps with capturing the dynamic interactions of the decision, which is essential in real-world decision processes.&lt;/li&gt;
  &lt;li&gt;Teach people new to leadership how to navigate decisions. Many people who write code (roles and titles vary) enter decision‑making with a significant level of technical knowledge but limited understanding of how the rest of the decision‑making process works. This tool can help them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;The purpose of this series has been to dive deeper into the aspects that go into making a decision that are not generally talked about and yet obstruct decisions.
It is easy to think that the best facts are how we make decisions, however this is not what happens in real projects, with real people. So how to understand what happens, and how do we ensure that the best available facts make their way into our decisions? What does “best” mean?
All decisions have a unique and rich context. The learnings and tools described in this series are intended to offer new ways of seeing that context and engaging with it meaningfully.&lt;/p&gt;

&lt;p&gt;See you in the next post!
As usual, please reach out with comments and questions and suggestions for improvements.&lt;/p&gt;

</description>
				<pubDate>Thu, 22 Jan 2026 00:12:00 +0000</pubDate>
				<link>http://roundcrisis.com/2026/01/22/making-of-a-decision-4/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2026/01/22/making-of-a-decision-4/</guid>
			</item>
		
			<item>
				<title>The Making of a Decision - Part 3 - Tools for groups</title>
				<description>&lt;p&gt;This is part 3 of the series about the common problems found when making architectural decisions, their underlying causes and how to address some of those issues with tools. This post covers tools for groups, such as across teams.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/09/01/making-of-a-decision/&quot;&gt;The Making of a Decision - Part 1 - Introduction &amp;amp; Power&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/11/19/making-of-a-decision-2/&quot;&gt;The Making of a Decision - Part 2 - Knowledge&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;The Making of a Decision - Part 3: Tools for Decision Making - Tools for groups (this post)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2026/01/22/making-of-a-decision-4/&quot;&gt;The Making of a Decision - Part 4 - Team and Personal Tools&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2026/02/04/making-of-a-decision-5/&quot;&gt;The Making of a Decision - Part 5 - Introducing Decision KP Maps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Part 1 of this series explored how power shapes organisational and architectural decision making by reviewing definitions, laws of power and more. Part 2 covered concepts and models relating to Knowledge, what we mean when we say we know something and who has the right to know things.&lt;/p&gt;

&lt;p&gt;In this post, we will leverage what we learned and turn to tools that help to use these concepts in practice. The following is not a comprehensive list. These are tools I’m familiar with that helped me solve issues in the past. Each tool’s ‘Why use this tool’ section explains how it tackles specific decision-making problems at a high level. For more nuance or extra details please see the resources I linked to or send me some comments or questions.&lt;/p&gt;

&lt;p&gt;I decided to group these tools by the size of the group that it affects, as the decision to adopt them is with different roles.
For each tool, I will include an overview, provide links to learn more and explain how the tool relates to the topics discussed.&lt;/p&gt;

&lt;p&gt;As a side note, I wanted to add that describing a tool in a paragraph or so, is very hard. How to make justice to what comes to hundreds if not thousands of hours of work that went into creating these facilitation tools?&lt;/p&gt;

&lt;h2 id=&quot;across-teams&quot;&gt;Across teams&lt;/h2&gt;

&lt;h3 id=&quot;the-architecture-advice-process&quot;&gt;The Architecture Advice Process&lt;/h3&gt;

&lt;h4 id=&quot;overview&quot;&gt;Overview&lt;/h4&gt;

&lt;p&gt;The Architecture Advice Process is easy to remember and not so simple (yet very rewarding) to implement. From the book:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;A single rule: anyone (a development team member or someone playing a cross-team architecture role) can take (select a decision option) and communicate an architectural decision as long as during the option-making stage, they seek advice from:&lt;/p&gt;

  &lt;p&gt;Everyone who will be meaningfully affected by the decision
Architecture Advice Process
   People who have expertise in the area in which the decision is being taken&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Please note that the decision taker is not obligated to agree or follow the advice - they are required to listen and record the advice.&lt;br /&gt;
To support the Architecture Advice Process it’s useful to use Architecture Decision Records (ADRs), Architecture Advisory Forum (AAF), collectively sourced Architecture Principles and a Technology Radar.&lt;/p&gt;

&lt;p&gt;Learn more:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;📖 Book: &lt;a href=&quot;https://facilitatingsoftwarearchitecture.com/&quot;&gt;Facilitating Software Architecture&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;🗒️ A post: &lt;a href=&quot;https://martinfowler.com/articles/scaling-architecture-conversationally.html&quot;&gt;Scaling the Practice of Architecture, Conversationally&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;📹 A video: &lt;a href=&quot;https://www.youtube.com/watch?v=zp9Go2ChAdw&quot;&gt;A Commune in the Ivory Tower: A New Approach to Architecture - Andrew Harmel-Law&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;👩‍💼 Case study: &lt;a href=&quot;https://martinfowler.com/articles/xapo-architecture-experience.html&quot;&gt;Decentralizing the Practice of Architecture at Xapo Bank&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A related book worth checking out is &lt;a href=&quot;https://continuousarchitecture.com/&quot;&gt;Continuous Architecture in Practice&lt;/a&gt;. The book provides practical guidance on making architectural decisions incrementally, aligning architecture with agile and DevOps practices, and keeping architecture relevant in fast-moving development environments.&lt;/p&gt;

&lt;h4 id=&quot;why-use-this-tool-in-the-context-of-better-decision-making&quot;&gt;Why use this tool? In the context of better decision making&lt;/h4&gt;

&lt;p&gt;The Architecture Advice Process can help organisations by giving guidance on how to implement ideas that are already familiar to most, but many are inexperienced applying them. You can expect:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Removing bottlenecks. Both top down architecture and hands-on approaches block on people with authority to make decisions. By rebalancing the power dynamics of decision making it is possible to share expertise and remove bottlenecks. If you are curious about what is like to introduce this practise see &lt;a href=&quot;https://virtualddd.com/facilitating-archdes/team-led-architecture-advice-process/&quot;&gt;Elena Stojmilova experience&lt;/a&gt; and &lt;a href=&quot;https://virtualddd.com/facilitating-archdes/architects-disagreement-team-decision/&quot;&gt;The Architect’s Dilemma: What to Do When You Disagree With a Team’s Decision&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Accountability and responsibility combined. When someone outside a team makes a decision for the team. The implementing team may not feel responsible for the outcome. They might not even implement the decision. This decentralised practice ensures that the person with the  need is also the one accountable for the result. The accountability acts as a necessary brake when required.&lt;/li&gt;
  &lt;li&gt;Open access learning. Anyone interested in a decision can read ADRs or attend the AAF to learn more about how a decision happen.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;team-topologies&quot;&gt;Team Topologies&lt;/h3&gt;

&lt;h4 id=&quot;overview-1&quot;&gt;Overview&lt;/h4&gt;

&lt;p&gt;Team Topologies is an approach that helps with structuring teams and their interactions by focusing on cognitive load as well as how and when handovers happen. It defines four forms of teams and three modes of team interactions. Having these  patterns available to discuss organisational design helps by providing a clear language to design current as well as possible alternate future states.&lt;/p&gt;

&lt;p&gt;Learn more:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;📖 Book: &lt;a href=&quot;https://teamtopologies.com/&quot;&gt;Team Topologies&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;🗒️ A post: &lt;a href=&quot;https://teamtopologies.com/key-concepts&quot;&gt;Team Topologies Key Concepts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;📹 A video: &lt;a href=&quot;https://teamtopologies.com/videos-slides/2019/07/10/monoliths-vs-microservices-is-missing-the-point-start-with-team-cognitive-load-does-eur-2019&quot;&gt;Monoliths vs Microservices is Missing the Point - Start with Team Cognitive Load - Matthew Skelton &amp;amp; Manuel Pais&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;why-use-this-tool-in-the-context-of-better-decision-making-1&quot;&gt;Why use this tool, in the context of better decision making&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Impact of Conway’s law. “.Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations.” Melvin E. Conway, How Do Committees Invent? Team topologies gives you a tool to leverage this by designing communication structures based on value delivery.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Team autonomy. Organising teams is hard, this technique helps with creating autonomous teams that are aligned on value creation. In combination with the Architecture Advice Process this technique can help unblock teams.&lt;/li&gt;
  &lt;li&gt;Knowledge sharing within teams with high autonomy is high. Specifically, creating teams to increase knowledge flow is a huge value unlock.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;eventstorming&quot;&gt;EventStorming&lt;/h3&gt;

&lt;h4 id=&quot;overview-2&quot;&gt;Overview&lt;/h4&gt;

&lt;p&gt;EventStorming is a collaborative domain modelling tool that helps understand and design complex systems by mapping out  Domain Events on a timeline. It’s perfect for kicking off strategic activities and enable a group of people to get in-depth understanding of a domain. It has three well known forms: Big Picture, Process Modelling and Design for different kinds of settings.&lt;/p&gt;

&lt;p&gt;See below a timelapse of big picture EventStorming&lt;/p&gt;
&lt;video style=&quot;max-width: 100%; height: auto;&quot; controls=&quot;&quot; autoplay=&quot;&quot; loop=&quot;&quot; muted=&quot;&quot;&gt;
  &lt;source src=&quot;/abstracts/adaconf-2025-workshop-timelapse.mp4&quot; type=&quot;video/mp4&quot; /&gt;
  Your browser does not support the video tag.
&lt;/video&gt;

&lt;p&gt;Learn more:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;📹 A video: &lt;a href=&quot;https://www.youtube.com/watch?v=1i6QYvYhlYQ&quot;&gt;50,000 Orange Stickies Later - Alberto Brandolini&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;📖 Book: &lt;a href=&quot;https://leanpub.com/introducing_eventstorming&quot;&gt;Introducing EVentStorming&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;🗒️ A post: &lt;a href=&quot;https://openpracticelibrary.com/practice/event-storming/&quot;&gt;OPL: Event Storming&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Another great book on this is &lt;a href=&quot;https://leanpub.com/eventstorming_handbook&quot;&gt;The EventStorming Handbook&lt;/a&gt; by Paul Rayner.&lt;/p&gt;

&lt;h4 id=&quot;why-use-this-tool-in-the-context-of-better-decision-making-2&quot;&gt;Why use this tool, in the context of better decision making&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Probably the fastest way for a large group to get cohesive understanding of what the system currently does.&lt;/li&gt;
  &lt;li&gt;It allows you to learn both about details and about the big picture.&lt;/li&gt;
  &lt;li&gt;When there are power issues, they tend to surface during the workshop. These are visible throughout but they become especially visible in the voting phase of the workshop.&lt;/li&gt;
  &lt;li&gt;Synchronising Fragmented Knowledge. EventStorming forces participants from different backgrounds to build a consistent timeline together, ensuring no single person’s incomplete version of the story dominates the decision. Probably the fastest way to establish current state.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;more-to-come&quot;&gt;More to come…&lt;/h2&gt;

&lt;p&gt;I hope you enjoyed this post about tools to help with architectural decision making. I would love to hear from you if you have used these tools, what worked for you and what didn’t.
The next post is about tools for smaller groups of people.&lt;/p&gt;

</description>
				<pubDate>Thu, 15 Jan 2026 00:12:00 +0000</pubDate>
				<link>http://roundcrisis.com/2026/01/15/making-of-a-decision-3/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2026/01/15/making-of-a-decision-3/</guid>
			</item>
		
			<item>
				<title>LAST Conference Melbourne - November 2025</title>
				<description>&lt;p&gt;I ran a workshop at &lt;a href=&quot;https://www.meetup.com/tech-leaders-collective/&quot;&gt;LAST Conference&lt;/a&gt; on the 21th November. 
It was my first LAST conference,  it was an a great event however it will be my last. Don’t worry! It will be my last one because they have decided to rebrand the conference to be Signal Not Noise.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2025/last-sonal.png&quot; alt=&quot;A nice picture of Andrea by Sonal Premi&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:7397466149761867776/&quot;&gt;source&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For those of you that attended and requested the slides, or just curious:&lt;/p&gt;

&lt;object data=&quot;https://www.roundcrisis.com/presentations/LAST-11-2025-Bytesize-Sessions.pdf&quot; width=&quot;600&quot; height=&quot;600&quot; type=&quot;application/pdf&quot;&gt;&lt;/object&gt;

&lt;p&gt;I hope to update this post soon with my notes and pictures from the talks and workshop I attended, which I really enjoyed. A special thanks to &lt;a href=&quot;https://www.linkedin.com/in/micheleplayfair/&quot;&gt;Michelle Playfair&lt;/a&gt; for suggesting this conference and the great team making LAST happen: Lisa Jacob and Ed Wong.&lt;/p&gt;
</description>
				<pubDate>Sat, 22 Nov 2025 00:10:00 +0000</pubDate>
				<link>http://roundcrisis.com/2025/11/22/first-last/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2025/11/22/first-last/</guid>
			</item>
		
			<item>
				<title>The Making of a Decision - Part 2- Knowledge</title>
				<description>&lt;p&gt;This is part 2 of the series about the common problems found when making architectural decisions, their underlying causes and how to address some of those issues with tools. This is part 2, all about what it means to know something, what are useful models to think about knowing something and whose knowledge is accepted. This series covers the topics described in &lt;a href=&quot;https://www.youtube.com/watch?v=Ie97Oe-t8Wk&quot;&gt;this talk&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/09/01/making-of-a-decision/&quot;&gt;The Making of a Decision - Part 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;The Making of a Decision - Part 2 - This article&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2026/01/15/making-of-a-decision-3/&quot;&gt;The Making of a Decision - Part 3 - Tools for groups&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2026/01/22/making-of-a-decision-4/&quot;&gt;The Making of a Decision - Part 4 - Team and Personal Tools&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2026/02/04/making-of-a-decision-5/&quot;&gt;The Making of a Decision - Part 5 - Introducing Decision KP Maps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Part 1 of this series explored how power shapes organisational and architectural decision making by reviewing definitions, laws of power and more. This article focuses on knowledge.&lt;/p&gt;

&lt;p&gt;We need to know and understand the context to build good systems. What does it mean to know something? What does it mean to know it in the context of an architectural and system design decision?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2025/kp-ada-talk.png&quot; alt=&quot;ingredients-of-a-decision&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“Knowledge sharing is (an essential task of) systems building”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;/2023/03/31/knowledge-sharing-as-systems-building/&quot;&gt;Knowledge sharing is systems building (March 2023)&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;understanding-knowledge-the-dikw-model&quot;&gt;Understanding Knowledge: The DIKW Model&lt;/h2&gt;

&lt;p&gt;I spoke with &lt;a href=&quot;https://www.linkedin.com/in/dawnahukanna/&quot;&gt;Dawn Ahukanna&lt;/a&gt; when preparing this talk. She introduced me to the DIKW pyramid as a good starting model for reasoning about knowledge.&lt;/p&gt;

&lt;p&gt;The DIKW model makes it clear that context is the bridge between data and insight. Data turns into information only when it’s interpreted within a relevant context, and it becomes knowledge when that information is applied repeatedly to gain experience. At the top of the pyramid sits wisdom, the least developed layer, demanding moral deliberation and the ability to apply knowledge across situations.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2025/dikw-p.png&quot; alt=&quot;Data Information Knowledge Wisdom Pyramid&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;applying-dikw-a-practical-example&quot;&gt;Applying DIKW: A Practical Example&lt;/h3&gt;

&lt;p&gt;This model might be a good starting point for everyday decision making. For example, imagine you learn that a library your organisation heavily depends on has changed its licence and will soon require a large fee for commercial usage. How can the DIKW model help you guide some of your next steps?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Data. The facts&lt;/strong&gt;.  The licence change to be introduced in the next version includes a large fee for usage in commercial settings.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Information. Adding context&lt;/strong&gt;. The raw facts are interpreted and linked to the organisation’s own environment. For example, in the near future, the organisation will be liable to pay a significant amount to keep using this library. At this point you should know exactly the cost for a given period. Perhaps you would also know the cost of migrating to another library, although the figure might not be precise. Members of the organisation understand what changed, where it matters, when it will start affecting the system and why.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Knowledge. Understanding and gaining deeper insights&lt;/strong&gt;. With the contextualised information, some resulting activities might be:
    &lt;ul&gt;
      &lt;li&gt;Conducting a survey of alternative libraries to find viable drop‑in replacements&lt;/li&gt;
      &lt;li&gt;Estimating the cost of replacing the library across the organisation&lt;/li&gt;
      &lt;li&gt;Considering security risks associated with onboarding a new library&lt;/li&gt;
      &lt;li&gt;Looking back at a similar licence changes and its effects within the organisation&lt;/li&gt;
      &lt;li&gt;Discussing with product owners, operations, finance, etc to understand acceptable service interruption or other disruptions&lt;/li&gt;
      &lt;li&gt;Paying the licence fee&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;These activities would help build a coherent body of knowledge: the organisation now knows why the change is problematic, how severe the impact could be, and what realistic options exist.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Wisdom. Judgement informed by values and strategy over time&lt;/strong&gt;. Based on knowledge, the organisation is able to exercise broader judgement leveraging their people. At this point you might consider:
    &lt;ul&gt;
      &lt;li&gt;Creating policies. To avoid future vendor lock‑in, and another policy to monitor critical dependencies with a regular cadence&lt;/li&gt;
      &lt;li&gt;If migration to a new library is necessary, provide default paths while recognising that this might not suit all teams and prepare for the extra cost in time and money&lt;/li&gt;
      &lt;li&gt;Notifying customers. If it’s deemed necessary, with a brief notice explaining the migration and reaffirming the commitment to security and reliability&lt;/li&gt;
      &lt;li&gt;Updating the dependency‑management operating procedure. Reviewing whether a mandatory licence‑compatibility check should be required whenever a major version bump is announced&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;Wisdom here combines technical facts with ethical, financial and strategic considerations, producing a holistic stance rather than a reactionary fix.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For an extensive analysis of the DIKW pyramid please see: &lt;a href=&quot;https://www.academia.edu/38656728/The_wisdom_hierarchy_representations_of_the_DIKW_hierarchy&quot;&gt;The wisdom hierarchy: representations of the DIKW hierarchy- Jennifer Rowley Bangor Business School, University of Wales, Bangor, UK&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The DIKW model gives us a structure for understanding knowledge. The people involved in deriving it are  &lt;strong&gt;Knowledge Workers&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;knowledge-workers&quot;&gt;Knowledge Workers&lt;/h2&gt;

&lt;p&gt;People who create software systems are knowledge workers. It’s very likely the person reading this is a knowledge worker.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Knowledge workers are workers whose main capital is knowledge. These are workers whose job is to “think for a living”.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;source: Thinking For A Living: How to Get Better Performance and Results From Knowledge Workers. Davenport, Thomas H. (2005).&lt;/p&gt;

&lt;p&gt;Our output is primarily thinking. The artifacts we create are in support of that thinking. Our capital, our stock, is the things we know. In the context of an organisation, knowledge work is applying knowledge in such a way that solves perceived or real customer problems.&lt;/p&gt;

&lt;p&gt;Given that our main capital is knowledge, how can we share it effectively? How can we reason about using it in the most useful and innovative ways?&lt;/p&gt;

&lt;h2 id=&quot;a-systems-lens&quot;&gt;A Systems Lens&lt;/h2&gt;

&lt;p&gt;As Donella Meadows wrote in her book Thinking in Systems:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“A system stock is just what it sounds like: a store, a quantity of material or information that has built up over time. It may be a population, an inventory, the wood in a tree, the water in a well, the money in a bank… Stocks change over time through the actions of flows, usually actual physical flows into or out of a stock–filling, draining, births, deaths, production, consumption, growth, decay, spending, saving. Stocks, then, are accumulations, or integrals, of flows.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is surprising that as we are building software systems, we rarely apply systemic concepts to our problems, including knowledge management. Diana Montalion addresses this in her book &lt;a href=&quot;https://learningsystemsthinking.com/&quot;&gt;Learning Systems Thinking&lt;/a&gt;. In chapter 6, she invites us to consider:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Knowledge Stock&lt;/strong&gt;: This refers to the store of knowledge a knowledge worker has developed or can access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Knowledge Flow&lt;/strong&gt;: The ability to transfer knowledge between people and people and systems in ways that change and shift the system in an effective way.&lt;/p&gt;

&lt;p&gt;As an industry we tend to highly value the &lt;em&gt;stock&lt;/em&gt; of knowledge, and not so much &lt;em&gt;flow&lt;/em&gt;. Without knowledge &lt;em&gt;flow&lt;/em&gt; it would be impossible to build systems. Reading further on this I discovered &lt;em&gt;flow&lt;/em&gt; is essential to innovation.&lt;/p&gt;

&lt;h3 id=&quot;innovation&quot;&gt;Innovation&lt;/h3&gt;

&lt;p&gt;Most organisations actively pursue innovation in what makes them unique, as a way to ensure their growth and longevity. Given how critical innovation is to organisational survival, researchers have extensively studied what makes organisations innovative. Multiple papers examine the relationship between knowledge sharing and innovation. The results are consistent. As one study clearly states:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“Knowledge transfer among employees is thought to be crucial determinant of an organisation’s capacity to utilise new knowledge and innovate.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Source: Relationships between knowledge inertia, organizational learning and organization innovation by Shu-hsien Liao, Wu-Chen Fei, Chih-Tang Liu&lt;/p&gt;

&lt;p&gt;As an industry, we have known for many decades that the need for knowledge transfer is essential to build and maintain complex software systems.&lt;/p&gt;

&lt;h2 id=&quot;historic-lens-continuity-of-the-theory&quot;&gt;Historic Lens: Continuity of the “Theory”&lt;/h2&gt;

&lt;p&gt;Peter Naur’s seminal paper from 1985, &lt;em&gt;Programming as Theory Building&lt;/em&gt;, talks about the importance of people carrying the theory of the program or system:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;” Thus, again, the program text and its documentation has proven insufficient as a carrier of some of the most important design ideas”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I want to stress that the paper focuses on core design ideas of a program. 
The paper continues:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“The conclusion seems inescapable that at least with certain kinds of large programs, the continued adaptation, modification and correction of errors in them, is essentially dependent on a certain kind of knowledge possessed by a group of programmers who are closely and continuously connected with them.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We’ve known for over forty years that stable teams are essential to maintaining the program theory, especially important as systems grow more complex. Yet as an industry, we keep repeating the same Sisyphean cycle, and act surprised each time the boulder rolls back down. Ironically, we do this in the name of cost effectiveness.&lt;/p&gt;

&lt;h2 id=&quot;the-hidden-barrier-who-gets-to-know&quot;&gt;The Hidden Barrier: Who Gets to Know?&lt;/h2&gt;

&lt;p&gt;Throughout this article, we’ve discussed how knowledge transforms into wisdom and flows through organisations. Do organisations accept knowledge from everyone within?  Whose knowledge is deemed legitimate in the first place?&lt;/p&gt;

&lt;p&gt;This is an ethical amd practical concern too, directly impacting decision quality. As Iris Meredith explores in &lt;a href=&quot;https://deadsimpletech.com/blog/epistemology&quot;&gt;“Who has permission to know things?”&lt;/a&gt;, corporate epistemology determines which voices are heard and which expertise is valued. When organisations systematically invalidate knowledge they don’t just create workplace frustration, they cut themselves off from crucial insights.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“Knowledge is largely defined and controlled by those in power”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This structural barrier is why many organisations experience sudden “explosions”, accumulated resentment and overlooked expertise finally surfacing when problems become unavoidable. Building better decision making systems requires us to consciously examine: Whose knowledge are we excluding? What is it costing us?&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;The DIKW model provides a useful framework for moving from data to wisdom.
Understanding knowledge workers and the importance of knowledge flow matters for innovation and outcomes, yet many organisations have yet to fully grasp this. At the intersection of knowledge and power sits a crucial question - whose knowledge is accepted? When changing an entire organisational culture proves difficult, recognising the barriers to knowledge sharing offers a practical starting point.
Stable teams are essential for preserving the “information theory”, or domain knowledge, of a system. When seeking better ways to manage information, preventing its loss in the first place is remarkably efficient.&lt;/p&gt;

&lt;p&gt;As a side note, I’ve long held the intuition that a key indicator of an organisation’s health is the time its people dedicate to learning, particularly when they learn together about their systems, and keep thinking of ways to validate or invalidate this intuition. If you have thoughts or comments about this or anything to do with this article please let me know.&lt;br /&gt;
I hope you enjoyed the second part of “The making of a decision”. The next post will be about tools that we can use to improve our decision making in terms of knowledge and power.&lt;/p&gt;

&lt;h2 id=&quot;resources-and-extra-reading-materials&quot;&gt;Resources and Extra Reading Materials&lt;/h2&gt;

&lt;h3 id=&quot;core-concepts&quot;&gt;Core Concepts&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.academia.edu/38656728/The_wisdom_hierarchy_representations_of_the_DIKW_hierarchy&quot;&gt;The wisdom hierarchy: representations of the DIKW hierarchy- Jennifer Rowley Bangor Business School, University of Wales, Bangor, UK&lt;/a&gt; This paper revisits the Data–information–knowledge–wisdom (DIKW) hierarchy by looking at how different textbooks explain the hierarchy in a number of widely read textbooks, and analysing their statements about the nature of data, information, knowledge, and wisdom.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;link&quot;&gt;Programming as Theory Building&lt;/a&gt; - Peter Naur (1985). Seminal paper on the importance of maintaining program theory through stable teams.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://mentrixgroup.com/mentrix-school-of-systems&quot;&gt;Learning Systems Thinking&lt;/a&gt; - Diana Montalion. Explores systemic approaches to knowledge in organizations.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;knowledge-and-power&quot;&gt;Knowledge and Power&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://deadsimpletech.com/blog/epistemology&quot;&gt;Who has permission to know things?&lt;/a&gt; - Iris Meredith. Explores how corporate epistemology and power structures determine whose knowledge is valued.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;decision-making&quot;&gt;Decision Making&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://virtualddd.com/sessions/slow-down-to-speed-up-your-decision-making-gien-verschatse/&quot;&gt;Slow down to speed up your decision-making&lt;/a&gt; - Gien Verschatse&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;related-research&quot;&gt;Related Research&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;link&quot;&gt;Relationships between knowledge inertia, organizational learning and organization innovation&lt;/a&gt; - Shu-hsien Liaoa, Wu-Chen Fei, Chih-Tang Liu. On knowledge transfer as a determinant of innovation capacity.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.researchgate.net/publication/318667785_Charisma_in_Everyday_Life_Conceptualization_and_Validation_of_the_General_Charisma_Inventory&quot;&gt;Charisma in Everyday Life: Conceptualization and Validation of the General Charisma Inventory&lt;/a&gt; - Konstantin O. Tskhay et al., University of Toronto.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Wed, 19 Nov 2025 00:12:00 +0000</pubDate>
				<link>http://roundcrisis.com/2025/11/19/making-of-a-decision-2/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2025/11/19/making-of-a-decision-2/</guid>
			</item>
		
			<item>
				<title>The Making of a Decision - Part 1 - Intro &amp; Power</title>
				<description>&lt;p&gt;This series of posts goes over the topics described in &lt;a href=&quot;https://www.youtube.com/watch?v=Ie97Oe-t8Wk&quot;&gt;this talk&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The other posts in the series:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;The Making of a Decision - Part 1 - Intro &amp;amp; Power&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2025/11/19/making-of-a-decision-2/&quot;&gt;The Making of a Decision - Part 2 - Knowledge&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2026/01/15/making-of-a-decision-3/&quot;&gt;The Making of a Decision - Part 3 - Tools for groups&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2026/01/22/making-of-a-decision-4/&quot;&gt;The Making of a Decision - Part 4 - Team and Personal Tools&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2026/02/04/making-of-a-decision-5/&quot;&gt;The Making of a Decision - Part 5 - Introducing Decision KP Maps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nearly 30 years ago, I had a great opportunity that might have changed my life in terms of education and work opportunities. The decision, outside my control, didn’t go my way. My family decided that they couldn’t support it. Over time I’ve come to understand their reasoning, though it was difficult to accept when it affected my future far more than theirs. Programming helped me reclaim a sense of agency. I could create something out of nothing.&lt;/p&gt;

&lt;p&gt;That sense of freedom and agency diminished as I moved to larger, more complex projects with bigger teams. As software systems grow, they become difficult to change, and more people are involved in making those changes. Remember:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“These decisions are a record of the power structures and the feedback loops that got it there.” -Andrew Harmel-Law&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Issues with decision making are more pervasive in the bigger projects, I found again and again issues such as: strong biases for a particular decision, not validating inputs or outcomes, complex processes that promised safety but didn’t deliver and a lot more. The issues were recurring but no clear pattern emerged. People often attribute these failures to ‘politics,’ lack of technical experience, or key personnel departures. These reasons seem to be about dealing with the emotional cost of the decision rather than the underlying problem. I needed to understand more about what is happening and why. Ideally learn about ways to address some of the challenges.&lt;/p&gt;

&lt;p&gt;As I started mapping how the people I’ve worked with (and myself) make decisions and what are the types of activities involved, I noticed that there were two key concepts that we use a lot but seem to mean different things to different people: knowledge and power.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2025/kp-ada-talk.png&quot; alt=&quot;ingredients-of-a-decision&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Power is uncomfortable to discuss but essential to understand: learning about power is essential to be effective, to be taken seriously and to not be taken advantage of.&lt;/p&gt;

&lt;p&gt;There are two key working&lt;sup id=&quot;fnref:power&quot;&gt;&lt;a href=&quot;#fn:power&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; definitions of power that I find useful:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Power With&lt;/strong&gt; (Mary Parker Follett)&lt;sup id=&quot;fnref:follett&quot;&gt;&lt;a href=&quot;#fn:follett&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;: “The ability to make things happen, to be a causal agent, to initiate change.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Power Over&lt;/strong&gt;: “The ability to make others do as you would have them do.”&lt;/p&gt;

&lt;h3 id=&quot;sources-of-power&quot;&gt;Sources of Power&lt;/h3&gt;

&lt;p&gt;I found the treatment from the book “The Dawn of Everything” most complete and relatable. When transposing the ideas about sources of power from the book over current organisations, we might end up with:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authority&lt;/strong&gt;: In organisations, this manifests as economic coercion rather than physical force. It’s the power to fire, demote, or economically punish employees. It can manifest in access control. HR departments and security functions institutionalise this form of control, creating systems of compliance through the implied threat of economic harm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Charisma&lt;/strong&gt; operates through leadership appeal, inspirational vision, and personal influence networks. This manifests in leaders who can motivate and direct others through force of personality, compelling vision, or personal magnetism, regardless of their formal position in the hierarchy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Access to Knowledge&lt;/strong&gt; appears as information asymmetry and expertise-based authority. Senior management controls strategic information, financial data, and decision-making processes that employees cannot access. Experts wield power through specialised knowledge, whilst administrative systems create bureaucratic gatekeeping around information flow. This mirrors bureaucracy as a form of control over information as described in “The Dawn of Everything”. Knowledge hoarding can become a tool for maintaining hierarchical advantage.&lt;/p&gt;

&lt;p&gt;For a study of Charisma see
&lt;a href=&quot;https://www.researchgate.net/publication/318667785_Charisma_in_Everyday_Life_Conceptualization_and_Validation_of_the_General_Charisma_Inventory&quot;&gt;Charisma in Everyday Life: Conceptualization and Validation of the General Charisma Inventory Konstantin O. Tskhay, Rebecca Zhu, Christopher Zou, and Nicholas O. Rule University of Toronto&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;laws-of-power&quot;&gt;Laws of Power&lt;/h3&gt;

&lt;p&gt;There are many books with titles such as: “The n Laws of Power” or similar; they tend to be books about exercising influence, which can be useful. What I’m looking for when I read about the laws of power is understanding why and when power flows. So far I’ve found this to be a useful set.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Power is dynamic. One thing you know for sure is that it will keep changing.&lt;/li&gt;
  &lt;li&gt;Power is like water. Eric Liu’s metaphor of how power is like water and your organisation is the sponge is very memorable. More from Eric on this:
    &lt;blockquote&gt;
      &lt;p&gt;”.. power is like water. It flows all around us at all times. Sometimes it takes the liquid form of politics-in-action, a turbulent flow with crosscurrents and strong undertows. Sometimes it takes the solid form of settled law: policy is power frozen. Sometimes it is like vapor in the air, invisibly shaping the climate and our behavior in just the way beliefs or ideology or emotions do.” – You’re More Powerful than You Think. A Citizen’s Guide to Making Change Happen By Eric Liu&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;Power compounds: If you have power you tend to get more power. Small exercises of power create capacity for larger ones.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hope you enjoyed this first part of “The making of a decision”, the next post will be about knowledge.
If you have any comments or questions please reach out via my social links&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:power&quot;&gt;
      &lt;p&gt;There is a lot of contention on the definition of power, these are some ways to think about the concept that I find useful &lt;a href=&quot;#fnref:power&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:follett&quot;&gt;
      &lt;p&gt;If you have never heard of Mary Parker-Follett, this is a day that can change you. Parker-Follett developed revolutionary ideas about collaborative leadership, power-sharing, and organizational dynamics decades before they became mainstream business concepts. Her central theory, that individuals and society shape each other equally, came from her work in community centers, not the boardroom. Where Taylor and Ford saw hierarchy, Follett saw networks. Read more about it in Dynamic Administration, a book that collected the works by Mary Parker-Follet &lt;a href=&quot;#fnref:follett&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
				<pubDate>Mon, 01 Sep 2025 00:12:00 +0000</pubDate>
				<link>http://roundcrisis.com/2025/09/01/making-of-a-decision/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2025/09/01/making-of-a-decision/</guid>
			</item>
		
			<item>
				<title>Interesting learning resources - August 2025</title>
				<description>&lt;p&gt;These resources span from practical case studies in team scaling to theoretical frameworks for understanding programming languages, unified by a common thread: how we structure our thinking to solve hard problems. 
Whether examining ProTime’s journey from feature teams to domain-owned teams, exploring different approaches to teaching programming concepts, or critically evaluating the models that shape our decision-making, each resource helps navigating the experience of building software.&lt;/p&gt;

&lt;h3 id=&quot;scaling-teams-with-ownership-a-protime-case-study&quot;&gt;Scaling Teams with Ownership: A ProTime case study&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://aardling.eu/en/insights/scaling-teams-with-ownership-a-protime-case-study&quot;&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A great example of using DDD. ProTime faced scaling challenges in 2023 as they grew  across 40 countries. Their initial “feature teams” model—where small teams worked on single features for 4-6 months before moving to different features—began showing stress with unpredictable delivery times, spread-thin domain knowledge, and a “everyone owns everything” mentality that devolved into “no one owns anything.” This transformation involved workshops across the organisation to redefine team responsibilities and ensure teams were involved earlier in the design process. Six months later, teams with stronger domain ownership showed improved delivery predictability, clearer capacity insights, and better alignment between team capabilities and business goals.&lt;/p&gt;

&lt;h3 id=&quot;operational-and-denotational-strategies-by--noel-welsh&quot;&gt;Operational and Denotational Strategies by  Noel Welsh&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://noelwelsh.com/posts/operational-denotational-understanding/&quot;&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Noel is deliberate when it comes to semantics, and this post really shows it. This is about operational and denotational approaches to understanding and exploring programming language concepts. When speaking of operational, this is about how a program executes step-by-step (like walking through function parameter substitution), while denotational explanations focus on what features mean at a higher conceptual level (like describing functions as ways to generalise expressions with changeable parts). He demonstrates this with examples showing how both types of explanations say the same thing but at different levels of abstraction. Might help both when teaching others, and in self-assessment of one’s own understanding.&lt;/p&gt;

&lt;h3 id=&quot;all-posts-by-john-cutler&quot;&gt;All posts by John Cutler&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://publish.obsidian.md/cutlefish/Welcome&quot;&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is no suitable summary to this. I’ve been visiting this landing page and randomly visiting pages and I learned something every.single.time.&lt;/p&gt;

&lt;h3 id=&quot;architecting-the-uncertain---getting-started-with-agile-software-architecture-iteration-zero-c4-event-storming-by-johannes-seitz&quot;&gt;Architecting the uncertain - Getting started with Agile Software Architecture Iteration Zero, C4, Event Storming by Johannes Seitz&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://printhelloworld.de/posts/iteration-zero-architecture/&quot;&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This post advocates for Iteration Zero approaches, avoiding the trap of traditional upfront design. Software development is fundamentally a learning process and the author recommends &lt;strong&gt;incremental, iterative architecture work with the whole team participating rather than dividing work into independent packages&lt;/strong&gt;. Key activities include understanding system context using C4 diagrams, identifying and rating risks through Risk Storming, understanding business processes via Event Storming workshops, setting up testing infrastructure early, defining quality attributes through scenarios, conducting one-on-one interviews with team members, preparing initial product backlogs through User Story Mapping, building walking skeletons for end-to-end functionality, and maintaining a learning backlog for new technologies and practices. The emphasis throughout is on structured learning rather than big design up front, with the goal of making informed decisions when they’re actually needed rather than prematurely constraining the project. 
This post seems related to, but different to a post by &lt;a href=&quot;https://hazelweakly.me/blog/home-baked-abstractions-store-bought-implementations/&quot;&gt;Hazel Weakly&lt;/a&gt; that I come back to a lot.&lt;/p&gt;

&lt;h3 id=&quot;the-conflict-intelligent-leader-in-these-turbulent-times-learning-how-to-manage-disputes-is-a-must-by-peter-t-coleman&quot;&gt;The Conflict-Intelligent Leader: In these turbulent times learning how to manage disputes is a must. by Peter T. Coleman&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://hbr.org/2025/07/the-conflict-intelligent-leader?ab=HP-magazine-text-2&quot;&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I highlighted some choice parts of the post to give you an idea of what the post should give you. Talking about the Good-Friday agreement, which was such a meaningful and difficult work on peace is the cherry on the top of this article! 
&lt;img src=&quot;/images/2025/eiq-ciq.png&quot; alt=&quot;Emotional intelligence versus conflict intelligence&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2025/good-friday.png&quot; alt=&quot;Good Friday agreement&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;critically-engaging-with-models-by-rebecca-wirfs-brock--mathias-verraes&quot;&gt;Critically Engaging With Models by Rebecca Wirfs-Brock &amp;amp; Mathias Verraes&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://wirfs-brock.com/rebecca/blog/2022/09/20/critically-engaging-with-models/&quot;&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This needs a post of it’s own! I’m sure I’ll be quoting part of this in the future. To start with a useful definition of model:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“Models, whether for a software system, a development process, diseases, political systems, or otherwise, are a way to look at (a part of) the world. They explain how something behaves and how to modify that behavior. … Models are reductionist; that is, they only show a selection of the subject they’re describing, and lose something in the process. And models are biased: they implicitly reflect the assumptions, constraints, and values of the model’s author.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These are the heuristics distilled in the post for reference, for full context the original post is the key:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If there are two ways of looking at something, look for a third&lt;/li&gt;
  &lt;li&gt;Compare different models to figure out what one model adds or omits, emphasizes, or downplays&lt;/li&gt;
  &lt;li&gt;Understand the underlying belief system that comes with the model&lt;/li&gt;
  &lt;li&gt;Determine whether the model confirms my existing belief system and values, or conflicts with them&lt;/li&gt;
  &lt;li&gt;Understand whether the model addresses or solves a problem that I’m interested in solving&lt;/li&gt;
  &lt;li&gt;Ascertain whether the model points me to problems I might have but haven’t yet considered&lt;/li&gt;
  &lt;li&gt;Compare different models to understand what you actually care about.&lt;/li&gt;
  &lt;li&gt;If a model doesn’t explicitly address something you value highly, try fitting in something from another model and see if the model still hangs together.&lt;/li&gt;
  &lt;li&gt;All models are created within a specific context. Does the original context match yours? Can it be adapted?&lt;/li&gt;
  &lt;li&gt;When you’re evaluating models, find questions that are relevant in your context, and use them to compare the models.&lt;/li&gt;
  &lt;li&gt;Are you fitting the model to your context, or are you force-fitting your context to the model?&lt;/li&gt;
  &lt;li&gt;Be more skeptical of nice models, be more open minded to jarring models.&lt;/li&gt;
  &lt;li&gt;Models are potentially useful worldviews, not truths.&lt;/li&gt;
  &lt;li&gt;Does this model help me see something clearly, or does it intend to create a change in behavior?&lt;/li&gt;
  &lt;li&gt;Find the prescriptions hidden in innocent looking models, and use them to your advantage.&lt;/li&gt;
  &lt;li&gt;Consider that some models may not actually have been tried by the authors&lt;/li&gt;
  &lt;li&gt;There’s always another possible model.&lt;/li&gt;
  &lt;li&gt;Following a model as prescribed is not the same as achieving success.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also 
&lt;img src=&quot;/images/2025/models-rwb.png&quot; alt=&quot;presumptions of models&quot; /&gt;&lt;/p&gt;

&lt;p&gt;the post shows how to apply this ideas with an example. Definitely read and bookmark this.&lt;/p&gt;

&lt;h2 id=&quot;to-read&quot;&gt;To read&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://jacobian.org/2021/mar/15/organizational-power/&quot;&gt;The Three Kinds of Organizational Power&lt;/a&gt; by Jacob Kaplan-Moss. I did read this, but given the work I’m doing I need to dive deeper on this, thanks Anja Kunkel for sharing this write up with me.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://direct.mit.edu/ngtn/article/40/1-2/5/123561/Navigating-Firestorms-The-Imperative-of-Conflict&quot;&gt;Navigating Firestorms: The Imperative of Conflict-Intelligent Leadership in a Turbulent World Open Access&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Thu, 21 Aug 2025 00:12:00 +0000</pubDate>
				<link>http://roundcrisis.com/2025/08/21/reading-list/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2025/08/21/reading-list/</guid>
			</item>
		
			<item>
				<title>Impact Mapping solo</title>
				<description>&lt;h4 id=&quot;discovering-clarity-through-personal-practice&quot;&gt;Discovering Clarity Through Personal Practice&lt;/h4&gt;

&lt;p&gt;I’ve been meaning to do some improvements to the &lt;a href=&quot;https://bytesizearchitecturesessions.com/&quot;&gt;Bytesize Architecture Sessions&lt;/a&gt;’ website to integrate what I’ve learned lately, but I wasn’t clear on how to focus on when and how. That changed when I saw Krisztina Hirth’s awesome session: &lt;a href=&quot;https://virtualddd.com/sessions/impact-mapping-the-secret-sauce/&quot;&gt;Impact Mapping: The Secret Sauce&lt;/a&gt; at &lt;a href=&quot;https://virtualddd.com&quot;&gt;Virtual DDD&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;While impact mapping is traditionally presented as a collaborative team technique, I find that it’s always valuable to also model things solo. What struck me most was the great value it brought in focussing on outcomes and personas rather than features, making everything measurable by default.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2025/impact-map-bas-0.png&quot; alt=&quot;impact map day 1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I discovered it works brilliantly to do some work one day, then step away and come back a few days later with fresh eyes. Repeating this cycle several times allowed ideas to percolate and assumptions to surface naturally.&lt;/p&gt;

&lt;p&gt;Perhaps the most intriguing aspect of solo impact mapping has been its effect on goal clarity. I’m not 100% sure my goal is good, but the mapping process keeps making me think about it, which feels valuable in itself. The iterative questioning allows me to refine every section of the map with each mapping session. I can gradually build a more robust strategic foundation.&lt;/p&gt;

&lt;p&gt;Below you can see the current state of my impact map for Bytesize Architecture Sessions, I expect it can use more iterations.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2025/impact-map-bas.png&quot; alt=&quot;Impact Map for Bytesize Architecture Sessions&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Please let me know if you see ways the map can be improved.&lt;/p&gt;

&lt;h3 id=&quot;resources&quot;&gt;Resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Brilliant talk by Krisztina Hirth &lt;a href=&quot;https://virtualddd.com/sessions/impact-mapping-the-secret-sauce/&quot;&gt;Impact Mapping: The Secret Sauce&lt;/a&gt; at Virtual DDD&lt;/li&gt;
&lt;/ul&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/XG985T2mMMQ?si=7vrp4y24dW1jCEjg&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;ul&gt;
  &lt;li&gt;Gojko Adzic’s book “&lt;a href=&quot;https://www.impactmapping.org/book.html&quot;&gt;Impact Mapping: Making a Big Impact with Software Products and Projects&lt;/a&gt;” which provides the foundational theory.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://createchange.io/what-is-impact-mapping%ef%bf%bc/&quot;&gt;Mark Dalgarno’s comprehensive guide&lt;/a&gt; offers excellent practical insights from an active practitioner’s perspective.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.logrocket.com/product-management/impact-mapping-guide/&quot;&gt;LogRocket’s impact mapping guide&lt;/a&gt; provides a product management lens on the technique.&lt;/li&gt;
  &lt;li&gt;For teams seeking maximum return on investment, &lt;a href=&quot;https://agilepainrelief.com/blog/to-get-bang-for-your-buck-try-impact-mapping/&quot;&gt;Mark Levison’s detailed exploration&lt;/a&gt; demonstrates how to extract the most value from the process.&lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Tue, 22 Jul 2025 00:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2025/07/22/impact-mapping/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2025/07/22/impact-mapping/</guid>
			</item>
		
			<item>
				<title>Interesting learning resources - May 2025</title>
				<description>&lt;p&gt;These are some readings associated with work associated with &lt;a href=&quot;/2025/05/12/decisions-kp-map/&quot;&gt;Decision KP Maps&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks &lt;a href=&quot;https://mastodon.social/@dahukanna&quot;&gt;Dawn Ahukanna&lt;/a&gt;, &lt;a href=&quot;https://mastodon.social/@iris_meredith&quot;&gt;Iris Meredith&lt;/a&gt; for sharing great resources!!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://deadsimpletech.com/blog/epistemology&quot;&gt;Who has permission to know things?&lt;/a&gt; - Iris Meredith. Touching on Knowledge and power. I have been thinking about this post a lot since I first read it a few months ago. Meredith argues sudden workplace “explosions” stem from “corporate epistemology,” where &lt;strong&gt;knowledge is largely defined and controlled by those in power&lt;/strong&gt;, often disregarding the insights and experiences of minority groups or those lower in the hierarchy. This systemic invalidation of legitimate knowledge from marginalised individuals creates an environment of structural violence, leading to frustration and resentment when their expertise is ignored.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some notable quotes:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;While poisoning one’s superiors isn’t quite so common in corporate settings, this kind of sudden flash of anger often comes up in the workplace&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;So, what do we find when we look at the average corporate environment? It certainly isn’t that knowledge is built from evidence and reasoned discussion.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;…this experience and information that I have, thanks to my position in the hierarchy, didn’t count as knowledge.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.rethinkingpower.info/how-interpretive-labor-straddles-the-gap-between-rules-and-reality/&quot;&gt;Interpretive Labour: Bridging the Gap Between Map and Territory by Shauna Gordon McKeown&lt;/a&gt; &lt;strong&gt;Interpretive labour is the work of bridging an abstract model and the underlying reality. Privilege and power determine who does that work&lt;/strong&gt;. The post argues that while this labour is unavoidable, it becomes dysfunctional when it prevents feedback about systemic problems from reaching those who can implement change. The post is rather long, which can be feel like a bit of a commitment, I think it raises some interesting points tho.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://blog.misterspex.tech/overcoming-alert-fatigue-how-to-bring-reliable-observability-to-an-already-running-production-89efe7a4549a&quot;&gt;Overcoming Alert Fatigue — how to bring reliable observability to an already running production system by Maxi Goschin&lt;/a&gt;. The authors highlight three main reasons for this fatigue: annoyance, mental load, and interruptions, all of which desensitise teams to actual issues. Their solution involved a two-pronged approach: firstly, treating every alert as an internal incident requiring immediate action or alert adjustment, drastically reducing “noisy” alerts; secondly, a structured re-evaluation of their observability strategy.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://wirfs-brock.com/rebecca/blog/2025/04/14/&quot;&gt;Critical Software Redesign: Creating the Environment for Large Scale Change&lt;/a&gt; by Rebecca Wirfs-Brock &amp;amp; Mathias Verraes - Rebecca and Mathias’ writing keeps bringing great insight! The post discusses how to approach major software redesigns within an existing product. Rebbecca and Mathias then proceed to  highlight signals, subtle indicators of stress on the system’s design. These should trigger experiments rather than immediate, costly projects. 
The experiments are great for information gathering, building support, and creating / changing the culture to be more receptive to  change, even if they seem unconventional. The post advocates for &lt;em&gt;proactive design leadership&lt;/em&gt; ,this is a style of leadership that embraces iterative improvements and continuous experimentation, and also recognises when a fundamental “shift” to an entirely new model is necessary, requiring buy-in across engineering, product, and business visions.
This post is followed by a few posts where different people react to signals&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://shkspr.mobi/blog/2023/04/silence-isnt-consent/&quot;&gt;Silence Isn’t Consent By Terrence Eden&lt;/a&gt; - The gist of the write up is a discussion about how &lt;strong&gt;True consent must be enthusiastic and explicit, not assumed from a lack of objection&lt;/strong&gt;. The core issue is then applied to the digital realm, specifically the behaviour of AI bots that scrape website content for training data.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;to-read-later&quot;&gt;To read later&lt;/h2&gt;

&lt;p&gt;These are some posts I’ve been meaning to read in more depth but didn’t get to yet&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://aardling.eu/en/insights/scaling-teams-with-ownership-a-protime-case-study&quot;&gt;Scaling Teams with Ownership: A ProTime case study&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://noelwelsh.com/posts/operational-denotational-understanding/&quot;&gt;Operational and Denotational Strategies&lt;/a&gt; by  Noel Welsh&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://publish.obsidian.md/cutlefish/Welcome&quot;&gt;All posts by John Cutler&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://printhelloworld.de/posts/iteration-zero-architecture/&quot;&gt;Architecting the uncertain - Getting started with Agile Software Architecture&lt;/a&gt; Iteration Zero, C4, Event Storming&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Tue, 20 May 2025 00:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2025/05/20/reading-list/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2025/05/20/reading-list/</guid>
			</item>
		
			<item>
				<title>Decisions KP Map What happens during decision making</title>
				<description>&lt;p&gt;This is a post about understanding what is happening during architectural decision making. 
Following up from the talk I did at ADA Conf I started working on a mapping tool to help me see and reason what we discussed
It’s called Decision KP Map.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Decision KP Map is a mapping tool that helps visualise the &lt;strong&gt;subjective&lt;/strong&gt; perception of the community that enables decision making.The &lt;strong&gt;Key People&lt;/strong&gt;, in terms of their &lt;strong&gt;Knowledge and Power&lt;/strong&gt;. Both concepts together are the source of KP in the name, key people and their knowledge and power.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you are interested in learning more about it, please see this &lt;a href=&quot;/2026/02/04/making-of-a-decision-5/&quot;&gt;Introducing Decision KP Maps&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m currently running a trial to see how it performs. If you are interested please contact me via mastodon, linkedIn or Bluesky.&lt;/p&gt;

&lt;p&gt;Thanks &lt;a href=&quot;https://mastodon.social/@dahukanna&quot;&gt;Dawn Ahukanna&lt;/a&gt;, &lt;a href=&quot;https://weave-it.org/&quot;&gt;Kenny Baas-Schwegler&lt;/a&gt; , &lt;a href=&quot;https://andrewharmellaw.github.io/&quot;&gt;Andrew Harmel-Law&lt;/a&gt; and many others that have already given feedback and tried this.&lt;/p&gt;
</description>
				<pubDate>Mon, 12 May 2025 00:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2025/05/12/decisions-kp-map/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2025/05/12/decisions-kp-map/</guid>
			</item>
		
			<item>
				<title>Testing a new modelling retro format - Gaps Growth Great Grind</title>
				<description>&lt;p&gt;I’ve been running collaborative modelling sessions lately and noticed that some of the retrospective formats I tend to lean on don’t work as well as it could, perhaps because they have other focus. I was thinking about how to better capture the type of thoughts that come up when you are working through a collaborative modelling session.&lt;/p&gt;

&lt;p&gt;So, I be been trying a new format:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;🕳️ Gaps: Is there anything not covered by this representation of the system that you think should be there , or it’s not represented well. Example:  “We didn’t model feature flags” “No idea what the department adjacent to us do with the data from our systems”&lt;/li&gt;
  &lt;li&gt;🌱 Growth: Are there some areas here that could give us an edge, alternatively some improvements. Example “Could System A and B send messages via Rabbit rather than have synchronous dependencies”&lt;/li&gt;
  &lt;li&gt;✨ Great: Reasons you love this system representation or the system itself. Example: “It’s great to see how our systems containers interact finally, I didn’t have a full picture of this”&lt;/li&gt;
  &lt;li&gt;🚌 Grind:(as in daily grind). These are aspects that create unnecessary friction or complexity. For example are there  aspects of the system / this diagram that feel unnecessarily complicated or hard to use or understand.  Example: “This system always have items in the DLQ and it’s never clear why… takes a long time to debug” or “The way we are diagramming this is not available to people in external departments”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The format seems to encourage more of the better types of feedback and discussions.&lt;/p&gt;
</description>
				<pubDate>Sun, 20 Apr 2025 00:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2025/04/20/retro-format/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2025/04/20/retro-format/</guid>
			</item>
		
			<item>
				<title>Interesting learning resources - April 2025</title>
				<description>&lt;p&gt;A lot of these links are related to learning and collaboration, I blame excellent resources shared by &lt;a href=&quot;https://www.linkedin.com/in/donnabenjamin/&quot;&gt;Donna Benjamin&lt;/a&gt;, &lt;a href=&quot;https://www.linkedin.com/in/drcathicks/&quot;&gt;Cat Hicks&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://njustesen.github.io/botbowl/&quot;&gt;Bot Bowl&lt;/a&gt; : Bot Bowl is an annual artificial intelligence competition centred around the tabletop game Blood Bowl (from the past). Hard for AI to beat because of the type of game and the fact that is not such a popular game.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dsl.pubpub.org/pub/challenger-risk-perception/release/2&quot;&gt;Learning about mental models of risk from the Challenger Disaster&lt;/a&gt; · Infrastructure: Volume 2, Issue 1 (April 2025) John Flournoy - How mental models of risk held by engineers and managers in the lead-up to the Challenger disaster were different and what the effect of that delta. This reminds me of another paper on risk about mining and a power plant that we discussed online, but what is it???&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://donellameadows.org/archives/leverage-points-places-to-intervene-in-a-system/&quot;&gt;Leverage Points: Places to Intervene in a System - The Donella Meadows Project&lt;/a&gt; - Donella Meadows. This is about the hierarchy of leverage points within a system, suggesting where interventions can be most effective for change. Not new, but good to do another reading as I get better (I hope ) at systems.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.sciencedirect.com/science/article/abs/pii/S0166497207001502&quot;&gt;Relationships between knowledge inertia, organizational learning and organization innovation&lt;/a&gt; - ScienceDirect - Shu-hsien Liao, Wu-Chen Fei, Chih-Tang Liu. This study examines the relationship between knowledge inertia, organizational learning, and organizational innovation in different types of organizations.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://journals.sagepub.com/doi/10.1177/0149206320901565&quot;&gt;Collaboration, Coordination, and Cooperation Among Organizations: Establishing the Distinctive Meanings of These Terms Through a Systematic Literature Review&lt;/a&gt; Journal of Management Vol. 46 No. 6, July 2020 965 –1001 - Xavier Castañer, Nuno Oliveira. A review the definitions of collaboration, coordination, and cooperation in management literature, I have not finished reading this but a scan suggest that it would be a good idea if I had more time to work on developing &lt;a href=&quot;https://bytesizearchitecturesessions.com/&quot;&gt;Bytesize Architecture Sessions&lt;/a&gt; further.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.drcathicks.com/post/a-cumulative-culture-theory-of-developer-problem-solving-new-preprint&quot;&gt;A Cumulative Culture Theory of Developer Problem-Solving&lt;/a&gt;  - Dr Cat Hicks. I had the pleasure of hosting Dr Cat Hicks talking about this paper at Virtual DDD and I think her research is something we need to use when thinking about software teams. One of the big ideas of the paper is that we need to start thinking about software development proficiency as shaped by collective learning and cultural transmission, rather than solely individual talent. This is an intuition I’ve held for a long time and it’s great to see research validating it.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube-nocookie.com/embed/wYhX3QxskxQ?si=SjIdSc6Al6bjwBKo&quot; title=&quot;A Cumulative Culture Theory of Developer Problem-Solving&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://labs.newrulesforwork.com/p/collaborative-drift-debt-causes-symptoms-treatments#high-collaborative-debt-leads-to-mo&quot;&gt;Collaborative Drift &amp;amp; Debt: Causes, Symptoms, and Treatments&lt;/a&gt; - Elise Keith -  Eerily related to the link above but on collaboration.  This lengthy post talks about how teams establish working norms and the problems that arise when individual approaches diverge (collaborative drift). The author argues that unaddressed drift accumulates into collaborative debt. Thanks to Donna Benjamin for pointing me to this article.&lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Sun, 20 Apr 2025 00:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2025/04/20/reading-list-resources/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2025/04/20/reading-list-resources/</guid>
			</item>
		
			<item>
				<title>Tech Waka Podcast &amp; Leadership Collective in Auckland - Learn about your systems for Tech Leaders</title>
				<description>&lt;p&gt;I ran a workshop with &lt;a href=&quot;https://www.meetup.com/tech-leaders-collective/&quot;&gt;Tech Waka Podcast &amp;amp; Leadership Collective in Auckland&lt;/a&gt; on the 26th March. 
It was great to get hands on with my new local community!&lt;/p&gt;

&lt;p&gt;Thanks everyone that came over and worked hard during this &lt;a href=&quot;https://www.meetup.com/tech-leaders-collective/events/306442951/&quot;&gt;workshop&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2025/2025-03-workshop-li.png&quot; alt=&quot;Write up from Stephen Barrnell on LI&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/posts/stephen-barrell-74022b62_nice-tech-waka-podcast-leadership-collective-activity-7311164010035322880-rdhb&quot;&gt;source&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Sun, 20 Apr 2025 00:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2025/04/20/workshop/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2025/04/20/workshop/</guid>
			</item>
		
			<item>
				<title>Yow Australia - Talk Slides and bonus links</title>
				<description>&lt;p&gt;Some resources that came up either during &lt;a href=&quot;https://gotopia.tech/sessions/3461/thinking-about-your-systems-with-bytesize-architecture-sessions&quot;&gt;the workshop&lt;/a&gt; or the talk :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://bytesizearchitecturesessions.com/&quot;&gt;Bytesize Architecture Sessions&lt;/a&gt; The site with practical information and case studies for Bytesize Architecture Sessions.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=OqEeIG8aPPk&quot;&gt;Russ Ackhoff “Ted Talk” about systems&lt;/a&gt; - A short and rather memorable video about what are systems.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;&quot;&gt;Programmer vs Developer - Einar Host&lt;/a&gt; In a team each person has a role, I really like how Einar describes what I think a lot of us that write programs do in a team, and the reason I tend to introduce myself as a Programmer.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.eventstorming.com/&quot;&gt;Event Storming - Alberto Brandolini&lt;/a&gt; - A great workshop format to collectively learn some key elements of your domain.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://pablo.rauzy.name/dev/naur1985programming.pdf&quot;&gt;Programming as Theory Building - Peter Naur(1985)&lt;/a&gt; During the workshop we had a moment where we discussed documentation, and having this reference nearly feels like cheating, it’s too well written !&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;books&quot;&gt;Books&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Thinking_In_Systems%3A_A_Primer&quot;&gt;Thinking in Systems - Donella Meadows&lt;/a&gt; - Seminal book about Systems and a page turner. It starts off with some basics and quickly gets you to examples that will change how you think, unless you already think in systems, in that case it’ll give you vocabulary.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mentrixgroup.com/mentrix-school-of-systems&quot;&gt;Learning Systems Thinking - Diana Montalion&lt;/a&gt; - The hallway track brought this book to the conversation many times. Sometimes you have a chat with a stranger that changes how you think about certain aspects of your life, the conversation is not always easy but it’s very engaging, years later you still think about that conversation, this book feels like that.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://livebook.manning.com/book/architecture-modernization/architecture-modernization/3&quot;&gt;Architecture Modernisation -Nick Tune et al&lt;/a&gt; - In chapter 17 you can find the long form of the example I mentioned during the talk… after you pour over that the rest of the book is whirlwind tour of useful techniques for today’s practice of building software&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://facilitatingsoftwarearchitecture.com/&quot;&gt;Facilitating Software Architecture -Andrew Harmell-Law Chapter 6&lt;/a&gt; A masterclass on the process of writing an ADR. Since you have the book, you might as well help yourself for a super solid take on one possible way on how to practice software architecture.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.manning.com/books/collaborative-software-design&quot;&gt;Collaborative Software Design - How to facilitate domain modeling decisions&lt;/a&gt; Book by Evelyn van Kelle, Gien Verschatse, and Kenny Baas-Schwegler. Not only this is a great book to learn about Collaborative software design, in the tittle after all, it does have sections on Event Storming and it does mention Bytesize Architecture Sessions!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;video-and-slides-for-yow-australia&quot;&gt;Video and slides for Yow Australia&lt;/h2&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube-nocookie.com/embed/SIIiNLoPDFA?si=WxqmNp4KKGxqzwc4&quot; title=&quot;Thinking About Systems with Bytesize Architecture Sessions • Andrea Magnorsky • YOW! 2024&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;object data=&quot;https://www.roundcrisis.com/presentations/2024-12-Yow-Australia-Thinking-about-Systems-with-BAS-small.pdf&quot; width=&quot;600&quot; height=&quot;600&quot; type=&quot;application/pdf&quot;&gt;&lt;/object&gt;

</description>
				<pubDate>Fri, 06 Dec 2024 12:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2024/12/06/thinking-about-systems-yow/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2024/12/06/thinking-about-systems-yow/</guid>
			</item>
		
			<item>
				<title>Interesting learning resources - October 2024</title>
				<description>&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://marianhartman.com/proficiency-taxonomy&quot;&gt;Hartman Proficiency Taxonomy by Maria Hartman&lt;/a&gt; - This is about understanding learning, better. The bottom of the taxonomy being called Thought Leader which … not a name that works for me, but I can see where the author is going.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.ted.com/talks/frances_frei_how_to_build_and_rebuild_trust?subtitle=en&quot;&gt;How to build and rebuild trust - Frances Fei&lt;/a&gt; - Great talk about how to build trust. There are some gems about why being able to be your true self is important and how it links to what I know as &lt;a href=&quot;https://simple.wikipedia.org/wiki/Rhetorical_Triangle&quot;&gt;Rhetorical Triangle&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://leadingperformance.com.au/wp-content/uploads/2016/07/5.5-Left-Hand-Column.pdf&quot;&gt;Left-hand Column&lt;/a&gt; Created by Chris Argyris. Left-hand Column is a tool that helps you review how you think and feel as you have difficult conversations. The core idea here is to take notes during or after a meeting and record what we think and feel and what we think the others are thinking and feeling. I have referenced this as “Left margin technique” before by mistake, apologies.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://hbr.org/1977/09/double-loop-learning-in-organizations&quot;&gt;Double Loop learning organisations By Chris Argyris&lt;/a&gt; More from the creator of Left-hand column.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://osf.io/preprints/psyarxiv/qz43x&quot;&gt;Psychological Affordances Can Provide a Missing Explanatory Layer for Why Interventions to Improve Developer Experience Take Hold or Fail By Catherine M. Hicks&lt;/a&gt; A great paper by Dr Cat Hicks. The paper is about how context makes for success or failure of interventions. Makes sense to me and it’s great to see it validated by research&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.thoughtworks.com/en-us/insights/blog/microservices/modular-monolith-better-way-build-software&quot;&gt;When (‌modular) monolith is the better way to build software &lt;/a&gt; I want to say that this is like having a name for a nice sandwich (which we do). I remember that we need to communicate these ideas and leading by example doesn’t always scale.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://techlead.net/observations-on-the-practice-of-software-architecture-part-3/&quot;&gt;Observations on the practice of software architecture - III&lt;/a&gt; Great article about software architecture practices (it mentions Bytesize Architecture Sessions)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.liberatingstructures.com/&quot;&gt;Liberating Structures&lt;/a&gt; - A library of ways to collaborate.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://notebooklm.google.com/notebook/04b2d776-89dc-4ee4-b8f7-5da57632f58b&quot;&gt;A lisp programming guide&lt;/a&gt; By Peter Norvig - I mean, I didn’t know it existed and it was going to be great, right? It is.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://farawaytimes.blogspot.com/2023/02/how-to-make-good-small-games.html&quot;&gt;How to make small games&lt;/a&gt; It starts really well by explaining why this is hard and recommend this read because  I’ve been to too many wasted game jams.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;to-read&quot;&gt;To Read&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.baldurbjarnason.com/2024/liskovs-gun/&quot;&gt;Liskov’s gun&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://charleslambdin.com/planful-influence/&quot;&gt;Case Study: Influence mapping&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://journals.sagepub.com/doi/full/10.1177/17577438231187129&quot;&gt;Three concepts of power: Foucault, Bourdieu, and Habermas by Gerd Christensen 2023&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Sun, 27 Oct 2024 12:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2024/10/27/learning/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2024/10/27/learning/</guid>
			</item>
		
			<item>
				<title>The making of a decision @ ADA Conf Melbourne</title>
				<description>&lt;p&gt;These are the slides for the talk I did yesterday at ADA Conf in Melbourne&lt;/p&gt;

&lt;object data=&quot;https://www.roundcrisis.com/presentations/2024-11-ADAConf-the-making-of-a-decision_blog.pdf&quot; width=&quot;600&quot; height=&quot;600&quot; type=&quot;application/pdf&quot;&gt;&lt;/object&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube-nocookie.com/embed/Ie97Oe-t8Wk?si=Vnj_3Y8lioor5If6&quot; title=&quot;The making of a Decision - Andrea Magnorsky&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;posts-about-the-conference&quot;&gt;Posts about the conference&lt;/h2&gt;
&lt;iframe src=&quot;https://www.linkedin.com/embed/feed/update/urn:li:share:7260562718967881728?collapsed=1&quot; height=&quot;265&quot; width=&quot;504&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot; title=&quot;Embedded post&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/pulse/ada-conf-2024-alison-rosewarne-hvjic&quot;&gt;ADA Conf 2024 - Alison Rosewarne Exec Mgr, Architecture at REA Group&lt;/a&gt; A complete review from the conference, with summaries for each of the talks. I was super happy to read:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Andrea Magnorsky closed out the day with the final talk – on the making of a decision.&lt;/p&gt;

  &lt;p&gt;Every talk today was fantastic, but I might declare this my favourite as it packed in so much information and also held me riveted right to the end – at 5:20pm on a Friday afternoon!!&lt;/p&gt;
&lt;/blockquote&gt;
</description>
				<pubDate>Sun, 13 Oct 2024 12:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2024/10/13/making-of-a-decision-ada/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2024/10/13/making-of-a-decision-ada/</guid>
			</item>
		
			<item>
				<title>The making of a decision - reading materials</title>
				<description>&lt;p&gt;This is a shortlist of what I read to create the talk: The Making of a decision.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2024/2024-10-bookshelf.png&quot; alt=&quot;bookshelf&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://mentrixgroup.com/mentrix-school-of-systems&quot;&gt;Learning Systems Thinking&lt;/a&gt;  - Book by Diana Montalion&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://facilitatingsoftwarearchitecture.com/&quot;&gt;Facilitating Software Architecture&lt;/a&gt; - Book by  Andrew Harmel-Law&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://plato.stanford.edu/entries/feminist-power/&quot;&gt;Feminist Perspectives on Power&lt;/a&gt; Entry on the Stanford Encyclopedia of Philosophy&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/papers-we-love/papers-we-love/blob/main/software_engineering_orgs/common-ground-and-coordination-in-joint-activity.pdf&quot;&gt;Common Ground and Coordination in Joint Activity&lt;/a&gt; by Gary Klein, Paul J. Feltovich, Jeffrey M. Bradshaw, and David D. Woods (2005)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://archive.org/details/dynamicadministr0000foll&quot;&gt;Dynamic Administration: The Collected Papers of Mary Parker Follett (1942) Book&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Programming as Theory Building by Peter Naur (1985)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://finecwg.github.io/background-others/DIKW-hierarchy/&quot;&gt;Understanding the DIKW Model: From Data to Wisdom &lt;/a&gt; by Won-gyung Choi&lt;/li&gt;
  &lt;li&gt;The effects of expert power and referent power on knowledge sharing and knowledge hiding by Abraham Cyril Issac, Timothy Colin Bednall, Rupashree Baral, Pierpaolo Magliocca, and Amandeep Dhir (2022)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://communicationpatternsbook.com/&quot;&gt;Communication Patterns - Book by Jacqui Read&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/The_Dawn_of_Everything&quot;&gt;The Dawn of Everything: A New History of Humanity &lt;/a&gt;Book by David Graeber and David Wengrow&lt;/li&gt;
  &lt;li&gt;Review of Graeber &amp;amp; Wengrow’s &lt;em&gt;The Dawn of Everything: A New History of Humanity&lt;/em&gt; by Giulio Ongaro (2021)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://journals.sagepub.com/doi/full/10.1177/17577438231187129&quot;&gt;Three concepts of power: Foucault, Bourdieu, and Habermas &lt;/a&gt; by Gerd Christensen&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=Mary_Parker_Follett&amp;amp;oldid=1236612740&quot;&gt;Mary Parker Follett - Wikipedia&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.manning.com/books/collaborative-software-design&quot;&gt;Collaborative Software Design - How to facilitate domain modelling decisions&lt;/a&gt; Book by Evelyn van Kelle, Gien Verschatse, and Kenny Baas-Schwegler&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Pedagogy_of_the_Oppressed&quot;&gt;Pedagogy of the oppressed&lt;/a&gt; by Paulo Freire&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.remoteaf.co/blogs/steps-to-distributed-decision-making&quot;&gt;Six steps to distributed decision making - Here is where you start if you want autonomous distributed teams&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Sun, 13 Oct 2024 12:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2024/10/13/the-making-of-a-decision/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2024/10/13/the-making-of-a-decision/</guid>
			</item>
		
			<item>
				<title>Interesting learning resources - August 2024</title>
				<description>&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://charity.wtf/2024/08/07/is-it-time-to-version-observability-signs-point-to-yes/&quot;&gt;Is It Time To Version Observability? (Signs Point To Yes) By Charity Majors&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20230731234121/https://ozimmer.ch/authoring/2020/07/02/ReviewAndMeetingMarkup.html&quot;&gt;Shorthand and Markup for Speedy Note-Taking - Olaf Zimmermann &lt;/a&gt; I thought this was going to be a lot shorter than this. I already use something similar to this but not as consistently as I would like.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://learningsystemsthinking.com/&quot;&gt;Learning Systems Thinking by Dian Montalion&lt;/a&gt; I had the good luck of not just meeting Diana but do a workshop together on Systems Thinking at the GSAS.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.oreilly.com/library/view/facilitating-software-architecture/9781098151850/&quot;&gt;Facilitating Software Architecture By Andrew Harmel-Law&lt;/a&gt;: I have read most of the book and also doing a &lt;a href=&quot;http://virtualddd.com/book-club&quot;&gt;book club&lt;/a&gt; on it. I’m not sure how much useful can I say here except that it’s made me think about how I would like to work a lot.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Wed, 21 Aug 2024 12:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2024/08/21/july-2024-interesting/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2024/08/21/july-2024-interesting/</guid>
			</item>
		
			<item>
				<title>Interesting learning resources - March 2024</title>
				<description>&lt;p&gt;In this post we look at dealing with ambiguity, a high level of what does OODA loops mean, getting better at debugging , and more.&lt;/p&gt;

&lt;p&gt;I wasn’t sure how to approach posts from newsletters (some of them behind paywalls). My current standpoint is that if I am able to archive it, then I will include them.&lt;/p&gt;

&lt;h4 id=&quot;being-a-pm-at-microsoft-thriving-in-ambiguity----by-matthew-roche&quot;&gt;&lt;a href=&quot;https://web.archive.org/web/20240212173446/https%3A%2F%2Fssbipolar.com%2F2024%2F01%2F29%2Fbeing-a-pm-at-microsoft-thriving-in-ambiguity%2F&quot;&gt;Being a PM at Microsoft: Thriving in ambiguity -  By Matthew Roche&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;This quote is why I wanted to share this article here&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2024/pm-ms2.png&quot; alt=&quot;Running in the dark with a flashlight&quot; /&gt;&lt;/p&gt;

&lt;p&gt;… and the following is another good quote&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2024/pm-ms1.png&quot; alt=&quot;Keep taking action even in uncertainty&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The article main focus is on goals. I enjoyed the examples on how to “eliminate ambiguity” by analysing how aligned are the stakeholders.&lt;/p&gt;

&lt;p&gt;Reading about the focus on goals also raises a few questions&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;How represented other PMs feel by this article? some of this work mentioned here seems more like the type of work a team lead might do or an Engineering Manager.&lt;/li&gt;
  &lt;li&gt;Is a lot of the work at Microsoft project based? I thought that was not the case but, if not then how does this focus on goals apply to the team dynamics?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The videos are pretty interesting too and it’s a nice touch that they are not just hosted in youtube. Extra internet point to you&lt;/p&gt;

&lt;h4 id=&quot;what-can-air-combat-teach-us-about-software-project-failure-by-jade-rubick&quot;&gt;&lt;a href=&quot;https://web.archive.org/web/20240214143333/https://www.rubick.com/engineering-leaders-should-obsess-over-feedback-loops/&quot;&gt;What can air combat teach us about software project failure? by Jade Rubick&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;If you do programming for a living,  at some point someone mentioned OODA loops near this is a handy reference to it.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;O&lt;/strong&gt;bserve&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;O&lt;/strong&gt;rient&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;D&lt;/strong&gt;ecide, and&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;A&lt;/strong&gt;ct&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not only does the post does a high level of what OODA loops are but also it helps with reasoning about why small feedback loops (and the correlated corrections) are more likely to lead to success.&lt;/p&gt;

&lt;h4 id=&quot;linux-debugging-tools-youll-love-by-julia-evans&quot;&gt;&lt;a href=&quot;https://wizardzines.com/zines/debugging/&quot;&gt;Linux debugging tools you’ll love by Julia Evans&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;If you never came across these zines by &lt;a href=&quot;https://social.jvns.ca/@b0rk&quot;&gt;Julia Evans aka b0rk&lt;/a&gt; I think this might make your day. If you want to learn the basics and also in depth about something, these zines are just so so so good, I am linking to a debugging one because I really liked it but all of the ones I read are brilliant&lt;/p&gt;

&lt;h4 id=&quot;almost-every-infrastructure-decision-i-endorse-or-regret-after-4-years-running-infrastructure-at-a-startup-by-jack-&quot;&gt;&lt;a href=&quot;https://web.archive.org/web/20240311172850/https://cep.dev/posts/every-infrastructure-decision-i-endorse-or-regret-after-4-years-running-infrastructure-at-a-startup/&quot;&gt;(Almost) Every infrastructure decision I endorse or regret after 4 years running infrastructure at a startup by Jack &lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;Nice write up with very concrete reasoning. No need to agree with all the points, however great to learn from other’s experience and see how the decisions matured.&lt;/p&gt;

&lt;h4 id=&quot;how-we-evaluated-the-impact-of-github-copilot-for-3-months-by-tobias-deekens&quot;&gt;&lt;a href=&quot;https://web.archive.org/web/20240311171701/https://commercetools.com/blog/how-we-evaluated-the-impact-of-github-copilot-for-3-months&quot;&gt;How we evaluated the impact of GitHub Copilot for 3 months by Tobias Deekens&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;It’s what it says in the tin, and it’s valuable to learn from the shared experiences of others.
A great addition to this post would be if the surveys included information broken down by programming language and framework. At least in my experience the value you get of CoPilot depends a lot on that.&lt;/p&gt;

&lt;p&gt;EDIT: I reached out to the author of this post and it turns out that CoPilot doesn’t break down metrics by programming language.&lt;/p&gt;

&lt;h4 id=&quot;5-mistakes-that-made-my-documents-terrible-by-raviraj-achar&quot;&gt;&lt;a href=&quot;https://web.archive.org/web/20240227103008/https://newsletter.techleadmentor.com/p/5-mistakes-that-made-my-documents?r=z1gf1&quot;&gt;5 Mistakes That Made My Documents Terrible by Raviraj Achar&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;This post caught my eye because I could easily relate to the journey the author had experienced. And from there he goes of to suggest how to address the problems. 
The common problems are about mindset, understanding who you are writing for, clarity of message (where clarity includes brevity) and using visual aids when needed.&lt;/p&gt;

&lt;h2 id=&quot;resources-for-later-in-the-week&quot;&gt;Resources for later in the week&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.crunchydata.com/blog/an-overview-of-distributed-postgresql-architectures&quot;&gt;An Overview of Distributed PostgreSQL Architectures - Marco Slot&lt;/a&gt; seems worth a read&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://surfingcomplexity.blog/2024/02/11/book-review-trust-in-numbers/&quot;&gt;Book Review: Trust in Numbers - Lorin Hochstein&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://seb.jambor.dev/posts/systemd-by-example-part-1-minimization/&quot;&gt;systemd by example&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://neil-vass.com/futurespectives-learning-from-failures-that-havent-happened-yet/&quot;&gt;Futurespectives: learning from failures that haven’t happened yet by Neil Vass&lt;/a&gt; I heard about this practice before and so it’s time to learn more about it!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.infoq.com/articles/asynchronous-collaboration-software-teams/&quot;&gt;Adopting Asynchronous Collaboration in Distributed Software Teams&lt;/a&gt; I’m trying to find ways to run &lt;a href=&quot;https://bytesizearchitecturesessions.com/&quot;&gt;Bytesize Architecture Sessions&lt;/a&gt; asynchronously and researching options&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20240212174241/https://www.jrothman.com/mpd/2024/02/how-to-change-a-workshop-in-person-game-to-a-remote-simulation-for-effective-results/&quot;&gt;How to Change a Workshop In-Person Game to a Remote Simulation for Effective Results&lt;/a&gt;  Started reading one her books and I was impressed, as someone that finds a lot of value in orchestrated collaboration and games, I was intrigued. Also, as above some research material for running &lt;a href=&quot;https://bytesizearchitecturesessions.com/&quot;&gt;Bytesize Architecture Sessions&lt;/a&gt; asynchronously.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20240311165806/https://www.lambdafunctions.com/articles/elixir-and-rust&quot;&gt;Managing mutable data in Elixir with Rust by Mike Clarke&lt;/a&gt; I scanned this post on the experiment and looks interesting tho I wonder if there are general take away points. When I see projects like this starting I always wonder what happens 3~5 years later who and how this is maintained.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20240311173324/https://www.inngest.com/blog/migrating-across-clouds-with-zero-downtime&quot;&gt;Migrating long running workflows across clouds with zero downtime by Dan Farrelly&lt;/a&gt; I’ve written some systems that were long running frameworks before so I’m curious to read this. This is the first time I hear about Inngest&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Mon, 11 Mar 2024 12:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2024/03/11/mar-2024posts/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2024/03/11/mar-2024posts/</guid>
			</item>
		
			<item>
				<title>Interesting learning resources - February 2024 - part 2</title>
				<description>&lt;p&gt;So here are some interesting links with some commentary about programming languages for distributed systems, cellular architecture, and advisory process for teams.&lt;/p&gt;

&lt;h4 id=&quot;programming-the-cloud-ought-to-be-delightful&quot;&gt;&lt;a href=&quot;https://web.archive.org/web/20240212160042/https://www.unison.cloud/our-approach/&quot;&gt;Programming the cloud ought to be delightful&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;The article could be summed up with:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Microservices can get complicated&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Managing infrastructure is painful and different from programming the domain&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Programming languages have a lot of tooling that we can’t use for infrastructure work in a cohesive way&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/images/2024/unison.png&quot; alt=&quot;Programming options&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Ideally, it would be nicer if we could:&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;Deploy with a function call&lt;/li&gt;
      &lt;li&gt;Service calls are one line of code&lt;/li&gt;
      &lt;li&gt;Storage is typed too&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What happened is that they implemented this ideal into something that you can test, now and for free.&lt;/p&gt;

&lt;p&gt;Many concerns come to mind when considering using this in a “real-life project”&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Where is it actually deployed and how?&lt;/li&gt;
  &lt;li&gt;How to implement metrics and logs that one wants? I can kind of guess this, but I wonder if this is part of the language&lt;/li&gt;
  &lt;li&gt;How to deal with errors?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am sure a lot o can be answered by playing around with it 
Still,  I might try it out and see what I can learn from it.&lt;/p&gt;

&lt;h4 id=&quot;slacks-migration-to-a-cellular-architecture---cooper-bethea&quot;&gt;&lt;a href=&quot;https://web.archive.org/web/20240213115847/https://slack.engineering/slacks-migration-to-a-cellular-architecture/&quot;&gt;Slack’s Migration to a Cellular Architecture - Cooper Bethea&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;It can be interesting to read these types of write ups. This post goes over:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Detecting failures in distributed systems is a hard problem. Some examples.&lt;/li&gt;
  &lt;li&gt;Interesting link to a paper on grey failures, meaning a subtle underlying fault. The paper is called: Gray Failure: The Achilles’ Heel of Cloud-Scale Systems &lt;a href=&quot;https://www.microsoft.com/en-us/research/wp-content/uploads/2017/06/paper-1.pdf&quot;&gt;Link to paper&lt;/a&gt; and how these types of errors generally result in poor performance and other types of inefficacies.&lt;/li&gt;
  &lt;li&gt;Due to these pervasive grey failures, they decided to make some changes in the architecture.&lt;/li&gt;
  &lt;li&gt;The post includes some details about the changes to infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There were mentions of follow up posts that I didn’t find. I look forward to the next post where the author maybe will describe how they came to these decisions and what alternatives they considered.
If you do read the post, you might find some of the images included are a bit blurry, making them hard to read.&lt;/p&gt;

&lt;p&gt;Edit: I didn’t know what cellular architecture was. My initial reading tells me it’s a way to contain failure by having partial or full copies of software systems (cloud providers probably love this 💸). &lt;a href=&quot;https://aws.amazon.com/solutions/guidance/cell-based-architecture-on-aws/&quot;&gt;Link to aws article on how to implement cell based architecture&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&quot;scaling-the-practice-of-architecture-conversationally---andrew-harmel-law&quot;&gt;&lt;a href=&quot;https://web.archive.org/save/https://martinfowler.com/articles/scaling-architecture-conversationally.html&quot;&gt;Scaling the Practice of Architecture, Conversationally - Andrew Harmel-Law&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;A blog post I keep coming back to, either to read or share. At it’s core it explains why top-down decision making doesn’t work and what you can get when you work collaboratively. And it’s so well written (yes I am envious!)&lt;/p&gt;

&lt;p&gt;The premise is that everyone can make decisions as long as they consult with those affected by that decision and people with experience in that area. There are four activities that support this premise:  Decision Records to document decisions, an Architecture Advisory Forum for conversations, Team-sourced Architectural Principles to provide guidance, and a Technology Radar to understand the landscape. Are they all totally suitable to you right now? It depends 😀. It does give you some strong foundations to try for something that works in your teams and organisations.&lt;/p&gt;

&lt;p&gt;The article goes over how this affects teams, changes to the role of the architect, how this approach works with the company strategy and how to make it happen. The cherry at the top is an example. At the very worst it will make you think and there are some great external links.&lt;/p&gt;

&lt;h2 id=&quot;resources-for-later-in-the-week&quot;&gt;Resources for later in the week&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://virtualddd.com/sessions/83&quot;&gt;An Introduction to Residuality Theory by Barry M O’Reilly&lt;/a&gt; I watched this and I really enjoyed it,  I am compiling notes about it, so this is comming on the next post.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://ssbipolar.com/2024/01/29/being-a-pm-at-microsoft-thriving-in-ambiguity/&quot;&gt;Being a PM at Microsoft: Thriving in ambiguity&lt;/a&gt; I watched the video associated with this and liked it, so this is for the future too&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Tue, 13 Feb 2024 11:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2024/02/13/feb-2024-II-posts/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2024/02/13/feb-2024-II-posts/</guid>
			</item>
		
			<item>
				<title>Interesting learning resources - February 2024</title>
				<description>&lt;p&gt;So here are some interesting links with some commentary about programming languages, strategy, etc. Since a lot of the links are not short reads, I’m going to keep it brief.&lt;/p&gt;

&lt;h4 id=&quot;rusts-golden-rule---steve-klabnik&quot;&gt;&lt;a href=&quot;https://steveklabnik.com/writing/rusts-golden-rule&quot;&gt;Rust’s Golden Rule&lt;/a&gt; - Steve Klabnik.&lt;/h4&gt;

&lt;p&gt;The golder rule referred to is the following&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Whenever the body of a function contradicts the function’s signature, the signature takes precedence; the signature is right and the body is wrong.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And the implications of applying this to language design and also how it affects language usage. It made me think about cognitive loads when programming and how much I welcomed other decisions in other languages.&lt;/p&gt;

&lt;p&gt;Nice to read Steve’s writing. I remember watching some of his talks and what I always enjoyed in those is that it’s an invitation to think. He shows you what he’s thinking and then you are left with more thinking to do, which is absolutely perfect.&lt;/p&gt;

&lt;h4 id=&quot;the-outcome-of-the-strategy-becomes-culture-by-aleix-morgadas&quot;&gt;&lt;a href=&quot;https://learnings.aleixmorgadas.dev/p/the-outcome-of-the-strategy-becomes&quot;&gt;The outcome of the strategy becomes culture by Aleix Morgadas&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;A series of posts about technical strategy. It’s great to see other people’s journeys, isn’t it?&lt;br /&gt;
I really enjoyed the raw honesty and self-awareness of the post and the transition to new “levels” of awareness and learning strategy.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2024/aleix-strategy.png&quot; alt=&quot;Aleix realises that learning needs to happen&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This post:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Has a relatable journey&lt;/li&gt;
  &lt;li&gt;The author acknowledged they hadn’t learn and that they needed to do that (courageous, and also the only way to move forward)&lt;/li&gt;
  &lt;li&gt;The author strived to find tools than helped them and,&lt;/li&gt;
  &lt;li&gt;With a nice example it highlights how important context is, you can’t use the same tools in differnt contexts and expect the same results.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/images/2024/aleix-strategy-post-context.png&quot; alt=&quot;Importance of Context&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;its-a-feature-not-a-bug-a-step-by-step-guide-to-architectural-decisions---sonya-natanzon&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=chrjl9ALtKQ&quot;&gt;It’s a Feature, Not a Bug: A Step-by-step Guide to Architectural Decisions - Sonya Natanzon&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;I was in attendance when this talk was originally delivered and since then I shared this link multiple times. 
It’s a no nonsense, well-structured way to find some common ground when making decisions. Like most processes, it’s up to you to find the parts that make sense for your context, and do that.&lt;/p&gt;

&lt;p&gt;Watching this talk is especially beneficial if you believe your organisation doesn’t struggle with decision making, as you may discover unrecognized challenges in your process.&lt;/p&gt;

&lt;h4 id=&quot;influence-mapping-series---charles-lambdin&quot;&gt;&lt;a href=&quot;https://charleslambdin.com/2021/12/14/influence-mapping-part-1/&quot;&gt;Influence mapping series - Charles Lambdin&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;Not only this is a well written series of articles, influence mapping is a super useful tool.&lt;/p&gt;

&lt;p&gt;It’s takes a bit of reading but I think it’s worth it. Not all the examples are ones I would use, however I did enjoy how the larger examples mapped to ideas of what you can do in your situation.&lt;/p&gt;

&lt;p&gt;At some point while you read this you might feel rather &lt;em&gt;Macchiavelian&lt;/em&gt; but if that is the situation you are in, you might as well have some idea about what tools to use &lt;strong&gt;and&lt;/strong&gt; what tools others are using.&lt;/p&gt;

&lt;p&gt;Like most people, I started reading this series on part three. The  hook, that kept me reading the series of posts was the many references to other resources.&lt;/p&gt;

&lt;h2 id=&quot;resources-for-later-in-the-week&quot;&gt;Resources for later in the week&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://virtualddd.com/sessions/83&quot;&gt;An Introduction to Residuality Theory by Barry M O’Reilly&lt;/a&gt; Heard great things about this and I am going to be missing this at the London DDD meetup so, need to catch this up.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.inngest.com/blog/migrating-across-clouds-with-zero-downtime&quot;&gt;Migrating long running workflows across clouds with zero downtime&lt;/a&gt; I have dealt with a similar problem before, curious.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Thu, 01 Feb 2024 12:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2024/02/01/feb-2024-posts/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2024/02/01/feb-2024-posts/</guid>
			</item>
		
			<item>
				<title>Interesting learning resources - January 2024</title>
				<description>&lt;p&gt;This idea, of writing a weekly(ish) post with interesting reads started of after reading &lt;a href=&quot;https://web.archive.org/web/20240114004354/https://heydingus.net/blog/2024/1/please-own-your-rss-links&quot;&gt;Please, Own Your RSS Links&lt;/a&gt;. This is a post which could be summed up as&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Own your writting so that when stuff goes wrong you can change the source and keep going&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nothing ground breaking but a good remminder to make sure that if you post, put a tiny bit of effort and have an RSS feed.
This led me to look for a good RSS reader, which has been hard since google reader died. It also made me realise that not only do I want a reader I want to make some notes for my future self about what I read and what I liked about it, maybe some thoughts.&lt;/p&gt;

&lt;p&gt;So here are some interesting links with some commentary&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=FzycqiJVioI&quot;&gt;DDD in large product portfolios - Andreas Pinhammer - DDD Europe&lt;/a&gt; An excellent video where Andreas goes over a case study of using Event Storming, team topologies and DDD to manage multiple products in insurance. Delivered in an approachable manner.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/images/2024/pinhammer-talk.png&quot; alt=&quot;Screenshot of talk by Andreas Pinhammer&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://hazelweakly.me/blog/the-power-of-being-new--a-proven-recipe-for-high-impact/&quot;&gt;The Power of Being New: A Proven Recipe for High Impact&lt;/a&gt; I really like how the points here are actionable things that you can do on a new or not new gig. I also like that it tells you why it’s recommending each thing, for example&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;You still have zero prestige among the team, and zero trust; you need to meet them where they’re at and address things they care about.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20240116171324/https://academic.oup.com/schizophreniabulletin/advance-article/doi/10.1093/schbul/sbad173/7517011?login=false&quot;&gt;From Vexing Uncertainty to Intellectual Humility&lt;/a&gt; A post from a philosophy professor about his strugles with Schizophrenia, how important is to be with people, and eventually about finding intellectual humility. Very nicely written, the only sour note was would this be posted where it was if this wasn’t who it is?&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://wiki.postgresql.org/wiki/Operations_cheat_sheet#Introduction&quot;&gt;Postgres Cheatsheet&lt;/a&gt; A really handy reference to browse or search when the need arises.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;resources-i-want-to-check-out&quot;&gt;Resources I want to check out&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://vimeo.com/complexitylounge&quot;&gt;Alicia Juarero at Complexity launch&lt;/a&gt; Recomended by several people on different networks. Alicia Juarero is comes across as an academic with deep background on complexity. She wrote Dynamics in Action (2008) and Context Changes Everything (2023). Main reason to check it out: Alicia Juarero is an expert in this area&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.leylaacaroglu.com/blog//tools-for-systems-thinkers-the-6-fundamental-concepts-of-systemsnbspthinking&quot;&gt;Tools for Systems Thinkers: The 6 Fundamental Concepts of Systems Thinking&lt;/a&gt; by the looks of it this has been around for a while but this is the first time I see this. Main reason to check it out: it looks very promising from my very fast scan&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Tue, 23 Jan 2024 12:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2024/01/23/jan-2024-posts/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2024/01/23/jan-2024-posts/</guid>
			</item>
		
			<item>
				<title>Answering questions about Bytesize Architecture sessions - On the team attitude to collaboration</title>
				<description>&lt;p&gt;During October I spoke about &lt;a href=&quot;https://bytesizearchitecturesessions.com/&quot;&gt;Bytesize Architecure Sessions&lt;/a&gt; at the &lt;a href=&quot;https://gsas.io/#schedule&quot;&gt;Global Software Architecture Summit&lt;/a&gt;. I got some interesting questions in the Q&amp;amp;A. We didn’t get through all of them, so have grouped them and answering in smaller posts. This one is about the team attitude to collaboration.&lt;/p&gt;

&lt;h3 id=&quot;other-posts-on-the-series&quot;&gt;Other posts on the series&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/10/12/Twenty-plus-questions-answered-about-bytesize-architecture-sessions/&quot;&gt;How this series started&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/10/12/bytesize-architecture-sessions-number-of-participants/&quot;&gt;Questions about number of participants&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/01/05/bytesize-sessions-collaboration/&quot;&gt;Questions about team’s attitude to collaboration&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/10/11/bas-goal-session/&quot;&gt;Questions about the goal of a session&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;some-collaboration-anti-patterns-and-can-bytesize-architecture-sessions-can-help&quot;&gt;Some collaboration anti-patterns and can Bytesize Architecture Sessions can help?&lt;/h1&gt;

&lt;p&gt;When people are disengaged or interrupt each other often, these can be signals of team issues, some chaos is to be expected when many people attend a meeting but the patterns are something to pay attention to in the long run.&lt;/p&gt;

&lt;p&gt;The questions asked were:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;How to avoid people talking on top of each other?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bytesize sessions are created to be short, the idea being that a group of people doesn’t tend to stay engaged for very long. So, set expectations about interruptions and the duration of the session at the very start of the session, and if you see behaviour you didn’t like say it during the mini retro at the end of the session. 
I find that these are useful guidelines for all successful meetings of more than three people.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Are there any recommendations for when a team is very apathetic and low energy? How to infuse this energy and willingness to change?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When it comes to apathy, sometimes that happens because people feel like their ideas are not represented. &lt;a href=&quot;https://bytesizearchitecturesessions.com/news/experience-reports-spidermonkey&quot;&gt;Daniel Minor&lt;/a&gt; and others, including  myself have experienced that the &lt;strong&gt;Bytesize Architecture Sessions&lt;/strong&gt; can be a great way to have ideas raised by all participants in the session.
If you find that the whole team mood is low it might be worth running retrospectives on that particular issue, and act on the feedback received there.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;One of the hardest things to do is to interrupt a developer passionatelly explaining their piece. Normally everyone gets too excited during discussions. Any tips on this?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My first instinct here is to focus on setting expectations. 
If this question is more general and not just about people talking at lenght at the “wrong time” then I am curious: Is this a behaviour everyone in your team exhibits ? If so, it seems that they are modelling their behaviour on someone they are learning from, is that the culture you want in your team? Alternatively, if this is one person, it might be worth having a 1 to 1 and try to explore how they communicate and help them learn about effective communication patterns.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;When people in the session have different levels of expertise, how can we make this session work? Less experienced people might fear participation or might get stuck with their design.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I love this question! Bytesize sessions work especially well when there is high diversity of knowledge types.&lt;/p&gt;

&lt;p&gt;The time &lt;a href=&quot;https://www.roundcrisis.com/2022/10/01/the-power-of-alone-together/&quot;&gt;Alone together&lt;/a&gt; is where each participant works individually on the same task, allowing them to focus and formulate specific questions. This quiet time is crucial as it provides an opportunity for participants to realize the gaps in their understanding and identify areas for further investigation. 
Inmediately after that, there is the Consensus part, where the participants pool together to create one model that pools all the knowledge just displayed individually, participants here can choose to be more or less vocal, however their input was seen (and heard) by everyone attending&lt;/p&gt;

&lt;h3 id=&quot;suggested-reading&quot;&gt;Suggested reading&lt;/h3&gt;

&lt;p&gt;As I was answering these questions I kept thinking about two references that might interests those who are interested in these questions&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.manning.com/books/collaborative-software-design?ar=false&amp;amp;lpse=B&quot;&gt;Collaborative Software Design. How to facilitate domain modeling decisions&lt;/a&gt; By &lt;strong&gt;Evelyn Van Kelle, Gien Verschatse and Kenny Bas-Schwegler&lt;/strong&gt;. Great book to learn more about collaborative modelling, especially chapter 4 and 5 if you are interested in these types of questions.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.researchgate.net/publication/227992178_Common_Ground_and_Coordination_in_Joint_Activity&quot;&gt;Common Ground and Coordination in Joint Activity&lt;/a&gt; Klein, Gary &amp;amp; Feltovich, Paul J. &amp;amp; Bradshaw, Jeffrey &amp;amp; Woods, David. (2005). This paper, especially the sections where common ground, joint activity, the basic compact are defined helped me gain better insight into what I see when I see people collaborating.&lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Fri, 05 Jan 2024 12:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2024/01/05/bytesize-sessions-collaboration/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2024/01/05/bytesize-sessions-collaboration/</guid>
			</item>
		
			<item>
				<title>GSAS presentation video and twenty plus questions about Bytesize Architecture Sessions - The plan</title>
				<description>&lt;p&gt;I am just back from the &lt;a href=&quot;https://gsas.io/#schedule&quot;&gt;Global Software Architecture Summit&lt;/a&gt; were I spoke recently about &lt;a href=&quot;https://bytesizearchitecturesessions.com/&quot;&gt;Bytesize Architecure Sessions&lt;/a&gt;. I got some interesting questions in the Q&amp;amp;A. We didn’t get through all of them, so I figured I can answer them in a post.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/rOv8rgVzFdE?si=dyk9kjSCx1VwEvUV&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;As I answered all of the questions, I realised that there were many ways to answer them, and that in many cases that was very useful too. So, I am going to answer a question or more (if they make sense together) per post, to keep it interesting.&lt;/p&gt;

&lt;p&gt;Below is the list of questions. If you have more questions please send them to me via mastodon or LinkedIn and I can add them to this list.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/2023/10/12/bytesize-architecture-sessions-number-of-participants/&quot;&gt;Questions about number of participants&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;How many people should participate on a Bytesize Architecture Session ideally?&lt;/li&gt;
  &lt;li&gt;What should be the maximum size of people attending a Bytesize Architecture Session?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;/2023/10/11/bas-goal-session/&quot;&gt;Questions about the goal of a session&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/10/11/bas-goal-session/&quot;&gt;How many sessions/weeks does it usually take to complete?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/10/11/bas-goal-session/&quot;&gt;How to narrow the goal of the session to a specific case? How to reach a goal when the issue is is too big?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Let’s imagine that part of a team has implemented a few new services How do we share the knowledge with the rest of the team using Bytesize Architecture Sessions?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;/2024/01/05/bytesize-sessions-collaboration/&quot;&gt;Questions about team’s attitude to collaboration&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;How to avoid people talking on top of each other?&lt;/li&gt;
  &lt;li&gt;Are there any recommendations for when a team is very apathetic and low energy? How to infuse this energy and willingness to change?&lt;/li&gt;
  &lt;li&gt;One of the hardest things to do is to interrupt a developer passionatelly explaining their piece. Normally everyone gets too excited during discussions. Any tips on this?&lt;/li&gt;
  &lt;li&gt;When people in the session have different levels of expertise, how can we make this session work? Less experienced people might fear participation or might get stuck with their design.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions about where does Bytesize Architecture Sessions doesn’t work as intended&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Have you experienced this approach fail or not work as intended for the specific task at hand?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions about the “Consensus” part of the Sessions&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;The idea that consensus is not only about agreement, but also about disagreement is very interesting. Was this a learning from the first sessions or does it come from somewhere else?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions about the specifics of Bytesize Architecture Sessions as a tool&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;What makes Bytesize Architecture Sessions different?&lt;/li&gt;
  &lt;li&gt;How is this collaboration tool different from Event Storming?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions about companies using  Bytesize Architecture Sessions&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Are there any companies using Bytesize Architecture Sessions?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions about Bytesize Architecture Sessions and do people forget between sessions&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Do people forget what was done in the previous session?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions about Bytesize Architecture Sessions and decision making&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Isn’t this technique favouring an organic architecture growth by making collaborative decisions around out of expertise areas?&lt;/li&gt;
  &lt;li&gt;In terms of technical details of the architecture that require in-depth technical discussions How can developers and architects benefit from Bytesize Architecture Sessions to improve alignment of their ideas, have you experienced this?&lt;/li&gt;
  &lt;li&gt;Responsibility for architectural decisions should be fully taken by the architect. This format could imply shared responsibility with the team. How do you avoid that&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions about Bytesize Architecture Sessions and alternative formats&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Why not ask people to come to the meeting with a proposal instead of letting everyone start thinking about the problem when they get into the meeting?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions about Bytesize Architecture Sessions and other tools&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;But we still need to write ADRs, don’t we?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions about facilitating Bytesize Architecture Sessions&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Who facilitates the Bytesize Architecture Sessions? How do you guide people to reach Consensus&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions about the cost of Bytesize Architecture Sessions&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Do you use this format in practice? it looks like it would costs too much time (&amp;amp; money) to include the whole team&lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Thu, 12 Oct 2023 13:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2023/10/12/Twenty-plus-questions-answered-about-bytesize-architecture-sessions/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2023/10/12/Twenty-plus-questions-answered-about-bytesize-architecture-sessions/</guid>
			</item>
		
			<item>
				<title>GSAS presentation and twenty plus questions about Bytesize Architecture sessions - The plan</title>
				<description>&lt;h3 id=&quot;other-posts-on-the-series&quot;&gt;Other posts on the series&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/10/12/Twenty-plus-questions-answered-about-bytesize-architecture-sessions/&quot;&gt;How this series started&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/10/12/bytesize-architecture-sessions-number-of-participants/&quot;&gt;Questions about number of participants&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/01/05/bytesize-sessions-collaboration/&quot;&gt;Questions about team’s attitude to collaboration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/images/2023/team-collab.png&quot; alt=&quot;A group of people collaborating&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;about-the-number-of-participants&quot;&gt;About the number of participants&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;How many people should participate on a Bytesize Architecture Session ideally?&lt;/li&gt;
  &lt;li&gt;What should be the maximum size of people attending a Bytesize Architecture Session?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a new group of people trying out Bytesize Architecture Sessions, the maximum number of participants is somewhere between 6 and 10 people, depending on the group dynamics and experience modelling together.&lt;/p&gt;

&lt;p&gt;If you have less people, things work just fine, I ran sessions with 3 people and it works in that it allows people to collaborate with some framework.&lt;/p&gt;

&lt;p&gt;Other people using Bytesize Architecture Sessions have experimented with numbers of participants, and they
they found it as useful with one person and groups. &lt;a href=&quot;https://bytesizearchitecturesessions.com/news/jean-de-barocchez-documentation&quot;&gt;Link to article&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;why-nine-or-less&quot;&gt;Why nine or less?&lt;/h3&gt;

&lt;p&gt;A session lasts between 45 and 60 minutes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;When there are more people is unlikely that the participants have enough time and attention span to do Alone Together well, nevermind the rest of the session.&lt;/li&gt;
  &lt;li&gt;Hard to “known when to speak”, so many will remain silent.&lt;/li&gt;
  &lt;li&gt;It’s hard to not talk accidentally on top of one another&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’ve experienced teams resorting to “just have some people listening in”.  Don’t! 
It really changes how the sessions feel, they become performative.&lt;/p&gt;

&lt;h3 id=&quot;what-if-you-have-more-people&quot;&gt;What if you have more people?&lt;/h3&gt;

&lt;p&gt;And the answer is: it depends on the problem you are trying to solve.&lt;/p&gt;

&lt;p&gt;If you have a complicated team collaboration, you might want to choose a pair of people from each team to try to navigate to the solution over a series of Bytesize Sessions.&lt;/p&gt;

&lt;p&gt;If your team is bigger than that, it might be a good time to think about where are the silos and why are they there. When it comes to teams configuration,  a good resource to check out is &lt;a href=&quot;https://teamtopologies.com/book&quot;&gt;Team Topologies&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have a bigger problem maybe you need to try other modelling techniques first and then, try some Bytesize Sessions.&lt;/p&gt;

&lt;p&gt;Remember, team configuration is software architecture too!&lt;/p&gt;

&lt;p&gt;PS: Thanks Jacqui Read for the suggestion to group the posts by topic.&lt;/p&gt;

</description>
				<pubDate>Thu, 12 Oct 2023 12:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2023/10/12/bytesize-architecture-sessions-number-of-participants/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2023/10/12/bytesize-architecture-sessions-number-of-participants/</guid>
			</item>
		
			<item>
				<title>Answering questions about Bytesize Architecture sessions - On the goal of the sessions</title>
				<description>&lt;p&gt;I recently spoke  about &lt;a href=&quot;https://bytesizearchitecturesessions.com/&quot;&gt;Bytesize Architecure Sessions&lt;/a&gt; at the &lt;a href=&quot;https://gsas.io/#schedule&quot;&gt;Global Software Architecture Summit&lt;/a&gt;. I got some interesting questions in the Q&amp;amp;A. We didn’t get through all of them, so have grouped them and answering in smaller posts. This one is about how to find the goal of the session.&lt;/p&gt;

&lt;h3 id=&quot;other-posts-on-the-series&quot;&gt;Other posts on the series&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/10/12/Twenty-plus-questions-answered-about-bytesize-architecture-sessions/&quot;&gt;How this series started&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2023/10/12/bytesize-architecture-sessions-number-of-participants/&quot;&gt;Questions about number of participants&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2024/01/05/bytesize-sessions-collaboration/&quot;&gt;Questions about team’s attitude to collaboration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;questions-about-the-goal-of-the-session&quot;&gt;Questions about the goal of the session&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;How to narrow the goal of the session to a specific case? How to reach a goal when the issue is is too big?&lt;/li&gt;
  &lt;li&gt;How many sessions/weeks does it usually take to complete?&lt;/li&gt;
  &lt;li&gt;Let’s imagine that part of a team has implemented a few new services How do we share the knowledge with the rest of the team using Bytesize Architecture Sessions?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All these questions are similar in that we are trying to understand how much work to attempt to do in one session, as well as to try to finish something across sessions.&lt;/p&gt;

&lt;p&gt;Let’s start of with the bigger picture, what are you trying to achieve with these sessions.&lt;br /&gt;
If you are trying to get a team to be more homogeneous on their knowledge of their domain, then you can think about ways to break that up into diagrams that can be roughly drawn in 5 mimnutes, this is why I always suggest to &lt;a href=&quot;/2022/12/26/Why-start-with-C4-diagrams/&quot;&gt;start with C4&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For example in one of the first teams we tried Bytesize Sessions, as a team each of us knew some of the workflows well, but each of us didn’t know all of them, and we had no diagrams for them. So, in each Bytesize Session we did boxes and arrow diagrams of the workflows, one diagram per Session.&lt;/p&gt;

&lt;p&gt;If we now focus on the  how much the participants can model in one session. To answer consider&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What can be modeled in the few minutes that you have set for Alone Together&lt;/li&gt;
  &lt;li&gt;How much experience do the participants have&lt;/li&gt;
  &lt;li&gt;If you are not sure, think about what you need, then try it yourself, with less time(maybe four minutes instead of five)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you iterate with the Sessions’ participants you will all start getting a feel for what you can do.&lt;/p&gt;

&lt;p&gt;Bytesize Architecture Sessions help you evolve an Architecture practice, in a safe space.&lt;/p&gt;
</description>
				<pubDate>Wed, 11 Oct 2023 12:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2023/10/11/bas-goal-session/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2023/10/11/bas-goal-session/</guid>
			</item>
		
			<item>
				<title>New Crafts Paris May 2023</title>
				<description>&lt;p&gt;I am going to be talking at &lt;a href=&quot;https://2023.ncrafts.io/agenda&quot;&gt;New Crafts&lt;/a&gt; this Friday. I’m planning to update this post with more info about how was the conference here, so I figured I will start this post now.&lt;/p&gt;

&lt;h2 id=&quot;my-talk-knowledge-sharing-is-systems-building&quot;&gt;My talk: Knowledge sharing is Systems building&lt;/h2&gt;

&lt;h3 id=&quot;abstract&quot;&gt;Abstract&lt;/h3&gt;

&lt;p&gt;People building a (dynamic) system need to have a high level of shared knowledge. They need to know not just what to build today, but what the system should look like in the near future. Generally, the goal of the system is a bit of mirage, with blurry edges. We have an idea of what it is we are building and we build that together but details are hard to grasp.&lt;/p&gt;

&lt;p&gt;Sharing knowledge effectively is hard, in this talk I will present a technique called Bytesize Architecture Sessions. It is a workshop format that improves knowledge sharing of systems.&lt;/p&gt;

&lt;p&gt;Some of the benefits of Bytesize Architecture Sessions are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Improved systems thinking.&lt;/li&gt;
  &lt;li&gt;Enriching collaboration within the team.&lt;/li&gt;
  &lt;li&gt;Understanding architecture practices and tools in a safe environment.&lt;/li&gt;
  &lt;li&gt;A feedback loop controlled by the team that produces better documentation across sessions.&lt;/li&gt;
  &lt;li&gt;Revealing the Bermuda Triangles!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since you are here you get a peak at one of my slides!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2023/sharing-methods.png&quot; alt=&quot;Sharing methods&quot; /&gt;&lt;/p&gt;

</description>
				<pubDate>Tue, 23 May 2023 03:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2023/05/23/new-crafts-2023/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2023/05/23/new-crafts-2023/</guid>
			</item>
		
			<item>
				<title>Tips for your first technical conference (Non-academic) 2023</title>
				<description>&lt;p&gt;I am going to be giving an in person talk after a long time (at New Crafts, &lt;a href=&quot;https://www.roundcrisis.com/2023/05/23/2023-05-23-new-crafts-2023/&quot;&gt;more info&lt;/a&gt; ), and I was feeling a bit anxious. If I am feeling like that, how do people that never attended one must feel?&lt;/p&gt;

&lt;p&gt;My advice&lt;/p&gt;

&lt;h3 id=&quot;bring&quot;&gt;Bring&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Comfortable footwear. You’ll be standing and walking for a lot longer than you planned 👟&lt;/li&gt;
  &lt;li&gt;Water and snacks. Especially water. There is food and drink in the conference but not always when you need it  🚰 🥜 🍏&lt;/li&gt;
  &lt;li&gt;Plasters and something for headaches. Especially the plasters can be life savers (for those of you that didn’t bring comfy shoes) 🩹 💊&lt;/li&gt;
  &lt;li&gt;Some questions you can ask random people so that you have an excuse to meet them  👋&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;dont-bring&quot;&gt;Don’t bring&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Work ( don’t try to do your normal work as you are in the conference, you kind of do neither well) 🏢 🛑&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;outsourced-tips&quot;&gt;Outsourced tips&lt;/h2&gt;

&lt;p&gt;I reached out for advice and got a lot of helpful ideas that are beneficial for both first-time attendees and speakers. Since the information is spread across a few sources, I figured it would be convenient to gather it all here.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;🕰️ Take breaks. Go outside the venue for coffee. Find some quiet. Go to a park if there is one nearby. Go to your hotel room and stretch out for a while. &lt;a href=&quot;https://mastodon.social/@einarwh/110416724625605555&quot;&gt;Einar W. Høst&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;📇 (This is more for commercial conferences but the sentiment applies) You’re going to meet a lot of people. If you’re handed business cards - once the person is away - use the empty space on the card to write a small note on who the person is, and if you were meant to act on it somehow (write them an e-mail, etc). &lt;a href=&quot;https://www.linkedin.com/in/manuelcorreia/&quot;&gt;Manuel Correia&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;these-are-speaker-specific&quot;&gt;These are speaker specific&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;🐈 Ideally bring a friend, someone you can use as an anchor between sessions. If you’re a speaker, have a friendly face aka a nodder on the first row. &lt;a href=&quot;https://mastodon.social/@einarwh/110416663977069264&quot;&gt;Einar W. Høst&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;🇦If possible,  check your own slides in the room you are going to speak, perhaps in a lunch break. Plug in and go sit on the back row. Does it look good? &lt;strong&gt;While you’re doing the talk is not the right time to find out that you chose the wrong font size.&lt;/strong&gt; &lt;a href=&quot;https://mastodon.social/@einarwh/110417427454970275&quot;&gt;Einar  W. Høst&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;🔥 Warm up, get into a rhythm of speaking 30 minutes before you start… to avoid a cold start. Your best enthusiasm and ideas will come 5-10 mins anyway, so give yourself a running start &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:7066665659065090048?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7066665659065090048%2C7066673231872602112%29&quot;&gt;Adam Murray&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;😸 Tell a story and include something funny. Maybe the story fits with the conference theme, the track in which you are speaking, or your talk alone. If you aren’t sure that your punch line will be funny, be sure to have a follow-up that will make it funny. If you get a laugh with the first, the second will also work. It will relax you and draw your audience into your topic, giving you confidence. Most tech people love savvy humor, and the story will help people remember your talk and your light personality. &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:7066665659065090048?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7066665659065090048%2C7066676155185037312%29&amp;amp;dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287066676155185037312%2Curn%3Ali%3Aactivity%3A7066665659065090048%29&quot;&gt;Vaughn Vernon&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Doing something to relieve tension and nervous energy before speaking might also be good. I tend to stretch a bit and walk around the room, talking a bit to myself like a madman. I have many times thought that sounding a barbaric yawp over the roofs of the world is what I really should be doing before a talk, but I haven’t gone there yet. &lt;a href=&quot;https://mastodon.social/@einarwh/110417438228819477&quot;&gt;Einar  W. Høst&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Tue, 23 May 2023 02:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2023/05/23/tips-for-your-first-technical-conferece/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2023/05/23/tips-for-your-first-technical-conferece/</guid>
			</item>
		
			<item>
				<title>Knowledge sharing is systems building</title>
				<description>&lt;p&gt;It is not uncommon to hear the parable about the blind people and the elephant when learning about systems. It’s a story about a group of blind people who have never come across an elephant before, and who learn and imagine what an elephant is by touching it.&lt;/p&gt;

&lt;p&gt;As I spend more time running &lt;a href=&quot;www.bytesyzearchitecturesessions.com&quot;&gt;Bytesize Architecture Sessions&lt;/a&gt; and thinking about systems in general, I am coming to the (not so surprising?) conclusion that the act of successfully sharing knowledge is an inextricable part of building systems.&lt;/p&gt;

&lt;p&gt;If we needed a metaphor for the act of building systems, it would be something like: A group of blind people imagine something similar to an elephant, maybe someone even heard about elephants once, and they only have the shadow of an elephant to guide them.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2023/shadow-elephant.jpg&quot; alt=&quot;The shadow of an elephant&quot; /&gt;&lt;/p&gt;

&lt;p&gt;After some consideration they decide they want to create an elephant, it takes time and effort and then at some point “it goes live”.&lt;/p&gt;

&lt;p&gt;When a group of people decide to start building a system, and as they continue, what they are building will be a bit of a mirage. It will be not clear and they are only likely to succeed in building  something useful if they communicate and collaborate on what their building.&lt;/p&gt;

&lt;p&gt;We need collaboration to bring something to life, and even more to keep it alive.&lt;/p&gt;

</description>
				<pubDate>Fri, 31 Mar 2023 02:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2023/03/31/knowledge-sharing-as-systems-building/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2023/03/31/knowledge-sharing-as-systems-building/</guid>
			</item>
		
			<item>
				<title>Bytesize architecture sessions - Why start with C4 Diagrams</title>
				<description>&lt;p&gt;In my previous post about &lt;a href=&quot;http://www.roundcrisis.com/2021/09/28/bytesize-architecture-sessions/&quot;&gt;Bytesize Architecture sessions&lt;/a&gt; I described briefly that one of the key aspects of the session is to have  time &lt;a href=&quot;http://www.roundcrisis.com/2022/10/01/the-power-of-alone-together&quot;&gt;“Alone together”&lt;/a&gt; where each of the participants of the session will have a few minutes where they are in the same room &lt;strong&gt;working on the same task, but not collaborating&lt;/strong&gt;. 
What I did not mention was what to do. This post fixes that.&lt;/p&gt;

&lt;p&gt;When I started running sessions I noticed that if you ask people to draw the system without any constraints each person draws at different levels of abstraction, some will add a lot of low level details, some will do a bit of high level and a bit of low level… most won’t be able to finish which is not ideal.&lt;/p&gt;

&lt;p&gt;I suggest drawing what is known as a Context Diagram of the system as is &lt;strong&gt;right now&lt;/strong&gt;. A Context diagram is the top level of the &lt;a href=&quot;https://c4model.com/&quot;&gt;C4 model&lt;/a&gt;. C4 is a modeling technique for describing your system at different abstraction 
levels.&lt;/p&gt;

&lt;p&gt;If you are wondering why drawing the system as it is right now, these are a few reasons&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;It is important to anchor the diagrams in reality. This means that it’s possible to check if the diagrams are correct.&lt;/li&gt;
  &lt;li&gt;Any architecture effort needs information about the current state of the system, what better place to start than drawing something everyone knows about.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your team is not familiar with C4,  teach them about it before a Bytesized Session. I find that most teams get there fairly fast with very little coaching.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://static.structurizr.com/workspace/76748/diagrams/SystemContext.png&quot; height=&quot;300px&quot; alt=&quot;Example of a Context Diagram. Source: C4model.com&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Example of a Context Diagram. Source: C4model.com&lt;/p&gt;

&lt;p&gt;If your system is too big and you think it won’t be possible to draw the whole Context diagram in one session, then break it up.
Once you have a Context Diagram, it is a good idea to continue with the other parts of C4, at least do Container and Components.&lt;/p&gt;

</description>
				<pubDate>Mon, 26 Dec 2022 12:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2022/12/26/Why-start-with-C4-diagrams/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2022/12/26/Why-start-with-C4-diagrams/</guid>
			</item>
		
			<item>
				<title>Case study: The digital transformation of Santa&apos;s logistical nightmare - Part 2</title>
				<description>&lt;p&gt;Note: This is a cross post from &lt;a href=&quot;https://functional-feline-society.github.io/&quot;&gt;Functional Feline Society&lt;/a&gt;, a collaboration between &lt;a href=&quot;http://k1nd.ltd&quot;&gt;Elias Court&lt;/a&gt; and Myself.&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;Welcome to part two of the series. “A series?”, you ask. Read all about it by following the link to &lt;a href=&quot;https://functional-feline-society.github.io/2022/12/16/santas-logistical-nightmare-pt1/&quot;&gt;part one&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In this blog post, we’d like to go through how Santa’s workshop makes use of cats-effect (CE3) to bootstrap itself.&lt;/p&gt;

&lt;p&gt;Before we get started, we want to say that the &lt;a href=&quot;https://typelevel.org/cats-effect/docs/tutorial&quot;&gt;Typelevel documentation&lt;/a&gt; on cats-effect is very complete and well written - so we strongly recommend reading through those if you haven’t had any exposure to cats-effect.&lt;/p&gt;

&lt;p&gt;With that out of the way, let’s get our paws wet and see how we can leverage CE3 to wrangle together all these side effects in our &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Main&lt;/code&gt; class.&lt;/p&gt;

&lt;p&gt;One of the first things you’ll see is that this isn’t a regular scala &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;App&lt;/code&gt; but instead extends &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IOApp.Simple&lt;/code&gt;.
This provides us with an entry point to our application which will evaluate an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IO[Unit]&lt;/code&gt; that we give it.
It is also capable of handling interruption signals by cancelling our application and releasing resources.
If you need access to either program arguments or the ability to return a specific exit code - you’ll need to look at the standard &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IOApp&lt;/code&gt; variant.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-scala&quot; data-lang=&quot;scala&quot;&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;cats.effect.&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;IO&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;IOApp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;object&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Main&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;IOApp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;Simple&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;IO&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;Unit&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;//...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Carrying on to the definition of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;loadKafkaConfigFromEnv&lt;/code&gt; (see below) of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Main.scala&lt;/code&gt;, we have some code that loads the necessary environment variables and if not those values are not there the whole application will fail with a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MissingConfig&lt;/code&gt; error. We also want the return type of this definition to be &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IO[KafkaConfig]&lt;/code&gt;. A more common approach for production apps and configuration values is to use libraries such as &lt;a href=&quot;https://github.com/vlovgr/ciris&quot;&gt;Ciris&lt;/a&gt; or &lt;a href=&quot;https://github.com/pureconfig/pureconfig&quot;&gt;PureConfig&lt;/a&gt;.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-scala&quot; data-lang=&quot;scala&quot;&gt;  &lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;val&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;loadKafkaConfigFromEnv&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;maybeBootstrapServers&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Env&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;IO&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;BOOTSTRAP_SERVERS&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;maybeSchemaRegistryUrl&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Env&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;IO&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;SCHEMA_REGISTRY_URL&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;kafkaConf&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;maybeBootstrapServers&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;maybeSchemaRegistryUrl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;mapN&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bootstrapServers&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;schemaRegistryUrl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nc&quot;&gt;KafkaConfig&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bootstrapServers&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;AvroSettings&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;SchemaRegistryClientSettings&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;IO&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;](&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;schemaRegistryUrl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)))&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;liftTo&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;IO&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;](&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;MissingConfig&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;yield&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;kafkaConf&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;To read environment variables we use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Env[IO]&lt;/code&gt; which is part of CE3 and it’s there for that very reason, pretty handy. On the second and third lines of the code above, we have the two &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Option[String]&lt;/code&gt; environment variables that we need to combine to complete our configuration - here you can see us using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mapN&lt;/code&gt; to combine the options. We want our app to fail bootstrapping if the configuration is missing, so we use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;liftTo&lt;/code&gt; to convert &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Option.None&lt;/code&gt; into an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IO.Error(MissingConfig)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Coming back to the definition of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;run&lt;/code&gt;, the last thing we want to do is initialise our application’s resources and run it forever until it receives an interrupt.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-scala&quot; data-lang=&quot;scala&quot;&gt;  &lt;span class=&quot;k&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;IO&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;Unit&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;_&lt;/span&gt;         &lt;span class=&quot;k&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;IO&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Loading config from ENV...&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;kafkaConf&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;loadKafkaConfigFromEnv&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;_&lt;/span&gt;         &lt;span class=&quot;k&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;IO&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Starting service...&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;_&lt;/span&gt;         &lt;span class=&quot;k&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;SantasServer&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;resource&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;kafkaConf&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;useForever&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;void&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;yield&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;We do this by passing our configuration to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SantaServer.resource&lt;/code&gt; which returns a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Resource[IO, Server]&lt;/code&gt;. We allocate our resources and allow the program to run until terminated by calling &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;useForever&lt;/code&gt; on the &lt;a href=&quot;https://typelevel.org/cats-effect/docs/std/resource&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Resource&lt;/code&gt;&lt;/a&gt;(There will be more on using Resource in other posts). One minor thing to note here, is that we call &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.unit&lt;/code&gt; afterwards - this is because &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;useForever&lt;/code&gt; has a return type of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Nothing&lt;/code&gt; to indicate that the code will never return normally and this triggers a dead code warning from the compiler. We could refactor the code or use a no warning annotation here, but we opted for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.void&lt;/code&gt; to change the type to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IO[Unit]&lt;/code&gt; instead.
As part of the application shutdown, finalizers run for the resources we initialised. This means all resources related to Kafka Consumers, Http4s Server, etc are all cleanly terminated… which is Nice. You’ll likely run into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Resource&lt;/code&gt; quite often and it is talked about in the CE3 documentation we mentioned earlier, so if you’d like to learn more we’d recommend checking it out!&lt;/p&gt;

&lt;h3 id=&quot;notes&quot;&gt;Notes&lt;/h3&gt;

&lt;p&gt;Soon after starting we had to decide what style to write our application in. You’ll frequently come across a pattern called ‘Tagless Final’ where implementations are expressed with an abstract &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;F[_]&lt;/code&gt; effect type and dependencies commonly injected as context bounds.
We chose not to do this and to write our code directly against &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IO[_]&lt;/code&gt; to make the examples more accessible.&lt;/p&gt;

&lt;p&gt;In our example you will see IO as a type parameter to many traits. Some of them defined by libraries (like in the case of Env) and some are defined by us, type parameters work as usual and also they are sign of how we want to deal with all side effects.&lt;/p&gt;

&lt;h3 id=&quot;cat-tax&quot;&gt;Cat Tax!&lt;/h3&gt;

&lt;p&gt;You made it all the way to the end!! wooo! Here is a picture of us! (the authors of this post!!)&lt;/p&gt;

&lt;table&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;img height=&quot;150px&quot; src=&quot;https://functional-feline-society.github.io/images/bones-and-dog-1.png&quot; alt=&quot;Dog &amp;amp; Bones&quot; /&gt;&lt;br /&gt;&lt;a href=&quot;https://functional-feline-society.github.io/images/bones-and-dog-1.png&quot; target=&quot;_blank&quot;&gt; Dog &amp;amp; Bones&lt;/a&gt;&lt;/td&gt;        
        &lt;td&gt;&lt;img height=&quot;150px&quot; src=&quot;https://functional-feline-society.github.io/images/megachu-1.png&quot; alt=&quot;Megachu&quot; /&gt;&lt;br /&gt;&lt;a href=&quot;https://functional-feline-society.github.io/images/megachu-1.png&quot; target=&quot;_blank&quot;&gt;Megachu&lt;/a&gt;&lt;/td&gt;       
      &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
</description>
				<pubDate>Thu, 22 Dec 2022 08:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2022/12/22/io-part-2/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2022/12/22/io-part-2/</guid>
			</item>
		
			<item>
				<title>Case study: The digital transformation of Santa&apos;s logistical nightmare</title>
				<description>&lt;p&gt;Note: This is a cross post from &lt;a href=&quot;https://functional-feline-society.github.io/&quot;&gt;Functional Feline Society&lt;/a&gt;, a collaboration between &lt;a href=&quot;http://k1nd.ltd&quot;&gt;Elias Court&lt;/a&gt; and Myself.&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;introduction&quot;&gt;Introduction&lt;/h1&gt;

&lt;p&gt;This is the first post in a series walking through an example of a microservice with a Kafka integration using the Typelevel stack. We have chosen to showcase a simplified version of Santa’s Ledger.  If you want to see the repo now, &lt;a href=&quot;https://github.com/Functional-Feline-Society/santas-stream/&quot;&gt;click here&lt;/a&gt;.
Unbeknownst to most, Santa’s systems are actually supported by cats (the ones that go meow). The work here was kindly translated into English by our keepers.&lt;/p&gt;

&lt;div&gt;
  &lt;div style=&quot;display: flex; flex-direction: row; flex-wrap: wrap;width: 100%;&quot;&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; flex-basis: 100%; flex: 1; background-position: 99% 75%; background-size: cover; background-image: url(https://user-images.githubusercontent.com/3103/207422703-66e0f264-f8e2-4ae2-91d4-6bd0f3cc20be.png);&quot;&gt;
    &lt;/div&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; flex-basis: 100%; flex: 1;&quot;&gt;
      &lt;img src=&quot;https://raw.githubusercontent.com/K1nd/k1nd.github.io/gh-pages/assets/images/Bones.jpg&quot; alt=&quot;Bones&quot; /&gt;
    &lt;/div&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; flex-basis: 100%; flex: 1;&quot;&gt;
      &lt;img src=&quot;https://raw.githubusercontent.com/K1nd/k1nd.github.io/gh-pages/assets/images/Dog.jpg&quot; alt=&quot;Dog&quot; /&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div style=&quot;display: flex; flex-direction: row; flex-wrap: wrap;width: 100%;&quot;&gt;
&lt;div style=&quot;display: flex; flex-direction: column; flex-basis: 100%; flex: 1; text-align: center;&quot;&gt;
      Megachu
    &lt;/div&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; flex-basis: 100%; flex: 1; text-align: center;&quot;&gt;
      Bones
    &lt;/div&gt;
    &lt;div style=&quot;display: flex; flex-direction: column; flex-basis: 100%; flex: 1; text-align: center;&quot;&gt;
      Dog
    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;This series of posts is a report on our experience building and running Santa’s Ledger, a well known, reliable system of gifting.
One component of this report is a toy version of the real system designed for didactic purposes. This toy repo has representative examples of:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Using &lt;a href=&quot;https://typelevel.org/cats-effect/docs/2.x/datatypes/io&quot;&gt;IO&lt;/a&gt; rather than a finally tagless approach because we thought it might be easier to read for people not used to more functional approaches. Feedback on this most welcome
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/Functional-Feline-Society/santas-stream/blob/eaa88e5809f1690625add84de9b7efdca68897f4/src/main/scala/com/northpole/santas/Main.scala&quot;&gt;Click here for an example&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Consuming messages off of &lt;a href=&quot;https://kafka.apache.org&quot;&gt;Kafka&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/Functional-Feline-Society/santas-stream/blob/eaa88e5809f1690625add84de9b7efdca68897f4/src/main/scala/com/northpole/santas/AddressUpdateConsumer.scala&quot;&gt;Click here for an example&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Serializing and deserializing messages using codecs defined with &lt;a href=&quot;https://fd4s.github.io/vulcan/&quot;&gt;Vulcan&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/Functional-Feline-Society/santas-stream/blob/eaa88e5809f1690625add84de9b7efdca68897f4/src/main/scala/com/northpole/santas/domain.scala&quot;&gt;Click here for an example&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Maintaining concurrency-safe state using &lt;a href=&quot;https://typelevel.org/cats-effect/docs/std/ref&quot;&gt;Ref&lt;/a&gt; from the &lt;a href=&quot;https://typelevel.org/cats-effect/&quot;&gt;cats-effect&lt;/a&gt; standard lib
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/Functional-Feline-Society/santas-stream/blob/eaa88e5809f1690625add84de9b7efdca68897f4/src/main/scala/com/northpole/santas/SantasLedger.scala&quot;&gt;Click here for an example&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Routing using &lt;a href=&quot;https://http4s.org&quot;&gt;HTTP4s&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/Functional-Feline-Society/santas-stream/blob/eaa88e5809f1690625add84de9b7efdca68897f4/src/main/scala/com/northpole/santas/SantasRoutes.scala&quot;&gt;Click here for an example&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Writing tests using &lt;a href=&quot;https://scalameta.org/munit/&quot;&gt;munit&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/Functional-Feline-Society/santas-stream/blob/eaa88e5809f1690625add84de9b7efdca68897f4/src/test/scala/com/northpole/santas/SantasListSpec.scala&quot;&gt;Click here for an example&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Using docker containers for integration test dependencies with &lt;a href=&quot;https://github.com/testcontainers/testcontainers-scala&quot;&gt;test-containers&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/Functional-Feline-Society/santas-stream/blob/eaa88e5809f1690625add84de9b7efdca68897f4/src/it/scala/com/northpole/santas/NaughtyNiceReportSpec.scala&quot;&gt;Click here for an example&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To keep the toy project simple and to the point, there are a series of decisions and assumptions we have made. Please see #Decisions &amp;amp; Assumptions for details.&lt;/p&gt;

&lt;h2 id=&quot;motivation&quot;&gt;Motivation&lt;/h2&gt;

&lt;p&gt;Some of our keeper’s friends, who are coming from Akka and Alpakka, asked us about how to integrate with Kafka using the Typelevel stack.
We decided an example would be a great place to start.&lt;/p&gt;

&lt;p&gt;We looked but in our (not overly extensive) search we were unable to find a recent and succinct example of the above and set off to building one!&lt;/p&gt;

&lt;p&gt;More importantly, it’s 🎄&lt;em&gt;Christmas-time&lt;/em&gt; 🎄 and 🎅 &lt;em&gt;Santa&lt;/em&gt; 🎅 needed a digital transformation.&lt;/p&gt;

&lt;h2 id=&quot;requirements&quot;&gt;Requirements&lt;/h2&gt;

&lt;p&gt;With this example we aim to demonstrate the consumption of kafka messages, maintenance of local state and running an HTTP server using the Typelevel stack.
The requirements are as follows:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Santa’s Address Book should process and store information about the latest address a kid lives at.&lt;/li&gt;
  &lt;li&gt;Santa’s Ledger should process information about a kid’s behaviour and keep track of what present they should receive.&lt;/li&gt;
  &lt;li&gt;Santa must be able to query the service for a kid’s address and the present they should get. (a.k.a. A consignment)&lt;/li&gt;
  &lt;li&gt;Santa must be able to query the service for all consignments destined for an address.
    &lt;ul&gt;
      &lt;li&gt;This is to avoid costly repeat trips to a household. (Rudolph gets a bit tired…)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;decisions--assumptions&quot;&gt;Decisions &amp;amp; Assumptions&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;You have some familiarity with Scala.&lt;/li&gt;
  &lt;li&gt;Last names have a 1-to-1 mapping with address and full names are unique (everyone is very original in this world)&lt;/li&gt;
  &lt;li&gt;Addresses are strings, because Santa and their team are very consistent with addressing and we didn’t want to model this.&lt;/li&gt;
  &lt;li&gt;You already know Kafka and how it works. When we had to make choices about what settings to use we chose whatever made the example easiest to understand.&lt;/li&gt;
  &lt;li&gt;You already know how to write tests. We are not aiming to demonstrate good testing practices.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;whats-next&quot;&gt;What’s next?&lt;/h2&gt;
&lt;p&gt;We’ll dive deeper into some of the technologies used over a series of blog posts throughout the festive period. If you have any preference in order, please let us know.&lt;/p&gt;

&lt;p&gt;This blog post was supervised by &lt;a href=&quot;http://www.roundcrisis.com/&quot;&gt;Andrea Magnorsky&lt;/a&gt; and &lt;a href=&quot;http://k1nd.ltd&quot;&gt;Elias Court&lt;/a&gt;&lt;/p&gt;

</description>
				<pubDate>Fri, 16 Dec 2022 12:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2022/12/16/santas-logistical-nightmare-pt1/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2022/12/16/santas-logistical-nightmare-pt1/</guid>
			</item>
		
			<item>
				<title>Bytesize architecture sessions -The power of Alone Together</title>
				<description>&lt;p&gt;In my previous post about &lt;a href=&quot;https://bytesizearchitecturesessions.com/&quot;&gt;Bytesize Architecture sessions&lt;/a&gt; I described briefly that one of the key aspects of the session is to have “Alone together” time where each of the participants of the session will have &lt;strong&gt;a few minutes where they are working on the same task but not collaborating&lt;/strong&gt; , and they are in the same room (virtual or not).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2022/2022-10-01-17-24-10.png&quot; alt=&quot;A team (of caricature animals) working for a few minutes on the designated task&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The quiet time allows a break to engage on the task at hand and have some time to think (time to think during a meeting is sadly underrated ). Because of it, each participant learns to:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Realise that sometimes they don’t have the full picture, and come up with concrete areas for further investigation .&lt;/li&gt;
  &lt;li&gt;For people new to the team or system, it builds confidence  in what they have learned by revising what they know. New people generally bring great questions. The questions some might have anyway but are tired of asking, or afraid to ask.&lt;/li&gt;
  &lt;li&gt;For some people with less confidence or experience, they generally realise how much they do know. It also has the effect of building on that experience since, this is a systems thinking exercise, with a very low failure risk.&lt;/li&gt;
  &lt;li&gt;Finally, with some iterations, the group can see that they have more or less homogeneous knowledge, and don’t need to always lean on the same people&lt;/li&gt;
  &lt;li&gt;It helps people that find it hard to engage on fast interactions &lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meetings are generally not very effective, getting all of that in a few minutes is  &lt;em&gt;the power of Alone Together&lt;/em&gt;&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Thanks Tolga Sofuoglu for your feedback. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
				<pubDate>Sat, 01 Oct 2022 12:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2022/10/01/the-power-of-alone-together/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2022/10/01/the-power-of-alone-together/</guid>
			</item>
		
			<item>
				<title>Talk-The best Lifehack but for your software</title>
				<description>&lt;p&gt;I did at talk about tools of software architecture 🎉.&lt;/p&gt;

&lt;p&gt;As a programmer you make architecture decisions all the time, whether you like it or not, might as well have some tools to help you with that.&lt;/p&gt;

&lt;p&gt;My aim was to show the tools based on their value, there are excellent resources out there to learn how to use them&lt;/p&gt;

&lt;p&gt;The tools:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;🔧 Understand the problem: Domain storytelling, event storming, impact mapping, etc&lt;/li&gt;
  &lt;li&gt;🔨 Understand the systems and their context: C4, UML sequence diagrams, CRC, etc&lt;/li&gt;
  &lt;li&gt;🪚  Record expensive decisions: ADRs&lt;/li&gt;
  &lt;li&gt;⛏️  Analyse your current context and strategy: Wardley maps&lt;/li&gt;
  &lt;li&gt;🪛 Keep doing all the above: &lt;a href=&quot;https://bytesizearchitecturesessions.com/&quot;&gt;Bytesize Architecture Sessions&lt;/a&gt; you have all the tools above. When do you do this how do you keep it up to date? The recommended format would need some modification if you do workshops formats.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I will link to the recording when it becomes available
&lt;a href=&quot;https://www.roundcrisis.com/presentations/The-best-life-hack-but-for-your-software.pdf&quot;&gt;Presentation Pdf&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;resources&quot;&gt;Resources&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://adr.github.io/&quot;&gt;ADR resources and tooling&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bytesizearchitecturesessions.com/&quot;&gt;Bytesize Architecture Sessions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.infoq.com/articles/C4-architecture-model/&quot;&gt;The C4 Model for Software Architecture&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Domaing Storytelling:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://domainstorytelling.org/&quot;&gt;https://domainstorytelling.org/&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/hofstef/awesome-domain-storytelling&quot;&gt;Awesome Domain storytelling&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ANfYEt16vRI&quot;&gt;Domain Storytelling - Facilitator’s Guide to Enhance Learning in Your Organization by Mufrid Krilic&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Systems and Architecture&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=OqEeIG8aPPk&quot;&gt;Key characteristics of systems Russel Ackoff 10 min video&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.bredemeyer.com/whatis.htm&quot;&gt;What is architecture?&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Wed, 17 Nov 2021 20:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2021/11/17/lifehack-but-for-your-software/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2021/11/17/lifehack-but-for-your-software/</guid>
			</item>
		
			<item>
				<title>Bytesize architecture Sessions</title>
				<description>&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: see Bytesize Architecure Sessions website &lt;a href=&quot;https://bytesizearchitecturesessions.com/&quot;&gt;bytesizearchitecturesessions.com&lt;/a&gt; 🎉&lt;/p&gt;

&lt;p&gt;The more you do something, the better you get at it. It applies to software architecture too. How to do it more often?&lt;/p&gt;

&lt;p&gt;People new to a codebase and those less experienced with programming generally have incomplete or incorrect mental models about the codebase.  One would expect that as time passes, the mental models should become correct, how about being more deliberate about it?&lt;/p&gt;

&lt;p&gt;Here is an easy to try option: Run a Bytesize architecture session:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;An hour long recurrent meeting with your team. Bi-weekly at the start and you can phase it to once a month as people run out of things to draw.&lt;/li&gt;
  &lt;li&gt;Decide together a subset of the architecture you want to draw. This is not a test, it’s an opportunity to learn together about what you know and, most importantly, what you don’t know.&lt;/li&gt;
  &lt;li&gt;Set a timer for 5  minutes.&lt;/li&gt;
  &lt;li&gt;Separately, everyone draws in a piece of paper, this is &lt;a href=&quot;http://www.roundcrisis.com/2022/10/01/the-power-of-alone-together/&quot;&gt;“Alone Together”&lt;/a&gt; time. If you don’t know something, leave it blank.&lt;/li&gt;
  &lt;li&gt;When the timer goes off show each other what you drew. Yes, it’s kind of scary.&lt;/li&gt;
  &lt;li&gt;Discuss and find consensus on what is the resulting diagram should be. Finally record the diagram(s) created somewhere (e.g: draw.io, miro, plantuml, etc)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is normal to forget some parts. Together you can make a better picture.&lt;/p&gt;

&lt;h2 id=&quot;outcomes&quot;&gt;Outcomes&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Understanding of whatever you decided to focus on the session will increase. Now you have concrete questions, and generally you can find the answers in the code.&lt;/li&gt;
  &lt;li&gt;Deliberately thinking about architecture with a cadence keeps the ideas fresh in people’s mind.&lt;/li&gt;
  &lt;li&gt;The resulting diagrams become a design tool that is inherently familiar to the team, since they created it.&lt;/li&gt;
  &lt;li&gt;The resulting diagrams highlight obvious areas for improvement.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;what-do-you-need-to-run-a-session&quot;&gt;What do you need to run a session&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Cup of tea / coffee / water&lt;/li&gt;
  &lt;li&gt;1 hour with your team&lt;/li&gt;
  &lt;li&gt;pen and paper or an online board&lt;/li&gt;
  &lt;li&gt;Psychological safety (essential)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;what-is-this-practise-trying-to-address&quot;&gt;What is this practise trying to address&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;In most teams there is at least one person that has a high fidelity image of the architecture in their heads. It is common for other people in the team to defer questions and decisions about the architecture to that person, this is great (is it tho?) until that person is not available.&lt;/li&gt;
  &lt;li&gt;If everyone in the team has the same or similar picture of the architecture in their heads, they will make better decisions on their day to day.&lt;/li&gt;
  &lt;li&gt;I have tried this for a few years and it has proven super useful. Teams are happy to build this together and get a feeling of ownership.&lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Tue, 28 Sep 2021 20:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2021/09/28/bytesize-architecture-sessions/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2021/09/28/bytesize-architecture-sessions/</guid>
			</item>
		
			<item>
				<title>Chasing a trail or chasing our tail History of .net from a PL perspective</title>
				<description>&lt;p&gt;Using .net as an example we’ll go over the technical decisions that influenced how todays languages look like. 
We will look at some key technologies that enabled the creation of .net, the reasons for its creation and the origin of its core features.&lt;/p&gt;

&lt;p&gt;Video of the conference (with video starting with at my talk. The whole conference is in that video) :&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/UiNe9kWU9jg?start=2474&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;I have created the following diagram to make following the topics of the talk simpler. There are many ways to link these, and&lt;/p&gt;

&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; version=&quot;1.1&quot; width=&quot;981px&quot; viewBox=&quot;-0.5 -0.5 981 476&quot; content=&quot;&amp;lt;mxfile host=&amp;quot;app.diagrams.net&amp;quot; modified=&amp;quot;2020-12-15T19:27:31.671Z&amp;quot; agent=&amp;quot;5.0 (X11)&amp;quot; etag=&amp;quot;NP3awTbYvBEQ5ozayvlW&amp;quot; version=&amp;quot;14.0.1&amp;quot; type=&amp;quot;google&amp;quot;&amp;gt;&amp;lt;diagram id=&amp;quot;sgKMIF6o9ne-Y3ZcKWrN&amp;quot; name=&amp;quot;Page-1&amp;quot;&amp;gt;5VtdW+I4FP41XDJP2/SLSy0yrquC4qwfN/NEGtuspem2QcBfvymk9CtiRwthnBtpTpI2OefNe05OYgc408X3GEb+BXFR0NEUd9EB/Y6mqcBQ2E8qWa4lds9YC7wYu7xRLhjjV8SFvJ83wy5KSg0pIQHFUVk4IWGIJrQkg3FM5uVmTyQofzWCHqoJxhMY1KW32KU+l6pmL684Rdjz+adtzVpXTGHWmM8k8aFL5gUROOkAJyaErp+mCwcFqfIyvaz7Dd6o3QwsRiFt0mE2jB4xGY/7A5ucXp16I71/3TX52OgymzBy2fx5kcTUJx4JYXCSS49jMgtdlL5VYaW8zTkhEROqTPgvonTJjQlnlDCRT6cBr2UDjpd3vP+qcJ8WvhlZsb8oVvaXvFSfMVdCQmbxhI//vzmy6OhhcX5D7cvF6Y8J7g67GXJg7CG6pR1Yt0t1UPgA1+d3RKaIjYc1iFEAKX4pYwRyqHmbdrk12AM3iNg420b9AoMZ/9K5M6gZLDdHqtu5jykaR3Cljjlbk2XVv6nCFxRTtNg6aV6r9Tig+YpWM4DP8/VhcZFfWBm6siM1pf1lgjjH7X0Jtm2DGDQEsXFQIAY1EHc0M2DjP3bxC3v00seL80zIvlGQSwc7aAD23j7BbjRRJyMJcKAKVRWtrFHNMmoaVZV9qtSSQR8fpwG7IQ1kEVR7PMC7jghmY95YtKcbJYPqtlZ+xXqkvFfFVpthNDKfb/ZvgHscKvbTUonmVw+j+3lX1f+MGKax3fWD4n+7Rlhn8AWyV539cyGdjUxQJiMA6vS+XzLawOEgghl1Z2jO2Ol9OKsHBWftD2GbxvY5rGgzG3aBbkb49RXKZxq7EvaYZo1pRIEk2BXRqPXdZZr2kK8pq6opQci9M0527XHy9/TWvXMcXbsMbefsDnQlL/m9UbJggynUR+tZklXXoziGy0KDKA0Yk8Kbq3GnVY47DWBWLL1+Y7vBJpCMBdWyfwUNq9IIxZhNHMU7gciegtCPYUSp7E2USo602l41t7X/NKa2KrXAxN9CRD9HxE84CBwSkHjVF7gGsl2dyRMak2dUqLG1R8B8USvUbVtl6jbUupPba2pQlZzf3ht1679ntKbXkO+sUleSQ5CeUtkW6vsL1oRux5YB40/AUZCrEM7LOiw41nMVolw1nsQkIU/0QDOsQK+QcNP4uQ30bosXC2q9ICH5Df1br6JaXduffxOun7pmLSWpKZbNjpa1V9ZSSEJUUSkXwQB7IStOmM7S8PE41RVm28QjXjHFrrtiG5G5ygzUgv41swJtwdmBLtC/tiv91/2XgDDs1CSNqOLLGEqXaKih+tdkcvbzNlJeQ9K96w7mV+Ms7jmMrJ31XtouYY6THqW3V3ILr2QDnE6b93CzFpMAJgmerIW8SWMHvs0vv7/Nk3ZhYtuwixcmUmzh0JPulS2ZXlmcyqinSntf2XmYVQvIdh6CDKzylQ1gS3QK5OH58fl5ej2/uO46ThQNT4eP2f2qw3AKrRzliHHW9OTYlkXmQpetybGOW/G7uUuteWbud298HFYc9Oe8r8hgQhVJOxrdOuwCn/1wxuxHGcGEsY50Hwwq6cm9nvYLr99KwvgmPam1f3VROM+m929bT09+6NRAVSpXmrLb6G0dA2zT0fa95JD6zJO/sZustR6zQCEM0qnTZcQgoymDS/YngKE3gx7abEsf4+pL3tmosungKFltS3wYoRUXkpn7/iouL/k21rRdNpXa02trWjMEa9o0duS36nY8dkbn0slP1fdHfqyY/1/Den3k/x0CTv4H&amp;lt;/diagram&amp;gt;&amp;lt;/mxfile&amp;gt;&quot; onclick=&quot;(function(svg){var src=window.event.target||window.event.srcElement;while (src!=null&amp;amp;&amp;amp;src.nodeName.toLowerCase()!=&apos;a&apos;){src=src.parentNode;}if(src==null){if(svg.wnd!=null&amp;amp;&amp;amp;!svg.wnd.closed){svg.wnd.focus();}else{var r=function(evt){if(evt.data==&apos;ready&apos;&amp;amp;&amp;amp;evt.source==svg.wnd){svg.wnd.postMessage(decodeURIComponent(svg.getAttribute(&apos;content&apos;)),&apos;*&apos;);window.removeEventListener(&apos;message&apos;,r);}};window.addEventListener(&apos;message&apos;,r);svg.wnd=window.open(&apos;https://viewer.diagrams.net/?client=1&amp;amp;page=0&apos;);}}})(this);&quot; style=&quot;cursor:pointer;max-width:100%;max-height:476px;&quot;&gt;&lt;defs /&gt;&lt;g&gt;&lt;path d=&quot;M 220 20 L 240 20 L 230 20 L 243.63 20&quot; fill=&quot;none&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot; /&gt;&lt;path d=&quot;M 248.88 20 L 241.88 23.5 L 243.63 20 L 241.88 16.5 Z&quot; fill=&quot;#000000&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot; /&gt;&lt;rect x=&quot;150&quot; y=&quot;0&quot; width=&quot;70&quot; height=&quot;40&quot; rx=&quot;6&quot; ry=&quot;6&quot; fill=&quot;#ffffff&quot; stroke=&quot;#000000&quot; pointer-events=&quot;all&quot; /&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject style=&quot;overflow: visible; text-align: left;&quot; pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 68px; height: 1px; padding-top: 20px; margin-left: 151px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; font-size: 0; text-align: center; &quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; &quot;&gt;LCF&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;185&quot; y=&quot;24&quot; fill=&quot;#000000&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;LCF&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 340 20 L 930 20 L 930 148.63&quot; fill=&quot;none&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot; /&gt;&lt;path d=&quot;M 930 153.88 L 926.5 146.88 L 930 148.63 L 933.5 146.88 Z&quot; fill=&quot;#000000&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot; /&gt;&lt;rect x=&quot;250&quot; y=&quot;0&quot; width=&quot;90&quot; height=&quot;40&quot; rx=&quot;6&quot; ry=&quot;6&quot; fill=&quot;#ffffff&quot; stroke=&quot;#000000&quot; pointer-events=&quot;all&quot; /&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject style=&quot;overflow: visible; text-align: left;&quot; pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 20px; margin-left: 251px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; font-size: 0; text-align: center; &quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; &quot;&gt;&lt;div&gt;ML&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;295&quot; y=&quot;24&quot; fill=&quot;#000000&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;ML&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;880&quot; y=&quot;155&quot; width=&quot;100&quot; height=&quot;40&quot; rx=&quot;6&quot; ry=&quot;6&quot; fill=&quot;#ffffff&quot; stroke=&quot;#000000&quot; pointer-events=&quot;all&quot; /&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject style=&quot;overflow: visible; text-align: left;&quot; pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 175px; margin-left: 881px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; font-size: 0; text-align: center; &quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; &quot;&gt;&lt;div&gt;F#&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;930&quot; y=&quot;179&quot; fill=&quot;#000000&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;F#&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 540 210 L 540 190 L 585 190 L 585 182.37&quot; fill=&quot;none&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot; /&gt;&lt;path d=&quot;M 585 177.12 L 588.5 184.12 L 585 182.37 L 581.5 184.12 Z&quot; fill=&quot;#000000&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot; /&gt;&lt;path d=&quot;M 590 230 L 675 230 L 675 241 L 753.63 241&quot; fill=&quot;none&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot; /&gt;&lt;path d=&quot;M 758.88 241 L 751.88 244.5 L 753.63 241 L 751.88 237.5 Z&quot; fill=&quot;#000000&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot; /&gt;&lt;rect x=&quot;490&quot; y=&quot;210&quot; width=&quot;100&quot; height=&quot;40&quot; rx=&quot;6&quot; ry=&quot;6&quot; fill=&quot;#ffffff&quot; stroke=&quot;#000000&quot; pointer-events=&quot;all&quot; /&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject style=&quot;overflow: visible; text-align: left;&quot; pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 230px; margin-left: 491px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; font-size: 0; text-align: center; &quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; &quot;&gt;Java/JVM&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;540&quot; y=&quot;234&quot; fill=&quot;#000000&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;Java/JVM&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 630 161 L 690 161 L 690 146.37&quot; fill=&quot;none&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot; /&gt;&lt;path d=&quot;M 690 141.12 L 693.5 148.12 L 690 146.37 L 686.5 148.12 Z&quot; fill=&quot;#000000&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot; /&gt;&lt;path d=&quot;M 630 161 L 755 161 L 755 175 L 873.63 175&quot; fill=&quot;none&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot; /&gt;&lt;path d=&quot;M 878.88 175 L 871.88 178.5 L 873.63 175 L 871.88 171.5 Z&quot; fill=&quot;#000000&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot; /&gt;&lt;rect x=&quot;540&quot; y=&quot;146&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;4.5&quot; ry=&quot;4.5&quot; fill=&quot;#ffffff&quot; stroke=&quot;#000000&quot; pointer-events=&quot;all&quot; /&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject style=&quot;overflow: visible; text-align: left;&quot; pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 161px; margin-left: 541px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; font-size: 0; text-align: center; &quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; &quot;&gt;Pizza&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;585&quot; y=&quot;165&quot; fill=&quot;#000000&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;Pizza&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;640&quot; y=&quot;100&quot; width=&quot;100&quot; height=&quot;40&quot; rx=&quot;6&quot; ry=&quot;6&quot; fill=&quot;#ffffff&quot; stroke=&quot;#000000&quot; pointer-events=&quot;all&quot; /&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject style=&quot;overflow: visible; text-align: left;&quot; pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 120px; margin-left: 641px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; font-size: 0; text-align: center; &quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; &quot;&gt;Scala&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;690&quot; y=&quot;124&quot; fill=&quot;#000000&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;Scala&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 800 416 L 835 416 L 835 352.37&quot; fill=&quot;none&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot; /&gt;&lt;path d=&quot;M 835 347.12 L 838.5 354.12 L 835 352.37 L 831.5 354.12 Z&quot; fill=&quot;#000000&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot; /&gt;&lt;path d=&quot;M 765 396 L 765 280 L 776 280 L 776.01 262.37&quot; fill=&quot;none&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot; /&gt;&lt;path d=&quot;M 776.02 257.12 L 779.51 264.12 L 776.01 262.37 L 772.51 264.12 Z&quot; fill=&quot;#000000&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot; /&gt;&lt;rect x=&quot;730&quot; y=&quot;396&quot; width=&quot;70&quot; height=&quot;40&quot; rx=&quot;6&quot; ry=&quot;6&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; pointer-events=&quot;all&quot; /&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject style=&quot;overflow: visible; text-align: left;&quot; pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 68px; height: 1px; padding-top: 416px; margin-left: 731px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; font-size: 0; text-align: center; &quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; &quot;&gt;.net&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;765&quot; y=&quot;420&quot; fill=&quot;#000000&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;.net&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 850 241 L 930 241 L 930 201.37&quot; fill=&quot;none&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot; /&gt;&lt;path d=&quot;M 930 196.12 L 933.5 203.12 L 930 201.37 L 926.5 203.12 Z&quot; fill=&quot;#000000&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot; /&gt;&lt;rect x=&quot;760&quot; y=&quot;226&quot; width=&quot;90&quot; height=&quot;30&quot; rx=&quot;4.5&quot; ry=&quot;4.5&quot; fill=&quot;#ffffff&quot; stroke=&quot;#000000&quot; pointer-events=&quot;all&quot; /&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject style=&quot;overflow: visible; text-align: left;&quot; pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 241px; margin-left: 761px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; font-size: 0; text-align: center; &quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; &quot;&gt;C#&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;805&quot; y=&quot;245&quot; fill=&quot;#000000&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;C#&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 300 415 L 593.63 415&quot; fill=&quot;none&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot; /&gt;&lt;path d=&quot;M 598.88 415 L 591.88 418.5 L 593.63 415 L 591.88 411.5 Z&quot; fill=&quot;#000000&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot; /&gt;&lt;rect x=&quot;200&quot; y=&quot;400&quot; width=&quot;100&quot; height=&quot;30&quot; rx=&quot;4.5&quot; ry=&quot;4.5&quot; fill=&quot;#ffffff&quot; stroke=&quot;#000000&quot; pointer-events=&quot;all&quot; /&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject style=&quot;overflow: visible; text-align: left;&quot; pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 415px; margin-left: 201px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; font-size: 0; text-align: center; &quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; &quot;&gt;&lt;div&gt;Microsoft&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;250&quot; y=&quot;419&quot; fill=&quot;#000000&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;Microsoft&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;800&quot; y=&quot;306&quot; width=&quot;70&quot; height=&quot;40&quot; rx=&quot;6&quot; ry=&quot;6&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; pointer-events=&quot;all&quot; /&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject style=&quot;overflow: visible; text-align: left;&quot; pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 68px; height: 1px; padding-top: 326px; margin-left: 801px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; font-size: 0; text-align: center; &quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; &quot;&gt;Mono&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;835&quot; y=&quot;330&quot; fill=&quot;#000000&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;Mono&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;120&quot; y=&quot;455&quot; width=&quot;40&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;none&quot; pointer-events=&quot;all&quot; /&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject style=&quot;overflow: visible; text-align: left;&quot; pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 465px; margin-left: 121px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; font-size: 0; text-align: center; &quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; &quot;&gt;70s&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;140&quot; y=&quot;469&quot; fill=&quot;#000000&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;70s&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;320&quot; y=&quot;455&quot; width=&quot;40&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;none&quot; pointer-events=&quot;all&quot; /&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject style=&quot;overflow: visible; text-align: left;&quot; pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 465px; margin-left: 321px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; font-size: 0; text-align: center; &quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; &quot;&gt;&lt;div&gt;80s&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;340&quot; y=&quot;469&quot; fill=&quot;#000000&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;80s&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 700 415 L 720 415 L 720 426 L 723.63 426&quot; fill=&quot;none&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot; /&gt;&lt;path d=&quot;M 728.88 426 L 721.88 429.5 L 723.63 426 L 721.88 422.5 Z&quot; fill=&quot;#000000&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot; /&gt;&lt;rect x=&quot;600&quot; y=&quot;400&quot; width=&quot;100&quot; height=&quot;30&quot; rx=&quot;4.5&quot; ry=&quot;4.5&quot; fill=&quot;#ffffff&quot; stroke=&quot;#000000&quot; pointer-events=&quot;all&quot; /&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject style=&quot;overflow: visible; text-align: left;&quot; pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 415px; margin-left: 601px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; font-size: 0; text-align: center; &quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; &quot;&gt;Lighting&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;650&quot; y=&quot;419&quot; fill=&quot;#000000&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;Lighting&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;500&quot; y=&quot;455&quot; width=&quot;40&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;none&quot; pointer-events=&quot;all&quot; /&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject style=&quot;overflow: visible; text-align: left;&quot; pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 465px; margin-left: 501px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; font-size: 0; text-align: center; &quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; &quot;&gt;90s&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;520&quot; y=&quot;469&quot; fill=&quot;#000000&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;90s&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;720&quot; y=&quot;455&quot; width=&quot;40&quot; height=&quot;20&quot; fill=&quot;none&quot; stroke=&quot;none&quot; pointer-events=&quot;all&quot; /&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject style=&quot;overflow: visible; text-align: left;&quot; pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 465px; margin-left: 721px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; font-size: 0; text-align: center; &quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; &quot;&gt;00s&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;740&quot; y=&quot;469&quot; fill=&quot;#000000&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;00s&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 330 230 L 483.63 230&quot; fill=&quot;none&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot; /&gt;&lt;path d=&quot;M 488.88 230 L 481.88 233.5 L 483.63 230 L 481.88 226.5 Z&quot; fill=&quot;#000000&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot; /&gt;&lt;path d=&quot;M 223.63 230 L 100 230&quot; fill=&quot;none&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot; /&gt;&lt;path d=&quot;M 228.88 230 L 221.88 232.33 L 223.63 230 L 221.88 227.67 Z&quot; fill=&quot;#000000&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot; /&gt;&lt;rect x=&quot;230&quot; y=&quot;210&quot; width=&quot;100&quot; height=&quot;40&quot; rx=&quot;6&quot; ry=&quot;6&quot; fill=&quot;#ffffff&quot; stroke=&quot;#000000&quot; pointer-events=&quot;all&quot; /&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject style=&quot;overflow: visible; text-align: left;&quot; pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 230px; margin-left: 231px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; font-size: 0; text-align: center; &quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; &quot;&gt;UCSD Pascal&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;280&quot; y=&quot;234&quot; fill=&quot;#000000&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;UCSD Pascal&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 477.69 90 L 905 90 L 905 148.63&quot; fill=&quot;none&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot; /&gt;&lt;path d=&quot;M 905 153.88 L 901.5 146.88 L 905 148.63 L 908.5 146.88 Z&quot; fill=&quot;#000000&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot; /&gt;&lt;path d=&quot;M 307.5 90.25 C 257.5 90.25 245 106.5 285 109.75 C 245 116.9 290 132.5 322.5 126 C 345 139 420 139 445 126 C 495 126 495 113 463.75 106.5 C 495 93.5 445 80.5 401.25 87 C 370 77.25 320 77.25 307.5 90.25 Z&quot; fill=&quot;#ffffff&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot; /&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject style=&quot;overflow: visible; text-align: left;&quot; pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 248px; height: 1px; padding-top: 107px; margin-left: 246px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; font-size: 0; text-align: center; &quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; &quot;&gt;&lt;div&gt;Other&lt;/div&gt;&lt;div&gt;Stronly typed FN languages&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;370&quot; y=&quot;110&quot; fill=&quot;#000000&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;Other...&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;0&quot; y=&quot;210&quot; width=&quot;100&quot; height=&quot;40&quot; rx=&quot;6&quot; ry=&quot;6&quot; fill=&quot;#ffffff&quot; stroke=&quot;#000000&quot; pointer-events=&quot;all&quot; /&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject style=&quot;overflow: visible; text-align: left;&quot; pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 230px; margin-left: 1px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; font-size: 0; text-align: center; &quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; &quot;&gt;BCPL&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;50&quot; y=&quot;234&quot; fill=&quot;#000000&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;BCPL&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;/g&gt;&lt;switch&gt;&lt;g requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; /&gt;&lt;a transform=&quot;translate(0,-5)&quot; xlink:href=&quot;https://www.diagrams.net/doc/faq/svg-export-text-problems&quot; target=&quot;_blank&quot;&gt;&lt;text text-anchor=&quot;middle&quot; font-size=&quot;10px&quot; x=&quot;50%&quot; y=&quot;100%&quot;&gt;Viewer does not support full SVG 1.1&lt;/text&gt;&lt;/a&gt;&lt;/switch&gt;&lt;/svg&gt;

&lt;h2 id=&quot;resources&quot;&gt;Resources&lt;/h2&gt;

&lt;h3 id=&quot;microsoft-early-history&quot;&gt;Microsoft early history&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.irishtimes.com/business/technology/microsoft-key-facts-1.2682924&quot;&gt;Microsoft: key facts- Irish Times&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/History_of_Microsoft&quot;&gt;History of Microsoft - Wikipedia&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=trHTLFNFoWk&quot;&gt;The History of .net&lt;/a&gt; from Richard Campbell from .Net Rocks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;virtual-machines&quot;&gt;Virtual Machines&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.cl.cam.ac.uk/~mr10/&quot;&gt;Many BCPL papers and links by Martin Richards&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://skillsmatter.com/skillscasts/9741-you-were-eaten-by-a-grue&quot;&gt;Z-Machine talk by Ross McKinlay&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;https://en.wikipedia.org/wiki/UCSD_Pascal&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;ml-family-of-programming-languages&quot;&gt;ML family of programming languages&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20200224231802/http://sml-family.org/history/&quot;&gt;Standard ML history&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=NVEgyJCTee4&quot;&gt;The History of Standard ML: Ideas, Principles, Culture&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;java-and-the-jvm&quot;&gt;Java and the JVM&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.geeksforgeeks.org/the-complete-history-of-java-programming-language/&quot;&gt;History of Java&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.infoq.com/presentations/gosling-jvm-lang-summit-keynote/&quot;&gt;James Gosling talk about the beinnings of Java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;lighting-and-early-days-of-net&quot;&gt;Lighting and early days of .Net&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-version-history&quot;&gt;The history of C#&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://fsharp.org/history/hopl-final/hopl-fsharp.pdf&quot;&gt;History of F#&lt;/a&gt; by Don Syme&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20140724090729/http://connect.microsoft.com/VisualStudio/feedback/details/166013/c-compiler-should-optimize-tail-calls&quot;&gt;Interesting discussion about tail calls in C#&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mono-project.com/docs/about-mono/history/&quot;&gt;History of Mono&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/.NET_Framework#History&quot;&gt;.NET Framework&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;net-generics&quot;&gt;.NET Generics&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.microsoft.com/en-us/research/wp-content/uploads/2001/01/designandimplementationofgenerics.pdf&quot;&gt;Design and Implementation of Generics for the .NET Common Language Runtime - Paper - Andrew Kennedy , Don Syme&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mattwarren.org/data/2018/03/csharp.html&quot;&gt;Generics in C#&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mattwarren.org/2018/03/02/How-generics-were-added-to-.NET/&quot;&gt;How Generics were added to .Net&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mattwarren.org/data/2018/03/clrgen-types.html&quot;&gt;Generics in the common type system&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;don-syme-and-f&quot;&gt;Don Syme and F#&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://fsharp.org/history/hopl-final/hopl-fsharp.pdf&quot;&gt;History of F#&lt;/a&gt; by Don Syme&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;other-resources&quot;&gt;Other resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;(The evolution of C#: Lead designer describes modernization journey, breaks it down about getting func-y)[https://www.theregister.com/2020/11/11/the_evolution_of_c_lead/]&lt;/li&gt;
  &lt;li&gt;Why No One Uses Functional Languages. / Wadler, Philip. In: ACM Sigplan Notices, Vol. 33, No. 8, 08.1998, p. 23-27.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/2835801/why-hasnt-functional-programming-taken-over-yet&quot;&gt;Why hasn’t functional programming taken over yet&lt;/a&gt; The answer by Eric Lippert in this thread&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;final-words&quot;&gt;Final words&lt;/h2&gt;

&lt;p&gt;If you enjoyed this talk and the subject, I have done some other talks about history and philosophy of Programming languages:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ZuDm2PPQNMQ&quot;&gt;A brief and incomplete history of programming languages - Curry On&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=WBu43Tj0zOY&quot;&gt;Keynote: Inviting everyone to the party&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Be warned, history of PL is an appealing rabbit hole. If you want to delve (a lot) deeper into the history of PL the whole series of books on based on the &lt;a href=&quot;https://dl.acm.org/action/doSearch?AllField=HoPL&quot;&gt;HoPL conferences books&lt;/a&gt; are a great resource.&lt;/p&gt;

</description>
				<pubDate>Wed, 16 Dec 2020 20:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2020/12/16/history-dotnet/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2020/12/16/history-dotnet/</guid>
			</item>
		
			<item>
				<title>Timer with Cats Effects</title>
				<description>&lt;p&gt;Not so long ago, I had to add a feature that should run periodically as part of a web-server. I thought, no problem, I will use &lt;a href=&quot;https://typelevel.org/cats-effect/datatypes/contextshift.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cats effects&lt;/code&gt;&lt;/a&gt; that will run whatever I need on a separate thread and return once completed. I was wrong …&lt;/p&gt;

&lt;p&gt;My initial program looked something like this:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;object TimerInitial extends IOApp {

  def periodicReminder(implicit contextShift: ContextShift[IO]): IO[Unit] = {
    println(&quot;from periodic &quot;)
    timer.sleep(1.second).flatMap(_ =&amp;gt; periodicReminder)
  }

  override def run(args: List[String]): IO[ExitCode] =
    for {
      _ &amp;lt;- IO(println(s&quot;Before&quot;))
      _ &amp;lt;- IO.shift *&amp;gt; periodicReminder
      _ &amp;lt;- IO(println(&quot;After&quot;))
      _ &amp;lt;- IO.sleep(5.second)
      _ &amp;lt;- IO(println(s&quot;end&quot;))
    } yield ExitCode.Success

}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;What I was trying to achieve was that it will print:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Before 
from periodic
After
from periodic 
from periodic 
from periodic 
end 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Process finished with exit code 0&lt;/p&gt;

&lt;p&gt;However what I got was:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Before 
from periodic 
from periodic 
from periodic 
from periodic 

//until I stopped execution
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This is not ideal but why is this  happening? 
In the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;for comprehension&lt;/code&gt; there is a call to  &lt;a href=&quot;https://typelevel.org/cats-effect/datatypes/io.html#thread-shifting&quot;&gt;IO.shift&lt;/a&gt;, and given the rest of the code, we switch context to where the method where we have a timer and there is nothing to bring us back to the context of the main &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;run&lt;/code&gt; method.&lt;/p&gt;

&lt;p&gt;So I thought, maybe something can bring the context back, I tried &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IO.delay&lt;/code&gt; which Suspends a synchronous side effect in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IO&lt;/code&gt;. Which is not really what I needed to do.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;object ThingWithTimer extends IOApp {
  def periodicReminder(implicit contextShift: ContextShift[IO]): IO[Unit] = IO.delay {
    println(&quot;from periodic &quot;)
    timer.sleep(1.second).flatMap(_ =&amp;gt; periodicReminder)
  }

  override def run(args: List[String]): IO[ExitCode] = {
    
    for {
      _ &amp;lt;- IO(println(s&quot;Before&quot;))
      _ &amp;lt;- IO.shift *&amp;gt; periodicReminder
      _ &amp;lt;- IO(println(&quot;After&quot;))
      _ &amp;lt;- IO.sleep(5.second)
      _ &amp;lt;- IO(println(s&quot;end&quot;))
    } yield ExitCode.Success
  }

}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The results of running this were however a little closer to what I was looking for in that the context returned to the main &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;run&lt;/code&gt; method:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Before
from periodic 
After
end

Process finished with exit code 0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So, what we were looking for is a method called &lt;a href=&quot;https://github.com/typelevel/cats-effect/blob/series/2.x/core/shared/src/main/scala/cats/effect/IO.scala#L405&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;background&lt;/code&gt;&lt;/a&gt; which returns a resource that will start execution of this IO in the background. Which is pretty perfect for the kind of task this needs to do.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;object TimerBackground extends IOApp {

  def periodicReminder(implicit contextShift: ContextShift[IO]): IO[Unit] =
    for {
      _ &amp;lt;- IO(println(&quot;From periodic &quot;))
      _ &amp;lt;- timer.sleep(1.second).flatMap(_ =&amp;gt; periodicReminder)
    } yield ()  

  override def run(args: List[String]): IO[ExitCode] =
    (for {
      _ &amp;lt;- Resource.liftF(IO(println(s&quot;Before ${ZonedDateTime.now()}&quot;)))

      _ &amp;lt;- periodicReminder.background
      _ &amp;lt;- Resource.liftF(IO(println(&quot;After&quot;)))
      _ &amp;lt;- Resource.liftF(IO.sleep(5.seconds))
      _ &amp;lt;- Resource.liftF(IO(println(s&quot;end &quot;)))
    } yield ()).use(_ =&amp;gt; IO(ExitCode.Success))
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And I think that is all for today, till the next time.&lt;/p&gt;
</description>
				<pubDate>Mon, 30 Nov 2020 20:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2020/11/30/Timer-with-effects/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2020/11/30/Timer-with-effects/</guid>
			</item>
		
			<item>
				<title>Running scala steward on private repos</title>
				<description>&lt;h3 id=&quot;motivation&quot;&gt;Motivation&lt;/h3&gt;

&lt;p&gt;Keep the dependencies in many repositories up to date as automatically as possible. Warn me when they can’t be updated automatically without breaking the build.&lt;/p&gt;

&lt;h3 id=&quot;how-to-run&quot;&gt;How to run&lt;/h3&gt;

&lt;p&gt;You can run by cloning the repo and running it, check the &lt;a href=&quot;https://github.com/scala-steward-org/scala-steward/blob/master/docs/running.md&quot;&gt;instructions&lt;/a&gt;.If you want to run this on private repos on some CI I find that it might be easier to run from Docker. I especially like that you can use a particular version you know works and move when you are ready.&lt;/p&gt;

&lt;p&gt;To run from Docker, execute something like this from where you checked out scala-steward(setup the necessary env vars STEWARD_DIR, LOGIN and EMAIL accordingly):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run -v $STEWARD_DIR:/opt/scala-steward -it fthomas/scala-steward:latest \
  --workspace  &quot;/opt/scala-steward/workspace&quot; \
  --repos-file &quot;/opt/scala-steward/repos.md&quot; \
  --default-repo-conf &quot;/opt/scala-steward/default.scala-steward.conf&quot; \
  --git-author-email ${EMAIL} \
  --vcs-api-host &quot;https://api.github.com&quot; \
  --vcs-login ${LOGIN} \
  --git-ask-pass &quot;/opt/scala-steward/.github/askpass/$LOGIN.sh&quot; \
  --sign-commits \
  --env-var FOO=BAR
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Let’s break this down&lt;/p&gt;

&lt;p&gt;The first few options are for docker to run and mount the current directory as a volume then there is the scala steward options:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;workspace: where all the repos will be cloned, etc.&lt;/li&gt;
  &lt;li&gt;repos-file: This is a file with a format like ` - user/repo` per line. These are the repos you are asking scala steward to keep up to date.&lt;/li&gt;
  &lt;li&gt;default-repo-conf: This is an optional argument. I haven’t used this but seems to be about pull request frequency, commit messages, etc.&lt;/li&gt;
  &lt;li&gt;git-author-email: The email that will be used in the commit.&lt;/li&gt;
  &lt;li&gt;vcs-api-host: Generally it will be &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;https://api.github.com&quot;&lt;/code&gt; the url of the api of the git host server. AFAIK github, gitlab and bitbucket supported so far.&lt;/li&gt;
  &lt;li&gt;vcs-login: the username of the git account&lt;/li&gt;
  &lt;li&gt;git-ask-pass: I found this kind of strange, and ~have to wonder about alternatives~ &lt;a href=&quot;https://github.com/scala-steward-org/scala-steward/issues/518&quot;&gt;this is why&lt;/a&gt;. This is for the path to an script file that returns: the plain text password :( &lt;em&gt;or&lt;/em&gt; an authentication token. The script must start with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;!#/bin/sh&lt;/code&gt;. For this, since running this internally, I create the file on the fly with information available in my CI environment, similar to what how it is described ine the link above.&lt;/li&gt;
  &lt;li&gt;sign-commits: I don’t use this. Might be useful in case one wants to sign the commits.&lt;/li&gt;
  &lt;li&gt;env-var: if you need to add any extra environment variables so that the repos run.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now that you have Scala steward set up you might want to select a test repo to update. 
Before you add that to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;repos-file&lt;/code&gt; set up pull request building in 
your CI or externally. There are many options here, I tested a jenkins plugin (it was painful and didn’t work well in my case), Aws CodeBuild and Github Actions. The last two were pretty painless.&lt;/p&gt;

&lt;p&gt;Optionally you might want to also set up &lt;a href=&quot;https://mergify.io/&quot;&gt;Mergify&lt;/a&gt; or something like that, to automatically merge certain PRs.&lt;/p&gt;

&lt;h3 id=&quot;depdendency-management-over-time&quot;&gt;Depdendency Management over time&lt;/h3&gt;

&lt;p&gt;So with PR building set up you might be tempted to add all your repos at once. That might be a bad idea. This tools creates one PR per change, it is very likely you might want to update many libraries at once. To know what is out of date you can simple use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sbt dependecyUpdates&lt;/code&gt;
Also you don’t want to block CI for a while (if that is your setup). I suggest you add a few repos at a time and see what happens. This is a good task to do while waiting for something else.&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&quot;https://imgs.xkcd.com/comics/compiling.png&quot; /&gt;
  &lt;figcaption class=&quot;figure-caption&quot;&gt;source: https://xkcd.com/303/&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Since not so long ago &lt;em&gt;Scalafix&lt;/em&gt; updates are enabled by default, a nice enhancement. Also you can add your custom &lt;em&gt;scalafix&lt;/em&gt; changes.&lt;/p&gt;

&lt;p&gt;Please note, you can set up configuration per project if you want to stop particular updates. If you have questions, the FAQ is pretty good.&lt;/p&gt;

&lt;h3 id=&quot;some-other-ways&quot;&gt;Some other ways&lt;/h3&gt;

&lt;p&gt;Since this is all about managing dependencies, these are some interesting projects that I am planning to check out(but haven’t yet):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/hmrc/sbt-bobby&quot;&gt;sbt-bobby&lt;/a&gt;: You create a set of rules which outlaw particular versions of a library or plugin, and task Bobby to enforce those rules. If a violation is detected, the whistle is blown, and the build is failed.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://softwarecorner.wordpress.com/2020/06/30/a-simple-sbt-plugin-enforcing-consistent-versions-of-third-party-dependencies/&quot;&gt;Enforcing Consistent Versions of Third Party Dependencies&lt;/a&gt; A blog post that describes a way to manage consistent dependencies using an sbt plugin. I think this works if the projects all have the same collection of deps.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Sat, 15 Aug 2020 20:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2020/08/15/Scala-Steward-locally/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2020/08/15/Scala-Steward-locally/</guid>
			</item>
		
			<item>
				<title>CAN Bus</title>
				<description>&lt;h2 id=&quot;can-bus-high-level-introduction&quot;&gt;CAN bus: High level introduction&lt;/h2&gt;

&lt;p&gt;Short for Controller Area Network, a standard designed to allow electronic control units (ECUs) to communicate without a centralised computer. It is a message based protocol.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Mandatory in EU since 2001, us 2008&lt;/li&gt;
  &lt;li&gt;Runs on 2 wires. CANH (high) CANL (low)&lt;/li&gt;
  &lt;li&gt;Uses differential signaling  (some exceptions)
    &lt;ul&gt;
      &lt;li&gt;When a signal comes in, CAN raises the voltage on one line and drops the other line an equal amount&lt;/li&gt;
      &lt;li&gt;Differential sinaling is used in environments that must be fault tolerant to noise&lt;/li&gt;
      &lt;li&gt;When a bit is transmitted then signal is simultaneously broadcast to both high and low, the sensors check that they match and if they don’t the packet is discarded as noise&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;The two twisted pair wires require the bus to be terminated on each end. There is a 120-ohm resistor across both wires on the termination ends&lt;/li&gt;
  &lt;li&gt;Most vehicles come with the ODB-II connector, aka Diagnostic Link Connector (dlc). It communitcates with the vehicle internal netowrk&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/images/2020/obd2-pinout.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;(source: https://components101.com/connectors/obd2)&lt;/p&gt;
</description>
				<pubDate>Sat, 25 Jul 2020 20:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2020/07/25/CAN-bus/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2020/07/25/CAN-bus/</guid>
			</item>
		
			<item>
				<title>No long term damage. Day 7</title>
				<description>&lt;p&gt;Day 7, last day of a week trying to generate the least amount of long lived rubbish by not buying non renewable things. My rules are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Focus only on things I buy or consume directly.&lt;/li&gt;
  &lt;li&gt;From Monday 20/05 till Sunday 26/05 evening.&lt;/li&gt;
  &lt;li&gt;Document what I do buy and questions that arise from this experiment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Previous days:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/20/no-longter-damage-1/&quot;&gt;Day 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/21/no-longter-damage-2/&quot;&gt;Day 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/22/no-longer-damage-3/&quot;&gt;Day 3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/23/no-longer-damage-4/&quot;&gt;Day 4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/24/no-longer-damage-5/&quot;&gt;Day 5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/25/no-longer-damage-6/&quot;&gt;Day 6&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;day-7-sunday&quot;&gt;Day 7: Sunday&lt;/h2&gt;

&lt;p&gt;Last day. Today was much more quiet.&lt;/p&gt;

&lt;p&gt;Didn’t generate any rubbish in the morning. For lunch I was binning this:&lt;/p&gt;

&lt;p&gt;For lunch we used a full package of sausages. The label on the package showed no recycling notice, so I had to assume they were not recyclable, however they had an &lt;a href=&quot;https://ic.fsc.org/en/choosing-fsc/fsc-labels&quot;&gt;Fsc label&lt;/a&gt; giving some idea as to the sourcing of materials. Good to know.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2019/sunday3.png&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/images/2019/sunday4.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Also used the end of a package of butter. It was hard to see if the package was recyclable or not, but thankfully I had a new one, and it is recyclable as seen on the picture below.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2019/sunday.png&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/images/2019/sunday1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I really like spinach, so I am going to have to think about how to source it, what I produce with my plants is not enough, and everywhere I buy them they come in film packaging, which is not recyclable.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2019/sunday5.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;long-lived-rubbish-for-today&quot;&gt;Long lived Rubbish for today&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Sausage packaging. Not recyclable.&lt;/li&gt;
  &lt;li&gt;Butter packaging. Recyclable :D.&lt;/li&gt;
  &lt;li&gt;Spinach container. Non recyclable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;todays-questions&quot;&gt;Today’s questions&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;What are good alternatives for meat wrapping? Are there any secure alternatives?&lt;/li&gt;
  &lt;li&gt;Are there alternative ways to source spinach and other vegetables that come in film wrapping?&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;tldr&quot;&gt;TL;DR&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;It is good to know about the sourcing of the materials as well as the recycling capabilities. Some packages have &lt;a href=&quot;https://ic.fsc.org/en/choosing-fsc/fsc-labels&quot;&gt;Fsc label&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the end. There is a summary of the week, you can find it &lt;a href=&quot;http://www.roundcrisis.com/2019/05/23/no-longter-damage-tldr/&quot;&gt;here&lt;/a&gt; I will update that when and if I get new answers to the questions posed.&lt;/p&gt;
</description>
				<pubDate>Sun, 26 May 2019 20:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2019/05/26/no-longer-damage-7/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2019/05/26/no-longer-damage-7/</guid>
			</item>
		
			<item>
				<title>No long term damage. Day 6</title>
				<description>&lt;p&gt;Day 6 of a week trying to generate the least amount of long lived rubbish by not buying non renewable things. My rules are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Focus only on things I buy or consume directly.&lt;/li&gt;
  &lt;li&gt;From Monday 20/05 till Sunday 26/05 evening.&lt;/li&gt;
  &lt;li&gt;Document what I do buy and questions that arise from this experiment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Previous days:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/20/no-longter-damage-1/&quot;&gt;Day 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/21/no-longter-damage-2/&quot;&gt;Day 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/22/no-longer-damage-3/&quot;&gt;Day 3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/23/no-longer-damage-4/&quot;&gt;Day 4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/24/no-longer-damage-5/&quot;&gt;Day 5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;day-6-saturday&quot;&gt;Day 6: Saturday&lt;/h2&gt;

&lt;p&gt;A day of doing things outside.&lt;/p&gt;

&lt;p&gt;We are not sure on how this will work, could take many hours or we could be back for lunch time.&lt;/p&gt;

&lt;p&gt;Turns out it was pretty hot and we were doing active things. There was drinks available with plastic cup disposals. 
I saw that this was recyclable and I thought about keeping the cup to reserach more, but forgot with everything going on.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2019/saturday1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;For lunch we were at a barbeque I ate a burger with the bun, no rubbish. However, there was another similar plastic cup to the one earlier, and I reused this many times to get a drink, however I binned it as well.&lt;/p&gt;

&lt;p&gt;Later we were at a coffee place, I asked for soda water, I thought this might come in a glass, sadly it came with a plastic bottle, this had a &lt;a href=&quot;https://en.wikipedia.org/wiki/PET_bottle_recycling&quot;&gt;Pet symbol&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;gt;&quot; Coca Cola intends to use 50% recycled PET in its containers by 2030. While food-grade processing has been established, efforts are being made to improve the efficiency of processing technologies. The availability of post-consumer PET material is also a challenge.&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I also found &lt;a href=&quot;https://www.bpf.co.uk/Sustainability/pet_plastic_bottles_facts_not_myths.aspx&quot;&gt;this article&lt;/a&gt; from the British Plastic Association an informative read. (now that was a sentence I never thought I would write ;) )
I am not sure what is the impact of these recyclable bottles, recyling them is obviously better than nothing, but how many times can we recycle them? What happens to the bottles that are not recycled? I think caps are not recyclable, what can one do about them? If this week showed me something is that bringing your container for hot and cold drinks has a lot of impact in waste generation.&lt;/p&gt;

&lt;p&gt;Later we had a frozen pizza at home. The pizza cardboard is fully recyclable. Sadly the plastic cover is not.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Bottle of sparkling water. Recyclable.&lt;/li&gt;
  &lt;li&gt;Pizza plastic wrapper. Non recyclable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/images/2019/saturday2.png&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/images/2019/saturday3.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Pretty sad.&lt;/p&gt;

&lt;h3 id=&quot;long-lived-rubbish-for-today&quot;&gt;Long lived Rubbish for today&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Plastic cup x 2. Not sure, lets assume they were not recyclable.&lt;/li&gt;
  &lt;li&gt;Bottle of sparkling water. Recyclable.&lt;/li&gt;
  &lt;li&gt;Pizza plastic wrapper. Non recyclable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;todays-questions&quot;&gt;Today’s questions&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;How does the Pet process work? There is some information &lt;a href=&quot;https://www.thebalancesmb.com/recycling-polyethylene-terephthalate-pet-2877869&quot;&gt;here&lt;/a&gt;. Definitely a step in the right direction but given the urgency of the situation with the environment it seems like not enough.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;tldr&quot;&gt;TL;DR&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Quite a lot of rubbish for one day. Harder to be on the move and not generate long lived waste.&lt;/li&gt;
  &lt;li&gt;Plastic bottle recycling is moving in the right direction, but bringing your own drinks container is definitely a big win.&lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Sat, 25 May 2019 20:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2019/05/25/no-longer-damage-6/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2019/05/25/no-longer-damage-6/</guid>
			</item>
		
			<item>
				<title>No long term damage. Day 5</title>
				<description>&lt;p&gt;Day 5 of a week trying to generate the least amount of long lived rubbish by not buying non renewable things. My rules are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Focus only on things I buy or consume directly.&lt;/li&gt;
  &lt;li&gt;From Monday 20/05 till Sunday 26/05 evening.&lt;/li&gt;
  &lt;li&gt;Document what I do buy and questions that arise from this experiment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Previous days:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/20/no-longter-damage-1/&quot;&gt;Day 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/21/no-longter-damage-2/&quot;&gt;Day 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/22/no-longer-damage-3/&quot;&gt;Day 3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/23/no-longer-damage-4/&quot;&gt;Day 4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;day-5-friday&quot;&gt;Day 5: Friday&lt;/h2&gt;

&lt;p&gt;Working from home again today.&lt;/p&gt;

&lt;p&gt;All food an drink consumed today was bought before the start of the week or not by me, so I figured I would document anything I put in the bin.&lt;/p&gt;

&lt;h4 id=&quot;lunch-time&quot;&gt;Lunch time&lt;/h4&gt;

&lt;p&gt;I had a salad that I prepared myself, I used the last of some nice spicy beetroot. The container was clear plastic which is “widely” recycled, not so for the fork (or at least not mentioned) nor the film covering it. There was a note about how you can bring this to a big store, my nearest one is about 5 miles from here, which I would probably have to drive to, especially If I am buying more food there.  I wonder if the home delivery would take this instead.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2019/friday-lunch1.png&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/images/2019/friday-lunch2.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;later-and-questions&quot;&gt;Later and Questions&lt;/h4&gt;

&lt;p&gt;I cooked from this evening. There was:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Ham wrapper, I think that is not recyclable.&lt;/li&gt;
  &lt;li&gt;Oranges net. Also it appears it’s not recyclable&lt;/li&gt;
  &lt;li&gt;Chips bag. Not recyclable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/images/2019/friday1.png&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/images/2019/friday2.png&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/images/2019/friday3.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Pretty sad.&lt;/p&gt;

&lt;h3 id=&quot;long-lived-rubbish-for-today&quot;&gt;Long lived Rubbish for today&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Ham wrapper, I think that is not recyclable.&lt;/li&gt;
  &lt;li&gt;Oranges net. Also it appears it’s not recyclable&lt;/li&gt;
  &lt;li&gt;Chips bag. Not recyclable.&lt;/li&gt;
  &lt;li&gt;Film and fork from beetroot container.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;todays-questions&quot;&gt;Today’s questions&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Can anything be done about these things that are not recyclable? How could we upcycle them?&lt;/li&gt;
  &lt;li&gt;I heard (but not researched yet) that there is some rubbish you can bring back to where you bought it and they will deal with it, but I don’t understand if that is true or what does “deal with it” means?&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;tldr&quot;&gt;TL;DR&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Quite a lot of rubbish for one day.&lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Fri, 24 May 2019 20:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2019/05/24/no-longer-damage-5/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2019/05/24/no-longer-damage-5/</guid>
			</item>
		
			<item>
				<title>No long term damage. Aim and progress</title>
				<description>&lt;p&gt;A week trying to generate the least amount of long lived rubbish by not buying non renewable things. My rules are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Focus only on things I buy or consume directly.&lt;/li&gt;
  &lt;li&gt;From Monday 20/05 till Sunday 26/05 evening.&lt;/li&gt;
  &lt;li&gt;Document what I do buy and questions that arise from this experiment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For previous days:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/20/no-longter-damage-1/&quot;&gt;Day 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/21/no-longter-damage-2/&quot;&gt;Day 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/22/no-longer-damage-3/&quot;&gt;Day 3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/23/no-longter-damage-4/&quot;&gt;Day 4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/24/no-longer-damage-5/&quot;&gt;Day 5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/25/no-longer-damage-6/&quot;&gt;Day 6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/26/no-longer-damage-7/&quot;&gt;Day 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;gotchas-so-far&quot;&gt;Gotchas so far&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Individually wrapped tea, wrappers are not recyclable, and the tea bags have plastic. Awaiting answers from &lt;a href=&quot;https://twitter.com/silverSpoon/status/1131620052451635201&quot;&gt;Veolia&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Severely reduced lunch options. Most of the take away options come in some form of plastic, in the end a hot wrap wrapped in paper from Pret did the trick but at the cost of changing my diet.&lt;/li&gt;
  &lt;li&gt;I emailed &lt;a href=&quot;https://tosseduk.com/&quot;&gt;TossedUK&lt;/a&gt; about being able to use my own container and they said yes (meaning I need to carry my container with me, which is fine).&lt;/li&gt;
  &lt;li&gt;It seems my council doesn’t support composting of paper kitchen towels but do allow composting of tea bags (which contain plastic). I emailed them to check.&lt;/li&gt;
  &lt;li&gt;Taxis and car rides in general, not sure how to calculate the impact from an emissions point of view. If anyone has good links, I am all ears.&lt;/li&gt;
  &lt;li&gt;Hot drinks seem like a very tricky thing to get whilst being environmentally friendly.&lt;/li&gt;
  &lt;li&gt;Yay for food you can grow yourself. Even if it is just a small percentage of what we eat.&lt;/li&gt;
  &lt;li&gt;It is looking like it is really hard to dispose of biscuits wrappers, there is a way to reuse(?) them some how via Terracycle, but I was not able to find out any specifics as to how to do this exactly.&lt;/li&gt;
  &lt;li&gt;There was a note on a plastic container about how you can bring this to a big store, my nearest one is about 5 miles from here, which I would probably have to drive to, especially If I am buying more food there.  I wonder if the home delivery would take this instead.&lt;/li&gt;
  &lt;li&gt;Can anything be done about these things that are not recyclable? How could we upcycle them?&lt;/li&gt;
  &lt;li&gt;I heard (but not researched yet) that there is some rubbish you can bring back to where you bought it and they will deal with it, but I don’t understand if that is true or what does “deal with it” means?&lt;/li&gt;
  &lt;li&gt;How does the Pet process work? There is some information &lt;a href=&quot;https://www.thebalancesmb.com/recycling-polyethylene-terephthalate-pet-2877869&quot;&gt;here&lt;/a&gt;. Definitely a step in the right direction but given the urgency of the situation with the environment it seems like not enough.&lt;/li&gt;
  &lt;li&gt;What are good alternatives for meat wrapping? Are there any secure alternatives?&lt;/li&gt;
  &lt;li&gt;Are there alternative ways to source spinach and other vegetables that come in film wrapping?&lt;/li&gt;
  &lt;li&gt;It is good to know about the sourcing of the materials as well as the recycling capabilities. Some packages have &lt;a href=&quot;https://ic.fsc.org/en/choosing-fsc/fsc-labels&quot;&gt;Fsc label&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;all-the-rubbish-in-one-place&quot;&gt;All the rubbish in one place&lt;/h2&gt;

&lt;p&gt;Of the kind we can see:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2019-tea.png&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/images/2019/montage.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;awaiting-answers-from&quot;&gt;Awaiting answers from&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://twitter.com/silverSpoon/status/1131620052451635201&quot;&gt;Veolia&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://twitter.com/silverSpoon/status/1131628993147486210&quot;&gt;McVities&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Thu, 23 May 2019 20:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2019/05/23/no-longter-damage-tldr/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2019/05/23/no-longter-damage-tldr/</guid>
			</item>
		
			<item>
				<title>No long term damage. Day 4</title>
				<description>&lt;p&gt;Day 4 of a week trying to generate the least amount of long lived rubbish by not buying non renewable things. My rules are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Focus only on things I buy or consume directly.&lt;/li&gt;
  &lt;li&gt;From Monday 20/05 till Sunday 26/05 evening.&lt;/li&gt;
  &lt;li&gt;Document what I do buy and questions that arise from this experiment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Previous days:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/20/no-longter-damage-1/&quot;&gt;Day 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/21/no-longter-damage-2/&quot;&gt;Day 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/22/no-longer-damage-3/&quot;&gt;Day 3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;day-4-thursday&quot;&gt;Day 4: Thursday&lt;/h2&gt;

&lt;p&gt;Working from home today. This should be interesting.&lt;/p&gt;

&lt;p&gt;All food an drink consumed today was bought before the start of the week or not by me, so I figured I would document anything I put in the bin.&lt;/p&gt;

&lt;h4 id=&quot;lunch-time&quot;&gt;Lunch time&lt;/h4&gt;

&lt;p&gt;I had a salad that I prepared myself, some of the spinach you see there are from self-grown. There was just compostable waste left behind.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2019/spinach.png&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;/images/2019/salad.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I was feeling peckish later and I had a few biscuits, this resulted in an empty package (no I didn’t eat them all then and there, promise), as I read it I found a reference to &lt;a href=&quot;https://twitter.com/terracycle&quot;&gt;Terracycle&lt;/a&gt; however when I went to try to use it for the specific brand there was nothing. This is sad, but I ask them on twitter maybe it is just their UX.
&lt;em&gt;Update&lt;/em&gt; I asked McVities &lt;em&gt;and&lt;/em&gt; Terracycle. Lets see what happens&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2019/terracycle.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;later-and-questions&quot;&gt;Later and Questions&lt;/h4&gt;

&lt;p&gt;Food that we already have at home.&lt;/p&gt;

&lt;h3 id=&quot;long-lived-rubbish-for-today&quot;&gt;Long lived Rubbish for today&lt;/h3&gt;

&lt;p&gt;A biscuit wrapper.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2019/wrapper.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;todays-questions&quot;&gt;Today’s questions&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;What are good options to recycle food wrappers in general and biscuits wrappers concretely?&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;tldr&quot;&gt;TL;DR&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Yay for food you can grow yourself. Even if it is just a small percentage of what we eat.&lt;/li&gt;
  &lt;li&gt;It is looking like it is really hard to dispose of biscuits wrappers, there is a way to reuse(?) them some how via Terracycle, but I was not able to find out any specifics as to how to do this exactly.&lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Thu, 23 May 2019 20:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2019/05/23/no-longter-damage-4/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2019/05/23/no-longter-damage-4/</guid>
			</item>
		
			<item>
				<title>No long term damage. Day 3</title>
				<description>&lt;p&gt;Day 3 of a week trying to generate the least amount of long lived rubbish by buying renewable or compostable things. My rules are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Focus only on things I buy or consume directly.&lt;/li&gt;
  &lt;li&gt;From Monday 20/05 till Sunday 26/05 evening.&lt;/li&gt;
  &lt;li&gt;Document what I do buy and questions that arise from this experiment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For previous days:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/20/no-longter-damage-1/&quot;&gt;Day 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/21/no-longter-damage-2/&quot;&gt;Day 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;day-3-wednesday&quot;&gt;Day 3: Wednesday&lt;/h2&gt;

&lt;p&gt;Commuting by train, tube, bus and taxi(boo)&lt;/p&gt;

&lt;p&gt;It seems like I need to find out about the environmental impact of the taxi ride. I guess this goes in the questions section.&lt;/p&gt;

&lt;p&gt;Today’s hot drinks was all leaf tea, no sugar in sachets.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update&lt;/em&gt; Someone mentioned you can request electric taxis (I hailed a cab on the street because I was lost and late) but this is a good idea.&lt;/p&gt;

&lt;h4 id=&quot;lunch-time&quot;&gt;Lunch time:&lt;/h4&gt;

&lt;p&gt;Had lunch at a place with table service. So no waste here. The napkins were paper and they were not the hard kitchen towel type, so I think I can count that as compostable.&lt;/p&gt;

&lt;p&gt;I also had table service for dinner.&lt;/p&gt;

&lt;h4 id=&quot;later-and-other-questions&quot;&gt;Later and other questions&lt;/h4&gt;

&lt;p&gt;After lunch I ordered a coffee and it came with this chocolate coated coffee bean that was wrapped in plastic so I asked if they could put it back and explained why (I don’t mind if they though I was weird, but I just wanted to make sure they didn’t bin it), so I am not counting that as rubbish for today.&lt;/p&gt;

&lt;p&gt;Today I bought a potted plant as a gift, the plant had a plastic container. I will count this as my rubbish.
On discussing this with a group they made the point that this plastic has a long life of use, and that since it contains a plant, it carbon offsets itself.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2019/potted.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;long-lived-rubbish-for-today&quot;&gt;Long lived Rubbish for today&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;One plant pot.&lt;/li&gt;
  &lt;li&gt;Taxi ride (approximately 2+ miles, 25 minutes on the vehicles)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;todays-questions&quot;&gt;Today’s questions&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Correct ways to calculate the environmental impact of car rides.&lt;/li&gt;
  &lt;li&gt;I assume plastic plant pots are not biodegradable, so what is their impact.&lt;/li&gt;
  &lt;li&gt;How can one calculate the environmental impact of eating out?&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;tldr&quot;&gt;TL;DR&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Taxis and car rides in general, I need to understand their impact when it comes to polluting the air (I see this as my rubbish too)&lt;/li&gt;
  &lt;li&gt;Hot drinks seem like a very tricky thing to get whilst being environmentally friendly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;conclusions-from-today&quot;&gt;Conclusions from today&lt;/h2&gt;

&lt;p&gt;Three days into this experiment, the most impactful thing seems to be &lt;em&gt;getting people to about it their everyday rubbish&lt;/em&gt;. Many seem interested in improving on this, so when I finish this week I am going to do a summary of the actions that one can take that would reduce the most rubbish, at the same time I think there is nothing like trying it yourself.
Also, I am not trying to beat myself up for doing things that I need to do. The experiment was about learning, and see if I can do better, learn, adapt, repeat.
If you think doing the experiment would be too hard for you, try to do something you think you can do, or even talking about it helps because it gets people thinking about the rubbish they generate.&lt;/p&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;
</description>
				<pubDate>Wed, 22 May 2019 20:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2019/05/22/no-longer-damage-3/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2019/05/22/no-longer-damage-3/</guid>
			</item>
		
			<item>
				<title>No long term damage. Day 2</title>
				<description>&lt;p&gt;Day 2 of a week trying to generate the least amount of long lived rubbish by not buying non renewable things. My rules are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Focus only on things I buy or consume directly.&lt;/li&gt;
  &lt;li&gt;From Monday 20/05 till Sunday 26/05 evening.&lt;/li&gt;
  &lt;li&gt;Document what I do buy and questions that arise from this experiment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For previous days:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/20/no-longter-damage-1/&quot;&gt;Day 1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;day-2-tuesday&quot;&gt;Day 2: Tuesday&lt;/h2&gt;

&lt;p&gt;Commuting by train and tube
Today’s hot drinks were either leaf tea or coffee from the coffee machine in the office, no sugar.&lt;/p&gt;

&lt;h4 id=&quot;lunch-time&quot;&gt;Lunch time:&lt;/h4&gt;

&lt;p&gt;Had lunch at a place with table service, the potential waste there where kitchen towels. 
I checked a few places and it seems like they are compostable, however I checked the website for my local council
and it is not listed in the allowed items. I have emailed them to check What’s the story with that and also to ask what they do with the tea bags, since they allow this as an item to be composted.&lt;/p&gt;

&lt;h4 id=&quot;later-and-other-questions&quot;&gt;Later and other questions&lt;/h4&gt;

&lt;p&gt;Other members of my household did the shopping this week, since that falls outside of my rules, I am skipping that, but I can see that this would rise many questions.
I also notice that since we are in election time, there was some leaflets delivered I wonder how much care was put into the environmental impact of printing and distributing these. And also are them compostable/recyclable.&lt;/p&gt;

&lt;h3 id=&quot;long-lived-rubbish-for-today&quot;&gt;Long lived Rubbish for today&lt;/h3&gt;

&lt;p&gt;Nothing!!!! Very happy, tomorrow I am meeting with some friends, so I imagine I will have more constraints than usual.&lt;/p&gt;

&lt;h4 id=&quot;todays-questions&quot;&gt;Today’s questions&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;What are kitchen towels made of and are they compostable?&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;tldr&quot;&gt;TL;DR&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;it seems my council doesn’t support composting of paper kitchen towels, but I emailed them to check.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: The council replied and they forwarded my query to Veolia who are the company doing the composting.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/22/no-longer-damage-3/&quot;&gt;Read about Day 3&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Tue, 21 May 2019 20:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2019/05/21/no-longter-damage-2/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2019/05/21/no-longter-damage-2/</guid>
			</item>
		
			<item>
				<title>No long term damage. Day 1</title>
				<description>&lt;p&gt;Something rather different here. I am doing a little experiment.&lt;/p&gt;

&lt;p&gt;A week trying to generate the least amount of long lived rubbish by not buying non renewable things. My rules are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Focus only on things I buy or consume directly.&lt;/li&gt;
  &lt;li&gt;From Monday 20/05 till Sunday 26/05 evening.&lt;/li&gt;
  &lt;li&gt;Document what I do buy and questions that arise from this experiment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;day-1-monday&quot;&gt;Day 1: Monday&lt;/h2&gt;

&lt;p&gt;Commuting by train and tube: I have a card that I can top up so no train receipt. but makes me wonder if those train tickets are recyclable or 
biodegradable.&lt;/p&gt;

&lt;h3 id=&quot;hot-drinks&quot;&gt;Hot drinks&lt;/h3&gt;

&lt;p&gt;I love tea, generally I brew my own leaf tea, however in the office there is tea and I had a cup nearly without thinking. It was a 
Twinnings Individually Wrapped Tea (no recyclable marking so I have to assume that the wrappers are non recyclable)
What are these wrappers made of? &lt;a href=&quot;https://twitter.com/silverSpoon/status/1130539990180605953&quot;&gt;I asked them a question on twitter&lt;/a&gt; while Iwait, I checked online and it seems that not only the wrapping might not be cool, it seems like the tea bag itself contains plastic &lt;a href=&quot;https://moralfibres.co.uk/is-there-plastic-in-your-tea/&quot;&gt;source from 2018&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update:&lt;/em&gt; Twinnings replied&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; data-partner=&quot;tweetdeck&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Hi Andrea, thanks for getting in touch. Our envelopes are not currently recyclable, however rest assured that the environmental sustainability of our products &amp;amp; our packaging is really important to us &amp;amp; we are working with our suppliers on ways of improving this.&lt;/p&gt;&amp;mdash; Twinings Tea (@TwiningsTeaUK) &lt;a href=&quot;https://twitter.com/TwiningsTeaUK/status/1130795019743498240?ref_src=twsrc%5Etfw&quot;&gt;May 21, 2019&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;By the way, I use the mugs in the office and I don’t generally drink take away tea nor coffee.&lt;/p&gt;

&lt;p&gt;Sugar sachets, are they recyclable? biodegradable?  I erred on the side of caution and didn’t use sugar.&lt;/p&gt;

&lt;h4 id=&quot;lunch-time&quot;&gt;Lunch time:&lt;/h4&gt;

&lt;p&gt;I generally prefer salads for lunch. However most salads come in a plastic container :(… Initially I went to a place recommended by a colleague at the office, he mentioned this place was environmentally conscious.  On getting there , it had closed down.
So I went to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Pret A Manger&lt;/code&gt;,  first I saw a hot wrap, it looked like the packaging was cardboard,  but it was not marked as recyclable and when I asked the cashier, he didn’t know if it was ( I was there at lunch time so they were  busy), so I got a toasted sandwich, the container was marked as recyclable.&lt;/p&gt;

&lt;p&gt;Also, in the spirit of research and learning I emailed &lt;a href=&quot;https://tosseduk.com/&quot;&gt;TossedUK&lt;/a&gt; about being able to use my own container
and they replied saying  yes :D. I just need to present my container before they start packing it! (A++) 
Makes you wonder if most places would be OK with this?&lt;/p&gt;

&lt;h4 id=&quot;dinner&quot;&gt;Dinner&lt;/h4&gt;

&lt;p&gt;Dinner was food cooked with item that were already at home, so nothing to report there.&lt;/p&gt;

&lt;h3 id=&quot;long-lived-rubbish-so-far&quot;&gt;Long lived Rubbish so far&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/images/2019-tea.png&quot; alt=&quot;day1&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;tea wrapper&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;conclusion-so-far&quot;&gt;Conclusion so far&lt;/h3&gt;

&lt;p&gt;I am pretty happy with how little rubbish I was able to generate just by making my choices based solely on this factor. Another
interesting side effect is discussing this with people you chat with during the day. People were keen to help and provide options 
and ideas. We were all surprised by how much we didn’t know about recycling.&lt;/p&gt;

&lt;h4 id=&quot;list-of-questions&quot;&gt;List of Questions&lt;/h4&gt;

&lt;p&gt;Will update with links if/when I get answers&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Is it ok to bring your own container to places that sell lunch to take away? I asked TossedUk and they said yes (maybe other places are cool with it too)?&lt;/li&gt;
  &lt;li&gt;what is the best thing to do with long lived rubbish (such as my tea wrapper from today)?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Are the following items recyclable or biodegradable:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Train and tube tickets&lt;/li&gt;
  &lt;li&gt;Tea wrapper&lt;/li&gt;
  &lt;li&gt;Tea bag&lt;/li&gt;
  &lt;li&gt;Sugar sachets&lt;/li&gt;
  &lt;li&gt;Certain types of food packaging&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;tldr&quot;&gt;TL;DR&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Individually wrapped tea, it looks like the wrappers are not recyclable, and the tea bags have plastic.&lt;/li&gt;
  &lt;li&gt;Severely reduced lunch options. Most of the take away options come in some form of plastic, in the end a hot wrap wrapped in paper from Pret did the trick but at the cost of changing my diet.&lt;/li&gt;
  &lt;li&gt;I emailed &lt;a href=&quot;https://tosseduk.com/&quot;&gt;TossedUK&lt;/a&gt; about being able to use my own container and they said yes (meaning I need to carry my container with me, which is fine).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;http://www.roundcrisis.com/2019/05/21/no-longter-damage-2/&quot;&gt;Read about Day 2&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 20 May 2019 20:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2019/05/20/no-longter-damage-1/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2019/05/20/no-longter-damage-1/</guid>
			</item>
		
			<item>
				<title>Rust, array type not generic over the size of an array type.</title>
				<description>&lt;h2 id=&quot;rust&quot;&gt;Rust&lt;/h2&gt;

&lt;p&gt;You can declare and initialise a mutable array in &lt;a href=&quot;https://www.rust-lang.org/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Rust&lt;/code&gt;&lt;/a&gt; like this&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;let mut xs : [u32; 8] = [1,2,3,4,5,6,7,8];
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;alternatively you could separate the  initialisation like:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;let mut xs : [u32; 8] ;
xs = [1,2,3,4,5,6,7,8];
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I was surprised when I was not able to re-assign the array with an array of different size… when doing this:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;let mut xs : [u32; 8] = [1,2,3,4,5,6,7,8];
xs = [2,4];

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;you get this error&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;error[E0308]: mismatched types                                               
  --&amp;gt; src/main.rs:34:10                                                      
   |                                                                         
34 |     xs = [2,4];                                                         
   |          ^^^^^ expected an array with a fixed size of 8 elements, found one with 2 elements
   |                                                                         
   = note: expected type `[u32; 8]`                                          
              found type `[u32; 2]`                                          
                                                                             
error: aborting due to previous error                                        
                                                                             
For more information about this error, try `rustc --explain E0308`. 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;h1 id=&quot;errore0308-mismatched-types&quot;&gt;error[E0308]: mismatched types&lt;/h1&gt;
&lt;/blockquote&gt;

&lt;p&gt;arrays of different sizes are different types. I thought that was really interesting. It is documented&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This limitation on the size N exists because Rust does not yet support code that is generic over the size of an array type. [Foo; 3] and [Bar; 3] are instances of same generic type [T; 3], but [Foo; 3] and [Foo; 5] are entirely different types. As a stopgap, trait implementations are statically generated up to size 32. (from &lt;a href=&quot;https://doc.rust-lang.org/std/primitive.array.html&quot;&gt;source&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;(BTW kudos to the Rust people for very nice error messages)&lt;/p&gt;

&lt;p&gt;If one really wants to use a set length array you can still do&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;let mut xs : [u32; 8] = [1,2,3,4,5,6,7,8];
xs[0] = 2;
xs[1] = 4;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

</description>
				<pubDate>Fri, 04 Jan 2019 10:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2019/01/04/rust-array-size-as-type/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2019/01/04/rust-array-size-as-type/</guid>
			</item>
		
			<item>
				<title>Recommended history of computing books</title>
				<description>&lt;p&gt;These are some great history of computing books, in this list I chose books that tend to focus on software and programming languages.
These are books I like in categories I invented myself.&lt;/p&gt;

&lt;h2 id=&quot;reference-books&quot;&gt;Reference books&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;A Science of Operations: Machines, logic and the invention of programming. - Mark Priestley. A book so expensive is sort of an investment, but a good one. If you want to 
learn about how computing evolved this is the book you need. Great writing style too for a topic that can be a little dry sometimes.
Go beyond the pop culture knowledge on the subject and learn about how programming came to be, disentangled from hardware.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;heroes-pseudo-history&quot;&gt;Heroes pseudo history&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Hackers: Heroes of the computer revolution - Steven Levy. I really enjoyed reading this. It gave me an idea 
of perhaps what it felt like being at MIT in the early years of computing and being one of the gang. Compared with books 
like “A Science of Operation” this book feels underwhelmingly light with too many anecdotal stories. The end of the book is rather disappointing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;horses-mouth&quot;&gt;Horse’s mouth&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;History of Programming Languages, Volume 2 (ACM Press) by Thomas J. Bergin , Richard G. Gibson . Many of the papers 
included in this book I read at the edge of my seat. Excellent compilation that includes the papers the presentation of the
paper and the discussion that followed the presentation. 100% recommended.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;i-accidentally-a-history-book&quot;&gt;I accidentally a history book&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Exercises in programming style - Cristina Videira Lopes. I bought this book for many great reasons (learning about different programming styles) and the surprise 
was the excellent historical background and further reading contained in it. If you find that history is not your main interest
but you want to understand where certain programming styles come from you can do much much worse than this book.&lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Thu, 04 Oct 2018 10:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2018/10/04/recommended-history/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2018/10/04/recommended-history/</guid>
			</item>
		
			<item>
				<title>TIL in Purescript</title>
				<description>&lt;p&gt;I am learning a little bit of [Purescript] and today I learned:&lt;/p&gt;

&lt;p&gt;Custom infix operators (unsuprisingly) don’t work on Psci (the Purescript REPL)&lt;/p&gt;

&lt;p&gt;Function application has higher precedence than all other operators
ie:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;gt; show $ sumOfSquares 3 4 + 5
&quot;30&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;resources&quot;&gt;Resources&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://leanpub.com/purescript/read#leanpub-auto-test-early-test-often&quot;&gt;The Purescript book&lt;/a&gt;: Excellent book, not only the content is good, it is a pleasurable read. Will review when I finish it.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://learnxinyminutes.com/docs/purescript/&quot;&gt;Learn x in Y minutes: Purescript&lt;/a&gt; Good as a quick reference.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/joshburgess/purescript-cheat-sheet&quot;&gt;Cheatsheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Thu, 26 Apr 2018 10:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2018/04/26/purescript-day-n/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2018/04/26/purescript-day-n/</guid>
			</item>
		
			<item>
				<title>Techdebt register</title>
				<description>&lt;p&gt;There is really no hard and fast rule for recording technical debt, some people do it on their bug trackers, others in their agile/kanban boards, storing it in a text file with the code is another way. The reason why this can be helpful is because technical debt can be committed with the code, also code can be reviewed with it, giving it extra context.
You could simply record this in a file as separete paragraphs, however I have been thinking that standardising the format might help. This template is somewhat inspired by &lt;a href=&quot;https://insights.sei.cmu.edu/sei_blog/2016/06/got-technical-debt-track-technical-debt-to-improve-your-development-practices.html&quot;&gt;this article&lt;/a&gt;, I was compelled to introduce some  modifications to it, keeping it small enough to be able to record tech debt fast.&lt;/p&gt;

&lt;p&gt;It might be tempting to think that a template is not needed but I digress, without a template:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;it can be hard to know what we should record, how much detail is needed.&lt;/li&gt;
  &lt;li&gt;the technical debt is inconsistent and it can be hard to review stopping often to find the contextual information needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;technical-debt-item&quot;&gt;Technical debt item&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Name&lt;/em&gt;: (high level of this tech debt)&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Description&lt;/em&gt;: (a long form description of the technical debt, can suggest possible solutions if suitable)&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Date&lt;/em&gt;: (creation of this technical debt record)&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Creator&lt;/em&gt;:  (of this note so that they can answer questions)&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Location&lt;/em&gt;: (repo &amp;amp; filename or module)&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Complexity&lt;/em&gt;: (from 1 to 5 how hard would it be to solve the problem NA if you don’t know and want the group to evaluate)&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Reward&lt;/em&gt;: (from 1 to 5 where 1 is a nice to have and 5 is a significantly measurable improvement both from a performance, security, complexity,etc point of view)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Name: The module X uses external services in a non-resilient way&lt;/li&gt;
  &lt;li&gt;Description: module X uses kitt.ie, monkeysjumpingaround.io and boringbutusableapi.com  for verification purposes in at least 3 areas of the code, the call to these external services is duplicated and, on failure, at best we log the error (at worst, the system fails silently).&lt;/li&gt;
  &lt;li&gt;Date: 01/03/2018&lt;/li&gt;
  &lt;li&gt;Creator: Cat Otterson&lt;/li&gt;
  &lt;li&gt;Location: X files, Integrations module&lt;/li&gt;
  &lt;li&gt;Complexity: 3&lt;/li&gt;
  &lt;li&gt;Reward: 4&lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Tue, 27 Mar 2018 10:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2018/03/27/tech-debt-register/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2018/03/27/tech-debt-register/</guid>
			</item>
		
			<item>
				<title>Things I wish some told me when I started my computing degree</title>
				<description>&lt;p&gt;It has been a long time since I posted anything here.&lt;/p&gt;

&lt;p&gt;I recently had the pleasure of giving a talk at &lt;a href=&quot;http://www.mdx.ac.uk/&quot;&gt;Middlesex University&lt;/a&gt;, for students at the 
start of their CS degree. It was a really nice experience.&lt;/p&gt;

&lt;p&gt;I was wondering what would be useful things for them to hear and wound up talking to them a little about:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Languages/runtimes: Pascal, Delphi, VB, .net and the JVM.&lt;/li&gt;
  &lt;li&gt;OO and FP&lt;/li&gt;
  &lt;li&gt;Tooling and how much it changed over time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and then I mentioned a few things that I &lt;em&gt;think&lt;/em&gt; I would have liked to know:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The importance of learning to read code.&lt;/li&gt;
  &lt;li&gt;The importance of learning to debug code.&lt;/li&gt;
  &lt;li&gt;Context is what makes a solution good (or bad).&lt;/li&gt;
  &lt;li&gt;Side projects help you learn a lot.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are things that sound really obvious in retrospect, I do wonder what it sounded like to them.&lt;/p&gt;
</description>
				<pubDate>Tue, 30 Jan 2018 10:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2018/01/30/reading-code/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2018/01/30/reading-code/</guid>
			</item>
		
			<item>
				<title>Initialization Error on JVM based tests</title>
				<description>&lt;p&gt;If you are working with intellij and gradle you might at some point hit the&lt;/p&gt;

&lt;p&gt;Initialization error :
“java.lang.AssertionError: Java Assertions should be disabled!”&lt;/p&gt;

&lt;p&gt;this is because intellij doesn’t import this setting from gradle.&lt;/p&gt;

&lt;p&gt;To disable it go to Run -&amp;gt; Edit Configurations… in VM options remove &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-ea&lt;/code&gt; 
Removing this option means we are not checking for &lt;a href=&quot;http://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.10&quot;&gt;assertions&lt;/a&gt; sometimes external libraries use this.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2017/settings.png&quot; alt=&quot;intellij&quot; /&gt;&lt;/p&gt;
</description>
				<pubDate>Wed, 08 Feb 2017 10:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2017/02/08/Initialization-Error-on-JVM-based-tests/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2017/02/08/Initialization-Error-on-JVM-based-tests/</guid>
			</item>
		
			<item>
				<title>Many shapes and the same function</title>
				<description>&lt;p&gt;I was playing around with a small function in Scala and found it kind of interesting that you can express the same thing in
different ways.
We are writting a function that will fold over a string an accumulate on running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;parensToFloor&lt;/code&gt; a function that looks
like:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;def parensToFloor(c:Char): Int = ???
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The most common way to write this function would be:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;def myFn1(s:String) : Int = {
	s.foldLeft(0)((x,y) =&amp;gt; x + parensToFloor(y))
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;What would it look like &lt;a href=&quot;https://en.wikipedia.org/wiki/Tacit_programming&quot;&gt;point free&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;I arrived to a few options that didn’t work :&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;def myFnx(s:String) : Int = {
    s foldLeft 0 { _ + parensToFloor(_)}
//&amp;gt;error: Int(0) does not take parameters
//              s foldLeft 0 { _ + parensToFloor(_)}
//                          ^
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;this made sense to me but the following one…mmm I imagine the compiler sees that since foldLeft is curried then it makes sense but what does the compiler want?&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;def myFnx(s:String) : Int = {
    s foldLeft 0 apply { (x,y) =&amp;gt;_ + parensToFloor(_)}
// &amp;gt;error: missing arguments for method foldLeft in trait IndexedSeqOptimized;
//follow this method with `_&apos; if you want to treat it as a partially applied function
//             s foldLeft 0 apply { (x,y) =&amp;gt;_ + parensToFloor(_)}
//              ^
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;so thinking about that and how to curry, I started trying to add parens around and see what happens and
this worked:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    (s foldLeft 0) { _ + parensToFloor(_)}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Something that worked but it wasn’t what I was looking for (it needed a change to the definition of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;parensToFloor&lt;/code&gt;):&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-Scala&quot;&gt;
def parensToFloor(accumulated:Int, c:Char):Int = ???

//... more stuff.

def myFnx(s:String) : Int = {
// first the non working version same error as before
s foldLeft 0 parensToFloor

// than later evolved to because apply was missing
(s foldLeft 0) { parensToFloor }

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;then since we are here, might as well go and try and see what it looks like with operators (from a coworker):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;(0 /: s) { _ + parensToFloor(_) }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;An interesting thing is that the usage of parens and braces is something I still find confusing in time in Scala. 
The source of my confusion is not totally unfounded, in the &lt;a href=&quot;&quot;&gt;docs&lt;/a&gt; we can see that:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;( )        // Delimit expressions and parameters&lt;/li&gt;
  &lt;li&gt;{ }        // Delimit blocks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;however &lt;a href=&quot;https://www.scala-lang.org/files/archive/spec/2.11/06-expressions.html&quot;&gt;here&lt;/a&gt; we see that blocks can also be expressions…&lt;/p&gt;

&lt;p&gt;I’ll have to leave this here. More to follow…&lt;/p&gt;

</description>
				<pubDate>Thu, 12 Jan 2017 23:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2017/01/12/many-shapes-same-function/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2017/01/12/many-shapes-same-function/</guid>
			</item>
		
			<item>
				<title>VS Code + Ionide-FSharp</title>
				<description>&lt;p&gt;For the first post of the year, a short post on something I keep forgetting, hopefully it will help someone else.&lt;/p&gt;

&lt;p&gt;With &lt;a href=&quot;http://code.visualstudio.com/&quot;&gt;Visual Studio Code&lt;/a&gt;, a performant fork of &lt;a href=&quot;http://atom.io/&quot;&gt;Atom&lt;/a&gt;, if you want to use F# then 
you are probably using &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Ionide.Ionide-fsharp&quot;&gt;Ionide-fsharp&lt;/a&gt; extension with &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Ionide.Ionide-fake&quot;&gt;Ionide-FAKE&lt;/a&gt; and &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=Ionide.Ionide-paket&quot;&gt;Ionide-Paket&lt;/a&gt;. 
Some aspects of these extensions make this really easy to use for  people who are used to the F# environment, but slightly less to the person starting off on F# on a *\nix system for the first time.&lt;/p&gt;

&lt;h3 id=&quot;such-cheatsheet&quot;&gt;Such cheatsheet&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Alt+enter&lt;/code&gt; to send to F# interactive is a great example of something really useful that if you have used F# on Visual Studio you 
will definitely try this, but if you haven’t, you probably never will until someone tells you about it.&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;In Atom and VS Code you can press Command + P (on mac) or Ctrl+P on Windows and it will bring up the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Command Palette&lt;/code&gt; (you get 
something like this on Sublime as well) once there enter &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;gt;&lt;/code&gt; and then &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fsi&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FAKE&lt;/code&gt; - the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;gt;&lt;/code&gt; character is the key to this working. I keep forgetting about this because I don’t use vscode often.
This is what it should look like:&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/images/2017-01-palete.png&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;F12 to go to definition while the cursor is positioned in the code.&lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Mon, 02 Jan 2017 23:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2017/01/02/vscode/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2017/01/02/vscode/</guid>
			</item>
		
			<item>
				<title>Michael Feathers on Types</title>
				<description>&lt;p&gt;&lt;img src=&quot;http://www.roundcrisis.com/images/2016-04-craft.jpg&quot; alt=&quot;craft-logo&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;why-types-arent-very-important--a-talk-by-michael-feathers&quot;&gt;WHY TYPES AREN’T VERY IMPORTANT , a talk by &lt;a href=&quot;https://twitter.com/mfeathers&quot;&gt;Michael Feathers&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;This was a talk at the FP User group. Michael proposed that types are about ergonomics. He proposed that they are not inherently good or bad, but that it depends on the problem &lt;em&gt;and&lt;/em&gt; the personal choice, with much more detail that this.
It is also quite relevant to keep in mind that Michael has a lot of milage on legacy code bases.&lt;/p&gt;

&lt;p&gt;I find that a sane aproach when thinking about types is to think of them in terms of some sort of set of things. Going beyond that makes things difficult to reason about because either&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;they tend to be things that disagree or slightly overlap with each other&lt;/li&gt;
  &lt;li&gt;if you think of them in a more specific way and then talk to people that are thinking about them in also a very different but speciifc way, it leads to long winded debates that wind up nowhere (sometimes)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In fact there is a really good &lt;a href=&quot;http://blog.steveklabnik.com/posts/2010-07-17-what-to-know-before-debating-type-systems&quot;&gt;post&lt;/a&gt; about things that you should know before starting to debate static vs dynamic typing (and it’s a pretty long article :D)&lt;/p&gt;

&lt;p&gt;It is not a great idea to talk about types without &lt;a href=&quot;http://tomasp.net/blog/2015/against-types/&quot;&gt;rebelling agasint it’s definition&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I think I will leave this here,&lt;/p&gt;

&lt;p&gt;until the next time&lt;/p&gt;

</description>
				<pubDate>Wed, 27 Apr 2016 23:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2016/04/27/mfeathers/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2016/04/27/mfeathers/</guid>
			</item>
		
			<item>
				<title>Using Type providers</title>
				<description>&lt;p&gt;I wrote a little bit about type providers &lt;a href=&quot;http://www.roundcrisis.com/2015/02/22/Type-providers/&quot;&gt;here&lt;/a&gt; but I haven’t in a while and the
time has come to check them out again.&lt;/p&gt;

&lt;h3 id=&quot;the-problem&quot;&gt;The problem&lt;/h3&gt;

&lt;p&gt;Let’s say that I want to use the Giphy API, which gives back data in json format including a (generally funny) gif. From F# we could take advantage of type providers to avoid a bunch of boiler plate code.&lt;/p&gt;

&lt;h3 id=&quot;a-concrete-solution&quot;&gt;A concrete solution&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;On an F# script file add a reference to &lt;a href=&quot;http://fsharp.github.io/FSharp.Data/&quot;&gt;Fsharp.Data&lt;/a&gt; nuget package.&lt;/li&gt;
  &lt;li&gt;In the &lt;a href=&quot;http://giphy.com/&quot;&gt;Giphy website&lt;/a&gt; you can find the base url and the key to make a request.&lt;/li&gt;
  &lt;li&gt;Use the following code:&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;language-fsharp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;GiphyTP&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;JsonProvider&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;http://api.giphy.com/v1/gifs/search?q=monkey+cat&amp;amp;rating=pg-13&amp;amp;api_key=dc6zaTOxFJmzC&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;baseUrl&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;http://api.giphy.com/v1/gifs/search&quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;key&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// Since Giphy might change the key from time to time, go fetch it off their site&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;searchGif&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;searchString&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;searchTerm&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;&apos;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;&apos;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&apos;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;searchString&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;query&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;api_key&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;q&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;searchTerm&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;request&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Http&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;RequestString&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;baseUrl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;query&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;giphy&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;GiphyTP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Parse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;giphy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Data&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;|&amp;gt;&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Uri&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Images&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;DownsizedMedium&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Url&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;One of the results is:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://media4.giphy.com/media/slNwi1TTwR40U/giphy.gif&quot; alt=&quot;otter&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Which is pretty cool, What happened?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GiphyTP&lt;/code&gt; type is a representation of the data available in the sample, if you inspect the type on an editor, you can see what the compiler has infered information  about the data. When including a url like I have done here, it will go and fetch a sample. The sample can be a live sample (like in the example above), or a local sample (in one or many file(s) or as a live string).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;http://roundcrisis.com/images/2016-02-tp1.png&quot; alt=&quot;tp&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;When calling &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GiphyTP.Parse(response)&lt;/code&gt; is when a new request to the API is made, the types created at the  are put to use.&lt;/li&gt;
  &lt;li&gt;Get data and at this point we could change some of the shape, in this case I return a Uri of one of the possible ones, much more could be done.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you look at that picture in detail you might wonder, How is it that given a json document, the compiler can give me type information (i.e. Frames, Height  are int, Images is a collection, etc), well, that is  exactly what the type provider is doing, infering the type at runtime so that you don’t have to. For each element it will try to
infer first primitive types and then by combining them , more complex types.&lt;/p&gt;

&lt;p&gt;As mentioned in the &lt;a href=&quot;http://www.roundcrisis.com/2015/02/22/Type-providers/&quot;&gt;previous post&lt;/a&gt;, the type provider will give you a signature, on demand, as needed by the compiler. At the same time   if we decompile that code you will see something like this.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://roundcrisis.com/images/2016-02-tp2.jpg&quot; alt=&quot;dotpeek&quot; /&gt;&lt;/p&gt;

&lt;p&gt;and that is because  in the JSon type provider, the types are erased.
A type provider does not necessarily contain any types itself; rather, it is a component for generating descriptions of types, methods and their implementations.&lt;/p&gt;

&lt;p&gt;Next, let’s see what do type providers look like in other languages.&lt;/p&gt;

&lt;h2 id=&quot;resources&quot;&gt;Resources&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://blogs.msdn.com/b/dsyme/archive/2013/01/30/twelve-type-providers-in-pictures.aspx&quot;&gt;Twelve type providers in action&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blogs.msdn.microsoft.com/mvpawardprogram/2016/01/05/freeing-your-azure-data-with-f-type-providers/&quot;&gt;Freeing your Azure data with F# Type Providers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Sat, 27 Feb 2016 23:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2016/02/27/type-providers/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2016/02/27/type-providers/</guid>
			</item>
		
			<item>
				<title>Database of programming languages II</title>
				<description>&lt;p&gt;I mentioned in &lt;a href=&quot;http://www.roundcrisis.com/2016/02/13/Database-programming/&quot;&gt;a post&lt;/a&gt; yesterday that I was looking for a programming languages database with this minimum info:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Programming language name (and family if it has one .i.e. OCaml and the ML family of languages)&lt;/li&gt;
  &lt;li&gt;When it first appeared (anywhere outside of someone’s mind), and when it was first published (if ever)&lt;/li&gt;
  &lt;li&gt;Designer and anyone else involved and level of involvement.&lt;/li&gt;
  &lt;li&gt;some tags (ie paradigm, typed or untyped?, etc)&lt;/li&gt;
  &lt;li&gt;Influenced by / influenced.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I got some good responses on twitter, thanks to all of you who responded. The one closest was this one from &lt;a href=&quot;https://twitter.com/dgeurkov/status/698668794328322050&quot;&gt;Dmitry Geurkov (@dgeurkov)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://roundcrisis.com/images/2016-pl-db.jpg&quot; alt=&quot;twitter&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Where he links to the visualisation below. Make sure to follow the source as you can click on the nodes to see the influence of any language shown there.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://roundcrisis.com/images/2016-pl-viz.jpg&quot; alt=&quot;viz&quot; /&gt;
&lt;a href=&quot;http://exploringdata.github.io/vis/programming-languages-influence-network/&quot;&gt;Source: Exploring Data&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This link lead to the &lt;a href=&quot;http://www.freebase.com/computer/programming_language&quot;&gt;freebase db&lt;/a&gt;. Very close to what I was looking for. I see a need to be able to amplify this information with extra details. Such details should depend on the language.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://scottwlaschin.com/&quot;&gt;Scott Wlaschin&lt;/a&gt; sent me some great links to this graph from the great book: Concepts, techniques and Models of computer graphics (which has an accompanying &lt;a href=&quot;https://courses.edx.org/courses/course-v1:LouvainX+Louv1.1x+3T2015/29e6c993b0e84e2aace97846677d0d48/&quot;&gt;MOOC, in case you are interested.&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.info.ucl.ac.be/~pvr/paradigmsDIAGRAMeng108.jpg&quot; alt=&quot;paradigms&quot; /&gt;&lt;/p&gt;

&lt;p&gt;And this one by O’Reilly
&lt;img src=&quot;http://www.digibarn.com/collections/posters/tongues/ComputerLanguagesChart.png&quot; alt=&quot;languages&quot; /&gt;
&lt;a href=&quot;http://cdn.oreillystatic.com/news/graphics/prog_lang_poster.pdf&quot;&gt;Large pdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Following links from the last site, I found these other very promising links:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.levenez.com/lang/&quot;&gt;Levenez computer languages history&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://people.ku.edu/~nkinners/LangList/Extras/langlist.htm&quot;&gt;The (programming) Language list&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Indirectly I also found:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://rigaux.org/language-study/diagram.html&quot;&gt;Language Study diagram&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.digibarn.com/collections/posters/tongues/&quot;&gt;Mother tongues of computer languages DigiBarn&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally, I found the &lt;a href=&quot;http://www.computerhistory.org/revolution/timeline&quot;&gt;timeline from the computer history museum&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I was pretty sad to see so many dead links.&lt;/p&gt;

&lt;p&gt;Until the next time.&lt;/p&gt;
</description>
				<pubDate>Sun, 14 Feb 2016 11:50:00 +0000</pubDate>
				<link>http://roundcrisis.com/2016/02/14/Database-programming-ii/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2016/02/14/Database-programming-ii/</guid>
			</item>
		
			<item>
				<title>Database of programming languages?</title>
				<description>&lt;p&gt;As I try to understand the history of programming languages I am building
a time-line with paradigms and families of the programming languages I learn about.
I can’t help but wonder why there isn’t (or perhaps maybe I can’t find) some sort of catalog with all this information, it seems like something we could have available, but we don’t.&lt;/p&gt;

&lt;p&gt;Something as simple as language name, what other languages influenced it, who worked on it. Anything else that could be useful is a bonus.&lt;/p&gt;

&lt;p&gt;Do you know of something like that? The closest I have found is Wikipedia, but that
doesn’t give me the data in a way I can play graph it or maybe I need to clean it up. &lt;a href=&quot;http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html&quot;&gt;Tiobe index&lt;/a&gt;,  &lt;a href=&quot;https://www.openhub.net/languages&quot;&gt;Open hub&lt;/a&gt; and maybe even &lt;a href=&quot;http://rosettacode.org/wiki/Category:Programming_Tasks&quot;&gt;Rosetta Code&lt;/a&gt; might also provide some sort of insight.&lt;/p&gt;

&lt;p&gt;I think this can be an interesting project, however I am posting this here in the hope that
someone knows about other similar efforts.&lt;/p&gt;

&lt;p&gt;These are the iterations of my graph, this is not complete. However it might give you some idea
of what I would like for data points given this.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.roundcrisis.com/images/2016-influences.jpg&quot; alt=&quot;1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;then this (not completed )&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.roundcrisis.com/images/wip-pl.jpg&quot; alt=&quot;2&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I did these by hand because I am trying to iterate fast. It would be pretty amazing to generate these with concrete data.
Wow…feels like I was just in a great alternative version of Back to the Future, :D.&lt;/p&gt;

&lt;p&gt;So what am I exactly looking for? a database? with at a minimum:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Programming language name&lt;/li&gt;
  &lt;li&gt;When it first appeared (anywhere outside of someone’s mind)&lt;/li&gt;
  &lt;li&gt;Designer and anyone else involved and level of involved&lt;/li&gt;
  &lt;li&gt;some tags (ie paradigm, typed or untyped?, etc)&lt;/li&gt;
  &lt;li&gt;Influenced by / influenced.&lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Sat, 13 Feb 2016 19:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2016/02/13/Database-programming/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2016/02/13/Database-programming/</guid>
			</item>
		
			<item>
				<title>Past and future</title>
				<description>&lt;p&gt;This post is a (not so short) summary of the wonderful 1972 paper entitled: “Programming Languages: History and Future” by Jean Sammet[1]. She is not only one of the first (computing science) historians but also a language creator.&lt;/p&gt;

&lt;p&gt;The paper is written in a highly enjoyable style and if you are remotely interested in programming, reading it is surely going to reward you. This paper focuses in the historical development of the languages and their interrelations.
The key piece in this paper is the chart below where the relationships between programming languages is shown. The graph makes more sense with certain context.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/sammet72-graph-small.png&quot; alt=&quot;pls&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.roundcrisis.com/images/sammet72-graph.png&quot;&gt;link to bigger version of the graph&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;definition-of-programming-language&quot;&gt;Definition of programming language&lt;/h3&gt;

&lt;p&gt;On the definition of a programming language:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;A programming language is considered to be a set of characters and rules for combining them
which have the following characteristics:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;machine code knowledge is unnecessary&lt;/li&gt;
  &lt;li&gt;there is good potential for conversion to other computers&lt;/li&gt;
  &lt;li&gt;there is an instruction explosion (from one to many)&lt;/li&gt;
  &lt;li&gt;there is a notation which is closer to the original problem than assembly language would be&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The scope of the paper is roughly 20 years, going from 1952 to 1972, when, according to the paper there are about 180 programming languages.&lt;/p&gt;

&lt;p&gt;Given that this paper context is history, When do you consider a programming languages started? or created? It is something that I encountered as a problem when I was doing some reading on this area and not only dates are not always documented, but also the stage of development at which a defined specification occurs varies, or can be iterated over to become a new version of the language, and in that case, is this the same language or should it be considered a new one?&lt;/p&gt;

&lt;h3 id=&quot;why-so-many-languages&quot;&gt;Why so many languages?&lt;/h3&gt;

&lt;p&gt;This list is pretty similar to what I would guess today’s historians might come up with:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;A really new language concept has been developed and/or a new application area is deemed worthy of having its own language.&lt;/li&gt;
  &lt;li&gt;After experience with a particular language, its deficiencies are clear enough that a complete new language is needed and justifiably created to correct them.&lt;/li&gt;
  &lt;li&gt;Facilities of several languages are best combined into a single new language&lt;/li&gt;
  &lt;li&gt;It is felt to be easier to get additional capability or changes in style with a new language rather than to extend or modify an existing one.&lt;/li&gt;
  &lt;li&gt;It is fun to design and implement a new language, and someone wants to do it and can obtain the funds.&lt;/li&gt;
  &lt;li&gt;There are personal preferences  and prejudices against the existing languages even though one of these languages might serve the purpose for which the new language is intended.&lt;/li&gt;
  &lt;li&gt;The developer is unaware of the existence of a language that meets his needs, so he creates his own while believing he is meeting the conditions of (1) or (2).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I wish 2 would happen more often.
Can’t think of an example for 3, anyone?
Perhaps 5 would be different because I think funds are not really necessary but probably a good idea, I am thinking of Elixir, Elm as great examples of projects that started.&lt;/p&gt;

&lt;h3 id=&quot;reasons-for-the-importance-of-a-language&quot;&gt;Reasons for the importance of a language&lt;/h3&gt;

&lt;p&gt;This section has the most memorable quotes (stuff that is still sadly true, 4 decades later):&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;For example, the psychological issue of snob appeal is more important than many people might
think. Thus, the personal prestige and leadership (or lack thereof) of those individuals who are involved in the development of a language play an enormous role.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;…&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The best example of languages which inspire some people are ALGOL and  APE\360; on
the other hand neither BASIC (at the small end) nor PL/I (at the large end) generate as much &lt;em&gt;personal enthusiastm&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;major-languages-at-the-time&quot;&gt;Major Languages (at the time)&lt;/h3&gt;

&lt;p&gt;This is my favourite section of the paper. The languages below have been chosen because of their relevance as well as their uniqueness (except Cobol), they also apear to have been developed independently of each other.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;APT&lt;/strong&gt;. The first language for a specialized application area.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;FORTRAN&lt;/strong&gt;. The first higher level language to be widely used. It opened the door to practical usage of computers by large numbers of scientific and engineering personnel.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;FLOWMATIC&lt;/strong&gt;. The first language suitable for business data processing and the first to have heavy emphasis on an “English-like” syntax.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;IPL-V&lt;/strong&gt;. The first–and also a major–language for doing list processing.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;COMIT&lt;/strong&gt;. The first realistic string handling and pattern matching language; most of its features appear (although with different syntax) in any other language attempting to do any string manipulation.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;COBOL&lt;/strong&gt;. One of the most widely used languages on an absolute basis, and the most widely used for business applications. Technical attributes include real attempts at an English-like syntax and at machine independence.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;ALGOL 60&lt;/strong&gt;. Introduced many specific features in an elegant fashion, and combined with its formal syntactic definition, inspired most of the theoretical work in programming languages and much of the work on implementation techniques. More widely used in Europe than in the United States.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;LISP&lt;/strong&gt;. Introduced concepts of functional programming combined with facility for doing list processing. Used by many of the people working in the field of artificial intelligence.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;JOVIAL&lt;/strong&gt;. The first language to include adequate capability for handling scientific computations, input/output, logical manipulation of information, and data storage and handling. Most JOVIAL compilers were written in JOVIAL.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;GPSS&lt;/strong&gt;. The first language which made simulation a practical tool for most people.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;JOSS&lt;/strong&gt;. The first interactive language; it spawned a number of dialects which collectively helped to make time-sharing practical for computational problems.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;FORMAC&lt;/strong&gt;. The first language to be used fairly widely on a practical basis for mathematical problems needing formula manipulation.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;APL\360&lt;/strong&gt;. Provided many higher level operators, which permitted extremely short algorithms and caused new ways of looking at some problems.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;important-eras&quot;&gt;Important eras&lt;/h2&gt;

&lt;p&gt;These are highlights of important periods and events associated (genreally happening in the form of a conference)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Earliest(1952-1956) The beginnings of understanding of concepts. The terms pseudo-code, automatic coding,automatic programming, compiler, and interpreter were common.&lt;/li&gt;
  &lt;li&gt;Milestone Meeting (1956). First meeting to talk about high level programming languages, so what we are calling programming languages in the context of this paper&lt;/li&gt;
  &lt;li&gt;Most prolific years (1958-1959). The following events all occurred during that period: (I am just listing the ones I found more relevant)
    &lt;ol&gt;
      &lt;li&gt;The development and publishing of the IgL (International Algebraic Language) report, which became known as ALGOL 58.&lt;/li&gt;
      &lt;li&gt;The development of three languages based on the IgL specifications.&lt;/li&gt;
      &lt;li&gt;The presentation to the 1959 UNESCO meeting of J. Backus’ formalism for describing  ALGOL.  This was the foundation for much of the theoretical work done in programming languages since then.&lt;/li&gt;
      &lt;li&gt;The formation in May 1959 of the CODASYL Short Range Committee (later renamed the COBOL committee) and the completion of the specifications by December 1959 (although they were not published until 1960).&lt;/li&gt;
      &lt;li&gt;The start of work on the development of LISP in 1959.&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;1960-1970. Maturation of the field. Perhaps one of the most important practical developments, although scorned by many theoreticians, was the development of official standards for FORTRAN and
COBOL, and the start of standardization for PL/1.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;key-concepts&quot;&gt;Key concepts&lt;/h3&gt;

&lt;p&gt;In this section, Sammet highlights some concepts.&lt;/p&gt;

&lt;p&gt;Starts of with the Backus Normal Form, introduced by John Backus (since it is so relevant to the history of PLs I guess the mention tried to highlight the historical impotance).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The significance of a formal syntactic notation is threefold:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
  &lt;li&gt;It provides a rigorous way of defining the syntax of a language and eliminating the annoying ambiguities of sentences such as  “a  name contains six characters and both the first and last character cannot be a hyphen.”&lt;/li&gt;
  &lt;li&gt;It provides the link between the practical concerns in the programming language field and the theoretical work done by linguists, most notably N. Chomsky. This permits application of linguistic concepts and techniques to programming languages. Although BNF was developed independently by Backus, it is really one of Chomsky’s grammars with a different notation.&lt;/li&gt;
  &lt;li&gt;It led to the development of syntax directed compilers, which in turn gave rise to a more theoretical study of compilation techniques and the possibility of a “production line approach” to developing new compilers.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There is also mention of the &lt;em&gt;formal semantic definitional techniques&lt;/em&gt;, where McCarthy and IBM Vienna Laboratory are key contributors. IBM Vienna created the formal definition for PL/1&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;The monumental size of the formal definition of PL/I precludes it from .being of current practical use. However, it is a major conceptual part of a currently unsolved problem in  all  of programming
which is how to determine whether a program does what we want it to do.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then &lt;em&gt;The attempt at designing computers whose instruction code is a higher level language&lt;/em&gt;, significant concept, not yet achieved (I have to admit I don’t know anything about this, feedback or related links most welcome)&lt;/p&gt;

&lt;p&gt;Finally , there is &lt;em&gt;User defined languages&lt;/em&gt;  have been an area of interest for many years. Is this what we call DSLs these days? ( I’ll need to read up on the references), it kind of sounds like it, tho they talk about directly giving access to users.&lt;/p&gt;

&lt;h3 id=&quot;current-status-as-of-1972&quot;&gt;Current status (as of 1972)&lt;/h3&gt;

&lt;p&gt;This is really interesting, at the time these were the interesting topics:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Extensible languages&lt;/li&gt;
  &lt;li&gt;Proving correctness of a programs&lt;/li&gt;
  &lt;li&gt;Use of higher language programming for systems programming&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cool stuff particularly when you think about the research that became into being around that time with type systems.&lt;/p&gt;

&lt;h3 id=&quot;the-future&quot;&gt;The future&lt;/h3&gt;

&lt;p&gt;The rest of the paper goes of to talk about what seems to be the future. Most predictions have more or less become real.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The user could use his native language, including notation (e.g. algebra, molecular diagrams) appropriate to his particular field. This concept  does not  envision one single computer
system understanding all of English. It  does  envision many systems, each of which is capable of dealing with a particular field…&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;the next best thing will be  user defined languages. By this we mean (software) systems which permit users, first, to define languages that fit their own needs with respect to functional capability,jargon, and personal tastes in style&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;While the day of asking the computer to  “COMPUTE THE PAYROLL FOR MY COMPANY”  is at least one or two decades in the future, I believe we will see a large decrease in the amount of
detail a user must provide.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;…&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The  use of current languages  is not likely to change drastically for many years. It seems likely that FORTRAN and COBOL will be with us for at least five and probably ten more years.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;:)&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;ALOOL 68 will … namely inspire another round of development of implementation
techniques and devotion to elegance in language with less concern for the practical world. It seems virtually certain that ALGOL 68 will  not  become widely used in the United States, and probably not elsewhere.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;Computers are now becoming common… To determine the real effect–both direct and subliminal–of this education on the next generation requires a better crystal ball than this author possesses…people will grow up recognizing the computer as a tool for everyone, just as the automobile, the telephone, and the stove&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Wow…feels like I was just in a great alternative version of Back to the Future, :D.&lt;/p&gt;

&lt;p&gt;[1] Sammet, Jean E. “Programming languages: History and future.” Communications of the ACM 15.7 (1972): 601-610. &lt;a href=&quot;https://github.com/Andrea/andrea.github.io/raw/0a8e8e04ba5ae1ff8b34b275a749fbd661c51b60/downloadables/Programming_Languages_-_Sammet.pdf&quot;&gt;Download&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Sun, 03 Jan 2016 20:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2016/01/03/Sammett-72/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2016/01/03/Sammett-72/</guid>
			</item>
		
			<item>
				<title>More Computation expressions</title>
				<description>&lt;p&gt;I guess I am one of those people that really enjoy this time of the year, so I had to add another post. This is a sneaky(?) second post for   &lt;a href=&quot;https://sergeytihon.wordpress.com/tag/fsadvent/&quot;&gt;#FsAdvent&lt;/a&gt;. Ready for some more computation expressions?&lt;/p&gt;

&lt;p&gt;In the &lt;a href=&quot;http://www.roundcrisis.com/2015/12/06/Computation-expressions-in-practice/&quot;&gt;previous post&lt;/a&gt; I introduced a definition and parts of a computation expression, as well as one of the simplest example.&lt;/p&gt;

&lt;h3 id=&quot;the-beauty-of-reality&quot;&gt;The beauty of reality&lt;/h3&gt;

&lt;p&gt;I started looking at computation expressions because I was trying to deal with the “C#-F# design mismatch”(™) (yes I just made &lt;del&gt;discovered&lt;/del&gt; that up) meaning that I wanted to deal in some nice ways with the fact that when I am using a C# object it will occasionally be null and other fun things. And when I started reading about solutions to that, I found that there are some well known ways to deal with that.&lt;/p&gt;

&lt;p&gt;Sometimes the world surprises you with something amazing, could be a moon rising in the night sky, or maybe someone having a nice gesture towards another fellow human just because. Perhaps there is something to this natural ordered chaos.
And with ordered chaos in mind, a great example of usage of computation expressions is error handling.&lt;/p&gt;

&lt;p&gt;So, lets see some code&lt;/p&gt;

&lt;div class=&quot;language-fsharp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
    &lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;MaybeBuilder&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;         
        &lt;span class=&quot;k&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;__.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Bind&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;maybeValue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;maybeValue&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;with&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Some&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;None&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;None&lt;/span&gt;        
        &lt;span class=&quot;k&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;__.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Some&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;divide&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;with&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;None&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;_&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Some&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;maybe&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;MaybeBuilder&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;divisionM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;maybe&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;divide&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;
                &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;divide&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c&lt;/span&gt;
                &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;z&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;divide&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;
                &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;z&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Similar to the example in the previous post, we have a builder, in this case, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MaybeBuilder&lt;/code&gt; and the signature for this function is :&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Bind:: ‘a option * (‘a -&amp;gt; ‘b option) -&amp;gt; ‘b option&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bind takes a wrapped value (‘a option) and a function that takes an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&apos;a&lt;/code&gt; and returns a wrapped &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&apos;b&lt;/code&gt; (‘b option) and returns a wrapped &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&apos;b&lt;/code&gt;(‘b option). In F#, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&apos;a option&lt;/code&gt; is a generic option where ‘a can be any type. You can use most generic types as wrappers.&lt;/p&gt;

&lt;p&gt;A great explanation on why &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Bind&lt;/code&gt; signature is relevant comes from &lt;a href=&quot;http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html&quot;&gt;this post&lt;/a&gt;. Go ahead and read it. I’ll just pretend you didn’t read it try to explain it and then you will think that it might be good to go and read it :D&lt;/p&gt;

&lt;p&gt;What happens in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Bind&lt;/code&gt; if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;maybeValue&lt;/code&gt; has a value&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Unwrap ‘a , execute the function&lt;/li&gt;
  &lt;li&gt;Return a wrapped value (of type ‘b option)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What happens in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Bind&lt;/code&gt; if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;maybeValue&lt;/code&gt; is nothing&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;There is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;None&lt;/code&gt; so we do nothing.&lt;/li&gt;
  &lt;li&gt;Return a None (which is still of type ‘b option )&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The good thing is, because we return with signature &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&apos;b option&lt;/code&gt; that means we can feed the result back into Bind if that is necessary.&lt;/p&gt;

&lt;p&gt;This triple of &lt;em&gt;a wrapped type&lt;/em&gt;, &lt;em&gt;Bind&lt;/em&gt; and &lt;em&gt;Return&lt;/em&gt; is called a monad, and that is cool because when you realise something is a monad, then that means you get some other stuff for free. To show you how, I’ll start talking about Monoids.&lt;/p&gt;

&lt;h3 id=&quot;monoids&quot;&gt;Monoids&lt;/h3&gt;

&lt;p&gt;I am sure you have heard that&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;A monad is a monoid in the category of endofunctors.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When I read that first I have to admit that was not terribly useful. So I went to check out Monoid, and it turns out they are pretty cool :D&lt;/p&gt;

&lt;p&gt;A monoid needs a type and an operation and it needs to follow the following rules:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Closure.  The operation must have the following signature ‘a -&amp;gt; ‘a -&amp;gt; ‘a&lt;/li&gt;
  &lt;li&gt;identity.  There must exist an instance I of ‘a such that ‘a . I = ‘a&lt;/li&gt;
  &lt;li&gt;Associativity. Given the same order, no matter how we associate the operations so (a . b). c  = a .( b. c ) where a, b and c are instances of ‘a&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;examples For The Win!!&lt;/p&gt;

&lt;p&gt;lets say we have a type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Colour&lt;/code&gt; and an operation &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;addColour&lt;/code&gt;&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;    &lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Colour&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;byte&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;g&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;byte&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;byte&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;byte&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;addColour&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c1&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c2&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;r&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;g&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;g&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;g&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Does this constitute a monoid?&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Closure: the function &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;addColour&lt;/code&gt; has the signature:
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;val addColour : c1:Colour -&amp;gt; c2:Colour -&amp;gt; Colour&lt;/code&gt;
  It looks like we do have closure.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Identity. There exist a colour, black, that if you add to any other colour, the result is the same colour.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;      &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;neutral&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;uy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;g&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;uy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;uy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;uy&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;someColour&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;44&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;uy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;21&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;uy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;99&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;uy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;uy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;};;&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;someColour&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;addColour&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;neutral&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;someColour&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;printfn&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Should be true: %A&quot;&lt;/span&gt;
      &lt;span class=&quot;c1&quot;&gt;// This test covers just one case, we will deal with that shortly&lt;/span&gt;

  &lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;It looks like we have an identity&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Associativity. We can add three different colours and no matter which two we add in which order, the result is the same colour.&lt;/li&gt;
&lt;/ol&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;``The operation is commutative``&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Colour&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Colour&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Colour&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;addColour&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;  &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;addColour&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;addColour&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;addColour&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;nn&quot;&gt;Check&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Quick&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;``The operation is commutative``&lt;/span&gt;

  &lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;When we run that the result is:&lt;/p&gt;

&lt;p&gt;` Ok, passed 100 tests.
    val it : unit = ()`&lt;/p&gt;

&lt;p&gt;What happened here is that we randomly generated a, b and c to be 3 colours and we ran that test a hundred times. Verifying that in fact this pair is a monoid.&lt;/p&gt;

&lt;p&gt;Knowing that something is a monoid can be really useful because you have certain properties that are true of monoids, for example:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;You can convert pair-wise operations to operations that apply to collections&lt;/li&gt;
  &lt;li&gt;You can parallelise operations&lt;/li&gt;
  &lt;li&gt;Incrementalism&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more details on monoids, please read &lt;a href=&quot;http://fsharpforfunandprofit.com/posts/monoids-without-tears/&quot;&gt;this post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The obvious next step now is to create monoids with computation expressions, and this is very cool because to implement them we need some of the other functions that we can use in a builder.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;MonoidBuilder&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Zero&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;neutral&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Combine&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;addColour&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;For&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sequence&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;combine&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Combine&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;body&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Z&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Zero&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;
      &lt;span class=&quot;nn&quot;&gt;Seq&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fold&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;combine&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Z&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sequence&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Yield&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;monoid&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;MonoidBuilder&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;monoidAdd&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;xs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;monoid&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
     &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;xs&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
       &lt;span class=&quot;k&quot;&gt;yield&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;
     &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;In here we are using some new members: Zero, Yield, Combine and For.
Below are all the functions that can be used on builders,&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/comp-exp-functions.png&quot; alt=&quot;members&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://msdn.microsoft.com/en-us/library/dd233182.aspx&quot;&gt;(source)&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;custom-operations&quot;&gt;Custom Operations&lt;/h3&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;      &lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SimpleSequenceBuilder&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
          &lt;span class=&quot;k&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;__.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;For&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;source&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;seq&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;body&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;seq&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
                 &lt;span class=&quot;n&quot;&gt;seq&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;source&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;yield&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;body&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;k&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;__.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Yield&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;seq&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;seq&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;yield&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;item&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;p&quot;&gt;[&amp;lt;&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;CustomOperation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;where&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&amp;gt;]&lt;/span&gt;
          &lt;span class=&quot;k&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;__.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Where&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;source&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;seq&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;seq&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Seq&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;filter&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;f&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;source&lt;/span&gt;        

      &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;myseq&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SimpleSequenceBuilder&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;and you can call this&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;    &lt;span class=&quot;n&quot;&gt;myseq&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;..&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;where&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;this translates to:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;myseq&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Where&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;For&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Yield&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)),&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;I guess by now we are all a bit tired like these otters:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/CVi7DaPVEAALfSE.jpg&quot; alt=&quot;naptime&quot; /&gt;&lt;/p&gt;

&lt;p&gt;See you next time&lt;/p&gt;

&lt;p&gt;Batmandrea&lt;/p&gt;

&lt;h4 id=&quot;references&quot;&gt;References&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html&quot;&gt;Functors, Applicatives, And Monads In Pictures&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikibooks.org/wiki/F_Sharp_Programming/Computation_Expressions&quot;&gt;Computation expression wikibooks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://msdn.microsoft.com/en-us/library/dd233182.aspx&quot;&gt;Computation Expressions (F#) msdn&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blogs.msdn.com/b/dsyme/archive/2007/09/22/some-details-on-f-computation-expressions-aka-monadic-or-workflow-syntax.aspx&quot;&gt;Some Details on F# Computation Expressions - D Syme 2007&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://fsharpforfunandprofit.com/series/computation-expressions.html&quot;&gt;The computation expression series - F# for fun and profit&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cdsmith.wordpress.com/2012/04/18/why-do-monads-matter/&quot;&gt;Why Do Monads Matter?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.quanttec.com/fparsec/users-guide/where-is-the-monad.html&quot;&gt;Where is the monad&lt;/a&gt; A post on FParsec about why they moved away from a monadic aproach due to performance&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://richardminerich.com/2011/02/the-road-to-functional-programming-in-f-from-imperative-to-computation-expressions/&quot;&gt;The Road to Functional Programming in F# – From Imperative to Computation Expressions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://fsprojects.github.io/FSharpx.Extras/index.html&quot;&gt;FSharpx.Extras (github repo)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://blogs.msdn.com/b/wesdyer/archive/2008/01/11/the-marvels-of-monads.aspx&quot;&gt;The marvels of monads - Wes Dyer &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Sun, 06 Dec 2015 20:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2015/12/06/more-computation-expressions/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2015/12/06/more-computation-expressions/</guid>
			</item>
		
			<item>
				<title>Computation expressions and microphones</title>
				<description>&lt;p&gt;It is that time of the year, and &lt;a href=&quot;https://sergeytihon.wordpress.com/tag/fsadvent/&quot;&gt;#FsAdvent&lt;/a&gt; is now an event we all look forward during the happy season :D. My contribution to it is this write up about computation expressions.&lt;/p&gt;

&lt;h3 id=&quot;why&quot;&gt;Why?&lt;/h3&gt;
&lt;p&gt;I guess it is kind of hard to learn something if you don’t know what to use it for.&lt;/p&gt;

&lt;p&gt;Some well known usages of computation expressions are asynchronous programming or creating DSLs.
They allow you to determine the semantics of your code, in short, you can decide how your code gets
executed.&lt;/p&gt;

&lt;p&gt;Having a computation do some of the heavy lifting behind the scenes can
dramatically reduce redundant code.&lt;/p&gt;

&lt;h3 id=&quot;you-were-saying-about-practice&quot;&gt;You were saying about practice?&lt;/h3&gt;

&lt;p&gt;Below is an example of a computation expression builder. Which is a “normal” F# type that has some methods that the F# compiler will look for. The compiler recognizes a builder because it has certain functions with well defined names (such as Bind, Return, For, etc), more on this later.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-FSharp&quot;&gt;
      type SimplestBuilder () =
        member this.Bind(x,f) = f x          
        member this.Return(x) = x

&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SimplestBuilder&lt;/code&gt; type is a computation expression builder. “A builder is a record of operations that defines the semantics but also the syntax available in the block.” [&lt;a href=&quot;http://tomasp.net/academic/papers/computation-zoo/computation-zoo.pdf&quot;&gt;Petricek, Syme (2014)&lt;/a&gt;]. In this case we are just saying that when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Bind&lt;/code&gt; runs it will just call the function &lt;em&gt;f&lt;/em&gt; with the parameter &lt;em&gt;x&lt;/em&gt;. And when we call &lt;em&gt;Return&lt;/em&gt; the function result will be the parameter passed into the function. The question here is how do they get called?, we answer this as follows:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;      &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;simple&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SimplestBuilder&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;

      &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;simple&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
              &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;one&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;One&quot;&lt;/span&gt;
              &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;two&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Two&quot;&lt;/span&gt;
              &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;testing&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;one&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;two&lt;/span&gt;
              &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;testing&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

  &lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;When we see the definitions for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Bind&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Return&lt;/code&gt; those methods mandate how &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;let!&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;return&lt;/code&gt; behave in the lines above (in this second code sample).
  We can say that the computation expression is everything after &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;let x =&lt;/code&gt; declaration.&lt;/p&gt;

&lt;p&gt;The result of running the code sample is the following:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &amp;gt;val x : string = &quot;OneTwo&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It might be worth remembering other computation expressions you might be already familiar with, such as.&lt;/p&gt;

&lt;h4 id=&quot;async-workflows&quot;&gt;Async workflows&lt;/h4&gt;

&lt;p&gt;(workflow is a common alternative name for some computation expressions)&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;      &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;extractLinks&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;url&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
              &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;webClient&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Net&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;WebClient&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;

              &lt;span class=&quot;n&quot;&gt;printfn&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Downloading %s&quot;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;url&lt;/span&gt;
              &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;html&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;webClient&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;DownloadString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;url&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
              &lt;span class=&quot;n&quot;&gt;printfn&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Got %i bytes&quot;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Length&lt;/span&gt;

              &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;matches&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;RegularExpressions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Regex&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Matches&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;http://&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;S+&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
              &lt;span class=&quot;n&quot;&gt;printfn&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Got %i links&quot;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;matches&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Count&lt;/span&gt;

              &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;matches&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Count&lt;/span&gt;
          &lt;span class=&quot;o&quot;&gt;};;&lt;/span&gt;

  &lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;[&lt;a href=&quot;https://en.wikibooks.org/wiki/F_Sharp_Programming/Async_Workflows&quot;&gt;Example from wikibooks&lt;/a&gt;]&lt;/p&gt;

&lt;h4 id=&quot;mbrace&quot;&gt;MBrace&lt;/h4&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;remoteResult&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;cloud&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;printfn&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;hello, world&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Environment&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;MachineName&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;|&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cluster&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Run&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;[&lt;a href=&quot;https://github.com/mbraceproject/MBrace.StarterKit/blob/master/HandsOnTutorial/1-hello-world.fsx&quot;&gt;Example from MBrace.io&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;In both examples the builder is defined elsewhere, and as consumers of the computation we have a set of things we can do. When we don’t use the workflow with the expected syntax, (generally) the compiler will warn us with errors like:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This control construct may only be used if the computation expression builder defines a ‘ReturnFrom’ method.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The builder works by using the compiler to convert the syntax into a block like this, for the SimplestBuilder we saw at the very start of this post:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;simple&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Bind&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;One&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;one&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;simple&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Bind&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Two&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;two&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;simple&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Bind&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;one&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;two&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;testing&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;simple&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Return&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;testing&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))))&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;This de-sugared syntax (&lt;em&gt;syntax-max&lt;/em&gt; if you will :) ) is harder to write and also harder to read.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/syntax-max.jpg&quot; alt=&quot;syntax-max&quot; /&gt;&lt;/p&gt;

&lt;p&gt;So this post tells us a little bit about what computation expressions are and how you can create very simple versions of them. In the &lt;a href=&quot;http://www.roundcrisis.com/2015/12/06/more-computation-expressions/&quot;&gt;next post&lt;/a&gt; we will see how to use them with a little more context.&lt;/p&gt;

&lt;p&gt;Thanks for reading and happy holidays!!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://s-media-cache-ak0.pinimg.com/236x/22/5d/fc/225dfc73941c511e67f628bf63bc6ac4.jpg&quot; alt=&quot;otter-xmas&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Yours Batmandrea&lt;/p&gt;
</description>
				<pubDate>Sun, 06 Dec 2015 19:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2015/12/06/Computation-expressions-in-practice/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2015/12/06/Computation-expressions-in-practice/</guid>
			</item>
		
			<item>
				<title>Reading about primes, type providers and more</title>
				<description>&lt;p&gt;Some stuff I have been looking at today that you might find interesting&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://gettingsharper.de/2014/12/19/having-fun-with-type-level-numbers-using-a-type-provider/&quot;&gt;Having fun with type level numbers by using a type provider&lt;/a&gt;
Excellent post that I have been meaning to read about implementing a type provider for primer numbers, complete with the explanation on primes and type provider implementation. Really the &lt;em&gt;making illegal states unrepresentable&lt;/em&gt; .&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://latkin.org/blog/2014/12/26/nested-looping-to-programmatic-depth-in-f/&quot;&gt;Nested looping to programmatic depth in F#&lt;/a&gt; This post comes to a solution to the lack of &lt;em&gt;break&lt;/em&gt; and &lt;em&gt;return&lt;/em&gt; in F## by solving the similar problem we did in a recent &lt;a href=&quot;http://www.meetup.com/FunctionalKats/events/225465966/&quot;&gt;Functional Kats meetup&lt;/a&gt; The first time I thought when I saw the problem was, oh this is about &lt;a href=&quot;fsharpforfunandprofit.com/posts/computation-expressions-intro/&quot;&gt;Computation expressions&lt;/a&gt; but although there is a link to a solution by Tomas Petricek that &lt;a href=&quot;http://tomasp.net/blog/imperative-i-return.aspx/&quot;&gt;uses them&lt;/a&gt; this post shows a different approach that shows better performance 66ms versus 880ms.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/witheve/Eve&quot;&gt;Eve project&lt;/a&gt; you might agree with they ideas behind it or not, but it is worth checking out this project about trying to help us think, while also changing the way we write code. Eve: Better tools for thought http://witheve.com&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yours BatmAndrea&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2015-cadiz.jpg&quot; alt=&quot;view&quot; /&gt;&lt;/p&gt;
</description>
				<pubDate>Wed, 28 Oct 2015 19:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2015/10/28/reading-about/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2015/10/28/reading-about/</guid>
			</item>
		
			<item>
				<title>FSharp Gotham - Experience report</title>
				<description>&lt;p&gt;&lt;img src=&quot;https://d4cdtj2t27jdu.cloudfront.net/conference_logos/cropped_b7df0c8238.jpg&quot; alt=&quot;F# Gotham&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.fsharpgotham.com/&quot;&gt;F# Gotham&lt;/a&gt; stared on the morning of the 16th of October at &lt;a href=&quot;&quot;&gt;Jet’s&lt;/a&gt; Offices (lovely views of the city)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.roundcrisis.com/images/jet-view.jpg&quot; alt=&quot;view&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I saw the very start of &lt;a href=&quot;https://twitter.com/TRikace&quot;&gt;Riccardo Terrel’s&lt;/a&gt; tutorial on Reactive and Concurrent F#. He was covering  the practical aspects of writing safe concurrent programs, and how to do that with functional programming languages, in particular F# . Sadly I was rehearsing my talk. From the distance it looked fun.&lt;/p&gt;

&lt;p&gt;Then it was my turn, I talked about Computation Expressions, the idea of this talk is to introduce them, trying to demistify them a little bit with the help of awesome pictures of otters :D
We covered some well known CEs such as async, error handling monads as well as mbrace.&lt;/p&gt;

&lt;p&gt;There is an extensive list of resources at the end of the
&lt;a href=&quot;http://www.roundcrisis.com/presentations/2015-fsharp-gotham-computation-expressions/index.html#/&quot;&gt;slides for my Computation Expressions in Context &lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Then it was time for two people from Microsoft to answer some questions. David Stevens, the new Programme Manager for F#, started this talk with a brief history of the language and some features of the language he particularly liked, and some extra information trying to give people some context of where he was coming from. Great presentation.
This was followed by some questions from the audience, Jay Schmelzer, one of the directors from DevDiv, joined David. The questions varied from feature parity to marketing support, azure, the collaboration with the F# Software Foundation and more.
I think we got some very honest as well as some promising answers. I am looking  forward to see how it all goes and the near and distant future. I believe all  sessions have been recorded and will link it here as soon as they becomes available.&lt;/p&gt;

&lt;p&gt;[Update 21-10-2015] There is an article on &lt;a href=&quot;http://www.infoq.com/news/2015/10/fsharp-gotham&quot;&gt;InfoQ&lt;/a&gt; with more details about this talk.&lt;/p&gt;

&lt;p&gt;Next it was lunch time and time to mingle. Great food. Kudos to the organisation team and the sponsors, for putting on a great event.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/fs-gotham/c_a_r.jpg&quot; alt=&quot;Charles and Riccardo&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Then it was time to listen to &lt;a href=&quot;https://en.wikipedia.org/wiki/Charles_Petzold&quot;&gt;Charles Petzold&lt;/a&gt; talk about Using F# for Xamarin forms. He started off talking about his early career as a Programmer using Fortran and APL amongst other languages.
Then he built a series of samples targeting multiple devices using Xamarin Forms with F#.
He showed:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;How to setup the solution so you can use F# (it might be a  idea to create a template for this type of solution)&lt;/li&gt;
  &lt;li&gt;Deployment to many devices.&lt;/li&gt;
  &lt;li&gt;A Sieve of Eratosthenes in 3 or 4 lines of code (yay!)&lt;/li&gt;
  &lt;li&gt;Converting the code to work asynchronously&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and more. Nicely presented.
I wish I could find a way to contact him to let him know about &lt;a href=&quot;https://fsprojects.github.io/Paket/&quot;&gt;Paket&lt;/a&gt;, I think he might appreciate it.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/fs-gotham/t2.jpg&quot; alt=&quot;xam&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Then it was time for the optimization panel with Jon Harrop, Jack Pappas, and Lev Gorodinski. MCed by Paulmichael Blasucci. This was a highly interactive session  where we heard about collections and data structures (how they always turn up on these type of conversations…. :D) common things to avoid and some very funny war stories.
One of the questions was about a particular &lt;a href=&quot;http://flyingfrogblog.blogspot.com&quot;&gt;post&lt;/a&gt; Jon Harrop had posted a few years ago doing a language comparision, and how that evolved and how it compared to now. There was also some discussion on tooling  where the usual ones turned up VS interated one , Concurrency visualization, roll your own, and also one I heard of but never used, &lt;a href=&quot;http://www.microsoft.com/en-ie/download/details.aspx?id=28567&quot;&gt;Perf View&lt;/a&gt;. I was kind of suprised no one mentioned dotTrace and dotMemory.&lt;/p&gt;

&lt;p&gt;Finally Phil Trelford closed the conference with a talk that I am lucky to have seen multiple times, his “Write your own compiler in 24 hour” talk. It is funny how you always pick up new things when you watch something a couple of times. This time I was looking at how focused on the process of writing the compiler, starting with the parser and testing out his design before moving off to implementing the AST.
This made me think about something else we were discussing on a “hallway session” about how do we make decisions when you have limited knowledge, my take on it is you choose a path and try to do a very small implementation trying to fail fast, as fast as possible, focusing on how is it failing , iterating and then implementing a solution you know does what it should do.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/fs-gotham/t3.jpg&quot; alt=&quot;phil&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Another thing that was really cool about this conference was the one track and highly relaxed feeling around it (lots of space, comfortable sitting).&lt;/p&gt;

&lt;p&gt;Since I was wearing a cape that was given to all of us as swag, someone called me BatmAndrea, I think I’ll keep this :)&lt;/p&gt;

&lt;p&gt;Yours BatmAndrea
&lt;img src=&quot;/images/fs-gotham/view2.jpg&quot; alt=&quot;view&quot; /&gt;&lt;/p&gt;
</description>
				<pubDate>Sun, 18 Oct 2015 19:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2015/10/18/Computation-expressions-in-fsharp-gotahm/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2015/10/18/Computation-expressions-in-fsharp-gotahm/</guid>
			</item>
		
			<item>
				<title>Functional Katas Review Of Kata</title>
				<description>&lt;p&gt;Functional Kats: Kata review&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;{highlight FSharp}

let isPrime x =
    match x with
    | 2 | 3 -&amp;gt; true
    | x when x % 2 = 0 -&amp;gt; false
    | _ -&amp;gt;
        let rec superPrimeCheck i =
            match i with
            | i when x % i = 0 -&amp;gt; false
            | i when x &amp;lt; i*i -&amp;gt; true
            | _ -&amp;gt; superPrimeCheck (i + 2)
        superPrimeCheck 3

isPrime 1
let oneM = 1000000
let checkStuff maxNumber =
            [2..10000]
            |&amp;gt; Seq.ofList
            |&amp;gt; Seq.filter(fun x-&amp;gt; isPrime x)
            |&amp;gt; Seq.fold(fun acc x -&amp;gt;                                                                                    
                            if (isPrime acc &amp;amp;&amp;amp; acc &amp;lt;= maxNumber)then
                                printfn &quot;found %A&quot; acc
                            acc + x                            
                            ) 0
{endhighlight }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Choose sequences because:.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;seq&amp;lt;&apos;a&amp;gt;&lt;/code&gt; computes on demand, so even tho we are not doing this here, maybe that can be a possible way to optimise this code?&lt;/li&gt;
  &lt;li&gt;Side effects happen when the value is consumed&lt;/li&gt;
  &lt;li&gt;the yield of a sequence expression can also be another sequence, signified through the use of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;yield!&lt;/code&gt; keyword&lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Thu, 15 Oct 2015 00:00:00 +0000</pubDate>
				<link>http://roundcrisis.com/2015/10/15/Functional-katas-review-of-kata/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2015/10/15/Functional-katas-review-of-kata/</guid>
			</item>
		
			<item>
				<title>Quietness</title>
				<description>&lt;p&gt;Lately I have been working on the port for our game &lt;a href=&quot;onikira.com&quot;&gt;Onikira: Demon Killer&lt;/a&gt; (very very close to release by the way)… it is a lot of work but hopefully good stuff for everyone will come out of that, namely the port of the Duality Game engine and all dependencies to Android… if you want to read a little about the chaos of that, you can read the &lt;a href=&quot;https://github.com/Andrea/Portdocs/blob/master/README.md&quot;&gt;Port Notes&lt;/a&gt; (please note, it might make no sense, these are notes that might only make sense to me, if even…). The way we are going about this is to try to get all the parts working in the fastest possible way (so we can release the game on the new platform) and then come back, and do the cleaning thing and collaborate with &lt;a href=&quot;https://github.com/AdamsLair&quot;&gt;Adam&lt;/a&gt;, the main maintainer for the &lt;a href=&quot;http://duality.adamslair.net/&quot;&gt;Duality Game Engine&lt;/a&gt; to create a nice, clean version of the port . This is the reason why all the changes for this port are forks, all of them available on &lt;a href=&quot;https://github.com/batbuild?tab=repositories&quot;&gt;github repo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By the way you can see all open source builds  available via our &lt;a href=&quot;http://teamcity.ngrok.io/overview.html&quot;&gt;TeamCity build server&lt;/a&gt;.&lt;br /&gt;
A very by  Thank you!!  to  &lt;a href=&quot;https://twitter.com/hhariri&quot;&gt;Hadi Hariri&lt;/a&gt; and &lt;a href=&quot;https://www.jetbrains.com/&quot;&gt;JetBrains&lt;/a&gt; for the Open Source license for Teamcity :D (we love it). Also much thanks to &lt;a href=&quot;xamarin.com&quot;&gt;Xamarin&lt;/a&gt; and &lt;a href=&quot;https://github.com/dellis1972&quot;&gt;Dean Ellis&lt;/a&gt;, of Monogame fame, for the Open source license too :D&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/PxC8zVkl.png&quot; alt=&quot;TeamCity&quot; /&gt;&lt;/p&gt;

&lt;p&gt;If you have any questions about the port or want to help on the open source effort for it please let me know. Twitter might be the best way.&lt;/p&gt;

&lt;p&gt;Also I have to apologize to people trying to use the Duality Scripting plugin as it is not very user friendly at the moment, but I do want to spend sometime as soon as this game ships.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/FShbUoXl.jpg&quot; alt=&quot;CatTax&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Which reminds me, Come to &lt;a href=&quot;functionalkats.com&quot;&gt;&lt;em&gt;Kats Conf 15&lt;/em&gt;&lt;/a&gt;!!!, a functional programming conference in Dublin on September the 12th, if you are in Dublin or close you should consider attending.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://functionalkats.com/assets/pictures/functional-kats-logo.png&quot; alt=&quot;Kats Conf&quot; /&gt;&lt;/p&gt;
</description>
				<pubDate>Tue, 28 Jul 2015 19:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2015/07/28/Quietness/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2015/07/28/Quietness/</guid>
			</item>
		
			<item>
				<title>Computation expressions at NDC</title>
				<description>&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/aQkTWvT.png&quot; alt=&quot;NDC&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Yesterday at NDC Oslo I presented a talk about computation expressions, you can find the slides &lt;a href=&quot;http://www.roundcrisis.com/presentations/ndc-oslo/&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.roundcrisis.com/presentations/ndc-oslo/&quot;&gt;&lt;img src=&quot;http://roundcrisis.com/images/ndcoslo.png&quot; alt=&quot;slides&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;iframe src=&quot;https://player.vimeo.com/video/131410829&quot; width=&quot;500&quot; height=&quot;281&quot; frameborder=&quot;0&quot; webkitallowfullscreen=&quot;&quot; mozallowfullscreen=&quot;&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;&lt;a href=&quot;https://vimeo.com/131410829&quot;&gt;Computation expression in context : a history of the otter king - Andrea Magnorsky&lt;/a&gt; from &lt;a href=&quot;https://vimeo.com/ndcconferences&quot;&gt;NDC Conferences&lt;/a&gt; on &lt;a href=&quot;https://vimeo.com&quot;&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I started a little fp-track NDC Oslo album, https://vimeo.com/album/3452190 (I will add them as they come)&lt;/p&gt;

&lt;p&gt;All of the code shown during the talk (plus some handy extras) can be found &lt;a href=&quot;https://github.com/Andrea/Presentations/tree/master/NDC_Oslo-ComputationExpressions&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These are some of the resources used to create this talk, in no particular order&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://byorgey.wordpress.com/2009/01/12/abstraction-intuition-and-the-monad-tutorial-fallacy/&quot;&gt;Abstraction, intuition, and the “monad tutorial fallacy”&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://two-wrongs.com/the-what-are-monads-fallacy&quot;&gt;The “What are monads?” fallacy&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.infoq.com/articles/pickering-fsharp-workflow&quot;&gt;Beyond Foundations of F# - Workflows&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://homepages.inf.ed.ac.uk/wadler/topics/monads.html&quot;&gt;Monads, Arrows and idioms&lt;/a&gt; there is a bunch of papers here.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.infoq.com/presentations/Why-is-a-Monad-Like-a-Writing-Desk&quot;&gt;Why a monad is like a writing desk&lt;/a&gt; Video&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://fsharpforfunandprofit.com/posts/monoids-without-tears/#series-toc&quot;&gt;Understanding Monoids&lt;/a&gt; F# for fun and profit series on monoids&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://gettingsharper.de/2015/03/03/understanding-monoids-using-f/&quot;&gt;Understanding Monoids using F#&lt;/a&gt; From gettingsharp-er :)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://tomasp.net/academic/papers/computation-zoo/syntax-matters.pdf&quot;&gt;Syntax Matters: Writing abstract computations in F#&lt;/a&gt; paper by Tomas Petricek and Don Syme about computation expressions&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=9fohXBj2UEI&quot;&gt;Monads explained from a maths point of view&lt;/a&gt; Video&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://ncatlab.org/nlab/files/WadlerMonads.pdf&quot;&gt;Comprehending Monads&lt;/a&gt; P.Wadler paper&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;(http://homepages.inf.ed.ac.uk/wadler/papers/marktoberdorf/baastad.pdf)&quot;&gt;Monads for functional programming&lt;/a&gt; P.Wadler paper&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://fsharp.org/specs/language-spec/&quot;&gt;F# language specification&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://tryjoinads.org/index.html?computations/home.html&quot;&gt;Try Joinads F# research extension for concurrent, parallel and asynchronous programming.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html&quot;&gt;Functors Applicatives and monads in pictures&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://fsharpforfunandprofit.com/posts/computation-expressions-intro/&quot;&gt;F# for fun and profit - Computation expressions series&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://bartoszmilewski.com/2011/01/09/monads-for-the-curious-programmer-part-1/&quot;&gt;Monads for the curious programmer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once there is a video I will also add the link here&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.cotswoldwildlifepark.co.uk/images/meet-animals/otter.jpg&quot; alt=&quot;otter&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Thanks&lt;/p&gt;
</description>
				<pubDate>Wed, 17 Jun 2015 19:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2015/06/17/Computation-expressions-in-context/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2015/06/17/Computation-expressions-in-context/</guid>
			</item>
		
			<item>
				<title>Porting an engine to Android 1</title>
				<description>&lt;p&gt;As you might or might not know to make &lt;a href=&quot;www.onikira.com&quot;&gt;Onikira: Demon Killer&lt;/a&gt; we use an engine called &lt;a href=&quot;http://duality.adamslair.net/&quot;&gt;Duality&lt;/a&gt; and a few weeks ago we started to port it to android.&lt;/p&gt;

&lt;h2 id=&quot;starting-out&quot;&gt;Starting out&lt;/h2&gt;

&lt;p&gt;As we started we made a list of things that we needed to look at&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Shaders
    &lt;ul&gt;
      &lt;li&gt;GLSL
        &lt;ul&gt;
          &lt;li&gt;All shaders need to be update to min #version 300&lt;/li&gt;
          &lt;li&gt;Fixed function methods like ftransform need to be removed and replaced with manual multiplication of transformation matrices&lt;/li&gt;
          &lt;li&gt;Shader in and out variables need to be defined for passing data from the app through the vertex shaders and into the fragment shaders&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Engine
        &lt;ul&gt;
          &lt;li&gt;the engine should by default pass a bunch of predefined variables to each shader&lt;/li&gt;
          &lt;li&gt;predefined variables should be defined for common things like modelViewProj&lt;/li&gt;
          &lt;li&gt;the Shader class should try and pass all common variables to the contained shader at bind time&lt;/li&gt;
          &lt;li&gt;the engine needs to have a central place where common variables live that can be written to by the draw device when variables change (BeginRendering most likely) and read from by the shader classes.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Rendering
    &lt;ul&gt;
      &lt;li&gt;cUrrently uses fixed function vertex attribute bindings in the Vertex* classes. These need to be updated to use generic vertex attributes.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Windowing
    &lt;ul&gt;
      &lt;li&gt;need to specify the min GL version when creating the GameWindow class (DualityLauncher)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These were a conversation starter.&lt;/p&gt;

&lt;h3 id=&quot;first-steps&quot;&gt;First steps&lt;/h3&gt;

&lt;h3 id=&quot;opentk&quot;&gt;OpenTK&lt;/h3&gt;

&lt;p&gt;The first thing we did was to try to get OpenTk running. Here the awesome &lt;a href=&quot;https://twitter.com/infspacestudios&quot;&gt;Dean Ellis&lt;/a&gt; gave us a huge hand by talking to us and then pushing some code to the repo.&lt;/p&gt;

&lt;p&gt;Duality uses a fork of OpenTK, so to port it we forked too &lt;a href=&quot;https://github.com/batbuild?tab=repositories&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;add openTk.Android project&lt;/li&gt;
  &lt;li&gt;add a sample project to know everything is working&lt;/li&gt;
  &lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;farseer&quot;&gt;Farseer&lt;/h3&gt;

&lt;p&gt;Duality depends on Farseer so we also had to fork this project. The process so far has been super simple
// more details&lt;/p&gt;

&lt;h3 id=&quot;duality&quot;&gt;Duality&lt;/h3&gt;

&lt;p&gt;Explain changes to the branch here&lt;/p&gt;

&lt;h2 id=&quot;progress&quot;&gt;Progress&lt;/h2&gt;
&lt;p&gt;…. add more day by day (I have something like this already)&lt;/p&gt;

&lt;h3 id=&quot;12th-may&quot;&gt;12th May&lt;/h3&gt;

&lt;p&gt;Today we finally got a texture rendering and using OpenGL 4.4 via OpenTK.
We also decided that all the repositories will have their master untouched (as it was from any original fork) and that all android related changes will go into the branch ‘android-port’&lt;/p&gt;

&lt;h3 id=&quot;13th-may&quot;&gt;13th May&lt;/h3&gt;

&lt;p&gt;Today we are working on other default shaders rendering and input.&lt;/p&gt;

&lt;h3 id=&quot;15th-may&quot;&gt;15th May&lt;/h3&gt;

&lt;p&gt;–&lt;/p&gt;

&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;/h1&gt;

&lt;p&gt;We are porting Duality runtime to Android, all the code is available on this &lt;a href=&quot;https://github.com/batbuild?tab=repositories&quot;&gt;user&lt;/a&gt; on the respective android-port branch of each repository. If you are interested in this and want to help or have questions, let us know.&lt;/p&gt;

</description>
				<pubDate>Wed, 13 May 2015 13:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2015/05/13/Port/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2015/05/13/Port/</guid>
			</item>
		
			<item>
				<title>Lambda Days and dev At Lodz</title>
				<description>&lt;p&gt;I spent part of the past week in Poland, I landed in Łódź (if you are not a Polish speaker, look up the pronunciation). Totally extreme friendliness. I felt right at home, maybe there is something to do with my last name :D. Thanks so much for your superb welcome, and once again thanks to Kuba for driving from Lodz to Krakow (I owe you a drink).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/ld-cake.jpg&quot; alt=&quot;cake&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I think Poland is a great country, I have a lot of respect for countries that take their pastries seriously and with high availability.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/ld-pastries1.jpg&quot; alt=&quot;pastries&quot; /&gt;
&lt;img src=&quot;/images/ld-pastries2.jpg&quot; alt=&quot;pastries&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;devłódź&quot;&gt;dev@Łódź&lt;/h3&gt;

&lt;p&gt;I was really curious about how a group that is about programming cross domain, cross platform, basically anything goes would work. I was pleasantly welcome by a highly engaged and fun audience. Kudos to you!&lt;/p&gt;

&lt;p&gt;I am still not sure how to report on my own talks :D. Suggestions welcome.&lt;/p&gt;

&lt;p&gt;After my talk there was another talk about Romantic Web:Relation Object Mapping for semANTIC WEB in .net. Certainly a catchy name :). The claim is that “RomanticWeb is the world’s first ORM class solution for graph-based data written fully in C# that allows developers to work with the RDF data in a way the would work with any other data in an object oriented manner. This can be achieved by creating data models that can then be mapped to RDF statements in a fully transparent way” it looked interesting tho a bit heavy on boilerplate, I am still not clear where would you use something like this, but, as always is cool to see things you don’t know about.&lt;/p&gt;

&lt;h3 id=&quot;lambda-days&quot;&gt;Lambda Days&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/images/ld-venue.jpg&quot; alt=&quot;venue&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The day started with a talk by &lt;a href=&quot;https://github.com/gar1t&quot;&gt;Garreth Smith&lt;/a&gt;. In his talk he described how he has been trying to rediscover the joy of coding through  some experiences with his son using &lt;a href=&quot;https://scratch.mit.edu/&quot;&gt;Scratch&lt;/a&gt;. The talk was very entertaining, and there was a few hints of something to take away, I think he was trying to encourage us and himself to be a little more open about what it means when someone tells you something feels good (from a programming point of view) and how we can learn from that (or something). I think he was on to something but didn’t drive it all the way home, though topic. I really hope we get more iterations on this. 
He recommended &lt;a href=&quot;http://smile.amazon.com/The-Timeless-Building-Christopher-Alexander/dp/0195024028/&quot;&gt;The timeless way of building&lt;/a&gt; and it looks interesting enough to pick up.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/ld-gar.jpg&quot; alt=&quot;gar&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I had some hallway sessions and then I went to &lt;a href=&quot;https://github.com/studzien&quot;&gt;Rafał Studnicki’s&lt;/a&gt; talk on running Erlang on 32k of Ram. It turns out you can run. This was a talk in a series of 15~20 min talks about research papers. Interesting format.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/ld-2.jpg&quot; alt=&quot;erl&quot; /&gt;&lt;/p&gt;

&lt;p&gt;After lunch, it was &lt;a href=&quot;https://github.com/evelinag/&quot;&gt;Evelina Gabasova’s&lt;/a&gt; turn to &lt;a href=&quot;https://github.com/evelinag/Projects/tree/master/FSharpCancerResearch&quot;&gt;talk&lt;/a&gt;, she had a quite large room-full of people. The talk went over a comparison of other tools used for research in cancer and how she uses F# and the type providers to do better Science. One bit of info I didn’t know about, men can also get breast cancer.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/ld-eg.jpg&quot; alt=&quot;eg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;After that I went to “A year of Haskell” by Justin , this was a cool talk, if someone can go and set up a start up in Ecuador that does Haskell and it’s working out, well this is pretty inspiring. :D He mentioned the pain of supporting ageing Rails projects and how he found Haskell a good alternative. A not precise quote:”Haskell is easier to learn than Ruby”. The tone of my comments here leave out how he is really not trying to force this on you but rather, he is talking through his own experience.
This is what is like when you get to an existing Ruby project&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/ld-j1.jpg&quot; alt=&quot;j1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/ld-j2.jpg&quot; alt=&quot;j2&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Then it was my turn to give a talk. My slides are &lt;a href=&quot;http://www.roundcrisis.com/presentations/the_tools_that_shape_us_ld2015/index.html#/&quot;&gt;here&lt;/a&gt; thankfully I have no pictures.&lt;/p&gt;

&lt;p&gt;In the party, there was pizza and beer and a lot of talk about types. At some point &lt;a href=&quot;https://edwinb.wordpress.com/&quot;&gt;Edwin Brady&lt;/a&gt; said something around the lines of “I would write a php backend for Idris” (there is a story behind the beer tokens you see in the pics), this was immediately twitted by &lt;a href=&quot;https://twitter.com/old_sound&quot;&gt;Alvaro Videla&lt;/a&gt; a few days later Edwin sent this tweet around:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/ld-eb.jpg&quot; alt=&quot;j2&quot; /&gt;&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; data-partner=&quot;tweetdeck&quot;&gt;&lt;p&gt;Can I have a Turing Award now please? Or does this rule me out for life? &lt;a href=&quot;https://t.co/ByV8hpl7fM&quot;&gt;https://t.co/ByV8hpl7fM&lt;/a&gt; &lt;a href=&quot;https://twitter.com/old_sound&quot;&gt;@old_sound&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://twitter.com/silverSpoon&quot;&gt;@silverSpoon&lt;/a&gt; did pay up front&lt;/p&gt;&amp;mdash; Edwin Brady (@edwinbrady) &lt;a href=&quot;https://twitter.com/edwinbrady/status/572893136948727809&quot;&gt;March 3, 2015&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;Day 2 of Lambda days started with a talk by Kinga Panasiewicz, a neuroscientist. She did a super interesting talk about how our brains work, I would like to see more like it. In the talk she mentioned the effects of too much light before sleeping time, how poor our memory is and other things that I can’t remember (maybe because I am trying to remember more than 7 things?).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/ld-kp.jpg&quot; alt=&quot;kp&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.lambdadays.org/lambdadays2015/manuel-bernhardt&quot;&gt;Scala, Akka, Play: The Why and How of reactive web-applications on the JVM&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/elmanu&quot;&gt;Manuel Bernhardt&lt;/a&gt;, admittedly Scala is not something I know much about at the moment, but I thought it would be good to learn a little bit more about it. On this talk Manuel went over the basics of Scala, Akka and Play super fast and went on to explain how they work together. One of the gems of this talk was when Manuel showed how Mailbox works with an example from Star Wars please skip for spoilers.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/ld-mb.jpg&quot; alt=&quot;sw&quot; /&gt;&lt;/p&gt;

&lt;p&gt;After that I went to a talk called Implementing graph representation model for parallel and distributed systems using Erlang, this talk was a little confusing, there were many definitions at the start and then a bunch of graphs, the graphs showed some sort of really good performance metric, but I really couldn’t understand much of it, I am going to put it to lack of sufficient tea, too early :D. I am also sorry I forgot that at the same time Tomasz Jaskula was giving a talk about F# that got really good comments.&lt;/p&gt;

&lt;p&gt;After that I went to &lt;a href=&quot;http://www.lambdadays.org/lambdadays2015/alvaro-videla&quot;&gt;Alvaro Videla’s&lt;/a&gt; excellent talk about RabbitMQ, he had a live simulation of how things worked that I really enjoyed. He talked about the internals of RabbitMQ and the result of that is that I am more and more curious about Erlang; I wish the recording of it was online already.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/ld-av.jpg&quot; alt=&quot;sw&quot; /&gt;&lt;/p&gt;

&lt;p&gt;After that I went to a talk by &lt;a href=&quot;http://mlusiak.com/&quot;&gt;Michał Łusiak&lt;/a&gt; his talk started super well because his first slide was a picture of a bridge in Dublin, and he was talking about type providers, something I have been interested &lt;a href=&quot;http://www.roundcrisis.com/2015/02/22/Type-providers/&quot;&gt;of late&lt;/a&gt; the talk was pretty cool as he went on showing many existing type providers and their use cases, including the ones that seem rather useless but are fun (like squirrelify) :)&lt;/p&gt;

&lt;p&gt;Finally Tomas Petriceck had a cool talk on literate programming, he was talking about the origin of literate programming from Knuth and trying to rescue the feel of it and bring it into F#. He was missing some graphs so he created a DSL for making them and he said he would make it available, which he did &lt;a href=&quot;http://tpetricek.github.io/Talks/2015/literate-programming/krakow/#/&quot;&gt;slides&lt;/a&gt; and &lt;a href=&quot;https://github.com/tpetricek/Talks/tree/master/2015/literate-programming&quot;&gt;code&lt;/a&gt; a few days after the talk (and prompt me to finish this post). As always there was another talk I wanted to attend to too but sadly you can only be in one place at a time.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/ld-tp.jpg&quot; alt=&quot;sw&quot; /&gt;&lt;/p&gt;

&lt;p&gt;After the conference a good few of us went for dinner, Lambda Days and Krakow was super fun :) Big kudos to the organizers and everyone involved in making it happen.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/ld-end.jpg&quot; alt=&quot;end&quot; /&gt;&lt;/p&gt;

</description>
				<pubDate>Sun, 01 Mar 2015 23:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2015/03/01/lambdadays-devLodz/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2015/03/01/lambdadays-devLodz/</guid>
			</item>
		
			<item>
				<title>Type providers</title>
				<description>&lt;p&gt;The awesome &lt;a href=&quot;http://rachelree.se/&quot;&gt;Rachel&lt;/a&gt; and myself were on &lt;a href=&quot;http://mostlyerlang.com/&quot;&gt;Mostly Erlang podcast&lt;/a&gt; the other day (it’s not live yet), check it out they have some very cool episodes.&lt;/p&gt;

&lt;p&gt;Anyway I was there and we were talking about Type providers and I said something around the lines of “type providers generate erased types…” blah. This is not correct so this post is an attempt to cure that mistake. (I could tell you how I woke up at 5am the next morning and realised I said something wrong and someone was there to record it but, don’t worry I won’t).&lt;/p&gt;

&lt;h4 id=&quot;anyway-what-is-a-type-provider&quot;&gt;Anyway, what is a type provider?&lt;/h4&gt;

&lt;p&gt;I was at a talk somewhere a year+ ago. All I remember is that 3 lines of code gave me access to typed info from a source (in that case a csv) without any further setup, I though &lt;strong&gt;Wow&lt;/strong&gt;, all that wasted time!, No more!! I was thinking of all the mapping I had done with ORMs or using something like FileHelpers + setup (that would need to be changed if the data changed even a little bit).&lt;/p&gt;

&lt;p&gt;so like 5 seconds later we were all thinking … how does it work?&lt;/p&gt;

&lt;p&gt;According to &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/hh156509.aspx&quot;&gt;msdn&lt;/a&gt;: “A type provider is a component that provides types, properties and methods” thanks Sherlock :D I hope it got better but I got bored … so I moved on to other sources.&lt;/p&gt;

&lt;p&gt;Like this paper: &lt;a href=&quot;http://research.microsoft.com/pubs/173076/information-rich-themes-v4.pdf&quot;&gt;Strongly-Typed Language Support for InternetScale Information Sources&lt;/a&gt;, and that has better info,&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“A type provider is a compile-time component that […] provides two things to the host compiler/tooling:&lt;/p&gt;

  &lt;ol&gt;
    &lt;li&gt;A provided component signature,… that is computed &amp;gt;&lt;strong&gt;on-demand&lt;/strong&gt; as needed by the compiler&lt;/li&gt;
    &lt;li&gt;A provided component implementation of the component signature.  This is given by either an actual .NET assembly that implements the component signature (the generative model for the provided types), or, a pair of erasure  functions giving  representation  types  and  representation expressions for the provided types and provided methods respectively (the erasure model for the provided types).&lt;/li&gt;
  &lt;/ol&gt;

  &lt;p&gt;[…]Essentially, a type provider is an adapter component that reads schematized data and services and transforms them into types in the target programming language. […]&lt;/p&gt;

  &lt;p&gt;A type provider does not necessarily contain any types itself; rather, it is a component for generating descriptions of types, methods and their implementations. A type provider is thus a form of compile-time meta-programming, a compiler plugin with access to the external world that augments the set of types that are known to the type-checker and compiler.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I found this significantly more informative. I hope you too :)
One thing to note here (I made it bold and all) is the “on demand” meaning that (steals again from the paper) “the provided type space can be very large or even infinite.”&lt;/p&gt;

&lt;p&gt;The other thing I found interesting is that you can implement a component by generation or erasure. The erasure bit , as far as I understand, is that the type looks like a normal type at compile time, but during runtime it’s erased to a common type.  So there is less overhead.&lt;/p&gt;

&lt;p&gt;I am sure you have seen examples of usage of type providers, I particularly like the csv one&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;  &lt;span class=&quot;p&quot;&gt;[&amp;lt;&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Literal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;]&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;..&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;IrelandProgrammingLanguages.csv&quot;&lt;/span&gt;  
  &lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Languages&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;CsvProvider&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Languages&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Load&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;FileStream&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;FileMode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Open&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;languageCount&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Seq&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;toList&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Rows&lt;/span&gt;
                        &lt;span class=&quot;p&quot;&gt;|&amp;gt;&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;map&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;splitAndCount&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;``What programming language(s) are you using in production?``&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;     &lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;The first line is just a path, in the second line we create a type using the CsvType provider passing the path as a parameter. To load the data from the csv we call Load. Finally the last line is actually using the data provided, where one of the column names on the csv file is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;What programming language(s) are you using in production?&lt;/code&gt; .&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/pink-squirrel.jpg&quot; alt=&quot;pink squirrel...labs?&quot; /&gt;&lt;/p&gt;

&lt;p&gt;If you are into type providers, you need to know &lt;a href=&quot;http://www.pinksquirrellabs.com/&quot;&gt;Ross McSquirrel&lt;/a&gt;(I might have made up a better last name for him), check out his talk &lt;a href=&quot;https://skillsmatter.com/skillscasts/6126-where-no-type-has-gone-before&quot;&gt;about Ridiculous type providers &lt;/a&gt;(again I might have given the talk a new and hopefully better name :D).&lt;/p&gt;

&lt;p&gt;I was going to write about creating type providers, but &lt;a href=&quot;http://blog.mavnn.co.uk/type-providers-from-the-ground-up/&quot;&gt;this 2 part post&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/mavnn&quot;&gt;Michael Newton&lt;/a&gt; beat me to it (by about a year) :D and it’s worth checking it out to understand how this cool language feature works.&lt;/p&gt;
</description>
				<pubDate>Sun, 22 Feb 2015 19:44:00 +0000</pubDate>
				<link>http://roundcrisis.com/2015/02/22/Type-providers/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2015/02/22/Type-providers/</guid>
			</item>
		
			<item>
				<title>Creating a vm for Haskell development</title>
				<description>&lt;p&gt;It has been a while since I used any flavour of Linux as a development environment (so, apologies if I am showing something really obvious). Haskell development in Windows doesn’t seem to be the default :D (Haskell Platform installs and runs super well on Win7 and 8 BTW) but trying to learn in a non recommended environment is probably not a good idea. To that effect I am creating an Ubuntu vm to serve as a development environment for Haskell&lt;/p&gt;

&lt;p&gt;These are the steps I went through:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Install virtualBox&lt;/li&gt;
  &lt;li&gt;Used Vagrant to get a desktop Ubuntu (tho probably it would have been easier to just install from iso)&lt;/li&gt;
  &lt;li&gt;I started of with a 64bit machine but something went wrong along the lines (convoluted) and decided to start again&lt;/li&gt;
  &lt;li&gt;The machine was Ubuntu 12 I used Ubuntu Software updater to update to 14.04, the current version.&lt;/li&gt;
  &lt;li&gt;From there I could sudo apt-get all the way to install Haskell Platform this way , this installed ghci 7.6.3&lt;/li&gt;
  &lt;li&gt;I also installed &lt;a href=&quot;http://packages.ubuntu.com/trusty/leksah&quot;&gt;leksah&lt;/a&gt; as suggested by &lt;a href=&quot;https://twitter.com/bodil&quot;&gt;@bodil&lt;/a&gt;, thanks :D&lt;/li&gt;
  &lt;li&gt;When I tried to create a cabal sandbox I hit a problem, the update looked fine (ie no errors ) but the cabal version remained at 1.16 :(. To do a cabal update you have to call
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cabal update
cabal install Cabal cabal-install 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Thanks to &lt;a href=&quot;https://twitter.com/tailcallingdev&quot;&gt;@TailCallingDev&lt;/a&gt; (btw check out his blog, seriously), I had to add cabal to the path like this:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;in .profile&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
# set PATH so it includes cabal
if [ -d &quot;$HOME/.cabal/bin&quot; ] ; then
    PATH=&quot;$HOME/.cabal/bin:$PATH&quot;
fi

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Also the version of ghc I was on doesn’t play nice with cabal &amp;gt; 1.22 so after updating the path I had to call the &lt;em&gt;cabal install&lt;/em&gt; command this way:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cabal install cabal-install --constraint=&quot;cabal-install &amp;lt; 1.22&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The source of this cabal + ghc seems is better described &lt;a href=&quot;https://github.com/kazu-yamamoto/ghc-mod/wiki/InconsistentCabalVersions#ghc--710-1&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And then I called &lt;em&gt;leksah&lt;/em&gt; on the terminal and it worked!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://roundcrisis.com/images/leksah.jpg&quot; alt=&quot;leksah&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This is all for today, will update this post with a link to this VM hosted somewhere, as It might be useful to someone.&lt;/p&gt;

&lt;h2 id=&quot;another-day-another-pain&quot;&gt;Another Day, another pain&lt;/h2&gt;

&lt;p&gt;I couldn’t install &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glfw&lt;/code&gt; easily so I decided to create a new vm 😑&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;New vm was easy, got ubuntu 14.10 because it had the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glfw&lt;/code&gt; package (it seemed easier to do this than to build from source)&lt;/li&gt;
  &lt;li&gt;First thing I did was instal &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libglfw&lt;/code&gt; and it seemed to work&lt;/li&gt;
  &lt;li&gt;My resolution was 640x480, not fun -&amp;gt; resolution problem &lt;a href=&quot;http://www.linuxbsdos.com/2014/10/31/solutions-for-low-screen-resolution-in-ubuntu-14-0414-10-and-virtualbox/&quot;&gt;Solutions for low screen resolution in Ubuntu 14.04/14.10 and VirtualBox&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glfw&lt;/code&gt; installed yay!&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt-get install libglfw3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It would have been cool to have a some sort of way to know that the installation worked&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;for FTGL I had to use&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt-get install libftgl2 

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;It did work&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Installed leksah&lt;/li&gt;
  &lt;li&gt;Ran leksah and ran the welcome and I get a message “cabal does not exist”, not sure what to do here&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Installed sublime and SublimeREPL and this just worked, at this point I wanted to get something working&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Build the code I got from the &lt;a href=&quot;https://github.com/elisehuard/game-in-haskell&quot;&gt;repo&lt;/a&gt; and it failed with cabal dependencies because I had an old version of ghc, the way to solve the problem is &lt;a href=&quot;https://github.com/elisehuard/game-in-haskell/issues/2&quot;&gt;here&lt;/a&gt; so, the good news is that there is a reliable source to where to get binaries :D&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After doing this I was able to build the project however I can only run a few of the projects, some fail requesting that I enable 3d acceleration, however when I do this, the vm doesn’t work well.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Many people have mentioned &lt;a href=&quot;https://halcyon.sh/&quot;&gt;Halcyon&lt;/a&gt; it’s a way to handle dependencies in Haskell projects in a saner way. My understanding is that it doesn’t require cabal or ghc to start, builds from source and keeps the binaries you need somewhere for you so that you have the same setup every time and you can share this with anyone that is working on that project. I think my understanding of this is a little incomplete so I recommend you have a look at it if you are interested.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;my feelings exactly:&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; lang=&quot;en&quot;&gt;&lt;p&gt;escaping cabal hell is like untangling a ball of yarn &lt;a href=&quot;http://t.co/7EEnAQPxWR&quot;&gt;pic.twitter.com/7EEnAQPxWR&lt;/a&gt;&lt;/p&gt;&amp;mdash; Kat Chuang, PhD (@katychuang) &lt;a href=&quot;https://twitter.com/katychuang/status/563891948013223937&quot;&gt;February 7, 2015&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Comments, questions, feedback as always welcome.&lt;/p&gt;

</description>
				<pubDate>Thu, 19 Feb 2015 11:44:00 +0000</pubDate>
				<link>http://roundcrisis.com/2015/02/19/Creating-a-Ubuntu-vm-for-Haskell-dev/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2015/02/19/Creating-a-Ubuntu-vm-for-Haskell-dev/</guid>
			</item>
		
			<item>
				<title>What is a type system</title>
				<description>&lt;p&gt;Curiosity killed the cat, good thing cats have 9 lives…&lt;/p&gt;

&lt;p&gt;I don’t know you, but after using a few programming languages I have too many questions about type systems, some that come to mind:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What is a type system?&lt;/li&gt;
  &lt;li&gt;What is a type?&lt;/li&gt;
  &lt;li&gt;Do we need a type system?&lt;/li&gt;
  &lt;li&gt;When do we not need one?&lt;/li&gt;
  &lt;li&gt;What is the relation between type systems and property testing? or is there one?&lt;/li&gt;
  &lt;li&gt;Why is category theory so important in advanced type systems? (I have intuition but no concrete answers yet)&lt;/li&gt;
  &lt;li&gt;Are there pure definitions and implementations for the different types of types systems?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Probably some of those questions make no sense, at least, until I understand the answers.&lt;/p&gt;

&lt;p&gt;Thankfully, I was not alone in asking myself questions. For example &lt;a href=&quot;http://lambda-the-ultimate.org/node/412&quot;&gt;this question&lt;/a&gt; seems to spiral into no concrete answers.&lt;/p&gt;

&lt;p&gt;If you are looking for a post about  Strong vs Weak typing and Static vs dynamic typing articles I found a this one (there are many more)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://cdsmith.wordpress.com/2011/01/09/an-old-article-i-wrote/&quot;&gt;What To Know Before Debating Type Systems&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anyway I am starting off with the first question.&lt;/p&gt;

&lt;h3 id=&quot;what-is-a-type-system&quot;&gt;What is a type system?&lt;/h3&gt;

&lt;p&gt;According to&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Type_system#cite_note-FOOTNOTECardelli20041-2&quot;&gt;&lt;strong&gt;Wikipedia&lt;/strong&gt;&lt;/a&gt; In programming languages, a type system is a collection of rules that assign a property called a type to the various construct—​such as variables, expressions, functions or modules—​that a computer program is composed of.&lt;a href=&quot;http://www.cis.upenn.edu/~bcpierce/tapl/&quot;&gt;1&lt;/a&gt; The main purpose of a type system is to reduce bugs in computer programs&lt;a href=&quot;http://lucacardelli.name/Papers/TypeSystems.pdf&quot;&gt;2&lt;/a&gt; by defining interfaces between different parts of a computer program, and then checking that the parts have been connected in a consistent way. This checking can happen statically (at compile time), dynamically (at run time), or it can happen as a combination of static and dynamic checking. Type systems have other purposes as well, such as enabling certain compiler optimizations, allowing for multiple dispatch, providing a form of documentation, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ok, a bit generic, but helpful:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;There are rules&lt;/li&gt;
  &lt;li&gt;There are constructs&lt;/li&gt;
  &lt;li&gt;A program is composed by the aforementioned constructs&lt;/li&gt;
  &lt;li&gt;type systems help prevent errors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Other definitions I found online are as simple as:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A type is a label (can’t remember who said this)&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;“…A type is simply a name for a collection of related values just like a food group, it’s a name for a collection of foods with related properties
and a type is a name for a collection of values that we code with
that have similar properties” From Erik Meijer latest course on &lt;a href=&quot;https://courses.edx.org/courses/DelftX/FP101x/3T2014/info&quot;&gt;functional programming (Lecture 2 part 1)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.cis.upenn.edu/~bcpierce/tapl/index.html&quot;&gt;&lt;strong&gt;Benjamin C Pierce from TAPL&lt;/strong&gt;&lt;/a&gt; A type system is a tractable syntactic method for proving the absence of certain program behaviours by classifying phrases according to the kinds of values they compute.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a more helpful&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Tractable and syntactic &lt;strong&gt;method&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;absence of behaviours&lt;/strong&gt; (perhaps runtime errors)&lt;/li&gt;
  &lt;li&gt;Classification of phrases according to kind of values&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As I was thinking a little about this I found this &lt;strong&gt;gem&lt;/strong&gt; of a post:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://twitter.com/mrb_bk&quot;&gt;@mrb_bk&lt;/a&gt; wondered &lt;a href=&quot;http://michaelrbernste.in/2014/02/17/what-is-a-type-system-for.html&quot;&gt;What is a type system for&lt;/a&gt; This is totally worth the read. The post is based on studying TAPL. The TL;DR of the post goes like:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&quot;The most basic property of this type system or any other is safety (also
called soundness): well-typed terms do not &apos;go wrong.&apos;&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;What does “go wrong” means in this context?&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&quot;...it means reaching a &apos;stuck state&apos; that is not designated as a 
final value but where the evaluation rules do not tell us what to do next.&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In this context thinking of getting stuck as runtime errors is acceptable.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&quot;What we want to know, then, is that well-typed terms do not get stuck. We 
show this in two steps, commonly known as the progress and preservation 
theorems.&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The theorem definition and explanation is in the post, but I had to stop and thing about:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&quot;Safety = Progress + Preservation&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That is where I am going to leave this for today.&lt;/p&gt;

&lt;h3 id=&quot;worth-reading&quot;&gt;Worth Reading&lt;/h3&gt;

&lt;p&gt;As a novice in this area I found The paper by [Luca Cardelli][1] is a good read .&lt;/p&gt;

&lt;p&gt;Also &lt;a href=&quot;http://www.cis.upenn.edu/~bcpierce/papers/tng-lics2003-slides.pdf&quot;&gt;this pdf&lt;/a&gt; by &lt;a href=&quot;http://www.cis.upenn.edu/~bcpierce/&quot;&gt;Benjamin C. Pierce&lt;/a&gt; contains an overview of the available literature up until year 2003.&lt;/p&gt;

&lt;h3 id=&quot;some-other-related-reads&quot;&gt;Some other related reads&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://blogs.msdn.com/b/ericlippert/archive/2012/10/15/is-c-a-strongly-typed-or-a-weakly-typed-language.aspx&quot;&gt;Is C# a strongly typed or a weakly typed language? Eric Lipert’s blog&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=SWTWkYbcWU0&quot;&gt;Types systems- The good, the bad and the ugly&lt;/a&gt; A highly controversial talk about type systems that I enjoyed greatly, I hope conferences keep bringing talks that people have string feelings about.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;references&quot;&gt;References&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.cs.cmu.edu/~rwh/misc/tspl.pdf&quot;&gt;Type Systems for Programming Languages&lt;/a&gt; It’s a scary one&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.cs.cmu.edu/~rwh/plbook/book.pdf&quot;&gt;Practical Foundations for Programming Languages&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;feedback-other-resources&quot;&gt;Feedback other resources?&lt;/h2&gt;

&lt;p&gt;Do you know of other type system resources I should look into? 
Do you know of any other links I should look into?
Any comments? Let me know&lt;/p&gt;

&lt;h1 id=&quot;happy-new-year&quot;&gt;Happy new year!!&lt;/h1&gt;
</description>
				<pubDate>Wed, 31 Dec 2014 11:44:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/12/31/Type-systems/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/12/31/Type-systems/</guid>
			</item>
		
			<item>
				<title>FSharp and games in celebration times</title>
				<description>&lt;p&gt;The title of this post was a bit obscure as I didn’t really know what I was going to do for this entry on the &lt;a href=&quot;https://sergeytihon.wordpress.com/2014/11/24/f-advent-calendar-in-english-2014/&quot;&gt;#FsAdvent Calendar&lt;/a&gt;
Make sure you check out the previous and future entries in the series.&lt;/p&gt;

&lt;p&gt;For today, I thought we would celebrate with sound, in the Key of F# :D&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/3rYHhEu.jpg&quot; alt=&quot;meowmoew&quot; /&gt; src &lt;a href=&quot;http://www.reddit.com/r/aww/comments/2p2r01/our_indoor_cat_moved_from_a_gray_apartment_block/&quot;&gt;reddit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To that effect we can use OpenAl. To be honest this was a little more difficult to do that it needed to be, mostly because there was plenty of playing around with values to make sure stuff worked and sounded somewhat ok.&lt;/p&gt;

&lt;p&gt;The good thing about this sample is that you can run the sample either via a console app or in F# interactive (make sure you change the path to your location of OpenAl, you should get the NuGet package called OpenTKWithOpenAL) Disclaimer this is the first time I play with vanilla OpenAl (it will probably show).&lt;/p&gt;

&lt;h4 id=&quot;birds-eye&quot;&gt;Bird’s eye&lt;/h4&gt;

&lt;p&gt;The end goal is to transform something like this &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;F# F# G# F# F# D# D# D# F# F# G# F# F# D# D# D#&quot;&lt;/code&gt; into a collection of numbers that represent a wave, then we can feed that into OpenAl for it to play. 
The graph below represent one note (generated with &lt;a href=&quot;http://fsharp.github.io/FSharp.Charting/&quot;&gt;F# Charting&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.roundcrisis.com/images/waves.png&quot; alt=&quot;waves&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;step-by-step&quot;&gt;Step by Step&lt;/h4&gt;

&lt;p&gt;To start off you need a context, a buffer and a source, these are OpenAl requirements.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;&lt;span class=&quot;k&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;audioContext&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;AudioContext&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;buffer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;AL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;GenBuffer&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;audioSourceIndex&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;AL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;GenSource&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Then we need to get something to play, if our input is a string with the whole song then we can do something like this to get the frequencies calculated for each note&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;toFrequency&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;note&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;note&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;ToUpper&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;with&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;C&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt;  &lt;span class=&quot;mi&quot;&gt;261&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;626&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;C#&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;277&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;183&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;D&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;293&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;665&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;D#&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;311&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;127&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;E&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;329&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;628&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;F&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;349&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;228&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;F#&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;369&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;994&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;G&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;391&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;995&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;G#&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;415&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;305&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;A&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;440&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;A#&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;466&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;164&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;B&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;493&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;883&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;|_&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt;  &lt;span class=&quot;mi&quot;&gt;369&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;994&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;(*Defaults to F# because xMas ;) *)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;I was thinking we could have a discriminated union here, however this seemed to serve the purpose of this example in a simple and concise way.&lt;/p&gt;

&lt;p&gt;You might be wondering how I came to those numbers, well turns up the internet is great for this sort of thing, they can be found &lt;a href=&quot;http://liutaiomottola.com/formulae/freqtab.htm&quot;&gt;here&lt;/a&gt;. Tried a few octaves and these were the ones I preferred.&lt;/p&gt;

&lt;p&gt;Then, with some research into the &lt;a href=&quot;http://www.opentk.com/node/209&quot;&gt;OpenAl docs&lt;/a&gt; and a bit of reading into &lt;a href=&quot;https://github.com/AdamsLair/duality&quot;&gt;Duality’s source code&lt;/a&gt; this is how we can convert those frequencies into data that can be played.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;samplingFrequency&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;44100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;    
    
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;generateNote&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;freq&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;float32&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;noteLength&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;seqLength&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;  &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;samplingFrequency&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;noteLength&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;nn&quot;&gt;Seq&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;init&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;seqLength&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;fun&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; 
                    &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;PI&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;freq&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;samplingFrequency&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;
                        &lt;span class=&quot;p&quot;&gt;|&amp;gt;&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Sin&lt;/span&gt;                        
                        &lt;span class=&quot;p&quot;&gt;|&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;  &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Int16&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;MaxValue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                        &lt;span class=&quot;p&quot;&gt;|&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;int16&lt;/span&gt;
                        &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;As mentioned in the first section, we are using 44100 as the base frequency, to simplify things the note length is set to half a second, however this is something that could be easily changed to support different lengths.
Then we are creating a &lt;strong&gt;sequence&lt;/strong&gt; that is half the frequency, and the reason for that is this is the number of samples required. Each item in that sequence is part of a curve that represents the sound for that given note (the freq parameter).&lt;/p&gt;

&lt;p&gt;With those two key functions you can create the complete collection. In this case Seq.collect really shines, it is perfectly suited to what we need to do:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Combines the given enumeration-of-enumerations as a single concatenated enumeration.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;        &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;freqToWaves&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;toFrequency&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;generateNote&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;notes&lt;/span&gt;                        
                        &lt;span class=&quot;p&quot;&gt;|&amp;gt;&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Seq&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;collect&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;freqToWaves&lt;/span&gt;                        
                        &lt;span class=&quot;p&quot;&gt;|&amp;gt;&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ofSeq&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Finally we use OpenAl to actually play the wave:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;	&lt;span class=&quot;nn&quot;&gt;AL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;BufferData&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;ALFormat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Mono16&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Length&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;samplingFrequency&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;nn&quot;&gt;AL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Source&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;audioSourceIndex&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;ALSourcei&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;nn&quot;&gt;AL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;SourcePlay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;audioSourceIndex&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;&lt;small&gt;There is a mystery song you can play (in the key of F#)&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;You can see it all together in this sample &lt;a href=&quot;https://gist.github.com/Andrea/9212fa6249545d3987a9&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;summary&quot;&gt;Summary&lt;/h3&gt;

&lt;p&gt;Try it, you will probably love it. Another little toy to play with during the jolly season.&lt;/p&gt;

&lt;p&gt;Thanks to Sergey and the F# community for this cool &lt;a href=&quot;https://sergeytihon.wordpress.com/2014/11/24/f-advent-calendar-in-english-2014/&quot;&gt;FsAdvent&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Also thanks to everyone (yes you, you rock!) for a truly amazing year.&lt;/p&gt;

&lt;p&gt;The gif below seems completely unsuitable but you are here already :)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.gifbin.com/bin/052011/1305562847_skiing-ostrich.gif&quot; /&gt;&lt;/p&gt;
</description>
				<pubDate>Fri, 12 Dec 2014 11:44:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/12/12/FSharp_and_games_in_celebration_times/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/12/12/FSharp_and_games_in_celebration_times/</guid>
			</item>
		
			<item>
				<title>FAKE, What is it and Why you should check it out</title>
				<description>&lt;p&gt;I have mentioned FAKE (aka F# Make) in pretty much all the talks I have done lately, however I never explained in detail some of the key aspects of this amazing build DSL.&lt;/p&gt;

&lt;p&gt;FAKE is a build automation system with capabilities which are similar to make and rake. 
The DSL includes support for:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;building with MsBuild + xbuild&lt;/li&gt;
  &lt;li&gt;Testing with nUnit, xunit,  MSpec&lt;/li&gt;
  &lt;li&gt;Creating nuget packages&lt;/li&gt;
  &lt;li&gt;Ziping resulting files&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://fsharp.github.io/FAKE/apidocs/index.html&quot;&gt;More!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;good-to-know&quot;&gt;Good to know&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;It’s mature. I want my build scripts to be reliable and easy to change, if this was a  toy project by someone I would be a little hesitant in recommending, however with over 4 years in development, FAKE is a mature project.&lt;/li&gt;
  &lt;li&gt;Builds for .net and mono, it’s cross platform. (disclaimer I don’t use mono in production so I haven’t felt any pain on that) However I some people &lt;a href=&quot;http://youtu.be/Awl4vGo7Yj0?t=14m52s&quot;&gt;do&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Builds C# projects too. It might be obvious to some, but FAKE builds C#, VB and F# projects :D.&lt;/li&gt;
  &lt;li&gt;No need to know F# to use it. As much as I like F#, some might consider the language a barrier, I have shown to more than one non F# developer FAKE scripts and they understand what is going on. There is a real benefit on having a build system built on a strongly typed language. Also check out a really good article called &lt;a href=&quot;http://www.ilker.de/fake-everywhere.html&quot;&gt;FAKE Everywhere&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Integrates with CI Servers. The integrations I know of are TeamCity, MyGet and Appveyor. We use both &lt;a href=&quot;http://fsharp.github.io/FAKE/teamcity.html&quot;&gt;TC&lt;/a&gt; and MyGet and they work nicely.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;when-do-we-use-it&quot;&gt;When do we use it&lt;/h3&gt;

&lt;p&gt;From the very beginning we have been using &lt;a href=&quot;https://www.jetbrains.com/teamcity/&quot;&gt;TeamCity&lt;/a&gt; as our CI server for a long while, however having one click builds is really powerful.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Debbuging. We have about 20 different solutions contributing to making the game we work on a reality, sometimes, when something go wrong we need to debug certain aspect of the game, as the game runs, the thing is, building and copying the dlls in the correct places can be error prone, we avoid that by building with FAKE and copying to a given path automatically, all with F# and FAKE&lt;/li&gt;
  &lt;li&gt;Different targets. x86, x64 builds as well as custom targets (for example we have one for &lt;a href=&quot;http://store.steampowered.com/app/310850/&quot;&gt;Steam(the PC games store)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Deployment. We have to remove certain content and package the game with just the bits needed to run, this requires some custom removing and adding of things at the right time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A great way to learn is by checking out some OSS projects:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fsharp/FsCheck/blob/master/build.fsx&quot;&gt;FsCheck&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/octokit/octokit.net/blob/master/build.fsx&quot;&gt;OctoKit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;summary&quot;&gt;Summary&lt;/h3&gt;

&lt;p&gt;Try it, you will probably love it.&lt;/p&gt;

&lt;h3 id=&quot;resources&quot;&gt;Resources&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://fsharp.github.io/FAKE/gettingstarted.html&quot;&gt;Fake Docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ilker.de/fake-everywhere.html&quot;&gt;FAKE Everywhere&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Tue, 09 Dec 2014 11:44:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/12/09/FAKE-fsharp-make-what-is-it-why-you-should-use-it/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/12/09/FAKE-fsharp-make-what-is-it-why-you-should-use-it/</guid>
			</item>
		
			<item>
				<title>NDC London slides</title>
				<description>&lt;p&gt;You can find my &lt;a href=&quot;http://roundcrisis.com/presentations/fsharp_this_aint_a_game/index.html&quot;&gt;slides&lt;/a&gt; and &lt;a href=&quot;http://www.ndcvideos.com/#/app/video/3181&quot;&gt;Video&lt;/a&gt; for NDC London.&lt;/p&gt;

</description>
				<pubDate>Mon, 24 Nov 2014 11:44:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/11/24/Presentations/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/11/24/Presentations/</guid>
			</item>
		
			<item>
				<title>CodeMesh braindump, notes</title>
				<description>&lt;p&gt;I took some notes during CodeMesh a few weeks ago, and here they are. There are a few good talks that I couldn’t attend that are totally worth it, check them out when their videos become available.&lt;/p&gt;

&lt;p&gt;Last year, CodeMesh showed me a lot of what I felt I was missing. This year was also quite amazing, the talks and people made it totally worth it. These are some notes I took during the talks, not sure they would help anyone, you never know.&lt;/p&gt;

&lt;h2 id=&quot;quickcheck-tutorial&quot;&gt;QuickCheck tutorial&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;shrinking, find hints in shrinks. Mostly deterministic to help you find  hints fast&lt;/li&gt;
  &lt;li&gt;when comparing you need to find the simplest thing to compare to&lt;/li&gt;
  &lt;li&gt;Stats help you check if the calls make sense&lt;/li&gt;
  &lt;li&gt;There are pre and post conditions&lt;/li&gt;
  &lt;li&gt;generally you discover many bugs with one property&lt;/li&gt;
  &lt;li&gt;Race condition -&amp;gt; makes calls in orders humans wouldnt do it because it doesnt make sense to us&lt;/li&gt;
  &lt;li&gt;quick check CI&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;idris-tutorial&quot;&gt;Idris tutorial&lt;/h2&gt;

&lt;p&gt;Idris is a general purpose pure functional programming language with dependent types. Dependent types allow types to be predicated on values, meaning that some aspects of a program’s behaviour can be specified precisely in the type. It is compiled, with eager evaluation. Its features are influenced by Haskell and ML.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;pacman ready&lt;/li&gt;
  &lt;li&gt;Vim or Emacs&lt;/li&gt;
  &lt;li&gt;think of proofs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is hard to explain in these lines what the experience was like. Writing Idris was more like doing Maths or Algebra that it was to write code, I wold say that is something you want in some cases.
You can find windows binaries &lt;a href=&quot;&quot;&gt;here&lt;/a&gt;
It felt like the code needed to balance itself. The editor environment was a huge help as it helped reduce statements.&lt;/p&gt;

&lt;h2 id=&quot;keynote-jessica-kerr-and-dan-north&quot;&gt;Keynote: Jessica Kerr and Dan North&lt;/h2&gt;

&lt;p&gt;Great keynote that made us all think about the systems we write, about all the concerns we need to be aware of.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;estimation by range , the bigger the range the bigger the unknowns&lt;/li&gt;
  &lt;li&gt;introduce research as part of all sprints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not all of us build software with a narrow specific focus&lt;/p&gt;

&lt;h2 id=&quot;gamedev-grade-debugging---leszek-godlewski&quot;&gt;Gamedev-grade Debugging - Leszek Godlewski&lt;/h2&gt;

&lt;p&gt;This session felt like therapy, all the crazy bugs that are gamedev specific, exposed&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Three types of bugs: temporal, graphical, content.&lt;/li&gt;
  &lt;li&gt;sometimes terrible hacks,&lt;/li&gt;
  &lt;li&gt;Domain specific debuggers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;He also recommended and missed Valgrind. The Valgrind tool suite provides a number of debugging and profiling tools that help you make your programs faster and more correct. The most popular of these tools is called Memcheck. It can detect many memory-related errors that are common in C and C++ programs and that can lead to crashes and unpredictable behaviour.&lt;/p&gt;

&lt;h2 id=&quot;yan-cui-neo4j&quot;&gt;Yan Cui, Neo4J&lt;/h2&gt;

&lt;p&gt;Very cool tool about the complexity of their game and economy and how they are using this graph database to curb it.
I am not sure we can/should use this because we don’t have the same scaling issues, but great to see none the less.
Awesome style of presentation too.&lt;/p&gt;

&lt;h2 id=&quot;behaving-in-the-21st-century---ai-productivity-through-tooling---emil-johansen&quot;&gt;Behaving in the 21st Century - AI Productivity through Tooling - Emil Johansen&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://www.codemesh.io/static/upload/media/1415724623396237behavinginthe21stcentury.pdf&quot;&gt;Slides&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Emil presented a tool he built for Behaviour Trees, the tool generates behaviour code. I really liked the demo he showeed
My main take on it was that I am glad to see tools like this&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;BTs as iterative tools&lt;/li&gt;
  &lt;li&gt;code generation&lt;/li&gt;
  &lt;li&gt;A different workflow (to ours in Duality)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;the-tools-that-shape-us&quot;&gt;The tools that shape us&lt;/h2&gt;

&lt;p&gt;I’m going to do this the other way around and tell you how was it for me to prepare this talk, because …coverage and correctness (and as a test).&lt;/p&gt;

&lt;p&gt;The talk was about highlighting the importance of tools, and how important it is for us to make sure we provide good tools for others to work with. 
As developers our tools are also important:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Languages&lt;/li&gt;
  &lt;li&gt;Ecosystem&lt;/li&gt;
  &lt;li&gt;Communities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tools model the way we think, and so it might be worth trying out something totally different just to see what though process it bring us.&lt;/p&gt;

&lt;h2 id=&quot;alex-champandard&quot;&gt;Alex Champandard&lt;/h2&gt;

&lt;p&gt;Talked about AI on the GPU. Great talk and presentation. Not only content but style (impeccable)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;OpenCL and what we can do&lt;/li&gt;
  &lt;li&gt;can do A*&lt;/li&gt;
  &lt;li&gt;Separate GPU for processing and rendering&lt;/li&gt;
  &lt;li&gt;Sycl&lt;/li&gt;
  &lt;li&gt;A lot of cool ideas perhaps not ready for production yet.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;ramsey-and-tims&quot;&gt;Ramsey and Tims&lt;/h2&gt;

&lt;p&gt;This is the second time I see this presentation however, it was totally different than the last time I saw it&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Simplify game development by using a more terse language (I can relate 😄 )&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/arcadia-unity/Arcadia&quot;&gt;Arcadia&lt;/a&gt;, using CLR implementation of Clojure on top of Unity.&lt;/li&gt;
  &lt;li&gt;REPL as a way to game design&lt;/li&gt;
  &lt;li&gt;extra bonus points because they showed a game with cats!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;keynote-chad-fowler&quot;&gt;Keynote: Chad Fowler&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;The theme of the keynote was tiny&lt;/li&gt;
  &lt;li&gt;Big tends to fail&lt;/li&gt;
  &lt;li&gt;Some of his experience with failure&lt;/li&gt;
  &lt;li&gt;Where are we now.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Left me thinking, which is the purpose of all keynotes.&lt;/p&gt;

&lt;h2 id=&quot;typed-clojure-in-practice---ambrose-bonnaire-sergeant&quot;&gt;Typed Clojure in Practice - Ambrose Bonnaire-Sergeant&lt;/h2&gt;

&lt;p&gt;I was really curious about this because I imagined it would be hard to add typing to a lisp, as a noob, that only did the equivalent of a hello world in clojure.
I have to add, Ambrose passion and enthusiasm for this project is contagious&lt;/p&gt;

&lt;h2 id=&quot;functional-patterns-in-domain-driven-design-applied-to-financial-models---debasish-ghosh&quot;&gt;Functional Patterns in Domain Driven Design applied to Financial Models - Debasish Ghosh&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Modelling in financial&lt;/li&gt;
  &lt;li&gt;Introduced some algebra at a nice pace, logically.&lt;/li&gt;
  &lt;li&gt;Financial with cool examples&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;naming-things---ian-barber&quot;&gt;Naming things - Ian Barber&lt;/h2&gt;

&lt;p&gt;A lot of stuff to think, but didn’t take notes, worth a watch when it comes online.&lt;/p&gt;

&lt;h2 id=&quot;gluing-things-together-with-haskell---neil-mitchell&quot;&gt;Gluing Things Together with Haskell - Neil Mitchell&lt;/h2&gt;

&lt;p&gt;Really liked checking out Shake and Bake, and how people are deplying things in Haskell. Great presenter too.&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;As you see, my notes got sparse towards the end, but … I’ll learn to take better notes hopefully. Again, one of the most interesting things about conferences is that, you get to talk to a lot of people thinking similar or totally different thoughts to yours about similar topics. Left inspired and looking forward to next year!&lt;/p&gt;
</description>
				<pubDate>Mon, 24 Nov 2014 11:44:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/11/24/Codemesh-Notes/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/11/24/Codemesh-Notes/</guid>
			</item>
		
			<item>
				<title>Converting a small game from C# to F# part 2</title>
				<description>&lt;p&gt;This post could also be called:One step forward, two steps backwards.&lt;/p&gt;

&lt;p&gt;I thought I should rewind a little bit, and have an overview of the game before we continue.&lt;/p&gt;

&lt;p&gt;The C# version of the game has 9 files and each, each has a class where (generally a component is defined), I decided to change this for the F# version of the game, tho I am not sure type per file is an idiom of F# or not. (Comments on this, really welcome)&lt;/p&gt;

&lt;p&gt;The idea of doing this port is to show the progression of the code from C# to F# to (hopefully) better F# so if you have some comments on how to improve, they are super welcome, particularly commenting with code samples (or PRs). The whole game (in C# and F# and the editor ) is all available from &lt;a href=&quot;https://github.com/Andrea/FSharpAndGamesBreakout&quot;&gt;this github repo&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;about-duality&quot;&gt;About Duality&lt;/h3&gt;

&lt;p&gt;The engine, Duality, is a C# engine that follows some of the C# idioms. It is not in our immediate plans to make a wrapper to make the engine more f# friendly, I find don’t find it too hard to work with the two languages, however it might be because I am familiar with it enough to not feel much of the pain.&lt;/p&gt;

&lt;p&gt;These are bits of code we will se over and over&lt;/p&gt;

&lt;h4 id=&quot;is-it-a-bit-humid-here&quot;&gt;Is it a bit humid here?&lt;/h4&gt;

&lt;p&gt;Declaring a component. Needs to be serializable, and inherit from component&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;&lt;span class=&quot;p&quot;&gt;[&amp;lt;&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Serializable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;LifeMeter&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; 
    &lt;span class=&quot;k&quot;&gt;inherit&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Component&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;  &lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Most of these components will need to implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ICmpUpdatable&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ICmpInitializable&lt;/code&gt;&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;    &lt;span class=&quot;k&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ICmpUpdatable&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;with&lt;/span&gt; 
        &lt;span class=&quot;k&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;OnUpdate&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;//Do some componenty stuff here&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Some components need to be able to detect collisions, on those situations you need to implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ICmpCollisionListener&lt;/code&gt;&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;    &lt;span class=&quot;k&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ICmpCollisionListener&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;with&lt;/span&gt; 
        &lt;span class=&quot;k&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;OnCollisionBegin&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(_,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)=&lt;/span&gt;
			&lt;span class=&quot;c1&quot;&gt;// Do collision stuff here (or somewhere else)           &lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;OnCollisionEnd&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(_,_)=&lt;/span&gt;  
            &lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;OnCollisionSolve&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(_,_)=&lt;/span&gt;  
            &lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;I don’t think I mind the interface implementations.&lt;/p&gt;

&lt;p&gt;Then there is the find the (not null) component. In the example below we are looking for a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TextRenderer&lt;/code&gt; within the object. In the None matching, it is more likely you want to log and editor warning, rather than do nothing&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;            &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tr&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;OptionComponent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;TextRenderer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;GameObj&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tr&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;with&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;None&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Some&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tr&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;SourceText&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sprintf&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Score: %i&quot;&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;score&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;What does all of this mean? well I though it might be useful to summarize what I have seen so far.  I’ll update this post with more if I think of any other repeating pattern.&lt;/p&gt;

&lt;p&gt;Until the next time :D&lt;/p&gt;
</description>
				<pubDate>Tue, 30 Sep 2014 11:44:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/09/30/Converting-a-small-game-from-Csharp-to-Fsharp-p2/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/09/30/Converting-a-small-game-from-Csharp-to-Fsharp-p2/</guid>
			</item>
		
			<item>
				<title>Converting a small game from C# to F# part 1</title>
				<description>&lt;p&gt;As part of the workshop I am preparing to run on a bunch of places in North America, I created a small clone of Breakout and just ported it to F#. I am going to be explaining a little about how the engine works and that will be intertwined with an (hopefully) fun intro to F#.&lt;/p&gt;

&lt;p&gt;Duality is&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A 2D game engine that comes with an extensible visual editor.&lt;/li&gt;
  &lt;li&gt;OSS (MIT license).&lt;/li&gt;
  &lt;li&gt;Written on C# and OpenTK.&lt;/li&gt;
  &lt;li&gt;the architecture is built around a plugin system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Follow the link for Adam’s &lt;a href=&quot;https://github.com/AdamsLair/duality/wiki/Getting-Started&quot;&gt;getting started&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the &lt;a href=&quot;http://www.roundcrisis.com/2014/09/08/Duality-and-fsharp/&quot;&gt;previous post&lt;/a&gt; I showed how to create components in Duality, so I started of with one the simplest component, ScoreComponent, that component looked like this&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c#&quot; data-lang=&quot;c#&quot;&gt;    &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Serializable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ScoreComponent&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Component&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ICmpUpdatable&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_score&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Score&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_score&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

        &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;IncreaseScore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;amount&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;Score&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;amount&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

        &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;OnUpdate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;textRenderer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;GameObj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GetComponent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TextRenderer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;();&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;textRenderer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; 
                &lt;span class=&quot;n&quot;&gt;textRenderer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SourceText&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Score: &quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Score&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;When converting to F# it looks pretty similar, at least initially&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;&lt;span class=&quot;p&quot;&gt;[&amp;lt;&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Serializable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ScoreComponentF&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; 
    &lt;span class=&quot;k&quot;&gt;inherit&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Component&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;mutable&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;score&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Score&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;score&lt;/span&gt;
    
    &lt;span class=&quot;k&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;IncreaseScore&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;amount&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;score&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;score&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;amount&lt;/span&gt;        
    
    &lt;span class=&quot;k&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ICmpUpdatable&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;with&lt;/span&gt; 
        &lt;span class=&quot;k&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;OnUpdate&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;textRenderer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;GameObj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;GetComponent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;TextRenderer&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;()&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;textRenderer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;then&lt;/span&gt;
                &lt;span class=&quot;n&quot;&gt;textRenderer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;SourceText&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sprintf&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Score: %i&quot;&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Score&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;The method &lt;strong&gt;OnUpdate&lt;/strong&gt; could be improved. A first iteration would look like:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;    &lt;span class=&quot;k&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ICmpUpdatable&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;with&lt;/span&gt; 
        &lt;span class=&quot;k&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;OnUpdate&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;GameObj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;GetComponent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;TextRenderer&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;()&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;with&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;textRenderer&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;textRenderer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;SourceText&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sprintf&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Score: %i&quot;&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Score&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;This is nice but this pattern(?), do something if the component exist, is rather common and it would be nice to turn this into an option type.&lt;/p&gt;

&lt;p&gt;We will continue in the next post :D&lt;/p&gt;

&lt;p&gt;Fun and games FTW!!&lt;/p&gt;

&lt;p&gt;OT: Best of luck to all the people involved in Minecraft and this transition to Microsoft. I can empathise with where &lt;a href=&quot;http://twitter.com/notch&quot;&gt;@notch&lt;/a&gt; is coming from.&lt;/p&gt;
</description>
				<pubDate>Mon, 15 Sep 2014 11:44:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/09/15/Converting-a-small-game-from-Csharp-to-Fsharp/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/09/15/Converting-a-small-game-from-Csharp-to-Fsharp/</guid>
			</item>
		
			<item>
				<title>Writing Duality Components in FSharp</title>
				<description>&lt;p&gt;Duality is a 2D game engine with an extensible editor (If you follow my blog you’ll see it mention it a few times), I added F# Scripting support a good while ago but I haven’t been posting too much about it, I probably should change that.&lt;/p&gt;

&lt;p&gt;Scripting is not the only way to use F# on this engine, you can also create components with F# and it’s pretty simple.&lt;/p&gt;

&lt;p&gt;When you run Duality on a folder that has no Data, it creates a solution for plugins by default in Source/Code with two projects: CorePlugin and EditorPlugin. Open the solution and add a F# project. Once it’s created open the project properties and change the assembly name so that it ends with “core”&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/ygczgM7.png&quot; alt=&quot;EndInCore&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Add a reference to Duality.dll and OpenTk.dll (you will find this on the game folder, alternatively have nuget packages too in &lt;a href=&quot;https://www.myget.org/F/6416d9912a7c4d46bc983870fb440d25/&quot;&gt;MyGet&lt;/a&gt; )&lt;/li&gt;
  &lt;li&gt;Add a new file to the project, it must inherit from Core and read like this&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;&lt;span class=&quot;k&quot;&gt;open&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Duality&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;BreakoutFSharpCorePlugin&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; 
    &lt;span class=&quot;k&quot;&gt;inherit&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;CorePlugin&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Lastly if you want to F5 to launch the editor you can add the following to the end of Editor.csproj.user file (replace DualityEditor.exe locations )&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-xml&quot; data-lang=&quot;xml&quot;&gt;  &lt;span class=&quot;nt&quot;&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;PropertyGroup&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;Condition=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&apos;$(Configuration)|$(Platform)&apos; == &apos;Debug|AnyCPU&apos;&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;StartAction&amp;gt;&lt;/span&gt;Program&lt;span class=&quot;nt&quot;&gt;&amp;lt;/StartAction&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;StartProgram&amp;gt;&lt;/span&gt;Pathto\where\editor\is\DualityEditor.exe&lt;span class=&quot;nt&quot;&gt;&amp;lt;/StartProgram&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;StartWorkingDirectory&amp;gt;&lt;/span&gt;Pathto\where\editor\is&lt;span class=&quot;nt&quot;&gt;&amp;lt;/StartWorkingDirectory&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;PropertyGroup&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;Condition=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&apos;$(Configuration)|$(Platform)&apos; == &apos;Release|AnyCPU&apos;&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;StartAction&amp;gt;&lt;/span&gt;Program&lt;span class=&quot;nt&quot;&gt;&amp;lt;/StartAction&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;StartProgram&amp;gt;&lt;/span&gt;Path\to\DualityEditor.exe&lt;span class=&quot;nt&quot;&gt;&amp;lt;/StartProgram&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;StartWorkingDirectory&amp;gt;&lt;/span&gt;Path\to\where\the\game\is&lt;span class=&quot;nt&quot;&gt;&amp;lt;/StartWorkingDirectory&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;####Example
This is an example of a component&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;&lt;span class=&quot;k&quot;&gt;open&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Duality&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;open&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;System&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;[&amp;lt;&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Serializable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ScoreComponentF&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; 
    &lt;span class=&quot;k&quot;&gt;inherit&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Component&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;mutable&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;score&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Score&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;score&lt;/span&gt;
    
    &lt;span class=&quot;k&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;IncreaseScore&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;amount&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;score&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;score&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;amount&lt;/span&gt;  &lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

</description>
				<pubDate>Mon, 08 Sep 2014 11:44:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/09/08/Duality-and-fsharp/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/09/08/Duality-and-fsharp/</guid>
			</item>
		
			<item>
				<title>F#n and games</title>
				<description>&lt;p&gt;F#n and games&lt;/p&gt;

&lt;p&gt;I am extremely happy to announce that after &lt;a href=&quot;https://thestrangeloop.com/schedule&quot;&gt;Strange Loop&lt;/a&gt; a conference I am lucky to attend!. I will be going about North America showing off some F# and games!&lt;/p&gt;

&lt;p&gt;I will  in the following user groups&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Tuesday 23rd September - Nashville  &lt;a href=&quot;http://nashfp.org/&quot;&gt;NashFP&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Wednesday 24th September - Washington DC&lt;/li&gt;
  &lt;li&gt;Tuesday 30th September - Toronto&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I will be updating the details of the times here as I learn about it. I hope to see you there!&lt;/p&gt;

&lt;h2 id=&quot;game-on&quot;&gt;Game on!&lt;/h2&gt;

&lt;p&gt;It is way more entertaining to learn by doing. To that end we will be using &lt;a href=&quot;https://github.com/bravesirandrew/duality&quot;&gt;Duality&lt;/a&gt; (an open source game engine) with a F# plug-in (also OSS) to create power-ups (or power downs? ) to &lt;a href=&quot;http://en.wikipedia.org/wiki/Breakout_(video_game)&quot;&gt;Breakout&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.mathworks.com/matlabcentral/fileexchange/screenshots/1604/original.jpg&quot; alt=&quot;Breakout&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It is very possible I’ll be attending the amazing &lt;a href=&quot;https://skillsmatter.com/conferences/1886-progressive-f-tutorials-nyc-2014&quot;&gt;F# Progressive tutorials&lt;/a&gt; in New York, the line up is pretty good, and suitable for both beginners and advanced f#ers. If you are close and into functional programming, this looks like a great conference and Don Syme, Scott Wlashin, Rachel Resse and more involved in it.&lt;/p&gt;

&lt;h2 id=&quot;more-game-at-gamecraft&quot;&gt;More Game at GameCraft&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;http://www.gamecraft.it/static/img/gamecraft-logo-466x479.png&quot; alt=&quot;GameCraft Logo&quot; style=&quot;width: 200px;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;On October the 4th at GameCenter NYU  &lt;a href=&quot;https://www.gamecraft.it/events/new-york-gamecraft-2014/&quot;&gt;New York GameCraft&lt;/a&gt; is happening. In this 12 hour event, you have 10 hours to start and finish a game with a given theme (the theme is announced on the day), in case you are wondering the extra 2 hours is to play each other games and get prizes!. 
You can use any technology you want. 
If you never took part on a game jam I would recommend you do, the first question I get generally is: What skills do I need? you need to want to make a game, and quite possibly a laptop. &lt;a href=&quot;http://trelford.com/blog/category/GameCraft.aspx&quot;&gt;Phil Trelford&lt;/a&gt; is no stranger to GameCraft and wrote a lot about it in his blog. 
Attendance is free but you need to &lt;a href=&quot;(https://www.gamecraft.it/events/new-york-gamecraft-2014/)&quot;&gt;register&lt;/a&gt; . Thanks to SkillsMatters and Game Centre NYU for helping make this event happen.&lt;/p&gt;

&lt;p&gt;Thanks to &lt;a href=&quot;http://fsharpworks.com/&quot;&gt;fsharpWorks&lt;/a&gt; for Sponsoring this trip!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://fsharpworks.com/images/fsharp_works_logo_100.png&quot; alt=&quot;fsharpWorks&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;hi-halpz&quot;&gt;Hi, Halpz!?&lt;/h2&gt;

&lt;p&gt;If you have any tips, suggestions, ideas on how to move around the cities I will be in, or want to meet up, that would be great!! Just leave a comment here or I am on twitter &lt;a href=&quot;http://twitter.com/silverspoon&quot;&gt;@silverspoon&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Sun, 31 Aug 2014 11:44:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/08/31/fun-and-games-in-NA/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/08/31/fun-and-games-in-NA/</guid>
			</item>
		
			<item>
				<title>Build tools FTW</title>
				<description>&lt;p&gt;At the moment, and for the last while, I have been working on an awesome game &lt;a href=&quot;www.digitalfurnacegames.com&quot;&gt;OniKira: Demon Killer&lt;/a&gt; (yes we &lt;a href=&quot;http://www.digitalfurnacegames.com/changing-the-name-of-the-game-figuratively-and-literaly/&quot;&gt;renamed it&lt;/a&gt; recently) from the start we wanted to have a one click deploy, and I believe in walking skeletons…, so, I have been working on having a one click build since the beginning of the project and as we are getting closer to a Steam Early Access for the game and need to send different types of builds to different parties this is really starting to pay off.&lt;/p&gt;

&lt;h2 id=&quot;current-tools&quot;&gt;Current Tools&lt;/h2&gt;

&lt;p&gt;This is a list of tools we are using for the build:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;TeamCity: for building, running tests, etc. I love this tool, like most of &lt;a href=&quot;www.jetbrains.com&quot;&gt;jetbrains&lt;/a&gt; tools I used over the years. I am curious about their new offering &lt;a href=&quot;http://blog.jetbrains.com/blog/2013/09/18/upsource-a-platform/&quot;&gt;UpSource&lt;/a&gt; .One suggestion: I wish it would be for the UI would be turned into some script so this could be into a repo rather than a database (I am sure there are good reasons for this but this is what I want right? :D)&lt;/li&gt;
  &lt;li&gt;ScriptCS: There are some custom moving of assemblies depending on target platform, packing of textures, and other crazy stuff with ScriptCS I have little friction and I can script fast in a language I know well (kudos to &lt;a href=&quot;http://twitter.com/gblock&quot;&gt;Glenn Block&lt;/a&gt;, &lt;a href=&quot;http://twitter.com/jrusbatch&quot;&gt;Justin Rusbatch&lt;/a&gt; and &lt;a href=&quot;http://twitter.com/filip_woj&quot;&gt;Filip Wojcieszyn&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;BitTorrentSync: Build distribution peer to peer. We are a small however diverse team (ie not all of us that need to have access to the build are developers) this is a pretty efficient and cost effective way to do that. We also use this when editing video or other large binaries.&lt;/li&gt;
  &lt;li&gt;MyGet: A lot of the code we write is open source, we pack it and ship assemblies using NuGet via &lt;a href=&quot;http://www.myget.org&quot;&gt;MyGet&lt;/a&gt;. Their response time is amazing (I had a problem once and they responded and fixed a problem in less than 30 minutes, note: I created the problem in the first place ).We have started migrating some of the builds to their build service.&lt;/li&gt;
  &lt;li&gt;git: for all code repositories.&lt;/li&gt;
  &lt;li&gt;svn: Content repository (images, sounds, binaries)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;tools-on-testing-phase&quot;&gt;Tools on Testing Phase&lt;/h2&gt;

&lt;p&gt;Recently I added &lt;a href=&quot;http://fsharp.github.io/FAKE/&quot;&gt;#FAKE&lt;/a&gt; to our Duality(game engine) build, I was able to do something a custom with the build in a couple of hours (generally custom in build tools is a pain), and it has TeamCity integration so this is something I might use on the next build task I have.&lt;/p&gt;

&lt;h3 id=&quot;thank-you&quot;&gt;Thank you&lt;/h3&gt;

&lt;p&gt;All of these tools are free (at least the way we use them to build  and many of them are open source. Thanks to all of you that make this possible.&lt;/p&gt;
</description>
				<pubDate>Sun, 10 Aug 2014 14:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/08/10/Build-tools-FTW/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/08/10/Build-tools-FTW/</guid>
			</item>
		
			<item>
				<title>NuGet install tricks</title>
				<description>&lt;p&gt;Recently I was finishing off the great work &lt;a href=&quot;http://gettingsharper.de/&quot;&gt;Carsten&lt;/a&gt; started (well pretty much completed, I was just adding the nuget package and change the build so it would build the aforementioned package )  on the Nunit add-in for &lt;a href=&quot;https://github.com/fsharp/FsCheck&quot;&gt;FsCheck&lt;/a&gt; and I had to use a not very common feature of Nuget, running powershell scripts automatically on install.&lt;/p&gt;

&lt;p&gt;Disclaimer: I don’t like powershell, it is better than nothing, but every time I use is harder that it needs to be.&lt;/p&gt;

&lt;h4 id=&quot;running-powershell-scripts-automatically-when-installing-and-removing-packages&quot;&gt;Running powershell scripts automatically when installing and removing packages&lt;/h4&gt;

&lt;p&gt;There are a few powershell files that run (if they exists on /tools in your package definition): Init.ps1 , install.ps1 and uninstall.ps1
Init.ps1 runs the first time a package is installed in a solution, install.ps1 runs when a package is installed in a project, uninstall.ps1 runs when removing the package. There more information about these files &lt;a href=&quot;http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package&quot;&gt;here&lt;/a&gt; in the section called “Automatically Running PowerShell Scripts During Package Installation and Removal”&lt;/p&gt;

&lt;h4 id=&quot;the-script&quot;&gt;The script&lt;/h4&gt;

&lt;p&gt;In the docs above, when you are looking at what you can do regarding project, it refers you to &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/51h9a6ew%28v=VS.80%29.aspx&quot;&gt;this page&lt;/a&gt; hint there is no info about Object :/. Thankfully I was pointed towards SpecFlow’s &lt;a href=&quot;https://github.com/techtalk/SpecFlow/blob/master/Installer/NuGetPackages/NUnit.Runners/Install.ps1&quot;&gt;install.ps1 file&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I ran into a little problem when building this, I had specified a path wrong on my script and this is the error I got:&lt;/p&gt;

&lt;pre&gt;
 Exception calling &quot;Add&quot; with &quot;1&quot; argument(s): &quot;Unspecified error
 (Exception from HRESULT: 0x80004005 (E_FAIL))&quot; At

 + $project.Object.References.Add &amp;lt;&amp;lt;&amp;lt;&amp;lt; ($NunitRunners+&quot;nunit.core.dll&quot;)
     + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
     + FullyQualifiedErrorId : ComMethodTargetInvocation
&lt;/pre&gt;

&lt;p&gt;Just for completeness this is the final install.ps1&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-powershell&quot; data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;kr&quot;&gt;param&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$installPath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$toolsPath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$package&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$project&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;write-host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Adding a reference to nunit.core and nunit.core.interfaces to the project&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$packagesFolder&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Split-Path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Path&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$installPath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Parent&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$version&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# Get-Package -Filter NUnit.Runners also returns packages with NUnit.Runners in the description (e.g. NUnit or SpecFlow.NUnit.Runners)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# we need to find the one, that we are looking for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$nunitPackages&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Get-Package&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-Filter&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;NUnit.Runners&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;foreach&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$nunitPackage&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$nunitPackages&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# there is a bug in NuGet: the package id for all returned packages is &quot;NUnit.Runners&quot;, so filtering that is not enough&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$nunitPackage&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Id&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;NUnit.Runners&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-and&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$nunitPackage&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ProjectUrl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ToString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Contains&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;nunit&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
	&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
		&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$version&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$nunitPackage&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Version&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ToString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
	&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$version&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-ne&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; 
	&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$nunitPackageToolsLibFolder&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$packagesFolder&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;\NUnit.Runners.&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$version&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;\tools\lib\&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    
    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;write-host&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;The nunit location is: &quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$nunitPackageToolsLibFolder&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    
	&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$nunitCoreInterfacesRef&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$project&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;References&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Item&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;nunit.core.interfaces&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$nunitCoreInterfacesRef&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$nunitCoreInterfacesRef&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Remove&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$project&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;References&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$nunitPackageToolsLibFolder&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;nunit.core.interfaces.dll&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    
    &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$nunitCoreRef&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$project&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;References&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Item&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;nunit.core&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$nunitCoreRef&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$nunitCoreRef&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Remove&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
	&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$project&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;References&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$nunitPackageToolsLibFolder&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;nunit.core.dll&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;I am writing this mostly because I didn’t find many blog posts about this.&lt;/p&gt;

&lt;h4 id=&quot;some-other-random-nuget-features&quot;&gt;Some other random NuGet features&lt;/h4&gt;

&lt;p&gt;I don’t do a lot of nugeting(?) but there are a few features I think can be very useful:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;You can specify assemblies that will be referenced (and have more assemblies available on the files tag )&lt;/li&gt;
  &lt;li&gt;You can use the content folder in the manifest and add files to the project you are installing the package. More info &lt;a href=&quot;http://docs.nuget.org/docs/reference/nuspec-reference&quot;&gt;here&lt;/a&gt; search for the &lt;strong&gt;Content Files&lt;/strong&gt; section&lt;/li&gt;
  &lt;li&gt;You can target different frameworks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I like adding pictures to posts, in this case the most representative one might be this one, the view of the project with just installed package with the added FsCheckAddin.fs , and references to nunit.core and nunit.core.interfaces.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2014-08-03-project-view.JPG&quot; alt=&quot;project&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Till the next time.&lt;/p&gt;
</description>
				<pubDate>Sun, 03 Aug 2014 14:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/08/03/Nuget-install-tricks/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/08/03/Nuget-install-tricks/</guid>
			</item>
		
			<item>
				<title>Devsum14-Like a rabbit in headlights presentation slides</title>
				<description>&lt;p&gt;Went to &lt;a href=&quot;ds&quot;&gt;#devSum14&lt;/a&gt; in Stockholm and had a great time. Talked to amazing people and gave my second presentation on F#, people seemed happy about it and had loads of questions :D.&lt;/p&gt;

&lt;script async=&quot;&quot; class=&quot;speakerdeck-embed&quot; data-id=&quot;64cd51d0c57f0131946306305ec17342&quot; data-ratio=&quot;1.33333333333333&quot; src=&quot;//speakerdeck.com/assets/embed.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;If any of you attended and have some questions or feedback I would love to hear about it.&lt;/p&gt;

&lt;h3 id=&quot;any-questions-comments-and-corrections-very-welcome-as-always&quot;&gt;Any questions, comments and corrections very welcome as always&lt;/h3&gt;
&lt;p&gt;:D&lt;/p&gt;

</description>
				<pubDate>Sat, 24 May 2014 14:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/05/24/Rabbit-in-headlights/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/05/24/Rabbit-in-headlights/</guid>
			</item>
		
			<item>
				<title>Why F sharp and functional programming in general.</title>
				<description>&lt;p&gt;Why I have been learning F# (and functional programming in general) lately:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;It’s functional first, so it encourages you to write pure functions and other cool stuff.&lt;/li&gt;
  &lt;li&gt;No more NullReferenceExceptions (wooohoo yeah! PARTY NOISES!!)&lt;/li&gt;
  &lt;li&gt;Amazing type system. Think type inference on steroids and automatic generalization.
    &lt;ul&gt;
      &lt;li&gt;Tuples: it is great to be able to have multiple results for a function&lt;/li&gt;
      &lt;li&gt;Discriminated Unions&lt;/li&gt;
      &lt;li&gt;Records&lt;/li&gt;
      &lt;li&gt;Moar. There are other f# Types&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Open source&lt;/li&gt;
  &lt;li&gt;Great community&lt;/li&gt;
  &lt;li&gt;Great interop with C#&lt;/li&gt;
  &lt;li&gt;Cross platform&lt;/li&gt;
  &lt;li&gt;Type providers&lt;/li&gt;
  &lt;li&gt;Forward pipe operator and the opposite&lt;/li&gt;
  &lt;li&gt;It supports imperative and OO paradigms too&lt;/li&gt;
  &lt;li&gt;F# interactive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I though it would be good to expand on the points above&lt;/p&gt;

&lt;p&gt;##Functional first&lt;/p&gt;

&lt;p&gt;At some point during last year as I watched a talk by &lt;a href=&quot;https://twitter.com/bodil&quot;&gt;Bodil Stokke&lt;/a&gt;, called &lt;a href=&quot;https://vimeo.com/74452549&quot;&gt;Programming, Only better&lt;/a&gt; (go watch all the videos of her talks, she is super smart you will learn a lot) in the talk she mentioned a paper called &lt;a href=&quot;http://shaffner.us/cs/papers/tarpit.pdf&quot;&gt;“Out of the tar pit”&lt;/a&gt; both talk and paper made me think about the way I code. The end result of watching and reading was that I finally understood that side effect free code is better because it is simpler. We all know that writing simple code that does exactly what you imagine the code is doing is pretty damn hard, and functional programming can help making this a little simple. 
I feel that by trying to do a little synopsis of what the paper and Bodil said is doing a disservice to both, so go watch and read, beats whatever else you are doing :-D.&lt;/p&gt;

&lt;p&gt;This and going to &lt;a href=&quot;http://codemesh.io&quot;&gt;Code Mesh&lt;/a&gt; last year is what made me go from a person curious about functional programming, to “I have to learn and truly understand at least one functional programming right now!.&lt;/p&gt;

&lt;p&gt;##No more NullReferenceException&lt;/p&gt;

&lt;p&gt;The F# compiler will still have to deal with NullReferenceExceptions when dealing with .net types, however when dealing with Option type you can use pattern matching to match all the cases.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;num&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Some&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;notnum&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;None&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;match&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;num&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;with&lt;/span&gt; 
&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;None&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;printfn&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;num is None&quot;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Some&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;printfn&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;num is %i&quot;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;There is an in-depth post about this &lt;a href=&quot;http://fsharpforfunandprofit.com/posts/the-option-type/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;amazing-type-system&quot;&gt;Amazing Type system&lt;/h2&gt;

&lt;p&gt;As a C# developer I always thought C#’s type system was pretty good, it did everything I expected, and rarely let me down. However, I am rather impressed by how much type inference and automatic generalization add to F#. Type inference allow the F# compiler figure out the types use and where, it does so in order top to bottom, left to right. I am thinking perhaps the only annoying side effect of this is that you have to set an order to  files in a project, something I find rather weird.
Anyway, when the compiler doesn’t find what type to infer then (as far as I know)it makes the code general (imagine implementing that in C# :D) this happens because of automatic generalization (I have 90% confidence of this being correct)
I still don’t know exactly how it all works but I am very happy with the results because I can try anything I want quickly. 
I guess F#’s type system was bound to be good, after all, static typing was first implemented in a functional programming language, .&lt;/p&gt;

&lt;h2 id=&quot;tuples&quot;&gt;Tuples&lt;/h2&gt;

&lt;p&gt;Tuples are one of the F# types, they represent a pair, triple or larger combination of types. This means you can finally do multiple return types :D&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;personInfo&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
    &lt;span class=&quot;s2&quot;&gt;&quot;Tayla&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;45454545&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;myFunction&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;number&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;personInfo&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;printfn&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;name is %s, number %i&quot;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;number&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;printfn&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Name is %s, number %i --&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fst&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;personInfo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;snd&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;personInfo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;And this is what shows in f# interactive :

name is Tayla, number 45454545
Name is Tayla, number 45454545 --

val personInfo : string * int = (&quot;Tayla&quot;, 45454545)
val myFunction : unit = ()
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;An advantage of using tuples is that when you are working with .net types that have out parameters, F# automatically turns that into tuples. Exmaple&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;&lt;span class=&quot;k&quot;&gt;open&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Collections&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Concurrent&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;convert&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;collection&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;BlockingCollection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;()&lt;/span&gt; 
    &lt;span class=&quot;n&quot;&gt;collection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Add&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;collection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;TryTake&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;val convert : bool * int = (true, 4)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;As you can see this returns convert : bool * int, when you see a * in the result section of f# interactive that means that the type is a tuple&lt;/p&gt;

&lt;h2 id=&quot;records&quot;&gt;Records&lt;/h2&gt;

&lt;p&gt;Yet another F# type, I really like it because it makes classes definitions look like giganto-monsters. 
Also, tuples are great, but sometimes you want to name things so that ordering is not important.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;vector2Data&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;equal&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; 
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;vect1&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;vect2&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;vect1&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;vect2&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;h2 id=&quot;discriminated-unions&quot;&gt;Discriminated Unions&lt;/h2&gt;

&lt;p&gt;This is another f# type. I think an example will speak for itself.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Weapon&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Move&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Behaviour&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Character&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Player&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Move&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Weapon&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;NPC&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Behaviour&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Scenery&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;jiro&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Player&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Throw&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Katana&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tree&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Scenery&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mempoWarrior&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;NPC&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Chase&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;The fsi console returns&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;type Weapon = string
type Move = string
type Behaviour = string
type Character =
  | Player of Move * Weapon
  | NPC of Behaviour
  | Scenery
val jiro : Character = Player (&quot;Throw&quot;,&quot;Katana&quot;)
val tree : Character = Scenery
val mempoWarrior : Character = NPC &quot;Chase&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;As it’s probably obvious this is a great way to work with finite set of choices, pattern matching can be used on discriminated unions.&lt;/p&gt;

&lt;h2 id=&quot;open-source&quot;&gt;Open source&lt;/h2&gt;

&lt;p&gt;This is really what made me choose F# over other languages that I was considering learning. Since the language is open source and owned by the community, it is not tied to Microsoft and it’s rather erratic decision making of the last few years. 
The C# interop just works.&lt;/p&gt;

&lt;h2 id=&quot;great-community&quot;&gt;Great community&lt;/h2&gt;

&lt;p&gt;Many f# people in twitter and very vocal and welcoming. F# power tools is a must have add-on. But also: FAKE, FsCheck, Fuchu, many type providers.&lt;/p&gt;

&lt;h2 id=&quot;supports-imperative-and-oo-paradigms&quot;&gt;Supports imperative and OO paradigms&lt;/h2&gt;

&lt;p&gt;Being able to use pre-existing libraries and paradigms can be very useful.&lt;/p&gt;

&lt;h2 id=&quot;great-interop-with-c&quot;&gt;Great interop with C#.&lt;/h2&gt;

&lt;p&gt;I’m sure there is a lot more to it, but the main thing for me is that it makes testing C# code shorter, and works both ways.&lt;/p&gt;

&lt;h2 id=&quot;cross-platform&quot;&gt;Cross platform.&lt;/h2&gt;

&lt;p&gt;It runs on mono and there are people using F# with Xamarin tools for mobile. Also F# has an OCaml compatibility mode (that I haven’t tested yet). The experience on non windows machines keeps improving. And in windows it is really nice once you get F# Power Tools. Before I installed that I found the significant whitespace a bit confusing, but now I literally can see what is the problem.&lt;/p&gt;

&lt;h2 id=&quot;type-providers&quot;&gt;Type providers&lt;/h2&gt;

&lt;p&gt;This is a feature of F# 3.0, with them you get typed access to a wide variety of data sources, without requiring code generation. There are a few common type providers included . This means you can do a lot of data exploration with very little&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;&lt;span class=&quot;k&quot;&gt;open&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;FSharp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Data&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Languages&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;FSharp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;CsvProvider&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;../languages_Ireland.csv&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;readLanguageData&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;     
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;../languages_Ireland.csv&quot;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Languages&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Load&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;FileStream&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;FileMode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Open&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt;
    &lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;That is pretty much all you need to start playing with the data of a csv file. And by playing I mean you have typed access to the fields in the csv.
This will print in the console the fist response (not a great use), but it show that it’s typed, see the %s and that I can access fields by column name (it will use by default the first row for headers)&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;	&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;first&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Rows&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&amp;gt;&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Seq&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;head&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;printfn&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;The first person production language %s&quot;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;first&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;``What programming language(s) are you using in production?``&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;I don’t know you, but I am totally blown away by this. There is also a graph tool that will help you plot data.&lt;/p&gt;

&lt;h2 id=&quot;other-people&quot;&gt;Other people&lt;/h2&gt;
&lt;p&gt;Just for the craic (and to double check on my madness level) I asked on twitter what is people’s preferred language feature and this is what I got:&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; lang=&quot;en&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://twitter.com/silverSpoon&quot;&gt;@silverSpoon&lt;/a&gt; There are so many, pattern matching and active patterns are pretty awesome.&lt;/p&gt;&amp;mdash; Dave Thomas (@7sharp9) &lt;a href=&quot;https://twitter.com/7sharp9/statuses/465168584382361600&quot;&gt;May 10, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot; lang=&quot;en&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://twitter.com/silverSpoon&quot;&gt;@silverSpoon&lt;/a&gt; Because they dramatically simplify logic processing and collapse a lot of boilerplate.&lt;/p&gt;&amp;mdash; Dave Thomas (@7sharp9) &lt;a href=&quot;https://twitter.com/7sharp9/statuses/465168797411069952&quot;&gt;May 10, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;script async=&quot;&quot; src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot; lang=&quot;en&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://twitter.com/silverSpoon&quot;&gt;@silverSpoon&lt;/a&gt; I just love pipe forward and pipelines of functions. Simple, and makes workflows / data transforms super clear.&lt;/p&gt;&amp;mdash; Mathias Brandewinder (@brandewinder) &lt;a href=&quot;https://twitter.com/brandewinder/statuses/465200532231958528&quot;&gt;May 10, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; lang=&quot;en&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://twitter.com/silverSpoon&quot;&gt;@silverSpoon&lt;/a&gt; quotations are very cool&lt;/p&gt;&amp;mdash; gregyoung (@gregyoung) &lt;a href=&quot;https://twitter.com/gregyoung/statuses/465043534161379328&quot;&gt;May 10, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot; lang=&quot;en&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://twitter.com/silverSpoon&quot;&gt;@silverSpoon&lt;/a&gt; What I miss the most in C# is DUs. To make them usable you need pattern matching.&lt;/p&gt;&amp;mdash; Robert Jeppesen (@rojepp) &lt;a href=&quot;https://twitter.com/rojepp/statuses/465170677834997760&quot;&gt;May 10, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot; lang=&quot;en&quot;&gt;&lt;p&gt;.&lt;a href=&quot;https://twitter.com/silverSpoon&quot;&gt;@silverSpoon&lt;/a&gt; Function currying because, like curry, once you start using it you can&amp;#39;t stop&lt;/p&gt;&amp;mdash; Patrick McDonald (@PaddyMcDonald) &lt;a href=&quot;https://twitter.com/PaddyMcDonald/statuses/465181555074531329&quot;&gt;May 10, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot; lang=&quot;en&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://twitter.com/silverSpoon&quot;&gt;@silverSpoon&lt;/a&gt; &lt;a href=&quot;https://twitter.com/nikhilsingh&quot;&gt;@nikhilsingh&lt;/a&gt; favorite feature &lt;a href=&quot;https://twitter.com/search?q=%23fsharp&amp;amp;src=hash&quot;&gt;#fsharp&lt;/a&gt; Data.SqlClient, I use every day, it works, authors very responsiv&amp;#10;&lt;a href=&quot;https://t.co/9y3H8LzOF4&quot;&gt;https://t.co/9y3H8LzOF4&lt;/a&gt;&lt;/p&gt;&amp;mdash; Jack Fox (@foxyjackfox) &lt;a href=&quot;https://twitter.com/foxyjackfox/statuses/465242438970265600&quot;&gt;May 10, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot; lang=&quot;en&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://twitter.com/silverSpoon&quot;&gt;@silverSpoon&lt;/a&gt; &lt;a href=&quot;https://twitter.com/c4fsharp&quot;&gt;@c4fsharp&lt;/a&gt; piping stuff because you it gives an exellent flow to things&lt;/p&gt;&amp;mdash; Erlend Wiig (@ErlendW) &lt;a href=&quot;https://twitter.com/ErlendW/statuses/465256913878663169&quot;&gt;May 10, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;It might seem like there is a lot to know to just even get started, but I think if you just jump right in, you have a lot to win. Most of the names of the features come from a maths background, it can feel a bit of putting, but it’s really not that bad.
Maybe it’s because diving into a new language is just new and exciting, but it’s been a while since my brain reacts so positively to learning something new. Sometimes I get stuck but then that’s when the community aspect really kicks in.&lt;/p&gt;

&lt;h2 id=&quot;resources&quot;&gt;Resources&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Books:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.apress.com/9781430246503&quot;&gt;Expert F# 3.0 by Don Syme, Adam Granicz, Antonio Cisternino&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.manning.com/petricek/&quot;&gt;Real world functional programming by Tomas Petricek with Jon Skeet&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://fsharpforfunandprofit.com/&quot;&gt;F# for fun and profit&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://trelford.com/blog/&quot;&gt;Phil Trelford blog&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://tomasp.net/blog/&quot;&gt;Thomas Petricek blog&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://c4fsharp.net/&quot;&gt;Community for F#&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://fsharp.org/&quot;&gt;F# foundation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Another good talk about functional programming for the OO developer &lt;a href=&quot;https://vimeo.com/78909069&quot;&gt;from Jessica Kerr&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;any-questions-comments-and-corrections-very-welcome-as-always&quot;&gt;Any questions, comments and corrections very welcome as always&lt;/h3&gt;

</description>
				<pubDate>Sat, 10 May 2014 14:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/05/10/why-fsharp/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/05/10/why-fsharp/</guid>
			</item>
		
			<item>
				<title>Behaviour trees first attempt at implementing in F sharp</title>
				<description>&lt;p&gt;Recently I saw a post about a simple FSM implementation in F# (&lt;a href=&quot;http://withouttheloop.com/articles/2014-04-18-fsharp-csharp-statemachines/&quot;&gt;link&lt;/a&gt;), and that got me thinking about our Behaviour Trees and how simple or complex it would be to implement them in F#.&lt;/p&gt;

&lt;h2 id=&quot;what-are-behaviour-trees&quot;&gt;What are behaviour trees?&lt;/h2&gt;

&lt;p&gt;There is a longer intro to the topic &lt;a href=&quot;http://www.altdevblogaday.com/2011/02/24/introduction-to-behavior-trees/&quot;&gt;here&lt;/a&gt; and a more extensive one in this &lt;a href=&quot;http://www.doc.ic.ac.uk/teaching/distinguished-projects/2009/c.lim.pdf&quot;&gt;paper&lt;/a&gt;. 
What I remember when I think about them is that there are 2 types of constructs:&lt;/p&gt;

&lt;p&gt;Actions and conditions: Actions are changes in the game world  such as animation plays, health decreased, etc. Conditions check certain states of the world.&lt;/p&gt;

&lt;p&gt;Sequences and selectors: This is how we link and order the &lt;em&gt;actions&lt;/em&gt; and &lt;em&gt;conditions&lt;/em&gt;. Sequences pretty much are what your intuition tells you, they run a sequence of actions or conditions (they all need to return true). Selectors are the flipside of sequences, they run until something returns true.&lt;/p&gt;

&lt;p&gt;To refresh the old noodle (ie: my brain) I implemented a very simplistic behaviour tree in C#. It looked like this (there are many classes in one file… you will survive), you can see it &lt;a href=&quot;https://gist.github.com/Andrea/5b8dfa9daff76ffcf3b9&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;f-implementation&quot;&gt;F# implementation&lt;/h2&gt;

&lt;p&gt;I tried starting implementing the selector, no luck. I couldn’t figure out what it should look like. 
Then I tried starting at the top, implementing the implementations of the actions mostly because it was the functions I knew how to implement, and they might guide me to somewhere interesting.&lt;/p&gt;

&lt;p&gt;Turns out it pointed me to my total lack of understanding of the F# type system.&lt;/p&gt;

&lt;h2 id=&quot;types&quot;&gt;Types&lt;/h2&gt;

&lt;p&gt;It turns out I had to leave my very practical approach to learning F# and go get my read on. I heard that F# has a pretty advanced type system, and I was just about to learn why.&lt;/p&gt;

&lt;p&gt;Turns out there is an &lt;a href=&quot;http://fsharpforfunandprofit.com/posts/overview-of-types-in-fsharp/&quot;&gt;amazing series of posts about types&lt;/a&gt; by Scott Wlaschin. I think there is little point in my replicating what he said in worse prose :D, so go read that, and if you know of another cool link on the F# type system, please let me know by leaving a reply to this post.&lt;/p&gt;

&lt;p&gt;Anyway, after a glance at the posts I think I need a discriminated union, or maybe a class but that feels dirty, of course I’ll have to try both.&lt;/p&gt;

&lt;p&gt;[Here I took a rather long pause to go and read the posts properly and then do the Koans on records and classes to get my brain warmed up,]&lt;/p&gt;

&lt;p&gt;Then I attempted to implement the tree again but getting stuck again. I decided some procrastination might help so, I went to look for some implementations of BT in every functional language I could think of and found these &lt;a href=&quot;https://github.com/nakkaya/alter-ego&quot;&gt;one in clojure&lt;/a&gt; (I think these might be slightly different Behaviour Trees), and this &lt;a href=&quot;https://bitbucket.org/eeeickythump/behave-tree&quot;&gt;one in common Lisp&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I am going to leave this for today but will return with a solution as soon as I get one.&lt;/p&gt;

</description>
				<pubDate>Mon, 05 May 2014 14:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/05/05/behaviour-tree-implementation-in-fsharp/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/05/05/behaviour-tree-implementation-in-fsharp/</guid>
			</item>
		
			<item>
				<title>F# scripting for a component based game engine</title>
				<description>&lt;p&gt;Recently &lt;a href=&quot;http://github.com/bravesirandrew&quot;&gt;Andrew&lt;/a&gt; added C# scripting capabilities to &lt;a href=&quot;http://github.com/adamslair/duality&quot;&gt;Duality&lt;/a&gt;, the engine we are using to build &lt;a href=&quot;http://digitalfurnacegames.com&quot;&gt;Honourbound&lt;/a&gt;. Once we had something working, we started thinking about the fact that it might be pretty simple to add support for [F#][fsh], so we did.&lt;/p&gt;

&lt;p&gt;A few weekends ago I twitted this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2014-04-20-fhscripting-tweet.JPG&quot; alt=&quot;tweet&quot; /&gt;&lt;/p&gt;

&lt;p&gt;We had a spike working within a few hours with an old version of F# codedom. I spent some time the last few days making it more usable within the editor.&lt;/p&gt;

&lt;h2 id=&quot;how-to-use&quot;&gt;How to use&lt;/h2&gt;

&lt;p&gt;If you are like me, you’ll want to try this out as soon as possible, instructions :D&lt;/p&gt;

&lt;p&gt;Steps to move a gameObject with an F# script if you never used Duality&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Download duality with the plugins in place from this &lt;a href=&quot;https://www.dropbox.com/s/i9stp1z0avihzvq/DualityWithPlugins.zip&quot;&gt;link&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Open DualityEditor a scene will be created by default but not saved, save it.&lt;/li&gt;
  &lt;li&gt;Drop a duality logo from the default folder in Project View into the main area. This will create a GameObject with a&lt;/li&gt;
  &lt;li&gt;In the game object in the object inspector (if you don’t see it, menu-&amp;gt;View-&amp;gt; Object Inspector), right click and add a script component.&lt;/li&gt;
  &lt;li&gt;In the scene editor, create a folder, call it scripts, right click and go to Scripting -&amp;gt; F sharp script&lt;/li&gt;
  &lt;li&gt;Double clicking on the newly created resource will open the F# file with your default editor for files ending with .fs.&lt;/li&gt;
  &lt;li&gt;You will have access to the GameObject and other engine related properties the same way you do in Duality (or Unity if you are familiar with it)&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-fsharp&quot; data-lang=&quot;fsharp&quot;&gt;&lt;span class=&quot;k&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Dualityscript&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;open&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ScriptingPlugin&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;open&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Duality&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;open&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Duality&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Components&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;open&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Duality&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Helpers&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;open&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;OpenTK&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;FSharpScript&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;inherit&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;DualityScript&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Update&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;        
        &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;GameObj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Transform&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Pos&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;GameObj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Transform&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Pos&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Vector3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;If you want to build all yourself :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Build from &lt;a href=&quot;http://github.com/bravesirandrew/duality&quot;&gt;source from our fork&lt;/a&gt;. We are using our fork of Duality instead of Adams, because of some dependencies we have on our own fork, we will see how to make this a better experience, so far I wanted to get something usable out.&lt;/li&gt;
  &lt;li&gt;Build &lt;a href=&quot;https://github.com/BraveSirAndrew/DualityScripting&quot;&gt;this&lt;/a&gt; get the ScriptingPlugin.core.dll and ScriptingPlugin.editor.dll and copy them into the plugins folder inside the aforementioned Game folder.&lt;/li&gt;
  &lt;li&gt;from the packages folder copy FSharp.Compiler.Services.dll&lt;/li&gt;
  &lt;li&gt;from the packages folder copy Mono.cecil.dll and Mono.cecil.pdb.dll&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A video showing this &lt;a href=&quot;http://youtu.be/HcnNGIeOnPc&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;why&quot;&gt;Why&lt;/h2&gt;

&lt;p&gt;Game programming in a middle to big sized project falls into three logical categories. Those categories are associated with their level of use: i.e: how often you run this code, and the rate of change i.e. how many times this file has changed in the last month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Engine&lt;/strong&gt;: Core game engine, doesn’t change too often, ideally it has lots of test coverage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Game Systems&lt;/strong&gt;: These are game specific systems that are core to the game, the change more often than the engine. This code has a high re usability level so should be tested.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gameplay&lt;/strong&gt;: The code here changes all the time, the general pattern is a lot of initial churn and then some tweaks. We agreed not to test this code, tho there are some exceptions.&lt;/p&gt;

&lt;p&gt;I think using F# with a functional approach in our GamePlay code will make us more efficient because of the frequency of change this type of code requires. It might help reduce the number of NullReferenceException type of errors too.&lt;/p&gt;

&lt;h2 id=&quot;thanks&quot;&gt;Thanks&lt;/h2&gt;

</description>
				<pubDate>Mon, 21 Apr 2014 14:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/04/21/Fsharp-scripting-for-the-game-engine/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/04/21/Fsharp-scripting-for-the-game-engine/</guid>
			</item>
		
			<item>
				<title>Dojo fractal forest in F# (with pictures)</title>
				<description>&lt;p&gt;A week or so ago I was lucky to be in San Francisco for “the” Game Developer Conference, while I was there I was able to meet &lt;a href=&quot;http://clear-lines.com/&quot;&gt;Mathias Brandewinder&lt;/a&gt;, we got to chat about loads of things (and eat some really nice breakfast) two of the many things we talked about were FsCheck and the dojo fractal forest.&lt;/p&gt;

&lt;p&gt;FsCheck is this really cool &lt;a href=&quot;http://research.microsoft.com/en-us/projects/pex/&quot;&gt;Pex&lt;/a&gt; like tool, I am trying it out and I could attempt to explain it but Mathias already wrote a great post about it in &lt;a href=&quot;https://github.com/fsharp/FsCheck&quot;&gt;this post, check it out&lt;/a&gt;. You can also use FsCheck with NUunit.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/c4fsharp/Dojo-Fractal-Forest&quot;&gt;Dojo fractal forest&lt;/a&gt; is just a little exercise in F# to make a tree using recursion, I though I should give it a go, it looked like fun.&lt;/p&gt;

&lt;p&gt;As I was writing this I was debating weather I should put some code up or not, as it might have a negative effect on people thinking of doing this. I decided against it for the moment. These are the iterations of the trees I built.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://cdn.makeagif.com/media/3-29-2014/ETACjx.gif&quot; alt=&quot;tree &quot; /&gt;&lt;/p&gt;

&lt;p&gt;When I reached the tree I was happy that I had achieved the goal of the exercise, but what else could I do with it?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Could I give it some leafs?&lt;/li&gt;
  &lt;li&gt;Could I grow the leafs over time?&lt;/li&gt;
  &lt;li&gt;Could the colour of the tree change with age (into a multi-coloured tree, because that seems way more fun)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Adding a leaf at the end of each branch was super simple, but that is not how trees work. I had to go find how real trees worked&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2014-03-29-trees-with-leaf1.JPG&quot; alt=&quot;with leaf&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I need to continue this post later, if you are intrigued you should go and try it out yourself :)&lt;/p&gt;

</description>
				<pubDate>Sat, 29 Mar 2014 23:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/03/29/fractal-tree-dojo/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/03/29/fractal-tree-dojo/</guid>
			</item>
		
			<item>
				<title>The importance of win times</title>
				<description>&lt;p&gt;As most developers I have really good and really bad days, it comes with the nature of the job. Lately I have been thinking that I had a lot of bad days, I needed to feel like I was wining and so I solved a small totally unrelated problem, I felt good. It will surprise no one that after that I was able to suck a little less during that day. 
Solving that little thing gave me a little bit of confidence I needed.&lt;/p&gt;

&lt;p&gt;This event made me think about he amazing book &lt;a href=&quot;http://en.wikipedia.org/wiki/Zen_and_the_Art_of_Motorcycle_Maintenance&quot;&gt;“Zen and the art of motorcycle maintenance”&lt;/a&gt;, I don’t remember who said it was the best software development book ever, so I read it last year, and I was thinking about it for a long time. The focus on the book is on quality and what that actually means, in the end you get a general sense about it, not a real answer.&lt;/p&gt;

&lt;p&gt;Just for the craic, this is a quote from the book: “Some things you miss because they are so tiny you overlook them. But some things you don’t see because they are so huge”&lt;/p&gt;

&lt;p&gt;For some reason this reminds me of something I just did, and that is when you find a potential error, instead of just throwing an error, also try to suggest a solution in the error message… NullException is the most recurrent one&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c#&quot; data-lang=&quot;c#&quot;&gt; 

	&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;player&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Scene&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Current&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;FindComponent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Player&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;().&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GameObj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;player&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;Log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Game&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WriteWarning&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;A player is required for this behaviour to work, please add one.&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;In this case this makes sense because this message is for people of a team that is small and the language is informal. I don’t need to do much other than let them know, you might want to react in a more suitable way. Quality is contextual.&lt;/p&gt;

</description>
				<pubDate>Mon, 10 Mar 2014 12:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/03/10/the-importance-of-win-times/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/03/10/the-importance-of-win-times/</guid>
			</item>
		
			<item>
				<title>Learning F# with Katas</title>
				<description>&lt;p&gt;For a while, I’ve been trying to learn functional programming and after a lot of prodding I chose to learn F# this year, the reasons:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;I though I should learn Haskell, the ideas behind the language are great.  I learned a little bit, but, when I tried to build something with a UI or web or a game, the dependencies just weren’t three. And windows support just doesn’t seem to be there. It doesn’t mean I’ll never learn it, but I just  want to get learning.&lt;/li&gt;
  &lt;li&gt;F# has a great community, I am looking forward to learning more so that I can perhaps sometime contribute some code.&lt;/li&gt;
  &lt;li&gt;I am a c# developer, using the clr is certainly helpful, and it makes it more likely that I can use the language on a day to day basis. If I do, I’m pretty sure you ll hear about it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I thought the way to go about it was to do something often, so &lt;a href=&quot;http://functionalkats.tumblr.com/&quot;&gt;functional katas started in january&lt;/a&gt; and I have started to re-write the last kata after a comment on twitter from &lt;a href=&quot;http://www.devjoy.com/&quot;&gt;Richard Dalton aka DevJoy&lt;/a&gt;, thanks for that.&lt;/p&gt;

</description>
				<pubDate>Tue, 25 Feb 2014 10:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/02/25/learning-fsharp-with-katas/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/02/25/learning-fsharp-with-katas/</guid>
			</item>
		
			<item>
				<title>Game AI pro review</title>
				<description>&lt;p&gt;TL;DR: It is not everyday that I definitely need to learn from a book. When I got “Game AI pro” I needed to learn as much as possible about practical usage of Behaviour Trees, and it didn’t disappoint.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.gameaipro.com/images/books/gameaipro_large.jpg&quot; alt=&quot;Game AI Pro&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;general-review&quot;&gt;General Review&lt;/h2&gt;

&lt;p&gt;These series of books by CRC show a high level of production. It can be intimidating at first, but you should keep going. 
The book is a compilation of articles from different authors, the quality and depth varies but is generally high.&lt;/p&gt;

&lt;p&gt;Having the article on chapter 2 about Neurology was cool to read. It went into more detail than in other AI books and it was refreshing.&lt;/p&gt;

&lt;p&gt;I wasn’t interested in Randomness so I am afraid I don’t know how useful those articles are because I skipped them.&lt;/p&gt;

&lt;p&gt;All the articles related to Behaviour Trees where relevant and useful to me. There is a few introductory chapters that are well written that explain some options on how to organize your AI.&lt;br /&gt;
I found particularly interesting the chapter(?) “Simulating Behaviour Trees: A Behaviour Tree / Planner Hybrid Approach (Daniel Hilburn)”. I had never though about a Monitor and Behaviour Tree combination and it got me thinking. (so many times I would start reading, follow my though path, forget what I read… had to start that section again). For this particular chapter, the sample code was neatly organized. Out of all the authors, perhaps this is the one I would find more useful to have a chat over a beer (and hopefully close to a white board, just in case).&lt;/p&gt;

&lt;p&gt;Talking about sample code, Some of the samples are great, others give you something without enough context.&lt;/p&gt;

&lt;p&gt;If you are thinking of buying this book you need to be aware that, like most game development books, there is not as much code as you would expect and when there is it is C++ code. If you are looking for practical advice about production AI, then this is the book for you.&lt;/p&gt;
</description>
				<pubDate>Wed, 12 Feb 2014 12:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/02/12/Game-AI-Pro-review/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/02/12/Game-AI-Pro-review/</guid>
			</item>
		
			<item>
				<title>CodeMesh presentation slides</title>
				<description>&lt;p&gt;Possibly what blew my mind the most last year was attending and presenting at &lt;a href=&quot;http://codemesh.io&quot;&gt;CodeMesh&lt;/a&gt;, the conference line-up was impeccable, and of course, the interesting bits happened when talking to people there. Kudos to the organizers for a great conference.&lt;/p&gt;

&lt;p&gt;Below please find my slides, they probably make no sense without context. I think the interesting parts of the talk are better explained in two posts about game concurrency &lt;a href=&quot;http://www.roundcrisis.com/2013/05/24/multithreading-rendering-in-a-game-engine-with-cdouble-buffer-implementation/&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://www.roundcrisis.com/2013/06/22/multithreaded-game-engineusing-concurrent-collections-instead/&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;script async=&quot;&quot; class=&quot;speakerdeck-embed&quot; data-id=&quot;617f0b304092013138d5327934cbb9d9&quot; data-ratio=&quot;1.33333333333333&quot; src=&quot;//speakerdeck.com/assets/embed.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;Some pictures and links:&lt;/p&gt;

&lt;p&gt;David Turner’s talk is available via this paper &lt;a href=&quot;http://www.cs.kent.ac.uk/people/staff/dat/tfp12/tfp12.pdf&quot;&gt;“Some history of Functional Programming Languages”&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Parallella Board, &lt;a href=&quot;http://www.parallella.org/&quot;&gt;website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yan Cui’s &lt;a href=&quot;http://theburningmonk.com/2013/12/slides-for-f-in-social-gaming-talk-at-codemesh/&quot;&gt;slides&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Phil Trelford’s &lt;a href=&quot;http://vimeo.com/84769835&quot;&gt;video on F# for Trading&lt;/a&gt;, to be honest, even if you are not into trading, this is pretty good.&lt;/p&gt;

&lt;p&gt;The talk by Dave Thomas and Jose Valim was pretty cool, no video or slides available at the moment :D.&lt;/p&gt;

&lt;iframe class=&quot;imgur-album&quot; width=&quot;100%&quot; height=&quot;550&quot; frameborder=&quot;0&quot; src=&quot;http://imgur.com/a/3aUb6/embed&quot;&gt;&lt;/iframe&gt;

</description>
				<pubDate>Fri, 24 Jan 2014 12:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/01/24/codemesh-slides/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/01/24/codemesh-slides/</guid>
			</item>
		
			<item>
				<title>The first Functional Katas meetup</title>
				<description>&lt;p&gt;The first &lt;a href=&quot;http://functionalkats.tumblr.com/post/70587488630/first-meeting-trinity-college&quot;&gt;Functional Katas&lt;/a&gt; happened last Wednesday, out of 29 people who signed up, about 15 turned up. Which is great given that it’s January and cold, and it was raining. An interesting part of going to the kata is that there is no internet access, this is somewhat a problem, at the same time, I kinda liked that extra constraint, perhaps not all the time.&lt;/p&gt;

&lt;p&gt;There are a few things I learned from being there. I was pairing with Kevin, who was writing &lt;a href=&quot;http://clojure.org/&quot;&gt;Clojure&lt;/a&gt;, a dynamic programming language that targets the jvm (I learned later it also can compile to js and apparently there is an implementation on the clr too), my first impression was that although very powerful … so many parentheses! I guess it is a trait(?) of Lisp, in saying all this please keep in mind I am ignorant in the ways of Lisp so this is truly first impression. It was fun to go and try to do this in a language I had no idea about.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2014-01-21-clojure-icon.gif&quot; alt=&quot;clojure&quot; /&gt;&lt;/p&gt;

&lt;p&gt;After 50 minutes of writing code, we went over all the solutions, I was really impressed about this. We had solutions in Haskell, Scala, F#, Scheme (with Racket) Erlang and Clojure. 
One thing that I noticed as we went through the solution is how similar the approaches to solve the problem were, pattern matching is a wonderful feature of functional languages. The code in all the solutions was rather elegant, actually you can take a look at them at our &lt;a href=&quot;https://github.com/FunctionalKatas/Katas&quot;&gt;github repo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the solutions really got me thinking though, the one in Erlang (&lt;a href=&quot;https://github.com/FunctionalKatas/Katas/blob/master/2014-01-Calculator-Erlang/calculator.erl&quot;&gt;code&lt;/a&gt;), when describing how the solution was developed, Phil explained that he knew that argument parsing will be a problem so he created little abstractions that he could test from, once the actual problem of the kata was solved, he dealt with the problem of parsing arguments. What I can’t stop thinking about is, is this type of thinking generated/helped by Erlang and it’s programming model? (Phil’s day job is on Erlang). I had planned to learn Erlang in the not so distant future, I think this question just raised the priority :D.&lt;/p&gt;

&lt;p&gt;Anyway, that is all. The next kata meetup is on the 19th of February, I am really excited about it, if you want to come, registration and more info &lt;a href=&quot;http://functionalkats.tumblr.com/post/74080235065/february-meeting-19th-february&quot;&gt;here&lt;/a&gt;. We talked about trying to solve a smaller problem, so that we can have more time to show and discuss at the end.&lt;/p&gt;

</description>
				<pubDate>Tue, 21 Jan 2014 22:44:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/01/21/the-first-functional-katas-meetup/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/01/21/the-first-functional-katas-meetup/</guid>
			</item>
		
			<item>
				<title>Standing desk day to day</title>
				<description>&lt;p&gt;I decided to keep a mini journal with updates about having a standing desk, I figure a lot of people are thinking about it (like I was) and it might be handy to have this information.&lt;/p&gt;

&lt;h2 id=&quot;day-1&quot;&gt;Day 1&lt;/h2&gt;
&lt;p&gt;Today is the first day I am using as standing desk as described in &lt;a href=&quot;http://iamnotaprogrammer.com/Ikea-Standing-desk-for-22-dollars.html&quot;&gt;this article&lt;/a&gt; . It’s been exciting “building” this.&lt;/p&gt;

&lt;p&gt;I used the desk without the shelf for about 4.5 hours two days ago and I was tired (though I had a long run before that, so that might be the reason). I used it without the shelf&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2014-01-20-nearly_desk.jpg&quot; alt=&quot;no shelf&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Today is officially the first full day and I am finding that having the shelf really helps, also I’m feeling less tension in by upper back than usual. I got this square cushion as well for standing on it (no shoes), and I think it’s more comfortable, compared to standing with runners.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2014-01-20--desk_with-shelf.jpg&quot; alt=&quot;With shelf&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I noticed I tend to shift on my feet at lot, probably that’s good for circulation.&lt;/p&gt;

&lt;p&gt;After about 3 hours I sat down for lunch (it felt great)&lt;/p&gt;

&lt;p&gt;I’ll update at the end of the day&lt;/p&gt;

&lt;p&gt;Had a planning meeting for 3 hours (I was sitting down)&lt;/p&gt;

&lt;p&gt;I ended the day pretty tired, the standing aspect stopped me from procastinating a bit&lt;/p&gt;

&lt;h2 id=&quot;day-2&quot;&gt;Day 2&lt;/h2&gt;

&lt;p&gt;I was slightly dreading the idea of coming to work and standing, but when I got here I forgot about it, I was thinking that a new setup like this would take a little while to get used to.&lt;/p&gt;

&lt;p&gt;I’m at half day and feeling the legs a bit but not much.&lt;/p&gt;

&lt;p&gt;I had to show some code to other people here and it was strange to share the space but it actually was nicer to be standing, it seemed more conducive to a conversation about the code.&lt;/p&gt;

&lt;p&gt;End of day, it’s been eight and a half hours and I am pretty tired, I had a few breaks, and sat down. My plan was to do all coding standing and use a laptop for emails and browsing while sitting down, that plan is not working out so far, perhaps I need to try harder (some emails require my immediate attention and I didn’t have the laptop setup there and then). By the way if someone is reading this and have a question feel free to comment or tweet at me &lt;a href=&quot;https://twitter.com/silverspoon&quot;&gt;@silverspoon&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;day-3&quot;&gt;Day 3&lt;/h2&gt;

&lt;p&gt;I slept like a baby ( I’ also cycling 16 miles a day commuting, I assume that is a contributing factor, however the big change is the standing) I am noticing I am generally in a better mood though.&lt;/p&gt;

&lt;p&gt;After 8 hours of work I was really really tired. Sat down, I had trouble staying awake :(&lt;/p&gt;

&lt;h2 id=&quot;day-4&quot;&gt;Day 4&lt;/h2&gt;

&lt;p&gt;Started the day with a lot of energy (and an 8 mile cycle) I’m after the first half and feeling good. I’m noticing my upper-back is really way less tense than normal (ie never noticed how tense I was) also feeling a bit of pain in my lower back, I guess it’s muscle building for standing for longer because it goes away.&lt;/p&gt;

&lt;h2 id=&quot;day-5&quot;&gt;Day 5&lt;/h2&gt;

&lt;p&gt;Nothing new to report really&lt;/p&gt;

&lt;h2 id=&quot;week-2&quot;&gt;Week 2&lt;/h2&gt;

&lt;p&gt;I am halfway through week 2, getting more used to this, I need to learn to take breaks more often. After 8 or 9 hours I am really tired.
Benefits I noticed: not upper back pain, higher energy levels&lt;/p&gt;

&lt;h2 id=&quot;week-2-day-3&quot;&gt;Week 2 Day 3&lt;/h2&gt;

&lt;p&gt;I had a breakthrough, I think. I am not only able to stand for longer but also I feel higher levels of energy. I would still really like to be able to sit down (particularly when I need to work late,. I also think this is helping my core muscles, but there is no way to measure that so… i.e. be able to revert to normal desk) however I think this experiment is pretty successful. 
Oh and yes, when people see it they ll ask you about it, so if you are thinking of doing this the first few days everyone asks you about this.&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;It’s been a good few weeks now since I started using the desk and this what I think about it&lt;/p&gt;

&lt;h4 id=&quot;pros&quot;&gt;Pros&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;No upper back pain&lt;/li&gt;
  &lt;li&gt;better core strength (didn’t measure this because I don’t really know how, suggestions welcome)&lt;/li&gt;
  &lt;li&gt;Some productivity increase&lt;/li&gt;
  &lt;li&gt;Easier to show a problem or pair with other people&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;cons&quot;&gt;Cons&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Because I have a cheap/fixed standing desk When I am tired I can’t work and sit (I did bring a laptop and remoted into my machine next to me but It felt a bit clunky)&lt;/li&gt;
  &lt;li&gt;it uses more space than a sitting person (at least on our office)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So basically if I had a standing desk where I can also sit if I want to, that would be amazing =).&lt;/p&gt;

&lt;p&gt;XKCD one up-ing :D
&lt;img src=&quot;http://imgs.xkcd.com/comics/standing.png&quot; alt=&quot;lol&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;some-related-links&quot;&gt;Some related links&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://thewirecutter.com/reviews/the-best-standing-desks/&quot;&gt;The best standing desks&lt;/a&gt;&lt;/p&gt;

</description>
				<pubDate>Mon, 20 Jan 2014 12:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/01/20/standing-desk-day-by-day/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/01/20/standing-desk-day-by-day/</guid>
			</item>
		
			<item>
				<title>F# Autocomplete plugin for Sublime</title>
				<description>&lt;p&gt;I am learning functional programming and the one I am playing with the most is F#. So I was on the look out for something small to do with the language, the other day I saw a tweet from &lt;a href=&quot;[https://twitter.com/CodeBeard]&quot;&gt;@codebeard&lt;/a&gt; where he was asking for some help with a plugin for Sublime for F# Autocomplete, what he has is &lt;a href=&quot;[https://gist.github.com/TheRealCodeBeard/8289612]&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;!
 &lt;img src=&quot;/images/2014-01-11-fsharp-autocomplete-sublime.JPG&quot; alt=&quot;Plugin Preferences&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I started to poke around with it to see if I can make it work. So far:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Find pexpect, I didn’t know what pexpect does. According to the github description it’s a Python module for controlling interactive programs in a pseudo-terminal&lt;/li&gt;
  &lt;li&gt;I needed the FSharpAutocomplete.exe, so I grab the sources and build, I had to get the F#  compiler services package (switch nuget package explorer to pre-release)&lt;/li&gt;
  &lt;li&gt;In sublime 3, I had to learn about &lt;a href=&quot;[https://sublime.wbond.net/docs/usage]&quot;&gt;packages&lt;/a&gt; and how they work  (I always wanted an excuse for this anyway)&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;After less than an hour I’m pretty much up and running from a setup point of view (I think) but getting an error when I try to build the package, I think it might be the version of pexpect, though the download page said “Pexpect now requires at least Python 2.6 or 3.2.” I have 2.7.5, the error is&lt;/p&gt;

    &lt;p&gt;*** Error compiling ‘C:\Users\Andrea\AppData\Roaming\Sublime Text 3\Packages\FSharpAutocomplete\lib\pexpect-3.0b1\examples\astat.py’…
  Traceback (most recent call last):
    File “X/py_compile.py”, line 121, in compile
    File “C:\Users\Andrea\AppData\Roaming\Sublime Text 3\Packages\FSharpAutocomplete\lib\pexpect-3.0b1\examples\astat.py”, line 39
      print globals()[‘&lt;strong&gt;doc&lt;/strong&gt;’]
                  ^
  SyntaxError: invalid syntax&lt;/p&gt;

    &lt;p&gt;During handling of the above exception, another exception occurred:&lt;/p&gt;

    &lt;p&gt;Traceback (most recent call last):
    File “X/compileall.py”, line 115, in compile_file
    File “X/py_compile.py”, line 125, in compile
  py_compile.PyCompileError:   File “C:\Users\Andrea\AppData\Roaming\Sublime Text 3\Packages\FSharpAutocomplete\lib\pexpect-3.0b1\examples\astat.py”, line 39
      print globals()[‘&lt;strong&gt;doc&lt;/strong&gt;’]
                  ^
  SyntaxError: invalid syntax&lt;/p&gt;

    &lt;p&gt;During handling of the above exception, another exception occurred:&lt;/p&gt;

    &lt;p&gt;Traceback (most recent call last):
    File “package_control.commands.create_package_command in C:\Users\Andrea\AppData\Roaming\Sublime Text 3\Installed Packages\Package Control.sublime-package”, line 29, in on_done
    File “package_control.package_manager in C:\Users\Andrea\AppData\Roaming\Sublime Text 3\Installed Packages\Package Control.sublime-package”, line 398, in create_package
    File “X/compileall.py”, line 61, in compile_dir
    File “X/compileall.py”, line 61, in compile_dir
    File “X/compileall.py”, line 61, in compile_dir
    File “X/compileall.py”, line 56, in compile_dir
    File “X/compileall.py”, line 122, in compile_file
  AttributeError: ‘_LogWriter’ object has no attribute ‘encoding’&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I updated to &lt;a href=&quot;[http://www.python.org/download/releases/3.2/]&quot;&gt;python 3.2&lt;/a&gt; and now I’m getting a different error, leaving it here for tonight but will pick it up again as soon as possible.&lt;/p&gt;

&lt;p&gt;NOTE: There is one thing that I just realized, if I keep this project this way, it will only work in windows and ideally I would like this to be multi-platform. I need to think about ways to mitigate this.&lt;/p&gt;

</description>
				<pubDate>Sat, 11 Jan 2014 16:11:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/01/11/F-Autocomplete-plugin-for-Sublime/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/01/11/F-Autocomplete-plugin-for-Sublime/</guid>
			</item>
		
			<item>
				<title>Yeppp!... for numbers</title>
				<description>&lt;p&gt;On the interwebz today I found an interesting library that somehow I haven’t heard of before, and it is a few years old, 
I wonder if the low popularity level is due to it’s unconventional name: [Yeppp!][yeppp]&lt;/p&gt;

&lt;h2 id=&quot;what-is-it&quot;&gt;What is it?&lt;/h2&gt;

&lt;p&gt;Yeppp! is a high-performance SIMD-optimized mathematical library for x86, ARM, and MIPS processors on Windows, Android, 
Mac OS X, and GNU/Linux systems. Yeppp! functions are presented in several versions with optimizations for different 
processor microarchitectures. During initialization Yeppp! library detects the processor it is running on, and chooses 
the optimal function implementations. It is also open source with a very friendly commercial licence&lt;/p&gt;

&lt;h2 id=&quot;one-two-one-two&quot;&gt;one, two, one two&lt;/h2&gt;

&lt;p&gt;It sounds cool right, so what can we do with this and most importantly is it any good?&lt;/p&gt;

&lt;p&gt;There is some  graphs and numbers to crunch on the Yeppp website I’m going to be very unortodox(stupid?), not really look at them, and get my hands dirty first.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;nice, 100% unit test code coverage&lt;/li&gt;
  &lt;li&gt;weird, there was no nuget package. Actually the page &lt;a href=&quot;[http://docs.yeppp.info/cs/index.html]&quot;&gt;suggested and msi&lt;/a&gt; (why would it need setup scripts mmm)&lt;/li&gt;
  &lt;li&gt;With the library you get access to a lot of information about cycle stats and architecture information (handy given that the lib is multiplatform) Have a look at the &lt;a href=&quot;[http://docs.yeppp.info/cs/_cpu_info_8cs-example.html]&quot;&gt;CpuInfo sample&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first thing I did was run the examples, I made some small changes so that the code doesn’t do anything obviosuly non performant (like creating a new instance of Random inside a loop) until I ran into an exception in the Entropy sample… researching. Not a &lt;a href=&quot;[https://groups.google.com/forum/#!topic/yeppp-discuss/Jo2i0SpXq2c]&quot;&gt;new problem&lt;/a&gt; (edit 06-01-2014)&lt;/p&gt;

</description>
				<pubDate>Sat, 04 Jan 2014 10:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/01/04/Yeppp/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/01/04/Yeppp/</guid>
			</item>
		
			<item>
				<title>MEF and AppDomains II</title>
				<description>&lt;p&gt;Continuing from yesterday, I was testing how hard it is to work with two domains, I found &lt;a href=&quot;[http://www.codeproject.com/Articles/633140/MEF-and-AppDomain-Remove-Assemblies-On-The-Fly]&quot;&gt;this&lt;/a&gt; and it seemed like a good starting place. I started moving things around to understand how it all fits together, and soon I started getting remoting errors… it made me think, I really don’t want remoting problems to be a normal type of problems you get when of developing plugins, however is not a dead option just yet.&lt;/p&gt;

&lt;p&gt;When using external dependencies in a composed application you can get a &lt;a href=&quot;[http://msdn.microsoft.com/en-us/library/system.componentmodel.composition.primitives.composablepartexception(v=vs.110).aspx]&quot;&gt;&lt;em&gt;ComposablePartException&lt;/em&gt;&lt;/a&gt; temporarily I added the dependency to the main project but I am hoping there is a better way to tell MEF about external dependencies that should be “brought in with a type”.&lt;/p&gt;

&lt;p&gt;BTW if you are playing with debugging capabilities and related, make sure you have the option “Just my code” in options not selected. If messing with appdomains check that the option for debugging other appDomains is enabled.&lt;/p&gt;

&lt;p&gt;Next I am actually trying to integrate this into the project (i.e. where I want this to work) and see what breaks&lt;/p&gt;

&lt;p&gt;The convention based stuff in MEF is truly simple. You use a &lt;a href=&quot;[http://msdn.microsoft.com/en-us/library/system.componentmodel.composition.registration.registrationbuilder%28v=vs.110%29.aspx]&quot;&gt;RegistrationBuilder&lt;/a&gt; to set what types we are interested in, in my case I wanted to get all types derived from an interface, but I tested with a base class and it worked too, when you are doing that you can create a part builder (as below) and this is where you can set the &lt;a href=&quot;[http://msdn.microsoft.com/en-us/library/system.componentmodel.composition.creationpolicy%28v=vs.110%29.aspx]&quot;&gt;creation policy&lt;/a&gt; which helps when you need to set whether there is one shared instance between many imports or you create one per each importer.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c#&quot; data-lang=&quot;c#&quot;&gt;	&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;classPartBuilder&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;regBuilder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ForTypesDerivedFrom&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;();&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;classBuilder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;SetCreationPolicy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CreationPolicy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NonShared&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;When you want to get the exports you can use a &lt;a href=&quot;[http://msdn.microsoft.com/en-us/library/system.componentmodel.composition.hosting.directorycatalog%28v=vs.110%29.aspx]&quot;&gt;DirectoryCatalog&lt;/a&gt; like this&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c#&quot; data-lang=&quot;c#&quot;&gt;	&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;catalog&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;AggregateCatalog&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
	&lt;span class=&quot;c1&quot;&gt;//PluginRelated is the type where all this code lives&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;catalog&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Catalogs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;AssemblyCatalog&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;typeof&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PluginRelated&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Assembly&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_registrationBuilder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
	&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;directoryCatalog&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;DirectoryCatalog&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PluginPath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_registrationBuilder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;catalog&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Catalogs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;directoryCatalog&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;if you want to get the exported types you get a container and compose it&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c#&quot; data-lang=&quot;c#&quot;&gt;	&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;container&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;CompositionContainer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;catalog&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;container&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ComposeExportedValue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;container&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;exports&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;container&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GetExportedValues&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Component&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;();&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;ok, so I hit the dependencies problem, need to read more about this.&lt;/p&gt;

</description>
				<pubDate>Fri, 03 Jan 2014 10:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/01/03/MEF-and-AppDomains-ii/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/01/03/MEF-and-AppDomains-ii/</guid>
			</item>
		
			<item>
				<title>MEF and AppDomains</title>
				<description>&lt;p&gt;The last few days I’ve been playing with MEF.&lt;/p&gt;

&lt;p&gt;MEF is pretty cool, it allows you to recompose your application on the fly so I thought I should try it, I ended up looking at &lt;a href=&quot;[http://codebetter.com/glennblock/2010/06/13/way-of-mef-slides-and-code/]&quot;&gt;“The Way of MEF”&lt;/a&gt;, a series of samples from Glenn Block, pretty good to look at some code and understand what can you do in a clear way. I wish there was a video to go with it because you get the sense that he had a lot to say while those slides were rolling. Anyway, the samples were great,&lt;/p&gt;

&lt;p&gt;I think there are better places to learn about MEF, I compiled a bundle of links &lt;a href=&quot;[http://bitly.com/bundles/roundcrisis/5]&quot;&gt;here&lt;/a&gt;, some cool things&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;MEF is available in .net 4.5 (no dependencies yay!) tho available in other versions of .net&lt;/li&gt;
  &lt;li&gt;it uses a convention based config if you want (I’m sure a lot of work has gone into it)&lt;/li&gt;
  &lt;li&gt;With MEF you can deal with unknown types and can fetch new types from a catalog (I tried the assembly catalog only so far)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What I am trying to achieve is to be able to reload new versions of a type on the fly, not only at runtime, at debug time too. The first part is possible within one AppDomain, however not so, the second part (the debuggin part) you can see some code I was trying this with in &lt;a href=&quot;[https://github.com/Andrea/TempMEF]&quot;&gt;this github repo&lt;/a&gt; (this is really one of the samples from Way of MEF, with a few changes but nothing big). I am sure you are wondering, why, why is it not possible to Debug? Well, it depends :) you can actually debug a little bit but as soon as you start trying to reflect on types you hit the error: “The type &amp;lt;your type&amp;gt; is available in both assembly.dll and assembly.dll” this points to a solution with multiple AppDomains, and I am trying to avoid that.&lt;/p&gt;

&lt;p&gt;By the way, in the github sample above I hit a problem, if build, run the exe from the bin/Debug folder while you have the solution open in VS and recompile &lt;em&gt;Bar&lt;/em&gt; then the instance will be copied as expected but not updated, if you build from anywhere else (including a different instance of VS) then all is peachy.&lt;/p&gt;

&lt;p&gt;I ll report again when I figure what is the impact on my case for multiple AppDomains or if I find an alternative solution.&lt;/p&gt;

</description>
				<pubDate>Thu, 02 Jan 2014 16:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2014/01/02/MEF-and-AppDomains/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2014/01/02/MEF-and-AppDomains/</guid>
			</item>
		
			<item>
				<title>Moved to Jekyll!</title>
				<description>&lt;p&gt;I have moved my blog from wordpress to Jekyll. It was a process a little bit longer than I expected and I am not done with it, but I’m glad to have started the process.&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href=&quot;http://jekyllrb.com&quot;&gt;Jekyll docs&lt;/a&gt; for more info on how to get the most out of Jekyll. File all bugs/feature requests at &lt;a href=&quot;https://github.com/mojombo/jekyll&quot;&gt;Jekyll’s GitHub repo&lt;/a&gt;.&lt;/p&gt;

</description>
				<pubDate>Tue, 31 Dec 2013 23:40:10 +0000</pubDate>
				<link>http://roundcrisis.com/2013/12/31/welcome-to-jekyll/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2013/12/31/welcome-to-jekyll/</guid>
			</item>
		
			<item>
				<title>2013 in review and moving on</title>
				<description>&lt;p&gt;The WordPress.com stats helper monkeys prepared a 2013 annual report for this blog.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.com/2013/annual-report/&quot;&gt;&lt;img src=&quot;http://www.wordpress.com/wp-content/mu-plugins/annual-reports/img/2012-emailteaser.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here’s an excerpt:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The concert hall at the Sydney Opera House holds 2,700 people. This blog was viewed about &lt;strong&gt;31,000&lt;/strong&gt; times in 2013. If it were a concert at Sydney Opera House, it would take about 11 sold-out performances for that many people to see it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.wordpress.com/2013/annual-report/&quot;&gt;Click here to see the complete report.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m moving the blog over to github, the transition involves more steps than I would like, but still I think it will be worth it. If you want to see how it’s going check &lt;a href=&quot;http://andrea.github.io/&quot;&gt;here, &lt;/a&gt;this blog at roundcrisis.wordpress.com will stay live until the transition is complete.&lt;/p&gt;

&lt;h2 id=&quot;happy-new-year&quot;&gt;Happy new year!!&lt;/h2&gt;
</description>
				<pubDate>Tue, 31 Dec 2013 14:37:32 +0000</pubDate>
				<link>http://roundcrisis.com/2013/12/31/2013-in-review-and-moving-on/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2013/12/31/2013-in-review-and-moving-on/</guid>
			</item>
		
			<item>
				<title>Multithreaded game engine -Using Concurrent collections instead</title>
				<description>&lt;p&gt;So, while I was trying to implement the double buffer (previous post available &lt;a href=&quot;[http://roundcrisis.com/2013/05/24/multithreading-rendering-in-a-game-engine-with-cdouble-buffer-implementation/]&quot;&gt;here&lt;/a&gt;) I started thinking about perhaps a simpler implementation with one of the concurrent collections, so I tried with a &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/dd267265.aspx&quot;&gt;ConcurrentQueue&amp;lt;T&amp;gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The idea behind it is pretty simple. Instead of having the two collections of RenderCommand we have a ConcurrentQueue&amp;lt;RenderCommand[]&amp;gt; so we think of each of the elements of the queue as a frame, ready to be rendered.&lt;/p&gt;

&lt;p&gt;As before, we are starting off with the primitives3DWindows sample. A bit obvious, but, we’ll need to initialize the queue on the constructor of the Renderer class(I just thought I’d mention that).&lt;/p&gt;

&lt;p&gt;From the world We’ll add all necessary cubes to a renderCommand, using the AddCube() method. At the end, we’ll need to add that collection to the queue by calling EndFrame(). Like this&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;public void AddCube(Cube primitive)
{
    var translation = Matrix.CreateFromYawPitchRoll(
        primitive.Rotation.X, primitive.Rotation.Y, primitive.Rotation.Z) * 
        Matrix.CreateTranslation(primitive.Position);
    _updatingRenderCommands.Add(new RenderCommand
                                    {
                                        Color = primitive.Color, 
                                        Radius = primitive.Radius, 
                                        World = translation
                                    });
}
 
public void EndFrame()
{
    var renderCommands = new RenderCommand[_updatingRenderCommands.Count];
    _updatingRenderCommands.CopyTo(renderCommands, 0);
    _concurrentRenderCommandsThatRepresentAFrame.Enqueue(renderCommands);
    _updatingRenderCommands.Clear();
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;These methods are public because they are called from World, however, as you can see from the sequence diagram below we check if the renderer CanAcceptCommands(), the reason for this is that we don’t regulate how often we run world.Update() and in reality we only want to have one frame (or RenderCommand collection ready to render) when we call Draw so that there is no latency.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2013/06/capture.png&quot; alt=&quot;alt text&quot; title=&quot;Update Loop&quot; /&gt;&lt;/p&gt;

&lt;p&gt;With the update done, we now need to render. At this point this is pretty trivial. Code below&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;public void Draw(Matrix view, Matrix projection)
{
    RenderCommand[] renderCommands;
    if (!_concurrentRenderCommandsThatRepresentAFrame.TryDequeue(out renderCommands))
        return;
 
    foreach (var renderingRenderCommand in renderCommands)
    {
        _cubePrimitive.Draw(
                              renderingRenderCommand.World, 
                              view, 
                              projection, 
                              renderingRenderCommand.Color);
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I think what is happening here is pretty self explanatory, but I will do it anyway.  If we call Draw() and we TryDequeue and we can’t we call return, there is no point in trying to Draw and empty array of RenderCommands (I believe that would be the result). Alternatively if we successfully dequeue, we will let the CubePrimitive draw each of the commands.&lt;/p&gt;

&lt;h3 id=&quot;analysis&quot;&gt;Analysis&lt;/h3&gt;

&lt;p&gt;It seems to me that this implementation is easier to follow and implement that the previous one, however I took some performance data and this is the result:&lt;/p&gt;

&lt;p&gt;Double Buffer
&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2013/06/image_thumb.png?w=441&amp;amp;h=35&quot; alt=&quot;alt text&quot; title=&quot;Update Loop&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Concurrent Queue
&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2013/06/image_thumb1.png?w=441&amp;amp;h=35&quot; alt=&quot;alt text&quot; title=&quot;Update Loop&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Green means execution time, and red means synchronization time.&lt;/p&gt;

&lt;p&gt;I think what these graphs tell is that double buffer is more efficient because concurrentqueue uses spin waits to synchronize, so it shows up in the thread analysis as execution time, where the previous double buffer implementation shows up as synchronization time, meaning the threads are just asleep.&lt;/p&gt;

&lt;p&gt;Next I’m going to try with a concurrent collection that doesn’t use spin wait: BlockingCollection&amp;lt;T&amp;gt;.&lt;/p&gt;

</description>
				<pubDate>Sat, 22 Jun 2013 21:40:10 +0000</pubDate>
				<link>http://roundcrisis.com/2013/06/22/multithreaded-game-engineusing-concurrent-collections-instead/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2013/06/22/multithreaded-game-engineusing-concurrent-collections-instead/</guid>
			</item>
		
			<item>
				<title>Multithreading rendering in a game engine with C# - Double buffer implementation</title>
				<description>&lt;p&gt;A game running at 60FPS needs to render every 16 milliseconds, meaning
  that all the logic for collision detection, animation, obstacle avoidance,
  physics, etc. must happen in that very short time. You also need to prepare
  for rendering and then send the instructions to the GPU. Multithreading see
  ms like a most reasonable option if you have more than one core available
  (and who doesn’t these days).&lt;/p&gt;

&lt;p&gt;One of the ways to do multithreading rendering in games is using a double
  buffer. At a high level the concept is simple: given two threads update and
  render, use one to fill a buffer with commands that have enough info to
  render(we’ll call them &lt;strong&gt;RenderCommands&lt;/strong&gt;), once completed
  switch buffers while the other thread renders the RenderCommands in the
  original buffer.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://altdevblogaday.com/wp-content/uploads/2011/07/04.png&quot; target=&quot;_blank&quot;&gt;&lt;img height=&quot;33&quot; src=&quot;http://altdevblogaday.com/wp-content/uploads/2011/07/04.png&quot; style=&quot;margin:0 0 0 5px;&quot; width=&quot;512&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Graph and possibly a better explanation of double buffer from &lt;a href=&quot;http://bit.ly/110JuB3&quot; title=&quot;http://bit.ly/110JuB3&quot;&gt;http://bit.ly/110JuB3&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You might be wondering what is a render command, well it’s the smallest
  amount of information we need to send to the GPU so that it can render what
  we want it to render. A Render command for a cube only engine (ie our engine
  can only draw cubes) can be as simple as:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c#&quot; data-lang=&quot;c#&quot;&gt; &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;RenderCommand&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Radius&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Color&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Color&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Matrix&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;World&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;There are many ways to implement this double buffer technique. The
  implementation we are going to see in this example is based on Quake 3 source
  code using modern C# to implement it. Questions, comments and optimizations
  welcome :D. By the way, a really in-depth review of the code is available
  &lt;a href=&quot;http://fabiensanglard.net/quake3/index.php&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;The idea&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;The update thread is the red one and the render thread is the blue
  one.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2013/05/image.png&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;117&quot; src=&quot;http://roundcrisis.files.wordpress.com/2013/05/image_thumb.png?w=280&amp;amp;h=117&quot; style=&quot;background-image:none;padding-top:0;padding-left:0;margin:0 0 0 5px;display:inline;padding-right:0;border-width:0;&quot; title=&quot;image&quot; width=&quot;280&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The diagram above describes the flow of the update thread(red) and
  rendering thread(blue), the hatched squares represent blocking.&lt;/p&gt;

&lt;p&gt;At the initial stage, the render thread will be waiting for the render
  commands to become available, it will be signalled from the update thread.
  Once that happens, the render thread will swap the buffers, signal to the
  update thread that the commands have swapped and that the render thread is
  ready to start drawing and start drawing.&lt;/p&gt;

&lt;p&gt;This signalling process works well also for the situation when the update
  frame takes longer to update and the render thread needs to wait for the
  render commands to become available.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2013/05/image1.png&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;157&quot; src=&quot;http://roundcrisis.files.wordpress.com/2013/05/image_thumb1.png?w=313&amp;amp;h=157&quot; style=&quot;background-image:none;padding-top:0;padding-left:0;margin:0 0 0 5px;display:inline;padding-right:0;border-width:0;&quot; title=&quot;image&quot; width=&quot;313&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally the situation where rendering takes longer is also covered, as we
  see in the the update thread is waiting until rendering is finished&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2013/05/image3.png&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;114&quot; src=&quot;http://roundcrisis.files.wordpress.com/2013/05/image_thumb3.png?w=288&amp;amp;h=114&quot; style=&quot;background-image:none;padding-top:0;padding-left:0;margin:0 0 0 5px;display:inline;padding-right:0;border-width:0;&quot; title=&quot;image&quot; width=&quot;288&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;The implementation&lt;/h3&gt;

&lt;p&gt;For the purposes of this example we will be using XNA. To have something
  to show and compare against, I’m starting off with the&amp;nbsp; &lt;a href=&quot;http://xbox.create.msdn.com/en-US/education/catalog/sample/primitives_3d&quot; target=&quot;_blank&quot;&gt;3d primitives sample&lt;/a&gt; from XNA Creators code club.&lt;/p&gt;

&lt;p&gt;I am going to skip the details about how to draw vertices, there are many
  other blog posts that cover that and focus on the threading and concurrency
  issues.&lt;/p&gt;

&lt;p&gt;So, for a start we need to create the update thread. To that effect we
  will instantiate a class called UpdateLoop in a Task that will simply loop on
  executing Update as follows.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c#&quot; data-lang=&quot;c#&quot;&gt; &lt;span class=&quot;n&quot;&gt;Task&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Factory&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;StartNew&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; 
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gl&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;UpdateLoop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_renderer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;gl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Loop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;The loop in UpdateLoop: (Note: the loop is not time stepped, ie you should
  not use a while(true) like this in production).&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c#&quot; data-lang=&quot;c#&quot;&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Loop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;_stopwatch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;Update&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;The code for the loop is (i think) pretty self explanatory, when calling
  Update in line 5 it will follow the sequence as described in diagram
  below.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2013/05/capture12.png&quot;&gt;&lt;img alt=&quot;Update loop sequence diagram&quot; border=&quot;0&quot; height=&quot;262&quot; src=&quot;http://roundcrisis.files.wordpress.com/2013/05/capture1_thumb2.png?w=283&amp;amp;h=262&quot; style=&quot;background-image:none;padding-top:0;padding-left:0;margin:0 0 0 5px;display:inline;padding-right:0;border-width:0;&quot; title=&quot;Update loop sequence diagram&quot; width=&quot;283&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is probably interesting to see what &lt;em&gt;AddCube&lt;/em&gt;() looks like :&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c#&quot; data-lang=&quot;c#&quot;&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;AddCube&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Cube&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;primitive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;translation&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Matrix&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;CreateFromYawPitchRoll&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
                            &lt;span class=&quot;n&quot;&gt;primitive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Rotation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
                            &lt;span class=&quot;n&quot;&gt;primitive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Rotation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
                            &lt;span class=&quot;n&quot;&gt;primitive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Rotation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;*&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;Matrix&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;CreateTranslation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;primitive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Position&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
 
    &lt;span class=&quot;n&quot;&gt;_updatingRenderCommands&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RenderCommand&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;n&quot;&gt;Color&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;primitive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
                    &lt;span class=&quot;n&quot;&gt;Radius&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;primitive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Radius&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
                    &lt;span class=&quot;n&quot;&gt;World&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;translation&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;As you can see from the sequence diagram, after looping on
  &lt;em&gt;renderer.AddCube()&lt;/em&gt; there is a call to &lt;em&gt;renderer.EndFrame()&lt;/em&gt;,
  here is where we need to signal that the render commands are ready and the
  update thread will be now waiting for the render buffers to be swapped.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c#&quot; data-lang=&quot;c#&quot;&gt; &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;EndFrame&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
 	&lt;span class=&quot;n&quot;&gt;_renderCompleted&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WaitOne&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; 
 	&lt;span class=&quot;n&quot;&gt;_renderComandsReady&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; 
 	&lt;span class=&quot;n&quot;&gt;_renderActive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WaitOne&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; 
 &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;From the render thread point of view, this is what the sequence diagram
  looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2013/05/capture3.png&quot;&gt;&lt;img alt=&quot;Draw call sequence diagram&quot; border=&quot;0&quot; height=&quot;250&quot; src=&quot;http://roundcrisis.files.wordpress.com/2013/05/capture_thumb2.png?w=283&amp;amp;h=250&quot; style=&quot;background-image:none;padding-top:0;padding-left:0;margin:0 0 0 5px;display:inline;padding-right:0;border-width:0;&quot; title=&quot;Draw call sequence diagram&quot; width=&quot;283&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In my game class (the main class that inherits from XNA’s game class) , in
  Draw(), we call _renderer.Draw():&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c#&quot; data-lang=&quot;c#&quot;&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;  &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Draw&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GraphicsDevice&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;device&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Matrix&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Matrix&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;projection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;_renderActive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Reset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;_renderCompleted&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;_renderComandsReady&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;WaitOne&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
 
    &lt;span class=&quot;n&quot;&gt;_renderCompleted&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Reset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;_renderComandsReady&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Reset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;SwapBuffers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;_renderActive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
 
    &lt;span class=&quot;n&quot;&gt;_cubePrimitive&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_cubePrimitive&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;??&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;CubePrimitive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;device&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;renderingRenderCommand&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_renderingRenderCommands&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;_cubePrimitive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Draw&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;renderingRenderCommand&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;World&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
                                    &lt;span class=&quot;n&quot;&gt;view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
                                    &lt;span class=&quot;n&quot;&gt;projection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
                                    &lt;span class=&quot;n&quot;&gt;renderingRenderCommand&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Color&lt;/span&gt;
                                    &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;This is probably the most complex method in the whole example. The
  _renderActive is reset because at this point we want the update thread to
  block when on wait, this was set to wait from &lt;em&gt;_renderer.EndFrame().&lt;/em&gt;
  We set _renderCompleted&amp;nbsp; here to unblock the update thread and then we
  wait for _renderCommandsReady to be signalled, effectively putting the
  renderer to sleep until there are more commands to render.&lt;/p&gt;

&lt;p&gt;Before calling SwapBuffers() _renderCompleted is reset so that if the
  update thread reaches the end of a frame, it will sleep until the render
  thread has finished swapping the buffers.&lt;/p&gt;

&lt;p&gt;Immediately after, a call to reset _renderCommandsReady ensures that the
  render thread will go to sleep on the next Draw call until there are some
  commands to render.&lt;/p&gt;

&lt;p&gt;I am not terribly sure the explanation above is clearer than the actual
  code to be honest, but after &lt;span style=&quot;text-decoration: line-through&quot;&gt;4&lt;/span&gt; 6 attempts I’m giving up.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c#&quot; data-lang=&quot;c#&quot;&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;  &lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;SwapBuffers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
     
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_updatingRenderCommands&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_bufferedRenderCommandsA&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;_updatingRenderCommands&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_bufferedRenderCommandsB&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;_renderingRenderCommands&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_bufferedRenderCommandsA&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
 
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_updatingRenderCommands&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_bufferedRenderCommandsB&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;_updatingRenderCommands&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_bufferedRenderCommandsA&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;_renderingRenderCommands&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_bufferedRenderCommandsB&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;_updatingRenderCommands&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Clear&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Finally SwapBuffers(). There’s no synchronization happening here so, we
  are just switching buffers. Before calling this method the
  _renderComandsReady was blocked&lt;/p&gt;

&lt;p&gt;And that is pretty much all, the complete sample is available from
  &lt;a href=&quot;https://github.com/Andrea/c4g/tree/master/MutithreadingWithDoubleBufferLockFree&quot; target=&quot;_blank&quot;&gt;github&lt;/a&gt; .&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;References and interesting related articles&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;Most excellent Quake 3 code review &lt;a href=&quot;http://fabiensanglard.net/quake3/index.php&quot;&gt;http://fabiensanglard.net/quake3/index.php&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Threading your game loop &lt;a href=&quot;http://www.altdevblogaday.com/2011/07/03/threading-and-your-game-loop/&quot;&gt;http://www.altdevblogaday.com/2011/07/03/threading-and-your-game-loop/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the craic &lt;a href=&quot;http://en.wikipedia.org/wiki/Multiple_buffering&quot;&gt;http://en.wikipedia.org/wiki/Multiple_buffering&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
</description>
				<pubDate>Fri, 24 May 2013 12:40:10 +0000</pubDate>
				<link>http://roundcrisis.com/2013/05/24/multithreading-rendering-in-a-game-engine-with-cdouble-buffer-implementation/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2013/05/24/multithreading-rendering-in-a-game-engine-with-cdouble-buffer-implementation/</guid>
			</item>
		
			<item>
				<title>The dying platform: .Net</title>
				<description>&lt;p&gt;For the last few years I have been writing code in C#. I think C# and .net are great tools to write software. I find that C# is exactly where I need it to be, I can do low level when I need to work with pretty high level abstraction (ish). However the world (unfortunately) doesn’t do what I want and it feels like the momentum .net had is certainty fading.&lt;/p&gt;

&lt;p&gt;These are some reasons why I think this is happening (not all related directly to programing)&lt;/p&gt;

&lt;p&gt;These are some reasons why I think this is happening (not all related directly to programing)&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Inherent hatred for Microsoft and anything it does, even if it is good. I think is pretty sad since I see this attitude from people that should be objective from a technical standpoint, licensing can’t always be an issue.&lt;/li&gt;
  &lt;li&gt;Windows 8 and WinRT with it’s confusing .net support. It doesn’t help when it comes to .net developers either. It seems like their intention was to bring in the “cool kids(?)” but with that they alienated the people that supported them.&lt;/li&gt;
  &lt;li&gt;All the windows phones, and particularly the WP7 fail (no update path for win 8). It is fail from a commercial standpoint and from developer support, how can you spend any significant amount of time with a platform that you don’t know is going to be there in a year or if there is any support for it.&lt;/li&gt;
  &lt;li&gt;Half arsed open sourcing, by this I mean, you can read the code but no thanks, we don’t take pull requests Sad smile.Also, the very common not invented here that MS keeps doing (Monorail vs MVC, Nunit vs MStest, NHibernate vs EF, and many others ).&lt;/li&gt;
  &lt;li&gt;Tablets and the fact that MS doesn’t have a significant share on any of this, so for many the digital experience is via apple or android.&lt;/li&gt;
  &lt;li&gt;For me, killing XNA. A great SDK, suddenly abandoned. Why? no one ever gave a reason I can remember (can you?)&lt;/li&gt;
  &lt;li&gt;XBOX vnext rumoured online only putting a nail on the XBOX coffin.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4 id=&quot;what-could-save-it--maybe&quot;&gt;What could save it  (maybe)&lt;/h4&gt;

&lt;ol&gt;
  &lt;li&gt;Strangely, Xamarin because of their amazing mobile tools based on mono . Unity helps too, but I do wonder about what they have in mind for the future&lt;/li&gt;
  &lt;li&gt;Aliens?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Edit: Maybe F#?&lt;/p&gt;

</description>
				<pubDate>Wed, 15 May 2013 10:40:10 +0000</pubDate>
				<link>http://roundcrisis.com/2013/05/15/the-dying-platform-net/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2013/05/15/the-dying-platform-net/</guid>
			</item>
		
			<item>
				<title>More Mono for android (Xamarin.Android) little tips.</title>
				<description>&lt;p&gt;Mono for android or Xamarin.Android little tips:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;If you turn on GPU emulation, sometimes GPU emulation doesn’t actually start, it downgrades to software rendering, this makes the emulator slower and it doesn’t actually uses OpenGL(if you are using monogame, this means your game would probably not work).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you are looking for a grid like component that stretches with a fix number of grids, I couldn’t find one. Had to write my own and the code is ugly &lt;img src=&quot;http://roundcrisis.files.wordpress.com/2013/03/wlemoticon-sadsmile.png&quot; alt=&quot;Sad smile&quot; /&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;You can use ScreenOrientation = ScreenOrientation.Portrait as an attribute in your activity and ConfigurationChanges = ConfigChanges.Orientation is also an activity attribute that prevents the activity from restarting when orientation changes.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Xamarin just announced support for C# 5 features in the mobiles suites, very exciting news… more details &lt;a href=&quot;http://blog.xamarin.com/brave-new-async-mobile-world/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Tomorrow, post about &lt;a href=&quot;http://monogame.net&quot;&gt;monogame&lt;/a&gt; stuff.&lt;/p&gt;
</description>
				<pubDate>Fri, 15 Mar 2013 16:22:57 +0000</pubDate>
				<link>http://roundcrisis.com/2013/03/15/more-mono-for-android-xamarin-android-little-tips/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2013/03/15/more-mono-for-android-xamarin-android-little-tips/</guid>
			</item>
		
			<item>
				<title>Monogame presentation at #gig2013 and #gamesFleadh</title>
				<description>&lt;p&gt;I did a few presentations about &lt;a href=&quot;http://monogame.net/&quot;&gt;Monogame&lt;/a&gt; in Gaming Reimagined (at what used to &lt;a href=&quot;http://monogame.net&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2013/03/monogamelogo512x512.png&quot; alt=&quot;MonogameLogo512x512&quot; /&gt;&lt;/a&gt;be the Landsdowne Road Stadium) and in &lt;a href=&quot;http://gamesfleadh.ie&quot;&gt;Games Fleadh&lt;/a&gt;, if you were there I would really appreciate your feedback (good and bad, please just leave a comment here).&lt;/p&gt;

&lt;p&gt;The slides are available &lt;a href=&quot;https://speakerdeck.com/roundcrisis/monogame-3&quot;&gt;here&lt;/a&gt;. I will make the code available soon and update this post. There is a video for it here&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/Dh0ohg4XdQo&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;During both events there was some pretty cool talks. About both the industry and making games.&lt;/p&gt;

&lt;p&gt;During Games Fleadh I Particularly enjoyed listening to Steve Ewart from &lt;a href=&quot;http://www.havok.com/&quot;&gt;Havok&lt;/a&gt; showcase his many cool demos and the guys from &lt;a href=&quot;http://www.deamonware.net/&quot;&gt;DemonWare&lt;/a&gt; talk about their experiences in their company and it some of the big games studios.&lt;/p&gt;

&lt;p&gt;Kudos to the organizers of both events and Congratulations to all the award winners of Games Fleadh awards: &lt;a href=&quot;http://bitsmithgames.com/&quot;&gt;bitsmith&lt;/a&gt; got Best Games and an awesome tank.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://fbcdn-sphotos-g-a.akamaihd.net/hphotos-ak-prn1/417655_423892397643008_1581504652_n.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Pic from Bryan Duggan (&lt;a href=&quot;https://www.facebook.com/media/set/?set=a.423888310976750.1073741831.113468182018766&amp;amp;type=1&quot;&gt;https://www.facebook.com/media/set/?set=a.423888310976750.1073741831.113468182018766&amp;amp;type=1&lt;/a&gt;)&lt;/p&gt;
</description>
				<pubDate>Fri, 15 Mar 2013 16:06:25 +0000</pubDate>
				<link>http://roundcrisis.com/2013/03/15/monogame-presentation-at-gig2013-and-gamesfleadh/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2013/03/15/monogame-presentation-at-gig2013-and-gamesfleadh/</guid>
			</item>
		
			<item>
				<title>Mono for Android - Beyond getting started</title>
				<description>&lt;p&gt;A few weeks ago I bit the bullet and bought Mono for Android. I also decided to update to all devices to Ice Cream Sandwich as the UI is just so much better. Should have done that ages ago, but I was just afraid Kies would brick my phone again.&lt;/p&gt;

&lt;p&gt;Anyway, the new features that I’m sure anyone interested in android development already know about: Services, fragments, new UI. Cool stuff, it also meant a lot to learn &lt;img src=&quot;http://roundcrisis.files.wordpress.com/2013/02/wlemoticon-openmouthedsmile.png&quot; alt=&quot;Open-mouthed smile&quot; /&gt;.&lt;/p&gt;

&lt;p&gt;Some things that you might want to try out if you are starting this out:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Preferably have a device or two &lt;img src=&quot;http://roundcrisis.files.wordpress.com/2013/02/wlemoticon-winkingsmile.png&quot; alt=&quot;Winking smile&quot; /&gt;, the emulator is slow. &lt;a href=&quot;http://docs.xamarin.com/guides/android/deployment%2C_testing%2C_and_metrics/configuring_the_x86_emulator&quot;&gt;The x86 emulator&lt;/a&gt; is an interesting option, it didn’t work for me initially but then I tried a few different virtual devices and then you could really see the benefits… way faster. Still is good to deploy to the phone often enough.&lt;/li&gt;
  &lt;li&gt;Since android 3.0 there is a new way to do drag drop that works as a state machine. More info in the excellent &lt;a href=&quot;http://blog.neteril.org/blog/2013/01/28/mfa-tricks-number-8-dragging-around/&quot;&gt;Jeremie Laval’s blog&lt;/a&gt;. Check the other posts, they are really cool too.&lt;/li&gt;
  &lt;li&gt;Fragments are trickier to deal with that I thought. Pretty sure I’m doing something wrong (as all times you start learning something new) but I wanted to replace a fragment (with UI elements on it) with another fragment (also with UI elements on it) however if the first fragment was placed there with the layout xml and the second one programmatically, It just didn’t work. It did work when both where placed programmatically. Any hints on this would be great.&lt;/li&gt;
  &lt;li&gt;To use the &lt;a href=&quot;https://developer.android.com/design/style/themes.html&quot;&gt;Holo&lt;/a&gt; Theme across your app, simply add this &lt;a href=&quot;https://gist.github.com/Andrea/5023609&quot;&gt;snipet&lt;/a&gt; to your manifest to your manifest. More on styles &lt;a href=&quot;https://developer.android.com/guide/topics/ui/themes.html&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href=&quot;https://gist.github.com/Andrea/5023609&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2013/02/capture.png&quot; alt=&quot;android manifest segment&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One to check out… there is an android unit test suite &lt;a href=&quot;https://spouliot.wordpress.com/2011/10/30/andr-unit-joins-the-family/&quot;&gt;Andr.unit&lt;/a&gt; (&lt;a href=&quot;https://github.com/spouliot/Andr.Unit&quot;&gt;github repo&lt;/a&gt;)a unit testing framework for android based on &lt;a href=&quot;http://spouliot.wordpress.com/2011/09/28/unit-testing-and-monotouch/&quot;&gt;Touch.Unit&lt;/a&gt;.&lt;/p&gt;
</description>
				<pubDate>Sun, 24 Feb 2013 12:18:10 +0000</pubDate>
				<link>http://roundcrisis.com/2013/02/24/mono-for-androidbeyond-getting-started/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2013/02/24/mono-for-androidbeyond-getting-started/</guid>
			</item>
		
			<item>
				<title>A build system for games</title>
				<description>&lt;p&gt;As you might or might not know, I am one of the founders of BatCat Games, the important word about that sentence is **games. **The fact that we make games put a series of differences into our production that doesn’t generally affect non game software development cycles.&lt;/p&gt;

&lt;p&gt;For a start art and animation are key in a game, so are visual effects. In build server terms, that generally means two things: It requires space(for content building) and quite probably a graphics card (for the visual effects). Our ideal solution would be to have a virtual machine per supported platform , but we found that none of the virtualization software (VirtualBox, VMWare, etc) virtualizes the graphics card reliably (if you found a way, please let me know)  so we are running our server on a non virtual machine.&lt;/p&gt;

&lt;p&gt;The objective is to build the whole game, tools, etc. at each commit. There are a series of tools available in the market at the moment that allows you to do just that. For example: TeamCity, Jenkins, CruiseControl, Hudson.. etc. There is a good comparison matrix &lt;a href=&quot;http://confluence.public.thoughtworks.org/display/CC/CI+Feature+Matrix&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We chose &lt;a href=&quot;http://www.jetbrains.com/teamcity/&quot;&gt;TeamCity&lt;/a&gt;, mostly because we know it, we find it easy to use and it is free.&lt;/p&gt;

&lt;h3 id=&quot;our-setup&quot;&gt;Our setup&lt;/h3&gt;

&lt;p&gt;Our code is based around XNA and &lt;a href=&quot;http://monogame.net/&quot;&gt;monoGame&lt;/a&gt; (recently on version 3).&lt;/p&gt;

&lt;p&gt;We have many projects: a game and engine project, a tool, a library and the content builder. This means we have a diverse project output. For example, in the case of the content, we are not interested in the actual build results (yet) however we are interested in knowing that it did build, and to report errors if it didn’t.&lt;/p&gt;

&lt;p&gt;The game and engine project reside in one solution and have many unit tests. We need the build server to not only build the project and after that run the unit and integration tests. Initially I set this up using &lt;a href=&quot;https://github.com/psake/psake&quot;&gt;psake&lt;/a&gt; (a tool that does the build with PowerShell) this is a great solution if you want to have a one click build, so I gave it a try, I found that setting up the tests assemblies was a manual process and that to get psake to talk to TeamCity nicely it would take more time that I had. So I tried running the build directly from TeamCity, and it was easier and I didn’t loose to much flexibility so, I had to go for that solution (however is a decision I will revisit shortly).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2013/01/capture.png&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2013/01/capture_thumb.png&quot; alt=&quot;Capture&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Setting up each of the steps took me approximately 10~20 minutes if done this way. There are a few things that I want to improve on, however the end result is that in a very short time I can have a new project building and reporting.&lt;/p&gt;

&lt;p&gt;Some of the disadvantages of the process as it is are:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;If I want to change the build type I need to do it manually, in this case, the target test assemblies will need to be updated&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;At the moment we are using dropbox as our way to distribute the builds, it is a process some members of our team really like because they just get the new binaries and they can choose when to update (so that there is no friction). I would prefer if the tools would just auto-update, but this is working for the moment.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;summary&quot;&gt;Summary&lt;/h3&gt;

&lt;p&gt;As you can see the server setup is not perfect, there is loads to improve on, but setting this up from early on has proven very helpful. It allows us to have a one click build and a functional way to deliver our tools and product to the people in our team.&lt;/p&gt;

&lt;p&gt;Note: This post was cross posted to &lt;a href=&quot;http://www.gamasutra.com/blogs/AndreaMagnorsky/20130129/185631/A_build_system_for_games.php&quot;&gt;gamasutra&lt;/a&gt;, Thanks to &lt;a href=&quot;http://www.twitter.com/KrisLigman&quot;&gt;Kris &lt;/a&gt; for her help.&lt;/p&gt;
</description>
				<pubDate>Mon, 28 Jan 2013 23:22:02 +0000</pubDate>
				<link>http://roundcrisis.com/2013/01/28/a-build-system-for-games/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2013/01/28/a-build-system-for-games/</guid>
			</item>
		
			<item>
				<title>Mono for android</title>
				<description>&lt;p&gt;I’ve been playing with mono for android the last few days. I have also tried it about 2 years ago. It was a good tool then, and it got much much better.&lt;/p&gt;

&lt;p&gt;Getting started is pretty simple, you download the ins&lt;img src=&quot;http://blog.xamarin.com/wp-content/uploads/2012/05/android-i86.png&quot; alt=&quot;&quot; /&gt;taller, install. It will install all prerequisites for you on your machine. Allegedly this failed the first time but worked the second time, I had a log to look at to give me some idea of the problem.&lt;/p&gt;

&lt;p&gt;Once I got set up I started reading the documentation. Not only it was in place, but also, it was written to the right level (i.e. assumes you are a smart individual), I then moved on to pricing, 400 usd ouch, but I will come back to this. If you don’t activate the product you can test on the emulator. It gives you some sort of idea of what the experience is like. The emulator is slow, and brittle, but that is something we should talk to Google about.&lt;/p&gt;

&lt;p&gt;At this point I started going over some tutorials, using both monodevelop and VS just for the fun of it. The main thing I miss from VS when I’m in monodevelop is &lt;a href=&quot;http://www.jetbrains.com/resharper/&quot;&gt;resharper&lt;/a&gt; &lt;img src=&quot;http://roundcrisis.files.wordpress.com/2013/01/wlemoticon-sadsmile.png&quot; alt=&quot;Sad smile&quot; /&gt;. I had no real troubles getting on with creating a little app (a games reviews collector) .&lt;/p&gt;

&lt;p&gt;I went ahead and bought the license, activated and pushed to the device and it is much faster than using the emulator.&lt;/p&gt;

&lt;p&gt;One gotcha was that I wanted to write files and then be able to access them via USB, I kept getting a file permission error, I needed to set up the permission on the manifest file, it wasn’t obvious to me, but that is ok. All the information I needed was &lt;a href=&quot;http://docs.xamarin.com/Android/Guides/Advanced_Topics/Working_with_AndroidManifest.xml&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Deployment to other devices is also pretty simple, you build the app on release mode and use the *-Signed.apk, there are other ways to deploy &lt;a href=&quot;http://docs.xamarin.com/Android/Guides/Deployment%2C_Testing%2C_and_Metrics/publishing_an_application&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Mostly the reason for this blog post is that I was a bit surprised with how good an experience it was (so far) .&lt;/p&gt;

&lt;p&gt;Next I will be working with some eventually connected storage, I heard good things about &lt;a href=&quot;https://www.parse.com/&quot;&gt;Parse&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I gave myself a pomodoro to finish this post, so I’ll have to talk about pricing in tools some other time &lt;img src=&quot;http://roundcrisis.files.wordpress.com/2013/01/wlemoticon-smile.png&quot; alt=&quot;Smile&quot; /&gt;.&lt;/p&gt;

&lt;p&gt;Till the next time&lt;/p&gt;
</description>
				<pubDate>Sat, 12 Jan 2013 13:24:15 +0000</pubDate>
				<link>http://roundcrisis.com/2013/01/12/mono-for-android/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2013/01/12/mono-for-android/</guid>
			</item>
		
			<item>
				<title>DirectoryTruncator - Update II</title>
				<description>&lt;p&gt;So, after the last post, where I &lt;a href=&quot;http://roundcrisis.com/2012/12/27/directory-truncator/&quot;&gt;introduced Directory truncator&lt;/a&gt;, I present you some extra work I have just committed. My plans for it from the previous post where&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Logging and or console output so you know what happened, I couldn’t so far decide on what is the best approach or if I want to choose one, so I ll do that tomorrow .&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;On error, proceed to the next file/folder.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Have a StartsWith parameter(on both methods), so that it only deletes files or directory that start with&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Turn it into a service&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So, this is what happened,&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;After thinking a little bit about it, I just went for NLog, it does what I need it to do for the moment. Logs need no test, so I added a few log messages, there is probably some log messages missing.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;For this one, I ended up making a decision I’m still mulling over. I needed to test that if there is an error on file delete, the process will log and keep going. How to do that? well, I created a thin wrapper around the file system, as far as I could see it, there was no other way to simulate the scenario of you have two files to delete and one of them is deleted before we get to it. I have yet to do this for TruncateByDirectory.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is all for today, and since this is probably the last post of the year. &lt;a href=&quot;[http://www.youtube.com/watch?v=JOiN5TQhP2Q&amp;amp;w=448&amp;amp;h=252&amp;amp;hd=1]&quot;&gt;Merry New Year!!!&lt;/a&gt;&lt;/p&gt;

</description>
				<pubDate>Sun, 30 Dec 2012 22:33:03 +0000</pubDate>
				<link>http://roundcrisis.com/2012/12/30/directorytruncatorupdate-ii/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2012/12/30/directorytruncatorupdate-ii/</guid>
			</item>
		
			<item>
				<title>Directory Truncator</title>
				<description>&lt;p&gt;Recently I needed some code to truncate a directory of files or folders, for example I wanted to remove files or directories given a max number of files or directories. &lt;a href=&quot;http://en.wikipedia.org/wiki/Weaire%E2%80%93Phelan_structure&quot;&gt;&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/commons/9/93/Truncated_octahedra.jpg&quot; alt=&quot;Polyhedral &apos;foam&apos; by truncated octahedra&quot; /&gt;&lt;/a&gt;This is a common task when you have backups and you don’t want every single backup since forever, but you want to keep the last 5 ones. Another common scenario is when you have builds and you only probably want the last 10 (particularly if your build is used only by 4 people that seat across from you).&lt;/p&gt;

&lt;p&gt;Anyhow, I have written similar code in the past and I know I will probably need something that does the same thing in the future, so I created a super small library and I put it on &lt;a href=&quot;https://github.com/Andrea/DirectoryTruncator&quot;&gt;github&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I think the tests explain better what the code does than I do. So have a &lt;a href=&quot;https://github.com/Andrea/DirectoryTruncator/blob/master/DirectoryTruncator.Tests/DirectoryTruncatorTests.cs&quot;&gt;look&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There are a few things that I want to add to this project&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Logging and or console output so you know what happened, I couldnt so far decide on what is the best approach or if I want to choose one, so I ll do that tomorrow .&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;On error, proceed to the next file/folder.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Have a StartsWith parameter(on both methods), so that it only deletes files or directory that start with&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Turn it into a service&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There are probably more things that could be done with it, but honestly, that is all &lt;strong&gt;I&lt;/strong&gt; need.&lt;/p&gt;

&lt;p&gt;Comments, questions or any feedback welcome!&lt;/p&gt;

&lt;p&gt;Note: The image above is totally unrelated but I found it looking for truncated. What I found interesting about it is that the article this image relates to is about the Wearie-Phelan structure, this structure inspired the Beijing National Aquatics Centre and other cool stuff you can read &lt;a href=&quot;http://en.wikipedia.org/wiki/Weaire%E2%80%93Phelan_structure&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Happy holidays&lt;/p&gt;
</description>
				<pubDate>Thu, 27 Dec 2012 14:45:06 +0000</pubDate>
				<link>http://roundcrisis.com/2012/12/27/directory-truncator/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2012/12/27/directory-truncator/</guid>
			</item>
		
			<item>
				<title>XNA PSD ContentProcessor </title>
				<description>&lt;p&gt;I needed a psd content processor and found one &lt;a href=&quot;http://blogs.msdn.com/b/shawnhar/archive/2009/05/21/photoshop-texture-importer-redux.aspx&quot;&gt;here&lt;/a&gt; it is based on the &lt;a href=&quot;http://www.endogine.com/CS/&quot;&gt;EndoEngine&lt;/a&gt;. The one available depended on XNA 3.1,  I did some clean up on the project and made it available via my account on &lt;a href=&quot;http://github.com/Andrea/Photoshop-Content-Processor-for-XNA&quot;&gt;github. &lt;img src=&quot;https://a248.e.akamai.net/assets.github.com/images/error/angry_unicorn.png?1334862345&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We (at &lt;a href=&quot;http://www.batcatgames.com&quot;&gt;BatCat Games&lt;/a&gt;) are working on a Content hot loader that will be available open source soon (at the moment it doesn’t really work ) it will probably include this content processor.&lt;/p&gt;

&lt;p&gt;The code comes with a sample game that displays a Photoshop file as a texture.&lt;/p&gt;
</description>
				<pubDate>Tue, 11 Sep 2012 15:34:53 +0000</pubDate>
				<link>http://roundcrisis.com/2012/09/11/xna-psd-contentprocessor/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2012/09/11/xna-psd-contentprocessor/</guid>
			</item>
		
			<item>
				<title>Fail to add a sprite to XNA content project</title>
				<description>&lt;p&gt;This is not a big one but it’s good to know.&lt;/p&gt;

&lt;p&gt;I was spiking a little thing in a new XNA 4.0 game project and then attempting to include a &lt;em&gt;png&lt;/em&gt; into the content folder, the file was there, I could see it (using show all files menu) but when using the context menu “Include in project” nothing was happening. Why?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2012/08/capture.png&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2012/08/capture_thumb.png&quot; alt=&quot;Capture&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First I thought maybe the file type is not supported, but PNGs are. Then someone pointed out, is this a project on a &lt;a href=&quot;http://blogs.msdn.com/b/shawnhar/archive/2010/03/12/reach-vs-hidef.aspx&quot;&gt;Reach Profile&lt;/a&gt;? textures larger than 2048 are not supported, this was a large sprite-sheet. So, I changed the profile of the project and I was able to Include the file. &lt;img src=&quot;http://roundcrisis.files.wordpress.com/2012/08/wlemoticon-smile.png&quot; alt=&quot;Smile&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Happy Monday&lt;/p&gt;
</description>
				<pubDate>Mon, 06 Aug 2012 10:05:53 +0000</pubDate>
				<link>http://roundcrisis.com/2012/08/06/fail-to-add-a-sprite-to-xna-content-project/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2012/08/06/fail-to-add-a-sprite-to-xna-content-project/</guid>
			</item>
		
			<item>
				<title>Reading Diary: Real World Functional Programming - Day 2</title>
				<description>&lt;p&gt;A reading diary is my way to discuss with myself what I think about the book as I read it. It probably has errors of different kinds.&lt;/p&gt;

&lt;p&gt;Some notes on the remaining of Chapter 1&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;F# intro, how its mostly functional but supports some OO features&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;How C# incorporates functional ideas.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Reading about declarative programming, these made no sense
    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;Definition of declarative programming style. Logic without the details… mmm ok lets see how this goes&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;Functional means not only we can add new commands but also new structures&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Code, finally a code example came about and it was all cleared up&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Concurrency friendly application design, I was expecting the how but I got a birds eye. Patience&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;The section on how functional style shapes your code is cool, as it details how your code will (hopefully) slowly change. It highlights
    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;the fact that OO design is still useful,&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;it helps simplifying some patterns&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;make the code more readable (this I’m not so sure about, I’ve read code from people who started learning functional programming and on my view the code was less readable and harder to follow, particularly on tests)&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Section 1.4 is all example based. Not mad about the fact they used WPF for one of them(not a fan), but no biggie, it gets the point across anyway . The author obviously wanted the reader to understand what declarative and imperative means and understand the difference&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;I can start to see how this style of programming could be really beneficial&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Got as far as the recursion samples with C# (2.2.3)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s all for today. It’s been hard to find time to read up on this.&lt;/p&gt;
</description>
				<pubDate>Mon, 23 Jul 2012 16:32:06 +0000</pubDate>
				<link>http://roundcrisis.com/2012/07/23/reading-diary-real-world-functional-programming-day-2/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2012/07/23/reading-diary-real-world-functional-programming-day-2/</guid>
			</item>
		
			<item>
				<title>Reading Diary: Real World Functional Programming - Day 1</title>
				<description>&lt;p&gt;I‘ve been feeling that I’m missing out by not knowing much about functional programming and this book was recommended to my many times, so I started reading it.&lt;/p&gt;

&lt;h3 id=&quot;expectation&quot;&gt;Expectation&lt;/h3&gt;

&lt;p&gt;I expect to learn more about functional programming, I would like to be able to translate the ideas to other functional programming languages.&lt;/p&gt;

&lt;h3 id=&quot;objective&quot;&gt;Objective&lt;/h3&gt;

&lt;p&gt;I would like to be able to use functional programming ideas day to day on game development, there is a lot of asynchronous flow control in games that I hope, can be improved. The problem with this is that features that are ok to use in other types of development, such as LINQ, don’t perform well enough on game development, at least that’s what the performance analysis was showing us in some sectors of the code.&lt;/p&gt;

&lt;p&gt;I think this objective is perhaps overly optimistic, the world would be too boring for me if I set myself reachable goals all the time, right?&lt;/p&gt;

&lt;h3 id=&quot;intro-and-part-of-chapter-1&quot;&gt;Intro and part of Chapter 1&lt;/h3&gt;

&lt;p&gt;Going over some basic functional ideas, but I’m already feeling I should have read this book earlier. Some comments as I go along:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;There are some parts of the chapter where I feel like the author is trying to sell me the idea, I can understand why, but I’m already reading the book, no need for that.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;I like the way important concepts are highlighted&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Well written, ideas are exposed in a super clear way&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;No point in reading this book in a hurry, If I don’t fully get an idea, I can’t afford to move on&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Leaving it here for today …&lt;/p&gt;
</description>
				<pubDate>Sat, 16 Jun 2012 09:15:31 +0000</pubDate>
				<link>http://roundcrisis.com/2012/06/16/reading-diary-real-world-functional-programming-day-1/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2012/06/16/reading-diary-real-world-functional-programming-day-1/</guid>
			</item>
		
			<item>
				<title>Raven DB: Day to day at #DDDSW</title>
				<description>&lt;p&gt;So I was at &lt;a href=&quot;http://dddsouthwest.com/Agenda/tabid/55/Default.aspx&quot;&gt;DDD South west&lt;/a&gt; last saturday presenting Raven DB: day to day.&lt;/p&gt;

&lt;p&gt;The day flew by with great presentations. I got to see:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Performance and Scalability, the Stack Exchange way by Marc Gravell . I have to admit I didn’t expect that much SQL on the presentation but interesting nonetheless, would really like to hear him talk more about how they use Redis and SQL together more. Also when he started talking about serialization we ran out of time :( There was a lot of questions and Marc did a great job at answering them.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;StyleCop – Breaking down the barriers to entry by Gary Park . Really well presented, and a few interesting details about team city and other extensions.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Raven DB: day to day, by me :D  I’m probably the worse person to judge how this went, from my side of things, I heard you guys laugh and ask questions, in my books, that is pretty ok. Feedback from people always great ( Phil Thanks for yours already)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;During lunch I wanted to go to the grok talks however I ended up catching some sun and a really interesting chat with Matt (he contributes to RavenDB , trying to convince the man he should really write some posts about facets )&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;WebSockets and SignalR - Building the real-time, multi-user interactive web by Chris Alcock. I haven’t played yet with SignalR yet so it was good to see this, I kinda knew what to expect tho. Well presented&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;NoSql Document Databases: Why would you want to use one? by Ian Russell, Great intro to NoSQL, really liked Ian relaxed approach to questions. Great session&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just in case anyone is interested, my slides for the talk. Thanks to all attendees and organizers for a great weekend&lt;/p&gt;

&lt;p&gt;[slideshare id=13115644&amp;amp;doc=ravendb-120529033908-phpapp01]&lt;/p&gt;
</description>
				<pubDate>Tue, 29 May 2012 09:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2012/05/29/raven-db-day-to-day-at-dddsw/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2012/05/29/raven-db-day-to-day-at-dddsw/</guid>
			</item>
		
			<item>
				<title>Busy May  with RavenDB</title>
				<description>&lt;p&gt;Just a small post to let you know. I’ll be speaking in two conferences this month.&lt;/p&gt;

&lt;p&gt;The 26th of May at &lt;a href=&quot;http://www.dddsouthwest.com/Agenda/tabid/55/Default.aspx&quot;&gt;DDD South West&lt;/a&gt;. The topic is Raven DB Day to Day&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.dddsouthwest.com/Agenda/tabid/55/Default.aspx&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2012/05/capture.png&quot; alt=&quot;Capture&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Closely followed by an Introduction to Raven DB in &lt;a href=&quot;http://skillsmatter.com/podcast/open-source-dot-net/ravendb-intro&quot;&gt;Progressive.net (London)&lt;/a&gt; the 31st of May&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://skillsmatter.com/podcast/open-source-dot-net/ravendb-intro&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2012/05/untitled.png&quot; alt=&quot;Untitled&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If there is a particular topic you want to see there, please let me know&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;
</description>
				<pubDate>Wed, 16 May 2012 10:17:23 +0000</pubDate>
				<link>http://roundcrisis.com/2012/05/16/busy-may-with-ravendb/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2012/05/16/busy-may-with-ravendb/</guid>
			</item>
		
			<item>
				<title>XNA - A Simple Spring Camera in 2D</title>
				<description>&lt;p&gt;Cameras are cool, so lets keep at it and try a spring camera, i.e. one that follows you around.&lt;/p&gt;

&lt;p&gt;The initial aspect of the camera and how to use it is on the &lt;a href=&quot;http://roundcrisis.com/2012/04/19/xna-a-simple-2d-camera/&quot;&gt;previous post&lt;/a&gt; on cameras, so I ll let you go and have a look there.&lt;/p&gt;

&lt;p&gt;The spring camera is very similar to a simple camera, but with Hooke’s Law applied. Hooke’s Law states that the extension of a helical spring is directly proportional to the weight applied, provided the elastic limit of the spring is not exceeded. I read this a few times and couldnt figure how to turn this into code , so I went to Khan Academy and found this &lt;a href=&quot;http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=ZzwuHS9ldbY#!&quot;&gt;video&lt;/a&gt;, where the formula &lt;strong&gt;F = –k x&lt;/strong&gt; is explained.&lt;/p&gt;

&lt;p&gt;[youtube=http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=ZzwuHS9ldbY]&lt;/p&gt;

&lt;p&gt;If we use the formula as is, then the spring would be “springing” forever, so when calculating the force we will use some damping. So the new update method in Camera.cs now looks like this&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum1&quot;&amp;gt; 1:&amp;lt;/span&amp;gt; &amp;lt;span style=&quot;color:#0000ff;&quot;&amp;gt;public&amp;lt;/span&amp;gt; &amp;lt;span style=&quot;color:#0000ff;&quot;&amp;gt;void&amp;lt;/span&amp;gt; Update(&amp;lt;span style=&quot;color:#0000ff;&quot;&amp;gt;float&amp;lt;/span&amp;gt; elapsedSeconds, &amp;lt;span style=&quot;color:#0000ff;&quot;&amp;gt;float&amp;lt;/span&amp;gt; rotation, Vector2 desiredPosition, &amp;lt;span style=&quot;color:#0000ff;&quot;&amp;gt;float&amp;lt;/span&amp;gt; zoom)





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum2&quot;&amp;gt; 2:&amp;lt;/span&amp;gt;     {





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum3&quot;&amp;gt; 3:&amp;lt;/span&amp;gt;         var delta = _position - desiredPosition;





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum4&quot;&amp;gt; 4:&amp;lt;/span&amp;gt;         var force = -SpringStiffness * delta - Damping * _velocity;





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum5&quot;&amp;gt; 5:&amp;lt;/span&amp;gt;





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum6&quot;&amp;gt; 6:&amp;lt;/span&amp;gt;         var acceleration = force / Mass;





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum7&quot;&amp;gt; 7:&amp;lt;/span&amp;gt;         _velocity += acceleration * elapsedSeconds;





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum8&quot;&amp;gt; 8:&amp;lt;/span&amp;gt;         _position += _velocity * elapsedSeconds;





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum9&quot;&amp;gt; 9:&amp;lt;/span&amp;gt;





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum10&quot;&amp;gt; 10:&amp;lt;/span&amp;gt;         Transform = Matrix.CreateTranslation(-_position.X, -_position.Y, 0) *





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum11&quot;&amp;gt; 11:&amp;lt;/span&amp;gt;                     Matrix.CreateRotationZ(rotation) *





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum12&quot;&amp;gt; 12:&amp;lt;/span&amp;gt;                     Matrix.CreateScale(zoom, zoom, 1)*





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum13&quot;&amp;gt; 13:&amp;lt;/span&amp;gt;                     Matrix.CreateTranslation(_halfScreenSize.X, _halfScreenSize.Y, 0);





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum14&quot;&amp;gt; 14:&amp;lt;/span&amp;gt;     }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The line&lt;/p&gt;

&lt;p&gt;var force = -SpringStiffness * delta - Damping * _velocity;&lt;/p&gt;

&lt;p&gt;Is respecting the formula F= –kx, where k is the SpringStiffness and x is the delta(in orange). The second part of this assignment(in green)  is applying some damping proportional to the velocity.&lt;/p&gt;

&lt;p&gt;Once we have the result of calculating the force, we use the force vector to calculate the acceleration that, in turn that value is used to calculate the velocity and position.&lt;/p&gt;

&lt;p&gt;Finally, once we have the position, the matrix transformation is calculated in the same way we calculated this for the simple camera (&lt;a href=&quot;http://roundcrisis.com/2012/04/19/xna-a-simple-2d-camera/&quot;&gt;in previous post&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;You can get a complete working sample &lt;a href=&quot;https://github.com/Andrea/SpringCamera2dXNA&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
</description>
				<pubDate>Sat, 05 May 2012 14:10:29 +0000</pubDate>
				<link>http://roundcrisis.com/2012/05/05/xnaa-simple-spring-camera-in-2d/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2012/05/05/xnaa-simple-spring-camera-in-2d/</guid>
			</item>
		
			<item>
				<title>Using Mercury Particle Engine with Windows Phone 7</title>
				<description>&lt;p&gt;This a very simple walk through to use Mercury on a Windows Phone 7 project.&lt;/p&gt;

&lt;h3 id=&quot;get-the-binaries&quot;&gt;Get the binaries&lt;/h3&gt;

&lt;p&gt;As far as I can see, Mercury supports Windows Phone 7 only in version 4.0, if you go to the project page you _&lt;strong&gt;wont&lt;/strong&gt; _find this on downloads, as it’s not yet released.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://mpe.codeplex.com/releases&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2012/04/capture6.png&quot; alt=&quot;Capture&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, you have to get the sources from &lt;a href=&quot;http://mpe.codeplex.com/SourceControl/list/changesets&quot;&gt;here&lt;/a&gt; and build the project and find the correct binaries. An alternative is to download them from &lt;a href=&quot;https://github.com/downloads/Andrea/MercuryParticleEngine/Mercury.4.0_WindowsPhone.zip&quot;&gt;here&lt;/a&gt; (I forked the repo and added the binary download for WP7 ) If you ask nicely I’ll add all the other binaries.&lt;/p&gt;

&lt;p&gt;Once you have the binaries, include ProjectMercury.dll in the project where you want to use the particle engine, and add ProjectMercury.ContentPipeline.dll to the content project.&lt;/p&gt;

&lt;h3 id=&quot;code&quot;&gt;Code&lt;/h3&gt;

&lt;p&gt;I am not entirely sure where is the best place for the initialization code, you can probably place it in LoadContent, tho I did create the new instance of SpriteBatchRenderer in the constructor of my game class.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum1&quot;&amp;gt; 1:&amp;lt;/span&amp;gt; &amp;lt;span style=&quot;color:#008000;&quot;&amp;gt;// It needs the GraphicsDeviceManager&amp;lt;/span&amp;gt;





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum2&quot;&amp;gt; 2:&amp;lt;/span&amp;gt; _spriteBatchRenderer = &amp;lt;span style=&quot;color:#0000ff;&quot;&amp;gt;new&amp;lt;/span&amp;gt; SpriteBatchRenderer{ GraphicsDeviceService = _graphics };





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum3&quot;&amp;gt; 3:&amp;lt;/span&amp;gt;





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum4&quot;&amp;gt; 4:&amp;lt;/span&amp;gt; _particleEffect = Content.Load&amp;lt;ParticleEffect&amp;gt;(&amp;lt;span style=&quot;color:#006080;&quot;&amp;gt;&quot;Demo1&quot;&amp;lt;/span&amp;gt;);





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum5&quot;&amp;gt; 5:&amp;lt;/span&amp;gt;





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum6&quot;&amp;gt; 6:&amp;lt;/span&amp;gt;             &amp;lt;span style=&quot;color:#0000ff;&quot;&amp;gt;foreach&amp;lt;/span&amp;gt; (var emitter &amp;lt;span style=&quot;color:#0000ff;&quot;&amp;gt;in&amp;lt;/span&amp;gt; _particleEffect.Emitters)





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum7&quot;&amp;gt; 7:&amp;lt;/span&amp;gt;             {





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum8&quot;&amp;gt; 8:&amp;lt;/span&amp;gt;                 emitter.ParticleTexture = Content.Load&amp;lt;Texture2D&amp;gt;(&amp;lt;span style=&quot;color:#006080;&quot;&amp;gt;&quot;Star&quot;&amp;lt;/span&amp;gt;);





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum9&quot;&amp;gt; 9:&amp;lt;/span&amp;gt;                 emitter.Initialise();





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum10&quot;&amp;gt; 10:&amp;lt;/span&amp;gt;             }





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum11&quot;&amp;gt; 11:&amp;lt;/span&amp;gt;             _spriteBatchRenderer.LoadContent(Content);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;All you are doing is loading the particle effect through the content pipeline. Then you are iterating over the emitters in the effect to assign the ParticleTexture value, ie a texture you just loaded, and initializing each of the emitters. Finally you need to call LoadContent, calling this method is required because it creates the internal SpriteBatch instance* .&lt;/p&gt;

&lt;p&gt;In the update you will need to call&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum1&quot;&amp;gt; 1:&amp;lt;/span&amp;gt; &amp;lt;span style=&quot;color:#008000;&quot;&amp;gt;//position is a Vector3&amp;lt;/span&amp;gt;





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum2&quot;&amp;gt; 2:&amp;lt;/span&amp;gt; _particleEffect.Trigger(&amp;lt;span style=&quot;color:#0000ff;&quot;&amp;gt;ref&amp;lt;/span&amp;gt; position);





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum3&quot;&amp;gt; 3:&amp;lt;/span&amp;gt; _particleEffect.Update((&amp;lt;span style=&quot;color:#0000ff;&quot;&amp;gt;float&amp;lt;/span&amp;gt;) gameTime.ElapsedGameTime.TotalSeconds);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You need to Trigger the particle with a position (there are a number of overloads for this method, make sure you check this out) and then Update. If you fail to do either of those calls, no particles will be rendered.&lt;/p&gt;

&lt;p&gt;Finally in the Draw function:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum1&quot;&amp;gt; 1:&amp;lt;/span&amp;gt; var matrix = Matrix.Identity;





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum2&quot;&amp;gt; 2:&amp;lt;/span&amp;gt; var cameraPosition = Vector3.Zero;





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum3&quot;&amp;gt; 3:&amp;lt;/span&amp;gt; _spriteBatchRenderer.Transformation = Matrix.Identity;





&amp;lt;span style=&quot;color:#606060;&quot; id=&quot;lnum4&quot;&amp;gt; 4:&amp;lt;/span&amp;gt; _spriteBatchRenderer.RenderEffect(_particleEffect, &amp;lt;span style=&quot;color:#0000ff;&quot;&amp;gt;ref&amp;lt;/span&amp;gt; matrix, &amp;lt;span style=&quot;color:#0000ff;&quot;&amp;gt;ref&amp;lt;/span&amp;gt; matrix, &amp;lt;span style=&quot;color:#0000ff;&quot;&amp;gt;ref&amp;lt;/span&amp;gt; matrix, &amp;lt;span style=&quot;color:#0000ff;&quot;&amp;gt;ref&amp;lt;/span&amp;gt; cameraPosition);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Please find a full working sample &lt;a href=&quot;https://github.com/Andrea/MercuryParticleEngineWP7Sample&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And this would be what you see when you run the project &lt;img src=&quot;http://roundcrisis.files.wordpress.com/2012/04/wlemoticon-smile1.png&quot; alt=&quot;Smile&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2012/04/capture7.png&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2012/04/capture_thumb6.png&quot; alt=&quot;Capture&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;some-thoughts&quot;&gt;Some thoughts&lt;/h3&gt;

&lt;p&gt;I have to admit, I find it strange that  the constructor for SpriteBatchRenderer doesn’t require GraphicsDeviceManager, and instead you need to initialize the property, if you  don’t set this property before you call LoadContent, then you get a  NullReferenceException, as this is where the internal instance of SpriteBatch  is created and a GraphicsDevice is required.&lt;/p&gt;

&lt;p&gt;My suggestion here would be to have two versions of the constructors, one where you pass the reference of spriteBatch you have, and another one where you pass the instance of GraphicsDevice, as all usages point to only actually consuming that.&lt;/p&gt;

&lt;p&gt;These are just some thoughts on the API, and there might be really good reasons for the decisions made this way that I don’t know about. I think that all in all this is a great project, thanks to the creators and maintainers of it.&lt;/p&gt;
</description>
				<pubDate>Sun, 29 Apr 2012 17:46:18 +0000</pubDate>
				<link>http://roundcrisis.com/2012/04/29/using-mercury-particle-engine-with-windows-phone-7/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2012/04/29/using-mercury-particle-engine-with-windows-phone-7/</guid>
			</item>
		
			<item>
				<title>XNA - A Simple 2D Camera</title>
				<description>&lt;p&gt;What is a camera? Intuitively we know what a camera is:  simply a way to show the action.&lt;/p&gt;

&lt;p&gt;A Camera allows us to deal with the display of the action in a detached way from the action.&lt;/p&gt;

&lt;p&gt;Implementation&lt;/p&gt;

&lt;p&gt;I like to start with what we are trying to achieve. For the purposes of this post, I want to have two cameras showing the same action at different zoom levels, like this:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2012/04/capture.png&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2012/04/capture_thumb.png&quot; alt=&quot;Capture&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this case we want 2 cameras, with each camera having it’s own ViewPort that we assign when creating like this:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;span class=&quot;kwrd&quot;&amp;gt;int&amp;lt;/span&amp;gt; halfScreenWidth = GraphicsDevice.Viewport.Width/2;
_camera1 = &amp;lt;span class=&quot;kwrd&quot;&amp;gt;new&amp;lt;/span&amp;gt; Camera(&amp;lt;span class=&quot;kwrd&quot;&amp;gt;new&amp;lt;/span&amp;gt; Viewport(0, 0, halfScreenWidth - 3, GraphicsDevice.Viewport.Height));
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;What we are saying with that is that the Camera class will have a Viewport that occupies the left side of the screen.  The - 3 is there to add a visible gap between the left and right sides of the screen. Lets look at the following portion of the Draw method. Please note you could have all the parameters for _spriteBatch.Begin() null, except for the transform.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;span class=&quot;lnum&quot;&amp;gt; 1: &amp;lt;/span&amp;gt;            GraphicsDevice.Viewport = _camera1.Viewport;
&amp;lt;span class=&quot;lnum&quot;&amp;gt; 2: &amp;lt;/span&amp;gt;




&amp;lt;span class=&quot;lnum&quot;&amp;gt; 3: &amp;lt;/span&amp;gt;            _spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, DepthStencilState.None, RasterizerState.CullNone, &amp;lt;span class=&quot;kwrd&quot;&amp;gt;null&amp;lt;/span&amp;gt;, _camera1.Transform);
&amp;lt;span class=&quot;lnum&quot;&amp;gt; 4: &amp;lt;/span&amp;gt;            _level.Draw(_spriteBatch);




&amp;lt;span class=&quot;lnum&quot;&amp;gt; 5: &amp;lt;/span&amp;gt;            _spriteBatch.Draw(_tankTexture, _tankPosition, &amp;lt;span class=&quot;kwrd&quot;&amp;gt;null&amp;lt;/span&amp;gt;, Color.White, _rotation, &amp;lt;span class=&quot;kwrd&quot;&amp;gt;new&amp;lt;/span&amp;gt; Vector2(_tankTexture.Width / 2, _tankTexture.Height / 2), 1, SpriteEffects.None, 0);
&amp;lt;span class=&quot;lnum&quot;&amp;gt; 6: &amp;lt;/span&amp;gt;            _spriteBatch.End();
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Since we have a viewport  per camera, the graphics device needs to know which one to use, and that’s what we are doing in line 1 in the code above. The other important part of the code is the last parameter of the _spriteBatch.Begin call, where we are using the transformation matrix from the camera. This transform is calculated on each update.&lt;/p&gt;

&lt;p&gt;So finally lets look at the Camera class:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;span class=&quot;lnum&quot;&amp;gt; 1: &amp;lt;/span&amp;gt;    &amp;lt;span class=&quot;kwrd&quot;&amp;gt;public&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;kwrd&quot;&amp;gt;class&amp;lt;/span&amp;gt; Camera










&amp;lt;span class=&quot;lnum&quot;&amp;gt; 2: &amp;lt;/span&amp;gt;    {










&amp;lt;span class=&quot;lnum&quot;&amp;gt; 3: &amp;lt;/span&amp;gt;        &amp;lt;span class=&quot;kwrd&quot;&amp;gt;public&amp;lt;/span&amp;gt; Matrix Transform { get; &amp;lt;span class=&quot;kwrd&quot;&amp;gt;private&amp;lt;/span&amp;gt; set; }










&amp;lt;span class=&quot;lnum&quot;&amp;gt; 4: &amp;lt;/span&amp;gt;        &amp;lt;span class=&quot;kwrd&quot;&amp;gt;public&amp;lt;/span&amp;gt; Viewport Viewport { get; &amp;lt;span class=&quot;kwrd&quot;&amp;gt;private&amp;lt;/span&amp;gt; set; }










&amp;lt;span class=&quot;lnum&quot;&amp;gt; 5: &amp;lt;/span&amp;gt;










&amp;lt;span class=&quot;lnum&quot;&amp;gt; 6: &amp;lt;/span&amp;gt;        &amp;lt;span class=&quot;kwrd&quot;&amp;gt;public&amp;lt;/span&amp;gt; Camera(Viewport viewport)










&amp;lt;span class=&quot;lnum&quot;&amp;gt; 7: &amp;lt;/span&amp;gt;        {










&amp;lt;span class=&quot;lnum&quot;&amp;gt; 8: &amp;lt;/span&amp;gt;            Transform = Matrix.Identity;










&amp;lt;span class=&quot;lnum&quot;&amp;gt; 9: &amp;lt;/span&amp;gt;            Viewport = viewport;










&amp;lt;span class=&quot;lnum&quot;&amp;gt; 10: &amp;lt;/span&amp;gt;        }










&amp;lt;span class=&quot;lnum&quot;&amp;gt; 11: &amp;lt;/span&amp;gt;










&amp;lt;span class=&quot;lnum&quot;&amp;gt; 12: &amp;lt;/span&amp;gt;        &amp;lt;span class=&quot;kwrd&quot;&amp;gt;public&amp;lt;/span&amp;gt; &amp;lt;span class=&quot;kwrd&quot;&amp;gt;void&amp;lt;/span&amp;gt; Update(GameTime gameTime, &amp;lt;span class=&quot;kwrd&quot;&amp;gt;float&amp;lt;/span&amp;gt; rotation, Vector2 position, &amp;lt;span class=&quot;kwrd&quot;&amp;gt;float&amp;lt;/span&amp;gt; zoom)










&amp;lt;span class=&quot;lnum&quot;&amp;gt; 13: &amp;lt;/span&amp;gt;        {










&amp;lt;span class=&quot;lnum&quot;&amp;gt; 14: &amp;lt;/span&amp;gt;            Transform = Matrix.CreateTranslation(-position.X, -position.Y, 0) *










&amp;lt;span class=&quot;lnum&quot;&amp;gt; 15: &amp;lt;/span&amp;gt;                        Matrix.CreateRotationZ(rotation) *










&amp;lt;span class=&quot;lnum&quot;&amp;gt; 16: &amp;lt;/span&amp;gt;                        Matrix.CreateScale(&amp;lt;span class=&quot;kwrd&quot;&amp;gt;new&amp;lt;/span&amp;gt; Vector3(zoom, zoom, 1)) *










&amp;lt;span class=&quot;lnum&quot;&amp;gt; 17: &amp;lt;/span&amp;gt;                        Matrix.CreateTranslation(Viewport.Width / 2, Viewport.Height / 2, 0);










&amp;lt;span class=&quot;lnum&quot;&amp;gt; 18: &amp;lt;/span&amp;gt;        }










&amp;lt;span class=&quot;lnum&quot;&amp;gt; 19: &amp;lt;/span&amp;gt;    }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The least obvious part of this code lies in the matrix transformation. It is important to understand that we have two coordinate systems in place, the screen and the world. With the transformation matrix we are trying to project the world coordinate system onto the screen system. With that in mind, the first translation matrix (line 14 in the code above) will reposition the world so that point (position.X, position.Y) lines up with the screen’s origin. The result is as follows:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2012/04/capture1.png&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2012/04/capture_thumb1.png&quot; alt=&quot;Capture&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2012/04/capture2.png&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2012/04/capture_thumb2.png&quot; alt=&quot;Capture&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What you see at the top left of the pic is a quarter of the tank. If you change the tank’s position then you will see that the tank remains static at the top left (tho rotation applies) and the world moves underneath it.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2012/04/capture3.png&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2012/04/capture_thumb3.png&quot; alt=&quot;Capture&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next line, Matrix.CreateRotationZ, creates a matrix representing a rotation around the Z axis. The Z axis points straight out of the screen. In 2D, to perform a rotation, we always rotate around Z.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2012/04/capture4.png&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2012/04/capture_thumb4.png&quot; alt=&quot;Capture&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then we need to scale, using the parameters that we sent on update. Don’t forget we set different levels of zoom in each of the two cameras. We use the overload of Matrix.CreateScale() that takes a Vector3 to create a scaling matrix. However we could use the overload that just takes a float and pass the zoom value as a parameter with the same result. Unsurprisingly applying the scale, scales &lt;img src=&quot;http://roundcrisis.files.wordpress.com/2012/04/wlemoticon-smile.png&quot; alt=&quot;Smile&quot; /&gt;.&lt;/p&gt;

&lt;p&gt;Finally we want to center the tank in the middle of each viewport and that’s why you apply the last line (line 17 on the sample above).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2012/04/capture5.png&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2012/04/capture_thumb5.png&quot; alt=&quot;Capture&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And we are done &lt;img src=&quot;http://roundcrisis.files.wordpress.com/2012/04/wlemoticon-smile.png&quot; alt=&quot;Smile&quot; /&gt; tho I’m sure there are plenty of ways to improve the code, but hopefully it will help as a simple example.&lt;/p&gt;

&lt;p&gt;If you want to have a better look at the code, a working sample is available &lt;a href=&quot;https://github.com/Andrea/Simple-2D-camera-Sample&quot;&gt;here&lt;/a&gt;. If you have any comments, improvements, questions, as always you are very welcome.&lt;/p&gt;

&lt;p&gt;**UPDATE: **I followed up with a post about Spring Camera &lt;a href=&quot;http://roundcrisis.com/2012/05/05/xnaa-simple-spring-camera-in-2d/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;other-xna-2d-camera-posts&quot;&gt;Other XNA 2d Camera posts&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://www.david-amador.com/2009/10/xna-camera-2d-with-zoom-and-rotation/&quot;&gt;XNA Camera 2d with zoom and rotation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another one that I read after implementation &lt;a href=&quot;http://pwnageincblog.blogspot.com/2012/02/terrain-weather-and-more.html&quot;&gt;Terrain, Weather, and more!&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Thu, 19 Apr 2012 15:21:10 +0000</pubDate>
				<link>http://roundcrisis.com/2012/04/19/xna-a-simple-2d-camera/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2012/04/19/xna-a-simple-2d-camera/</guid>
			</item>
		
			<item>
				<title>Windows Phone 7 - Game Development Experience</title>
				<description>&lt;p&gt;I got a Windows Phone 7 to play with for a while and these are some notes about the experiment.  I just did a tick-tac-toe based on this &lt;a href=&quot;http://mobile.tutsplus.com/tutorials/windows/windows-phone-7-game-development/&quot;&gt;blog post&lt;/a&gt; changed a few things tho (like the use of extension method for checking for wining and replaced by bit shifting :D ), but I wanted to have some code to fall back to just in case.&lt;/p&gt;

&lt;p&gt;NOTE: I have an android phone, and had an iPhone for a while in the past, so my expectations about this phone are probably based on them.&lt;/p&gt;

&lt;p&gt;As soon as I connected the phone to my computer it prompted me to install the Zune software, after installation you get this:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2011/12/capture.png&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2011/12/capture_thumb.png&quot; alt=&quot;Capture&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;restarting my machine? we are not in 1999, this shouldn’t be a requirement.&lt;/p&gt;

&lt;p&gt;Also when I was trying to install some game, the phone displayed a message about the fact that some installations require re starting the phone. Very strange&lt;/p&gt;

&lt;p&gt;Rather randomly on an LG –E90099 I get the error that the phone is pin locked (it isn’t :( ).&lt;/p&gt;

&lt;p&gt;If while trying to debug to your phone you get an error, “The application could not be lauched for debugging. Verify that the application is installed on target device” that, for me , meant that the phone was locked (ie dark screen) Make sure you can see the menu and try again&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2011/12/capture1.png&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2011/12/capture_thumb1.png&quot; alt=&quot;Capture&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After these initial errors, I pretty much moved pretty quickly.&lt;/p&gt;

&lt;p&gt;I  am quite surprised by this, but at least for game development  (with xna) this little trial has been incredibly painless.&lt;/p&gt;

&lt;p&gt;Regarding the phone OS,  there are some aspects that I really dislike:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;A lot of screen is wasted, for example if i search online for something, I can only see about 2 to 3 results.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The facebook integration (I dont want facebook). Probably it can be turned off?&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Figuring out how to un-link the hotmail account to the phone is quite tricky (it might be just me)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Having to restart your phone after installing an app is just not acceptable.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Things I liked about the phone&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Dealing with text in general is superior at least to the android experience. ie writting texts and email was a good experience&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Generally fast and non cluttered&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In general my perception of the phone has improved after trying it . And I have to add I’m pretty impressed by the Zune software, it looks good, it worked flawlessly. Comparing to iTunes and Samsung Kies it’s way ahead.&lt;/p&gt;

&lt;p&gt;I like XNA, and the fact that it was so transparent to deploy a game to the phone was really nice.&lt;/p&gt;
</description>
				<pubDate>Tue, 06 Dec 2011 13:27:59 +0000</pubDate>
				<link>http://roundcrisis.com/2011/12/06/windows-phone-7-game-development-experience/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2011/12/06/windows-phone-7-game-development-experience/</guid>
			</item>
		
			<item>
				<title>Programming Science</title>
				<description>&lt;p&gt;So a few Scientists and a few developers met last Wednesday. It was hard to know where we were going to end and thanks so much to everyone that participated. The following is a summary of the tips we (scientist + developers) thought was a good idea&lt;/p&gt;

&lt;p&gt;Tips for scientists writing code (1st Round):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Talk to other scientists that work on similar projects and share a list of your most used functions (I cant remember the name of the person suggestion&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Every now and then meet up with other scientist writing similar code to you to talk specifically about the code you write, after all if you know the tools you are working with better, you are bound to be more productive&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Use source control. There are pretty good open source alternatives and many places that offer free storage. Some source control options: Git, Mercurial, subversion. Some places to host your code: github, bitbucket, google code, codeplex&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Use variable names that indicate what you are talking about.&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Some bad examples: your_cat_name, sss, ttt, etc. Some good examples: portionOfSphere, portion_of_sphere.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;In the case of IDL, avoid for loops and try to use functions&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Try to get used to reading others people code so that you realise where you can improve, or point out things that can be done i na more effective way&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;help-a-scientist-day&quot;&gt; Help a scientist day&lt;/h3&gt;

&lt;p&gt;The above is all well and good, however. We were also thinking about collaboration. So Philippe came up with a great idea: Help a scientist day.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;A scientist submits (somewhere to be discussed) a problem she or he thinks it could be solved with some help of more developers&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;people can ask questions about the idea (either technical details or just to check that its a problem similar to theirs)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;People can vote on ideas (no need to sign up )&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The ideas with most votes (that are doable) will be the ones that will be implemented by developer during “Help a Scientist Day”&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, we need to organize this day, please comment on &lt;a href=&quot;https://plus.google.com/b/114172855713532113103/&quot;&gt;G+&lt;/a&gt; so we can get this going&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;
</description>
				<pubDate>Tue, 22 Nov 2011 09:40:04 +0000</pubDate>
				<link>http://roundcrisis.com/2011/11/22/programming-science/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2011/11/22/programming-science/</guid>
			</item>
		
			<item>
				<title>Starting out with XNA? some handy links</title>
				<description>&lt;p&gt;XNA is the SDK from Microsoft for game development.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://rbwhitaker.wikidot.com/getting-started-tutorials&quot;&gt;XNA getting started tutorial&lt;/a&gt;. Well organized, paced  series of  XNA tutorials by a guy that teaches this. If you know nothing this is pretty good.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://www.gamedev.net/forum/145-xna-40-2011-workshop/&quot;&gt;Xna workshop&lt;/a&gt;. Some posts and links to learn XNA Is kinda handy to see other people’s questions&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://www.riemers.net/eng/Tutorials/XNA/Csharp/series1.php&quot;&gt;Riemers XNA Tutorials&lt;/a&gt;. I think this is a link you want to keep, every time I search for something XNA related I get a post from this guy&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://www.david-gouveia.com/2d-camera-with-parallax-scrolling-in-xna/&quot;&gt;2D Camera with parallax scrolling&lt;/a&gt;. Does what it said on the tin, very comprehensive article that also links to other interesting articles.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/mono/MonoGame&quot;&gt;Mono game&lt;/a&gt;&lt;/strong&gt;. The good news is that there is a port :D … “MonoGame is an open source implementation of the XNA APIs that allows developers to build 2D games that run on Android, iPhone, iPad, Mac, Linux and Windows using the same code base, or reusing existing XNA code that runs on Xbox 360 or Windows Phone 7”&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I ve been reading &lt;a href=&quot;http://www.amazon.com/Learning-XNA-4-0-Development-Windows/dp/1449394620&quot;&gt;Learning XNA 4.0&lt;/a&gt; its pretty good so far, well written and easy to follow tho with enough detail.&lt;/p&gt;

&lt;p&gt;If you know of other good details, please comment :D&lt;/p&gt;
</description>
				<pubDate>Mon, 07 Nov 2011 21:19:03 +0000</pubDate>
				<link>http://roundcrisis.com/2011/11/07/starting-out-with-xna-some-handy-links/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2011/11/07/starting-out-with-xna-some-handy-links/</guid>
			</item>
		
			<item>
				<title>Code Retreat Dublin - 17th September</title>
				<description>&lt;p&gt;What an awesome experience to organize and participate in this event.&lt;/p&gt;

&lt;p&gt;It was a long day but I think people enjoyed it, learned a lot and got to try a few new things.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2011/09/2011-09-17-08-53-22.jpg&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2011/09/2011-09-17-08-53-22_thumb.jpg&quot; alt=&quot;Code Retreat. A bad picture of breakfast&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2011/09/2011-09-17-08-53-12.jpg&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2011/09/2011-09-17-08-53-12_thumb.jpg&quot; alt=&quot;Code Retreat. Early birds&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2011/09/2011-09-17-08-53-33.jpg&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2011/09/2011-09-17-08-53-33_thumb.jpg&quot; alt=&quot;2011-09-17 08.53.33&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At 9, Jose  explained how a Code Retreat works and Kevin(below) explained Conway’s Game of Life, the problem to solve during the day.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2011/09/2011-09-17-09-12-36.jpg&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2011/09/2011-09-17-09-12-36_thumb.jpg&quot; alt=&quot;2011-09-17 09.12.36&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;sessions&quot;&gt;Sessions&lt;/h1&gt;

&lt;p&gt;A code retreat has many sessions of 45 minutes each. Below is how most of the sessions looked&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2011/09/2011-09-17-09-24-11.jpg&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2011/09/2011-09-17-09-24-11_thumb.jpg&quot; alt=&quot;2011-09-17 09.24.11&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2011/09/2011-09-17-13-59-20.jpg&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2011/09/2011-09-17-13-59-20_thumb.jpg&quot; alt=&quot;2011-09-17 13.59.20&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2011/09/2011-09-17-13-59-37.jpg&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2011/09/2011-09-17-13-59-37_thumb.jpg&quot; alt=&quot;2011-09-17 13.59.37&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2011/09/2011-09-17-13-59-28.jpg&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2011/09/2011-09-17-13-59-28_thumb.jpg&quot; alt=&quot;2011-09-17 13.59.28&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;session-1&quot;&gt;Session 1&lt;/h3&gt;

&lt;p&gt;At 9.10 am we started our first session.&lt;/p&gt;

&lt;p&gt;Constraint: To code Conway’s Game of life in pairs.&lt;/p&gt;

&lt;p&gt;At the beginning of the session all the pairs were talking to each other, but after 5 min or so we saw a change towards writing code.&lt;/p&gt;

&lt;p&gt;Retrospective:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;A few solutions to the problem emerged.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;A healthy discussion about the problem constraints.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pair count by language:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Python: 3&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Ruby: 4&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;C#: 2&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Php: 1&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Javascript: 1&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;session-2&quot;&gt;Session 2&lt;/h3&gt;

&lt;p&gt;Constraint:  To discuss the solution for 10 min, and to test drive or unit test the solution.&lt;/p&gt;

&lt;p&gt;Retrospective:&lt;/p&gt;

&lt;p&gt;A pair came up with a solution that used 2 lists.
More people using javascript, as it’s a language that most can understand. &lt;a href=&quot;http://pivotal.github.com/jasmine/&quot;&gt;Jasmine&lt;/a&gt; (BDD for Javascript) was a handy tool since you can run it in the browser.&lt;/p&gt;

&lt;p&gt;Pair count by language:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Python: 3&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Ruby: 2&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;C#: 2&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Php: 0&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Javascript: 3&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Java: 1&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;session-3&quot;&gt;Session 3&lt;/h3&gt;

&lt;p&gt;Constraint:  Avoid the use of primitives.&lt;/p&gt;

&lt;p&gt;Retrospective:&lt;/p&gt;

&lt;p&gt;In this session we got more feedback:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;As a result of the restriction we got self documenting tests&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Not enough time&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Arriving at a better design&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;One of the pairs spent most of the time just analyzing&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Some questions about testing in general. What do you do when tests are just too big? The general answer was around the lines of break it down into smaller tests and skip or remove from code and add to To do list. Another question was about mocking&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pair count by language:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Python: 2&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Ruby: 1&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;C#: 1&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Php: 1&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Javascript: 3&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Java: 3&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;— Lunch Break.  Retrospective: Yay! —&lt;/p&gt;

&lt;h3 id=&quot;session-4&quot;&gt;Session 4&lt;/h3&gt;

&lt;p&gt;Constraint:  &lt;a href=&quot;http://gojko.net/2009/08/02/tdd-as-if-you-meant-it-revisited/&quot;&gt;TDD as if you mean it&lt;/a&gt; tho since not everyone was comfortable with testing, it was optional.&lt;/p&gt;

&lt;p&gt;Retrospective:  Four pairs tried TDD as if you mean it, however the concept wasn’t very clear. (this was probably my fault, as I explained it badly, sorry)&lt;/p&gt;

&lt;p&gt;Pair count by language:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Python: 1&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Ruby: 2&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;C#: 2&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Php: 0&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Javascript: 3&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Java: 1&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;session-5&quot;&gt;Session 5&lt;/h3&gt;

&lt;p&gt;Constraint: No conditionals&lt;/p&gt;

&lt;p&gt;Retrospective:&lt;/p&gt;

&lt;p&gt;The general feedback was that the pairs felt  that they were arriving at more elegant solutions with more classes, which resulted in more readable tests.&lt;/p&gt;

&lt;p&gt;Pair count by language:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Python: 2&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Ruby: 1&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;C#: 2&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Php: 0&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Javascript: 2&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Java: 2&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;session-6&quot;&gt;Session 6&lt;/h3&gt;

&lt;p&gt;This was the last session after a long day. The feedback on the ground was that people felt a bit frustrated that they didn’t have enough time to finish the problem; so session 6 was: Finish the problem.&lt;/p&gt;

&lt;p&gt;There was no retrospective as people started to leave. However it felt like people left happy. Splitters!!&lt;/p&gt;

&lt;p&gt;NOTE: There is another Code Retreat in Dublin this coming  3rd of December as part of Global Day of Code Retreat check &lt;a href=&quot;CodingDay.org&quot;&gt;CodingDay.org&lt;/a&gt; for more details&lt;/p&gt;
</description>
				<pubDate>Sun, 25 Sep 2011 12:06:09 +0000</pubDate>
				<link>http://roundcrisis.com/2011/09/25/code-retreat-dublin17th-september/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2011/09/25/code-retreat-dublin17th-september/</guid>
			</item>
		
			<item>
				<title>TDD tools for net developers</title>
				<description>&lt;p&gt;In the last few years the tooling available to .net developers for unit testing in general has matured, these are some of the tools  that I either used or heard of :&lt;/p&gt;

&lt;p&gt;Continuous Integration:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Team City: I use it and really like it, simple to set up and use, if you want to try it they have a free professional edition .&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Cruise Control.net: Open source, used it but didn’t find it too friendly, I’m aware a lot of people use it&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Hudson. Originally a Java only project but there are some success stories on the .net fence, has some features unavailable in the other two mentioned above.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;there must be something else. ?&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;BDD Frameworks&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;StoryQ:  This is what I use. Like it because you write C# code with some constraints and it generates reports on the behaviour. Samples: &lt;a href=&quot;http://storyq.codeplex.com/SourceControl/changeset/view/2d36d2927f4d#src%2fStoryQ.Demo%2fDemoTest.cs&quot;&gt;code&lt;/a&gt; &lt;a href=&quot;http://yfrog.com/h2y3mtp&quot;&gt;report&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Cukes/Cucumber: I remember the first time I saw cucumber in action I was really impressed, however it’s hard to get buy in for a tool that requires another language installed, probably fine for some projects, it depends a lot on the project, the company and the culture.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;SpecFlow:  you write features in Gherkin(the cucumber spec language) that are then compiled into c# code. Nice reports, but I find the generated code hard to read… ie a bit too verbose (&lt;a href=&quot;https://github.com/techtalk/SpecFlow-Examples/blob/master/BowlingKata/BowlingKata-MbUnit/Bowling.Specflow/ScoreCalculationAlternativesFeature.feature&quot;&gt;example feature&lt;/a&gt; &lt;a href=&quot;https://github.com/techtalk/SpecFlow-Examples/blob/master/BowlingKata/BowlingKata-MbUnit/Bowling.Specflow/BowlingSteps.cs&quot;&gt;example generated code&lt;/a&gt;) however I wouldnt discard it totally.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;NSpec:  You write c# code (very lambda-y)  and it generates reports.. like it even less for reasons similar to the above,  have a look at it yourself &lt;a href=&quot;http://nspec.org/&quot;&gt;here&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Fit/fitnesse:  I haven’t tried it, it supposed to be very good, I ll leave that one to you (would love some feedback on this if anyone reading did try it)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unit Testing Frameworks.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;xUnit: a nice, compact unit test framework, I like it because it has less noise,  no setup method (ie it uses the ctor for&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;nUnit:  The most popular one.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;mbUnit: good support for RowTests.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;_&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;msTests: the option by Microsoft. I tried this framework when it came out, so perhaps not valid anymore. My experience with it was that the same set of test ran 20% slower. Also it had poor support for theory tests. Maybe this all changed. I will guess that anyone using this framework does it because they can’t use anything else&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2011/05/unit-testing-fm.png&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2011/05/unit-testing-fm.png?w=202&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Builds&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Psake:  powershel based DSL for building&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Rake:  Ruby based Dsl for builds, nice to use ruby, but sometimes needing the ruby dependency is a deal breaker&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Nant: not something I would choose, but hey if you like xml this is the way to go (if you like Xml you might want to talk to your doctor too ;) )&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;MSBuild:  I find it non intuitive, I thought I was being unfair so I asked in twitter what ppl thought of it. One supporter and 4 not really happy with it (see below)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Final Builder : a commercial option, and not a bad one to be honest. Very easy to use (drag drop style) tho not as flexible as we needed.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2011/07/capture.png&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2011/07/capture.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Code Coverage&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt; NCover: does the job but I think the generated graph could be better. Running the tool was cumbersome too as far as I remember&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt; dotCover : really nice and integrated with resharper, it a bit rough around the edges with lambdas and other minor things, but a tool I use day to day&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feedback and anything that wasn’t mentioned yet , please feel free to comment&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;
</description>
				<pubDate>Sat, 09 Jul 2011 11:49:46 +0000</pubDate>
				<link>http://roundcrisis.com/2011/07/09/tdd-tools-for-net-developers/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2011/07/09/tdd-tools-for-net-developers/</guid>
			</item>
		
			<item>
				<title>DDD Scotland. Review and Slides</title>
				<description>&lt;p&gt;During the past weekend I was at DDD Scotland, it was great to meet all the people there.&lt;/p&gt;

&lt;p&gt;I  apologize for the amount of lolcalts that I added to my presentation (available below) and any feedback, etc more than welcome.&lt;/p&gt;

&lt;p&gt;[slideshare id=7891964&amp;amp;doc=cqrsesandfriends-110509044316-phpapp01]&lt;/p&gt;

&lt;p&gt;In many ways it was good to get the presentation out of the way early  because it meant I could focus on being out there listening to other folks smarter than me talk and meet some people.&lt;/p&gt;

&lt;p&gt;After my talk I was at Gary Short’s presentation on hoe to measure performance, interesting and really well delivered. Some interesting questions too.&lt;/p&gt;

&lt;p&gt;Then I was at Seb Rose talk on TDD and unit testing. It was interesting to see that you can test drive a C++ app. His advice was sound. He talked about the importance of setting a structure before starting to test. He talked about the importance of deployment. And how it was important that the tests were also clean and well designed. &lt;a href=&quot;http://www.slideshare.net/sebrose/unit-testing-tdd-and-the-walking-skeleton&quot;&gt;Link to his slides&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After that there was lunch, unfortunately (or not)  I couldnt catch any of the grok talks as I was talking to people, one of the ideas we had was to open source a project (not mine :S) that would make using selenium+qunit on CI easier… will see how that goes.&lt;/p&gt;

&lt;p&gt;After that I joined a talk by Toby Henderson,  The dark parts of Mono. I reallly enoyed this talk. Info about small standalone tools or libraries that you can use, with examples. Such as IKVM, Cecil, SIMD, Compiler and Gendarme.&lt;/p&gt;

&lt;p&gt;Finally, I joined the “Ask the Speakers” panel, very relaxed and quite fun. We talked about the news (Mono and its future, other stuff I cant remember - please comment),  innovation and community. There is a &lt;a href=&quot;http://www.leggetter.co.uk/2011/05/09/ddd-scotland-2011.html&quot;&gt;post &lt;/a&gt;of note that goes into some of the stuff we talked about .&lt;/p&gt;

&lt;p&gt;All in all a great event, thanks to everyone for making it possible.&lt;/p&gt;
</description>
				<pubDate>Wed, 11 May 2011 10:25:04 +0000</pubDate>
				<link>http://roundcrisis.com/2011/05/11/ddd-scotland-review-and-slides/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2011/05/11/ddd-scotland-review-and-slides/</guid>
			</item>
		
			<item>
				<title>DDDScotland next weekend 7th Of May</title>
				<description>&lt;p&gt;DDD Scotland is happening next weekend, I’m really looking forward to it. I’m also very happy my talk got selected, thanks everyone that voted for it.  The &lt;a href=&quot;http://scottishdevelopers.com/2011/03/14/ddd-scotland-2011-agenda/&quot;&gt;agenda&lt;/a&gt; is very interesting here are my picks:&lt;/p&gt;

&lt;p&gt;Starting at 9:30AM and If you are not interested in CQRS/ES,  there is two talks that sound interesting: Streams of Streams – Your Rx Prescription, by &lt;a href=&quot;http://nondestructiveme.com/&quot;&gt;Ray Booysen&lt;/a&gt; and &lt;a href=&quot;http://geekswithblogs.net/chriscanal&quot;&gt;Chris Canal&lt;/a&gt; ‘s Monodroid Introduction, I could really use seeing a talk on this as I’ve been playing around with it lately. Conferences are really those times when you wish time could effectively go backwards, damn causality… (look &lt;a href=&quot;http://www.smbc-comics.com/index.php?db=comics&amp;amp;id=2223#comic&quot;&gt;here&lt;/a&gt; if you want vaguely related lolz)&lt;/p&gt;

&lt;p&gt;Later on Decision time again, there are two talks that I would be interested to see: Asymptotics and Algorithms - What You’ve Forgotten Since University by &lt;a href=&quot;http://community.devexpress.com/blogs/garyshort/&quot;&gt;Gary Short&lt;/a&gt;. I’m not going to lie, I had to look up what Asymptotics meant &lt;img src=&quot;http://roundcrisis.files.wordpress.com/2011/05/wlemoticon-confusedsmile.png&quot; alt=&quot;Confused smile&quot; /&gt; . The talk is about calculating the efficiency of an algorithm, something we tend to leave to the framework these days.. but we probably should know about. The other talk I’m interested in is &lt;a href=&quot;http://twitter.com/#!/barrycarr&quot;&gt;Barry Carr&lt;/a&gt;’s  Caliburn Micro talk, it seems like that framework has packed some very interesting ideas, I only heard some of them  after listening to &lt;a href=&quot;http://herdingcode.com/?p=303&quot;&gt;that Herding Code podcast&lt;/a&gt; with Rob Eisenberg.&lt;/p&gt;

&lt;p&gt;The talk about scalable web  with Asp.Net sounds interesting too .&lt;/p&gt;

&lt;p&gt;At 12:00 there is a talk that I need to go see, that’s &lt;a href=&quot;http://twitter.com/#!/sebrose&quot;&gt;Seb Rose&lt;/a&gt;’s talk on unit testing, reasons being: first, because its about unit testing, but the Skeleton reference I like too, the fact that he contributed some of the 97 things every programmer should know(or architect, cant remember which  one) .  Another talk that interests me but I wont get to is BDD with F# By &lt;strong&gt;Phillip Trelford&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After lunch there are three really interesting sessions that I’d like to see:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Seb Lambla’s “Building composite applications with Open frameworks” from a very quick glance at the video available in Channel 9, it looks like a talk about using &lt;a href=&quot;http://www.openwrap.org/&quot;&gt;OpenWrap&lt;/a&gt;, and how to integrate it to your workflow, and that’s something worth watching.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;“SpecFlow – functional testing made easy” by Paul Stack, would like to see how it compares to StoryQ…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;“The dark parts of Mono” by Toby Henderson, interesting cause I ve been meaning to see this for a while.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If I was into Silverlight at all, the talk to not miss would be Daniel May talk on Silverlight Unit Testing “Real World SLUT (Silverlight Unit Testing)”&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The last sessions of the day are also pretty interesting, I think the one I ll end up in would be: “How to build a framework, and why you almost never should.” by Richard Dalton , a last minute change could see me going to : “Rewriting software is the single worst mistake you can make – apparently.” tho what puts me off this is a probably wrong, and its the fact that is a story of migrating to VB.Net, a language that I honestly can’t understand why still exists or why does Microsoft funds, but leaving that aside sounds like a story worth listening to.&lt;/p&gt;

&lt;p&gt;See you there&lt;/p&gt;
</description>
				<pubDate>Sun, 01 May 2011 16:26:50 +0000</pubDate>
				<link>http://roundcrisis.com/2011/05/01/dddscotland-next-weekend-7th-of-may/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2011/05/01/dddscotland-next-weekend-7th-of-may/</guid>
			</item>
		
			<item>
				<title>Clarifying CQRS[Udi Dahan] Spanish Translation</title>
				<description>&lt;p&gt;Hi :&lt;/p&gt;

&lt;p&gt;Recently a group of us (tho mostly &lt;a href=&quot;http://xamlsorpresa.wordpress.com/&quot;&gt;Pablo Nuñez&lt;/a&gt; ) translated the article from Udi Dahan Clarifying CQRS.&lt;a href=&quot;https://docs.google.com/document/d/1-5rmzY48aXZp3A-uaULnwU0gV7r1E1ZkEV1i5YBn-LI/edit?hl=en#&quot;&gt; Here is the link&lt;/a&gt; to it, if you feel that it can be improved please just leave a comment here and I can add you to the document with edit rights. Some terms where hard to translate.&lt;/p&gt;

&lt;p&gt;Thanks to Pablo, &lt;a href=&quot;http://carlospeix.com/&quot;&gt;Carlos Peix&lt;/a&gt; , &lt;a href=&quot;http://www.jorgegamba.com/blog/&quot;&gt;Jorge Gamba&lt;/a&gt; and everyone that retweeted and helped.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Hola:&lt;/p&gt;

&lt;p&gt;Me pareció que el articulo de Udi Dahan, Clarifying CQRS, podría ser muy útil para la comunidad de desarrolladores hispano hablantes.&lt;/p&gt;

&lt;p&gt;Así que algunos de nosotros decidimos traducirlo, aquí esta &lt;a href=&quot;https://docs.google.com/document/d/1-5rmzY48aXZp3A-uaULnwU0gV7r1E1ZkEV1i5YBn-LI/edit?hl=en&amp;amp;pli=1#&quot;&gt; el link&lt;/a&gt; , la mayoríadel credito debe ir a &lt;a href=&quot;http://xamlsorpresa.wordpress.com/&quot;&gt;Pablo Nuñez&lt;/a&gt; . Pero también gracias a las demás personas que ayudaron: &lt;a href=&quot;http://carlospeix.com/&quot;&gt;Carlos Peix&lt;/a&gt; , &lt;a href=&quot;http://www.jorgegamba.com/blog/&quot;&gt;Jorge Gamba&lt;/a&gt; , etc (la verdad no me acuerdo quien mas perdón:) )&lt;/p&gt;

&lt;p&gt;Si tienes algún comentario o corrección simplemente deja un mensaje aquí y te puedo agregar al documento con derecho de escritura.&lt;/p&gt;

&lt;p&gt;Gracias&lt;/p&gt;
</description>
				<pubDate>Thu, 14 Apr 2011 18:10:58 +0000</pubDate>
				<link>http://roundcrisis.com/2011/04/14/clarifying-cqrsudi-dahan-spanish-translation/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2011/04/14/clarifying-cqrsudi-dahan-spanish-translation/</guid>
			</item>
		
			<item>
				<title>Learning CQRS. Why not using a framework is a good idea</title>
				<description>&lt;p&gt;I ve been talking to some people over the past few months about CQRS, particularly CQRS/ES and at some point of the conversation I get the **framework **question.&lt;/p&gt;

&lt;p&gt;I think the implementation of the patterns CQRS and ES is not trivial (it’s also not necessary to do both , but lets keep going) however, the escence of the advantages you get out of both comes from implementing the rules of the domain, in the domain. By making the state transitions explicit.&lt;/p&gt;

&lt;p&gt;The number one reason why you should learn about CQRS without a framework is because, it could cloud your understanding of the domain with artificial constraints. Another important reason is that when you learn by doing, you understand the workings and shortcomings of a particular methodology.&lt;/p&gt;

&lt;p&gt;That is not to say that frameworks are bad and you should never use them, but make sure that when you make a decision like that, it is a conscious one.&lt;/p&gt;

&lt;p&gt;I remember one day when I was at a talk by Gregg Young, and he said: How many of you use (ms)SQL? How many of you made that conscious choice? (ie to use an relational database for storage) .  I realised then that, I didn’t make that choice or considered an option in certain cases, but what scared me the most is that I was making a bunch of assumptions as soon as anyone said “system” , it made me realise that most of those assumptions could blind me into not really considering all the options.&lt;/p&gt;
</description>
				<pubDate>Tue, 12 Apr 2011 11:55:32 +0000</pubDate>
				<link>http://roundcrisis.com/2011/04/12/learning-cqrs-why-not-using-a-framework-is-a-good-idea/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2011/04/12/learning-cqrs-why-not-using-a-framework-is-a-good-idea/</guid>
			</item>
		
			<item>
				<title>Why Setters and Getters are considered a code smell in your Aggregate Roots</title>
				<description>&lt;p&gt;Say we are not concerned with the query side of things (because we have an autonomous query service that need not know about your aggregate roots). With that in mind, in which cases do we &lt;strong&gt;need&lt;/strong&gt; to know about the aggregate root private data?&lt;/p&gt;

&lt;p&gt;I can think of one case - when checking for duplication. Then we would have to&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;* Be happy with eventual consistency (ie some check before actually trying to save) or 
 
* rely on the persistence layer for uniqueness and on failure, get a meaningful error. 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In any other situation, we are likely to be doing something that is meaningful to your domain. For example, lets pretend a product stock amount had to change, the code would look like this&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[sourcecode language=&quot;csharp&quot; padlinenumbers=&quot;true&quot;]
Product product = _repository.Get(id);
product.Stock = 2;
_repository.Save(product);

class Product
{
     public int Stock {get; set;}
}
[/sourcecode]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That code would have probably lived in a service, or even worse, in a controller What are the problems with this?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Lack of intent. When you look at the code for Product, you’ ll see a Stock (or quantity) property, and in this case its a pretty simple field. However you have no idea from looking at the code, how this property is used.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Possible implicit behaviour. There is always a chance that the setter contains some logic .&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Context, perhaps adding Stock has certain rules, maybe when &amp;gt;100 are received then someone has to be notified, or they need to be moved to another warehouse.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead, you can write an AddStock method, which in reality would do something a bit more explicit ( I’m sure you could call it StockDelivered or similar, but I guess it depends on your domain …)&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[sourcecode language=&quot;csharp&quot; autolinks=&quot;false&quot;]
Product product = _repository.Get(id);
product.AddStock(45);
_repository.Save(product);


// and in the product AR
class Product
{
       public void AddStock(int receivedStock)
		{
			Contract.Requires&amp;lt;ArgumentException&amp;gt;(receivedStock&amp;gt;= 0);
		   	_stock += receivedStock;
		}
}
[/sourcecode]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This is a more explicit design. However, the question of testability comes to mind, and the way you write your tests depends on the flavour of DDD you are using. If you are using DDD with CQRS/ES, then you would be publishing an event with the changes. If you are not, then you could rely on checking the product stock before and after the operation, through a query service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Related Articles&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://michaelfeathers.typepad.com/michael_feathers_blog/2008/06/the-flawed-theo.html&quot;&gt;The Flawed theory behind unit testing&lt;/a&gt; (Feathers)&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://typicalprogrammer.com/?p=23&quot;&gt;Doing it wrong: getters and setters&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Sun, 23 Jan 2011 19:38:11 +0000</pubDate>
				<link>http://roundcrisis.com/2011/01/23/why-setters-and-getters-are-considered-a-code-smell-in-your-aggregate-roots/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2011/01/23/why-setters-and-getters-are-considered-a-code-smell-in-your-aggregate-roots/</guid>
			</item>
		
			<item>
				<title>CQRS/ES Presentation in Belfast yesterday</title>
				<description>&lt;p&gt;I was in Belfast yesterday were I was presenting what I called “CQRS/ES and friends” in &lt;a href=&quot;http://nimtug.org/&quot;&gt;NIMTUG &lt;/a&gt;. I had a great time thanks to all who came and thanks to the organizers.&lt;/p&gt;

&lt;p&gt;I would normally post here my presentation, but not sure its of any value, as it doesnt have much info, I use it for helping me remember what to say, if anyone want it, i can definetly post it, just add a comment here.&lt;/p&gt;

&lt;p&gt;The code I was showing is a fork of  &lt;a href=&quot;https://github.com/gregoryyoung/m-r&quot;&gt;Super Simple CQRS code example&lt;/a&gt; by Gregg Young&lt;/p&gt;

&lt;p&gt;I have a link (bit.ly bundle) with a bunch of links about CQRS and ES, including a few other sample code bases  &lt;a href=&quot;http://bit.ly/9LC877&quot;&gt;http://bit.ly/9LC877&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have any questions, or feedback good or bad (something missing?) please let me know by posting a comment here (if you don’t want me to publish it just say so )&lt;/p&gt;

&lt;p&gt;Thanks for coming :)&lt;/p&gt;
</description>
				<pubDate>Fri, 21 Jan 2011 15:31:24 +0000</pubDate>
				<link>http://roundcrisis.com/2011/01/21/cqrses-presentation-in-belfast-yesterday/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2011/01/21/cqrses-presentation-in-belfast-yesterday/</guid>
			</item>
		
			<item>
				<title>What is CQRS and other related terms - Modelling and testing - Part 3</title>
				<description>&lt;p&gt;This post belongs to a series of posts on CQRS/ES&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.com/2010/11/17/what-is-command-query-responsibility-segregation-cqrs-and-other-related-terms-part-1/&quot;&gt;Part 1 – introductory terms and overview&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.com/2010/11/30/what-is-cqrs-and-other-related-terms-part-2-2/&quot;&gt;Part 2 – Event sourcing and information about commands&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, we are moving on.&lt;/p&gt;

&lt;p&gt;I thought I’d put these two topics close, it seems to me  that they are related, I ve been using BDD to test this&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2011/01/ddddevision_big.jpg&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2011/01/ddddevision_big_thumb.jpg&quot; alt=&quot;DDDDevision_big&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After all, what I’m testing is much more than a unit, and I’m interested in the whole loop. What I find interesting here is that since we are talking about actions when we talk about commands and we are also talking about past events, the &lt;strong&gt;Given&lt;/strong&gt;, &lt;strong&gt;When&lt;/strong&gt;, **Then **become very rather obvious.&lt;/p&gt;

&lt;p&gt;So, you can say something like:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Given a NewCustomerCommand with &quot;Name&quot;
 and a NewCustomerCommandHandler
When I Execute the Command
Then a CustomerCreatedEvent is published
 and Customer with &quot;Name&quot; exists
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;and, if you, like me, are using StoryQ, this story can look like&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
                .WithScenario(&quot;Create new customer&quot;)
                    .Given(ANewCustomerCommandWith_, &quot;Name&quot;)
                        .And(ANewCustomerCommandHandler)
                    .When(IExecuteTheCommand)
                    .Then(ACustomerCreatedEventIsPublished)
                        .And(CustomerWithName_Exists, &quot;Name&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;With this in mind, its not hard to imagine the code to make this happen, and because of that, the focus remains on the modelling, when I see this code, I can’t help but think, Do I really need to create a new customer to be able to process orders? Is the name all that relevant?, maybe the email is more representative… all of these are domain questions, this is exactly the kind of questions that should arise, this focus is on the domain is one of the most interesting advantages of CQRS. And we need to change our code. Your testing points are at the command level, at the query level and/or at the event level.&lt;/p&gt;

&lt;p&gt;An interesting advantage of testing in a BDD style is that you have very concise, &lt;strong&gt;runnable&lt;/strong&gt; documentation, and can kick the conversation off, with your domain expert. Here you could say, wait a minute, my domain expert doesn’t know about commands, or queries. Well then perhaps you need to move the layer of testing up a bit higher to the UI.  Testing points go a layer above, another option is test at both levels.&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Behaviour Driven tests help you model the domain&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Your testing points are your commands, command Handler, query services and events. No need to mess around with aggregate roots directly, and hence why no need for getters on the aggregate roots&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Your tests are executable documentation&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;UPDATE: Next up Validation&lt;/p&gt;
</description>
				<pubDate>Mon, 03 Jan 2011 13:20:19 +0000</pubDate>
				<link>http://roundcrisis.com/2011/01/03/what-is-cqrs-and-other-related-terms-modelling-and-testing-part-3/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2011/01/03/what-is-cqrs-and-other-related-terms-modelling-and-testing-part-3/</guid>
			</item>
		
			<item>
				<title>What is CQRS and other related terms - Part 2</title>
				<description>&lt;h2 id=&quot;cqrs-with-event-sourcing&quot;&gt;CQRS with Event Sourcing&lt;/h2&gt;

&lt;p&gt;[caption id=”” align=”alignleft” width=”269” caption=”Photo By edinburghcityofprint(flickr)”]&lt;img src=&quot;http://farm3.static.flickr.com/2763/4268190563_6b9a7f840d_z.jpg&quot; alt=&quot;Ledger&quot; /&gt;[/caption]&lt;/p&gt;

&lt;p&gt;Looking at CQRS and Event Sourcing as Architectural patterns, when we use them together the impact of that is widespread. For a start, your aggregates should only be exposing behaviour, and that behaviour is related to the commands that use that aggregate root, actually, the entry point to doing anything in the domain is through a command. (this have implications on how we test, but we’ll talk about that later on).&lt;/p&gt;

&lt;p&gt;The aggregate root should now expose only behaviour, encapsulating all state, setters are seeing as a code smell. This change is not a direct consequence of CQRS, however, it was very hard to achieve this without it if doing DDD.&lt;/p&gt;

&lt;p&gt;One of the questions I got during the talk was about how to replay perhaps millions of events, without a huge delay, and the answer to that is &lt;strong&gt;Snapshots&lt;/strong&gt;, basically you preserve the current state of the aggregate root, serialized . There are a few ways to do snapshots, but the principle is that you get your snapshot, which will be up to a particular version, and then replay any events from that version on ( if there are any).&lt;/p&gt;

&lt;p&gt;At the system level, it is important to note that, we now have an explicit state transition, what I’m trying to say is that when your customer (ie the person that comes up with the requirements for the system) sais something like, when a customer is created, then that can be mapped directly to CustomerCreatedEvent ie, there is a close relationship between what happens and what caused the state transition and that can be relevant to the business. This, I think, is the biggest advantage of using CQRS&lt;/p&gt;

&lt;p&gt;Since the read storage and the Write storage are logically separated  and they can be physically separated too, that means, that they can have different scaling policies.&lt;/p&gt;

&lt;p&gt;Another interesting benefit of using event sourcing is that you have an integration point available, without any extra cost. The integration point could serve a Reporting tool, or an external service, or maybe you just want to push some sort of notifications, these are all easily doable, you have a bus publishing messages…&lt;/p&gt;

&lt;p&gt;Actually, the way we are using event sourcing in the above stated scenario implies an eventually consistent model. If interested in this topic, have a look at this blog for the cost of eventual consistency. We ll go through some code and then come back to this topic.&lt;/p&gt;

&lt;p&gt;I don’t think I mentioned this yet, but, there is one really awesome thing about this whole thing, and that is that we are framework free, there are a few principles and ideas to learn, but once you got them, there is not really much that you need a framework for, maybe if you want you can have an out of the box event store, they are simple in principle but a bit harder to code that it appears first. There are some frameworks to do CQRS with ES however, the code you need to have a system like this running is not so complex, and understanding how it works is crucial.&lt;/p&gt;

&lt;h3 id=&quot;the-trail-of-the-command&quot;&gt;The trail of the Command&lt;/h3&gt;

&lt;p&gt;Lets forget about the UI for a second and think of a system from the point of: I have a command, and I need to execute it.&lt;/p&gt;

&lt;p&gt;Every time you send a command, the system handles the command, more than likely, an aggregate root will be involved and an operation on it will occur, this will result in one or many events being published; once the event(s ) have been published, the subscribers will get this message. One of the subscribers is the Event store, that will append this new event. There are variations of this description but this will do for now. Lets say the&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;public void Handle(CustomerMovedCommand command)
        {
				var customer = _repository.Get&amp;amp;lt;Customer&amp;amp;gt;(command.CustomerId);
				customer.Moved(command.AddressLine1, command.AddressLine2, command.Postcode );
				_repository.Save(customer);
        }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;the aggregate root (Customer) code for that method could look something like this&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;public void Moved(string line1, string line2, string postcode)
{
    ApplyEvent(new CustomerMovedEvent()
                        {
                            AddressLine1 = line1,
                            AddressLine2 = line2,
                            PostCode = postcode
                        });
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In there we can see that we are applying the event, once we apply the event, we will not only set up the internal properties of the aggregate root(that we need for write operations), also through the repository or other commit like mechanism(we’ll look at this in a sec), we will publish this message, making the event store aware of this new event and making the query side aware of this event too, the query side is then responsible of de-normalizing the data to a suitable shape.&lt;/p&gt;

&lt;p&gt;An important thing to note is that the event is declared as something that happened, it is in the past, for example: CustomerMovedEvent, that means that as far as our system is concerned, the customer has moved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next part will include Modelling and testing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I bundled a few interesting links in this bit.ly bundle** &lt;a href=&quot;http://bit.ly/9LC877&quot;&gt;http://bit.ly/9LC877&lt;/a&gt; **&lt;/p&gt;
</description>
				<pubDate>Tue, 30 Nov 2010 19:00:47 +0000</pubDate>
				<link>http://roundcrisis.com/2010/11/30/what-is-cqrs-and-other-related-terms-part-2-2/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/11/30/what-is-cqrs-and-other-related-terms-part-2-2/</guid>
			</item>
		
			<item>
				<title>What is Command Query Responsibility Segregation (CQRS ) and other related terms - part 1</title>
				<description>&lt;p&gt;I’m preparing for a talk on CQRS and I though I’d support it with a series of posts on the subject. I’d love to get some feedback on this and all the following blog posts. (where I ll be possibly correcting stuff i say here, I can’t promise)&lt;/p&gt;

&lt;p&gt;So, I decided to start at the beginning: definitions. When I started to learn about CQRS I just looked at a good few videos, read a bunch of blog posts and then dived into every code example I could find, and then I’m working on a system that uses these principles. However, I wanted to roll back and see if I can somewhat formalise what I’ve learned so far. Starting with definitions&lt;/p&gt;

&lt;h2 id=&quot;what-is-cqrs&quot;&gt;What is CQRS?&lt;/h2&gt;

&lt;p&gt;Based on &lt;a href=&quot;http://codebetter.com/blogs/gregyoung/archive/2010/02/16/cqrs-task-based-uis-event-sourcing-agh.aspx&quot;&gt;this blog post&lt;/a&gt; and &lt;a href=&quot;http://codebetter.com/blogs/gregyoung/archive/2009/08/13/command-query-separation.aspx&quot;&gt;others&lt;/a&gt; , the consensus is something like: CQRS is a pattern that describes the separation of command messages , they change state, from query messages that read state.&lt;/p&gt;

&lt;p&gt;Please note this is a pattern (i.e. not an architecture) . if you look around online you ll find that some people seem to see CQRS as a software architecture, it makes sense that this is confusing, I wonder if the “term” evolved so much that it lost its meaning, what most people refer to as CQRS is actually a combination of a good bunch of patterns that work well together.&lt;/p&gt;

&lt;p&gt;CQRS is normally used with other patterns such as event sourcing, messaging patterns, task based uis, etc. I’d like to make an emphasis on the guideline bit, for me this is a powerful word, it tells me, something like, paint it some shade of yellow, but I have the choice to use the yellow that makes the room the way I need it to be.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://domaindrivendesign.org/books3#DDD&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3068/3072942016_48ed5f0cac.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;Before I started looking at CQRS I was unclear about the relationship between an Aggregate root and the services that serviced it or worked on it. Once I started looking at samples of applications based on CQRS with ES, which was about the time we finished reading the DDD Blue DDD Bible, then it all became clear.  I think the main thing was that the boundaries of the aggregates and the boundaries of each domain were more tangible and made more sense.&lt;/p&gt;

&lt;p&gt;Also if using CQRS, you ll find that your aggregate roots change shape, i.e. there are no public properties, at the very least you ll have no public setters, and all the methods in the aggregate sound more like actions, if you have methods such as AsDto(), that definitely means you are doing something wrong. Also you are loosing all properties that you needed for the read side of things, for example if you had an Order aggregate root, do you really need that OrderItems collection? you have access to that collection through the OrderQueryService.&lt;/p&gt;

&lt;p&gt;The term CQRS, evolved from CQS(Command Query Separation) there is a CQS definition from  Meyer, that is very similar but it’s separating methods that change state, since the emphasis is on messages for CQRS, this was an important distinction.[&lt;a href=&quot;http://codebetter.com/blogs/gregyoung/archive/2009/08/13/command-query-separation.aspx&quot;&gt;ref&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;To prepare for the talk I’m also preparing an example (more later), the interesting thing is that, I find that using CQRS and Event Sourcing, I find myself asking questions about the system and the domain, and that is great, because it makes you focus on what the system should do, not the how.&lt;/p&gt;

&lt;p&gt;That brings me to another important definition.&lt;/p&gt;

&lt;h2 id=&quot;what-is-event-sourcing&quot;&gt;What is Event Sourcing?&lt;/h2&gt;

&lt;p&gt;Event sourcing means that you capture changes to an application state as a sequence of events (&lt;a href=&quot;http://martinfowler.com/eaaDev/EventSourcing.html&quot;&gt;definition by Fowler&lt;/a&gt;) . Imagine most systems your worked with up to now, If you had a customer, and they moved, you would probably go to the user interface (web or whatever), go to some sort of customer edit screen, change the details, and thats it, most likely this would trigger an update operation in a normalized database, and unless there was a specific requirement, you’ve not only lost the previous value of the address, also, you dont know if the customer actually moved or if the address was incorrect, so you are loosing history and intent, two very valuable assets.&lt;/p&gt;

&lt;p&gt;An important detail about this way of storing data is that its an **append only model **, because you are only adding, the write operation its simpler, this means it takes less time. Another consequence of an append only model is that to change something, we would apply compensating actions.  Interestingly, once the events are stored they are immutable.&lt;/p&gt;

&lt;p&gt;If this is such a great way to store data then how come we are not using it everywhere? you might ask. Well there is the problem of having to replay all events to build an aggregate root each time you need to work on it, and hey, what if it’s a very busy one, and there are millions of events to replay. For that, we would use snapshots, i.e. every so often we would record the current state of the aggregate root as is and then when we need to get the aggregate root, we would have  to find the latest snapshot, and then replay any outstanding events to get to up to date. The real culprit is the fact that selecting the top 3 orders where the customer name is Bob, is kind of hard. However, since we are using Event sourcing on the write side and we   might just get away with it .&lt;/p&gt;

&lt;p&gt;Event Sourcing is a big theme, the Event store is one of the most complex parts of using CQRS/ES. There are a few open source implementations out there. &lt;a href=&quot;http://jonathan-oliver.blogspot.com/2010/07/cqrs-event-store.html&quot;&gt;Olivers&lt;/a&gt; comes to mind&lt;/p&gt;

&lt;h3 id=&quot;references-and-sources&quot;&gt;References and Sources&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://codebetter.com/blogs/gregyoung/archive/2010/02/13/cqrs-and-event-sourcing.aspx&quot;&gt;CQRS and Event Sourcing – Gregg Young&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.udidahan.com/2009/12/09/clarified-cqrs/&quot;&gt;Clarified CQRS – Udi Dahan&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://domaindrivendesign.org/&quot;&gt;Domain Driven Design Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://codebetter.com/blogs/gregyoung/archive/2009/08/13/command-query-separation.aspx&quot;&gt;Command Query Separation – Gregg Young&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Wed, 17 Nov 2010 22:19:37 +0000</pubDate>
				<link>http://roundcrisis.com/2010/11/17/what-is-command-query-responsibility-segregation-cqrs-and-other-related-terms-part-1/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/11/17/what-is-command-query-responsibility-segregation-cqrs-and-other-related-terms-part-1/</guid>
			</item>
		
			<item>
				<title>StoryQ Review</title>
				<description>&lt;p&gt;We are evaluating BDD frameworks at the moment and I’m going through &lt;a href=&quot;http://storyq.codeplex.com/&quot;&gt;StoryQ&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Note:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Internal DSL for BDD, for me this means I can discover a lot by just following the API (ie its got a nice fluent API)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The Code for adding a story is very simple (example below)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Readable and nicely formatted report output&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Supports Nunit, xUnit and MSTests&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;if using xUNit there is no support for incomplete tests ( ie if you are using CI it will break the build) UPDATE: there is a way since xUnit 1.7&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Also you need to override the settings with your own exception builder.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;I had one of those Doh! moments because I setup the story and the scenario with the Given().When().Then() and then I called the Execute method, that was not going to work… :(&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Can report in various format, the report shows up on resharper or in an more html way.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;There is a wpf app that converts gherkin and it generates the StoryQ test.( couldn’t try because the app failed, I think it s because of a dodgy build I have but will find out and report later)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Seems to support well the idea of many scenarios per story within the same file, which is cool.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Good to keep in mind not to use underscores in method names &lt;a href=&quot;http://storyq.codeplex.com/Thread/View.aspx?ThreadId=218277&quot;&gt;Link&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So far so good, if there is anything else noteworthy I ll update.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2010/11/sq.png&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2010/11/sq_thumb.png&quot; alt=&quot;sq&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Fri, 12 Nov 2010 15:02:09 +0000</pubDate>
				<link>http://roundcrisis.com/2010/11/12/storyq-review/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/11/12/storyq-review/</guid>
			</item>
		
			<item>
				<title>7L7W - Scala Day 1</title>
				<description>&lt;p&gt;In the Book Club, we are reading &lt;a href=&quot;http://www.pragprog.com/titles/btlang/seven-languages-in-seven-weeks&quot;&gt;7 Languages in 7 Weeks&lt;/a&gt; (for more info on the book club go to &lt;a href=&quot;http://groups.google.com/group/dublinaltnet&quot;&gt;Dublin Alt.Net mailing list&lt;/a&gt;) so far a really awesome book, Its helping me have a quick view of not only different languages, but also different programing paradigms. Which is really refreshing, but hard. The thing that I like the most about the book so far , is that you do much more than a hello world, but of course, you can learn in depth, however, the author makes a really good job of explaining what’s at the core of each language, sometimes, just trying to really grasp that is a tiny bit hard , when  it’s a paradigm you are unfamiliar with it, but the effort is well worth it.&lt;/p&gt;

&lt;p&gt;Anyway, since I haven’t been able to the last two meet ups, I thought I’d do a second read of the Scala chapter and put together some notes. Please note I’m writing the notes as I read.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Scala is a hybrid language (a mix of OO and functional)&lt;/li&gt;
  &lt;li&gt;Hints that its a different kind of language&lt;/li&gt;
  &lt;li&gt;Runs on the JVM, though given the state of Java, not sure that is any kind of insurance. Scala can use Java libraries natively, just like Iron* languages , can use .net libraries directly&lt;/li&gt;
  &lt;li&gt;Statically typed&lt;/li&gt;
  &lt;li&gt;type inference (like c#? –&amp;gt; review)&lt;/li&gt;
  &lt;li&gt;functional concepts, like c#? it would be awesome if it added some native support for immutable types&lt;/li&gt;
  &lt;li&gt;Support immutable types, but its got some modifier ( need to check this out more in depth)&lt;/li&gt;
  &lt;li&gt;actors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Scala is a general purpose language, interesting that it seems to fit well many scenarios because of this OO, Functional mix
Type inference seems to be not so strong
Principles of functional programming that apply to Scala:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;programs are made of functions&lt;/li&gt;
  &lt;li&gt;functions return a value&lt;/li&gt;
  &lt;li&gt;given the same input, a function will return the same output&lt;/li&gt;
  &lt;li&gt;side effect free&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;val is immutable var not …. Likes&lt;/p&gt;

&lt;p&gt;There is a full page on the book dedicated to somewhat clarifying strong vs weak and static vs dynamic  languages. I mostly agree with his points there.&lt;/p&gt;

&lt;p&gt;My first impression when seeing the language was that it reminded me more to python than to java, maybe it was &lt;strong&gt;def&lt;/strong&gt; .&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Visibility of methods, functions. Public is default&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Support for tuples and ranges . In purely functional languages, tuples are used as objects. You can do multi value assignment with tuples&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Constructors. I like Scala’s  syntax and default&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Object instances are interesting, at first I was thinking they were like static classes in C#, but apparently not quite. As far as I understand, an object declaration in Scala is basically a singleton instance of a class definition.  However, in C# a static class is a class that can be accessed and used, without creating an instance. That makes me think that there is a cost associated with the instantiation, but I cant see any other difference. (comments on this would be appreciated)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;traits. Like an interface and an implementation all in one, generally focusing on a single concern, well that’s what the book say, however I can’t see here how you do to declare a trait separetly&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As Part of the exercise of Day 1 you need to find a comparison between Java and Scala(I found &lt;a href=&quot;http://blog.lostlake.org/index.php?/archives/26-5-Things-a-Java-developer-needs-to-know-about-Scala.html&quot;&gt;this&lt;/a&gt;), one of the interesting things I learned while checking that out is that XML is supported natively, I also liked the point on moving to a more functional style of programming slowly, but with a nicer syntax.&lt;/p&gt;
</description>
				<pubDate>Sun, 31 Oct 2010 15:49:58 +0000</pubDate>
				<link>http://roundcrisis.com/2010/10/31/7l7w-chapter-4-review-scala-day-1/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/10/31/7l7w-chapter-4-review-scala-day-1/</guid>
			</item>
		
			<item>
				<title>Open Source and you - Resources</title>
				<description>&lt;p&gt;I was invited to give a talk on Open Source in DIT to a group of students. Link to slides &lt;a href=&quot;http://www.slideshare.net/roundcrisis/open-source-and-you-5456161&quot;&gt;http://www.slideshare.net/roundcrisis/open-source-and-you-5456161&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;However here some interesting links:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;35 years of Open Source &lt;a href=&quot;http://vospe.com/2010/09/22/a-brief-history-35-years-of-open-source-software-a/&quot;&gt;http://vospe.com/2010/09/22/a-brief-history-35-years-of-open-source-software-a/&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The Open Source Initiative &lt;a href=&quot;http://www.opensource.org/&quot;&gt;http://www.opensource.org/&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;List of Open Source Licenses &lt;a href=&quot;http://www.opensource.org/licenses/category&quot;&gt;http://www.opensource.org/licenses/category&lt;/a&gt; and more here &lt;a href=&quot;http://en.wikipedia.org/wiki/Comparison_of_free_software_licenses&quot;&gt;http://en.wikipedia.org/wiki/Comparison_of_free_software_licenses&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Reddit’s Open Source &lt;a href=&quot;http://www.reddit.com/r/opensource/&quot;&gt;http://www.reddit.com/r/opensource/&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Sat, 16 Oct 2010 11:52:48 +0000</pubDate>
				<link>http://roundcrisis.com/2010/10/16/open-source-and-you-resources/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/10/16/open-source-and-you-resources/</guid>
			</item>
		
			<item>
				<title>Manos de Mono - Quick overview</title>
				<description>&lt;p&gt;I heard about this new web framework the other day, the code its available on &lt;a href=&quot;http://github.com/jacksonh/manos&quot;&gt;github/jacksonh/manos&lt;/a&gt; the main interesting thing I heard about it were:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;runs on Mono&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Has its own server&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Has no dependecies on Asp.net&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;the main goal of mono is to simplify web application development&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;routing appears to be simpler ( to use and test)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;command line for managing your apps (deployment included)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this point, I wanted to see some code, I went to the example on github and I was pleasantly surprised&lt;/p&gt;

&lt;p&gt;[sourcecode language=”csharp” padlinenumbers=”true” collapse=”false”]
//
	// A mango application is made of MangoModules and MangoApps
	// There really isn’t any difference between a Module and an App
	// except that the server will load the MangoApp first. A mango
	// application can only have one MangoApp, but as many MangoModules
	// as you want.
	//
	public class MangoProject : MangoApp {&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;	public MangoProject ()
	{
		//
		// Routing can be done by using the Get/Head/Post/Put/Delete/Trace
		// methods. They take a regular expression and either a method
		// or another module to hand off processing to.
		//
		// The regular expressions come after the method/module, because
		// Mango uses params to allow you to easily register multiple
		// regexs to the same handler
		//
		Get (Home, &quot;Home&quot;);

		//
		// The Route method will hand off all HTTP methods to the supplied
		// method or module
		//
		Route (new DocsModule (), &quot;Docs/&quot;);
	}

	//
	// Handlers can be registered with attributes too
	//

	[Get (&quot;About&quot;)]
	public static void About (MangoContext ctx)
	{
		//
		// Templates use property lookup, so you can pass in
		// a strongly typed object, or you can use an anonymous
		// type.
		//
		RenderTemplate (ctx, &quot;about.html&quot;, new {
			Title = &quot;About&quot;,
			Message = &quot;Hey, I am the about page.&quot;,
		});
	}

	public static void Home (MangoContext ctx)
	{
		RenderTemplate (ctx, &quot;home.html&quot;, new {
			Title = &quot;Home&quot;,
			Message = &quot;Welcome to the Mango-Project.&quot;
		});
	}
} [/sourcecode]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Like the module and App ideas&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;like the simplicity of the code above&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;seems to work at a slightly lower level of abstraction than MVC but I can live with that&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Interesting that it uses it’s own template engine, the syntax is nice, but I wonder why not spark, razor, nhaml, nvelocity. After all, It would be cool to use what I know already. Will have to find out.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Will have to do some more research on it&lt;/p&gt;
</description>
				<pubDate>Wed, 13 Oct 2010 20:00:45 +0000</pubDate>
				<link>http://roundcrisis.com/2010/10/13/manos-de-mono-quick-overview/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/10/13/manos-de-mono-quick-overview/</guid>
			</item>
		
			<item>
				<title>Projects Organization - How to organize assemblies in your local machine to avoid nightmares</title>
				<description>&lt;p&gt;This is just how I organize folders and projects on my machine, there are endless possibilities , but I saw someone searching for it online and it did took me a long while before I settled on this, so I thought I would blog about it.&lt;/p&gt;

&lt;p&gt;This can be a good or bad way of organizing, I think it depends on the kind and number of projects you are working on&lt;/p&gt;

&lt;p&gt;Imagine you have a folder that contains the following folders&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;code&lt;/strong&gt; (Real code, shipable, or company proof of concepts with its own repo)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;**spike **(test to see if something works, Proof of concepts very basic)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;third-party&lt;/strong&gt; (OSS libraries and frameworks, etc)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Inside my &lt;strong&gt;code&lt;/strong&gt; folder, each solution has it’s own &lt;strong&gt;Lib&lt;/strong&gt; or &lt;strong&gt;Libs&lt;/strong&gt; or &lt;strong&gt;Libraries&lt;/strong&gt; folder (eg One Lib folder per solution ). The story is very different in &lt;strong&gt;spike **since I put projects there for stuff I never ever want to ship then I have a shared **Lib&lt;/strong&gt; or &lt;strong&gt;Libs&lt;/strong&gt; or &lt;strong&gt;Libraries&lt;/strong&gt; folder where I put everything I ever needed. In third party I leave as I got from source control .&lt;/p&gt;

&lt;p&gt;Inside the Libraries folder I mostly try to keep a folder per project and inside a folder per version, something similar to this&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2010/09/capture2.png&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2010/09/capture_thumb1.png&quot; alt=&quot;Capture&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;if in doubt copy the assembly, disk space is cheap.&lt;/p&gt;
</description>
				<pubDate>Wed, 22 Sep 2010 19:11:20 +0000</pubDate>
				<link>http://roundcrisis.com/2010/09/22/projects-organization-how-to-organize-assemblies-in-your-local-machine-to-avoid-nightmares/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/09/22/projects-organization-how-to-organize-assemblies-in-your-local-machine-to-avoid-nightmares/</guid>
			</item>
		
			<item>
				<title>Reflection - Create an instance of a class through a protected method</title>
				<description>&lt;p&gt;I had a bit of trouble getting to this, so for self reference more than anything, I thought I d post about it.&lt;/p&gt;

&lt;p&gt;Given the following class&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c#&quot; data-lang=&quot;c#&quot;&gt;    	
        &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;MyClass&lt;/span&gt;	
       &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;		
               &lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    
               &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;}}&lt;/span&gt;
    
               &lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;MyClass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
              &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                   &lt;span class=&quot;n&quot;&gt;_name&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;		
              &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;    &lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;I thought that the following would be the way to create an instance of it:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c#&quot; data-lang=&quot;c#&quot;&gt;    &lt;span class=&quot;n&quot;&gt;Activator&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;CreateInstance&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;typeof&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BindingFlags&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NonPublic&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;MyName&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CultureInfo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CurrentCulture&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;However it throws a MissingMethodException: Constructor on type &apos;ReflectionCreateInstance.MyClass&apos; not found. However if we add the Binding Flag for instance then it works.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c#&quot; data-lang=&quot;c#&quot;&gt;    	
    &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Fact&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;When_creating_with_activator_Must_use_apropriate_binding_flags&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    	&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;myname&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;MyName&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    
    	&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;myClass&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Activator&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;CreateInstance&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    					&lt;span class=&quot;k&quot;&gt;typeof&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; 
    					&lt;span class=&quot;n&quot;&gt;BindingFlags&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Instance&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BindingFlags&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NonPublic&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
    					&lt;span class=&quot;k&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
    					&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;myname&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt; 
    					&lt;span class=&quot;n&quot;&gt;CultureInfo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CurrentCulture&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    
    	&lt;span class=&quot;n&quot;&gt;Assert&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Equal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;myname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;myClass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;	
    &lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;If you try this with &amp;lt;b&amp;gt;type.GetConstructor&amp;lt;/b&amp;gt; or &amp;lt;b&amp;gt;type.GetConstructors &amp;lt;/b&amp;gt;the result is the same. 


Checking the &amp;lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.reflection.bindingflags.aspx&quot; target=&quot;_blank&quot;&amp;gt;documentation for BindingFlag&amp;lt;/a&amp;gt;.Instance I find &amp;lt;/span&amp;gt;


&amp;lt;a href=&quot;http://roundcrisis.files.wordpress.com/2010/09/capture.png&quot;&amp;gt;&amp;lt;img src=&quot;http://roundcrisis.files.wordpress.com/2010/09/capture_thumb.png&quot; style=&quot;display:inline;border-width:0;&quot; title=&quot;Capture&quot; height=&quot;370&quot; width=&quot;674&quot; alt=&quot;Capture&quot; border=&quot;0&quot;&amp;gt;&amp;lt;/img&amp;gt;&amp;lt;/a&amp;gt;

So it was a case of RTFM I guess :D
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
				<pubDate>Thu, 16 Sep 2010 20:01:04 +0000</pubDate>
				<link>http://roundcrisis.com/2010/09/16/reflection-create-an-instance-of-a-class-through-a-protected-method/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/09/16/reflection-create-an-instance-of-a-class-through-a-protected-method/</guid>
			</item>
		
			<item>
				<title>Irish Open Spaces Coding Day III Retrospective</title>
				<description>&lt;p&gt;Yesterday we had the 3rd IOSCD. It was great fun, the code is all available &lt;a href=&quot;http://www.assembla.com/code/ioscd/subversion/nodes&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The sessions&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2010/09/imag0142.jpg&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2010/09/imag0142_thumb.jpg&quot; alt=&quot;IMAG0142&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2010/09/imag0144.jpg&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2010/09/imag0144_thumb.jpg&quot; alt=&quot;IMAG0144&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It was great to have some hardware to play with, people really seem to get a good kick out of that, there was a Netduino and two Lego NXT.&lt;/p&gt;

&lt;p&gt;I’m hoping that other people will tell us about their experience yesterday (hint hint ;) ).&lt;/p&gt;

&lt;p&gt;Some of the sessions included: Ruby on rails app for the book club assistance (called and_on_that_basis , no idea why), netdruino hacking with some sort of Rx , and then using Rx over the wire, finally i was working on something called Code Shapes.&lt;/p&gt;

&lt;p&gt;Just starting a tool(?) that will analyse each class and draw a diagram:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Hollow Ellipse - public method&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Shaded Ellipse - protected, private, or package private method&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Rectangle - field&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Line - a use-dependency from a method to a method or a field.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;as per &lt;a href=&quot;http://michaelfeathers.typepad.com/michael_feathers_blog/2010/08/testng-and-what-wed-like-code-to-be.html&quot;&gt;Michael Feather post&lt;/a&gt; on this.&lt;/p&gt;
</description>
				<pubDate>Sun, 12 Sep 2010 15:40:31 +0000</pubDate>
				<link>http://roundcrisis.com/2010/09/12/irish-open-spaces-coding-day-iii-retrospective/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/09/12/irish-open-spaces-coding-day-iii-retrospective/</guid>
			</item>
		
			<item>
				<title>2010 Events Coming Up</title>
				<description>&lt;p&gt;There is a bunch of things happening in Dublin in the next few months, I figured it would be handy to push a post on it.&lt;/p&gt;

&lt;p&gt;30th of august - &lt;a href=&quot;http://www.mtug.ie/Home/tabid/38/ctl/Details/Mid/369/ItemID/69/Default.aspx?ContainerSrc=[G]Containers/_default/No+Container&quot;&gt;Windows Phone 7&lt;/a&gt; . A joint event between MTUG and Dublin Alt.Net - &lt;a href=&quot;http://www.mtug.ie/Home/tabid/38/ctl/Details/Mid/369/ItemID/69/Default.aspx?ContainerSrc=[G]Containers/_default/No+Container&quot;&gt;Registration and Details&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;9th of September - Promiscuous Developer Meetup (location not confirmed) developers of different languages meetup and try to find the answer to life, the universe and everything, maybe it wont be 42 :) sounds kinda interesting. More info &lt;a href=&quot;http://developermeetup.wordpress.com/2010/07/30/promiscuous-developer-meetup/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;11th of September - &lt;a href=&quot;http://codingday.org/&quot;&gt;Open Spaces Coding Day III&lt;/a&gt; - A full day of coding on whatever topic is decided on the day , the last event was a really cool thing to do, learned loads. Hopefully this one will work out just as well.&lt;/p&gt;

&lt;p&gt;25th of September - &lt;a href=&quot;http://ossbarcamp.com/&quot;&gt;OSSBarcamp &lt;/a&gt;- The classic OSS event, to be held in UCD. Registration and details &lt;a href=&quot;http://ossbarcamp.com/&quot;&gt;OSSBarcamp&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;9th Of October - &lt;strong&gt;DDD Dublin&lt;/strong&gt;. An event where there are a lot of developer presentations, presented by developers. The talks are selected by vote (ie not the organizers) , for more info on the series of events, please check &lt;a href=&quot;http://www.developerdeveloperdeveloper.com/home/&quot;&gt;here&lt;/a&gt;; the events  in Scotland and Reading in previous years were really interesting , so its worth taking note of the date. I ll update this post when there is more info.&lt;/p&gt;
</description>
				<pubDate>Mon, 23 Aug 2010 21:49:09 +0000</pubDate>
				<link>http://roundcrisis.com/2010/08/23/2010-events-coming-up/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/08/23/2010-events-coming-up/</guid>
			</item>
		
			<item>
				<title>Another way of generating generic types</title>
				<description>&lt;p&gt;Kick post on Types, nothing outrageous, but this was just a construct that I never used too much.&lt;/p&gt;

&lt;p&gt;The other day a collegue and we got stuck on a method similar to this&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;void DoStuff(Type &lt;strong&gt;type&lt;/strong&gt;)
{
var iInterface = typeof(ISomethingAmazing);
Type genericType = //how to get ISomethingAmazing&amp;lt;&lt;strong&gt;type&lt;/strong&gt;&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;//do more things
}&lt;/p&gt;

&lt;p&gt;and well I didn’t know but you can do this&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;void DoStuff(Type &lt;strong&gt;type&lt;/strong&gt;)
{
var iInterface = typeof(ISomethingAmazing);
Type genericType = iInterface.MakeGenericType(new Type[] { **type **});&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;//do more things
}&lt;/p&gt;

&lt;p&gt;Why would you want this?
well say for example, you are working with a container and need to get all the ISomethingAmazing of whatever your type is
Particularly handy if you are using a handlers or factories a lot.&lt;/p&gt;

&lt;p&gt;What happened?&lt;/p&gt;

&lt;p&gt;Basically we just had information about the types we wanted but at compile type we didnt know the types, this is a away to return a runtime type even when you dont know what that type is.&lt;/p&gt;

&lt;p&gt;I hope this is helpful for someone&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;
</description>
				<pubDate>Mon, 26 Jul 2010 19:39:15 +0000</pubDate>
				<link>http://roundcrisis.com/2010/07/26/another-way-of-generating-generic-types/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/07/26/another-way-of-generating-generic-types/</guid>
			</item>
		
			<item>
				<title>When  &quot;Could not load file or assembly&quot; happens</title>
				<description>&lt;p&gt;So I was getting an “ Could not Load File or Assembly” error, even thou I was pretty certain I was referencing the right dlls in the correct folders. What could this error possibly mean?&lt;/p&gt;

&lt;p&gt;The actual error I had was:&lt;/p&gt;

&lt;blockquote&gt;

&lt;/blockquote&gt;

&lt;blockquote&gt;

  &lt;p&gt;System.IO.FileLoadException: Could not load file or assembly ‘Moq, Version=2.6.1014.1, Culture=neutral, PublicKeyToken=69f491c39445e920’ or one of its dependencies.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Some things I checked:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Maybe  I dont have the moq.dll assembly, but it was there.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Then I checked  the assembly version, my moq.dll was 4.x (the error stated 2.6.x was required), so there is a difference in the expected versions, why?&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Checked all projects in the solution, all the ones using Moq.dll where explicitly pointing at 4.x&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://www.red-gate.com/products/reflector/&quot;&gt;Reflector&lt;/a&gt; show time. I was using moq.contrib.dll on the project that was failing, and since it makes sense that such library would depend on moq, it was worth checking it out, this is what I saw&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;[caption id=”attachment_616” align=”aligncenter” width=”242” caption=”Reflector Screenshot”]&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2010/07/capture.png&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2010/07/capture.png?w=242&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;[/caption]&lt;/p&gt;

&lt;p&gt;This means that moq.contrib.dll did indeed depend on moq, so I just needed to find a version of it that pointed to the right assembly, I was lucky because I had a set of dlls that work, if you are not so lucky, get latest from the &lt;a href=&quot;http://code.google.com/p/moq-contrib/&quot;&gt;moq.contrib google code&lt;/a&gt; and simply run the Build.cmd and you are all set to go (you can replace the moq.dll dependecy if they have moved on).&lt;/p&gt;

&lt;p&gt;On the way I found some other interesting things&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Like &lt;a href=&quot;http://social.msdn.microsoft.com/Forums/en/clr/thread/63fe67b6-c3f9-4ae1-b787-b57418326f80&quot;&gt;this&lt;/a&gt; thread, basically it said that this was possibly a compiler bug. I thought damn a dead end, but it wasn’t :).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;A tool to find out how the dll binding happen callled &lt;strong&gt;FusLogw.exe&lt;/strong&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;FusLogw.exe&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Also known as the Assembly Binder Log Viewer, awesome right? :D&lt;/p&gt;

&lt;p&gt;Where is it?  I searched online and the tool seems to move a lot in differnt versions of Windows, In xp&lt;/p&gt;

&lt;p&gt;it could be here: &lt;strong&gt;C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\fuslogvw.exe&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In my windows 7 install I found it here: ** C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin&amp;gt;FUSLOGVW.exe**&lt;/p&gt;

&lt;p&gt;Oh yeah and you need to run it from the command line as an Administrator&lt;/p&gt;

&lt;p&gt;It might seem obvious, but you need to refresh after you run something that fails , it is, after all a log viewer&lt;/p&gt;
</description>
				<pubDate>Tue, 13 Jul 2010 22:33:22 +0000</pubDate>
				<link>http://roundcrisis.com/2010/07/13/when-could-not-load-file-or-assembly/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/07/13/when-could-not-load-file-or-assembly/</guid>
			</item>
		
			<item>
				<title>On Pair Programming </title>
				<description>&lt;h3 id=&quot;what-is-pair-programming&quot;&gt;What is pair programming?&lt;/h3&gt;

&lt;p&gt;Its when 2 developers sit down together to write a piece of code. There is one person in the keyboard known as the &lt;strong&gt;driver&lt;/strong&gt; and another person looking at the code and commenting about it, known as the ** navigator**, these roles can change in time. The idea is that while you are typing you are likely to catch certain things and when you are watching you are to catch other things.&lt;/p&gt;

&lt;h3 id=&quot;why&quot;&gt;Why?&lt;/h3&gt;

&lt;p&gt;I dont know if this happens to you, but many times, when I’m not sure how to solve a problem or when I have a solution to a problem that I’m not terribly happy with, I will talk to someone else about it. Then, one of two things happen: whoever I talk to gives me an idea, or as I explain the problem I realised that I missed an important piece of the puzzle and find the solution, the hidden third option is that I don’t have a solution but I have more to explore.  Anyway the whole point is that verbalizing the problem,  gives you a different take on it; maybe makes it more real?, as you talk you realise that certain things make no sense, you  ask yourself questions.  &lt;strong&gt;You have more visibility and clarity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Another more obvious advantages is that &lt;strong&gt;two brains are more than one&lt;/strong&gt;, collaboration can get you to really far. More eyes looking at the code will at least avoid silly mistakes, in the better cases it will drive you to better design, never mind the fact that two people will know this code really well, we all know that this is really handy in a team ( we all take holidays, have days when our brains just refuse to work, etc).&lt;/p&gt;

&lt;p&gt;When pairing , each of the persons in the pair need to be really involved, there is no distractions,  ( so perhaps take breaks every hour and a half or so) this intensity means to me that its more likely that as a pair there are more angles of the problem that will be covered.&lt;/p&gt;

&lt;h3 id=&quot;whats-wrong-with-it&quot;&gt;Whats wrong with it?&lt;/h3&gt;

&lt;p&gt;When people are pairing there are a few things I ve noticed that tend to go wrong&lt;/p&gt;

&lt;p&gt;1) &lt;strong&gt;One way street&lt;/strong&gt;. One of the pair is hogging the control and the navigator is quiet. This is probably the worse thing. the only possible advantage of this is knowledge transfer but I think this kind of pairing does more bad than good. One way to counter act this is using Test driven Ping Pong (see below). But education is key.&lt;/p&gt;

&lt;p&gt;If pairing, then try to pair, not to control.&lt;/p&gt;

&lt;p&gt;If  pairing try to collaborate you are not just watching a movie.&lt;/p&gt;

&lt;p&gt;If things are going to fast ask for slowing down, its not going to get better if you dont understand.&lt;/p&gt;

&lt;p&gt;2)** We’ll fix it later**. This is when the pair decide to do something below standard. I dont think its a terrible practise but it does leave a “bad taste” because even when the pair decide the task is accomplished , there is stuff left t do. also there is the broken window problem.&lt;/p&gt;

&lt;h3 id=&quot;test-driven-ping-pong&quot;&gt;Test Driven Ping Pong&lt;/h3&gt;

&lt;p&gt;Given a driver and a navigator, the role changes per test, say we have Alice and Bob, Alice is the driver first, she writes a test, fails, they fix  the code so the test passes, goes green , they come up with some refactorings , then Bob is the driver for the next test and so on. This sounds like a good approach when the developers dont know each other well or they have an ego problem, or they dont know where to start&lt;/p&gt;

&lt;h3 id=&quot;informal-pair-programing&quot;&gt;Informal Pair Programing&lt;/h3&gt;

&lt;p&gt;The navigator and driver roles change whenever is necessary, like when discussing stuff on a whiteboard . This is probably the best way but at the same time it requires the pair to be very involved and request changes often. I think this is more Organic(for lack of a better word) and pleasurable.&lt;/p&gt;

&lt;p&gt;Any comments on this? i would really appreciate it particularly from people practicing pair programing often&lt;/p&gt;
</description>
				<pubDate>Wed, 30 Jun 2010 22:00:26 +0000</pubDate>
				<link>http://roundcrisis.com/2010/06/30/on-pair-programming/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/06/30/on-pair-programming/</guid>
			</item>
		
			<item>
				<title>More than a text editor </title>
				<description>&lt;p&gt;Recently I started using Visual Studio 2010, if you follow me on twitter you probably know that this hasnt been a nice transition for me (apologies for the cursing btw)  I ve had many crashes, and I’m pretty sure I’m not alone, not only a quick search in twitter will reflect this (see image below, the only marked twitt is about a fix for something) , but a some of my co-workers had one or another problem.&lt;/p&gt;

&lt;p&gt;It would be naive to think all the issues have the same source, and I know that many are related to the plugins ( I use Resharper with xUnit extensions and AnkSvn). What I’m trying to say is that this post is not  to bash Visual Studio,  to be fair the IDE is pretty &lt;a href=&quot;http://roundcrisis.files.wordpress.com/2010/05/capture.png&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2010/05/capture.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;flashy, shiny, even amazing…. but you know what I want &lt;strong&gt;options&lt;/strong&gt;,  something I can rely on and that I can bend to my will. Lets elaborate on that.&lt;/p&gt;

&lt;p&gt;Using resharper means I’m used to using shortcuts, templates and whatnot,  I know I should be able to bend an IDE to do what &lt;strong&gt;I want&lt;/strong&gt; so I can code faster, be focused on what I’m doing&lt;strong&gt;. **On the other hand&lt;/strong&gt; **I can also see that having a comon IDE within a group means we can share tricks and learn about each other practises.&lt;/p&gt;

&lt;p&gt;So today I saw this &lt;a href=&quot;http://blog.wekeroad.com/2010/05/04/do-androids-dream-of-vim&quot;&gt;post&lt;/a&gt; by Rob Connery and I cant help but wonder, Is Vim the right way to go?, no idea but I know I’m ready to give it another try.  However Id iek to set my expectations. I think what I would like is a more modular VS  (where I can turn things off).&lt;/p&gt;

&lt;p&gt;Although it s a pain, the &lt;strong&gt;Add Reference Dialog **speed is not my main issue,  it takes so long to add a reference that at least it makes me think “&lt;/strong&gt;Do you really want to add that dependecy?**” I would prefer if it wouldnt happen tho.&lt;/p&gt;

&lt;p&gt;So, what do I want ouf of my IDE:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;To write code, quickly&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;to rely on it, if it crashes, updates, looses references that It handles it elegantly&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;To get feedback about the code I write  quickly&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;yes to  intellisense , I’m a terrible typist (maybe I should change that?) and it helps when you have long explicit variable names (sometimes I go overboard with this until I find better names)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;to be able to change the way the code looks&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;to format the code to my will, even if it s stupid, I want to be able to try new things&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;to be able to do simple **and **complex refactorings easily and that their result is obvious before we event start the operation&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;good ctrl+z support&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;to leverage what I know, and induce me to do smarter things, after all the IDE has intimate knowledge about the framework I’m using&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;that I can carry around my settings (shortcuts, templates, etc really easily)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;am I dreaming? Possibly, but lets see whats possible&lt;/p&gt;
</description>
				<pubDate>Thu, 06 May 2010 08:00:34 +0000</pubDate>
				<link>http://roundcrisis.com/2010/05/06/more-than-a-text-editor/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/05/06/more-than-a-text-editor/</guid>
			</item>
		
			<item>
				<title>Irish Open Spaces Coding Day II Retrospective</title>
				<description>&lt;p&gt;I think the best way to describe this is saying, When is the next one? (We think around late August, early September)&lt;/p&gt;

&lt;p&gt;Thanks again to our sponsors: Jetbrains, Manning and Microsoft, and particularly to our hosts: the open source Lab in UCD, that place is just designed for this type of events.&lt;/p&gt;

&lt;p&gt;Sessions:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Rx :&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;ook!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Cucumber with Iron Ruby&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;pLinq and Mono&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Mongo Db (a bit of a comparison between .net implementation and a ruby implementation)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All the code for the sessions is available in our repo.&lt;/p&gt;

&lt;p&gt;Some photos from the event here &lt;a href=&quot;http://www.flickr.com/photos/roundcrisis/sets/72157623824914233/&quot;&gt;http://www.flickr.com/photos/roundcrisis/sets/72157623824914233/&lt;/a&gt;&lt;/p&gt;

</description>
				<pubDate>Wed, 28 Apr 2010 09:00:44 +0000</pubDate>
				<link>http://roundcrisis.com/2010/04/28/irish-open-spaces-coding-day-ii-retrospective/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/04/28/irish-open-spaces-coding-day-ii-retrospective/</guid>
			</item>
		
			<item>
				<title>FluentMigrator Composite Index</title>
				<description>&lt;p&gt;&lt;a href=&quot;http://github.com/schambers/fluentmigrator/&quot;&gt;Fluentmigrator &lt;/a&gt;is a really nice migration tool that allows you to tear your database up and down keeping version, please visit the project page for more info.&lt;/p&gt;

&lt;p&gt;Anyway, the other day I had to create a composite index, and I didnt know how,  the way to do that is:&lt;/p&gt;

&lt;p&gt;Create.Index(“Name_of_the_index_String”).OnTable(“Name_of_the_Table_String”)
.OnColumn(“Column_Name_string”).Ascending()
.OnColumn(“Other_Column_Name_string”).Ascending();&lt;/p&gt;

&lt;p&gt;Looks kinda obvious no? but what threw me off at the time is that I was looking at the possible operations after OnColumn and there was nothign obvious there,&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2010/04/fm_index1.png&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2010/04/fm_index1.png&quot; alt=&quot;FluentMigrator Create Index Column Intellisense&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;then  I looked at the Sql documentation for CREATE INDEX&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
    ON &amp;lt;object&amp;gt; ( column [ ASC | DESC ] [ ,...n ] )
    [ INCLUDE ( column_name [ ,...n ] ) ]
    [ WHERE &amp;lt;filter_predicate&amp;gt; ]
    [ WITH ( &amp;lt;relational_index_option&amp;gt; [ ,...n ] ) ]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The solution was (kind of) there, you could do more columns after you specify the sorting direction. Perhaps it’s  obvious but it took me a while to figure out. It was logical however not obvious.&lt;/p&gt;

&lt;p&gt;Also on composite, before I created an index I thought about using composite keys, J.Miller has a post &lt;a href=&quot;http://codebetter.com/blogs/jeremy.miller/archive/2007/02/01/Composite-keys-are-evil.aspx&quot;&gt;here &lt;/a&gt;on why that is not really a good idea ( have a look at the comments in particular). For me, it boils down to:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Maybe something that has meaning now, wont necessarily have the same meaning in the future&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;It’s harder to manage composite keys that it is to manage surrogate keys&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are more reasons for and against surrogate keys, but this was what was suitable to me at the time&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;
</description>
				<pubDate>Fri, 02 Apr 2010 10:19:22 +0000</pubDate>
				<link>http://roundcrisis.com/2010/04/02/fluentmigrator-composite-index/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/04/02/fluentmigrator-composite-index/</guid>
			</item>
		
			<item>
				<title>Ada Lovelace Day 2010: Amanda Laucher</title>
				<description>&lt;p&gt;I’m late with the Ada Lovelace Day article, I had the choice of making it on time but incomplete, or put some time and be late, and I chose the later this time. I really though the person and the topic deserved in depth investigation.&lt;/p&gt;

&lt;p&gt;I didn’t really know how to approach the Ada Lovelace Day last year and this year I still don’t know now, I think the best homage I can do is learn more about F# in this case.&lt;/p&gt;

&lt;p&gt;This post is about Amanda Laucher and about F#. Amanda is the author of &lt;a href=&quot;http://www.manning.com/laucher/&quot;&gt;F# in Action&lt;/a&gt;. A speaker and most importantly a software developer, when you see her talking you can see she really likes what she does, and that fact is pretty inspirational.&lt;/p&gt;

&lt;p&gt;I found quite a few of her presentations online&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;QCon London 2010 - &lt;a href=&quot;http://www.infoq.com/presentations/Pragmatic-F-Sharp-in-Action&quot;&gt;Pragmatic F# in Action&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;QCon London 2009 - &lt;a href=&quot;http://www.infoq.com/presentations/Concurrent-Programming-with-Microsoft-F-Amanda-Laucher&quot;&gt;Concurrent Programming with F#&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Channel 9  - 2008 Ted &lt;a href=&quot;http://www.dotnetrocks.com/default.aspx?ShowNum=377&quot;&gt;Neward and Amanda Laucher on F#&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;I’m sure there is more but that’ll get you going =)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then I also found some other F# resources&lt;/p&gt;

&lt;p&gt;Wikipedia had a pleasant surprise in store for me with a really comprehensive &lt;a href=&quot;http://en.wikipedia.org/wiki/F_Sharp_(programming_language)&quot;&gt;introduction to the language&lt;/a&gt;, and also pointed me to a &lt;a href=&quot;http://en.wikibooks.org/wiki/F_Sharp_Programming&quot;&gt;wikibook&lt;/a&gt; however when I started typing the code and trying to run it I ran into problems because the parser looks at line breaks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclaimer: I never done any f# before so anything below could be completely wrong (if so please let me know so I learn :) )&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In a short time I learnt that&lt;/p&gt;

&lt;p&gt;F# is&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Not purely a functional language, some OO aspects and has type inference.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;a strongly typed language&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;.Net language&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;has Garbage Collection&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;does Lazy evaluation ( this is really cool )&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Some sort of Asynchronous workflow ( need to digg deeper on this)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More detail&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Everything is immutable by default, but there are mutable objects ( apparently the objects that you can get by interoping with, say,a  c# dll are mutable but I’m not sure)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;lazy evaluation&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Asynchronous Workflows&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;You can pass functions as result of function executions, or be the result of functions, and have functions inside functions&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Send parts of parameters into a function&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;have a collection of functions that can be started asynchronously (holy smokes!)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After looking around I also found some good videos from Erik Meyer on the topic, hes got a series of them you can have a look &lt;a href=&quot;http://channel9.msdn.com/shows/Going+Deep/Lecture-Series-Erik-Meijer-Functional-Programming-Fundamentals-Chapter-1/&quot;&gt;here&lt;/a&gt;, the series goes through the history of functional programming and principles, very interesting.&lt;/p&gt;

&lt;p&gt;I can see a lot of potential on this, I find functional programming a big mind switch and I’m sure it will take me a good while to do it properly, however, the goodness of looking at this code comes from the ideas you can take from different approaches.&lt;/p&gt;

&lt;p&gt;One thing that did strike me so far is that i ve seen bad variable names and no unit testing on it at all, on the other hand, the power that you seem to suddenly have is just incredible, tho since the paradigm shift is so big, I found myself stumbling and not being able to do things that i find really simple in c# (like print an array to the console, the difficulty was on realising that the line breaks are significant)&lt;/p&gt;

&lt;p&gt;The real life example from the QCon talk from 2009 was a really good way to see the value of the language as real life usage, the QCon  talk from 2010 was really good because it dived deep into the language, language usage, etc.&lt;/p&gt;

&lt;p&gt;I feel like I’ve started learning something that will change the way I code and I’m really happy about that.&lt;/p&gt;
</description>
				<pubDate>Sun, 28 Mar 2010 08:57:39 +0000</pubDate>
				<link>http://roundcrisis.com/2010/03/28/ada-lovelace-day-2010-amanda-laucher/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/03/28/ada-lovelace-day-2010-amanda-laucher/</guid>
			</item>
		
			<item>
				<title>Irish Open Spaces Coding Day II</title>
				<description>&lt;p&gt;Hi all:&lt;/p&gt;

&lt;p&gt;Just thought I d post here that a group of us in Dublin. Alt.Net are organizing a coding day the 24th of April in UCD, it should be a fun day of hacking some code. One of the really cool things is that James Gregory will be there talking about Fluent Nhibernate.&lt;/p&gt;

&lt;p&gt;If this sounds like something you d’like to do you, can  register and find out more about it in &lt;a href=&quot;http://codingday.org&quot;&gt;codingday.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;
</description>
				<pubDate>Fri, 19 Mar 2010 13:00:03 +0000</pubDate>
				<link>http://roundcrisis.com/2010/03/19/irish-open-spaces-coding-day-ii/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/03/19/irish-open-spaces-coding-day-ii/</guid>
			</item>
		
			<item>
				<title>New/Swiped Development Machine - software musts</title>
				<description>&lt;p&gt;I understand the title makes little sense, but this is probably what I would search in a web search engine ( hopefully at the time I ll find my own post)  A short, unordered list of things I install when I get a new machine/wipped machine&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;An FTP client Filezilla will do&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Firefox + Add on: firebug, noscript, colurful tabs,&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Chrome ( for js intensive stuff it jsut renders faster)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;ieTester ( run multiple ie versions parallely)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;ieDebuger&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Wireshark, comes handy&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Reflector&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Resharper&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Syntax friendly  Notepad ( I use Notepad ++  but not mad about it)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Tortoisesvn or Anksvn&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Tortoise git&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;SVN Monitor&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Git ( you ll need it at least to download libraries code)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;foobar2000 music player ( after all you need to block the noise from the outside)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Sql Server Management Studio , you ll eventually need it  and if you have profiler you ll probably need it too&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;#Develop is kinda handy too&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;I use Evernote, so I would install that, tho not run it often just because I don’t  like the desktop client much tbh&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Sumatra PDF (if anyone knows a better one I d appreciate it)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Visual Studio&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Setup IIS&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Sat, 13 Mar 2010 14:20:25 +0000</pubDate>
				<link>http://roundcrisis.com/2010/03/13/newswiped-development-machine-software-musts/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/03/13/newswiped-development-machine-software-musts/</guid>
			</item>
		
			<item>
				<title>DDD South West</title>
				<description>&lt;p&gt;&lt;a href=&quot;http://www.dddsouthwest.com/&quot;&gt;&lt;img src=&quot;http://dddsouthwest.com/images/DDDSouthWest2.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So there is another DDD event the 5th of June, and this time is in Bristol, call for speakers is on ( if you want to submit, you can get instructions on how to do so &lt;a href=&quot;http://dddsouthwest.com/ProposedSessions/tabid/69/Default.aspx&quot;&gt;here&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Sessions look interesting so far.&lt;/p&gt;

&lt;p&gt;I really enjoyed the last DDD in Reading, Uk.&lt;/p&gt;
</description>
				<pubDate>Sat, 06 Mar 2010 09:00:23 +0000</pubDate>
				<link>http://roundcrisis.com/2010/03/06/ddd-south-west/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/03/06/ddd-south-west/</guid>
			</item>
		
			<item>
				<title>The Art of Unit Testing - Review</title>
				<description>&lt;p&gt;A few of us have been reading this book as a part of a book club. Finally I think is time to push a review for this book .&lt;/p&gt;

&lt;p&gt;Let me start saying that my expectations for the book were &lt;strong&gt;very&lt;/strong&gt; high, the book club helped because we were really reading it in depth and going over little bits of each chapter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad things about the book&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Examples are not great, there are errors on some of them, and (possibly the worse thing of it all) some of the tests dont follow the advice that is given in the book, particularly in naming convention.&lt;/p&gt;

&lt;p&gt;If you download the code that accompanies the book, some of the tests (that are supposed to pass) fail.&lt;/p&gt;

&lt;p&gt;We sent an email with corrections but never heard back ( not sure if they didnt get it or what), which, to be honest, was a bit disappointing, if this code was on github I would have forked it just to get it fixed, tho I’m not sure Is correct to do that if the code is not on github (if anyone knows please let me know).&lt;/p&gt;

&lt;p&gt;Again on the code samples, some of the examples scenarios are not really that descriptive, I have to add, that after preparing the talk I gave in DDD, I have to say its really really hard to come up with good sample code, that demonstrates a smell and a solution in a clear way in not a lot of code… so maybe its not a fair criticism, but I really had to mentione it, because you read the sample and really **wtf? **a bit .&lt;/p&gt;

&lt;p&gt;The chapter on Mocking is not great either, Rhino mocks is not used in anger, and I’m pretty sure Roy could have gotten someone with loads of experience in Rhino Mocks to look and review (and improve ) the example code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good things about the book&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I know that after what I said what bad in the book, this will sound fake, but I actually think the book is &lt;strong&gt;really&lt;/strong&gt; good, because I learned &lt;strong&gt;loads&lt;/strong&gt; about unit testing.&lt;/p&gt;

&lt;p&gt;It made me think about how to test, What to think about when testing, how to approach writing code with testing in mind.&lt;/p&gt;

&lt;p&gt;It basically gave me a lot of basics like, the difference between Unit and integration tests, and that was important, because I could clearly define, I need to tests **this **(whatever it is you are writing) I understood the differences between different &lt;a href=&quot;http://martinfowler.com/articles/mocksArentStubs.html&quot;&gt;Fakes&lt;/a&gt;,  as well as the difference between state and behavioural tests.&lt;/p&gt;

&lt;p&gt;Along the way, you pick up on test smells, and many tips on what to do and most important, what not to do.&lt;/p&gt;

&lt;p&gt;Since I read the book I understand and I have the purpose of writting code ( test code included of course) , that is readable and maintainable. And I want to **trust **my tests, and thanks to the book, I can now understand why these are important qualities of the code.&lt;/p&gt;

&lt;p&gt;The funny thing is, that since then, I actually feel like I really got how to be test driven, because writing code in any different way, simply doesn’t make sense any more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A really good book if you are interested in unit testing and feel the need to learn how to do it better, like anything you read, take it, use what you can and completely believe in and then, discard the rest; even then you will have about 80% of the book (or more) really valuable.&lt;/p&gt;

&lt;p&gt;Reading this book, along with &lt;a href=&quot;http://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530&quot;&gt;TDD by example&lt;/a&gt; by Kent Beck and maybe completing it with &lt;a href=&quot;http://xunitpatterns.com/&quot;&gt;xUnit Test Patterns&lt;/a&gt; byMeszaros&lt;/p&gt;
</description>
				<pubDate>Mon, 15 Feb 2010 07:39:04 +0000</pubDate>
				<link>http://roundcrisis.com/2010/02/15/the-art-of-unit-testing-review/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/02/15/the-art-of-unit-testing-review/</guid>
			</item>
		
			<item>
				<title>Push on Green Deployment - (Brain Dump)</title>
				<description>&lt;p&gt;The other day I was listening to Kent Beck in &lt;a href=&quot;http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;amp;printTitle=Industry_Misinterpretations_164:_Going_for_the_Longball&amp;amp;entry=3436948975&quot;&gt;this podcast&lt;/a&gt; where he was talking about, amongst other things, push on green deployment, basically the idea is that once your test suite goes green, you deploy.&lt;/p&gt;

&lt;p&gt;When I heard  this originally I thought :&lt;/p&gt;

&lt;p&gt;1) Think about all possible problems -&amp;gt; not only technical( this component is not compatible with the component just rolled out, etc, etc)  but also processes ( and people using them ) this is a real concern, because the pace of change would increase I would guess)&lt;/p&gt;

&lt;p&gt;2) What tests? Who wrote them? I would think higher level tests? actually all tests? Possibly the upside of this is that companies that produce quality software will become incredibly popular ( “My software doesn’t brake, we test throughly” could actually be part of the marketing and backed by actual tests, imagine that)&lt;/p&gt;

&lt;p&gt;3) The premise for push on green is basically to push Software Development practices up a notch, so that as a developer we can say we are delivering a feature on a particular date and we can do that confidently, How does push on green help us deliver as we promised, would it makes us slower?&lt;/p&gt;

&lt;p&gt;Deployment is a painful process, and often neglected topic, as a developer how often do you think about it? And worse, How many times you just don’t know what will happen? Most importantly. How stressed do you get close to going live? (I guess this is the time when we all start thinking about it seriously)&lt;/p&gt;

&lt;p&gt;Great, now imagine What if that would happens every &lt;strong&gt;hour&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;In the beginning it would be scary, but then, the practices need to be polished enough so it becomes something normal, that you are not only used to , but confident about it. After all we all become better at things with practice.&lt;/p&gt;

&lt;p&gt;Do i like the idea? Yeah! and Its as scary as it gets :) Lets look into it more in depth&lt;/p&gt;

&lt;h2 id=&quot;so-how-can-this-possibly-work&quot;&gt;So how can this possibly work?&lt;/h2&gt;

&lt;p&gt;If I was going insane(er?) and really wanted to do this, as a C# developer, what is possible?&lt;/p&gt;

&lt;p&gt;Maybe I would start of an continuous open beta or, edge (somehow warning my users of the fact that the code they are using is “fresh out of the oven”) and once I see some stability (perhaps people could vote for it or similar)then I can fully deploy.&lt;/p&gt;

&lt;p&gt;But then thats is just my application, lets imagine I produce code that is not public facing, but that , its an API, consumed by many other applications, how would they be aware and &lt;strong&gt;react&lt;/strong&gt; to interface changes? More importantly, would this make software evolution slower  by persisting everlasting APIs? or would it induce APIs that are very noisy, hence harder to discover?&lt;/p&gt;

&lt;p&gt;I’m asking this because:   lets forget about the barrier of web or desktop for a minute and focus on dlls, where they live and how we use them and consume them.&lt;/p&gt;

&lt;p&gt;If my Operating System vendor/framework provider makes a push do i want my app to get that immediately?&lt;/p&gt;

&lt;p&gt;Say I’m using an interface something like IEmailSender, that has the methods Send(IEmailTemplate, ISomethingElse) and that is replaced for the better designed IEmailSender.Send(Message) with the Send(Message[]) overload. In that example I agree with the change, I want to use the new code because the contract is better (lets assume we all agree is better ok); however, that would mean changing my application, re testing all those areas where I use IEmailSender and I most likely don’t want that.&lt;/p&gt;

&lt;p&gt;I have to add, I would probably want to do an integration test anyway, or should I blindly trust the new IEmailSender implementation because we are all pushing on green now?&lt;/p&gt;

&lt;p&gt;So the option here seems to be, create the new contract but maintain the old one around for a while right?, but then your API will have all these Send methods, and that doesnt seem to be going into the better development practices direction&lt;/p&gt;

&lt;p&gt;Next I’m gonna try heroku in anger and see if I get more ideas from using it, heroku is a service that runs ruby applications that are deployed when you commit.&lt;/p&gt;

&lt;p&gt;This is a brain dump on this and would love to hear thoughts from other people, corrections, feedback, etc always welcome :)&lt;/p&gt;
</description>
				<pubDate>Fri, 12 Feb 2010 01:02:01 +0000</pubDate>
				<link>http://roundcrisis.com/2010/02/12/push-on-green-deployment-brain-dump/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/02/12/push-on-green-deployment-brain-dump/</guid>
			</item>
		
			<item>
				<title>Test Class Organization</title>
				<description>&lt;p&gt;Hi there&lt;/p&gt;

&lt;p&gt;Just though I d share this&lt;/p&gt;

&lt;p&gt;this is the way I ve been organizing my test code as of late&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;	public class MyClassTests
	{
		public class Given_a_context
		{
			[Fact]
			public void When_somthing_happens_Then_result()
			{
				throw new NotImplementedException();
			}

			//...............
		}

		public class Given_a_different_context
		{
			[Fact]
			public void When_somthing_happens_Then_result()
			{
				throw new NotImplementedException();
			}

			//...............
		}
	}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I like this because you can still easily find the class name with resharper 
you can also separate the contexts you are testing in a more clean way
this works out good for me most of the times, even when you are inheriting 
from a base test class.
It also reads well in the Test runner.
Any comments?&lt;/p&gt;

</description>
				<pubDate>Tue, 09 Feb 2010 21:29:05 +0000</pubDate>
				<link>http://roundcrisis.com/2010/02/09/test-class-organization/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/02/09/test-class-organization/</guid>
			</item>
		
			<item>
				<title>Lessons Learned in Unit Testing Session - DDD8</title>
				<description>&lt;p&gt;DDD8  was a lot of fun!&lt;/p&gt;

&lt;p&gt;I really didn’t know what to expect and it turned out great, and got to a few talks ( not as many as I wanted tho) and met personally a lot of really interesting people.&lt;/p&gt;

&lt;p&gt;Moving on swiftly to the meaty bit of the post:&lt;/p&gt;

&lt;p&gt;I’ve  uploaded the code and slides to &lt;a href=&quot;http://github.com/Andrea/LessonsLearnedInUnitTesting&quot;&gt;github&lt;/a&gt;, I’m hoping I can improve this samples with time, if there is anything wrong apologies in advance, first time using git as a committing to a project so I’m bound to get it wrong. Looking forward to James Gregory E-Van on git so I can learn more on the topic :).&lt;/p&gt;

&lt;p&gt;I’m sure I ll look at the code sometime later and think OMG! how did I dare to present this in public, but I guess is the nature of the beast :).&lt;/p&gt;

&lt;p&gt;If you saw the talk please let me know what you think, as I would appreciate any feedback, particularly the parts that I can make better. So far I the feedback I have is:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;I do speak too quick,&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;I should talk about legacy code and how to deal with that&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I posted the code in the same way I presented it, this means there is a OrderService_version1, 2 and 3, hopefully you can follow the code pretty much as we did it in the talk.&lt;/p&gt;

&lt;p&gt;There was some  questions, and I said I ll post some links here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Books&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://www.artofunittesting.com/&quot;&gt;The Art of Unit Testing&lt;/a&gt; (Roy Osherove),  the talk is heavily inspired by this book&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://xunitpatterns.com/&quot;&gt;xUnit Test Patterns, Refactoring Test Code&lt;/a&gt; ( Meszaros), Great book if you are looking for more detail. Perfect as a reference book&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;-&lt;a href=&quot;http://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530&quot;&gt; TDD by Example&lt;/a&gt; by Kent Beck, a very hands on approach highly recomended.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052&quot;&gt;Working Effectively with Legacy Code&lt;/a&gt;, Michael Feathers - A must read if you are interested in testing (whether you are working with legacy code or not).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tools&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;During the talk I was using&lt;/p&gt;

&lt;p&gt;Unit testing frameworks:&lt;/p&gt;

&lt;p&gt;-&lt;a href=&quot;http://www.codeplex.com/xunit&quot;&gt;xUnit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;-&lt;a href=&quot;http://www.nunit.org/&quot;&gt;nUnit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mocking Frameworks:&lt;/p&gt;

&lt;p&gt;-&lt;a href=&quot;http://code.google.com/p/moq/&quot;&gt;moq&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Other tools  mentioned:&lt;/p&gt;

&lt;p&gt;-&lt;a href=&quot;http://github.com/ayende/rhino-mocks&quot;&gt;Rhino  Mocks&lt;/a&gt;: Possibly the most used Mocking Framework&lt;/p&gt;

&lt;p&gt;-&lt;a href=&quot;http://github.com/riteshrao/ncommon/&quot;&gt;NCommon&lt;/a&gt;: General purpose library, definitely worth a check&lt;/p&gt;

&lt;p&gt;-&lt;a href=&quot;http://github.com/enkari/ninject/&quot;&gt;Ninject&lt;/a&gt;: IoC container ( there is also .. Ninject.MVC that helps you wire up the dependencies of your controllers on they fly, very useful )&lt;/p&gt;

&lt;p&gt;-&lt;a href=&quot;http://www.castleproject.org/castle/download.html&quot;&gt;Windsor&lt;/a&gt;: IoC container&lt;/p&gt;

&lt;p&gt;If there are any questions or comments, please do let me know&lt;/p&gt;

&lt;p&gt;Thanks to the organizers and everyone there, it was a wonderful experience that I’m hoping to repeat.&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;
</description>
				<pubDate>Sun, 31 Jan 2010 22:55:41 +0000</pubDate>
				<link>http://roundcrisis.com/2010/01/31/lessons-learned-in-unit-testing-session-ddd8/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2010/01/31/lessons-learned-in-unit-testing-session-ddd8/</guid>
			</item>
		
			<item>
				<title>Step by Step StarterSTS Setup</title>
				<description>&lt;p&gt;I’m planing on a series of blogs on WIF ( windows Identity Foundation) however that might or might not happen :), so meanwhile I  m posting this, StarterSTS is as the name implies a starter sts something to get you started on the world of Federeation Identity , claims and all that lovely stuff.&lt;/p&gt;

&lt;p&gt;You can find a video about all this steps in the&lt;a href=&quot;http://startersts.codeplex.com/&quot;&gt; codeplex site &lt;/a&gt;to starter STS, however there are a few differences between what you can see in the config files there and whats in 0.95 ( this is what I’ve used)  .&lt;/p&gt;

&lt;p&gt;I tried this on a Windows 7 and a Server 2008 machine&lt;/p&gt;

&lt;p&gt;1) Get the sources from codeplex and copy them over somewhere. create a web app that points to it
2) Create a new app pool ( not necesary but nice to be able to see what is happening)
3) Install WIF (used to be called geneva framework)  latest binaries available &lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyID=eb9c345f-e830-40b8-a5fe-ae7a864c4d76&amp;amp;displaylang=en#filelist&quot;&gt;here &lt;/a&gt;
4) Download and install SQL server express,or if you have a ssql server there happy days :D
5) Create a self signed cert and add it to the default web site , then go to default website and add the certificate to https with Bindings options
6)  Add read access to the Network service account in the folder where you put the sts sources
7) Run mmc -&amp;gt; add snap in and get the cert thumb print , also set the network service read permisions by right click Manage Private Keys…&lt;a href=&quot;http://roundcrisis.files.wordpress.com/2009/12/snapin.png&quot;&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2009/12/snapin.png?w=237&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
8) Open the file config/Certificates.config and change the thumbprints of the certificates ( initialliy they are all the same , the last one RP, should be the thumbprint with all spaces removed) (you can get the thumbprint of the certificate in mmc -&amp;gt;certificate -&amp;gt;properties -&amp;gt; thumbprint)
9) Run aspnet_regsql ( to create the asp.net membership provider aspnetdb) (This program is not in the path, so you ll probably have to go to C:\Windows\Microsoft.NET\Framework&amp;lt;your version of the .net framework, if in doubt go to 2.0»&lt;strong&gt;aspnet_regsql&lt;/strong&gt; )
10) Create some users from IIS Maanger.
11) If you are going to be using from somewhere other than localhost:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;The self cert you provided must be added to your the trusted providers( whereever you are using this)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;when you are using fedutil make sure teh references to the federationmetadata.xml points to your server and not localhost ( i seen this happening more than once)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;12) On the application side of things Add STS reference…
13) you might need to tweak the startersts.Config&lt;/p&gt;
</description>
				<pubDate>Thu, 17 Dec 2009 21:30:51 +0000</pubDate>
				<link>http://roundcrisis.com/2009/12/17/step-by-step-startersts-setup/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/12/17/step-by-step-startersts-setup/</guid>
			</item>
		
			<item>
				<title>Using Ninject and Asp.Net MVC </title>
				<description>&lt;p&gt;If you are trying to use Ninject with Asp.net MVC, there is an integration available in github
http://github.com/enkari/ninject.web.mvc if you look at the code there its just 3 clases, but
the fact that its been used by much more people than just myself makes me a bit more confortable because
I’m not terriby familiar with Asp.Net MVC. Please note I’m not too familiar with Ninject either
If there is anything that can be improved, I’m all ears.&lt;/p&gt;

&lt;p&gt;Anyway, this is the integration working, using Ninject 2, I tried this with MVC 1 and 2 and they both worked.&lt;/p&gt;

&lt;p&gt;Obviously get the code from the Github repository and build the solution in release mode, add them to your
project.&lt;/p&gt;

&lt;p&gt;Then in your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Global.asax.cs&lt;/code&gt; you need to do your implementation of CreateKernel, and a really important step,
to register all your controllers, to do that just override the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OnApplicationStarted&lt;/code&gt; with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RegisterAllControllersIn(&quot;SomeAssemblyName&quot;)&lt;/code&gt;
as in the example there in github.&lt;/p&gt;

&lt;p&gt;If you are not familiar with ninject you ll need to look at defining your Modules as well, something like&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    private class MyWebAppModule : NinjectModule
    {
       public override void Load()
      {
          Bind&amp;lt;ISomething&amp;gt;().To&amp;lt;Something&amp;gt;();
    ......
      }
    }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Oh yeah, for some reason, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kernel.AutoLoadModules()&lt;/code&gt; doesn’t work for me, its not a feature I’m interested in at the moment but …&lt;/p&gt;

&lt;p&gt;and you can use that module to create the kernel, there are other ways to use Modules but that worked for me
on my todo now is to understand why you would use one way over the other to create and work with modules
and what modules actually are.&lt;/p&gt;
</description>
				<pubDate>Fri, 30 Oct 2009 10:38:18 +0000</pubDate>
				<link>http://roundcrisis.com/2009/10/30/using-ninject-and-asp-net-mvc/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/10/30/using-ninject-and-asp-net-mvc/</guid>
			</item>
		
			<item>
				<title>Ext Js bits </title>
				<description>&lt;p&gt;Just some interesting thing I found on the extjs world.&lt;/p&gt;

&lt;p&gt;I’m only looking at stuff working on ext3.0&lt;/p&gt;

&lt;p&gt;In ExtJs the JsonStore has &lt;strong&gt;paramNames&lt;/strong&gt; this Object contains 4 properties&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    {
        start : &apos;start&apos;,  // The parameter name which specifies the start row
        limit : &apos;limit&apos;,  // The parameter name which specifies number of rows to return
        sort : &apos;sort&apos;,    // The parameter name which specifies the column to sort on
        dir : &apos;dir&apos;       // The parameter name which specifies the sort direction
    }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This properties are the default however they can be changed by using a configuration property or to change globally
it should be changed in the &lt;strong&gt;store&lt;/strong&gt; prototype&lt;/p&gt;

&lt;h2 id=&quot;drag-and-drop-into-a-grid&quot;&gt;Drag and Drop into a grid&lt;/h2&gt;

&lt;p&gt;Shea Frederick has a very nifty Excel drag and drop into the grid, got the code
and runs in ie7, ie8, ff3.5 and Chrome and you can get it &lt;a href=&quot;http://www.vinylfox.com/datadrop-drag-grid-data-from-spreadsheet/&quot;&gt;here&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Tue, 20 Oct 2009 19:00:54 +0000</pubDate>
				<link>http://roundcrisis.com/2009/10/20/ext-js-bits/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/10/20/ext-js-bits/</guid>
			</item>
		
			<item>
				<title>Barcamp Derry Presentation</title>
				<description>&lt;p&gt;Had a brilliant weekend up North in @&lt;a href=&quot;http://www.barcampderry.com/&quot;&gt;barcampderry&lt;/a&gt; Met some interesting folks and had a chance to discover a fantastic city and the surrounding area.&lt;/p&gt;

&lt;p&gt;As promised these is the slide deck for the presentation, I don’t think these are of much use but please feel free to ping me on twitter or as a comment here if you have questions or comments.&lt;/p&gt;

&lt;p&gt;[slideshare id=2213304&amp;amp;doc=oss-091013174416-phpapp02]&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;

</description>
				<pubDate>Tue, 13 Oct 2009 22:49:48 +0000</pubDate>
				<link>http://roundcrisis.com/2009/10/13/barcamp-derry-presentation/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/10/13/barcamp-derry-presentation/</guid>
			</item>
		
			<item>
				<title>Thoughs on 1st Book Club meetup</title>
				<description>&lt;p&gt;The Art of Unit Testing (by Roy Osherove) First Meetup&lt;/p&gt;

&lt;p&gt;Its amazing how much you can talk about just one chapter, ok we diverged at some point to related topics, we dreamed about our own Open Source project, again. Anyway, these are my thoughs about the first chapter, after the meeting&lt;/p&gt;

&lt;p&gt;Integration testing and unit testing:  I end up thinking:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;You shouldnt do it inadvertedly.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Its your responsability as as developer to do certain Integration tests (if you want to make sure that certain services are working as expected, that certain dependencies that you have and you are ok with that are working as expected)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We also mentioned the Demeter Law when talking about building APIs.&lt;/p&gt;

&lt;p&gt;Again this inspired me to look at &lt;a href=&quot;http://storyteller.tigris.org/&quot;&gt;StoryTeller&lt;/a&gt;. Some resources I found:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Jeremy Miller’s &lt;a href=&quot;http://codebetter.com/blogs/jeremy.miller/archive/2009/08/24/how-about-a-storyteller-preview-release.aspx&quot;&gt;post about it&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Elegant Code &lt;a href=&quot;http://elegantcode.com/2009/08/26/code-cast-30-story-teller-with-jeremy-miller/&quot;&gt;Podcast&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;InfoQ &lt;a href=&quot;http://www.infoq.com/news/2009/09/storyteller&quot;&gt;Post&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Channerl 9 &lt;a href=&quot;http://channel9.msdn.com/posts/Glucose/Hanselminutes-on-9-Storyteller-with-Jeremy-Miller/&quot;&gt;Podcast&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;http://elegantcode.com/2009/08/26/code-cast-30-story-teller-with-jeremy-miller/&quot;&gt;&lt;/a&gt; I’m now looking at the samples from it but that ll be in other post :)&lt;/p&gt;
</description>
				<pubDate>Wed, 16 Sep 2009 19:33:47 +0000</pubDate>
				<link>http://roundcrisis.com/2009/09/16/thoughs-on-1st-book-club-meetup/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/09/16/thoughs-on-1st-book-club-meetup/</guid>
			</item>
		
			<item>
				<title>The Art of Unit Testing - Chapter 1 </title>
				<description>&lt;p&gt;We are meeting for the first time for the Book club and just to get the ball rolling on this I though I’d write up a mini summary of chapter 1 on &lt;a href=&quot;http://www.manning.com/osherove/&quot;&gt;The Art of  Unit Testing&lt;/a&gt; before the meeting as a way to explore the concepts and then another one after if necesary.&lt;/p&gt;

&lt;p&gt;So far I like the book, a very clean and concrete explanation of the basics, in plain english.&lt;/p&gt;

&lt;p&gt;Some concept definitions are opinionated, but  Roy does a good job of it by telling you that there are many defintions available of certain terms, he then tells you wich one he will be using, for example when he defines Legacy Code he setteles for: Code that has no unit tests ( in line with M Feathers), he gives you a few other options including one that kept sticking in my head: Code that works. (quite possibly with bugs , I cant help to add).&lt;/p&gt;

&lt;p&gt;He makes a lot of emphasis in Good Unit Tests, as tests that are automated, repeatable, easy to implement and read, that are trustworthy and run quickly, normally written using an unit testing framework.&lt;/p&gt;

&lt;p&gt;I think a knock on effect of this is that the tests will be just a few lines long and quite likely many.&lt;/p&gt;

&lt;p&gt;The definition of Integration Tests made me think a lot. For reference: Integration testing means testing two or more dependent software modules as a group.  I’d really like to discuss this with the group tomorrow today, I’d say many of us do more Integration testing that we tend to think? particularly if we have a dependency on a service that has no other hard dependencies ( like a db, I/O operations or similar)   – Will update on this.&lt;/p&gt;

&lt;p&gt;Another good concept to be introducing at this early stage is the Regression, and when I was reading this I was thinking It’s so great to tie this up with CI, why? Well if you have relevant test coverage and you change something (adding the required unit tests and all ) you commit your code , the build machine will immediately go and try to build and run your test suite, so that will help you to know if potentially you have a regression.&lt;/p&gt;

&lt;p&gt;He outlines a series of questions to ask yourself  to find out if you are writting good tests the one I liked the most is this one:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Can I write a basic test in no more than a few minutes? – Will update on this too later on.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There is a  unit test example without using a  framework, I liked it  first because of this little snippet that I didnt know about: MethodBase.GetMethod().Name , more to the point I think hes trying to highlight the advantages of the frameworks and also because it reminds you of the fact that you dont need unit testing frameworks.&lt;/p&gt;

&lt;p&gt;Then there is a basic intro to TDD, where the last D stands for Development , and thats ok, I have not much more to add because I didnt find anything that sticks out .&lt;/p&gt;

&lt;p&gt;So far so good, I think we could have jammed the first two chapters in this meet up.&lt;/p&gt;

&lt;p&gt;Comments, corrections and questions as always welcome :)&lt;/p&gt;
</description>
				<pubDate>Wed, 09 Sep 2009 09:35:55 +0000</pubDate>
				<link>http://roundcrisis.com/2009/09/09/the-art-of-unit-testing-chapter-1/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/09/09/the-art-of-unit-testing-chapter-1/</guid>
			</item>
		
			<item>
				<title>Meet ups Conferences Visitors </title>
				<description>&lt;p&gt;Very excited by a very very busy few months ahead:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;This wednesday thursday and Friday  &lt;a href=&quot;http://epicenter.ie/index.html&quot;&gt;&lt;strong&gt;Epicenter&lt;/strong&gt;&lt;/a&gt;, In dublin where &lt;a href=&quot;http://csharpindepth.com/&quot;&gt;John Skeet&lt;/a&gt;, &lt;a href=&quot;http://www.craigmurphy.com/blog/&quot;&gt;Craig Murphy&lt;/a&gt; (the man behind the DDD events), &lt;a href=&quot;http://idunno.org/&quot;&gt;Barry Dorans&lt;/a&gt;, Barry Carr  and many others will be talking, including me :) . Sounds like a busy conference full of choices.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Oh yeah! and Craig Managed to get a Special Offer on Epicenter,  buy 1 day get 3. More &lt;a href=&quot;http://www.craigmurphy.com/blog/?p=1578&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;September Dublin Alt Net meeting. 15th of September. New location &lt;a href=&quot;http://www.seagrassdublin.com/&quot;&gt;Seagrass&lt;/a&gt; we ll be doing some lightning presentations on  Kanban, Mono and Fluent NHibernate ( a bit of a mixed bag) more details to follow in &lt;a href=&quot;http://dublinalt.net&quot;&gt;dublinalt.net&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://www.ossbarcamp.com/&quot;&gt;OSSBarcamp&lt;/a&gt;, this is one not to miss, the  19th of September all things open source. One talk I’m particularly interested in is the one on IPython, I really hope I can make it at least to that talk.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Finally  the 30th of september  &lt;a href=&quot;http://serialseb.blogspot.com/&quot;&gt;Sebatien Lambla&lt;/a&gt; istalking about &lt;a href=&quot;http://www.ohloh.net/p/openrasta&quot;&gt;Open Rasta&lt;/a&gt; , finishing arrangements as we speak, this is the first urregular Dublin Alt net meet up =). Location will probably be Seagrass too. More info to follow in Dublinalt.net&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cheers&lt;/p&gt;
</description>
				<pubDate>Mon, 24 Aug 2009 11:21:42 +0000</pubDate>
				<link>http://roundcrisis.com/2009/08/24/meet-ups-conferences-visitors/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/08/24/meet-ups-conferences-visitors/</guid>
			</item>
		
			<item>
				<title>Format(ing) in GWT-Ext</title>
				<description>&lt;p&gt;Just a quick post :&lt;/p&gt;

&lt;p&gt;If are trying to use Format, in GWT, String.Format  is not supported, instead you should use &lt;a href=&quot;http://gwt-ext.com/docs/2.0.4/com/gwtext/client/util/Format.html&quot;&gt;Format &lt;/a&gt;a lot of interesting stuff there, so if you are using GWT-Ext take 5 min of your time and have  a look, you ll end up using it.&lt;/p&gt;

&lt;p&gt;This is what I’m using for Strings and for dates&lt;/p&gt;
</description>
				<pubDate>Fri, 14 Aug 2009 11:31:07 +0000</pubDate>
				<link>http://roundcrisis.com/2009/08/14/formating-in-gwt-ext/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/08/14/formating-in-gwt-ext/</guid>
			</item>
		
			<item>
				<title>Nvelocity help</title>
				<description>&lt;p&gt;Hi there&lt;/p&gt;

&lt;p&gt;I ll just add this because I saw some people being directed to here when searching for NVelocity docs (no idea why tbh)&lt;/p&gt;

&lt;p&gt;Anyway here is the &lt;a href=&quot;http://velocity.apache.org/engine/releases/velocity-1.5/vtl-reference-guide.html&quot;&gt;link to the Appache documentation for velocity&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also of course the &lt;a href=&quot;http://www.castleproject.org/others/nvelocity/index.html&quot;&gt;castle docs&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Wed, 05 Aug 2009 13:41:02 +0000</pubDate>
				<link>http://roundcrisis.com/2009/08/05/nvelocity-help/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/08/05/nvelocity-help/</guid>
			</item>
		
			<item>
				<title>August Girl Geek Meetup</title>
				<description>&lt;p&gt;This coming Wednesday the 5th of August we are going to be meeting up in Kennedy’s ( nearly opposite to Pearse Dart Station) Its been a while so I’m really looking forward to catch up with the girls. More info &lt;a href=&quot;http://www.irelandgirlgeekdinners.com/?p=82&quot;&gt;here&lt;/a&gt;
Hope you can make it if you are a Girl Geek =)&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;
</description>
				<pubDate>Mon, 27 Jul 2009 13:56:27 +0000</pubDate>
				<link>http://roundcrisis.com/2009/07/27/august-girl-geek-meetup/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/07/27/august-girl-geek-meetup/</guid>
			</item>
		
			<item>
				<title>IronRuby  - Some Resources</title>
				<description>&lt;p&gt;I found some interesting IronRuby Resources that I thought some people might find useful:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://blog.jimmy.schementi.com/&quot;&gt;http://blog.jimmy.schementi.com/&lt;/a&gt; complete Articles on Iron Ruby, I think he is somewhat related to the IronRuby project ( never really  read the profile, just the articles….)&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://flanders.co.nz/&quot;&gt;http://flanders.co.nz/&lt;/a&gt; Blog from Ivan Porto Carrero, the Author of &lt;a href=&quot;http://manning.com/carrero&quot;&gt;Iron Ruby in action&lt;/a&gt; ( its on EAP from Maning).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://blog.benhall.me.uk/&quot;&gt;http://blog.benhall.me.uk/&lt;/a&gt; Ben Hall’s Blog. He s got some really complete articles in that blog, and a really good speaker. He wrote this article  on &lt;a href=&quot;http://msdn.microsoft.com/en-us/magazine/dd434651.aspx&quot;&gt;IronRuby and RSpec&lt;/a&gt; on the MSDN magazine.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.ironruby.net/Documentation&quot;&gt;http://www.ironruby.net/Documentation&lt;/a&gt; Of course :D&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.iunknown.com/&quot;&gt;http://www.iunknown.com/&lt;/a&gt; John Lam, I believe he is responsible for this project, however he doesn’t blog too often.&lt;/p&gt;
</description>
				<pubDate>Tue, 07 Jul 2009 11:45:09 +0000</pubDate>
				<link>http://roundcrisis.com/2009/07/07/ironruby-some-resources/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/07/07/ironruby-some-resources/</guid>
			</item>
		
			<item>
				<title>Valid xtypes in GWT-Ext</title>
				<description>&lt;p&gt;Say you have a panel, that contains a form and you want to get the values for the fields of that form, one way to go on about it is to use findByType():&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Find a component under this container at any level by xtype.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;
    &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xtype&lt;/code&gt; - the components xtype
&lt;strong&gt;Returns:&lt;/strong&gt;
    an array of components
this is all well and good, however the available xtypes, what are those?&lt;/p&gt;

&lt;p&gt;A bit of magic string here?,  what are the available xtypes?&lt;/p&gt;

&lt;p&gt;You can find a list below:
`&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;xtype            Class&lt;/li&gt;
  &lt;li&gt;
    &lt;hr /&gt;
  &lt;/li&gt;
  &lt;li&gt;box              BoxComponent&lt;/li&gt;
  &lt;li&gt;button           Button&lt;/li&gt;
  &lt;li&gt;colorpalette     ColorPalette&lt;/li&gt;
  &lt;li&gt;component        Component&lt;/li&gt;
  &lt;li&gt;container        Container&lt;/li&gt;
  &lt;li&gt;cycle            CycleButton&lt;/li&gt;
  &lt;li&gt;dataview         DataView&lt;/li&gt;
  &lt;li&gt;datepicker       DatePicker&lt;/li&gt;
  &lt;li&gt;editor           Editor&lt;/li&gt;
  &lt;li&gt;editorgrid       EditorGridPanel&lt;/li&gt;
  &lt;li&gt;grid             GridPanel&lt;/li&gt;
  &lt;li&gt;paging           PagingToolbar&lt;/li&gt;
  &lt;li&gt;panel            Panel&lt;/li&gt;
  &lt;li&gt;progress         ProgressBar&lt;/li&gt;
  &lt;li&gt;splitbutton      SplitButton&lt;/li&gt;
  &lt;li&gt;tabpanel         TabPanel&lt;/li&gt;
  &lt;li&gt;treepanel        TreePanel&lt;/li&gt;
  &lt;li&gt;viewport         ViewPort&lt;/li&gt;
  &lt;li&gt;window           Window
*
`&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;` `&lt;/p&gt;

&lt;p&gt;`* Toolbar components&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;hr /&gt;
  &lt;/li&gt;
  &lt;li&gt;toolbar          Toolbar
*&lt;/li&gt;
  &lt;li&gt;Form components&lt;/li&gt;
  &lt;li&gt;
    &lt;hr /&gt;
  &lt;/li&gt;
  &lt;li&gt;checkbox         Checkbox&lt;/li&gt;
  &lt;li&gt;combo            ComboBox&lt;/li&gt;
  &lt;li&gt;datefield        DateField&lt;/li&gt;
  &lt;li&gt;field            Field&lt;/li&gt;
  &lt;li&gt;fieldset         FieldSet&lt;/li&gt;
  &lt;li&gt;form             FormPanel&lt;/li&gt;
  &lt;li&gt;hidden           Hidden&lt;/li&gt;
  &lt;li&gt;htmleditor       HtmlEditor&lt;/li&gt;
  &lt;li&gt;numberfield      NumberField&lt;/li&gt;
  &lt;li&gt;radio            Radio&lt;/li&gt;
  &lt;li&gt;textarea         TextArea&lt;/li&gt;
  &lt;li&gt;textfield        TextField&lt;/li&gt;
  &lt;li&gt;timefield        TimeField `&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This list is available from the** Component** class in the package &lt;strong&gt;com.gwtext.client.widgets;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As a cleaner way to deal with this I created an Enum to work with this information.&lt;/p&gt;

&lt;p&gt;Hope it saves you 10min.&lt;/p&gt;
</description>
				<pubDate>Tue, 30 Jun 2009 11:19:11 +0000</pubDate>
				<link>http://roundcrisis.com/2009/06/30/valid-xtypes-in-gwt-ext/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/06/30/valid-xtypes-in-gwt-ext/</guid>
			</item>
		
			<item>
				<title>Ext-GWT(or GXT) Environment from scratch </title>
				<description>&lt;p&gt;So… I had to set up a GXT development environment for myself from scratch, so I thought I d share the experience.&lt;/p&gt;

&lt;h2 id=&quot;getting-the-jdk-was-painfull&quot;&gt;Getting the JDK was painfull&lt;/h2&gt;

&lt;p&gt;I ll spare you the rant, however I will say that Sun requires that you are registered to download the JDK, after a email like the one below:
`
We’re sorry but your Sun Online Account password could not be reset.`&lt;/p&gt;

&lt;p&gt;` `&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;We would be happy to look into this further for you.  Please forward this email to us at login@sun.com.  We apologize for any inconvenience.
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;a 404 ( see screenshot) and a failed attempt to re- register, I ended up getting the JDK from another machine, via remote desktop.&lt;/p&gt;

&lt;p&gt;404&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2009/06/sun404.jpg?w=300&quot; alt=&quot;Sun website login 404&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JDK&lt;/strong&gt;, check&lt;/p&gt;

&lt;h2 id=&quot;ant&quot;&gt;Ant&lt;/h2&gt;

&lt;p&gt;Next thing on the list was to get &lt;strong&gt;ant&lt;/strong&gt;, I went to the appropriate &lt;a href=&quot;http://ant.apache.org/bindownload.cgi&quot;&gt;website&lt;/a&gt; got the binaries, un-zipped, set the ANT_HOME, and proceeded to add ant to my path, checked that the version was the correct one with&lt;/p&gt;

&lt;p&gt;`
ant -version`
and all fine&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ant&lt;/strong&gt; : check&lt;/p&gt;

&lt;h2 id=&quot;installing-gwt&quot;&gt;Installing GWT&lt;/h2&gt;

&lt;p&gt;Then i went to get GWT , downloaded, unzipped, added the GWT_HOME (not required but handy) then ran the mail sample in hosted mode as described in the &lt;a href=&quot;http://code.google.com/webtoolkit/gettingstarted.html#Install&quot;&gt;GWT documentation getting started&lt;/a&gt; win &lt;strong&gt;ant deploy&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;creating-a-project-with-gwt-164&quot;&gt;&lt;strong&gt;Creating a project with GWT 1.6.4&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;A lot has changed since version 1.5.3 the two more obvious things so far are: speed running the hosted mode, the layout of the project files, and the application creatorand now you have to use &lt;strong&gt;webAppCreator.cmd&lt;/strong&gt; (extension depends on your platform of course) , then, since I use eclipse I can jsut import the project and start working with it, tho I wanted to try &lt;a href=&quot;http://extjs.com/products/gxt/&quot;&gt;GXT&lt;/a&gt; .&lt;/p&gt;

&lt;h2 id=&quot;installing-and-using-ext-gwt-or-gxt-20-rc1&quot;&gt;&lt;strong&gt;Installing and using Ext-GWT (or GXT) 2.0 RC1&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;GXT 2.0 required GWT 1.6.x ( I’m using 1.6.4) , at a glance, there are a lot of things that make GXT look really good, like active development and a roadmap :D, some new widgets, support plans, etc.&lt;/p&gt;

&lt;p&gt;There are a few steps required to make GXT work in the project I created in the previous step,&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Copy the &lt;strong&gt;Resources&lt;/strong&gt; folder into the project &lt;strong&gt;war&lt;/strong&gt; folder (you could call it something else but I dont see the point yet), then, as described in the setup.txt,&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Add the stylesheet to the host page html&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Add the &amp;lt;inherits ..&amp;gt; to the ..Gwt.xml,&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Include the gxt library to the project classpath&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;and include to the Launch configuration.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To check that this is a GXT app we write a bit of code on &lt;strong&gt;onModuleLoad&lt;/strong&gt; method:&lt;/p&gt;

&lt;p&gt;Button button = new Button(“Click here”);&lt;/p&gt;

&lt;p&gt;ContentPanel panel = new ContentPanel();&lt;/p&gt;

&lt;p&gt;panel.setTitle(“GXT Test”);&lt;/p&gt;

&lt;p&gt;panel.setHeight(400);&lt;/p&gt;

&lt;p&gt;panel.add(button);&lt;/p&gt;

&lt;p&gt;RootPanel.get().add(panel);&lt;/p&gt;

&lt;p&gt;gets me something like:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2009/06/gxt.jpg?w=300&quot; alt=&quot;gxt&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Task Completed. Next task, get a basic layout with a grid populated by JSON.&lt;/p&gt;

&lt;p&gt;Button button = new Button(“Click here”);&lt;/p&gt;

&lt;p&gt;ContentPanel panel = new ContentPanel();&lt;/p&gt;

&lt;p&gt;panel.setTitle(“GXT Test”);&lt;/p&gt;

&lt;p&gt;panel.setHeight(400);&lt;/p&gt;

&lt;p&gt;panel.add(button);&lt;/p&gt;

&lt;p&gt;RootPanel.get().add(panel);&lt;/p&gt;
</description>
				<pubDate>Mon, 29 Jun 2009 09:26:43 +0000</pubDate>
				<link>http://roundcrisis.com/2009/06/29/ext-gwtor-gxt-environment-from-scratch/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/06/29/ext-gwtor-gxt-environment-from-scratch/</guid>
			</item>
		
			<item>
				<title>Gwt-Ext Hack FormPanel and Panel</title>
				<description>&lt;p&gt;There seems to be some sort of problem when you have to add a FormPanel to a Panel in GWT-Ext 2.0.6.&lt;/p&gt;

&lt;p&gt;As a workaround you can simply use a Panel and set the layout to &lt;strong&gt;FormLayout&lt;/strong&gt;.** **&lt;/p&gt;

&lt;p&gt;**Hope it helps **&lt;/p&gt;
</description>
				<pubDate>Thu, 25 Jun 2009 08:00:04 +0000</pubDate>
				<link>http://roundcrisis.com/2009/06/25/gwt-ext-hack-formpanel-and-panel/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/06/25/gwt-ext-hack-formpanel-and-panel/</guid>
			</item>
		
			<item>
				<title>June Meetup Alt Net Ireland Review</title>
				<description>&lt;p&gt;The past 18th of June we had a meetup.&lt;/p&gt;

&lt;p&gt;This month’s meetup topic was &lt;strong&gt;Behaviour Driven Development&lt;/strong&gt; presented by Claudio Perrone and Andre . It was an overview of the topic and how does it work as well as some examples with &lt;strong&gt;&lt;a href=&quot;http://cukes.info/&quot;&gt;cucumber&lt;/a&gt;&lt;/strong&gt; , Andre is a QA Professional and himself and Claudio demonstrated how they collaborate. Andre is involved in the Development process from early on and uses cucumber with Selenium and Watin (or Watin not sure).&lt;/p&gt;

&lt;p&gt;Edit: Andre did a blog post about it (you can see it &lt;a href=&quot;http://dublinalt.net/2009/06/23/cucumber/&quot;&gt;here&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Then we decided on July’s topic: &lt;strong&gt;IoC&lt;/strong&gt; facilitated by Franklin (&lt;a href=&quot;http://castleproject.org/container/index.html&quot;&gt;Windsor&lt;/a&gt;)  and I think someone said they will bring some &lt;a href=&quot;http://structuremap.sourceforge.net/Default.htm&quot;&gt; StructureMap &lt;/a&gt;samples  for a discussion, sounds good.&lt;/p&gt;

&lt;p&gt;I really enjoyed the last few meetings and I hope it keeps happening.&lt;/p&gt;

&lt;p&gt;Claudio will not be attending a few meeting as hes going to be busy looking after his new born, Best of luck for you and your family. We promise to keep you posted and hope you come back soon.&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;
</description>
				<pubDate>Wed, 24 Jun 2009 10:46:40 +0000</pubDate>
				<link>http://roundcrisis.com/2009/06/24/june-meetup-alt-net-ireland-review/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/06/24/june-meetup-alt-net-ireland-review/</guid>
			</item>
		
			<item>
				<title>GWT Unit Testing</title>
				<description>&lt;p&gt;After some time messing with GWT-Ext&lt;/p&gt;

&lt;p&gt;I found a few problems on this front:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;running the test takes too long ( I’m writting this post as I wait for the tests to run) , for example to run a test like the one below, takes 10 seconds, and that is after you ran the whole suite, a suite with 23 tests takes aproximately 100 seconds… not great tbh.
`
Dog dog= new Dog();
int legs= dog.legs.length;
assertEquals(4, legs);
int eyes=dog.eyes.length;
assertEquals(2, eyes);
`&lt;/li&gt;
  &lt;li&gt;A convention that i dont particularly like ( perhaps because I’m not familiar with it) is that the test methods must start with **test, ** ok , on the plus side you dont have any attributes lurking around.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;**- **Then there is the obvious problem:  you can really only test certain code, ie things like parsing , etc is all grand, however when it comes to testing that certain controls are there , it becomes very cumbersome.&lt;/p&gt;

&lt;p&gt;However, i rather have some unit testing than none.&lt;/p&gt;

&lt;p&gt;If you have any experience testing GWT-Ext I would really love to hear about it.&lt;/p&gt;
</description>
				<pubDate>Tue, 23 Jun 2009 11:12:13 +0000</pubDate>
				<link>http://roundcrisis.com/2009/06/23/gwt-unit-testing/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/06/23/gwt-unit-testing/</guid>
			</item>
		
			<item>
				<title>IntelliJ IDEA keymap for Eclipse</title>
				<description>&lt;p&gt;I’m seriously used to the Resharper key map in visual studio, so when doing Java development I felt a bit handicapped, unfortunately I cant use IntelliJ IDEA (did the 30 day trail and loved it) so after a quick google I found &lt;a href=&quot;http://www.jroller.com/santhosh/entry/intellij_idea_key_scheme_for&quot;&gt;this&lt;/a&gt;. Its not perfect but it works.&lt;/p&gt;
</description>
				<pubDate>Tue, 09 Jun 2009 08:50:38 +0000</pubDate>
				<link>http://roundcrisis.com/2009/06/09/intellij-idea-keymap-for-eclipse/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/06/09/intellij-idea-keymap-for-eclipse/</guid>
			</item>
		
			<item>
				<title>GWT-Ext ComboBox loading from XML</title>
				<description>&lt;p&gt;This is a simple example on how to make a ComboBox in Gwt-Ext to populate with XML.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HttpProxy proxy = new HttpProxy(&quot;xml/combo_data.xml&quot;, Connection.GET);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;final RecordDef recordDef = new RecordDef(new FieldDef[] {
new StringFieldDef(&quot;id&quot;),
new StringFieldDef(&quot;value&quot;) });&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;XmlReader reader = new XmlReader(&quot;comboitem&quot;, recordDef);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;`final Store store = new Store(proxy, reader);&lt;/p&gt;

&lt;p&gt;ComboBox combo = new ComboBox();
combo.setLabel(“Combo Label”);
combo.setStore(store);
combo.setDisplayField(“value”);
combo.setMode(ComboBox.REMOTE);
combo.setTypeAhead(true);
this.rootPanel.add(combo);&lt;/p&gt;

&lt;p&gt;`&lt;/p&gt;

&lt;p&gt;` store.load();
`
And the xml can be seen &lt;a href=&quot;http://pastebin.com/f6684d7a7&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hope it helps&lt;/p&gt;
</description>
				<pubDate>Tue, 09 Jun 2009 08:41:36 +0000</pubDate>
				<link>http://roundcrisis.com/2009/06/09/gwt-ext-combobox/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/06/09/gwt-ext-combobox/</guid>
			</item>
		
			<item>
				<title>Monorail in IIS 7.5 (windows 7)</title>
				<description>&lt;p&gt;So I made the leap the other day and installed RC for Windows 7 and it all seems pretty ok.&lt;/p&gt;

&lt;p&gt;Of course i had to do the &lt;em&gt;install all I need&lt;/em&gt; dance.&lt;/p&gt;

&lt;p&gt;Making monorail work in this new version of IIS…well I just thought I d blog about it as it didn’t work “out of the box”.&lt;/p&gt;

&lt;p&gt;One (obvious)  thing that you have to make sure you do is that you actually have asp.net and  the ISAPI module installed (its not by default).&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2009/05/application.jpg?w=300&quot; alt=&quot;application.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The Virtual Directory needs to be an Application, for this you have an option for SetAsApplication in IIS in the contextual menu for the Virtual Directory.&lt;/p&gt;

&lt;p&gt;IIS 7 has classic and Integrated mode, a very basic difference between these two modes is that in classic mode Asp.net was integrated into IIS via the ISAPI Extension, with the integrated mode asp.net runs natively, to read more about it check &lt;a href=&quot;http://learn.iis.net/page.aspx/244/how-to-take-advantage-of-the-iis7-integrated-pipeline/&quot;&gt;here&lt;/a&gt;. That leaves me with the question of: Does that mean my app doesn’t actually need ISAPI at all (that i will answer later, tho probably not).&lt;/p&gt;

&lt;p&gt;All that said and you have to add the following to the web.config in system.webserver -&amp;gt; handlers&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;add name=&quot;MonoRail&quot; path=&quot;*.rails&quot; verb=&quot;*&quot; type=&quot;Castle.MonoRail.Framework.MonoRailHttpHandlerFactory,Castle.MonoRail.Framework&quot; preCondition=&quot;integratedMode&quot; /&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;` `&lt;/p&gt;

&lt;p&gt;(of course change the handler to suit your self)&lt;/p&gt;

&lt;p&gt;I have to admit, dont find setting up servers entertaining at all.&lt;/p&gt;

&lt;p&gt;Hope it helps you.&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;
</description>
				<pubDate>Sun, 31 May 2009 13:23:56 +0000</pubDate>
				<link>http://roundcrisis.com/2009/05/31/monorail-in-iis-7-5-windows-7/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/05/31/monorail-in-iis-7-5-windows-7/</guid>
			</item>
		
			<item>
				<title>GWT-Ext Charts</title>
				<description>&lt;p&gt;A quick post about Gwt-Ext Charts.
&lt;a href=&quot;http://www.gwt-ext.com/demo-charts/&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.gwt-ext.com/demo-charts/&quot;&gt;&lt;img src=&quot;http://www.gwt-ext.com/demo-charts/images/thumbnails/column-chart.gif&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;Getting charts to work in GWT-Ext can be a little painful.&lt;/p&gt;

&lt;p&gt;There is 3 things you have to make sure you have:&lt;/p&gt;

&lt;h2 id=&quot;1&quot;&gt;1 &lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;inherits name=&quot;com.gwtext.Charts&quot;&gt;&lt;/inherits&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;in your &lt;YourApp&gt;.gwt.xml&lt;/YourApp&gt;&lt;/p&gt;

&lt;h2 id=&quot;2&quot;&gt;2&lt;/h2&gt;

&lt;p&gt;the &lt;strong&gt;gwtexux.jar&lt;/strong&gt; file in your classpath, and of course the jar file should be wherever you are pointing to  ;).&lt;/p&gt;

&lt;h2 id=&quot;3&quot;&gt;3&lt;/h2&gt;

&lt;p&gt;Most importantly the swf file that is on wherever you set your express install, in the demo is set to
`
chart.setExpressInstall(“js/yui/assets/expressinstall.swf”);
`
and even tho i had my library where it should, for some reason for me it wasn’t uncompromising to the right path so I uncompressed what i needed to &lt;em&gt;public/js&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Sometimes the charts don’t actually work on hosted mode, so you should compile/browse and its there … in Firefox and Chrome but of course it doesn’t work on ie :(, this is depending on the version of flash you have.&lt;/p&gt;
</description>
				<pubDate>Mon, 11 May 2009 10:48:17 +0000</pubDate>
				<link>http://roundcrisis.com/2009/05/11/gwt-ext-charts/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/05/11/gwt-ext-charts/</guid>
			</item>
		
			<item>
				<title>Scrumy</title>
				<description>&lt;p&gt;Quick post about this little board app. Say you are doing agile and you have the board with cards, why do you need the physical board? head to scrumy&lt;a href=&quot;http://scrumy.com/&quot;&gt;http://scrumy.com&lt;/a&gt; It s very simple to use and no signup required (love that)&lt;/p&gt;

&lt;p&gt;Even at a glance I can see I would miss some things, however It could prove useful to you.&lt;/p&gt;

&lt;p&gt;I got to see this because the &lt;a href=&quot;http://masstransit.pbworks.com/FrontPage&quot;&gt;masstransit &lt;/a&gt;website has a link to their &lt;a href=&quot;http://www.scrumy.com/masstransit&quot;&gt;scrumy &lt;/a&gt;.&lt;/p&gt;
</description>
				<pubDate>Mon, 04 May 2009 23:16:22 +0000</pubDate>
				<link>http://roundcrisis.com/2009/05/04/scrumy/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/05/04/scrumy/</guid>
			</item>
		
			<item>
				<title>Developer Developer Developer Scotland</title>
				<description>&lt;p&gt;After a very fun DDD Belfast I was debating,whether I should go to Developer Developer Developer Scotland, in the end I did and it was a good decision. I had a great day and a great night talking to other geeks.&lt;/p&gt;

&lt;p&gt;I got there a bit late, flight+train + walk+ getting lost in the campus, however I did catch the tail of the Refactoring presentation by &lt;a href=&quot;http://garyshortblog.org&quot;&gt;Gary Short&lt;/a&gt; I was curious as to how Refactor and other Dev Express tools look and work.  &lt;/p&gt;

&lt;p&gt;Then I went to a talk that I was quite looking forward to: &lt;strong&gt;Embracing a new world - dynamic languages and .NET&lt;/strong&gt; by Ben Hall, he started of by presenting ruby and then IronRuby, then he moved on to show how you can use ruby and .Net by creating a sample wpf from the command line with very little code, then came what I think was the best part of the talk :  that joke about Gary Short writing IronSmalltalk (hehe just kidding), the best part of the talk was when he showed how to use Iron Ruby and embedded it into a program, there is an article about it&lt;a href=&quot;http://www.simple-talk.com/content/article.aspx?article=697&quot;&gt; here&lt;/a&gt;, what that means is that basically you can get to use ruby syntax within you app, I find that really powerful. He also talked about rspec and Rails and how .net developers should be checking these frameworks out, I agree on this, particularly for testing, I hope to see more talks on this subject. &lt;/p&gt;

&lt;p&gt;Then I went to  &lt;a href=&quot;http://serialseb.blogspot.com/&quot;&gt;Sebastien Lambla&lt;/a&gt;’s &lt;strong&gt;Asp.Net **&lt;/strong&gt;MVC&lt;strong&gt;** best practises&lt;/strong&gt;, were he talked about how to modify Asp.Net MVC default behaviour and project, to make it better with more SoC, implementing some healthy conventions,etc (I ll update this post with the slide deck when/if it becomes available) . What sticks in my mind at the moment is the way he was using a Model for each view. He was also using &lt;a href=&quot;http://castleproject.org/container/index.html&quot;&gt;Windsor&lt;/a&gt; heavily and I think he did a fantastic job explaining what it is and how to use a container. Another thing I liked was that he refereed to a God Object, I think we all know what that means and why it should be avoided, great way to describe it tho.Kudos to Seb for bringing up the GaGoRuCo incident  and added images of naked man in the slides :) . Extra bonus points for mentioning castle Monorail. &lt;/p&gt;

&lt;p&gt;Then it was lunch time and there were some Grok talks, I was just in one of them about Sharepoint, the presenter ( I’m afraid I dont know your name sorry) was showing how to use Typemock to do Sharepoint development. I’m sure it helps not to have to depend on having the server in your machine, fair play.&lt;/p&gt;

&lt;p&gt;After lunch I popped into Barry Carr’s &lt;strong&gt;What is Functional Programming? **really good talk, it quickly immerses you in the world of Functional Programming, How it started, the history, the principles and then some code with **Scala&lt;/strong&gt;. Many of the concepts that are available to Scala ( and used in functional programming) are not alien, its how you use this concepts that is different, &lt;strong&gt;Scala&lt;/strong&gt; is ,of course, designed for this, hence the syntax is better for it. Liked how Currying is implemented, want to look into Actors a bit more.&lt;/p&gt;

&lt;p&gt;To finish of I went to: &lt;strong&gt;AOP with Castle Windsor and PostSharp&lt;/strong&gt; by Chris Canal, Chris presented the principal concepts of AOP and then moved on to samples. First with castle and then with PostSharp. He started with the Runtime Weaving using castle (Windsor and DynamicProxy2) , then he moved on to postSharp to show compile time Weaving. All in all good intro into Aspect Oriented Programming.&lt;/p&gt;

&lt;p&gt;Then we went on to a Geek Dinner, it was great to just talk to everyone and the food was really nice. I had a fantastic time, learned loads, met some really interesting people , so I consider the trip a complete success. Thanks to Colin, Chris and everyone organizing this event.&lt;/p&gt;
</description>
				<pubDate>Mon, 04 May 2009 19:18:01 +0000</pubDate>
				<link>http://roundcrisis.com/2009/05/04/developer-developer-developer-scotland/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/05/04/developer-developer-developer-scotland/</guid>
			</item>
		
			<item>
				<title>Webby - simple websites made simple</title>
				<description>&lt;p&gt;My dad asked me to help him do a website, so I started looking at the options, I definitely do not want to maintain this at all I thought.&lt;/p&gt;

&lt;p&gt;He said: I just want an info page. &lt;/p&gt;

&lt;p&gt;And I though about &lt;a href=&quot;http://ananelson.com/&quot;&gt;Ana Nelson&lt;/a&gt; and her recent talk in Ruby Ireland about how to regenerate documentation[update: jsut been to her site and she moved her blog to webby :D], so 15 min ago I was trying &lt;a href=&quot;http://webby.rubyforge.org/&quot;&gt;webby&lt;/a&gt;, and its &lt;strong&gt;great&lt;/strong&gt;, its a framework that does exactly what a framework should do: save you time but does things properly.&lt;/p&gt;

&lt;p&gt;From my 15 min experience I can see that Its super easy to use, It generates a web structure quickly,  it’s template based and does loads of smart things for example: &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;In the css you can define “variables” with, for example, colours ( always thought this was necessary but also I think variables shouldn’t be implemented in the css definition)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;you can output to other formats ( in my case pdf output is really handy )&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;goodness&lt;/strong&gt;. Because Webby is a wrapper around rake, you can simply deploy to a site server &lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I ll see what else I can use, but I really like it because it allows me to do something I’m happy with very quickly and that means that I’m actually waiting for my dad to send me the pictures and remaining content so i can deploy this site :p.&lt;/p&gt;

&lt;p&gt;Also it gives me room to add some eye candy, I was reading this related &lt;a href=&quot;http://short.ie/ahm60t&quot;&gt;post &lt;/a&gt;and really liked it too.&lt;/p&gt;
</description>
				<pubDate>Tue, 28 Apr 2009 13:24:40 +0000</pubDate>
				<link>http://roundcrisis.com/2009/04/28/webby-simple-websites-made-simple/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/04/28/webby-simple-websites-made-simple/</guid>
			</item>
		
			<item>
				<title>Monorail Sample code - NetTwitt</title>
				<description>&lt;p&gt;Hi all:&lt;/p&gt;

&lt;p&gt;During the previous two weeks I ve been presenting “An Introduction to Monorail” in Belfast for the  &lt;a href=&quot;http://www.developerdeveloperdeveloper.com/belfast/Default.aspx&quot;&gt;Developer Developer Developer Belfast&lt;/a&gt; and in &lt;a href=&quot;http://www.ossbarcamp.com/speakers/&quot;&gt;OssBarcamp &lt;/a&gt;in Dublin, I said I would make the sample code available and here it is.&lt;/p&gt;

&lt;p&gt;The application presents a simple Twitter application, user can post a twitt, user can follow other users.&lt;/p&gt;

&lt;p&gt;This sample uses Monorail, Active record, NVelocity and Windsor integration.&lt;/p&gt;

&lt;p&gt;The slides are in the previous post, the code its now available from &lt;a href=&quot;http://code.google.com/p/storm-the-castle/source/browse/#svn/trunk&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please note, if you go to the trunk you ll see a folder called &lt;strong&gt;GettingStartMonoRailAndActiveRecord&lt;/strong&gt;, a hello world for Monorail (using Brail) and Active Record written by &lt;a href=&quot;http://chornsokun.wordpress.com/&quot;&gt;Chorn Sokun&lt;/a&gt;, then you can find** NetTwitt**, the code that I used for the presentation. I believe it was a good idea to put both together, so if you are getting started you have more to look at.&lt;/p&gt;

&lt;p&gt;You should simply get the trunk, open one of the solutions, hit F5 and it should run (on Cassini)&lt;/p&gt;

&lt;p&gt;If you have any questions or comments please let me know so we cna do something about it&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Andrea&lt;/p&gt;
</description>
				<pubDate>Mon, 06 Apr 2009 12:01:11 +0000</pubDate>
				<link>http://roundcrisis.com/2009/04/06/monorail-sample-code-nettwitt/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/04/06/monorail-sample-code-nettwitt/</guid>
			</item>
		
			<item>
				<title>Monorail Presentation Slides Updated</title>
				<description>&lt;p&gt;Hi all&lt;/p&gt;

&lt;p&gt;I have updated the slides for the monorail presentation as follows (There are 23 slides if you see less it means there is caching somewhere along the lines, get them quickly  &lt;a href=&quot;http://www.slideshare.net/roundcrisis/monorail-introduction-1212832&quot;&gt;here&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;[slideshare id=1212832&amp;amp;doc=monorailintroduction-090327185816-phpapp01]&lt;/p&gt;

&lt;p&gt;Comments, questions and typos all welcome so they can be corrected.&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;
</description>
				<pubDate>Thu, 02 Apr 2009 08:46:11 +0000</pubDate>
				<link>http://roundcrisis.com/2009/04/02/monorail-presentation-slides-updated-2/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/04/02/monorail-presentation-slides-updated-2/</guid>
			</item>
		
			<item>
				<title>Developer Developer Developer Belfast -This saturday 4th of April</title>
				<description>&lt;p&gt;Hi.&lt;/p&gt;

&lt;p&gt;As you might know I’m talking at Developer Developer Developer Belfast ( I refuse to call it DDD, in my head that is Domain Driven Design and I want to keep it that way)&lt;/p&gt;

&lt;p&gt;There are plenty of really interesting talks ,I’m looking forward to either &lt;a href=&quot;http://www.developerdeveloperdeveloper.com/belfast/ViewSession.aspx?SessionID=162&quot;&gt;Creating extendable applications using MEF&lt;/a&gt; or &lt;a href=&quot;http://www.developerdeveloperdeveloper.com/belfast/ViewSession.aspx?SessionID=195&quot;&gt;DDD, SOA, Messaging, Architecture&lt;/a&gt; and &lt;a href=&quot;http://www.developerdeveloperdeveloper.com/belfast/ViewSession.aspx?SessionID=184&quot;&gt;jQuery Deep Dive&lt;/a&gt; or &lt;a href=&quot;http://www.developerdeveloperdeveloper.com/belfast/ViewSession.aspx?SessionID=194&quot;&gt;A peek at Silverlight 3&lt;/a&gt;. You can see the complete Agenda &lt;a href=&quot;http://www.developerdeveloperdeveloper.com/belfast/Schedule.aspx&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And you can register to attend the event &lt;a href=&quot;http://www.developerdeveloperdeveloper.com/belfast/Register.aspx&quot;&gt;here&lt;/a&gt;. I think there are some places left.&lt;/p&gt;

&lt;p&gt;Hope to see you there!&lt;/p&gt;

&lt;p&gt;Andrea&lt;/p&gt;
</description>
				<pubDate>Mon, 30 Mar 2009 13:46:33 +0000</pubDate>
				<link>http://roundcrisis.com/2009/03/30/developer-developer-developer-belfast-this-saturday-4th-of-april/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/03/30/developer-developer-developer-belfast-this-saturday-4th-of-april/</guid>
			</item>
		
			<item>
				<title>Monorail Presentation</title>
				<description>&lt;p&gt;Hi there:&lt;/p&gt;

&lt;p&gt;I have just uploaded my presentation about castle Monorail, you can find it &lt;a href=&quot;http://www.slideshare.net/roundcrisis/monorail-introduction-1212832&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;[slideshare id=1212832&amp;amp;doc=monorailintroduction-090327185816-phpapp01]&lt;/p&gt;

&lt;p&gt;The sample code for the presentation will be uploaded soon into some code repository, its a bit too late and I rather go to sleep now.  :)&lt;/p&gt;

&lt;p&gt;Corrections and feedback are always welcome. :D&lt;/p&gt;

&lt;p&gt;By the way, there was a little bit of a reschedule and &lt;strong&gt;my talk is at 13:30.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Hope it all goes well tomorrow. Looking forward to it.&lt;/p&gt;

&lt;p&gt;Andrea&lt;/p&gt;
</description>
				<pubDate>Sat, 28 Mar 2009 00:48:02 +0000</pubDate>
				<link>http://roundcrisis.com/2009/03/28/monorail-presentation/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/03/28/monorail-presentation/</guid>
			</item>
		
			<item>
				<title>OssBarcamp tomorrow 28/03/2009 at DIT Kevin Street</title>
				<description>&lt;p&gt;Hi there just a friendly reminder about OssBarcamp&lt;/p&gt;

&lt;p&gt;Its tomorrow from 9.30am to 4.30pm&lt;/p&gt;

&lt;p&gt;there is a map to the location &lt;a href=&quot;http://www.ossbarcamp.com/2009/03/27/housekeeping/&quot;&gt;here&lt;/a&gt; (really close to Whelans)&lt;/p&gt;

&lt;p&gt;It should be great fun. Looking forward to see Jaime’s talk on Git and other talks look really interesting too (jQuery, webdev tricks, etc).  I hope some people will show up to my little talk about Monorail. I ll be uploading the content (slides and samples) this evening (i ll add the mandatory post about it here when I do) . Your questions or comments will be appreciated&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.ossbarcamp.com/wp-content/themes/ossbarcamp/logo.jpg&quot; alt=&quot;&quot; /&gt;Cheers&lt;/p&gt;

&lt;p&gt;Andrea&lt;/p&gt;
</description>
				<pubDate>Fri, 27 Mar 2009 15:03:48 +0000</pubDate>
				<link>http://roundcrisis.com/2009/03/27/ossbarcamp-tomorrow-28032009-at-dit-kevin-street/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/03/27/ossbarcamp-tomorrow-28032009-at-dit-kevin-street/</guid>
			</item>
		
			<item>
				<title>Ada Lovelace Day:Barbara Liskov</title>
				<description>&lt;p&gt;Hi. &lt;/p&gt;

&lt;p&gt;This is my post for Ada Lovelace Day. &lt;/p&gt;

&lt;p&gt;Barbara Liskov (born Barbara Jane Huberman in 1939) is the creator of the &lt;strong&gt;Liskov Substitution Principle, **this is how I got to know about her work,&lt;/strong&gt; **also&lt;/p&gt;

&lt;p&gt;She was the first woman to get a PhD in computing in the United States (1968) [so close in time to &lt;a href=&quot;http://en.wikipedia.org/wiki/Summer_of_Love&quot;&gt;the summer of love&lt;/a&gt; … makes you think about the history of the world…anyway]&lt;/p&gt;

&lt;p&gt;Only recently Barbara &lt;a href=&quot;http://web.mit.edu/newsoffice/2009/turing-liskov-0310.html/&quot;&gt;won the prestigious Turing Award&lt;/a&gt;, an award known as “the Nobel prize in computing”. It was awarded for her work on the design of programing languages. Her research was very significant because it makes software easier to construct, modify and maintain, these ideas derived from from her experience building the VENUS operating system, a time sharing OS .&lt;/p&gt;

&lt;p&gt;If you remember when  &lt;a href=&quot;http://www.lostechies.com/blogs/chad_myers/archive/2008/03/07/pablo-s-topic-of-the-month-march-solid-principles.aspx&quot;&gt;S.O.L.I.D&lt;/a&gt; became a bit of a buzz word last year, then you know that the L is for the Liskov substitution principle, as described by Barbara Liskov: &lt;/p&gt;

&lt;p&gt;` Let q(x) be a property provable about objects x of type T. Then q(y) should be true for objects y of type S where S is a subtype of T.
`&lt;/p&gt;

&lt;p&gt;then explored by &lt;a href=&quot;http://www.objectmentor.com/resources/articles/lsp.pdf&quot;&gt;Robert Martin&lt;/a&gt;
`
Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.
`
This is a very important principle that gives you guidelines on how to avoid coupling (if you want to keep reading about it read the Martin article is quite a good read). &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Honestly I don’t mind who is the source of knowledge, however there must be something wrong going on in the world since there aren’t all that many women in IT and even less in software development, I dont really know why but I certaintly hope it changes and maybe this little post will help just one little bit to show that women in IT can do wonderful things, as Barbara Liskov they can come up with the one of the most important principles of software development.&lt;/p&gt;

&lt;p&gt;Get coding girl!&lt;/p&gt;

&lt;p&gt;Some other links:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://web.mit.edu/newsoffice/2009/turing-liskov-0310.html/&quot;&gt;http://web.mit.edu/newsoffice/2009/turing-liskov-0310.html/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.engineergirl.org/?id=7963&quot;&gt;http://www.engineergirl.org/?id=7963&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Liskov_substitution_principle&quot;&gt;http://en.wikipedia.org/wiki/Liskov_substitution_principle&lt;/a&gt;&lt;/p&gt;

</description>
				<pubDate>Tue, 24 Mar 2009 18:21:05 +0000</pubDate>
				<link>http://roundcrisis.com/2009/03/24/ada-lovelace-daybarbara-liskov/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/03/24/ada-lovelace-daybarbara-liskov/</guid>
			</item>
		
			<item>
				<title>Blackout Ireland - No to censorship</title>
				<description>&lt;p&gt;&lt;img src=&quot;http://roundcrisis.files.wordpress.com/2009/03/blackouttextire.jpg&quot; alt=&quot;Blackout Ireland&quot; /&gt;  This post goes againt my idea of restricting the blog to purely technical matters. In this case is well worht it because our freedom on the net is threatened.&lt;/p&gt;

&lt;h3 id=&quot;what-happened&quot;&gt;What Happened&lt;/h3&gt;

&lt;p&gt;IRMA (a consortium of record labels) sued Eircom and then Eircom settled the case out of court to (amongst other things I’m not really sure) implement a &lt;strong&gt;three strike policy&lt;/strong&gt; and censor sites, ie if you are with eircom and IRMA tells Eircom somesite.com must be blacklisted, then no eircom customer will be able to see that site (not sure on the specifics of this and how the process to block a site will happen) . This means censorship to me. Censorship should not come from companies I don’t think.&lt;/p&gt;

&lt;p&gt;The Three strike policy is as described in the IRMA website &lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;28th January 2009 - P2P Infringement Case Settled**High Court proceedings between four major record companies, EMI, Sony, Universal and Warner and Eircom which have been at trial for eight days, have been settled on an amicable basis with both sides expressing satisfaction with the outcome.    

Both parties have agreed on a joint approach under which they will work closely together to end the abuse of the Internet by P2P copyright infringers.

The settlement reached between the parties provides that the record companies will supply eircom with the IP addresses of all persons who they detect illegally uploading or downloading copyright works on a peer to peer ( P2P) basis.

Eircom has agreed that it will from now on implement a graduated process in which it will:

1)	inform its broadband subscriber that the subscribers IP address has been detected infringing copyright and

2)	warn the subscriber that unless the infringement ceases the subscriber will be disconnected and

3)	in default of compliance by the subscriber with the warning it will disconnect the subscriber.

The record companies have agreed that they will take all necessary steps to put similar agreements in place with all other IPSs in Ireland.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Let me get this straight, I don’t think is wrong that the IRMA wants to protect their copyrights, however this is not the way for many reasons.&lt;/p&gt;

&lt;p&gt;For a start How would they know for a fact that the registered person to that ip is the one doing the illegal download? how can they assure they’ll get it right , every time ? How about some guest in your house downloading stuff. What if you download things by mistake? How do you appeal to this process? … the list of questions is endless&lt;/p&gt;

&lt;h3 id=&quot;why-this-is-an-issue&quot;&gt;Why this is an issue?&lt;/h3&gt;

&lt;p&gt;On a practical level If you use the internet on a daily basis this is a huge issue because you could get cut off the internet even if you have done absolutely nothing wrong.
Most people I know use internet for work. or log in to work from home at least some times.
On an ethical level: I really think this kinds of policies should not be implemented at all. And if they have to be implemented they should never be implemented by companies, they have their own interests and they are not those of the general public&lt;/p&gt;

&lt;p&gt;I’m hoping to continue a series of posts on this issue. If I have stated something that is incorrect please let me know&lt;/p&gt;
</description>
				<pubDate>Thu, 05 Mar 2009 12:07:28 +0000</pubDate>
				<link>http://roundcrisis.com/2009/03/05/blackout-ireland-no-to-censorship/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/03/05/blackout-ireland-no-to-censorship/</guid>
			</item>
		
			<item>
				<title>Presenting at Developer Developer Developer Belfast </title>
				<description>&lt;p&gt;Hi there&lt;/p&gt;

&lt;p&gt;I received an email yesterday confirming I will be presenting “An Introduction to Monorail” in Developer Develop Belfast the 4th of April. I’m really excited with this. &lt;/p&gt;

&lt;p&gt;I just would like to say Thanks to you. And by you i mean people who are reading this :) because possibly you voted for my session.&lt;/p&gt;

&lt;p&gt;Now the hard work begins&lt;/p&gt;

&lt;p&gt;If you have any suggestions or comments on either the topic or on presentations please do add a comment.&lt;/p&gt;

&lt;p&gt;Thanks again&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Andrea&lt;/p&gt;

&lt;p&gt;PS I ll add my slides here in the next two weeks&lt;/p&gt;
</description>
				<pubDate>Mon, 02 Mar 2009 12:42:20 +0000</pubDate>
				<link>http://roundcrisis.com/2009/03/02/presenting-at-developer-developer-develop-belfast/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/03/02/presenting-at-developer-developer-develop-belfast/</guid>
			</item>
		
			<item>
				<title>Careful What you Cache For</title>
				<description>&lt;p&gt;Had a DetachedCriteria, very simple,  I check it running with  profiler side by side  and I see loads of queries running. Why?&lt;/p&gt;

&lt;p&gt;The criteria was something like this 
`
var criteria = DetachedCriteria.For&lt;MyEntity&gt;()
.SetCacheable(true)
.SetCacheRegion(CacheRegions.RarelyChanges)
.SetFetchMode(&quot;Things&quot;, FetchMode.Eager)
.AddOrder(Order.Asc(&quot;Name&quot;));`&lt;/MyEntity&gt;&lt;/p&gt;

&lt;p&gt;I was trying to cache a criteria for MyEntity and have an eager fetch mode for  Things ( a collection of Thing) ,  so, it turns out that i have an n+1 .&lt;/p&gt;

&lt;p&gt;In the view, there was an iterator in the Things Collection, so  just to confirm I removed the reference in the view to this and profiler was running the expected queries(no n+1). &lt;/p&gt;

&lt;p&gt;removed the references to caching in the criteria  just to see what was happening, an the resulting query was getting what it supposed to get,  added the call in my view for each Thing in the Things Collection perfect, the query was running fine and not doing the n+1 .&lt;/p&gt;

&lt;p&gt;I decided to leave caching out just this one time and I’m writing this post to remind myself to check exactly why this is happening, or maybe someone will have the answer already?&lt;/p&gt;

&lt;p&gt;Can’t remember the definition of MyEntity, might add it to comments later&lt;/p&gt;
</description>
				<pubDate>Mon, 23 Feb 2009 18:07:05 +0000</pubDate>
				<link>http://roundcrisis.com/2009/02/23/careful-what-you-cache-for/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/02/23/careful-what-you-cache-for/</guid>
			</item>
		
			<item>
				<title>Technical Speaker Training Event (free)</title>
				<description>&lt;p&gt;Hi all:&lt;/p&gt;

&lt;p&gt;I’m really glad this is happening, there is going to be a series of meet ups to learn how to do technical talks specially for woman in technology.&lt;/p&gt;

&lt;p&gt;The meet ups are going to be about an hour and a half long on how to do technical talks. This is something organized with the girls from Girl Geek Dinner. &lt;/p&gt;

&lt;p&gt;The talks are as follows:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Speaker Night 1:               Thursday, February 26th from 6pm-7:30pm&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;                Topic: &lt;em&gt;What Am &lt;strong&gt;*I&lt;/strong&gt;* Supposed to Talk About?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;o   Finding your voice&lt;/p&gt;

&lt;p&gt;o   Coming up with topics/content/titles&lt;/p&gt;

&lt;p&gt;o   Building a story from your content&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Speaker Night 2:               Thursday, March 5th from 6pm-7:30pm&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;                Topic: &lt;em&gt;The Nitty Gritty of Technical Talks&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;o   Demo-ing with code&lt;/p&gt;

&lt;p&gt;o   Useful tools for technical demos/presentations&lt;/p&gt;

&lt;p&gt;o   Things everyone hates&lt;/p&gt;

&lt;p&gt;o   Failure recovery&lt;/p&gt;

&lt;p&gt;o   Your failsafe list&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Speaker Night 3:               Thursday, March 12th from 6pm-7:30pm&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;                Topic: &lt;em&gt;Grooving and Improving&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;o   Handling Q&amp;amp;A&lt;/p&gt;

&lt;p&gt;o   Techniques for self-improvment&lt;/p&gt;

&lt;p&gt;o   Critiquing your own performance&lt;/p&gt;

&lt;p&gt;o   Finding your honest feedback crowd&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Speaker Night 4:               Thursday, March 19th from 6pm-7:30pm&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;                Topic: &lt;em&gt;TBD – we’ll either repeat a session or do a special request like slide-building?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt; 
&lt;a href=&quot;http://www.irelandgirlgeekdinners.com/?p=52&quot;&gt; More information&lt;/a&gt;
[googlemaps http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=24+south+william+street&amp;amp;sll=53.341713,-6.263859&amp;amp;sspn=0.003734,0.009656&amp;amp;ie=UTF8&amp;amp;t=h&amp;amp;z=14&amp;amp;iwloc=addr&amp;amp;ll=53.348348,-6.258602&amp;amp;output=embed&amp;amp;s=AARTsJpj7OjDNNuzRphacrg3G3maojD-_Q&amp;amp;w=425&amp;amp;h=350]&lt;/p&gt;

</description>
				<pubDate>Sat, 21 Feb 2009 11:00:16 +0000</pubDate>
				<link>http://roundcrisis.com/2009/02/21/technical-speaker-training-event-free/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/02/21/technical-speaker-training-event-free/</guid>
			</item>
		
			<item>
				<title>Tool set for .net  development</title>
				<description>&lt;p&gt;I have 10 minutes to write this, and I ve been meaning to …&lt;/p&gt;

&lt;p&gt;This is a few things that I use (or want to try) :&lt;/p&gt;

&lt;h3 id=&quot;unit-testing-tools&quot;&gt;&lt;strong&gt;Unit Testing Tools&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://www.mbunit.com/&quot;&gt;MbUnit &lt;/a&gt;- Faster to test AR Datamodels &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://nunit.org/index.php&quot;&gt;NUnit&lt;/a&gt; Nothing bad about it, nothing that made me go &lt;strong&gt;wow!&lt;/strong&gt; that’s great!  (that i can remember right now)&lt;/p&gt;

&lt;p&gt;and of course&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.testdriven.net/&quot;&gt;Test Driven &lt;/a&gt; Just love the fact that you can right click a test, a unit or a project or a solution and just run the test or in the worse case scenario debug the test.&lt;/p&gt;

&lt;h3 id=&quot;mocking-tools&quot;&gt;Mocking Tools&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://ayende.com/projects/rhino-mocks.aspx&quot;&gt;Rhino Mocks &lt;/a&gt; Used it a few times, don’t really like it, perhaps because I don’t understand it all that well&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.typemock.com/&quot;&gt;Type Mock  &lt;/a&gt;Supposedly easier to use but compromises design&lt;/p&gt;

&lt;p&gt;Roy Osherove posted &lt;a href=&quot;http://code.google.com/p/mocking-frameworks-compare/&quot;&gt;this &lt;/a&gt;today on twitter. Basically a google code projet to compare differnt mocking frameworks, since this is part of the topics for &lt;strong&gt;alt.net meetup next month&lt;/strong&gt; have a look :) &lt;/p&gt;

&lt;h3 id=&quot;di-ioc-containers&quot;&gt;DI IoC Containers&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://castleproject.org/container/index.html&quot;&gt;Windsor/MicroKernel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Windsor is an Inversion of Control container, it helps you decouple your code and by proxy, it makes your code more testable.  IT is pretty obvious I’m not gonna go into detail, however I will say I found this to be very useful&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://structuremap.sourceforge.net/Default.htm&quot;&gt;Structure Map&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I havent used this IoC DI tool, is in my wish list and would like to see how it differs from Windsor.&lt;/p&gt;

&lt;h3 id=&quot;commons&quot;&gt;Commons&lt;/h3&gt;

&lt;p&gt;**Edit:I **had to add this, &lt;a href=&quot;http://ayende.com/wiki/Rhino%20Commons.ashx&quot;&gt;Rhino Commons&lt;/a&gt; this includes two things that are very useful, a generic Repository ( i know some peoplea re against this) , the Log4net helper and the IoC helper&lt;/p&gt;

&lt;h3 id=&quot;ide-add-ins&quot;&gt;IDE Add Ins&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;http://www.jetbrains.com/resharper/favicon.ico&quot; alt=&quot;&quot; /&gt;I don’t think i even have to mention &lt;a href=&quot;http://www.jetbrains.com/resharper/&quot;&gt;ReSharper&lt;/a&gt;, I really can not code without it :) KeyMap &lt;a href=&quot;http://www.jetbrains.com/resharper/documentation/feature_map.html&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In my wish list and from JetBrains as well,  is to test &lt;a href=&quot;http://www.jetbrains.com/teamcity/&quot;&gt;Team City&lt;/a&gt;,a simple to use CI; an alternative to this is &lt;a href=&quot;http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET&quot;&gt;Cruise Control.net&lt;/a&gt; , not so simple to set up but open source&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.red-gate.com/products/reflector/&quot;&gt;Reflector &lt;/a&gt;by Red Gate is a handy tool as well. Use it a lot to inspect castle helpers. Reflector was originally developed by &lt;a href=&quot;http://www.lutzroeder.com/&quot;&gt;Lutz Roeder&lt;/a&gt; ; Red Gate has promised to  maintain a free version for the benefit of the community. I Really hope so.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;I’m doing web development , this obviously means I’m using Firebug. I found gotapi.com a really useful site (html, css and js reference amongst others)&lt;/p&gt;

&lt;p&gt;Browsers: my default is Chrome at the moment, however I use Firefox and ie ( to test that it works )&lt;/p&gt;

&lt;p&gt;No more time for today will continue later .  &lt;/p&gt;

&lt;p&gt;Have a Nice Sunday! If you feel like it, what is your tool set?&lt;/p&gt;
</description>
				<pubDate>Sun, 15 Feb 2009 12:40:39 +0000</pubDate>
				<link>http://roundcrisis.com/2009/02/15/tool-set-for-net-development/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/02/15/tool-set-for-net-development/</guid>
			</item>
		
			<item>
				<title>I do not blog about WINE...wait actually I Do!</title>
				<description>&lt;p&gt;I saw some incoming links from &lt;a href=&quot;http://curiouswines.ie&quot;&gt;curiouswines.ie&lt;/a&gt; and I though I would clarify I’m not a &lt;a href=&quot;http://www.google.ie/search?hl=en&amp;amp;rlz=1C1CHMG_enIE291IE304&amp;amp;ei=h2WRSbGmKZWN-gaqxemJCw&amp;amp;sa=X&amp;amp;oi=spell&amp;amp;resnum=1&amp;amp;ct=result&amp;amp;cd=1&amp;amp;q=wine+connoisseur&amp;amp;spell=1&quot;&gt;wine &lt;strong&gt;&lt;em&gt;connoisseur&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;  (I ll keep trying tho :D) however, the word does remind me about WINE, the translation layer that allows windows applications to be run on Linux.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.winehq.org/about/&quot;&gt; &lt;img src=&quot;http://appdb.winehq.org/images/winehq_logo_glass_sm.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;img src=&quot;http://www.winehq.org/images/winehq_logo_text.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.winehq.org/about/&quot;&gt;&lt;/a&gt;Please note WINE stands for Wine Is Not an Emulator, hence not paying the penalties of one.  It looks like this is mostly for games, thou Photoshop and Autocad are supported (with minor issues) I dont really need either right now but you never know when you are going to need one.&lt;/p&gt;

&lt;p&gt;For the more conventional wine (ie the one to drink), i think you better to talk to the guys down in Cork, &lt;a href=&quot;http://curiouswines.ie/&quot;&gt; curiouswines.ie &lt;/a&gt;.&lt;/p&gt;
</description>
				<pubDate>Tue, 10 Feb 2009 11:44:30 +0000</pubDate>
				<link>http://roundcrisis.com/2009/02/10/i-do-not-blog-about-winewait-actually-i-do/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/02/10/i-do-not-blog-about-winewait-actually-i-do/</guid>
			</item>
		
			<item>
				<title>Iron Ruby and talking too fast</title>
				<description>&lt;p&gt;So today i was reading an article by Ben Hall on &lt;a href=&quot;http://msdn.microsoft.com/en-us/magazine/dd434651.aspx&quot;&gt;Getting Started With IronRuby And RSpec, Part 1&lt;/a&gt; after I read a few paragraphs I twitted that there were “..so many things in this article that I disagreed with” Ben listened and … asked me why.&lt;/p&gt;

&lt;p&gt;I actually disagreed about some sentences that talk about the processes, or opinions about stuff (for example naming conventions and whent you need a framework ) however the article is really good, it explains very clearly what is the purpose of the post, there is a nice intro into Iron Ruby, some sample code, then rspec and the difference between BDD and TDD as well as a very extensive warning about how mature Iron Ruby is&lt;/p&gt;

&lt;p&gt;What I ve learned&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Read the whole damn article before saying stuff&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Give reasons why is good/bad&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Maybe read less things, but read them properly&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;maybe testing with IronRuby is viable and would be really nice to give a try&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;I actaully miss duck typing much more that what i remember&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;something that I’m obviously forgetting, that i though I should add and forgot&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Anyway&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;
</description>
				<pubDate>Mon, 09 Feb 2009 15:03:54 +0000</pubDate>
				<link>http://roundcrisis.com/2009/02/09/iron-ruby-and-talking-too-fast/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/02/09/iron-ruby-and-talking-too-fast/</guid>
			</item>
		
			<item>
				<title>Pragmatic Ubuntu?</title>
				<description>&lt;p&gt;Through Andy Hunt’s Blog ( one of the Authors of The Pragmatic Programer)  I got the Pocket Ubuntu guide for free.&lt;/p&gt;

&lt;p&gt;Thanks Andy and thanks to Keir Thomas for making this available in the  &lt;a href=&quot;http://www.ubuntupocketguide.com/faq.html&quot;&gt;http://www.ubuntupocketguide.com&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;I just went through the first chapter and found out about &lt;a href=&quot;http://wubi-installer.org/&quot;&gt;Wubi&lt;/a&gt; ( possibly something I will try now  as I like the idea of trying things quickly without having to reboot, installing… no i didnt read much  yet).&lt;img src=&quot;http://wubi-installer.org/images/wubi_logo.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Edit  installed Wubi and its not a  virtual machine of some sort as I originally though, however its a really easy installer for windows, I intalled it as a program then rebooted and there it was, dual booting without the headaches :D with a full ubuntu desktop, not what I thoough it was but real nice :)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So far the book looks good, more on it later on. &lt;/p&gt;

&lt;p&gt;Cheers :D&lt;/p&gt;
</description>
				<pubDate>Fri, 30 Jan 2009 10:17:18 +0000</pubDate>
				<link>http://roundcrisis.com/2009/01/30/pragmatic-ubuntu/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/01/30/pragmatic-ubuntu/</guid>
			</item>
		
			<item>
				<title>Two New tools</title>
				<description>&lt;p&gt;In web development, you come across tools all the time, some are incredible and I was lucky enough to find two today.&lt;/p&gt;

&lt;p&gt;Firescope is a firebug plugin that gives you HTML and css help. its really neat &lt;img src=&quot;http://tools.sitepoint.com/firescope/images/firescope-logo.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;it looks like this in your firebug&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://tools.sitepoint.com/firescope/images/screenshot-crumbtrail.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;(note to my friend: note the lower case logo!! hehehe)&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Another tool that is kinda cool , but I would probably not use that much but the days that i need it I will http://www.scrnshots.com/  they have some &lt;a href=&quot;http://www.scrnshots.com/tools&quot;&gt;tools &lt;/a&gt; and a nice api, that you can query and mash it up where ever you feel like.  This is what i mean
&lt;a href=&quot;http://www.scrnshots.com/users/roundcrisis/screenshots/112371&quot;&gt;&lt;img src=&quot;http://s3.amazonaws.com/scrnshots.com/screenshots/112371/tmppng_med_rect&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope it helps :)&lt;/p&gt;
</description>
				<pubDate>Thu, 29 Jan 2009 17:43:59 +0000</pubDate>
				<link>http://roundcrisis.com/2009/01/29/two-new-tools/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/01/29/two-new-tools/</guid>
			</item>
		
			<item>
				<title>Find the problem, then the solution</title>
				<description>&lt;p&gt;I found myself making the mistake I read about a lot of times. &lt;/p&gt;

&lt;p&gt;It turns out we have to migrate parts of an existing solution to a different platform and I had all this questions about how to organize the new solution and I realised, hold on, I must first have a deep dive into the existing code and &lt;strong&gt;then&lt;/strong&gt; start thinking about the new solution and how to architect it.&lt;/p&gt;

&lt;p&gt;I was so easily driven to think about the solution that I lost sight of the problem, terrible and now I’m advertising it… &lt;/p&gt;

&lt;p&gt;Maybe it was just the idea of going through the existing code disgusted me so much that I didn’t want to think about it? or maybe its the fact that reading code is harder that writing it?&lt;/p&gt;

&lt;p&gt;Hopefully I learned from it.&lt;/p&gt;
</description>
				<pubDate>Tue, 27 Jan 2009 12:19:43 +0000</pubDate>
				<link>http://roundcrisis.com/2009/01/27/find-the-problem-then-the-solution/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/01/27/find-the-problem-then-the-solution/</guid>
			</item>
		
			<item>
				<title>Dublin Alt Net Meetup - 12th of Feb 7pm</title>
				<description>&lt;p&gt;Hi there: &lt;/p&gt;

&lt;p&gt;As a new chapter of &lt;a href=&quot;http://roundcrisis.com/2008/08/27/from-code-monkey-to-code-crafter-ftw/&quot;&gt;this post&lt;/a&gt; finally we are doing an  &lt;a href=&quot;http://dublinalt.net/2009/01/23/meet-up-12th-of-february-7pm/&quot;&gt;Alt.net meet up&lt;/a&gt;, I can t wait and hope for the best.  The meet up will be the &lt;strong&gt;12Th of February at 7pm in The Duke&lt;/strong&gt; (off Grafton Street). Unfortunately we didn’t realise it was on the same day that twestival ( a charity event for twitterers) I think we are very different events, thou I’m sorry I ll be missing it, as it is a worthy cause.&lt;/p&gt;

&lt;p&gt;I like the definition of Alt.net I found in &lt;a href=&quot;http://laribee.com/blog/&quot;&gt;David Laribee’s blog&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;What does it mean to be ALT.NET? In short it signifies:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;

&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;ol&gt;
    &lt;li&gt;You’re the type of developer who uses what works while keeping an eye out for a better way.&lt;/li&gt;
  &lt;/ol&gt;

&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;ol&gt;
    &lt;li&gt;You reach outside the mainstream to adopt the best of any community: Open Source, Agile, Java, Ruby, etc.&lt;/li&gt;
  &lt;/ol&gt;

&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;ol&gt;
    &lt;li&gt;You’re not content with the status quo. Things can always be better expressed, more elegant and simple, more mutable, higher quality, etc.&lt;/li&gt;
  &lt;/ol&gt;

&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;ol&gt;
    &lt;li&gt;You know tools are great, but they only take you so far. It’s the principles and knowledge that really matter. The best tools are those that embed the knowledge and encourage the principles (e.g. Resharper.)&lt;/li&gt;
  &lt;/ol&gt;

&lt;/blockquote&gt;

&lt;p&gt;I think we might be comming late into the party, however I’m not interested on how are we called, I see it mostly as a way to learn and exchange ideas, solutions. Hope we can get talking about interesting topics and that we can come up with a plan for the next meet up.&lt;/p&gt;

&lt;p&gt;Anyway, hope to see you there :), if you have any suggestions or comments you are very welcome&lt;/p&gt;
</description>
				<pubDate>Mon, 26 Jan 2009 10:27:00 +0000</pubDate>
				<link>http://roundcrisis.com/2009/01/26/dublin-alt-net-meetup-12th-of-feb-7pm/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/01/26/dublin-alt-net-meetup-12th-of-feb-7pm/</guid>
			</item>
		
			<item>
				<title>A Talk about Castle on the way</title>
				<description>&lt;p&gt;Hi
This should be pretty exciting, I’m hoping to do a talk in &lt;a href=&quot;http://www.ossbarcamp.com/speakers/&quot;&gt;OSSBarcamp &lt;/a&gt;( well not really a talk but  you know) and depending on votes, I might be talking in &lt;a href=&quot;http://developerdeveloperdeveloper.com/belfast/ProposedSessions.aspx&quot;&gt;DDD Ireland&lt;/a&gt; too, we will see.&lt;/p&gt;

&lt;p&gt;The talk will be on Castle Project, a walk through of a sample application, the main focus on Monorail and Active Record as I saw some other people can cover IoC and DI ( which in itself is a really long talk).&lt;/p&gt;

&lt;p&gt;I have still to decide what this app will do, I actually wanted to build something simple but useful, a few ideas but nothing that I go, yeah thats right, suggestions welcome)&lt;/p&gt;

&lt;p&gt;I asked some people for advice on this “create a talk”  thing. I think the most sensible answer I got so far is to tell the advantages of using castle first.&lt;/p&gt;
</description>
				<pubDate>Tue, 20 Jan 2009 01:57:58 +0000</pubDate>
				<link>http://roundcrisis.com/2009/01/20/a-talk-about-castle-on-the-way/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/01/20/a-talk-about-castle-on-the-way/</guid>
			</item>
		
			<item>
				<title>Alt.net Ireland</title>
				<description>&lt;p&gt;hi&lt;/p&gt;

&lt;p&gt;We met with some folks in the open coffee recently. It was really nice to have a good turn out and a lot of new faces. I had in mind to talk about Alt.Net and I think one thing that is clear now is that we need to come up with a clear &lt;strong&gt;to do&lt;/strong&gt;, how are we gonna work? where? that kind of thing. Its also important to have an easy way to explain this easily.&lt;/p&gt;

&lt;p&gt;I think  it’s about learning from your peers, having a space where , if you have a problem you can bounce ideas or ask if your solution is good. Someone is bound to have gone through a similar situation.&lt;/p&gt;

&lt;p&gt;There were some discussions, and my view on this is, we should focus on the best solutions, and what are the best processes to get there  and why. &lt;/p&gt;

&lt;p&gt;Open Coffee was great, I was really sorry I had to leave so early… looking forward to the next one. :)&lt;/p&gt;
</description>
				<pubDate>Mon, 19 Jan 2009 10:26:17 +0000</pubDate>
				<link>http://roundcrisis.com/2009/01/19/altnet-ireland/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/01/19/altnet-ireland/</guid>
			</item>
		
			<item>
				<title>Ruby Jobs live!</title>
				<description>&lt;p&gt;Hi all
just though I’ d  advertise the fact that &lt;a href=&quot;http://rubyjobs.ie/&quot;&gt;rubyjobs.ie&lt;/a&gt; is live.&lt;/p&gt;

&lt;p&gt;I’m really happy with this, Its great to see the community releasing things. Ok its very basic but I think is a really good start.
Most of the effort came from Gavin Joyce, but Declan and other people (that I cant remmeber right now, sorry no memory ) contributed to the project; it is open source and &lt;a href=&quot;http://github.com/GavinJoyce/rubyjobs/tree/master&quot;&gt;hosted in github&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It all started last meetup and It will sure continue on the next one , that is the 13th of January @ 7pm in 10 Upper Fitzwilliams Street.&lt;/p&gt;

&lt;p&gt;[googlemaps http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=+10+Upper+Fitzwilliam+Street&amp;amp;sll=53.344104,-6.267494&amp;amp;sspn=0.263178,0.53009&amp;amp;g=10+Upper+Fitzwilliam+Street&amp;amp;ie=UTF8&amp;amp;t=h&amp;amp;z=14&amp;amp;iwloc=addr&amp;amp;ll=53.342866,-6.245556&amp;amp;output=embed&amp;amp;s=AARTsJoTF_5PsIIoZOTSk5Bpqn90_tEkZA&amp;amp;w=425&amp;amp;h=350]&lt;/p&gt;

&lt;p&gt;Thanks again to &lt;a href=&quot;http://www.igopeople.com/&quot;&gt;IGO People &lt;/a&gt;that kindly provides the meeting room :) and they also launched very recently.&lt;/p&gt;
</description>
				<pubDate>Fri, 09 Jan 2009 16:27:09 +0000</pubDate>
				<link>http://roundcrisis.com/2009/01/09/ruby-jobs-live/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/01/09/ruby-jobs-live/</guid>
			</item>
		
			<item>
				<title>Component View Caching with Castle</title>
				<description>&lt;p&gt;I had to add some caching for a ViewCompoment in castle recently and, at least for me, it wasnt too clear what to do at first.&lt;/p&gt;

&lt;p&gt;A ViewComponent is a very handy thing in castle, amongst other things it allows you to have  aView Component that can be, a login box, a menu,  an rss feed reader.  Sometimes the you need to cache the viewcomponent and this is how you need to go to this post by &lt;a href=&quot;http://hammett.castleproject.org/?p=226&quot;&gt;hammet &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I couldn’t use the decoration
`
[ViewComponentDetails(“comp1”, Cache=ViewComponentCache.Always)]
`
because I needed the component to be refreshed every so often , so I used my own implementation
`
[ViewComponentDetails(“BlogComponent”, Cache = ViewComponentCache.UseCustomCacheKeyGenerator, CacheKeyFactory = typeof(YourCacheKeyGenerator))]
`&lt;/p&gt;

&lt;p&gt;_YourCacheKeyGenerator _is a class that you create that must implement _IViewComponentCacheKeyGenerator _something similar to
`
public class YourCacheKeyGenerator: IViewComponentCacheKeyGenerator
{
public CacheKey Create(string viewComponentName, IDictionary parameters, IEngineContext context)
{
CacheKey key = new NamedCacheKey();
…..
….. your implementation here
return key;
}
`
I made my implementation dependant on time but you can make it dependant on anything you need&lt;/p&gt;

&lt;p&gt;If there are any errors or comments please let me know&lt;/p&gt;
</description>
				<pubDate>Wed, 07 Jan 2009 12:41:44 +0000</pubDate>
				<link>http://roundcrisis.com/2009/01/07/component-view-caching-with-castle/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2009/01/07/component-view-caching-with-castle/</guid>
			</item>
		
			<item>
				<title>How to use Google webmaster tools with wordpress</title>
				<description>&lt;p&gt;I found this &lt;a href=&quot;http://jalaj.net/2007/05/21/get-your-wordpresscom-blog-google-verified/&quot;&gt;post&lt;/a&gt; on how to verify google webmaster tools.&lt;/p&gt;

&lt;p&gt;Basically you just create a new page with the name of the html that google requires, if you choose the option to upload a new page. &lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;
</description>
				<pubDate>Wed, 31 Dec 2008 11:27:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/12/31/how-to-use-google-webmaster-tools-with-wordpress/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/12/31/how-to-use-google-webmaster-tools-with-wordpress/</guid>
			</item>
		
			<item>
				<title>Happy Holidays post and welcome 2009</title>
				<description>&lt;p&gt;well this is one of those end of year post that I think you must write. This is the first year I actually keep my blogging pretty constant (thou changed blogging engines …) so first time I’m actually writing one of these. Anyway&lt;/p&gt;

&lt;p&gt;I’m very happy with the year thats g0ne, **loads **of changes in my life, one of them being having no weekends at all for most of the year as I ve been working on a project with a friend of mine. That project is going well, we can nearly touch the code complete stage , only 8 tickets left open now so that’s great, I ll blog more about it when I know how public we want this to be.  And yes it is written in .net with the castle project (&lt;a href=&quot;http://www. castleproject.org&quot;&gt;castleproject.org&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;I ve been paying more attention to networking and its paid off big time, so next year I’m gonna do more of that, and hopefully i ll dare to prepare a few talks on castle, as I ve been using Monorail,  ActiveRecord and Windsor. However  If I have to prepare a talk I will have to do some serious reading that I ve been meaning to do to actually have a more complete knowledge.&lt;/p&gt;

&lt;p&gt;In 2009 I  want to get my teeth into RoR  I ve been trying to put time towards Ruby Jobs ( please refer to previous post too lazy to actually fetch the link)  however due to the project mentioned above its impossible, it just eats all my time.&lt;/p&gt;

&lt;p&gt;Another great thing that might not interest anyone but me is that my brother is coming over to visit me for a few weeks, he is 19 and reading Computing, I’m sooo proud of him.&lt;/p&gt;

&lt;p&gt;Looking forward to FOWA Dublin , OSS barcamp, DDD .&lt;/p&gt;

&lt;p&gt;Looking forward to a lot of really cool new records that hopefully will come out. &lt;/p&gt;

&lt;p&gt;I think 2009 will be a very challenging year, I hope not too see too many friends go ( I miss a few that left Dublin already)  and I hope this will not turn Dublin in a less secure place, I think we all enjoy been able to walk to and from places. &lt;/p&gt;

&lt;p&gt;Another thing that I want to see happening and I want to contribute heavily towards is, &lt;a href=&quot;dublinalt.net&quot;&gt;dublinalt.net&lt;/a&gt;  I hope it works out and that we all learn a lot.&lt;/p&gt;

&lt;p&gt;Mostly I would like that people are happy and that we enjoy the journey as we go.  &lt;/p&gt;

&lt;p&gt;Happy 2009&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Andrea&lt;/p&gt;
</description>
				<pubDate>Tue, 30 Dec 2008 13:20:05 +0000</pubDate>
				<link>http://roundcrisis.com/2008/12/30/happy-holidays-post-and-welcome-2009/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/12/30/happy-holidays-post-and-welcome-2009/</guid>
			</item>
		
			<item>
				<title>Languages</title>
				<description>&lt;p&gt;Hi &lt;/p&gt;

&lt;p&gt;I was reading &lt;a href=&quot;http://www.hanselman.com/blog/DoYouHaveToKnowEnglishToBeAProgrammer.aspx&quot;&gt;hanselman’s blog&lt;/a&gt; today about languages, not programing languages, but spoken languages like english, spanish, french, chinese, etc.&lt;/p&gt;

&lt;p&gt;The post kinda discusses , “&lt;strong&gt;if you dont speak englsih , you are not a programmer&lt;/strong&gt;”, &lt;/p&gt;

&lt;p&gt;I think the post is worth the read and I have two comments about it.&lt;/p&gt;

&lt;p&gt;As native spanish speaker I have to say the fact that I was interested in French from a early age and english later on helped massively when I started programming because I could make sense of things faster. Later on, at college , even thou we had english as a requirement in college, most people couldn’t actually read papers properly and they would prefer even badly translated copies&lt;/p&gt;

&lt;p&gt;Another thing I have to add is that, a friend of mine, Cristian Espeche, is a great developer, however he still finds it really hard to get documentation and I know he knows  he would be a much better programmer if he could read english, I’m mentioning this in my blog to maybe encourage him to learn :) .&lt;/p&gt;

&lt;p&gt;I dont know what the solution is yet but I can see this is a problem&lt;/p&gt;
</description>
				<pubDate>Fri, 12 Dec 2008 14:59:06 +0000</pubDate>
				<link>http://roundcrisis.com/2008/12/12/languages/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/12/12/languages/</guid>
			</item>
		
			<item>
				<title>Ruby Ireland Meet up </title>
				<description>&lt;p&gt;Yesterday we had a really nice Ruby Ireland meet up some links&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Rest &lt;a href=&quot;http://netzooid.com/presentations/scalable_reliable_secure_rest.ppt&quot;&gt;link  &lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;RateMyArea talk&lt;a href=&quot;http://ciaran-lee.com/RMA-rug.pdf&quot;&gt; http://ciaran-lee.com/RMA-rug.pdf&lt;/a&gt; &lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;google Geo Location API via Darragh &lt;a href=&quot;http://google-code-updates.blogspot.com/2008/08/two-new-ways-to-location-enable-your.html&quot;&gt;link&lt;/a&gt; &lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Follow up on the website and other projects soon&lt;/p&gt;

&lt;p&gt;The idea is that the next meet up (would that be teh 13th of January) is a meetup that involves coding.&lt;/p&gt;

&lt;p&gt;Thnaks to the people providing the sambos, beers and mince pies and above all the place to have the meeting.&lt;/p&gt;
</description>
				<pubDate>Wed, 10 Dec 2008 16:57:04 +0000</pubDate>
				<link>http://roundcrisis.com/2008/12/10/ruby-ireland-meet-up/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/12/10/ruby-ireland-meet-up/</guid>
			</item>
		
			<item>
				<title>Moving</title>
				<description>&lt;p&gt;Hi there. This is my firt post in wordpress, I ll be  migrating all previous posts from &lt;a href=&quot;http://ohmygodiamacat.blogspot.com/&quot;&gt;http://ohmygodiamacat.blogspot.com/ &lt;/a&gt;
So many questions so little time ….&lt;/p&gt;
</description>
				<pubDate>Mon, 08 Dec 2008 17:50:57 +0000</pubDate>
				<link>http://roundcrisis.com/2008/12/08/moving/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/12/08/moving/</guid>
			</item>
		
			<item>
				<title>Linking images in Monorail</title>
				<description>&lt;p&gt;A quick one&lt;/p&gt;

&lt;p&gt;Say you have an image or god knows what and you need to add a link to it, in html you’ll do something like:&lt;/p&gt;

&lt;pre&gt;

&lt;a href=&quot;http://foo.bar/something.html&quot;&gt;
	&lt;img src=&quot;...&quot; /&gt; 
&lt;/a&gt;
&lt;/pre&gt;

&lt;p&gt;In a view you can do this:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;    
&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;$UrlHelper.For(&quot;%{&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;controller=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;product&apos;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;}&quot;)&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;  
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;img&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;$!Image.Path&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;alt=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;$!Name&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

</description>
				<pubDate>Sun, 30 Nov 2008 17:56:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/11/30/linking-imges-in-monorail/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/11/30/linking-imges-in-monorail/</guid>
			</item>
		
			<item>
				<title>Ruby Ireland Meetup - 9th of December 7.30 Fitzwilliams Place</title>
				<description>&lt;p&gt;It looks like Ruby Ireland is getting a bit more attention from people, and that is great to see
I had my own reservations about if I should continue going to these meet ups because basically I haven’t been doing much Ruby in the last months, but I do love to hear about it and it does give me ideas about how to work on my own code. I see people solving problems in a completely different way to  what I would do and I think that has value and I hope they don’t mind me showing up there.
Also ,there is a common ground in software development and web development in particular. This is why we are gonna start a podcast on software development and I hope it will work out
and by work out I mean that it makes us learn more about how we develop software and hopefully get some feedback from the community, no matter were they are.&lt;/p&gt;

&lt;p&gt;Declan McGrath came up with the idea in a thread in ruby groups, we met up and came up with some ideas for topics:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ruby&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;in general about hosting an Ruby on rails application,&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;how do mongrels work and what do they actually do,&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;** General Software development Topics **&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;What is Inversion of Control  Dependency Injection and why do you use it&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Improving your tests . Test Driven Development&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;** Tools / frameworks**&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;What Tools are you using for software development productivity&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The Linux distro Declan is using for recording/editing the sessions&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Funnily enough I would probably mention castle&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After, we got some interest from Justin McCarthy (haven’t met him yet) but its great to see more involvement.
These are initial thoughts would welcome any suggestions , corrections later on, etc&lt;/p&gt;
</description>
				<pubDate>Wed, 26 Nov 2008 15:01:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/11/26/ruby-ireland-meetup-9th-of-december-730-fitzwilliams-place/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/11/26/ruby-ireland-meetup-9th-of-december-730-fitzwilliams-place/</guid>
			</item>
		
			<item>
				<title>What s happening</title>
				<description>&lt;p&gt;Since my last post I ve been trying to avoid writting about trivial small things however meaty post take time and I just dont have it right now.&lt;/p&gt;

&lt;h5 id=&quot;questions-in-my-head-now&quot;&gt;Questions in my head now&lt;/h5&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;when do you create a service?&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;where can I find an example of a well designed GWT app?&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h5 id=&quot;events-that-im-interested-in&quot;&gt;Events that Im interested in &lt;/h5&gt;

&lt;p&gt;GGD 4th of December in La Taverna di Baco in the Quays (in dublin)&lt;/p&gt;

&lt;p&gt;IJTC its the 7th of January in UGC, some good speakers but it feels like thi IcTC conferences are a bit desorganized&lt;/p&gt;

&lt;p&gt;FOWA Dublin -  March 6th. I want to go but dont know really why&lt;/p&gt;

&lt;p&gt;Edit: missign OSSBarcamp Dublin - 28th March 2009 this is one I want to go to as well :)&lt;/p&gt;

&lt;h5 id=&quot;cool-things&quot;&gt;Cool Things&lt;/h5&gt;

&lt;p&gt; - I ve been using &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/8487&quot;&gt;&lt;strong&gt;Pencil&lt;/strong&gt;&lt;/a&gt; ( a  pluggin for firefox) and its pretty cool because its easy to use, lightweight, free. Great for putting screens togheter quickly &lt;/p&gt;
</description>
				<pubDate>Wed, 26 Nov 2008 13:06:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/11/26/what-s-happening/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/11/26/what-s-happening/</guid>
			</item>
		
			<item>
				<title>Ruby Ireland Meetup</title>
				<description>&lt;p&gt;I was in ruby Ireland last night ( good turn up btw) and it was great to see Paul Campbell talking about &lt;a href=&quot;http://incubator.apache.org/couchdb/&quot;&gt;Couch Db&lt;/a&gt;, a non relational DB in their own words&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“Apache CouchDB is a distributed, fault-tolerant and schema-free&lt;br /&gt;
document-oriented database accessible via a RESTful HTTP/JSON API. Among other&lt;br /&gt;
features, it provides robust, incremental replication with bi-directional&lt;br /&gt;
conflict detection and resolution, and is queryable and indexable using a&lt;br /&gt;
table-oriented view engine with JavaScript acting as the default view definition&lt;br /&gt;
language.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Anna showed some interesting rake tasks and i did a short intro to jQuery (slides &lt;a href=&quot;http://www.slideshare.net/roundcrisis/jquery-presentation&quot;&gt;here&lt;/a&gt;) hopefully someone found it interesting.&lt;/p&gt;

&lt;p&gt;This Saturday the 13Th  is the open coffee meeting in the New York Grind that will include the talk about trying to come up with something similar to alt.net Ireland. as discussed in &lt;a href=&quot;http://ohmygodiamacat.blogspot.com/2008/08/from-code-monkey-to-code-crafter.html&quot;&gt;previous post&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the universe didnt disapear (aparently) thumbs up.&lt;/p&gt;
</description>
				<pubDate>Wed, 10 Sep 2008 12:25:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/09/10/ruby-ireland-meetup/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/09/10/ruby-ireland-meetup/</guid>
			</item>
		
			<item>
				<title>jQuery ExtJS talk</title>
				<description>&lt;p&gt;I’m doing a lighting talk about jQuery and ExtJs (maybe mention GWT) in the next Ruby Ireland on the 9th of September &lt;a href=&quot;http://tinyurl.com/6q5n9p&quot;&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I ll add a link to the slides as soon as i finish them, &lt;strong&gt;any suggestions very welcome&lt;/strong&gt;.
so far I’m doing a quick intro, some of the features, stuff i found useful or interesting or use with code samples and finally some links. For jQuery I’m touching on ui.jquery and themeroller and the event observer implementation &lt;a href=&quot;http://almaer.com/blog/enjoying-the-observer-pattern-with-custom-events&quot;&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For ext again intro and show some code and then maybe touch on EXT (GWT implementation of EXT Js) just started to have a look at this but it does seem very promising&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;
</description>
				<pubDate>Wed, 03 Sep 2008 10:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/09/03/jquery-extjs-talk/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/09/03/jquery-extjs-talk/</guid>
			</item>
		
			<item>
				<title>From Code Monkey to Code Crafter II</title>
				<description>&lt;p&gt;Hi again&lt;/p&gt;

&lt;p&gt;Well hopefully that meeting will go ahead on the saturday the 13th of september&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.opencoffeedublin.com/september-saturday-opencoffee-dublin-1392008/&quot;&gt;http://www.opencoffeedublin.com/september-saturday-opencoffee-dublin-1392008/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;looking forward to it now :)&lt;/p&gt;
</description>
				<pubDate>Wed, 03 Sep 2008 10:34:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/09/03/from-code-monkey-to-code-crafter-ii/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/09/03/from-code-monkey-to-code-crafter-ii/</guid>
			</item>
		
			<item>
				<title>Trying GXT (ExtJs in GWT)</title>
				<description>&lt;p&gt;Today I’m trying out Ext GWT&lt;/p&gt;

&lt;p&gt;To use Ext GWT&lt;/p&gt;

&lt;p&gt;Installation was simple ( i needed the java sdk i got 1.6Update 7 )&lt;/p&gt;

&lt;p&gt;downloaded GWT1.5.1 and decompressed it. happy days!&lt;/p&gt;

&lt;p&gt;then i ran the sample hello and I was running, really fast&lt;/p&gt;

&lt;p&gt;[if you have problems with some error that ends with  and then an exception, it s very likely to be that your path is reading some other version of java first, if so go to environment variables and change your system settings so you have the recently installed java sdk first]&lt;/p&gt;

&lt;p&gt;to check the java version open the command line and do java -version&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Ext GWT?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GWT is a compiler that converts Java source into JavaScript&lt;/p&gt;

&lt;p&gt;this means you write and test java code&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Getting Started&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;as in the sample i went and changed the email application and it changed properly and that was cool, lets get to the business now&lt;/p&gt;

&lt;p&gt;lets create our own app and try to handle some event&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating an Application&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is an ApplicationCreator that generates a series of files including a java file with a sort of hello world, an html file a css file and two cmd files this all following a naming convention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adding support for GWT -EXT&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;OK I went to the &lt;a href=&quot;http://extjs.com/helpcenter/topic/com.extjs.gxt.help/html/gettingstarted/gettingstarted.html&quot;&gt;Ext GWT documentation web&lt;/a&gt; and there are a few screencast, if you follow them you get to the EXT-GWT (from extjs.com) hello world however there isnt much more sample applications , there is one but seems like a big jump&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;To be honest this took a while to get right, I’m not used to java and the path convention is a bit too strange, i followed the video in the docs above and finally its working :)&lt;/p&gt;
</description>
				<pubDate>Fri, 29 Aug 2008 10:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/08/29/trying-gxt-extjs-in-gwt/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/08/29/trying-gxt-extjs-in-gwt/</guid>
			</item>
		
			<item>
				<title>From Code Monkey to Code Crafter ftw</title>
				<description>&lt;p&gt;This idea has been in my head for a while now, I’m sure all developers get here at some point where you want to move forward but not terribly sure how to get there, how to get better, how to write elegant maintainable code that you are proud of.&lt;br /&gt;
For me it all started when I saw how ruby on rails worked and now I’m on the path (i think ) to become better and coding using principles like mvc, active record, etc&lt;br /&gt;
I remember I started assisting Ruby Ireland meetups and there was nothing like that for .net or java and it still feels like there still isn’t a place(maybe i didnt look properly please let me know) or group that you can say, hey lets do&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A code jam about data models or&lt;/li&gt;
  &lt;li&gt;A talk about how to do high performance Persistantent Domain Models or&lt;/li&gt;
  &lt;li&gt;A talk about a particular project the talker worked on and what they learned in a very detailed technical way [not interested in company secrets but how to become a better dev how to learn from other peoples experience ] or- hey lets compare javascript frameworks or&lt;/li&gt;
  &lt;li&gt;This is how you do unit testing in lolcats(im making this up but i recon this exists).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would like to think this is possible, I would like to think that the group can be technology agnostic to a certain degree as i believe most best practises are general for all languages, however I am a c# developer so I talked to Martha Rotter about this and she was interested so we met and talked about this and we will be meeting in open coffee with other (hopefully) like minded people I will post here a date when this is decided but please let me know any thoughts and comments&lt;/p&gt;

&lt;p&gt;Baiscally I’m interested in relevant, higher level developer talk, in concept very similar to alt.net groups around the world. &lt;a href=&quot;http://altnetpodcast.com/&quot;&gt;http://altnetpodcast.com/&lt;/a&gt; &lt;a href=&quot;http://altdotnet.org/&quot;&gt;http://altdotnet.org/&lt;/a&gt; following good design principles from the &lt;a href=&quot;http://martinfowler.com/books.html&quot;&gt;Patterns book &lt;/a&gt;from Martin Fowler, apply XP , etc&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;

&lt;p&gt;EDIT: Ozone thanks for agreing to the use of code crafter :D&lt;/p&gt;

&lt;p&gt;Note: Thanks jaime for the proof reading :D&lt;/p&gt;
</description>
				<pubDate>Wed, 27 Aug 2008 15:13:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/08/27/from-code-monkey-to-code-crafter-ftw/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/08/27/from-code-monkey-to-code-crafter-ftw/</guid>
			</item>
		
			<item>
				<title>SSIS Pain</title>
				<description>&lt;p&gt;hi&lt;br /&gt;
This post is basically a rant, a rant about SSIS, whoever designed this UI please take a good look at your career and either retire or consider a career change.&lt;/p&gt;

&lt;p&gt;I think the idea behind this service is great; we all need data migration tools; but why make people suffer?&lt;br /&gt;
Some examples of why this tool drives me insane; in a data flow, you can createa Derived column, say for some crazy and ridiculous reason (please ntoe sarcasm here) you need to change your something on your source, well then the aforementioned Derived Column thing gies u a nice error(to a level fair enough), but then you deal with the problem you click ok, the dialog closes and then you have to open the same dialog again, why?&lt;/p&gt;

&lt;p&gt;Anyone that say that they think SSIS is great is just because they haven’t used it.&lt;br /&gt;
Rant over ( however i need to keep going with this data migration)&lt;/p&gt;
</description>
				<pubDate>Mon, 18 Aug 2008 22:11:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/08/18/ssis-pain/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/08/18/ssis-pain/</guid>
			</item>
		
			<item>
				<title>Time picker / PNG Transparency fix</title>
				<description>&lt;p&gt;Hi. at some point we all need a click time picker, found &lt;a href=&quot;http://ajaxian.com/archives/nogray-visual-time-picker&quot;&gt;this &lt;/a&gt;one (in ajaxian)&lt;/p&gt;

&lt;p&gt;Also in Ajaxian, I found a PNG fix I used the sample and it works, however I can’t make it work on my server, it doesnt even hit the *.htc file.&lt;br /&gt;
The instructions say that you should give the path to the htc relative to index.html however I dont seem to be able to get it up and running for my web app, anyway… will try again with a little bit more time later on.&lt;/p&gt;
</description>
				<pubDate>Tue, 05 Aug 2008 08:40:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/08/05/time-picker-png-transparency-fix/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/08/05/time-picker-png-transparency-fix/</guid>
			</item>
		
			<item>
				<title>NVelocity Parse</title>
				<description>&lt;p&gt;A little thing that drove me completely insane&lt;/p&gt;

&lt;p&gt;when using parse (&lt;a href=&quot;http://velocity.apache.org/engine/releases/velocity-1.5/vtl-reference-guide.html&quot;&gt;appache ref&lt;/a&gt;) the path to the view includes the folder that you are in&lt;/p&gt;

&lt;p&gt;say you are in the folder …/views/Blog&lt;br /&gt;
editing a view called one.vm&lt;br /&gt;
if you want to parse something in the same folder as one.vm you have to use&lt;/p&gt;

&lt;p&gt;#parse(“Blog/two.vm”)&lt;br /&gt;
and if you happen to use a / before blog you ll get a nice exception that has a very unclear message&lt;/p&gt;

&lt;p&gt;Just to note&lt;/p&gt;
</description>
				<pubDate>Wed, 23 Jul 2008 20:12:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/07/23/nvelocity-parse/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/07/23/nvelocity-parse/</guid>
			</item>
		
			<item>
				<title>NVelocity - creating urls</title>
				<description>&lt;p&gt;I always forget these two:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$Url.Link(&apos;label&apos;, &quot;%{controller=&apos;controllerName&apos;,action=&apos;actionName&apos;}&quot;)  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;and this:&lt;/p&gt;

&lt;p&gt;To Create a form&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$Form.FormTag(&quot;%{id= &apos;formId&apos;, action=&apos;save&apos;, immediate = &apos;true&apos;}&quot;)  
$Form.EndFormTag  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I really wished there was a MR RC4 :D&lt;/p&gt;
</description>
				<pubDate>Wed, 23 Jul 2008 19:58:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/07/23/nvelocity-creating-urls/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/07/23/nvelocity-creating-urls/</guid>
			</item>
		
			<item>
				<title>Transparency Fix for PNG on IE</title>
				<description>&lt;p&gt;Saw &lt;a href=&quot;http://ajaxian.com/archives/iepngfix-2-now-supports-css-background-position-and-repeat&quot;&gt;this &lt;/a&gt;on ajaxian and i think is really handy and at some (not too far in time i ll need this)&lt;br /&gt;
&lt;a href=&quot;http://www.twinhelix.com/css/iepngfix/demo/&quot;&gt;http://www.twinhelix.com/css/iepngfix/demo/&lt;/a&gt; basically to add some transparency you just add a few files to your sever and a line of css and thats it.&lt;br /&gt;
Will tell when the time to use this comes :)&lt;/p&gt;
</description>
				<pubDate>Wed, 23 Jul 2008 19:44:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/07/23/transparency-fix-for-png-on-ie/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/07/23/transparency-fix-for-png-on-ie/</guid>
			</item>
		
			<item>
				<title>Small but interesting find</title>
				<description>&lt;p&gt;Yesterday I was coding and I needed to create a criteria like&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Repository.FinOne(Restriccions.Eq(&quot;Email&quot;, email));  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;however I wanted to make sure that there was not problems with casing. It turns out &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IgnoreCase&lt;/code&gt; exists and can be used this way :D&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Repository.FinOne(Restriccions.Eq(&quot;Email&quot;, email).**IgnoreCase**());
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I was really happy to find this, thanks NHibernate in Action!&lt;/p&gt;
</description>
				<pubDate>Mon, 07 Jul 2008 16:03:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/07/07/small-but-interesting-find/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/07/07/small-but-interesting-find/</guid>
			</item>
		
			<item>
				<title>Speed is all</title>
				<description>&lt;p&gt;PDF Readers&lt;/p&gt;

&lt;p&gt;I’m thinking about a serious of “meaty” post for this weekend or at least the one decent one, but meanwhile I though I should post about the incredible difference in speed between Adobe Reader and Foxit. A friend of mine (&lt;em&gt;one of the two subscribers to this blog&lt;/em&gt;) told me about foxit like a year ago, I went yeah yeah but then about two weeks ago I actually download it and it is really fast, I love it.&lt;/p&gt;

&lt;p&gt;FF2 vs FF3&lt;br /&gt;
OMG I’m so happy with FF3 I’m still testing it in only one of my machines but so far much better performance and now that firebug is behaving, happy days. The Add ons I have are: Firebug with YSlow, Jiffy, Web Developer, and of course Google Toolbar. The best feature is no memory problems :D&lt;/p&gt;

&lt;p&gt;Now tempted to install the Beta 2 of IE8….&lt;/p&gt;
</description>
				<pubDate>Fri, 04 Jul 2008 08:06:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/07/04/speed-is-all/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/07/04/speed-is-all/</guid>
			</item>
		
			<item>
				<title>Jiffy</title>
				<description>&lt;p&gt;This is a firebug extension for measuring accurately the JS performance I have installed and tested it in &lt;a href=&quot;http://billwscott.com/jiffyext/&quot;&gt;this site&lt;/a&gt; sounds like a good idea and to see it running makes sense will start using it from now on,particularly on extJs sites ;p&lt;/p&gt;
</description>
				<pubDate>Tue, 24 Jun 2008 16:44:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/06/24/jiffy/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/06/24/jiffy/</guid>
			</item>
		
			<item>
				<title>Nokia Open sources Symbian</title>
				<description>&lt;p&gt;Talking  about open sourcing &lt;a href=&quot;http://www.nokia.com/A4136001?newsid=1230415&quot;&gt;http://www.nokia.com/A4136001?newsid=1230415&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Tue, 24 Jun 2008 11:36:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/06/24/nokia-open-sources-symbian/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/06/24/nokia-open-sources-symbian/</guid>
			</item>
		
			<item>
				<title>Sign the Entity Framework Comunity Vote of no Confidence</title>
				<description>&lt;p&gt;OMG I just saw this &lt;a href=&quot;http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/&quot;&gt;http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/&lt;/a&gt; and I had to post it.&lt;/p&gt;
</description>
				<pubDate>Tue, 24 Jun 2008 00:40:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/06/24/sign-the-entity-framework-comunity-vote-of-no-confidence/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/06/24/sign-the-entity-framework-comunity-vote-of-no-confidence/</guid>
			</item>
		
			<item>
				<title>IOTC Conference</title>
				<description>&lt;p&gt;Last Thursday and Friday I was at the IOTC, an Open Source Conference. I went to a few talks&lt;/p&gt;

&lt;p&gt;1) Saw Geoffrey Grosenbach &lt;a href=&quot;http://iotc.firstport.ie/lecture/23/&quot;&gt;talking &lt;/a&gt;about &lt;a href=&quot;http://www.modrails.com/&quot;&gt;Phusion Passenger&lt;/a&gt;. The talk target was a bit too wide, however I think he was good at explaining some of the basics. It would have been good to see some sample code but hey. All in all interesting&lt;/p&gt;

&lt;p&gt;2) Talk by Clint Oram the guy from Sugar CRM, well he was basically evangelising about Open Source in general, TBH It was really boring, maybe I just didn’t understand the whole topic of the talk … I believe most of us in the audience were developers, I wish he showed us some goodness, some features, some smart API …or how do they manage their interactions with all the developers in !=locations, how do they evaluate whats code to include or not, who is in charge of that, etc …&lt;br /&gt;
He mentioned some deal that they(Sugar CRM) made with hosting 365 and Clint is now living in Ireland.&lt;/p&gt;

&lt;p&gt;3) &lt;a href=&quot;http://www.blogger.com/wurfl.sourceforge.net/&quot;&gt;WURFL&lt;/a&gt; and WALL. This talk was the start of a really interesting day and a great talk about something I might be using at some point . WURFL is a Device Description repository, it uses a tag that the device send to find out what capabilities does the device have, WURLF seems to fit in nicely with WALL, a markup language (that reminded me a little to nVelocity) that renders according to the querying device. Really interesting and real cool the way the WURFL file is organized (and a surprising 8Mb File)&lt;/p&gt;

&lt;p&gt;4) &lt;a href=&quot;http://www.zope.org/&quot;&gt;ZOPE&lt;/a&gt;. A Phyton Framework. I think this talked turned out to be very different to what was originally intended however it was good to hear practises applied to a OS Irish Shop. There was a lot of talk about how their complete process flows, from development to deployment. For example he mentioned how they use subversion, firebug, how do they use versioning of their phyton and db versions… and then he talked about Zope, I only had a very diluted idea of what was Zope Architecture and what was it supposed to do, I’m still not terribly clear however there were some interesting details all the food related stuff was real nice(and good easy to remember names) Eggs, cheeseShop, etc. I must check the entity generation as it sounds very interesting.&lt;/p&gt;

&lt;p&gt;The presenter, Con Hennessy works for a company called OpenApp interestingly they deploy solutions for the government, he mentioned the HSE. All in all real interesting&lt;/p&gt;

&lt;p&gt;5) PHP Frameworks. This talk really took me by surprise, David Coallier is part of the php core team and he knew what he was on about. He talked about web frameworks: &lt;a href=&quot;http://www.blogger.com/www.cakephp.org/&quot;&gt;Cake&lt;/a&gt;, &lt;a href=&quot;http://www.zend.com/&quot;&gt;Zend&lt;/a&gt;, &lt;a href=&quot;http://www.blogger.com/www.symfony-project.org/&quot;&gt;Symfony &lt;/a&gt;(all MVCs) and &lt;a href=&quot;http://www.pradosoft.com/&quot;&gt;Prado&lt;/a&gt;( an event driven one that I don’t find interesting at all) then he went on talking about testing frameworks (this was really interesting as I knew nothing about php testing frameworks) here the list was PHPUnit, SimpleTest (it looks like he liked this one and I liked the asserts syntax) and another one that was for real low level testing (hence not interested as I know for sure I’m not gonna be debugging php core anytime soon )&lt;/p&gt;

&lt;p&gt;That’s all for today I wanted to add some nice pics but as I was searching I realised I don’t know how to make sure I’m not breaking any law by using images so I’ll find out later and go to sleep now&lt;/p&gt;
</description>
				<pubDate>Mon, 23 Jun 2008 10:44:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/06/23/iotc-conference/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/06/23/iotc-conference/</guid>
			</item>
		
			<item>
				<title>Super easy image replacement with jQuery</title>
				<description>&lt;p&gt;&lt;a href=&quot;http://www.webdesignerwall.com/demo/jquery/img-replacement.html&quot;&gt;http://www.webdesignerwall.com/demo/jquery/img-replacement.html&lt;/a&gt;&lt;br /&gt;
look at the source code for this, is it clean or what?&lt;br /&gt;
took me little time to get something up and running in a real nice way&lt;br /&gt;
This is a sufficient reason to love jQuery and whoever it is wrote this :)&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;
</description>
				<pubDate>Wed, 18 Jun 2008 17:52:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/06/18/super-easy-image-replacement-with-jquery/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/06/18/super-easy-image-replacement-with-jquery/</guid>
			</item>
		
			<item>
				<title>Js Frameworks usage amongst top sites</title>
				<description>&lt;p&gt;&lt;a href=&quot;http://royal.pingdom.com/?p=305&quot;&gt;http://royal.pingdom.com/?p=305&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First Prototype, closely followed by jQuery :D then moo&lt;/p&gt;
</description>
				<pubDate>Fri, 13 Jun 2008 16:04:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/06/13/js-frameworks-usage-amongst-top-sites/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/06/13/js-frameworks-usage-amongst-top-sites/</guid>
			</item>
		
			<item>
				<title>Theme Roller and UI.jQuery</title>
				<description>&lt;p&gt;I really like this UI.jQuery.com&lt;br /&gt;
Will post more later…&lt;/p&gt;
</description>
				<pubDate>Wed, 11 Jun 2008 18:20:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/06/11/theme-roller-and-uijquery/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/06/11/theme-roller-and-uijquery/</guid>
			</item>
		
			<item>
				<title>Silverlight 2 Beta 2 Installation</title>
				<description>&lt;p&gt;I saw Scott Gu’s post about Silverlight and I decided OK I’ll try it. Well, the install took 10 minutes and I had to close everything (Visual Studio ,IE Firefox), such an nuisance compared to the instal of Yahoo’s Browser plus. 
Did not try anything after that, to be honest , it doesn’t call me or something… I’ll need to be pushed into this one.&lt;/p&gt;
</description>
				<pubDate>Tue, 10 Jun 2008 21:57:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/06/10/silverlight-2-beta-2-installation/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/06/10/silverlight-2-beta-2-installation/</guid>
			</item>
		
			<item>
				<title>New release of Nhibernate EAP</title>
				<description>&lt;p&gt;The most interesting thing today was an email from Manning with the new release of the EAP of Nhibernate in Action (still in chapter 3 :( ) .&lt;br /&gt;
On the plus side, first time I ever bother reading the table of contents in detail, and yes, I found an appendix called Introducing ActiveRecord and MonoRail, at first this made me really happy, but now that I think about it, the appendix should really only be about Active Record, else its gonna be too short.&lt;br /&gt;
I think I would like to see a mention of Machine Migrations (and similar tools)&lt;/p&gt;

&lt;p&gt;PS: Did I just say this is the most interesting thing in the day ? ( well apart from lunch in the park yeah, it pretty much was)&lt;/p&gt;
</description>
				<pubDate>Tue, 10 Jun 2008 21:44:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/06/10/new-release-of-nhibernate-eap/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/06/10/new-release-of-nhibernate-eap/</guid>
			</item>
		
			<item>
				<title>No Non-sense jQuery</title>
				<description>&lt;p&gt;John Resig &lt;a href=&quot;http://ejohn.org/blog/building-interactive-prototypes-with-jquery/&quot;&gt;just posted some talks &lt;/a&gt;he gave and they are so easy to understand that it hurts. I really like the jQuery syntax, ok is a different approach to a JS library than &lt;a href=&quot;http://www.extjs.com/&quot;&gt;ExtJs&lt;/a&gt;, and I like it, unobtrusive and lightweight with loads of plug ins available.&lt;/p&gt;

&lt;p&gt;I really like &lt;a href=&quot;http://tablesorter.com/docs/#Demo&quot;&gt;this grid &lt;/a&gt;(ok ok it does use a table for layout but hey, looks good and you read the code and immediately know what’s happening) .&lt;/p&gt;
</description>
				<pubDate>Mon, 09 Jun 2008 19:28:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/06/09/no-non-sense-jquery/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/06/09/no-non-sense-jquery/</guid>
			</item>
		
			<item>
				<title>MS Word save to PDF</title>
				<description>&lt;p&gt;hi there&lt;br /&gt;
I don’t think this is ultra necessary or anything like that but I know I’ll need it at some point, Microsoft has a plug in to save a document as a pdf its well integrated and seems to work ok.&lt;br /&gt;
here is the url &lt;a href=&quot;http://url.ie/f9v&quot;&gt;http://url.ie/f9v&lt;/a&gt;&lt;br /&gt;
there are other options if you don’t have word 2k7 &lt;em&gt;I think is called pdf95&lt;/em&gt;&lt;/p&gt;
</description>
				<pubDate>Fri, 06 Jun 2008 11:39:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/06/06/ms-word-save-to-pdf/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/06/06/ms-word-save-to-pdf/</guid>
			</item>
		
			<item>
				<title>Another Debugger for IE</title>
				<description>&lt;p&gt;We all know how painful it is to debug websites in ie, (particularly 6 what a terrible browser that…. i ll rant properly about it another day) today i stumbled across this little tool call &lt;a href=&quot;http://www.my-debugbar.com/wiki/&quot;&gt;DebugBar &lt;/a&gt; it was all great until I installed it in my machine and it doesn’t work. (no contextual menus, no nothing)&lt;br /&gt;
 However I ll have to give it a try in another machine as mine is a Vista Home Edition ( yuck yuck) I should be updating to ultimate pretty soon ( hopefully Saturday) when I know I’m safeguarded by at least a virtual environment to work in.&lt;/p&gt;

&lt;p&gt;All for now if anyone has comments/ opinions very welcome :D&lt;/p&gt;
</description>
				<pubDate>Thu, 05 Jun 2008 19:21:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/06/05/another-debugger-for-ie/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/06/05/another-debugger-for-ie/</guid>
			</item>
		
			<item>
				<title>Hidden Doc Gem - ExtJS</title>
				<description>&lt;p&gt;hi again&lt;/p&gt;

&lt;p&gt;OK i just found this out last Monday and it was there all along i just never paid attention to it and found it extremely handy.&lt;br /&gt;
This &lt;a href=&quot;http://extjs.com/learn/Ext_Manual&quot;&gt;http://extjs.com/learn/Ext_Manual&lt;/a&gt; there is a lot of JS introduction and also good to read about the component model &lt;a href=&quot;http://extjs.com/learn/Ext_2_Overview#Component_Model&quot;&gt;http://extjs.com/learn/Ext_2_Overview#Component_Model&lt;/a&gt;&lt;br /&gt;
I just though i d blog about it cause It was easy to miss&lt;/p&gt;
</description>
				<pubDate>Thu, 05 Jun 2008 12:44:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/06/05/hidden-doc-gem-extjs/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/06/05/hidden-doc-gem-extjs/</guid>
			</item>
		
			<item>
				<title>Umbrella</title>
				<description>&lt;p&gt;Today Ayende blogged about this and i found it really interesting&lt;br /&gt;
here: &lt;a href=&quot;http://www.codeplex.com/umbrella&quot;&gt;http://www.codeplex.com/umbrella#&lt;/a&gt;  you can get the code and tests&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://ayende.com/Blog/archive/2008/06/04/Review-Umbrella-project.aspx&quot;&gt;http://ayende.com/Blog/archive/2008/06/04/Review-Umbrella-project.aspx&lt;/a&gt; ayendes blog&lt;/p&gt;
</description>
				<pubDate>Thu, 05 Jun 2008 12:22:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/06/05/umbrella/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/06/05/umbrella/</guid>
			</item>
		
			<item>
				<title>Some Cool Things</title>
				<description>&lt;p&gt;Today’s interesting find is &lt;a href=&quot;http://re3-bplus-001.yos.re3.yahoo.com/docs/samples/&quot;&gt;Browser Plus&lt;/a&gt; I heard about this first a few months ago but there was not much real info about it.&lt;br /&gt;
I have to say i was really impressed by the installer short, sweet and very intuitive.&lt;br /&gt;
Also the capabilities that it provides seem simple but powerful, I’m very interested in the Ruby Interpreter Service&lt;br /&gt;
Promising.&lt;/p&gt;
</description>
				<pubDate>Thu, 05 Jun 2008 06:57:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/06/05/some-cool-things/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/06/05/some-cool-things/</guid>
			</item>
		
			<item>
				<title>Nhibernate from the begining</title>
				<description>&lt;p&gt;I’ve been using NHibernate for a while now, but I never started a project from the beginning or used purely NHibernate (I mean without Castle Active Record).I started to read NHibernate in Action ( the EAP edition) so lets see how it goes&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;NHibernate in Action Pierre Henri Kuaté, Tobin Harris, Christian Bauer, and Gavin King January 2009 https://www.manning.com/books/nhibernate-in-action &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
				<pubDate>Thu, 22 May 2008 10:48:00 +0000</pubDate>
				<link>http://roundcrisis.com/2008/05/22/nhibernate-from-the-begining/</link>
				<guid isPermaLink="true">http://roundcrisis.com//2008/05/22/nhibernate-from-the-begining/</guid>
			</item>
		
	</channel>
</rss>