Real World Software Architecture

Real World Software Architecture is dedicated to providing information and experiences from the field of Software Architecture.



Subscribe with RSS or ATOM Add to Google

Links

  • Home Page
  • Real World Software Process Engineering
  • Suggested Reading
  • .NET Dev and Arch Collection
  • SEI Essays on SA
  • Software Architecture
  • Bredemeyer
  • wwisa
  • Product Line Engineering
  • PLEES
  • Software Product Lines
  • MSDN Architecture Center
  • patterns & practices






Monday, April 29, 2013

The Java Tutorial: A Short Course on the Basics (5th Edition) Book Review

If you are interested in getting started with Java, or just object oriented programming, this is a great book to start with.

The book starts off with a high level overview of the Java platform and goes straight into an example of creating a hello world application. While creating the hello world application the authors take you on a tour of the NetBeans IDE.

It then covers the basics of 0bject-oriented programming and the Java programming language. The authors cover objects, classes, inheritance, interfaces, packages, variables, operators, expressions, statements, blocks, and control flow statements.

After the introduction chapter the chapters begin to go into detail about each of the topics that were introduced, and many more. I have listed the chapters below.

1. Getting Started
2. Object-Oriented Programming Concepts
3. Language Basics
4. Classes and Objects
5. Interfaces and Inheritance
6. Generics
7. Packages
8. Numbers and Strings
9. Exceptions
10. Basic I/O and NIO.2
11. Collections
12. Concurrency
13. Regular Expressions
14. The Platform Environment
15. Packaging Programs in JAR Files
16. Java Web Start
17. Applets
18. Doing More with Java Rich Internet Applications
19. Deployment in Depth

The coolest thing about this book is that it is available for free on Oracle's Java Tutorials web site. You can download the book by chapter in epub and mobi format, or the entire Java Tutorials web site. You can check out the entire book before you buy it. You also have the ability to search the book.

Personally, when I want to learn and not simply look something up, I need printed books. After spending 8-10 hours a day staring at a computer screen the last thing I want to do is read a book from a computer screen.

When you download the web site you get all the sample code that accompanies the chapters. The downloaded web site also includes trails and lessons are only available as web pages with the download or online. All the samples are available in .java and .class formats.

The book ends with an Appendix titled Preparing for Java Programming Language Certification. It contains outlines of the topics you need to know for three of the Oracle certification examinations, and points to the chapters you should read and study.

The author's writing style makes this book an easy cover to cover read, but it also makes a great reference.

All in all I highly recommend this book to those getting started with Java or anyone that wants to start learning what 0bject-oriented programming is all about.

The Java Tutorial: A Short Course on the Basics (5th Edition)

posted by tadanderson at 1:31 PM 0 comments

Friday, April 26, 2013

Secure Coding in C and C++ (2nd Edition) Book Review

This book is not only solid in the technical coverage it gives, it also gives a great overview of security concerns, history of how we got where we are, the types of threats and flaws that exist, who needs to be concerned, and what your role's responsibilities are in the security picture.

It is amazing to see the data summarized in one place and how disturbing the data is. The amount of money lost to security issues is amazing. After reading the first chapter you can't help but to want to read the rest of the book.

This second version of this book is not a small update. The first edition was 341 pages and the second edition is 569 pages. That is 228 more pages of new information added to existing chapters and a whole new chapter 7 on concurrency. I have listed the chapters below.

Chapter 1. Running with Scissors
Chapter 2. Strings
Chapter 3. Pointer Subterfuge
Chapter 4. Dynamic Memory Management
Chapter 5. Integer Security
Chapter 6. Formatted Output
Chapter 7. Concurrency
Chapter 8. File I/O
Chapter 9. Recommended Practices

There is a lot of new material added on integer security, strings, , and dynamic memory management. Every chapter goes into great detail.

The book is packed full of a ton of code samples, summary tables, and diagrams that really help to clarify the topic at hand.

The book ends with an awesome chapter of recommended practices. The author covers the Security Development Lifecycle, Security Training, Requirements, Design, Implementation, and Verification (analysis, code audits, and testing). The chapter includes recommendations on secure coding standards, threat modeling, security quality requirements engineering, and much more.

The technical advice is thorough and explained in a way that makes for a very interesting read. In other words, the author has a great style of writing, which really helps with a topic like this. It is actually hard to put down. The threats the author uncovers just keep coming.

This is must read for C++ and C developers, but I would also recommend it for any programmer or architect of any language.

Secure Coding in C and C++ (2nd Edition)

posted by tadanderson at 7:23 AM 0 comments

Tuesday, April 16, 2013

Test-Driven Database Development: Unlocking Agility Book Review

I was a little wary of this book when I first saw it. No real specific red flag came up, just the general thought of yet another TDD book that magically unlocks agility.

The author caught me by surprise as I started to read the book. He starts off with the way we need to change our view of databases from that of a particular instance into one of classes of databases. This line of thought is what enables TDD in the database world.

The third chapter he covers the differences and relationship between test-first programming and test-driven development. He gets you thinking in the right frame of mind about TDD.

The book continues with details of the practices and patterns you need to know to succeed at TDD with databases. I have listed the chapters below.

Chapter 1. Why, Who, and What
Chapter 2. Establishing a Class of Databases
Chapter 3. A Little TDD
Chapter 4. Safely Changing Design
Chapter 5. Enforcing Interface
Chapter 6. Defining Behaviors
Chapter 7. Building for Maintainability
Chapter 8. Error and Remediation
Chapter 9. Design
Chapter 10. Mocking
Chapter 11. Refactoring
Chapter 12. Legacy Databases
Chapter 13. The Façade Pattern
Chapter 14. Variations
Chapter 15. Other Applications

Through the process of showing us how to change our view of databases, the author introduces a way of building and deploying databases using XML scripts. He use XML to define the changes to the database, and a library he wrote to handle the parsing the XML and update the database. That technique is used throughout the book.

I mention that because it may be easy to miss when the author says "I’ll leave the implementation details to you, but I typically express the database design in terms of XML documents and store the already-applied versions in a table." I want to point that out because as you start going through the code it may get a bit overwhelming when you see how much work the author puts into the supporting library and XML documents. His tools include using NUnit also. There is an NUnit plug-in for Visual Studio 2012 available which makes running the tests and debugging while testing a lot easier.

The thing to keep in mind is that the author is introducing TDDD (Test Driven Database Design) practices and patterns and he is using the implementation method he has used for years. I accomplish the same thing as the author but I use Visual Studio's Unit Test Project template for tests, the SQL Server Database Project template for database scripts, and TFS for versioning, branching, and merging the tests and database scripts. The point is, keep reading because the author includes great advice throughout the entire book.

The code samples are very well organized and usable. After changing the connection strings and using NuGet to download Moq and NUnit, everything ran as expected. The author uses C# to write the tests and parse the XML he uses to define the database structure and changes.

The author's writing style makes the book an entertaining and enjoyable read.

Overall I highly recommend this book to developers, database administrators, enterprise architects, and software architects.

Test-Driven Database Development: Unlocking Agility

posted by tadanderson at 5:58 PM 0 comments

Tuesday, April 09, 2013

Database Design for Mere Mortals: A Hands-On Guide to Relational Database Design (3rd Ed) Book Review

This book is THE book for the database beginner. It thoroughly covers design principles and process, and it covers them in depth.

The book is broken into four parts, Part I: Relational Database Design, Part II: The Design Process, Part III: Other Database Design Issues, and Part IV: Appendixes.

Part I starts with a chapter that gives the history of databases and the path we took to get where we are. It continues with a chapter that covers the reason to have a good design methodology and what the goal of the methodology should be.

Chapter three is really cool for those just getting into database design. It introduces some of the most common terminology used in the database design process. It is not just a glossary (which this book also has after the appendixes), it goes much further than just a definition and includes diagrams to help with the explanations.

Part II covers the database design process. Topics the author covers include table structures, field specifications, assigning primary keys, table relationships, views, and levels of data integrity.

Part III covers bad design and when bending the rules of proper design are ok.

The appendices (Part IV) include a summary of design guidelines, example form templates, diagram symbols, a check list of design guidelines, and an activity diagram (flowchart) of the database design process.

I have listed each part and the chapters they contain below.

Part I. Relational Database Design
1. The Relational Database
2. Design Objectives
3. Terminology

Part II. The Design Process
4. Conceptual Overview
5. Starting the Process
6. Analyzing the Current Database
7. Establishing Table Structures
8. Keys
9. Field Specifications
10. Table Relationships
11. Business Rules
12. Views
13. Reviewing Data Integrity

Part III. Other Database Design Issues
14. Bad Design—What Not to Do
15. Bending or Breaking the Rules

Part IV. Appendixes
A. Answers to Review Questions
B. Diagram of the Database Design Process
C. Design Guidelines
D. Documentation Forms
E. Database Design Diagram Symbols
F. Sample Designs
G. On Normalization
H. Recommended Reading

One thing this book does not include is coverage of the structured query language bracket (SQL). This book is purely about designing the database not about what to do with the data once it is in the database. That's not a downfall of the book, it actually makes it better. The author is able to focus on design principles and drill much further into them by excluding teaching SQL.

Overall I found the author's writing made reading the book a pleasant experience. I cannot say that for all database books I have read. Another reason it is good is that the author goes into extreme detail on each topic he covers.

The author also has made the forms he uses in the book available in Word and PDF format for download on the publisher's web site

All in all I highly recommend this book to database beginners. It will teach you how to do things the right way from the get-go.

I also recommend it for the non-DBA developer who is tasked with creating databases on their projects because the project can't afford a real DBA. There are a lot of those out there and I have seen them be the cause of many painful projects that have to manipulate good code into bad code to compensate for poor database design.

Database Design for Mere Mortals: A Hands-On Guide to Relational Database Design (3rd Edition)

posted by tadanderson at 5:39 PM 0 comments

Saturday, April 06, 2013

Implementing Domain-Driven Design Book Review

Agile is not easy and implementing Domain-Driven Design (DDD) is not easy. I think my favorite part of the book is that the author realizes that, and also has a realistic perspective on what it takes to successfully use agile processes and DDD.

The book starts out with a really nice overview of DDD. By the time you are done the first chapter you have a pretty good high level picture of what DDD is all about. One topic he really drives home is Ubiquitous Language.

Ubiquitous Language is a shared team language that defines a certain domain. When you are reading about Ubiquitous Language it may seem like something that just happens on its own. It isn't. An explicit domain language should be defined, it should not just be allowed to implicitly come about. This same concept has been around for years in Water Fall, Unified Process, RUP, and other processes. It has always been a very important part of the software development process, so don't discount it.

Chapter 1 also does a great job of providing tips on how to show the business value of using DDD. The author has a clear understanding that without the support of the business you aren't going to get very far with your project, and in order to get them onboard you need to show them what they will gain by supporting DDD.

The remaining chapters dig into the details of DDD. I have listed the chapters below. Their titles are pretty self-explanatory.

Chapter 1. Getting Started with DDD
Chapter 2. Domains, Subdomains, and Bounded Contexts
Chapter 3. Context Maps
Chapter 4. Architecture
Chapter 5. Entities
Chapter 6. Value Objects
Chapter 7. Services
Chapter 8. Domain Events
Chapter 9. Modules
Chapter 10. Aggregates
Chapter 11. Factories
Chapter 12. Repositories
Chapter 13. Integrating Bounded Contexts
Chapter 14. Application
Appendix A. Aggregates and Event Sourcing: A+ES

I have seen a lot of teams that could not build software with UP or RUP adopt Scrum in hopes that changing the process will make a difference. It never does. There are a variety of reasons including not doing any architecture, not having experienced developers with the right skill sets, not having the right business users involved, not having the requirements elicitation skills needed, and the list can go on and on. The author clearly understands Scrum is not a silver bullet. I mention this because DDD done correctly can give agile processes a much better chance at success, but you must have the skills on the team in order pull it off.

I was really glad to see the author included a chapter on architecture. The author does a great job of covering a ton of architectural styles and patterns. Patterns, styles, and topic found in the Architecture chapter include Layers Architecture with the Dependency Inversion Principle, Hexagonal Architecture, SOA environment, REST, Data Fabric, Grid-Based Distributed Cache, and CQRS.

Every chapter is an in depth look at the topic of the given chapter. I did not leave any of the chapters feeling like I missed something. I have read both Domain-Driven Design: Tackling Complexity in the Heart of Software and Patterns of Enterprise Application Architecture, and I had both handy for looking up references to them. It is not necessary to read them first, but it did help that I had.

I am not going to say using DDD is easy, but I will say this book can definitely get you to where you can successfully use it. The author's writing style is really good and he is good at making the book entertaining. I will however say this, be prepared to read the entire book if you want to get to that point of successfully using DDD. There is a lot to learn, but it is worth it.

I highly recommend this book to every software architect and developer. Even if you don't go all out DDD there is a ton of great advice and wisdom found in this book that will help you improve your skills.

Implementing Domain-Driven Design

posted by tadanderson at 6:56 AM 0 comments

Wednesday, April 03, 2013

Tool for Reverse engineering SharePoint 2007/2010/2013 to HTML, Text, and DGML Sitemaps

I have upgraded the tool I created for reverse engineering SharePoint 2007 and 2010 into HTML, Text, and DGML Sitemaps to work with SharePoint 2013. The tool is now versioned at 1.5.  You have to copy the appropriate folder instead of just the file (Version 1.0 was only one file) because the tool is dependent on the WPF Toolkit. The folder includes the WPF Toolkit DLL.

There are no new features with this version.  It is just an upgrade to work with SharePoint 2013

Current features include generating DGML diagrams which allow Root Sites to be put into groups, reports include information on Services running on the Server and the Farm, Database Sizes, user and group account information, and application pool information.

You the option to list the users on the sites, and flag sites that have not been updated for a while to show in RED. The user's emails are listed as well as their administration status.

The DGML tool that creates diagrams for Visual Studio 2010 now ties all the site collects to the web application at the top level, or gives you the option of displaying the top level sites as groups. Sites older than the day selected will be shown in RED. All the site nodes in the DGML are clickable.

The reason for the tool is that I needed to reverse engineer a SharePoint 2007 Farm to prepare for an upgrade to 2010.

I initially used the stsadm tool and PowerShell commands, but they were arduous to use. I looked around for open source options but could not find one. So I built this one. The SharePoint Diagram Tool reverse engineers SharePoint 2007, 2010, and 2013 SharePoint sites into HTML, text, and DGML for displaying in a diagram.

Just copy the appropriate folders to the server and run it as administrator.

You need admin rights on the box and to the content databases. If you generate files, they will be in the same folder as the exe. You also have the option of just copying the results out of the results textbox.

Note- These are not ASP.NET Site Maps. These are for analysis not navigation.

You can turn on the Report Errors to record any exceptions that occur. This can be helpful in troubleshooting permissions. Below are some screen shots:

Feature Panel

Click here for a larger image.


DGML No Groups

Click here for a larger image.


DGML with Top Sites in Groups

Click here for a larger image.


HTML Output

Click here for a larger image.


Text Output

Click here for a larger image.


I have uploaded the tools here.

posted by tadanderson at 5:58 PM 1 comments

Previous Posts

  • DevOps: A Software Architect's Perspective Book Re...
  • Scaled Agile Framework (SAFe) LiveLessons Video Se...
  • Bulletproof Android: Practical Advice for Building...
  • Swift for Programmers Book Review
  • Security in Computing (5th Edition) Book Review
  • Swift in 24 Hours, Sams Teach Yourself Book Review
  • Sparx Systems Releases Enterprise Architect 12
  • Learning Swift Programming Book Review
  • Android Security Internals: An In-Depth Guide to A...
  • Adaptive Code via C#: Agile coding with design pat...



Archives

  • December 2005
  • January 2006
  • February 2006
  • March 2006
  • April 2006
  • June 2006
  • August 2006
  • October 2006
  • November 2006
  • December 2006
  • January 2007
  • February 2007
  • March 2007
  • April 2007
  • May 2007
  • June 2007
  • July 2007
  • August 2007
  • September 2007
  • October 2007
  • November 2007
  • December 2007
  • January 2008
  • February 2008
  • March 2008
  • April 2008
  • May 2008
  • June 2008
  • July 2008
  • August 2008
  • September 2008
  • October 2008
  • December 2008
  • January 2009
  • February 2009
  • March 2009
  • April 2009
  • May 2009
  • June 2009
  • July 2009
  • August 2009
  • September 2009
  • October 2009
  • November 2009
  • December 2009
  • January 2010
  • February 2010
  • March 2010
  • April 2010
  • May 2010
  • June 2010
  • August 2010
  • September 2010
  • October 2010
  • November 2010
  • December 2010
  • January 2011
  • February 2011
  • March 2011
  • April 2011
  • May 2011
  • June 2011
  • July 2011
  • August 2011
  • September 2011
  • October 2011
  • November 2011
  • December 2011
  • January 2012
  • February 2012
  • March 2012
  • April 2012
  • May 2012
  • June 2012
  • July 2012
  • August 2012
  • September 2012
  • October 2012
  • November 2012
  • December 2012
  • January 2013
  • February 2013
  • March 2013
  • April 2013
  • May 2013
  • June 2013
  • July 2013
  • August 2013
  • September 2013
  • October 2013
  • November 2013
  • December 2013
  • January 2014
  • February 2014
  • March 2014
  • April 2014
  • May 2014
  • June 2014
  • July 2014
  • August 2014
  • September 2014
  • October 2014
  • December 2014
  • February 2015
  • March 2015
  • April 2015
  • June 2015
  • July 2015
  • September 2015

Powered by Blogger