Skip to content

Month: January 2014

How to hide Digg Digg on mobile devices?

I am using Digg Digg as a social sharing plugin for my WordPress blog and never had any issues so far until today. I received a comment from one of the readers on Reddit that the side bar apparently takes up all the space on mobile device.

Here’s a tip for you as a customer: that damn sidebar makes my experience terrible on mobile. I couldn’t even read it.

This is one of the last things that a blogger would like that the reader is not able to read what you have written.

I use another plugin from JetPack which enables the mobile theme on phones and tablets. It displays content in a clean, uncluttered interface, making it easy for mobile visitors to scan your site. Furthermore, it takes special care to make the mobile theme as lightweight as possible to ensure faster loading times.

It turned out the combination of JetPack and Digg Digg (and perhaps any other plugin which I am using) caused the issue. Anyhow, I wanted to solve the issue ASAP.

The easiest fix according to me was to prevent loading of Digg Digg if the device is a mobile. I went to the Digg Digg plugin directory and added a new function to detect if the user agent is a Mobile device. Not the best piece of code, but it works for the time being. If time permits, I would personally like to do it using jQuery and just hide or unload the Digg Digg div element.

function isMobile()
    return reg_match("/(android|avantgo|blackberry|bolt|boost|cricket|docomo|fone|hiptop|mini|mobi|palm|phone|pie|tablet|up\.browser|up\.link|webos|wos)/i";, $_SERVER["HTTP_USER_AGENT"]);

Call the isMobile function from dd_hook_wp_content and if it is, just return the content and prevent loading Digg Digg further.

    return $content;

Hope this helps if you let into this situation. And of course, if there is a better solutions, I would like to hear that as well.

First thoughts on Spire.Doc for .NET


While I personally don’t get many requests for Office Automation-type projects these days, as a consultant, it is good to have a go-to library to use should the need ever arise. Some time back, I was contacted by one of the sales executive from E-IceBlue to review one of their products Spire.Doc

Spire.Doc for .NET is a professional Word .NET library specially designed for developers to create, read, write, convert and print Word document files from any .NET( C#, VB.NET, ASP.NET) platform with fast and high quality performance. As an independent Word .NET component, Spire.Doc for .NET doesn’t need Microsoft Word to be installed on the machine. However, it can incorporate Microsoft Word document creation capabilities into any developers’ .NET applications.


How to get it?

Gone are the days when we used to get the boxed software and unboxing, unpacking them used to be an experience itself. You can download and eventually purchase the Spire.Doc from their website.


The Spire.Doc installation is clean, professional and wrapped up in a MSI installer. The first few slides are mandatory informatory and license agreement. By the way, when was the last time you read the whole EULA? Usually standard text, but if you are a company who is going to invest and use the product for commercial reasons than it’s a good idea to read the agreement for any software.

The Spire.Doc does not take much space (only 180 MB) for installation. Makes me nostalgic, not long ago (~ 10 years) most of were still happy with our 1.44 MB floppy disk drive.

The MSI option provides a full experience, including:

  1. Installs the assemblies (multiple assemblies to support different versions of the .NET Framework)
  2. Installs the demo projects with source code
  3. Installs the documentation locally on the developer’s machine
  4. Adds the assembly to the Add Reference dialog box in Visual Studio

After the installation, the developer must manually add a reference to the assembly. Locally-installed documentation is available by means of Windows HTML Help, which is completely available and searchable while disconnected from the Internet.

Hello World

One challenge that we had with writing the document generator all those years ago was finding an efficient way to insert formatted text into the document. Specifically, the resulting document contained sections of text, each with paragraphs and special formatting. Because of time constraints, the decision was made to not build a document on-the-fly by inserting text into it, but instead start with a document that had every possible section already in it (nicely formatted by a human), and then just delete sections based on the user’s input.

Let’s start with the customary Hello World program to write a small word document using Spire.Doc.

Here are the steps:

  1. I will use the good old Console Application project to demonstrate the program.

  1. Within Solution Explorer, go to Reference and add a new reference to Spire.Doc.dll

  2. I wanted to see how intuitive is the naming convention of Spiral.Doc are. So I started without looking at their documentation to juggle around and using the object browser to check the available interfaces. From my first guess, I thought something like below should help me to create my first output.

  3. The result? It worked flawlessly.

    If you have a license then the evaluation waning should go away.

  4. While we are already busy with it, let’s see if it is possible to export the word document to pdf or html.

    Well, not bad that just with one line of code I can convert and save my word document to pdf. This is quite handy for we developers as there are almost daily business requirements for creating or converting word t pdf documents. From my personal experience, this is one of the hottest questions daily on any forum.

  5. This was one of the simplest example, but there are possibilities to create document from reading html using a stream, inserting html, formatting the document or adding any meta data property to your document.

Supported File Formats

Being a developer, I am not a very big fan of large documentation. Although, Spire.Doc has documented and stated the file types they support. I went ahead and checked in their assembly enumeration what they actually support. The result was that it supports almost all major file formats you would encounter in your day to day basis.


Overall, I was impressed by the power and ease provided by this product. While it didn’t always do everything in the way that I thought it should, it is probably due more to my lack of understanding of how the Word document model works rather than a flaw in this library.

From a license and pricing overview, it’s not very expensive compared to other products in the markets which are offering the same functionality. Thus, a real value for money in my opinion.

Disclosure of Material Connection: I received one or more of the products or services mentioned above for free in the hope that I would mention it on my blog. Regardless, I only recommend products or services I use personally and believe my readers will enjoy. 

An introduction to Agile Methodology

Agile is one form of software development methodology. Its main focus is on client satisfaction through continuous delivery. The focus of Agile is more on limiting the project scope. An agile project sets a minimum number of requirements and turns them into a deliverable product.
Agile development methodology provides opportunities to assess the direction of a project throughout the development lifecycle. By focusing on the repetition of abbreviated work cycles as well as the functional product they yield, agile methodology is described as “iterative” and “incremental”. In waterfall, development teams only have one chance to get each aspect of a project right.
(Haag & Cummings, 2009) says an agile project sets a minimum number of requirements and turns them into a deliverable product. Agile means what it sounds like: fast and efficient; small; lower cost; fewer features; shorter projects.
In February 2001, the Manifesto for Agile Software Development (The Agile Manifesto, 2001) was created by seventeen people with desires to find alternative approaches to software development. Each of them played a prominent part in the opposition of the prevailing software development processes, which they considered rigid, heavyweight and too focused on documentation. Their response, summarized in the manifesto, clarifies their focus by valuing:

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

In agile literature, agile methods generally denote a family of methods under the umbrella of the Agile Alliance, including: extreme Programming, Scrum, Dynamic Systems Development Method, Crystal Methods, Feature-Driven Development, Lean Development and Adaptive Software Development. Although differing in specific techniques, these methods have much in common, including short iterative life cycles, quick and frequent feedback from customers, and constant learning. Among them, Scrum and XP/Scrum hybrid are by far the most widely adopted in the past decade. Agile processes bring about a dramatic increase in productivity and quality. This is achieved through a high degree of communication and interaction, short iterative development and a strong sense of team responsibility.
However, there have been some criticism of agile as well.

(Kruchten, 2011) compared agile methodology to a teenager: very self-conscious, checking constantly its appearance in a mirror, accepting few criticisms, only interested in being with its peers, rejecting en bloc all wisdom from the past, just because it is from the past, adopting fads and new jargon, at times cocky and arrogant.

(Boehm & Turner, 2004) convincingly argue that there is a pragmatic need to balance stability and agility. They analyze the home grounds of agile and traditional approaches based on application characteristics, management characteristics, technical characteristics, and personnel characteristics. Further, they assert that the choice of traditional or agile methods for a given project is largely contingent on five factors:

  1. The size of the systems development project and team
  2. The consequences of failure (i.e., criticality)
  3. The degree of dynamism or volatility of the environment
  4. The competence of personnel
  5. Compatibility with the prevailing culture

(Krill, 2013) also pointed out that barriers to agile adoption include an inability to change an organization’s culture, followed by general resistance to change and trying to fit agile into a non-agile framework. The framework for organizational change articulated by Adler and Shenhar (1990) is useful for assessing the effort required to meet these challenges. The biggest concerns about agile include lack of upfront planning, loss of management control, and management opposition. Other reasons include communication problems between development teams and other areas of the business and problems with the Scrum master.

Framework for Organizational Change (Adler & Shenhar, 1990)

Further Reading

A Beginners Guide to Scrum

Cohn, M., 2010. Succeeding with Agile. 1st ed. Boston: Addison-Wesley.

Wanga, X., Conboyb, K. & Cawley, O., 2012. “Leagile” software development: An experience report analysis of the application. The Journal of Systems and Software, Issue 85.