Anyhow, after most of the mists of mayhem dissipated from my head I started reading Domain Specific Languages to get ideas about how to go around building a DSL for the Ultimate Personal Task Management System project. It took me a while to get up to speed, was it due to the nebulae that populated my mind or to the fact that one needs some time to adapt to the writing of an author, I do not dare to wonder. It is a very interesting book nevertheless, I found out that, I have been implementing what Martin Fowler calls internal DSLs for quite a while without even reflecting about it: Yes, Ladies and Gentlemen, Fluent Interfaces are no other thing than Domain Specific Languages embedded within the same general-purpose programming language you happen to be using! Aha!. Aside from this discovery and, in the context of this project, I think I can get away by starting implementing a simple DSL based on a Delimiter-Directed Translation parser and go increasing in complexity as needed.
I finally was able to set up the project on GitHub and Sprint.ly today, and after hacking the first user story, here we have a draft of how it may look:
Barbaric Monthly is my attempt at building/improving a coding project per month so that I can experiment with old and new technologies, learn ad infinitum, remain excited about the craft and nurture my passion for software development.
A handful of co-workers and I have been secretly planning an exciting programming event at our company. During our weekly brainstorming sessions we usually have very interesting conversations and plenty of exciting ideas are shared back and forth (How refreshing! :) ). In the last meeting specially, one idea stroke my fancy greatly, the idea of developing something similar to hubot - a cute robot assistant - that would automate repetitive tasks or provide a centralized control for different systems within the organization.
At the same time, I am very into personal task management systems that help you increase your productivity (GTD, Pomodoro, Getting Results the Agile way, Personal Kanban, Zen to Done…) and throughout the years I have perfected my own. Something that I have been considering for quite some time is to implement this Ultimate (XDDDD) system in the form of a web application. While I am aware that plenty of applications exist out there in the wild, I would love to build something completely tailored for me, and moreover, I would like to have the possibility to control my system with a Console interface! Old School! But really, is there anything more productive than a command-line shell? than a personalized hubot?
So here we are at this point, the planets aligning, the full moon rising, the wolves howling, and I… switching my Barbaric Monthly from CMS to the Ultimate Personal Task Management System Of Awesomeness. Here is a mock-up of what it might look like:
Simply put, it will be SPA (Single Page Application) with a regular web interface and an embedded Console - let’s call him Mike. Mike will let the user (a.k.a. me) manipulate the different tasks, projects, tags, filter what’s being displayed, etc. Furthermore, the user (a.k.a. me again) will be able to modify or extend the DSL (Domain Specific Language) that Mike understands at runtime. For instance, I would be able to define a tag like “e-mail” and then use that to tell Mike: “e-mail [email protected]”.
I anticipate a lot of AJAX/WebSockets and DSL design goodness! Yey! Now… let’s see if I can come up with a prototype in 2 weeks.
The “barbarian meets” series are a collection of articles that intend to introduce and explain useful libraries, frameworks, tools and technologies in simple and straightforward terms.
MEF is Microsoft’s solution for easing the pain of building extensible applications. Throughout these Barbarian Meets series we will go through what MEF is, why should you care, which problem does it solve and how it works.
I have a terrible weakness: I am all over the &%$#¤%& place.
I do not know when it started. I do not know if it is due to the fact that my degree was in telecommunications and I feel I have been catching up ever since. I do not know if it is my passion and excitement for the trade that drives me and makes me feel uncontrollably drawn to any new shiny thing that appears on the scene. I do not have the slightest idea.
The fact is that, before I even notice, I find myself reading 37 books at the same time, or working on 6 side projects, or trying to learn Swedish, Italian and to play the violin at the same time. This, of course, tends to end up with pretty catastrophical results (no, really?), with a 1% percent success, tons of unfinished projects and sometimes a deep sense of underachievement - actually that last one it’s not really true, I’m a wonder at looking at the bright side of things, that 1%… hell yeah!.
Anyhow, know your own weaknesses they say, and so I have learned. Through the last year I have been working on improving my focus, on reducing input flow lest it drowns me:
Pruning my RSS feeds: Keeping up to date with what is going on in the community is great. But when keeping up seems more work than pleasure, when you wake up in the morning with 1000+ articles that you feel you have to read, when you have no time to produce because you spend all the time consuming the voice of the Internet, then it is definitely not worthy. Fare the well infinite RSS feeds.
Reducing books to a maximum of 3: I am aaaalmost there, my goal is to read a technical book, a best practices book and a wild card ^_^.
Learning to say NO to myself and others. Still working on this as well, last “Yes” attack materialized in a beautiful violin which I do not know when I will have the time for (after learning Swedish I have told Malin and myself).
Making small projects of every endeavour with specific goals: For instance, I want to learn 200 Swedish words a week, instead of I want to improve my Swedish. This increases my focus, lets me visualize what I want to achieve and since it is measurable and something I can complete, it gives me that nice feeling one gets when finishing something successfully.
And my latest addition starting this month:
Focusing on a single side project per month
Enter the Barbaric Monthly with the following rules:
Focus on one main technology
Produce/refine something by the end of the month
Write interesting blog posts about it ^_^
August theme is ASP.NET MVC 4. But remember… focus Jaime… temptation lies just around the corner xD.
I probably have somewhere between 50 or 100 ideas that I like to work on.
Here is an interesting thing that happens, and I encourage everybody else to do this: Start writing down every idea you get... And then, start embelishing them... think about... How would you price it? How much do you think it would cost? Turn a line into a paragraph, into a page, and it that process, pretty soon, something is gonna talk to you...