So, after writing the article I blogged about a few minutes ago which I wanted to publish on Code Project it seems that it’s been added to the “Unedited” articles side of the site. This was actually less painful than I would’ve expected aside from the fact that I had to do HTML for the first time in a while. If you’re interested in reading it and giving me your feedback, I would love to hear from you. You can find the article both on this site under my article “Memory Queue” or on Code Project as the article aptly named “Memory Queue”. The article on Code Project has the source code that goes with it and I’m hoping to have more articles to publish soon…
So, I finally managed to finish the first article that I hope to publish on Code Project. In this article I cover a little infrastructure object that works as a Memory Queue. I expand this object to be encapsulated by a Thread Queue, which I then use to build a Logging Framework. It explains a very simple pattern to use when you want to assign work to multiple threads without having to worry too much about Thread Synchronization and all those things that goes with it. It’s super-fast as you’ll be able to see in my Logger implementation and can be used in so many different scenarios. As I take strides in writing new articles that cover my Architectural series of articles I’ll be adding to this little project so I can build a complete framework that can be used and built on in my coming articles. My hope is to have a complete sample of how to write software using various technologies including Ruby, C# and Java as the services technology while using both JavaScipt and Silverlight as my User Interface technology. By doing this I want to show how you can completely separate concerns by using simple patterns that work for the specific tool set that you choose to work with. This is going to be quite a journey and the main aim for me taking this journey is to end up in a position where I have a complete understanding of the technologies mentioned above as well as the concepts I’ll be covering.
I’ll update this site as soon as it’s been approved by the powers that be over at Code Project. In the meanwhile if you would like to have a look at the article you can go to it by clicking here. I hope you enjoy this first article as much as I do and I also hope that you’ll give me some feedback.
My team was recently assigned to help out another team who had a bit too much to do for a bit too long. So, I wanted to see how easy or how hard it would be to use some of the tools that I’ve become quite use to. One of those tools of course is Jenkins. The idea was to set this new environment up to be a slave to my Master Jenkins Build Server running on Ubuntu while the slave would run on Windows. Of course Jenkins has a lot of features with regards to this and I managed to fiddle enough to get it to work and I’ve released another article called “Setup – Jenkins and Windows” where I take you through how to do this.
The next thing I’m going to do is get it to pull the source code from Team Foundation Server and running the tests so we can know when we break something. Just in case you were wondering, I do try to follow the Test Driven Development (TDD) way of writing code as much as possible and love the fact that it makes my life easier and safer. I’ve decided to write another article on this as well, but you’ll have to wait and see when it comes out whether you agree or disagree with the things I write in there J
I hope you enjoy this new platform that you can use for your CI…
As some of you that follow me may have seen, I’ve been quiet in the last week. This is/was for good reason. I’ve been a bit busy doing quite a number of things including writing more articles, some of which are more around the grey areas in development like Architecture, Methodologies of Development, Design Practices and so on. I’ve also been busy trying to get my Code Project articles completed, which I’m hoping to publish very soon. It’s been a bit strange putting these together and even though I’m going to take a while to publish all of them, they did get me to read a lot about various things and they also got me thinking about things that I’ve always done and re-evaluating those principles that I have and that most of us developers like to talk about.
So, hopefully I’ll get those done and hopefully they will get people talking a bit and I may even have some of you challenge my thoughts on some of the concepts that I’ll put out there, even though there won’t be too many new things. The idea is to start having the discussions in an open platform where everyone is on the same foot and all the different paths can be explored in an honest manner. Anyway, I’m not going to go too much into it right now… Just know that it will be coming in the next month or so and it should be interesting to hear what some of you say…
In the meanwhile I’ve just finished my article on Git-Flow called “Getting Started – Git-Flow” and I hope you’ll enjoy it. Git-Flow is a very interesting concept that builds on the powers that Git gives you, even though it can be implemented on just about any and every other Version Control System there is. So, if you were looking for a good Branching Strategy or a good process to implement for when your company/team is doing development, try it and give me some feedback to say where I can help you adopt it or where my explanations are lacking a bit.
In the meanwhile, I’m going to continue writing those other articles which will hopefully take me a bit more into the code and a bit less into the environmental things that makes our lives easier by giving business the visibility they need.
So, you may have heard about a thing called Git and you were wondering more or less what it is and whether you would be able to use it for your own projects. Of course it’s not something new to those that know about it and for those that have been doing some open-source work. For the rest of us who come from more of a Microsoft world or even a Java one where we use tools like Team Foundation Server and Subversion, I’m hoping that you’ll find my new article called “Getting Started – Git” a bit more helpful in explaining what this thing called Git is. Since learning about Git and using Git, I’ve slowly started switching my stuff over to Git and even though I found it to be a bit tough to get use to when starting, I’ve come to realize that the benefits of using it outweighs the benefits of using some other tools.
As you’ve probably seen on this site, I have quite a few articles pertaining to Environments and the tools you can use to work well on all projects. Well… This is another one of those tools. What you will also be seeing in the coming months is how I start bringing these toolsets into the world I’m use to called Microsoft. As I’ve mentioned in some of my other articles, I’ve been trying to finish some articles that I’m hoping to publish on Code Project, which of course I’ll also have hosted here. Most of those articles will be on code written in .Net and what I would like to do is take those articles and their code and also do them in Java and Ruby, which will then hopefully give some of you non-Ruby and Java developers wanting to come into this space a bit of an advantage on how to get into it faster. I hope you enjoy the article and I also hope that you find some of the stuff in there helpful and useful to get you to understand Git and how to use it. In a subsequent article I’ll be combining Git and Git-Flow to give you a branching strategy that makes life a whole lot easier.
So, I’ve cleaned up some of my articles to point to the “Setup – Requirements” page and will be using this as a living article for any new requirements I may come across.
As some of you may have seen, I have been quite active over the course of the last few weeks and if you’re wondering why, well it’s because I’m trying something new :-) It’s always fun when you try to do something different and if you find that it works. To explain in the space of a Blog, I’m trying to follow a new process (new for me) whereby I do my own notes, test code, research and code all at the same time. The way it works is quite simple… It’s very similar to Test Driven Development (TDD) where you write your code before you start coding. So, the first thing you do in your test code is you “wish”. This means that you simply write out all the different Test Methods with no code in the body of these methods. In other words you’re declaring your test code before you actually write the test code. Once you’re done with that you start with the first method and you write the code. While you’re doing this first method you may find that you have another scenario that you would like to test, so you add another method once you’re done with the test method you were busy with. Once you’re done with the first test’s code, you run it and you should see a failure. Now you start writing the actual business code and on completion you run your test again to see that it passes. When you’re done with that, you move to the next test method and so it goes until you’re done with both your code and your tests. After all this, you refactor
To get back to the thing that I’ve been trying… Before I start with a new task, I start up Microsoft Word. The I write all the headings in my document that I would like to cover i.e. “wishing”. When that is done I start doing my research and I make notes in the relevant section in my document. Once these notes are there I start with the implementation of that research and once that is done I’ll update my document. Now if you take a scenario where I’m busy writing code, I would write the outline for my document first, then write the test methods, then update my document and start with the test code. And so I continue until my Document is complete, my tests are complete and my code is complete.
Why do I do this? I found that it gets me to focus a lot better. Seeing that I have to explain what I’m doing in the document, I find myself understanding the problem better and seeing that I need to write the test code I find myself implementing the logic as I understand it. All the while I’m learning more about the problem, I’m also updating the document until I find myself where everything is complete and at that stage I finish the document first, then I do some refactoring on the code.
If all this doesn’t make any sense, try by documenting what you are going to do before you do it, instead of after the fact :-) You may just be surprised at how easy you pick up things and how well you understand them when you’re done… It’s like being the teacher, the student and the writer all at the same time
Anyway, Have Fun…
I’ve just completed another article related to Environments called “Setup – Jenkins and RVM“. In this article I take you through the setup process to get Jenkins and Ruby Version Manager (RVM) to play nice with each other. I start with the Build Server and RVM setup and then take you through to pulling your first GitHub hosted Ruby code, doing a Bundle Install and finally running a rake for your Unit Tests. I hope this will help someone out there, seeing that I have struggled to understand why things on Jenkins don’t work or why my Jenkins install doesn’t pick up that I have RVM running with the correct Rubies. It was fun and it seems to be working. So, enjoy!!!