Everday XPath - Node Test

This blog post is part of a series on XPath. The content comes from my ebook EverydayXPath. Part of the content from the book will be released to the public as blog posts. In this post, we learn about the only mandatory part of the XPath expression: Node Test.

Everday XPath - the Expression

This blog post is part of a series on XPath. The content comes from my ebook EverydayXPath. Part of the content from the book will be released to the public as blog posts. In this post, we explain what XPath does. We disect the components of an XPath expression. And why the context is the key to forming the expression.

Writing an Ebook

I spent the past 3 months writing an ebook: EverydayXPath. The idea came as I needed to write a Selenium script. Naturally I needed to use XPath for selecting nodes on the web page. As I was googling for solutions, documentation on XPath felt inadequate. I needed good examples and coherent explanations for the various operators. XPath and CSS are the two common query languages for querying XML/HTML documents. I felt there is a opportunity for a niche product. Let me share the setup I used for writing the ebook.

A Firing

I was hooked by the documentary series: Chef’s table. Each episode is about a famous chef. What hooked me was how human each of them was. They are not famous by default. Everyone of them had their struggles. Each of their journey to the zenith was hard. Perhaps it is cultural. We are taught to portray ourselves as successful, taught to hide our own imperfections. If Chef’s table is angled to show how good the chef was, how talented they are, I wonder, would the viewer relate personally to the chef? It is because they are imperfect and everyone is, that they connect.

Likewise, I am hardly perfect. I’d like to share a story of one of my failures. I’m seeing some of the people around me making the same mistakes. In my naive thinking, my stories might prevent the reader from falling in the same pothole. We should learn to celebrate failures. What failure is worse than being fired?

How Does FreedomVPN Work

I just watched the Champion’s League Final streamed live on my laptop. I watched it on PPTV in Singapore. This is made possible by FreedomVPN(Which amazingly, does not have a landing page of its own where I can link to). Recently, I switched my ISP(Internet Service Provider) to Viewqwest. This far, so good. Their product FreedomVPN, has opened the door to enjoying Internet TV from most of the popular content sites of the world. To many, it is like voodoo. Let me try to explain in broad strokes how they did it. Disclaimer: these are my conjectures and has not been validated with Viewqwest.

How to Set Up a Remote VPN Using Sophos UTM

My office has a Sophos UTM. It acts as a firewall for the office network. We also use it as a VPN server. It allows us to access the machines in the office network. More importantly, it allows remote users to access the servers. Our servers have access restricted to a white listed list of IP addresses. This way, we only open up the white list to the office network. This allows our people to work from anywhere. We don’t have to keep updating the white list of IP addresses. When I tried setting it up, I could not find articles documenting how to do it. Hopefully it will point you in the right direction.

The Tyranny of Billing

Billing is a critical function of any business. It is more than just collection of money. What better way than to tell a story.

How to Deploy a Standalone Server App

This post shares my experiences deploying a standalone application on a remote Linux server. By standalone application, I mean that the application is packaged as a single file. It could be a jar file or an executable packaged from Java/Scala/C/Haskell/etc. In my case, it was a jar file. My server is Ubuntu 14.04. My automation tool is Ansible and a dash of shell scripts. The process is very much influenced by Capistrano, a tool that is very popular for deploying Ruby web applications. There are three aims. One, I want to deploy in one step. Two, I want to version my deployment. Three, it should cater for easy rolling back.