Showing posts with label tech topics. Show all posts
Showing posts with label tech topics. Show all posts

October 8, 2011

TOGAF 9 - Enterprise Architecture Training - Day 5

Finally TOGAF™ 9 training got completed yesterday - 5 days - information overload :) .

Day 5 covered the remaining modules.

Module 24 - Phase E - Opportunities and Solutions
Module 25 - Phase F - Migration Planning
Module 26 - Phase G - Implementation Goverance
Module 27 - Phase H - Architecture Change Management
(That completest the ADM cycle..but there were few other modules)
Module 28 - ADM Architecture Requirement Management
Module 29 - Architecture Partitioning (Very interesting chapter)
Module 30 - Adapting the ADM : Iteration and Levels
Module 31 - Adapting the ADM : Security (Another interesting one)
Module 32 - Adapting the ADM : SOA
Module 33 - Architecture Maturity Models 
Module 34 - Architecture Skills Framework

It is highly un-likely anybody can master TOGAF™ 9 and it is not expected also. It's a team effort. Wisdom comes over time, age and experience.


Interesting stuff I found:
National Informatics Centre (NIC) is a premiere S & T institution of the Government of India uses TOGAF for its EA. Check the outline of the case study here.
NASCIO security framework  
First Order Logic to specify security kind of requirements 

TOGAF™ 9 certification coming up next ..keeping my fingers crossed..

Until next time..

October 6, 2011

TOGAF 9 - Enterprise Architecture Training - Day 4

It's cruising now..TOGAF 9 is happening and something is getting into my head.
More modules covered and lots of new stuff I discovered today..(the more you know, you realize that the more you don't know)

Module 16 - Phase B - Business Architecture
Module 16A - Phase B - Business Architecture - Catalogs, Matrices and Diagrams
Module 17 - Phase C - Information Systems Architectures - Overview
Module 18 - Phase C - Data Architecture
Module 18A - Phase C - Data Architecture - Catalogs, Matrices and Diagrams
Module 19 - Integrated Infrastructure Reference Model
Module 20 - Phase C - Application Architecture
Module 20A - Phase C - Application Architecture - Catalogs, Matrices and Diagrams
Module 21 - Foundation Architecture
Module 22 - Phase D - Technology Architecture
Module 22A - Phase D - Technology Architecture - Catalogs, Matrices and Diagrams
Module 23 - Migration Planning Techniques

Have learnt some new diagrams, will write later about these.
Until next time..

October 5, 2011

TOGAF 9 - Enterprise Architecture Training - Day 3

It is getting better..keeping in mind last two days, today it was easy to sit thru for 8 long hours for the Day 3 (you kind of get used to this after two days of practice :) )

Some new stuff which I found interesting today.
  1. Stakeholder Analysis - analyzing the attitudes of stakeholders and the result of this is a Stakeholder Map. Read more here and here.
  2. COBIT - A IT Governance framework
  3. ATAM - Architecture Tradeoff Analysis Method (ATAM) is a risk-mitigation process used early in the software development life cycle.
  4. Value Chain Diagram- Management mumbo-jumbo :) 
The modules covered today:
Module 9 - Architecture Governance
Module 10 - Business Scenarios
Module 11 - Stakeholder Management 
Module 12 - Views and Viewpoints (something similar like 4+1 views in RUP but more exhaustive )
Module 13 - Building Blocks
Module 14 - Architecture Implementation Techniques
Module 15 - Phase A - Architecture Vision

Tommorow is another early start..
Until next time..

October 4, 2011

TOGAF 9 - Enterprise Architecture Training - Day 2

This is how I'm feeling after today's session...


The instructor covered 6 modules - 185 MS Powerpoint slides..tooo much

Module - Introduction to the Architecture Development Method
Module - The Enterprise Continuum & Tools
Module - Architecture Repository
Module - Architecture Content Framework
Module - TOGAF Content Metamodel
Module - Preliminary Phase

Some jazzy stuff that I discovered today - TOGAF is an "Enterprise Framework" - which is also a Meta-Architecture framework i.e. "Architecture" of "Architectures"- integration framework that sits above individual architectures..simply too much :)
Key takeaways: 
Helps to think the big picture - Foundation Architecture, Insdustry standard architectures etc etc
Lots of questions asked today (including myself) were from a Solution Architecture background. In EA the focus is much bigger and we have un-learn and get rid of this "baggage".
Four primary iterations - Architecture Context Iteration, Architecture Definition Iteration, Transition Planning Iteration, Architecture Governance Iteration - which lead to EA
much ..much more..
.

until next time..

October 3, 2011

TOGAF 9 - Enterprise Architecture Training - Day 1

My stint with TOGAF™ 9 (by Open Group) architecture started today. I'm attending a 5 Day full time classroom training course on TOGAF™ 9. Day 1 got over today. It was little taxing to sit thru for almost 9 hours on first day. I don't blame the instructor - he has lots to cover - moreover he made it really interesting answering many questions - even vague and stupid questions from audience. It is just that am lost touch with these full day trainings'. He encouraged lots of participation and quoted good examples from his experience and learning.

TOGAF™ defines a methodology as well as a framework for Enterprise Architecture. It is interesting to know that the first version of TOGAF™ came out in 1995 and was based on the US Department of Defense Technical Architecture Framework for Information Management (TAFIM). It has gone thru multiple revisions and recently in 2009 - TOGAF™ 9 version was released. Check out the Wikipedia link - gives a good brief overview.

Today the focus was more on Introduction, Why Enterprise Architecture? Why TOGAF™? and good introduction on TOGAF™ ADM framework and its phases (below image). TOGAF™ ADM is the heart and soul of TOGAF™ 9 methodology.

Until next time.. i.e. tomm

September 28, 2011

Software Architecture Review

Software Architecture Review  - in my opinion happens at two levels

1.  Macro Level 
2.  Micro Level 

To review an existing system for any recommendations or trouble shooting - is not a one man job especially for complex Enterprise systems. This is simply not feasible. This is a team effort -at least a team of 3 to 4 - you need strong developers, architects, designers, database architects, domain architects etc.
But for simple to medium complex applications - one person can do the review - provided he networks and seeks help in areas which he is not hands-on.

Coming to the review part, first and foremost - the reviewer (or the review team) should understand from the stakeholders: 
Why this review is being conducted? 
What are the existing concerns?
What measures have they taken already to address the issues? What have they learned till now?
Or is it a pro-active measure by the management?

These questions would set the right direction for the reviewer. He should exercise his personal judgment and be unbiased.

At Macro Level - the focus should be on the 
At the Micro level - it gets interesting because at the Macro level things can be misleading - the code would give the true picture. The reviewer should start digging into the code. 
At the end of this exercise the review team should produce a diagnostic report highlighting recommendations and best practices.

    September 26, 2011

    Installed Scala...the journey begins..

    Scala has caught my interest lately. It has been due on my learning list.
    Also - Play Framework (which I'm currently using) has got awesome Scala support (I see lot of answers and questions of Play and Scala on the Google groups).
    I've read the primer..looks very interesting. Now to do code something concrete.

    To download Scala (latest as of today) and install on Mac (Snow Leopard 10.8) is quite easy:
    curl -O http://www.scala-lang.org/downloads/distrib/files/scala-2.9.1.final-installer.jar
    
    After it is downloaded, execute the below command
    java -jar scala-2.9.1.final-installer.jar
    
    I installed scala at this location
    ~/scala
    
    Add the executable to the path.
    vim .profile
    # append or add to the PATH variable ~/scala/bin
    export PATH=$PATH:~/scala/bin
    
    (or to the bash profile i.e. vim .bash_profile)
    Open a terminal and type scala and you should see the below output
    Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_26).
    Type in expressions to have them evaluated.
    Type :help for more information.
    
    scala> 
    
    Try the below example:
    scala> val numbers = Map(1 -> "one", 2 -> "two")
    numbers: scala.collection.immutable.Map[Int,java.lang.String] = Map(1 -> one, 2 -> two)
    
    scala> numbers.get(2)
    res0: Option[java.lang.String] = Some(two)
    
    scala> numbers.get(3)
    res1: Option[java.lang.String] = None
    
    To quit the interpreter, just type quit.
    To begin -  here is the awesome link on Learning Scala for beginners.
    I also installed Scala Eclipse IDE - a plugin for Scala development on Eclipse.

    Until next time...

    September 21, 2011

    Play Framework - Excel report example

    It's breeze to create excel reports using Play framework. Let me run thru an example.
    Let's create a sample project - excel-example.
    $ play new excel-example
    
    Then eclipsify and import into eclipse.
    $ play eclipsify excel-example
    
    Edit the dependencies.yml and include the excel module
    # Application dependencies
    require:
        - play 1.2.3
        - play -> excel 1.2.3
    
    Run the play dependencies command. Play connects to the web and downloads the excel-module into the modules directory
    $ play deps excel-example
    ~        _            _ 
    ~  _ __ | | __ _ _  _| |
    ~ | '_ \| |/ _' | || |_|
    ~ |  __/|_|\____|\__ (_)
    ~ |_|            |__/   
    ~
    ~ play! 1.2.3, http://www.playframework.org
    ~
    ~ Resolving dependencies using /Users/play/excel-example/conf/dependencies.yml,
    ~
    ~  play->excel 1.2.3 (from playLocalModules)
    ~
    ~ Installing resolved dependencies,
    ~
    ~  modules/excel-1.2.3 -> /Users/play/frameworks/play-1.2.3/modules/excel-1.2.3
    ~
    ~ Done!
    ~
    
    Plays excel module uses jxls internally which uses Apache POI library - the one and only one library in Java world for excel manipulation. All the dependencies of jxls are bundled with excel-module and dependencies managed.
    However there is one additional library that would be required to ouptut xslx excel formats - which is the newer format depending on Office Open XML documents. This is because xslx is basically a zip format.
    Download the ooxml-schemas-1.1.jar from the maven repository and put it in the lib directory of the excel-example project.
    Then eclipsify again so that eclispe classpath reflects the new dependencies.
    $ play eclipsify excel-example
    
    Refresh the Project in eclipse.
    Start the play server.
    $ play run excel-example
    ~        _            _ 
    ~  _ __ | | __ _ _  _| |
    ~ | '_ \| |/ _' | || |_|
    ~ |  __/|_|\____|\__ (_)
    ~ |_|            |__/   
    ~
    ~ play! 1.2.3, http://www.playframework.org
    ~
    ~ Ctrl+C to stop
    ~ 
    JPDA port 8000 is already used. Will try to use any free port for debugging
    Listening for transport dt_socket at address: 50675
    00:54:21,975 INFO  ~ Starting /Users/play/excel-example
    00:54:21,979 INFO  ~ Module excel is available (/Users/play/frameworks/play-1.2.3/modules/excel-1.2.3)
    00:54:22,603 WARN  ~ You're running Play! in DEV mode
    00:54:22,769 INFO  ~ Listening for HTTP on port 9000 (Waiting a first request to start) ...
    
    check at localhost:9000, you should see a welcome page (I'm just using command line to do a quick check).
    $ curl http://localhost:9000
    
    The next step is to Create Sample Excel template file
    I have created a simple xslx file which shows displays the list of customers and their phone numbers. You can get the file here. Below is an image for easy reference. Using jxls is a great advantage. Your excel template can contain all required formatting, formulas, macros etc which will be preserved intact. You need to use specific notation (common these days in groovy, ruby language) to indicate placement of data. Refer the below image.

    Save this file under under
    excel-example/app/views/Application/customerphonelist.xlsx
    
    Lets edit the default index.html which is under excel-example/app/views/Application/
    The home page contains just one link to download the excel report as shown below
    #{extends 'main.html' /}
    #{set title:'Home' /}
    <a href="@{customerphonelist()}"/> Download Customer Phone Numbers Excel Report </a>

    Edit the controller Application.java and add a method - customerphonelist() which outputs the excel file as shown below:
    package controllers;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import org.apache.commons.lang.RandomStringUtils;
    import models.Customer;
    import play.Logger;
    import play.modules.excel.RenderExcel;
    import play.mvc.Controller;
    import play.mvc.With;
    
    @With(ExcelControllerHelper.class)
    public class Application extends Controller {
        public static void index() {
            render();
        }
        public static void customerphonelist(){
         Logger.info("Generating Customer Phone List Excel report ");
         request.format = "xlsx";
            Date date = new Date();
            String user = "Bob";
            List customers = new ArrayList();
            for (int i = 0 ;i < 10; i++){
             customers.add(new Customer("Mr", RandomStringUtils.randomAlphabetic(15), RandomStringUtils.randomNumeric(10)));
            } 
         renderArgs.put("date", date);
         renderArgs.put("user", user);
         renderArgs.put("customers", customers);
         renderArgs.put(RenderExcel.RA_ASYNC, true);
         renderArgs.put(RenderExcel.RA_FILENAME, "customer_list_report.xlsx");
            render();
            Logger.info("Completed Customer Phone List Excel report ");
        }
    } 
    
    Above at line no 11 -
    @With(ExcelControllerHelper.class) 
    annotation is used. ExcelControllerHelper class is part of play excel module. @With is an interceptor. This interceptor loads the excel template.
    Line No 22 to 25 creates a Customer model class and populates it with some random data.
    Line No 26 to 30 puts the objects in to the renderArgs map. These objects would be available as part of the actual excel file which can be used to render the dynamic content.
    Line No 29 is of special interest which sets the ASYNC to true. This is a very powerful feature of Play framework. This helps in transparent asynchronous rendering of the excel. You don't have to deal with Future, Promise, await, request.new etc and you get the power for nearly free. The existing HTTP request is suspended and then when the excel report generation is done, this thread is resumed and the response sent back to the client. Think about the fact that a large Excel table rendering might take as long as 500ms and blocking request handling thread for half second is NOT acceptable in a high performance web server like play which use only limited thread (N+1) to handle web requests. Read more about this here.
    Last step :), Open
    http://localhost:9000
    and click on the Download Customer Phone Numbers Excel Report link. A excel report should be generated and should look some thing like below.

    That completes the example.

    September 19, 2011

    Let the Force be with you --Yoda :)

    Created a Salesforce developer account. Completed a simple cookbook example. No coding yet,  most of it from the developer portal, using mouse and clicking to create apps and entering label values.

    Everything is controlled on the platform - database tables (called as Custom Objects in Salesforce language),  form creation etc. Prima facie the tool looks like it targets Business users to create basic enterprise apps.
    All the development happens on the Web page (no IDE required). Also there is an Eclipse plugin available to do the development.

    The programming language is Apex (predominantly Java syntax) but the code gets compiled to a meta-data which gets interpreted by Apex runtime.

    Apps created on SalesForce are completely data-driven and tightly integrated with Data. You can create apps and share with others as well as use any of the available apps on the platform (provided you have rights).  Common enterprise services like user management, file upload, reports, search etc are available and usable without any customization.
    Its easy to get started and the developer account is free, register here.
    The example which I tried is Warehouse example.
    Some basics and fundamentals of the platform are here, which I have started going thru it.
    I have just spent 1 hr and it was fairly easy to try out hands on the Force platform. 
    I have barely scratched the surface ...will keep exploring it.

    September 12, 2011

    Apache2 + Tomcat6 on Amazon Linux image

    From couple of days, I was having issues configuring Apache 2 to re-direct requests to Tomcat 6 on Ubuntu Linux image. Finally resolved the issue today.
    Amazon Linux image which I was configuring is linux-image-2.6.32-316-ec2
    Basic tutorial of Apache2 HTTPD is here.
    Below are the basic steps (assuming Tomcat 6 and Apache 2 are already installed and configured):
    apt-get install libapache2-mod-jk
    
    sudo vim /etc/apache2/workers.properties
    
    # Define 1 real worker using ajp13
    worker.list=worker1
    # Set properties for worker1 (ajp13)
    worker.worker1.type=ajp13
    worker.worker1.host=localhost
    worker.worker1.port=8009
    
    sudo vim /etc/apache2/apache2.conf
    #Add the below content at the end of the file
    LoadModule    jk_module  /usr/lib/apache2/modules/mod_jk.so
    JkWorkersFile /etc/apache2/workers.properties
    JkShmFile     /var/log/apache2/mod_jk.shm
    JkLogFile     /var/log/apache2/mod_jk.log
    JkLogLevel    info
    JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
    
    sudo vim /etc/apache2/sites-enabled/000-default
    #Replace "DocumentRoot /var/www" 
    #with the below 
    JkMount / worker1
    JkMount /* worker1
    
    sudo /etc/init.d/apache2 restart
    
    
    Note: In my case Connector port="8009" was already enabled in /etc/tomcat6/server.xml.
    References : here

    November 28, 2010

    My take on trends to watch out for...

    Couple of days back one of my friend asked me what are the 3 things important according to me for upcoming year 2011. What he meant was - What are the 3 things that I would focus next year? That got me into thinking.

    This blog post is an attempt in that direction  - which are the trends that I think would make a difference for any software developer to keep up with the fast pace of change.
    (Note: Not in any particular order, all are important)

    1. No SQL.
      • Traditional DBs are good but definitely not "one size fits all" solution. We have to understand  these too have some limitations.We have to stop thinking in rows and columns and start thinking in Documents. Get familiar with some of these concepts, find out what makes these (Mongo DB, Redis etc) successful, what kind of problems can be solved by these. This technology is going to thrive.
    2. Scripting language
      • Enough of Java, C++, C#. Enough of OOPS. Its time to open a notepad and do some quick scripting to get things done. Too much dependency on IDEs have made many of us dumb. Its time to brush-up (or learn) scripting language. Simplicity matters. Be it Ruby, Groovy, Perl, PHP. 
    3. Cloud computing
      • Get familiar with Cloud computing architecture. This technology is already 5 years old. Amazon launched its services in 2006. Computing is cheap these days and just a click away. There would be a time in future when everything would be on cloud. This technology would grow by leaps and bounds
    4. Git / Mercurial (Modern Version Control Systems)
      • Speed is the mantra of this age. Gone are the days of client-server versioning system. In this era of opensource and distributed teams, distributed version controls make life of the developers easy. Every developer should be aware of installing and using these distributed configuration management systems.
    5. Web 3.0 (HTML 5)
      • A month back I attended one day conference on HTML 5 conference in NYC. The takeaway from the conference is - HTML 5 is inevitable. It has been already a decade since HTML standards got updated. The big guns (Google, Apple, Microsoft etc) are all supporting it. HTML 5, CSS3 will be the future of the web. Features like Offline storage, drag drop, geo location, canvas etc will make developing "desktop caliber" web apps a breeze. Developers, Architects ignoring this will be left behind.
    6. Functional language
      • History repeats. Computing started with Functional language (Lisp, Scheme etc), moved to procedural (C, Pascal etc) to object oriented (C++, Java. C#) and again back to Functional languages(F#, Clojure, Erlang, Haskell etc). The job trends already indicate a huge demand for Clojure, F# etc. Hardware has become cheap, grid computing has been norm and some real world problems can be solved insanely easy with these functional languages. Its all about "Share Nothing Architecture". No concurrency issues. Its high time for the developers to start thinking differently and learn (or re-learn) the concepts of functional programming
    7. Data visualization
      • At least two billion tweets are being posted per quarter (Source wikipedia). Wealth of information is available on twitter and all the data is public. Everybody would be interested in visualizing this  data in some form (graphs, charts, trees etc ) to make sense of it.  Its too much information out there. Barack Obama knew this and used this technique to do a wonderful campaign for his elections. This trend would keep growing as more data gets collected on the Internet.
    8. Mobile / Tablet platform
      • iPad has been rated as one of the best devices to consume information. Consumers, executives, enterprise folks - all would have one or the other form of tablet devices in the near future. Its the new trend and a growing trend. Analysts call it "arm platform". Architects, Developers should first think of smart phones, then tablets and finally the notebook - when architecting or designing new enterprise or e commerce applications. 
    9. Agile 
    10.  
      This should take care of your learning appetitie for at-least couple of years :). 
      Please share your list ...

      October 8, 2010

      Top 10 qualities of an Architect

      1. Act as an interface between Business & IT
      2. Identify risks (project, technical , business)
      3. Should not be stereotyped (Keep aside your experience, explore & look for possible alternatives)
      4. Keep upto date of latest technology trends – especially in terms of limitations
      5. Excellent presentation / articulation skills
      6. Master (at-least) one Programming language (OO / Functional)
      7. Develop technical intuition  (Usually comes with experience. Read a lot)
      8. Be Passionate. And Don't be too clever.
      9. Take responsibility of your decisions.
      10. Write Good code. If you design it, you should be able to code it.

      September 20, 2010

      Frameworks frameworks...too many

      Check this out ...one more new framework...Nevertheless nice comparison of different new and old frameworks. Below is the presentation




      Will do a poc soon and share my findings of http://itsnat.sourceforge.net/

      July 28, 2010

      Are we going back? (Client Server == AJAX )

      One of the fundamental rule in designing software systems is always to divorce presentation logic, business logic and data access logic,
      • so that each tier can vary withstand modifications of other tiers
      • so that different teams can focus on separate layer and specialize in that
      • so that building complex systems can be easier etc etc

      Many books have been written emphasizing the advantages of this pattern.
      Coupling any of these layers would take us back to ancient Single tier or Client Server architectures.

      Why am I telling all this?

      One of the projects which I'm currently working on is a Web 2.0 application. This app helps users to do financial analysis by pulling large amounts of data  from the database and plotting charts. And there are no page refreshes and every request is a XHR request (nice :) ).
      jQuery is the Ajax framework & jQPlot is the charting framework.

      One of the interesting side effects that I'm observing building this Ajax Web 2.0 app is more and more "business logic" is getting into the front end javascript files(and btw the other side effect is - Ajax apps are not search engine friendly - not "crawl-able").

      What could this mean:
      • sooner or later javascripts files grow larger and soon will end up in an un-manageable mess
      • anything running on the browser is kind of "open source" available to entire world - as these files get downloaded on the browser cache. Anybody with little effort can look at the business logic
      • bad user experience because of browser freeze - This is basically a counter effect. The primary reason why somebody would take ajax approach is to give a better user experience i.e. if the code runs in the browser then it it faster. But these days, an average user will have min 6 to 7 browser windows open (plus mail client (lotus or outlook), some office documents, pdf readers , IDEs etc) and if the browser starts taking your laptops cpu cycles looping some java-script code and rendering and re-drawing html --then a browser freeze is guaranteed (HTML5 promises to solve this)
      Its kind of going backwards in time where all the presentation logic, business logic is getting mixed.
      The browser for Ajax apps are kind of acting as a thick client, downloading data from the server (usually as JSON content) and manipulating most of it on the client side. The app server is just acting as a content provider.


      Why this could be happening?

      One word. Performance. Users are impatient and response > 3 secs is not acceptable.
      The primary reason the business logic ends up on the client side is to limit the number of requests to the web server.
      Network calls are very expensive (one to the web server and another from web server to the database server to get the actual content). So naturally developers would take easy way out, bypass these network calls, get chunks of data on the browser and manipulate it.

      How to avoid this ?
      • Avoid putting business logic putting on the client side
      • Use java script wisely to manipulate the DOM
      • Use good server side caching solution
      • Tune your SQL queries
      • Design a good UI
      • Anticipate user clicks, fire the request at background and have the data cached on the server side
      • Keep clearing the server side cache
      just my thoughts...

      June 15, 2010

      Back to Square one - HTML5

      Wow! That's what I uttered when I watched one of the videos on HTML5 on Google I/O 2010.

      I started my career coding HTML 4.0 way back in 2000. The web was hot at that time (btw it has become hotter now :)). HTML seemed easy. You write tags and see the changes, no wait time,no fun ;) .
      Java was the hot buzz word. Every other person was crazy about learning Java. Applets were kind of geek thing. It was kind of prestige issue to learn Java. Your fellow buddies silently respected you when you showed your new Applet or Servlet.

      During my early months of job, I started feeling HTML is only for greenhorns, there wasn't much fun in doing any HTML or say for that matter Javascript. One reason was that the tools used for (D)HTML were spitting too much of code. You don't understand any thing in that. There was not one correct way of doing things. Cross browser or say for that making code compatible for matter different versions of IE was a nightmare.

      I slowly forgot HTML.

      But now, With new HTML 5.0 killer features, nobody can ignore it. It has the capacity to completely replace these Rich Internet Apps be it Flash, Silverlight etc.

      It would soon become a standard and entirely change how we write web applications.
      Javascript would be new language of the Internet.

      Some of the features are just amazing:
      1. Offline storage database
      2. Drag and Drop
      3. Canvas
      4. Rich Media tags
      & the list goes on..

      Check this out:
      Demo of HTML5 is in HTML5 How cool is that !!.

      And this video on youtube: