Kodi (Formerly known as XBMC)- your personal powerful media center

If you are looking for a powerful media centre at your disposal, which can give you unlimited access to various media content locally and from around the world, then look no further then Kodi (formerly known as XBMC).

Kodi or XBMC (Originally called as XBOX Media Center) is an open source home media center software which can run on various operating systems (Windows, iOS/OSX, Android, Linux etc. visit http://kodi.tv/ to know the complete list).

Kodi basically has a concept of Add-ons, so you get Add-ons (native and third-party developed) for everything you like to run inside Kodi.

  • Programme Add-ons
  • Video Add-ons
  • Audio Add-ons
  • Service Add-ons and so on so forth

These Add-ons are normally available as part of various repositories. some are developed by XBMC / Kodi community and some are completely by the independent developers, groups or companies. Concept is to install these repositories and then install add-ons (whatever we like) coming as part of these repositories in any supported categories.  Kindly refer to http://kodi.wiki/ for any further information on what Kodi is or how to install and configure Add-ons.

Kindly refer to http://kodi.wiki/ for any further information on what Kodi is or how to install and configure Add-ons.

In this post, I want to share my experience with Kodi and making it a portable powerful media house in combination with my LG 42LB730V SMART 3D TV (http://www.lg.com/uk/tvs/lg-42LB730V) and having an experience of a lifetime with movies (HD, Bluerays, 3D), music and unlimited live TV streams from around the world.

What do you need?

  • A broadband network with minimum 2 MBPS line.
  • An Android phone (with android OS version > 2.3, as XBMC doesn’t support froyo, it needs minimum gingerbread android OS running on your phone. recommended for this post is version 4.4)
  • Chromecast dongle (search google for it, it’s as cheap as $30)
  • A TV with USB and HDMI port

All you have to do is, install Kodi on your Android phone, install Chromecast App from Google on your phone (latest version with Cast Screen feature and capabilities.). Put on the Chromecast dongle in the TV. Start the Cast screen feature in your Chromecast App on android, then start Kodi and start playing any video from your favorite video add-ons in the Kodi’s internal media player and voila, you can see that video on your big TV screen.

Only drawback with this approach is that you won’t be able to use your TV remote to control video playback, as you are using chromecast’s CAST SCREEN feature and its just transmitting video and audio wirelessly to the Chromecast dongle and not the controls. Controls of the media player are still with the Android phone, so you will have to have mobile with you to pause, rewind, forward and  control any other video playback features.

Another option is to enable external player in Kodi by following this link  (http://kodi.wiki/view/External_players or http://xbmchelper.squarespace.com/xbmcast/). Once this is enabled, any video you play from Kodi, will automatically be opened in an external media player on your smartphone (choose the players like uPnP  or the one which has Chromecast support).  This way you can use your android as the media server, playing video on the external device and can have full control on the video being played on your TV with your TV remote.

My recommended approach to install repositories is to install Add-on installer program by following (http://www.tvaddons.ag/addon-installer-kodi/) and then use that program add-on as the base to install other repositories and add-ons. this way you won’t have to look everywhere on the internet for the add-ons you want.

I hope you will enjoy the rich media content you can get using Kodi.

Setting up SSL Certificates on JBoss

Preparing Keystore

(One-time activity to be done before obtaining signed certs from trusted authorities

  • Go to the keytool located in the bin directory of JDK installation
  • Execute the following command

keytool -v -genkeypair -alias <replace with alias name> -keyalg RSA -keysize 2048 -sigalg SHA1withRSA -keypass <replace with key pass> -keystore keystore name>.keystore -storepass <replace with store pass> -storetype jks -validity 365 -dname “cn=<replace with website name> , ou=<replace with Organization Unit>, o=<replace with organization name>, l=<replace with City>, c=<replace with country code>

  • This command will generate a keystore with a keypair of JKS type of 2048 keysize and with a validity of 365 days (1 year)
  • Verify the content of keystore using the following command

 keytool -keystore -list

  • Once the keystore is ready, generate a CSR (Certificate Signing Request), this can be done using following command

keytool -certreq -keyalg RSA -alias <replace with alias name> -file <csr file name> -keystore <keystore file name for which csr is generated>

  • After generating the CSR, send it to your CA to get the public SSL cert.

Installing Public SSL cert reply into the Keystore

  • Public SSL cert will have the following format (typically) <CN name>.crt , example. Akhiljain.info.crt
  •  Execute the following command on the keystore to install the certificate reply.

 NOTE: Remember to import CA signed cert with the same alias as you generated keypair with and add -trustcacerts option as well, otherwise, it will not be imported properly and server will always return the self-signed cert using private key from keystore.

keytool -importcert -keystore <keystore name> -storepass <keystore pass> -file ssl cert received from CA>

keytool -importcert -keystore <keystore name> -storepass <keystore pass> -file ssl cert received from CA> -alias keystore> -trustcacerts

  •  After executing the second command, you should get the message like

“Certificate reply was installed in keystore” 

  •  Verify the content of keystore using the following command

 keytool -keystore <keystore name> -list

Preparing Truststore

  • Truststore should contain all the ROOT and Intermedia CA certs from both the parties in the case of Mutual Authentication.
  • Create Truststore using the following command and add relevant certs using the following command

keytool -importcert -keystore trusstore> -storetype jks -storepass <trusstore password> -alias <alias for cert getting imported> -file <cert file name>

  •  Verify the content of truststore using the following command

keytool -keystore <truststore name> -list

 JBOSS Setup

  • Copy the ready keystore and truststore files and paste them in the conf directory of the JBoss server getting used. Example


  • Go to the below location and open server.xml


  • Change the server.xml to have only following entry for connectors (comment any other connector entry in server tags, other than the ones shown below)

<Connector protocol=”HTTP/1.1″ port=”8080″ address=”${jboss.bind.address}” connectionTimeout=”20000″ redirectPort=”8443″ />

<Connector protocol=”org.apache.coyote.http11.Http11Protocol” SSLEnabled=”true” port=”443″ address=”${jboss.bind.address}” scheme=”https” secure=”true” clientAuth=”false” keystoreFile=”${jboss.server.home.dir}/conf/keystore name>.keystore” keystorePass=”keystore pass> ” sslProtocol=”TLS” />

  • Go to run.conf.bat at following location /jboss-as/bin to provide truststore location to the JBOSS when it starts. Add following JAVA_OPTS

set “JAVA_OPTS=%JAVA_OPTS% -Djavax.net.debug=ssl,handshake -Djavax.net.ssl.trustStore=<truststore_location>/<truststore name>.truststore -Djavax.net.ssl.trustStorePassword=<truststore password>

 PS: you can remove -Djavax.net.debug=ssl,handshake, to disable SSL debugging.

Web Application Development – A Quick Walkthrough

Shopify Ecommerce – Start your FREE trial now!

Web Application development is a process and practice of developing Web Based Applications. Any software application that can be used over the internet/intranet by the means of a browser (like the Internet Explorer, Chrome, and Firefox etc) is termed as Web Application. Common examples of these applications are Facebook, Twitter and other billions of web applications available over the internet.

These applications can either be Static or Dynamic, i.e. the web application which provides only read-only content are often referred as Static Web Applications or Web Sites, whereas, applications which requires user interaction like registration, login, posting comments or doing anything which requires some sort of input; is often termed as Dynamic Web Applications.

Web Applications has come far way since their inception, from a simple set of several HTML pages hooked together to create static web pages to a Dynamic Web Contents involving content intelligence and richer User experiences.

Dynamic Web Applications are normally n-tier applications which comprise of different tiers to perform a specific task. As for example, the web-site www.facebook.com allows you to use the web page to register yourself and then login to perform social networking, the Page you see on browser is often termed as presentation layer and is delivered to you via Hypertext Transfer Protocol (HTTP) comprising of Hypertext Markup Language (predominant markup language for web pages). However, in the other tiers lies the core web application logic to communicate to the persistent layers (normally Databases). In a typical web application, number of layers are often the deciding factor in calling the whole architecture as n- tier architecture for example, 2-tier or 3-tier architecture.

As a developer, you could be involved in writing the code at any of the tiers of the Web Application and which in turn decides which type of developer are you. So, if you are working on writing the piece of code which will create the User Interface, you will often be termed as User interface developer or a front end developer. Whereas, if you are involved in writing the piece of code which sits at the core business layer of the web application and talking to the databases, you will often be termed as the back-end developer or service layer developer.

So whatever kind of developer are you, you need to work towards meeting your end goal, that is; a working software product. So, stay tuned….as I talk about making your development environment more efficient in upcoming posts.

Effective Software Development from a developer’s eye

Shopify Ecommerce – Start your FREE trial now!
I have devoted ten years of my life coding, designing and building robust, scalable and maintainable software. And one thing I learnt all these years is that, designing any application requires a great thought process and as everyone says is the most crucial part of the Software Development Life Cycle, However, in contrary, I always believed and still believes that any Software Development Success depends more on factors which are less talked about and often taken as for granted by people managing it. Answers to some of the following questions have a significant impact on the delivery schedule, quality and overall betterment of any Software being developed. For example,

  • What’s your development approach?
  • How developers are developing a piece of software or a complete application?
  • Are they bumping into each other more often than needed to resolve workspace issues?
  • Do they really understand what they are doing?
  • Is it just the “See it once and repeat it blindly” kind of development / maintenance process that they are following?
  • Is the development process too stereotyped?
  • Is there a way to improve the productivity of the developers using the same set of resources available?

I am trying to put the best practices and my viewpoints in answering these questions via this blog post and more to come in the near future. I am not trying to force the way of doing things but simply trying to put forward my experiences to make it available to all the fellow programmers / developers who wants to take an Organized Approach of Software Development into their day to day programming/ development life.

I started writing this blog because I always felt that Software Development Team comprises of all type of developers, those who know what to and how to do things and those who know how to and what to follow from their peers. By the means of this blog, I intend to bridge that gap between the software development team members by bringing sense of expertise, self-motivation and enthusiasm to attain innovation, high-productivity and ownership to the work they are doing.

So Stay tuned…. for more to come.

Architecting it right

Shopify Ecommerce – Start your FREE trial now!
In IT companies, there are usually many departments at play when it comes to making visions a reality. Different people from different groups have their own way of looking a the big picture. However, One group / department that stands out in terms of making those great ideas/expectations a reality, is technology or engineering.

Many small companies or startups have an unprecedented advantage in terms of building new things from scratch or do a green field architecture, however big players often don’t get this  liberty and are always looking to find new ways to improve their existing products. In the quest of putting company’s name at the top of the competition, big IT companies keep re-inventing the wheels. Re-inventing is not bad, as long as the companies keep the long-term vision in mind and don’t repeat the mistakes that warrant re-inventing again and again in the near future.

Architects along with the focused engineering group play an important role to make this a reality and come up with something that meets the company’s requirements as well as put them at the forefront of the competitor market in the immediate as well foreseeable future.

In IT companies, bread and butter of everyone predominantly depends on the way software product behaves or can sustain the ever increasing demand in changes and load in the system. Many architects often ignore the long-term sustainability of the system and focus on solving the immediate problems in hand, which give rise to the re-invention cycle every now and then.

So next time when you are solving a business problem, don’t only concentrate on what is being asked but try to answer the questions which might arise in the near future.

Happy Architecting!

Are you putting your resume before requirements?

Shopify Ecommerce – Start your FREE trial now!

Over the number of years I have dealt with various developers/programmers as well as Architects, some of them being brilliant, some of them being very hardworking and some of them being just Nine to Five type of material. However, one thing that I have found common in most of the people I deal with or have dealt with, is the habit of putting their resume before requirements.

We being engineers have the tendency to look at everything from engineering glasses and often end up finding faults in other people work, designs and suggestions. A constructive criticism is good and is very healthy to get the output that is beneficial for all, however, tendency to recommend technologies or different approaches to solve problems often arises from that deep down urge of reflecting them on to the CVs or justifying what’s already in there.

As an architect, you have a moral obligation to be unbiased towards any technology or recommendation. The solution should always be driven by the requirements which can make an organisation happy and in turn it’s customers. As an architect, it’s your duty to educate business and fellow technology colleagues about the right choice and why it should be made.

IT industry is very rapidly changing and technologies keep getting better. In this IT world where there are N ways to solve a given problem, architects often get inclined towards the new and cool stuff. This inclination can be justified to a certain extent, however it doesn’t mean it can solve all the problems you are trying to solve just by using a new cool tech or a new buzzword in the market. Hence, Architects should be cognisant of the fact that in IT world one size doesn’t fit all.

If you are an architect or planning to take that route, make sure you keep this thumb rule in mind before everything else and you would be successful in your endeavours.

Happy Architecting!