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 play.google.com 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! *****"
  fail
 end
end

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

Rake::Task["othertask"].invoke(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.

Thursday, December 12, 2013

Cultivate Conference 2013: Complete Video Compilation: O'Reilly Media

The Cultivate Conference “ is a one-day event for leaders (and inspiring leaders) at technology companies to hear directly from successful tech founders and managers, learn from each other, and come away inspired to build companies that make a difference.” (cultivatecon.com)

I found especially the talks from Tim O’Reilly, Scott Chacon and Patty McCord really inspiring. If you like books like “Team Geek” (By Brian W. Fitzpatrick and Ben Collins-Sussman, O’Reilly), you will like these talks.

The Compilation includes 7 Talks and the Opening Remarks. All together the videos have a length of nearly 5 ½ hours. The quality of the Videos and the Tone is good. Sometimes the Camera is shaking a bit but that’s does not disturb much.

The Talks in detail:
How I Failed (40 minutes) - Tim O’Reilly (Founder of O’Reilly Media)
This talk is based on Tim O’Reillys article “How I failed”. Tim talks about 6 failures where O’Reilly failed as an organization in the past. This is a great talk.

Cracking the Culture Code (32 minutes) - Elain Wherry (Co-founder of Meebo)
Elain shows that culture is not just about free fruits and coffee in a company. She illustrates how important cultural thinking is. At the end of the talk Elain had some problems with her microphone which makes her sometimes hard to understand and I had to view this talk twice to really understand it (but it was definitely worth the time).

What *Do* You Do All Day? (38 minutes) - Kate Matsudaira (Popfroms)
Kate talks about leadership and how you can still lead effectively in flat organizations. This is a great and interesting talk.

How to Create a Culture of Shipping Product Continuously (39 minutes) - Hiten Shah (Founder and president of KISSmetrics and Crazy Egg)
From the description of the talk, Hiten should talk about how to create a culture of shipping without compromising your company values. But actually there is not much about shipping continuously in his talk. I didn’t get much out of this talk.

Leading from First Principles (46 minutes) - Scott Chacon (CIO of GitHub)
This talk is very interesting. You get some insights on how things are done at GitHub. The bottom line of this talk is that you should make decisions based on what you are trying to accomplish. Don’t just do things, because other companies have done them. I think this is a great talk.

Leveraging Logic as a Leader (41 minutes) - Patty McCord (former chief talent officer Netflix, now Patty McCord Consulting)
This talk is manly about honesty and truth and dealing with engineers. This talk is very funny and inspiring. I Hate Meetings (43 minutes) – Michael Lopp (Rands) (Director of Engineering at Palantir) As the title says, this talk is all about meetings. Especially the ones where no decisions are made and people are just talking without any conclusions. This is an interesting and good talk.

The talk “Nothing to Hide: Living with Complete Email Transparency” from Patrick Collison is not part of this Video compilation.

You can find more infos on the product page and at the Cultivate website.

Sunday, December 1, 2013

Nexus 7 update to Android 4.4

This morning i got a notification on my Nexus 7 (2012, WiFi, nakasi with ClockWork Recovery) that a new System update is available for installation. YEAH Android 4.4 is there!

So i rebooted to install it. My tablet went in recovery mode to install the new image. A few messages appeared on the screen like patching system, copy new files, deleting files, setting symlinks and then it said "installation aborted" the error message was something about the cache (couldn't completely read the error message).

Hmmm.... strange. I just rebooted the tablet and got stuck in a boot loop.

I downloaded the Factory image from Google and the Nexus Root Toolkit. I put my Nexus 7 in to fastboot mode (while in the boot loop press the volume button and the power button for about 10 seconds) and installed the usb drivers on my computer (via Nexus Root Toolkit).

Under "Back to Stock" i choose "Soft-Bricked/Bootloop" and pressed "Flash Stock + Unroot", clicked OK, enabled "Other/Browse...", cklicked OK and selected the Factory image I downloaded earlier.
Entered the MD5 checksum from Googles download page and flashed the Sock image. So... now I have a factory reseted Nexus 7 with Android 4.4. All data is gone.
It will take some time to get my music and E-Books back on the device. As well as all the Apps. But the worst thing is that all my High scores for Fruit Ninja are gone :-(

Now I installed a custom recovery image and root again.

Now, that was a lot of trouble to get Android 4.4.

Update 14.12.2013:
Today I got the update to 4.4.2. This time the update went smoothly.
But I couldn’t update any installed Apps via the Play Store. The updates seem to download normal but the installation process didn’t finish. After a reboot everything is working again. Strange.

Let’s see what will happen next.