Monday, August 4, 2014

Software Architecture Fundamentals Part 1: Understanding the Basics by Neal Ford and Mark Richards, O’Reilly Media

Neal is Director, Software Architect and Meme Wrangler at ThoughtWorks. He has a degree in Computer Science from Georgia State University specializing in languages and compilers and a minor in mathematics specializing in statistical analysis. He is the author of several books.

Mark Richards is a technical hands-on architect with over 30 years experience in the industry, 19 of those years with experience in application, integration, and enterprise architecture, mostly within the Java platform. These Chapters are an excellent introduction in the role of a Software Architect.

Neal and Mark explain what soft skills are needed and that the software architect role is not only a technical role but also a leader role. Beside the excellent technical skills a lot of business domain knowledge is needed to fill this role.

Architecture Patterns and Anti-Patterns are shown and they explain why Software Metrics are important for a Software Architect.

The only Chapter that is not so useful in my opinion is the one about Design Patterns. It covers only a few patterns from the gang of four and is a bit too short.

The last Chapter gives a small overview on Enterprise Architecture and is an introduction to the second part (Software Architecture Fundamentals Part 2)

Monday, March 17, 2014

Agile Software Architecture Edited By Muhammed Ali Babar, Alan W. Brown and Ivan Mistrik; Morgan Kaufmann

This book is a collection of 14 articles from 33 contributors (which is not stated in the description of the book) about agile software architecture. Most of the articles are about 20 pages long.

Some articles are really hard to read and many articles have a short introduction in agile development, explain some parts of the agile manifesto and/or introduces scrum which get really annoying after a few articles.

The Book is organized in 4 Parts.
Part 1 contains fundamental information of agile architecture including a small introduction in DCI, an introduction into refactoring of architectures, an article on how to discover and prioritize architecturally significant requirements (ASR) with the help of architecturally savvy personas (ASP) and an article where the authors constructed the Triple-A Framework for assessing the architecture decision process. Further the authors examined different projects that changed their architecture decision during the project and that the successes and failures of the projects were influenced by the shifts that were made.

Part 2 is about managing software architectures in agile projects. The first article from this part shows how adaptable and flexible software architectures can be achieved through the integrating of agile paradigm and variability at the architectural level. The second article is about continuous software architecture analysis and comes to the conclusion that continuous architecture evaluation in agile processes remains an open research question. Next is an article about lightweight architecture knowledge management (AKM) for agile software development. The authors show how AKM can be part of agile processes (like Scrum) without much overhead and costs. The last article is about bridging user stories and software architecture. It explains agile architecting and describes a tailored Scrum for agile architecting.

Part 3 shows agile architecting in specific domains. These specific domains are testing for security and development and deployment in the cloud.

Part 4 shows industrial viewpoints on agile architecting. This part is more practical than the others. It includes an article about agile architecting in complex agile system development projects. The authors show that strong architecture and agile practices mutually reinforcing in complex agile development projects. The next article “Building a Platform for Innovation” focuses largely on agile with architecture rather than agile versus architecture. The author considers both technical and nontechnical factors in building a platform for innovation. The third article “The Opportunities, Threats and Limitations of Emergent Architecture” deals with the claim of emergent architecture “that executing the implement-and-refactor cycle over and over again, using some design principles like the SOLID principles for guiding the refactoring, will result in a complete architecture—without doing any explicit architectural work”. The last article “Architecture as a Key Driver for Agile Success” focuses on the experiences of Aviva UK during their transformation journey from waterfall to agile.

There is not much new information in this Book but some articles are interesting to read.

IMHO the most interesting articles in this Book are: From Part 1: Chapter 3: Refactoring Software Architectures, Chapter 5: Architecture Decisions: Who, How, and When?

From Part 4: Chapter 12: Agile Architecting: Enable the Delivery of Complex Agile Systems Development Projects Chapter 13: Building a Platform for Innovation: Architecture and Agile as Key Enablers Chapter 14: Opportunities, Threats, and Limitations of Emergent Architecture Chapter 15: Architecture as a Key Driver for Agile Success: Experiences at Aviva UK

I give it 3 out of 5 stars.

You can find the book here.

Monday, March 3, 2014

Google Now Launcher for Nexus 7 2012 Edition (aka Grouper)

I read in the news that the new Nexus 5 launcher is available in the Play store for the Nexus devices that have Android 4.4.

I tried to download it for my Nexus 7 but couldn’t find it in the play store. I went to the website and search for the new launcher and found it, but it said that it is not compatible with my Asus Nexus 7. Hmmm…. Strange since I installed the update for Android 4.4.2 some time ago.

After some research I found out that you need the newest google search installed on the device in order to be able to install the new launcher. I checked for app updates on my device and it seemed that everything (including google search) is up to date.
I went back to the google play website and searched for the Google-Search app. According to the website it was installed on my device. I clicked on the install button (just to see what will happen) and to my surprise I got a message that it will be installed on my device.

During the installation on my nexus 7 I got an error message that, because of my content filters, the app could not be updated.

I looked in the playstore settings and saw that I had some content filters enabled (only "Everyone" and "Low maturity" rated apps where allowed).
After I enabled "Show all apps" some app updates popped up (Google Maps, Google Hangout, Google+) and after I installed these updates I finally was able to install the new Google Now Launcher.

So if you can’t see the new Google Now Launcher in the Play Store, check if you have enabled content filtering in the Play Store settings.

Friday, January 17, 2014

Using rake with Visual Studio 2010 or using rake tasks with parameters

I like ruby and I like rake to build my stuff.
Since most of the time I am coding C# with Visual Studio I wanted to use rake from within Visual Studio. You can add external tools to Visual Studio (Tools\External Tools …) but it is not possible to call rake directly with this feature.
So I wrote a small batch file which starts rake:

call rake –f C:\Tools\scripts\myrakefile.rb build[%1]

I added this batch file as External tool with the full path to the Project File that is currently selected in the Explorer View as an argument (dont't forget to check "Use Output window"):

How does this work?

The batch file calls rake and executes the build task in the rakefile. This task expects the project file it should build as parameter.
Here is the content of the rakefile:

msbuild = "C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\MSBuild.exe"
desc "Build .proj with MSBuild"
task :build, :project do |t, args| 
 # get the projectfile path from the arguments
 projectFile = args[:project]
 puts "Building #{projectFile}"
 output = `#{msbuild} #{projectFile} /t:rebuild /p:Configuration=DevEnvDebug`
 puts output  
 if output.include?("Build FAILED.")
  puts " "
  puts "***** There are Build errors! *****"

So far you can select a project file in the solution explorer and the Select the new entry in the Tools menu “Build with rake” and you will see the output from the rake script in the output window. That is not very convenient.
So let’s assign a keyboard shortcut to our external tool:

Open “Tools\Options…” and select “Environment\Keyboard”. Type “Tools.External” in the “Show commands containing:” Now you see a bunch of entries like “Tools.ExternalCommand1”, “Tools.ExternalCommand2” and so on. Since in my case the batch file I added earlier as external tool is on the eighth position, I choose “Tools.ExternalCommand8” in the list. Now you can assign a shortcut for this command. I choose Alt + B, Alt + R. Don’t forget to press the Assign button.

Now you can simply select a Project in the Solution Explorer and press Alt + B, Alt + R and you can see the rake output in the output window.
If you want to call other rake tasks from within the build task which also expect some parameters just call it like this:

#assume there is a task called othertask which takes a parameter


Wednesday, January 15, 2014

Neal Ford on Agile Engineering Practices, by Neal Ford, O'Reilly Media

Neal is Director, Software Architect and Meme Wrangler at ThoughtWorks. He has a degree in Computer Science from Georgia State University specializing in languages and compilers and a minor in mathematics specializing in statistical analysis. He is the author of several books.

Most available sources about Agile Software Development won't mention software development (engineering practice) that much. Mostly the available Books talk about the Agile process itself. This Video fills this gap since it is mainly about the engineering practice for Agile development. Neal tries to explain why those practices works so that developers can better understand them.

During the Workshop Neal talks about the following topics and explains why these are important for Agile Software Development:

  • metrics,
  • (short) feedback loops, (like TDD)
  • Automation,
  • time and space (where space means the code)
  • communication,
  • counter-intuitive, (none intuitivity),
  • demonstration trumps discussion

This Video covers the most important topics in an Agile process form the developer point of view.
He starts with the estimation process in Agile Software Development and explains how estimation in an Agile Team works and what is different compared to e. g. the Waterfall process. He explains Test Driven Development (TDD) and Testing (integration testing) in general, starting from the simple basics of TDD up to Test Driven Design and Agile Design. Neil explains parts of the SOLID (Single responsibility, Open-closed, Liskov substitution, Interface Segregation, Dependency inversion) and DRY (Don't Repeat Yourself) design principles and shows small examples for these principles and why these design principles are important. He shows why automation (including Continuous Integration and Continuous Deployment) is important in an Agile process and what developers could and should automate. And of course he talks about the benefits of Pair Programming and why it won't slow down the productivity of an Agile Team.

If you are new to Agile Software Development this Video is a perfect starting point to Agile Software Development. Even if you are working in a Company that uses Agile Processes (like SCRUM) I think you can get some new ideas on some topics. Most of the source code examples in the Video are in Java but they aren't really language dependent.

You can find more information here.