25 December 2012

Burgers in London

Burgers in UK seem to be medium to small compared to America. It seems the British burgers get a bit stingy in the way they make their order sizes but are still able to squeeze in a hefty ounce of beef. Unfortunately, if one really wants to enjoy a burger then may want to have a helping of two rather than just one burger in UK. For some strange reason, they also give side orders of skinny fries but why would any one want such a ridiculous size of fries. Chunky homemade fries are the real deal that go with a meaty scrumptious burger. Generally, one has several options to enjoy a burger meal in the big city like London. One can head out to a pub and get a full meal deal which are quite a bargain also at times can be quite tasty. Another, option is if one is really pocket tight then to head over to McDonald's or the Burger King. But, these places will make you sick later and the burgers are full of additives. Another, option is to head over to open markets where they make fresh burgers right there and then especially around the City of London. But, my favoriate places are the dedicated burger joints that truly provide flavor. Not a big fan of Fine Burger or Gourmet Burger. And, places like Hard Rock Cafe, Sticky Fingers, or Fuddruckers have really lost their touch on quality food with excessive waiting queues and misplaced orders. Some of my favoriate burger places in London, where they use quality meat, would have to be:

24 December 2012

Java Web Hosting

Java hosting has come along way as a result of cloud computing. As Java runs in a JVM it makes for appropriate language platform for large scale applications requiring several magnitudes of processing and load. The JVM also allows one to program in multiple alternative languages alongside Java such as Groovy and Scala. Java is also a very enterprise friendly language supporting a multitude of open source libraries and frameworks in a wide area of application domains. Java has always been a more expensive way to host an application on the web. However, the cloud has increased the possibilities for developers. There are quite a few cloud hosting providers that have started to provide Java support. A lot of them provide multiple language support.
However, one can always use a standard VPS or a dedicated server provider as an alternative for PaaS/IaaS for Java web hosting for which there are even more options available similar to Python.

Java Web Hosting
JSP Hosting

The following frameworks are often quite workable and supported on these cloud hosting platforms:

Rainy Days in London

It rains a lot in London. There are more rainy days compared to almost two months of sunshine. One would expect that a lot of people would be out with umbrellas handy which is often the case. It seems as soon as the first signs of drizzle appears people are magically able to bring out their umbrellas. Only the fact remains that so many of these people do not really have a clue about how to carry an umbrella let alone to hold one in their hands. A lot of these umbrellas have a pointy end to them. These people do not realize that the end is in fact a hazard to many people behind and around them and should be pointed vertically down and not horizontally up as it can appear to act like a concealed weapon. The chances of hitting someone are quite high especially if the individual with a brolly decides to circumnavigate and circumlocate their route to a certain angle. In a city like London where there are so many pedestrians the chances of causing grievous bodily harm from such carelessness are high. I have to admit I have been hit by brollies a lot in London and can say with experience that these people do not even have the manners to say sorry or the fact that they cannot even watch out as to how they carry an umbrella is a misdirection of its own. Maybe, they should start having etiquette schools for individuals with umbrellas in UK. 

22 December 2012

Indecipherable Requirements

These days in agile development teams there is more emphasis on design, implementation, testing towards delivery rather than the production of clear requirements. Requirements often times can become the stumbling block for either incorrect or slow implementation, as well as a complete misdirection in delivery. In agile principles communication is key between stakeholders and developers. However, such communication in requirements needs to be clearly written down and mapped out for clarity sake. Also, what is required needs to be translated into implementation. There is a translation step required here at point of functional and non-functional requirements. There are two critical points of communication failure in agile teams. One being between stakeholder and developers. And, another being between developers in the team. Often times the emphasis is on getting the correct information from stakeholders but not fully translating them between developers. These days the members of agile teams use various tools for such communication flows. In all fairness, development teams need to understand the fact that people cannot read their minds especially if such teams are working in distributed and co-located environments. And, without sufficient translation of clear requirements in written form it becomes very difficult for developers in the team who are tasked at implementation to manage and understand them. Furthermore, the speed with which the implementation is progressed can also suffer which impacts the delivery time scales.

Perhaps, a suggestion in such matters is to keep communication simple but clear. There should be no level of complications in the requirement translation and they should not read like a puzzle where the developer has to spend time trying to decipher what another lead developer or stakeholder has actually asked for in terms of implementation. In going forward there needs to be a set of work flow targets that are agreed between team members so the progress can be smooth allowing for less issues in communication and more clarity towards completed work. There are various ways in which such issues can be taken care of. However, it depends on the willingness of developers to allow for more clarity and understanding. Often times developers stress more on the technical aspects of their work rather than trying to improve their own effective communication skills.  In a lot of ways, BDD (Behavior Driven Development) improves upon such issues as it tries to relay more acceptance work from the get go of implementation and testing. In tools like JBehave, Cucumber, and Spock such approaches can further be integrated and automated with continuous integration tests. Even going further, the work flow can be outlined and mapped using agile tools. Additionally, elements of risk metrics and other methods can be incorporated in the process. JIRA is a very common project tracking application which comes integrated with other Atlassian tools. However, when a ticket is produced the actual verbiage that is added in as an issue or story needs to be defined clearly and synthetically. My proposed approach is to automate such requirements using specific keywords using a full work flow system where such issues and stories can be mapped and managed centrally with little effort. The specific keywords can be applied through script files and be modifiable based on team requirements of project work. For example, such keywords can be used in simple defined sentences: "for", "in", "out", "allow", "apply", "change", "remove", etc. All these words imply a specific task in relation to the work that needs to be applied. Notice the two sentence phrases below. The second one is clearer than the first in what really needs to be implemented and what really is implied from the stakeholder to the developer within a JIRA ticket.
  • Filter out id that is not in the list of ids
  • Filter for id that is in the list of ids
If one gave such requirements to a developer especially to a new starter, without any real knowledge of the system architecture other than the programming language, they may in fact get quite lost in terms of what was actually implied in the sentence. Moreover, if the written requirements do not agree with what the lead developer, architect, or stakeholder actually wants you to implement then that will increase the confusion not to mention frustration even more. Plus, relying on verbal communication to a limit is acceptable but may hinder the understanding even more as well as defeat the purpose of having formal requirements specifications as a way of tracking work and building automated acceptance tests. The first one reads with a double negative and almost like a puzzle. The second clearly states what needs to be implemented. Notice the keywords like: "for", "in", "out", "not", "list". These words make a big difference and not only that but the order in which they are put in the phrase can too. The first one implies to use for-each loop step to remove from a list. However, the second one implies for-each loop step to add into a list. The general terms like "out" can be translated to imply remove from and "in" to imply add in. But, obviously such keywords are based on context. Going further, if such keywords were added into a script file and the process of requirement production was automated it may in fact help speed up communication as well as correct implementation of requirements. If one is using JIRA this can be a fairly productive aspect for a team. Utilizing work flow modeling and Java, Groovy, or Python for integration and NLP for linguistic translation. The impediment from lack of requirements or indecipherable requirements could be reduced. The very same keywords can be linked to BDD acceptance testing criteria as well. When communication can be broken down into simple granular level with agreed use of words it can help developers understand and link requirements to implementations quite rapidly in an agile process. Requirements are an important step in the software engineering process. Such requirements need to be elicited, analyzed, specified, validated and verified in the process of delivery.

21 December 2012

BBC and TV Licensing

In Britain, almost every one is required to pay a TV license fee. However, it is puzzling as to how this TV licensing revenue is managed and spent. One of the disconcerting aspects is the quality of programming that is consumed on the BBC services which is quite disproportionate to the cost incurred to the TV viewer. One of the main reasons why so many people today have started taking up alternative options for more quality entertainment such as from satellite and cable. Recently, in news there has been inquiry into how the BBC decided to pay Mr Entwistle £400,000 in payments, even though his employment as Director-General was for such a short time. Furthermore, it is a clear reflection, on the fact that a huge proportion of the TV licensing cost seems to be paid towards salaries. Is it really justified for TV viewers to have to pay such high costs in TV license fees only to see it being used up to pay huge management salaries?

According to Wikipedia, BBC revenues amount to well over £5 Billion, employing about 23,000 employees,  and the corporation as it is called is owned by the public. "The BBC is a semi-autonomous public service broadcaster that operates under a Royal Charter and a Licence and Agreement from the Home Secretary. Within the United Kingdom its work is funded principally by an annual television licence fee, which is charged to all British households, companies and organisations using any type of equipment to receive live television broadcasts; the level of the fee is set annually by the British Government and agreed by Parliament." - Wikipedia. 

If this is clearly the case, then surely the cost of licensing should come under review and should be lowered as there is no real justification charging so much to a TV viewer and then also paying such high renumeration packages to management employees. The revenues received do not even reflect the level of quality programming offered to the public.

Christmas 2012

Christmas is fast approaching and there is a real rush developing on the high streets. Sales are on and a rambunctious bunch ready to grab a good bargain within the time constraints of a busy life. Often times buying the right gift for someone can become tricky. It is almost always a call on the lines of how well one knows someone. At times the cost factor becomes an issue. On other occasions, it is really not knowing someone important or much at all brings about a sudden rush of anxiety. Especially, when one has not even had a chance to check their wish list. How will they accept your gift? Will they like it? Furthermore, the gift giving between opposite sex becomes equally as hard. Christmas has in a way turned in to a very gift giving sort of event where people expect one another to give. The materialistic desires far overshadow the abstract ways of giving. The transformations of a family home glistening with a blossoming and well lit tree is an inviting indulgence in which merry people gather for almost a very poignant orgy of eating and drinking in copious amounts beyond the limits of their bellies can hold. By the time, Christmas passes on it leaves people with over run balances and a level of stress to plan for in the next year. Not even giving them sufficient time to recuperate does the next party opens its doors. The almost sudden new years eve exhumes an aura of everything associated to fun and people attempt to make new resolutions to change specific aspects of their lives in the coming new year. The deadly cold winds like a ghost on a snowboard all the while passing and gliding through engulfing tenaciously at every thing that can be associated with the elements of winter. 

20 December 2012

Python Web Hosting

Python hosting has come along way with the inception of the cloud. In past, most hosting providers only supported PHP based applications. However, the demand for hosting and the flexibility for more options has increased significantly. There are more and more growing options available now either shared, virtual private or a dedicated. Depending on ones application requirements each one can be workable. However, shared hosting is possibly the most minimalist option there is. Python is also emerging into a stronger contender to PHP and Ruby web frameworks and is able to support larger websites with fluid ease. Developing in Python is not only faster but it is also more maintainable. Arguably, Python is easy to learn and a lot faster then Ruby. Although, Ruby appears to be a more trendy way of developing websites, it is also a quite slow and one would require a stronger architectural dependency on caches to scale up a large application. Similarly, with PHP having a large application being cacheable is a key to the performance as well the limitations of a lifecycle of a request/response. PHP in all fairness although workable can be quite cumbersome to maintain in a multithreaded, high availability, low latency, and security conscious application. PHP in my view is really aptly suited to small scale applications or ones that have a significant infrastructure backbone of cacheability  with such layers of memcache or redis. Furthermore, the use of PHP web frameworks is a bit like over engineering with a half baked language. And, even then, the major drawbacks of PHP are lack of consistency, lack of backward compatibility, quality of open source libraries, object orientation, as well as the major one that being security vulnerabilities. However, one of the core Python drawbacks is also the lack of compatibility between 2.x and 3.x which can boil down to how much one requires access to various libraries compared to a closed and isolated web application. Some of the Python web frameworks that I particularly like are: Django, Tornado, Bottle, and Flask. Python is an amazingly good multitasking and integration language. It also does a really good job for data processing and in distributed systems environments which depend on services with no single point of failure. If you know Groovy you can pretty much pick up Python and therefore the ramp up time for a Java/Groovy Developer towards picking up Python is also faster then in trying to learn up Ruby. If one is facing a deciding factor between CGI and an alternative then one must be aware that in most shared hosting they use FastCGI whether it be Ruby, Python, or PHP. However, using the passenger module does help to get  WSGI support but there is no full support for it in Python. Python, in my opinion is an even better swiss army knief compared to Perl especially for Natural Language Processing and Machine Learning. I have listed below a few Python hosting options most of the PaaS options can be fairly expensive but offer a more flexible and larger scope for development. However, as all things go on the Cloud if one's PaaS provider is dependent on Amazon as an IaaS and if that goes down then your hosting provider would naturally also be effected. 
As well as, several others....check out djangofriendlyhosting

If one requires standard website with a small scale load then one can use PHP or Python eg like a company or promotion website
If the load is relatively high with a lot of distributed data processing then go for Python e.g like a newspaper site, games site, or a search site
If the level of work is enterprise requiring more control more heavy processing, and a heavy use of JVM then go for Java, Groovy, or Scala.

Java/Groovy and Python make a good composition for most back-end lifting work where as front-end interface masking can better be handled by core HTML/CSS/JavaScript libraries and frameworks. PHP can also be used behind the scenes, like with data loads or job controls with gearman, but as much away from security and heavy lifting as possible.


19 December 2012

Semantic Web

Semantic Web is all about making the web navigation more connected by treating every aspect of the web as a resource. This also inspires the concepts of linked data or the web of data. Semantic Web essentially utilizes XML based extensible languages specifically catering for the creation of and management of resources, knowledge, reasoning, as well as querying. Semantic Web is driven from the theoretical underpinnings of Knowledge Representation and Reasoning, one of the core branches of Artificial Intelligence.

The following books are valuable sources of information:
  • Logic in Computer Science: Modelling and Reasoning About Systems
  • Knowledge Representation and Reasoning
  • Semantic Web Programming
  • Semantic Web Primer
  • Semantic Web for the Working Ontologist
  • Practical Semantic Web and Linked Data Applications
  • Practical RDF
  • Explorer's Guide to Semantic Web
  • Linked Data Evolving the Web into a Global Data Space
  • Programming the Semantic Web
  • Learning SPARQL
As well as, learning Prolog especially the SWI-Prolog can be quite valuable asset which has a detailed background in Semantic Web experimental work especially for curation and archiving. Especially, the W3C site is a valuable reference point for keeping up with the progress - SemanticWeb@W3C. And, a list of tools associated for different language implementations - SemanticWebTools@W3C. Another context of work for which Semantic Web is often connected to is the concept of Semantic Tagging for Findability. The applications of Semantic Web are numerous as it is more about the resource context and utilizing the concepts of HTTP and REST. In general, intelligence in any aspect of application has a reference point to the context in which it is used. The more broad a context one incorporates into the application for aspects of knowledge and reasoning the lower the level of accuracy. This is because intelligence is learned and is best utilized by way of contextual specialization of concepts from which patterns and logical deductions for inference can further be derived dynamically. This can be equated to every aspect of Artificial Intelligence.