Articles


At SpinSpire we say, teaching is the best way of learning. So we are always teaching and learning. Here are some of the posts our developers wrote as a way of sharing and giving back to the community.

Nuggets of Rust

Some notes and resources I have put together as a quick cheat sheet of things to remember about Rust. It might help someone either refresh their Rust knowledge, or learn the basics for the first time.

ICS welcomes SpinSpire as technology sponsor

In the year 2010, a company was born when a volunteer decided to build a better website for a non-profit organization. One could debate if that website made a real difference in the profile of the non-profit, or set it off on a trajectory of growth and excellence. But one thing is clear, it defin ...

Porting scanner module to D8 - Part 2

This is a continuation of a previous post. If you haven't read it I suggest that you do so before reading further, otherwise you won't understand the context. Plugins Drupal 8 introduced the idea of ...

Porting scanner module to D8 - Part 1

This is the first part in a series of posts that I have written on this topic. In this first post I will discuss the reasons why I ported the module to Drupal 8 and some of the more basic module code (YAML files and forms). In the next post I will go over the Plugin system, how to write a custom ...

What I learned from porting the scanner module

Introduction I was recently given a requirement by a client in which they wanted content authors to be able to find and replace instances of words across potentially every piece of content in the site. This is a request that I've received in the past and have been able to solve the prob ...

Presentation: Rich Web Applications with ReactJS and Drupal 8

I gave a presentation on how to use Drupal 8 with ReactJS at Drupal GovCon in Washington, DC. The slides can be found ...

Building a Non-Trivial React App

Overview: Why React? Setting up a React project environment Basics of React Building and nesting components API and AJAX requests Adding Twitter Bootstrap for styling Why React?< ...

Creating an Express.js Environment with Webpack, React, and Babel Configurations

Overview Introduction Prerequisites Setting up Express Adding Babel to the mix Adding Webpack configurations ...

Creating a React Application with Headless Drupal 8

For this tutorial I will go over how to setup a Drupal 8 site with RESTful services as well as setting up a simple React application which will retrieve a list of Articles and allow for the creation of articles for logged in users with the proper credentials. Before working with React we will need to configure Drupal to provide us with some RESTful services.

Upgrading from Drupal 6

When Drupal 6 was released in 2008, it was major accomplishment of Drupal's Open Source community. It really established Drupal as the leading CMS platform with nearly unlimited extensibility. And the Drupal ecosystem flourished with thousands of contributed Open Source modules and themes. But th ...

Drupal pre-reqs: What you need to know before you start learning Drupal

I gave a presentation on Drupal pre-reqs: What you need to know before you start learning Drupal at DrupalCamp Atlanta on October 22nd, 2016. See below f ...

Event Sourcing as replacement for CRUD

Most developers are familiar with CRUD (create-read-update-delete) model of data storage in business applications. It is a simple model that has served us well so far. But the problem with CRUD is that it allows users (or developers) to modify history (change past). That might be okay for some applications (a discussion board, say), but not for all, such as financial accounting. In this article is a very gentle introduction to an alternative model, Event Sourcing.

Florida DrupalCamp 2016 Presentation: Drupal 8 development for Drupal 7 developers

On March 5th, 2016, SpinSpire team presented "Drupal 8 development for Drupal 7 developers" at ...

Location finder with zero coding using Drupal location, gmap and views modules

Drupal is a such a powerful and mature platform that you can build a full featured location finder (e.g. Store Locator) with zero coding, with judicious configuration and some fantastic contrib modules. ...

How to build a LEMP/Drupal Server VM in cloud

This video shows how to build LEMP (Linux+Nginx+MySQL+PHP) server VM in the cloud and run a Drupal site on it. The notes for the video are ...

Drupal-Angular Hybrid Apps

On April 11, 2015, I gave a presentation at Florida Drupal Camp about writing applications that leverage the power of both Drupal and AngularJS. The ...

Best approaches to Drupal migration

Migrating content and its linkages between sites has always been one the more difficult tasks to master in the world of Drupal. In the past, site builders and developers would have to write lots of code to set up the migrations an ...

Tweaking MySQL settings for better optimization

MySQL, as it comes out of the box on most Linux distributions, is reasonably optimized. But there are a few things you might have to tweak to get the most out of it. Here are my tweaks for Drupal, and most other applications that use MySQL. Don't edit /etc/mysql/my.cnf Nowadays, ...

Getting started with Jython

As you can guess from the name Jython is an amalgamation of the Python and Java programming languages. It is one of three implementations of the Python language, the other two being CPython and IronPython (.Net). Jython is one of the most mature JVM languages that is available on the Java p ...

Java: From Basics to RESTful Services

Why Java? Hundreds of reasons can be found with a single google search, but we all know Java language is not perfect, and so for every reason for Java, we can find an opposite. But the following two reasons are enough to convince anyone: leading development platform (brings business) and JV ...

Modern Web Applications

The way we (should) architect web applications today (circa 2014) is very different from how we architected them only a couple of years back. Different people give it different names, but they mean the same thing (I think): SPA (Singl ...

JPA Using NetBeans and MySQL

In this article you will learn how to quickly get started with JPA. I will be using NetBeans and MySQL database to store data using JPA. If you have MySQL running, all you have to do is follow the steps below. ...

Combining JPA and JAX-RS to create RESTful service

Java Persistence API (JPA) abstracts the database interactions and treats them as objects rather than simply queries. Since these queries are now objects, the principles of Object-Oriented Programming (OOP) can come into play including, encapsulation, abstraction, inheritance, and polymorphism. P ...

Creating a RESTful service with Java and Jersey with Netbeans

There are many ways to implement a RESTful service, but what if you need to do it in Java and you use Netbeans? I recently had a project like this and it was quite an experience to get my enviorment up and working. With Java, there are just so many ways to do it that it starts to look like too mu ...

Creating a RESTful API using Slim php framework

Restful architectures are often used to create client/server network environments. REST, which stands for representational state transfer, is a simpler alternative to SOAP and WSDL services, but still maintains great features like platform-independence and language independence. REST services exp ...

hiding user "history" and "member for" information from prying eyes

In Drupal, sometimes, you want to share user profiles with the world, but then they can also see the "History" and the "Member for" information about your users. If that information is not what you want to show the world, then all you have to do is implement hook_preprocess_user_profile ...

Display of different Views depending on the logged in User

Have you ever desired to have display of different View filter criteria depending on the user's role? There are two ways of achieving this, I will explain both the ways in this article.  In following example, I want to show 4 search criteria to a user with administrator role: Event title, ...

SpinSpire.com redesign

Welcome to the newly redesigned SpinSpire.com. It was on Drupal and it is still on Drupal, only better. We here at SpinSpire believe in eating our own dogfood. So we re-built our own site the way we would (re)build a client's site. The site is fully responsive. Made with mobile in ...

SpinSpire is proud to be JAXICS Diamond Sponsor

SpinSpire is delighted to support Indian Culturual Society of Jacksonville (JAXICS) with a cash donation of $2,500 and become their first Diamond level annual sponsor for year 2014. Indian Cultural Society of Jacksonville is a 501(c)(3) certified o ...

Drupal 7 - Bulk Field Update on Demand

While building an event organization website, there was a requirement to have each event approved by a legal department before the organizer was allowed to publish any event. A custom status field with conditions based on this field was the best approach. Updating / rewriting a fi ...

Migrate/Migrated2d: Linking Migrated Nodes To Non-migrated Terms

Migrate and Migrate d2d modules expose a powerful API to developers who have the task to migrate a part or an entire website to Drupal 7; these two modules come in handy whenever the migration task is subject to complex business rules. One short article is far from being enough to offer an in-dep ...

Dual DB Schema Setup with Drupal

Anyone that has worked on an enterprise level Drupal application knows that having the transactional consumer data separate from your content will save you time and headaches during a release. With Drupal this is very much possible and it's fairly easy to setup. This can be setup with the DB on a ...

Developing your first iOS Application

Developing an iOS application may seem like a daunting task for one to complete, especially if you are not familiar with the Objective-C language and its syntax. However it’s actually not all that difficult to create a basic hello world like application with very little knowledg ...

Drupal Module Folder Organization

Organization is important for any Drupal site larger than the simplest of blogs. It is paramount for multi-site installations that are already bulky with numerous site folders, themes and subthemes. I have observed that if I don’t maintain a good organizational format within my multisite structur ...

Making Vim Syntax Highlighting Work Inside Git Bash

If you have used Git Bash and its Vim, which both come as one package, you have probably stumbled on the issue of making syntax highlighting work. Whenever you type the command “vi file_name” in Git Bash and type, for example, some php code, you will see the plain white ...

Creating CSS3 WebKit animations

WebKit is a layout engine software component for rendering web pages in the browser. It can easily be used to give HTML elements animations and properties involving movement. In this article I will be explaining some example code I wrote below. No Imports are required to use WebKit. You b ...

Creating a responsive webpage

Having a responsive website is almost mandatory in modern web development. The way people view websites has changed. People use their phones and tablets almost more than their desktops and laptops. This means people will be viewing your site on mobile devices. Luckily, there are a couple ways to ...

Easily creating a GUI in Java using Jframe in NetBeans 8.0

This guide will show you a quick introduction on using the JFrame tools in NetBeans to easily create a GUI for your java programs. NetBeans provides a user interface that allows you to very easily generate your GUI without having to hand code it yourself. This will organize your code and allows y ...

Getting Started with Wordpress Plugin Development

Writing plugins for Wordpress may seem like a daunting task if you're new to Wordpress. But all it takes is a good starting point to get the ball rolling. Today I'll show you how to get started with your first simple Wordpress plugin. For this example, we will be making a plugin that automaticall ...

Choosing between PHP, Lua, Go

I have recently spent quite a bit of time trying to come up with a better way to implement RESTful service that serve data in JSON. This is because most of our work these days involves writing client-side JavaScript apps that present a rich UI in the browser and then do all server-side interactio ...

Creating the parallax effect using Javascript and CSS

The parallax effect, or scrolling parallax effect, has become popular on modern websites. My favorite example of the parallax effect is implemented on http://boy-coy.com/. You may be thinking to yourself that this looks difficult to implement, but actually it's i ...

SMTP relay via Mandrill Service

If you have ever tried to send emails from your dedicated server in the cloud to either a mailing list or to individual users of your site, you would know that it is not as simple as it sounds. Depending upon the reputation of the IP address asigned to your server, many large email providers migh ...

We are hiring!

We are in need of smart and motivated developers to come and join our team. We do not ask for any specific skill-set. That's because we train you! The only requirements are ... You are smart. That means strong analytical abilities. You know, the kind of person who ...

Writing directly executable drush scripts

Often we write "drush" scripts to do Drupal task automation. For example, if you want to do delete domain_conf variables on your website, you might write a script like this ... &lt;?php ​​​​​​​$variable_name = 'foo'; $domains = domain_domains(); foreach($doma ...

Integrating Apache Solr with Drupal Autocomplete

Although Drupal has a good built-in search functionality that coumes out of the box, sometimes a client wants something more advanced and feature rich that scales well for a quickly growing website.  This is where Apache Solr comes into play.   ...

RESTfully creating a repository in BitBucket.org

Creating a  Git repository is simple, using the excellent BitBucket.org service. It can be a chore to go to the bitbucket website and manually creating new repositories every time, though. Since it is bitbucket, and Atlassian, they have exposed a very nice REST ...

Drupal jQuery behaviors

In this article, I try to explain "Drupal Behaviors". Drupal provides a very clean way of attaching JavaScript code to HTML components. It includes jQuery library with it. So you have to do nothing to add jQuery to your app. But on top of it, you also don't have to attach onload event handlers in ...

tikkits.com bags ticketing and seat selection for 3 Shankar-Ehsaan-Loy shows

Tikkits.com will be the exclusive online point-n-click seat selection and ticketing service for Shankar-Ehsaan-Loy shows in Los Angeles (June 2, 2013), Atlanta (June 23) and Tampa (June 29).  ...

Florida Drupal Camp 2013

SpinSpire participated in the Florida Drupal Camp 2013 on April 20, 2013 with presentations on ... ...

change default comment color in vim

On Debian systems (and perhaps on other linux distros as well), the foreground color of comments is blue by default. This looks quite unreadable on black background, which is the case for most terminal windows. ...

Automating Drupal user login and maintaining session in curl

Using the services module in Drupal to expose CRUD operations on nodes is a great way to expose RESTful service from Drupal. All you have to do is to enable rest_server sub-module and create a REST server in it. Now you start fetching your nodes in ...

SpinSpire launches DataWizard.me

SpinSpire has launched DataWizard.me, a data visualization portal for the wind industry.  DataWizard.me automates daily data collection, insertion into a database, and charting of wind data at various levels of aggregation.  A custom chart, called Wind Rose, ha ...

SpinSpire launches CMCrossRoads for TechWell

In January 2013, SpinSpire launched CMCrossRoads.com, an online community serving Configuration Management professionals.  CMCrossRoads has a community of tens of thousands of users and thousands of content no ...

tikkits.com is the point-n-click seating portal for Sunidhi Chauhan shows

tikkits.com is proud to be the exclusive online ticketing with point-n-click seat selection for Sunidhi Chauhan's shows in Orlando on March 31, 2013 and ...

Drupal Zen theme and SASS

Zen is one of the best themes (in terms of solid, clean foundation) out there. And 7.x-5.x release is even better than previous ones. It comes with a drush command to create Zen subthemes in seconds. It also ...

SpinSpire launches AgileConnection for SQE

On December 17, 2012, SpinSpire successfully launched AgileConnection, an online community serving software professionals on the topic of agile development.  AgileConnection has a community of tens of thousands of users and thousand ...

Building a killer PHP/Drupal dev environment

I had the pleasure of giving a presentation at the last Jacksonville Drupal Meetup - Building a killer PHP/Drupal dev environment. Building a local environment for beginners and more advanced high performance environments: Here's what I covered: Web server:  ...

GSNEF's Diwali 2012 "sold out" on tikkits.com

tikkits.com was the exclusive online ticketing and seat selection service provider for the Diwali 2012 show and dinner hosted by the Gujarati Samaj of Northeast Florida.  tikkits.com sold about $50K worth of tickets. This event featured ticketing for both assigned and unassigned seating. ...

SpinSpire releases top-level Drupal project - Popular Tags

I'm very pleased to announce that SpinSpire has released and published on drupal.org as top-level project - popular tags (http://drupal.org/project/popular-tags), Drupal module for better taxonomy tag selection (details below). ...

Mika Singh in Atlanta--Another successful event on tikkits.com

Tikkits.com was the exclusive online seating selection and ticketing for the Mika Singh in Atlanta show on November 2, 2012 at the Atlanta Civic Center. ...

Reduced Drupal bootstrap for better performance

Did you know you can use Drupal in your custom PHP scripts, outside of modules? Possibly. But did you know that you can make your scripts much faster by reducing Drupal's bootstrap levein your scripts? Read on to see how. The following script reads the first 20 nids (node-ids) ...

DrupalCamp Atlanta presentation - Build a Complete Business App with Webform Module

I had the pleasure of giving the following presenation at DrupalCamp Atlanta. The complete presentation PDF is ...

Tikkits.com makes a splash--tickets worth about $190K sold on tikkits.com

Tikkits.com was launched in August 2012 with Shreya Ghoshal shows in Orlando and Atlanta. The launch was a phenomenal success. $190,000 worth of tickets were sold. Both venues were sold out, each with 2,500+ seats. ...

Presenting at DrupalCamp Atlanta

I hope you're going to attend DrupalCamp Atlanta . It is less than two weeks from now - Oct 27th. There is a great lineup of presentation sessions. You can browse the list here . I also happen to be presenting -  Build a Complete Business App with Webform Module . Here's the abstract. I'l ...

MySQL Server has gone away!

While using or coding Drupal, if you come across an error to the effect "mysql server has gone away", right in the middle of a request, you may need to do the following. Find the my.ini file under MySQL server installation directory (mine is under "data" subdirectory), and in the "[mysqld ...

Go language runtime on Google App Engine

I am beginning to play with Go language runtime on Google App Engine. I am sharing the source code of this app at https://bitbucket.org/jitesh_doshi/gogae, and I have deployed it at  ...

Tikkits.com goes live with two events

SpinSpire launches Tikkits.com with two mega events for Paracha Entertainment.  Tikkits.com opened the online ticket window on August 10, 2012 for live performance of Shreya Ghoshal in ...

Tikkits.com launched at the first Jacksonville Startup Weekend

See Jacksonville Business Journal article in January 2012 about Tikkits.com at the Jacksonville Startup Weekend, Cool ideas from Jacksonville's first Startup Weekend ...

accessing a remote MySQL server locally using SSH port forwarding

If you have a shared hosting or VPS hosting account, you probably have a MySQL server on it. And in order to access it (run SQL commands), you typically end up firing up the command line 'mysql' client. No matter how handy you are with the command line, at least of database access and manipulatio ...

Replacing your Android phone OS

If you have one of the Android-based smart phones then you might not be getting most out it. That's because the distribution of Android that it comes pre-installed with is unnecessarily is bloated and crippled at the same time. You have the choice of installing a lighter and more capable distribu ...

Displaying clickable popular tags

&lt;p&gt;&amp;nbsp; &amp;nbsp; We recently worked on creating a list of tags most frequently used by visitors (it is a question-answer forum), with the number of tags specified by the site administrator, with a choice of &#039;0&#039; or a blank field indicating that all terms from a vocabulary b ...

page caching gets in the way of token substitution

Recently, I wrote a module that exposes my own custom tokens. They worked well, up to a point. But when I tried to use them in the middle of the content of an article, they were not reflecting the latest value. That's because of page caching. The page content is cached by Drupal, and the changing ...

Slideshow Creator

 This is an example of the use of slideshow creator within articles. The slideshow creator input format has been enabled in the text-formats configuration. This allows users to simply write in the slideshow statement as a part of their article content, the statement then being transformed into a ...

SpinSpire hosts Web & Mobile Tech Meetup

SpinSpire will host the first Web &amp; Mobile Tech meetup in Jacksonville on April 30, 2012 from 6 to 7PM. Location: 9551 Baymeadows Rd, Suite 18 Jacksonville, FL 32256 This is a meetup for a group of people who are interested in mobile technology (native apps, m ...

nginx+php-fpm+Drupal on Linux

Nginx is a high performance lightweight web-server that is visibly faster than Apache and takes less memory. On my machine, Drupal's module list page (admin/modules) comes up within 2 seconds on Nginx, while on Apache 2.2 it takes over 4 seconds (as measured in Chr ...

SpinSpire to host Drupal meet

SpinSpire will host the second Drupal meet in Jacksonville on April 17, 2012 from 6 to 7PM.   Meeting Agenda: Welcomes to new members/introductions DrupalCon Wrap up from Jitesh Site overviews of Florida Blue and Jacksonville.com ...

SpinSpire Drupal Training is in full swing

SpinSpire's current batch of Drupal training is at halfway point. We have completed 2 weeks of training and 2 weeks to go. The training teaches Drupal (content management, configuration &amp; coding), jQuery, JavaScript, Linux, Git, HTML/CSS and much mo ...

installing git-flow on Ubuntu Linux

If you have heard of Git Flow, and you use ...

Adding roles to users on account creation

On one of the Drupal 6 projects we had the need to assign a specific role to all users who create their own account (by visiting 'user/register'). Let's say the role is 'abc' and the role id (rid) is 3. So every new user should have the 'abc' role automatically. After much reseach I found the win ...

SpinSpire releases OpenID Helper module

We are pleased to announce the beta release of our OpenID Helper Drupal module (see http://drupal.org/sandbox/jitesh_doshi/1460772). OpenID module, included in Drupal core, is very useful, but not very user-friendly. It ...

SQE selects SpinSpire

Software Quality Engineering (SQE), an industry leader in conferences, trainings and online communities has selected SpinSpire to design and develop their Drupal-based community web portals. SQE delivers training, sup ...

SpinSpire releases Webform Single Use Options module

&lt;p&gt;SpinSpire is pleased to announce the beta release of our Webform Single Use Options Drupal module (see &lt;a href=&quot;http://drupal.org/sandbox/jitesh_doshi/1439044&quot;&gt;here to view&lt;/a&gt;). Webform modu ...

Automatic Drupal site deployment with git

In this article I will show how to setup git and Drupal in such a way that you can keep editing your site's modules, themes and libraries on your local machines and every time to do 'git push' it automatically deploys to your pubilc Drupal site - without having to login into your webhosting provi ...

Paypal IPN verify fails without SSL in sandbox

I was testing a new module I am writing. It is designed to receive IPN (instant payment notification) postbacks from Paypal. And when the code receives an IPN postback, it in turn calls Paypal again and asks Paypal to verify that the given IPN is real and not fake. Paypal is supposed to look at t ...

mimemail attachments - order matters

I wrote a module that generates PDF and attaches it to an email using hook_mail_alter(). It took me a while to figure out that I cannot add the attachment simply as a string in memory. I had to write it to a temp file first. And then my hook_mail_alter() implementation ... /** * Hook ...

URL rewriting within Drupal

You probably already know how to do URL rewriting using Apache. Here's how you can rewrite paths within Drupal. Added a function named "custom_url_rewrite_inbound" to your settings.php file. function custom_url_rewrite_inbound(&amp;$result, $path, $path_language) { ...

Adding Simple Payment Processing to Drupal Site

I had a need to add simple payment processing to a Drupal website; I did not want to use Ubercart or any other eCommerce modules, or CiviCRM.  Here were my basic requirements: Users ...

Commercial Companies running Drupal

We have often been asked for examples of high traffic sites that run Drupal.  This is an attempt to create a running list of commercial websites. Al Jazeera.  As one would expect, the democracy movement in the middle-east caused a huge spike in volume.  Drupal on Acquia cloud was a ...

Using Colorbox to show your node images in Drupal 7

Drupal 6 is very good. But Drupal 7 is even better. Much cleaner user interface (UI), and much cleaner application programming interface (API) as well. Today, I'm going to talk about Colobox integration in Drupal 7. With Colorbox in D7, you can show your attached images in a very user-fri ...

Limited supply options lists in webforms

In Drupal webforms, often we come across situations where we have select component (displayed as select list, radio buttons or checkboxes) in a webform, but we don't want multiple submissions to use the same options. For example, when people are reserving seats for themselves using your ...

Enabling Drupal website for access by mobile devices

Rich content of a Drupal website looks good on a large screen, but is, at best, difficult to read and use on a small screen of a smart phone. This article will describe a way to customize a drupal website so that it works well on both big and small screens.  Following a list of desired functional ...

Altering Email template in CiviCRM module of Drupal

CiviCRM uses a server-side scripting language called Smarty in order to access server-side variables, perform logic and work with a template to generate a webpage.  The overall flow is:  All the business logic is done by PHP a ...

How Drupal can cut time and cost for Enterprise Applications

When I first discovered Drupal, I thought it was a very usable CMS (Content Management System) for building dynamic websites. I discovered that it was even truer than I had first thought. Drupal does an excellent job as a CMS. The multitude of modules the ...

implementing hook_flag_access for controlling what the user can flag

Recently, a client wanted their site users to be able to show their support for certain content nodes in Drupal. This can be done very nicely with the flag module. In case you missed it, flag module is a very useful module that has many ...

SpinSpire to build consumer marketing web portal for a large health insurance company

SpinSpire has won a contract to design and build a health insurance shopping portal for a major healthcare provider in Florida. SpinSpire was chosen by a global, multi-billion dollar software and consulting company, and Drupal+ ...

SpinSpire launches ICS website

SpinSpire has launched the highly interactive jaxics.org website that it designed and built. The website features, membership management. payment gateway integration and heavy content mangement. ...

SpinSpire to take specialty brick-and-mortar chain online

SpinSpire has signed defitivie contract with a Florida based brick-and-mortar specialty store chain to develop full feature online store. ...

SpinSpire launches Innovative Wind Energy website

SpinSpire has launched Innovative Wind Energy website that it designed and built. It is a company website featuring content magement, user sign ups, newsletters and many interactive features. ...

SpinSpire launches GSNEF website

SpinSpire has launched the highly interactive GSNEF website that it designed and built. The website features, membership management. e-store, event management, ticket sales, payment gateway integration and heavy content mangement. ...

SpinSpire launches India Fest website

SpinSpire has launched the India Fest website that it designed and built. It features heavy content management, vendor signup and interactive forms. ...