1.  “To uncover your true potential you must first find your own limits and then you have to have the courage to blow past them.” – Picabo Street


    If you are a cricket follower, the recently concluded India Australia test series should/will be in your top cricketing moments of all time. It's certainly on my list.  I don't think even movies have such perfect scripts these days. There was humility, imbalance, anger, hard work, and then eventual success. Just like the well-built machinery that BCCI (Board of Control for Cricket in India) is, businesses can take out a lot from this series. Let's take a look at the top 5 business lessons from the India Australia test series. 

    1. Team culture is more important than cult leaders
    With all the pundits writing off India once Virat Kohli departed after the 1st test, the onus was on Ajinkya Rahane to take the team forward. He has done so in flying colors and deserves all the accolades. Now after listening to all the support staff interviews, it's pretty clear that this series was not won by Rahane or Kohli alone. There was a conscious decision to groom the team culture in such a way for them to eventually reach here. If the key values of your company are imbibed into the team, there is no need for cult leaders to lead the team all the time. Showing the right direction should be enough for the team themselves to reach success. 

    2. Unstable leader is worse than no leader
    Though there is no need for micro-managing leaders, the leader should be able to direct the team on course. For India, Rahane did it perfectly, handling injuries after injuries aplomb, whereas Tim Paine, the Australian captain, let the pressure get the better of him. I had been a fan of Paine much before his eye injury and then eventual return and the ascend to the Australian captaincy. Having seen him navigate the tough Ashes series and the last Indian series as well, it was uncharacteristic to see him under so much pressure. Thinking about it, the reason seems to be that Australia was expected to win this series handsomely. Especially after the 36 all our debacle of the first test. With each passing test and each passing day, the more India fought, the more the pressure of winning got to Paine. The ghosts of Headingley and Ben Stokes must have haunted him hard. And when the captain loses his cool, the team follows suit and it was his drop catches and the missed stumping that eventually decided the fate of the series. 

    3. Stick to your own strength and back it 100%
    With Pant, Gill, and other young batting talents showing the bright future of Indian cricket, it was of course the old guard Pujara who according to me decided the series. After the 1st and 2nd tests, there were talks about how Pujara's low strike rate was pulling the team down. But, boy in the 3rd and 4th test, wasn't each dot ball played by him, worth more than sixers and fours. On the final day of the 4th test, with more than 13 different bruises in the body, still not playing any rash shot, Pujara was the monk who became a warrior. It was the unwavering faith in himself and conviction that this is how he is going to play that separated the boys from the men. Here is where the team culture is again important. Once the end goal is clear, the culture should allow each individual to thrive in his/her own way playing to their strengths. That’s when you will discover your own swashbuckling Pant and ever reliable Pujaras. 

    4. Too much work is never good
    India rotated close to 10 different bowlers in this series. Most of that was due to Injuries to key players. But it indeed turned out to be a blessing in disguise. The Indian bowlers were fresh in each test match and that resulted in India picking up 20 wickets in all but one innings. On the contrary, though the quartet of Starc, Hazelwood, Cummins and Lyon are world beaters, playing all 4 test matches, took a toll on their abilities. It specially affected Starc who was their tail enders destroyer and Lyon who was unfortunately had his worst series of all time. No matter how good you are, you and your time should certainly not over cook and burn. A half baked dish is always easier to adjust than a burnt dish. 

    5. Resilience and patience
    On the finally day of the 3rd test, when Hanuma Vihari, pulled up his hamstring, the entire series was in balance. One wicket there and there was injured Ashwin, Jadeja and then two tailenders who are probably faster in returning to Pavillion by the time you keep your noodles in the stove. Right next over, Pujara is out. I myself was convinced that the match is a foregone conclusion. But probably again, the Injury that made both Vihari and Ashwin less nimble made them focus on the basics. And focus they did.They played 256 deliveries in total. That's 42 overs, almost the length of an ODI. They did not achieve that by just mindlessly wanting to play 50 overs. As Ashwin was heard on the mic, they breaked down the time and planned mini goals like playing 10 balls at a time, Ash facing lyon all the time and Vihari facing fast bowlers and by the end of the game, they were so deep that they did not even celebrate the draw. This is where we should learn Resilience and patience as one of the important virtues that is needed in our current environment. In the social media era where people are looking for instant fame and instant success, it’s so romantic to see people with old school values succeed as well. 

    That's it for this blog, hopefully I will have a few blogs for the English series as well. Can't wait for it to start. Happy reading...





    0

    Add a comment

  2. 0

    Add a comment

  3. “The first draft is just you telling yourself the story.”
    ― Terry Pratchett
    One often undervalued aspect in Software development is Writing. Technical Writing is much more complicated than coding at times.  When I started Software Development, I always thought documentation is an exercise in futile. The code is either easy to understand for anyone and if not completely non understandable for anyone. In my first job, we were exploring and learning an ERP platform. The company gave me enough freedom to spend time on research and make sure I completely understand the Product.
    Probably 6 months in to the job, I had written a personal blog on something that I don't remember now. Reading through that, my boss suggested I should try my hand at Blogging about the platform we were working on and the challenges we were facing on it. I thought this was a simple exercise. Only as I started writing my first blog post did I realize that I did not know much about the functionality I was going to blog about. The thing with mind is sometimes it's way more powerful than what we give credit for. It knows that you are a troubled soul and many times to keep you at peace, it gives you a false impression that you have understood things even though the truth could be otherwise. The same dawned on me that day.
    My first blog post is in this blog and now 121 posts later, I am still amazed how far I went in a short span of time. From May 2010 till May 2011, I remember going crazy and writing almost 2-3 blog posts a week. It's not much by current standards, but with my work, even to manage that time is more surprising to me.
    The reason for this blog post now is because, I was looking back at the fact that, it is this very blog that had got me my last 2 jobs and still makes me feel good about myself when someone references my blogs during development. To those devs, who are starting out now and even to those who can't write to save their life, use this opportunity to remind yourself that more you learn to write about your developments, the more you will understand and the more you can share with the community.

    I am planning to write more blogs henceforth on generic topics related to Software Development and if you want any specific topic addressed, please do let me know.

    Happy coding...
    0

    Add a comment

  4. It's been around 10 years since I started programming. May be a bit more, if I have to include my first attempts at C programming in school. But it would be a grave insult to call remembering ten lines of code and just replicating it to put a star on the screen. I also did a course on Visual basic, but it was more gimmicks that Application development. But it was truly in the year 2007 when I started my Master in Computer Applications that I found a new flare for developing applications. 

    I was very late to computers in general and even when I joined my Masters, computers were not really accessible to me. But when I joined my Masters where one is actually expected to hone the skills which they already have, but in case it was were I was learning the skills, initially it was very difficult. I was not sure what computers had for me nor I had a natural flair for programming. But the thing about computers that attracted me was the visual medium it gave. Initially it was just a door to a high paying job, but in a month or two, I knew I was genuinely attracted to the computer. 

    I was not good at programming (neither now). I am not someone with strong Algorithm and data structure background who can write complex code. But I liked building applications. Probably, that's why I titled the blog as 10 years of Application Development and not 10 years of Programming. I took lot of pride in developing application using visual medium that had lot's of User Interface elements and less of code behind it. I remember my first few projects were Cricket team building application on Visual basic (much like Fantasy cricket in cricinfo). But building screens, navigating them, providing something new on each page was something I was very much fascinated on. I purposely kept the complexities to bare minimum because what fascinated me was the joy people got when using applications that just worked. 

    I built quite a lot of small applications and developing a simple todo list was my dream then and a dream now though I might have developed around 5 todo applications that I used for sometime and then discarded for one reason or the other. There was not GitHub at that time, so lost most of it. When my friends honed their skills on heavy programming, I was just dreaming and making small applications that made sense like a simple Sales portal done on VB and MS Access. I remember having a project on C++ where we had to implement some encryption algorithms. I still remember a very good friend of mine and a brilliant coder almost writing 10000 lines of coding implementing a very complex algorithm. All I did was create 10 encryption techniques on my own like reversing alphabets, replacing alphabet with numbers etc with my own logic built in. They were not perfect encryption techniques as such, but the goal was to design an application that handled multiple encryption techniques. I used to envy my friend for writing such brilliant code, but I hardly wrote around 700 lines of code, but more functional. 

    When I started working in late 2009, I entered into the world of Enterprise Resource Planning, I was fascinated by how little companies cared about the User Experience. They wanted to jam in as much complexity as possible and make it so hard for the users, that they had to be trained on using the system first and then on it's functionality.  From that time, with the good vision that the companies I have worked had, I always develop functionalities which are more intuitive in nature and less complex. It didn't bother to me that I was having more fields where less fields would suffice. But I always wanted the users to see more to understand the application themselves than to read through manuals to use a single page. 

    Fortunately very early in my working career, I got chances to design stuff, which was my core strength and probably my only strength till date. I am good at fixing things quickly though sometimes they are not the best option available but a viable solution where the client is more happy to use the System. Still 10 years down the lane, I have lot's of regrets including not worshipping Data Structures and Algorithms, but as the years passed I have gradually learned to work with them. 

    The reason for writing this blog is to give people like me belief that you can thrive in this industry. Always we are clouded by people who can code x lines in a minute, who can solve all the code challenges put forth by big companies. But remember, there are lot's of opportunities and scope for creators in this space. There is so many things in this world which needs to digitized and the world needs simple programmers more than ever. The more application developers think like end users, the better the world would be. Do not limit yourselves to the confines of the programming language or the application but rather learn to dream and remember, the world is never enough for Dreamers.

    Happy Coding...  
    0

    Add a comment

  5. Here are the list of apps that I almost use on a day to day basis. This blog will be updated with the apps in the subsequent versions.

    1. Docky (MAC like doc)
    2. Nylas N1 (Email client)
    3. Skype
    4. Vim
      1. Pathogen package manager
      2. Twitvim
      3. NERDTree
    5. Sublime Text
    6. VLC Media Player
    7. SSH
    8. Unity tweak tool
    9. Openbravo ERP stack
      1. Java
      2. Ant
      3. Postgresql
      4. Tomcat
      5. Eclipse Indigo
    10. Node.js (useful for many plugins)
    11. Google Chrome
    12. Noobs Labs Ubuntu themes and icons
    13. Teamviewer
    14. Fogger App


    0

    Add a comment

  6. This is one of the best links that worked for me when I tried to configure tomcat (any version) and apache2 in Ubuntu.

    http://thetechnocratnotebook.blogspot.com/2012/05/installing-tomcat-7-and-apache2-with.html
    0

    Add a comment


  7. Hi All,
    I am planning to learn Angular.js from today and I using the http://campus.codeschool.com/courses/shaping-up-with-angular-js/ for my first training. Beginning my training, will keep posting here how it goes...

    Beginning with the Introduction. They are taking about creating a gems store and I was immediately thinking whether I entered a Ruby tutorial... Got to focus up...

    Even before starting the tutorial, we are asked to make sure we know Html/CSS and Javascript. Okay, I can handle that... Next up, about testing patterns, Behavioral Driven Development and Test Driven Development. I am sure I fall under BDD and my clients under TDD.

    Good to know Angular.js is ONLY a front end framework and not a backend framework and it is more suitable for dynamic websites.

    Listening about proper responsive sites. Also good to know Angular can load a specific section of the page without loading the whole assets list...

    Directives are used to bind the method to events. ng-controller seems to the keyword for this. Not sure whether I get it correct so far. Need to get angular.js and twitter bootstrap. Downloaded Angular.js from https://angularjs.org/ and twitter bootstrap from http://getbootstrap.com/getting-started/. By the way, I am trying out atom editor from editor. Might try this with that.

    Good to know Angular.js is a module driven architecture. In the examples shown, the script tag is included in the body tag, not sure whether that has any impact on the Application load time.

    ng-app is the directive to run a module when the application loads. Seems to be not so intuitive. Time for the challenges...

    Completed level 1 and learnt the following directives
    ng-app - for binding modules
    ng-controller - for binding events
    ng-repeat - for iterations (cool by the way)
    ng-show and ng-hide - expression based data display.

    Now will probably go to next chapter after testing a local demo. Seems to be quite interesting..:)

    1

    View comments

  8. There are lot's of predefined libraries for File Management like Apache Commons. But it is better to know code that can be used without these libraries. Here is a small program to recursively search through a directory and print the name of all the files present in the directory.

    import java.io.File;

    /**
     *
     * @author Shankar
     *
     */

    public class test {

      /**
       * @param args
       */
      public static void main(String[] args) {
        final File folder = new File("E:\\Openbravo\\ImportModule\\orderImport");
        listFiles(folder);
      }

      public static void listFiles(File folder) {
        for (final File currentFile : folder.listFiles()) {
          if (currentFile.isDirectory()) {
            listFiles(currentFile);
          } else {
            System.out.println(currentFile.getName());
          }
        }
      }
    }

    Notice that I have used double backward slash '\\' in file path as I am using windows (as strange as that might sound for an Ubuntu fanatic) ..:) . In linux single forward slash is enough ('/').

    0

    Add a comment


  9. The future of the Enterprise solutions industry belongs to micro services and in fact nano services. Gone are the days when Enterprise applications were the ones that contained huge gigantic databases and middle ware and a crappy User Interface. In the current era where mobile first (or app first) strategy is driving businesses, the key to choosing an Enterprise solution is not just to use it as an application but also use it as a platform where you can keep on adding your solutions at least for the next decade. Openbravo being a company founded to develop Enterprise applications based on latest technologies has embraced this approach right from its early days. 


    Here is a small figure on a small subset of modules present in Openbravo.



     

    Let us see here why Openbravo is even more powerful as a platform

    • Modularity

    As you can see from the figure above Openbravo embraced modularity or segregation of individual business processes that are interconnected through extension points. In essence you can keep on adding or removing new business processes (verticals as it is usually referred) without having any tight coupling with the other business processes. For example a manufacturing vertical can be used on the same Openbravo setup and also a CRM vertical completely unrelated to the management vertical can reside in the same solution. The beauty here is since each vertical or module can operate independently there is no real need for security concerns or load concerns. But of course there is some underlying data that has to be shared across the System like financials or customer data. This is the next strength of Openbravo.
    • Master data management
    A key module of Openbravo solution is the Master Data Management. Some of the business features dealt within this module are:
    • Company information
    • Organization hierarchy
    • Financial Information
    • Users and Roles
    • Security
    The advantage here is that this information is usually generic to most of the business process and so instead of repeating the same information across services, the same service can be linked to other solutions. Also since the security of the data is handled here, data abstraction for the various processes can be handled quite easily.


    • Ease of development

    This has to be done as a whole article altogether but I will provide a small brief of it. Openbravo uses something called the Application Dictionary model, which enables developers to create windows and artifacts without coding. In essence with simple data such as the SQL tables, any user can create windows in no time. This provides us with multiple benefits like

      • The same user interface standard is maintained across various solutions. 
      • Go live time is hugely reduced and spent more on polishing the business process instead of focussing on trivial elements. 
      • Resources required to complete a module is very lean compared to creating solutions from the scratch.


    • Open source
    This is probably the biggest advantage of using Openbravo as a platform. Openbravo was one of the pioneers in open source ERP and one of the very few to still stay that way. Since Openbravo is entirely built on an open source software stack, we have the freedom to use it judiciously without the fear of future updates and legal constraints. And with Openbravo exchange there are hundreds of modules available which can be used to develop your business process in a very little time. For eg, Integrations are provided with various other solutions like SugarCRM, Magento, Pentaho Business Intelligence.

    These are some of the key benefits of using Openbravo as a platform. There are whole lot more benefits like centralized deployment and reduced maintenance overhead, but I think once you understand the power of the platform these things are trivial. Would like to hear from you all about the cases in which you have utilized Openbravo as a platform and also as always suggestions and comments are welcome.

     
    0

    Add a comment

  10. One of the main USP’s of Openbravo ERP 3.0 is its RIA (Rich Internet Architecture) based on the smartclient framework. Openbravo was one of the pioneers in the Opensource ERP industry to move to a fluid client based architecture. In my earlier post , I attempted to dissect the User Interface elements in Openbravo. In this post, I tend to explain briefly the way the client side scripting is segregated which would be quite useful while debugging and also while extending the module and creating new scripts.


    The main client side scripts are present in the module org.openbravo.client.application. Here is the folder structure of the user interface module.

    The custom scripts that are used in Openbravo ERP are added in the web/org.openbravo.client.application/js folder. There is another folder in the same path, org.openbravo.userinterface.smartclient which contains the core smartclient elements that are being used and modified for Openbravo. Notice that the scripts are segregated related to the user interface elements. For eg., The alert-management folder contains all the scripts needed for rendering and manipulation of the alert window. I will try to touch base on few elements that are being used widely and most likely to be debugged. But before that we should be aware that Openbravo uses the free marker template engine to generate user interface based on the scripts. In essence, the user interface elements that we see are mostly formed from FTL (Freemarker Template Language) templates. These templates are stored in the src/org/openbravo/client/application/templates folder. Here is a screenshot of the templates.
    I am not going to explain in detail all the templates, but layout.js.ftl is the main template that acts as the base of the user interface and contains the top menu section and the tabbed workspace. The other templates are quite self-explanatory from their names and if there are any doubts in this, please drop in a comment.

    Next coming to the Application scripts, here are the key scripts.
    1. Main View
    The main view contains the scripts necessary for the rendering and manipulation of data in the tabs, The ob-tab.js is the base script file for the tab and ob-standard-window.js is the main container inside the tab. The ob-standard-view contains the form view and grid view of each tab. ob-messagebar.js is also contained in ob-standard-view so that it is displayed properly in both form view as well as grid view. 
    • ob-tab.js
      • ob-standard-window.js
        • ob-standard-view.js
          • ob-messagebar.js (the form and grid components are detailed below)
            • ob-view-grid.js
            • ob-view-form.js
    2. Grid View

    All the scripts related to grid layout is present in the grid folder. Here ob-grid.js is the main grid definition extended from smartclient grid. The ob-view-grid.js is the file that is used to render the grid layout for all the normal windows. ob-tree-grid.js is an extension of smartclient tree grid and used in tree grid reference in Openbravo. The ob-tree-view-grid.js is the grid layout that is rendered in windows where tree grid is being used. For eg., Organization window.


    3. Form View

    The form view contains all the scripts related to the form view. The interesting thing here is, note that there are separate scripting files for the status bar, attachment section, linked item, notes. Any improvements made to these will not adversely affect the form view and similarly it is easier to add new components to the form view similar to these. The ob-view-form.js is the base script for rendering the form view. Another interesting thing to note here is the formitem folder. The formitem folder is nothing but scripts for each of the reference types being used by Openbravo. This again improves code readability, maintainability and is easily extendable. 



    4. Toolbar
    Another more used feature is the toolbar. Here ob-action-button.js contains the generic actions to be performed for all toolbar and button fields and of course with some exceptions. But ob-toolbar.js is the file where all the toolbar elements like New, Delete, Save, Export are defined. ob-clone-order.js is a custom button developed specifically for order window. So this is defined separately again to make sure that core functionality is not affected by newer developments. 

    You can check the other folders and see how cool and simple it is to understand the application scripting architecture in Openbravo. Feel free to comment on any mistake that I may have made (in this blog post) and also for any doubts or clarifications. 

    Happy Working !!!
    0

    Add a comment

Subscribe
Subscribe
Loading