Search This Blog

Tuesday, March 23, 2010

OSGi For Modularizing Large Projects

OSGi helps establish good practices in software development by effectively applying at a macro level these good OO practices:
  • hide implementation details (design by interface contract)
  • minimize dependencies (high cohesion, low coupling)
Declarative programming and in particular declarative services promote:
  • extensibility (e.g. wrapping a web server)
  • writing POJOs and using in a larger context
Keeping the data model and visual representation separate promotes:
  • not writing too much from scratch
  • maintaining the reusability of core logic
  • allowing different app versions per audience
  • grow or shrink app

Tuesday, March 9, 2010

Messaging Patterns Used In CORBA

  • Synchronous with Timeout Method Invocation (SMI) – the client is blocked until a response is received from the server or a timeout occurs (client might spawn a thread so main thread is not blocked)
  • Asynchronous Method Invocation (AMI) – the client is not blocked but receives a callback from the server
  • One-way Method Invocation (OMI) – like AMI except no callback is received

Friday, March 5, 2010

Presentation And Diagramming Links

Programmer Productivity Tips

  1. Use a modern IDE such as Eclipse.
  2. Content Assist (or Code Completion, tab completion, Intellisense, etc.)  Content assist provides you with a list of suggested completions for partially entered strings. In Eclipse type something in the editor window and then ctrl-space. (e.g in Eclipse: Preferences->Java->Editor->Content Assist->Advanced)
  3. Code Templates: For example, type sysout and then ctrl-space and it spits out System.out.println(); with the cursor in the right spot. Type "for" ctrl-space and get a for...loop, type "try" ctrl-space and get a try...catch block.  (Eclipse: Window->Preferences->Java->Editor->Templates) 
  4. Code Generation: Faster Java coding in Eclipse Galileo (IBM), Useful Eclipse Shortcuts (SO) , Eclipse Shortcuts (Vogella)
  5. Compiler Warnings: Using Eclipse Java Compiler Errors/Warnings – Improving your code quality, CheckStyle
  6. Syntax Highlighting
  7. Focus (i.e. turn off email, browser, im when possible)
  8. Google
  9. Dual Monitors
  10. Synergy lets you easily share a single mouse and keyboard between multiple computers with different operating systems
  11. Caffeine
  12. Debugger Java Debugging With Eclipse (Vogella)
  13. Sound isolating headphones
  14. Design Patterns
  15. XML Binding (no need to write DOM and SAX code any more)

Monday, February 15, 2010

Favorite Pragmatic Software Development Tips

From The Pragmatic Programmer: From Journeyman to MasterThe Pragmatic Programmer: From Journeyman to Master
See them all here.
  • DRY—Don’t Repeat Yourself
  • Always Use Source Code Control
  • Write Code That Writes Code
  • Design with Contracts
  • Refactor Early, Refactor Often
  • Abstractions Live Longer than Details
  • Don’t Use Manual Procedures
  • Test Early. Test Often. Test Automatically.
  • Use Exceptions for Exceptional Problems
  • Minimize Coupling Between Modules
  • Put Abstractions in Code, Details in Metadata
  • Design Using Services
  • Separate Views from Models
  • Don’t Program by Coincidence
  • Test Your Estimates
  • Design to Test
  • Find Bugs Once
  • Build Documentation In, Don’t Bolt It On

Sunday, February 14, 2010

First Code Smells, now Build Smells

Continuous Integration: Improving Software Quality and Reducing RiskRemove the smell from your build scripts
  • IDE-only builds
  • Copy-and-paste scripting
  • Long targets
  • Large build files
  • Failing to clean up
  • Hard-coded values
  • Builds that succeed when tests fail
  • Magic machines
  • A lack of style

Agile Modeling Best Practices

From Scott Ambler
  • Active Stakeholder Participation
  • Architecture Envisioning. At the beginning of an agile project you will need to do some initial, high-level architectural modeling to identify a viable technical strategy for your solution.
  • Document Late
  • Executable Specifications
  • Iteration Modeling
  • Just Barely Good Enough (JBGE) artifacts
  • Model a bit Ahead
  • Model Storming
  • Multiple Models
  • Prioritized Requirements
  • Requirements Envisioning
  • Single Source Information
  • Test-Driven Design (TDD)