My first day with an Arduino MKR GSM 1400

I have a project in mind that needs internet connectivity but I won’t have access to WiFi so when I saw the Arduino MKR GSM 1400 with it’s GSM capability I thought I could use it to send my data over 3G.

Before I get to trying anything like that this is my experience using it for the first time.

Where do I put the SIM Card

I already had a SIM Card from GiffGaff to use I just needed somewhere to put it.

Spoiler alert: it’s on the bottom.

The bottom of the Arduino MKR 1400 with the SIM card slot on the right

The bottom of the Arduino MKR 1400 with the SIM card slot on the right

I was looking at the board still stuck in the soft foam and couldn’t for the life of me find the SIM card slot until I turned it over.

First Sketch

As you’d expect there is all the information you need to know about getting started on the Arduino website.

I followed the instructions and had the classic blink sketch up and running in seconds.

Second Sketch

I found a simple sketch that uses the GSM library to send a message. But that gave me the following warning

WARNING: library {0} claims to run on {1} architecture(s) and may be incompatible with your current board which runs on {2} architecture(s).

This was caused by including GSM.h rather than MKRGSM.h

From there I went to the MKRGSM Library page which has some useful examples including one to send an SMS message.

The sketch uploaded sucesfully but it got stuck on connecting.

I swapped the new SIM card for the one I use in my phone and that one worked. So I tried the new SIM card in a phone and it worked fine. I put the new SIM back into the Arduino and tried the sketch again, and still no joy using the new SIM card.

The top SIM does not work in the MKR 1400 but the bottom one does

The top SIM does not work in the MKR 1400 but the bottom one does

Going Forward

Overall the board was quick and easy to get going with. The hardest part is going to be figuring out why the SIM card isn’t working in it. Hopefully I can sort that and then get on with utilising the board in some projects.

 

Posted in Arduino | Tagged | Leave a comment

Customer Service as a Service

In my younger days I worked in a surf shop where the owner was very hot on customer service. He liked us to greet every customer when they entered and left. To start with this seemed quite unnatural and the odd customer even seemed confused. In general though it did open up communication and people seemed genuinely happy with the interaction even when you said thanks to them for leaving empty handed.

Now I’m a web developer and spend the majority of my days sat in a room by myself but customer service is just as important. With you’re building an agency building a site or working on an app you will have customers and they deserve to be treated well.

These days there are many developers and agencies out there that all do fantastic work. You can no longer rely on being a scarce resource. Providing great customer service goes a long way to making the project enjoyable and successful as well as paving the way for repeat business and recommendations.

Be polite

It may seem like basics you teach small children but remembering to be polite in the digital world so not be taken for granted. A simple “thank you” when the client helps by sending you the updated text or images you requested sets up a good working relationship.

It’s their site, they use it, try to accommodate them

You may not always agree with your clients requests and often this comes down to opinion. At he end of the day they are the ones who are paying for a website and will have to live with it everyday.

As an example there maybe a content management task with two options.

  1. Simple technologically but harder for the CMS user
  2. Harder technologically but makes the CMS user’s job easier

Always try to go for option 2. I often find it’s the small things that make people’s lives easier that are most appreciated.

They may not understand as well as you, try different explanations

If only clients could see what I see in my head. Everyone learns and understands differently and concepts that make perfect sense to me about a database can be baffling for others. There are many times you will need to take a different approach to explanations to help clients understand your concept.

For me nothing is better than quickly mocking something up so we are all looking at the same thing rather than relying on a fuzzy dewscription that can easily be interpreted wrongly.

Check they understand, ask if they are happy

Sometimes people end up agreeing when they aren’t 100% sure of the outcome. There is always lots to be thinking about in web projects. Taking a few seconds at the end of a discussion to ensure everyone understands the next steps and they are happy with them can save doing unnecessary work when the client reveals this wasn’t what they really wanted.

Give options

I find there is rarely a single option for solutions. Many times it’s a case of there being at least two ways we could achieve a task, both of which come with pros and cons.

Using the above advice provide the client with the options and a clear explanation of the pros and cons and let them decide their preferred implementation.

It not just for customers

Looking back at my time in the surf shop it didn’t take long before I was chatting to everyone I came into contact with and I instantly recognised how this simple act made all interactions easier and more enjoyable. All of the above points can be applied to your colleagues as well.

For example if a designer comes to you with an idea for an interactive menu there maybe two ways it could be implemented on the website. Discuss the merits of each idea and which will benefit the design the best and everyone will be happy. The designer gets to choose the best visual and you don’t get a technically impossible PSD.

Posted in Uncategorized | Leave a comment

Back End Developers – Goalkeepers of the Web

When I was younger I wanted to join a football team. I had visions of scoring the winning goal and being the hero. Unfortunately I turned up with a pair of goalkeeper gloves, one of the others on the team decided I must be a goalkeeper then. And that’s the position I played for many years, and I loved it.

Now I’ve been a backend developer for many many yeas and I love that as well. For me there are some obvious parallels between the two roles.

Even a small mistake is a big mistake

I clearly remember charging out of goal to meet the incoming ball and blast back down the pitch to start an attack. Instead it bounced higher than I anticipated and went over my head. For any other player on the pitch and this wouldn’t have mattered but for me it meant we conceded a goal and were now losing.

As a backend developer a tiny mistake such as a missing semi colon can bring a whole site down. Compare that to front end where missing out whole closing tags can often be rectified by the browser. Those front end developers don’t know how easy they have it, is that why we make them learn a million different JavaScript frameworks and throw in inconsistent box models in browsers.

Leading from the back

One of my favourite parts of football was corners. I’m very average height but I can jump a lot higher than most people. I used to love to come running out, jumping through the air with a loud shout and claiming the ball. It let everyone in the team know I was there and taking care of my job.

Providing a solid back end for others in your team is critical to building successful websites and applications. From mapping out database architecture to providing valuable end points, your work is what feeds the output and allows for the rich content we have come to expect today.

I always evangelise the value of having a good base to build on. If we can have the data in a good format to begin with then pulling it out again in desired formats and combinations becomes a lot simpler. The phrase “S**t in, s**t out” is very appropriate here.

Embrace your personality type

Every year when we ordered a new team kit I was handed the brochure to make my choice. I flicked through and stopped on the one that was the brightest and loudest. I’ve heard many others, including professionals, talk about goalkeepers having a certain personality type and I could definitely relate.

I think back end developers also have a clear personality type. We are very analytical and love a problem. There are plenty of times I see my colleagues design work and think “I wish I had the design eye they have”, but I don’t, and I encourage you to embrace your place in web development that is such a wonderful ecosystem of so many different types of people.

A closing note

After the ball bouncing over my head incident I cried on the way home. In my first developer role I deleted a colleagues database they’d spent all morning crafting. I didn’t cry but did feel very very bad and spent the rest of the day helping them restore it. Individual mistakes happen but with a good team around you those mistakes will become tiny blips.

Posted in Uncategorized | Leave a comment

Make working from home work for you and your team

When I started working for Headscape I also started working from home. Our office is a 3 hour drive form where I live so commuting isn’t an option and as a family we were not looking to relocate.

In the past few years I’ve learnt a lot from home working and how to make it work for me and our team. Here are some tips that I have found smooth the process.

Be Sociable

We’ve used various chat tools to communicate over the years and I always ensure that I’m signed in and active.

A simple “Good morning” to everyone lets your team know you are at work and instantly opens up the opportunity for any dialogue. I like to think of it in the same way you would see someone is at their desk in a shared office.

On the flip side of this if you need to be left alone to really dig into something just let everyone know and either turn off communication tools or set yourself to away.

Be Consistent

It helps that I have a young family so keeping consistent work hours is good for family life. I find it’s also good for work life balance. I have clear start and end times and this stops work bleeding over into my outside work time.

I’m sure it would be very easy to start a bit late, have a longer lunch, then keep working into the evening. This could easily feel like you had actually worked all day long.

Be Available

Similar to being sociable I, nearly, always like to have some form of communication open. A quick response in Slack or a 5 minute chat on Skype can really help out another member of the team.

This is the sort of thing that can help a team be at it’s most productive and reduce any negative impacts of not being in the same physical space.

Be Grateful

Working from home is a great benefit for me and I feel very lucky that I have a job that can so easily allow me this privilege. It’s very easy to get caught up in the day to day of work, but every so often I remember how nice it is that I have that extra time each day saved by not commuting and the fact I’m there to see my children as they head off to school and when they return home.

Be Whatever

These are my experiences from the past few years and I appreciate everyone has different ways of working. Overall I would encourage individuals or companies to try home working and make it work for you.

Posted in Uncategorized | Leave a comment

Find total rows by day created with PHP and MySQL

I was recently asked by a client to produce a report of content posted by day. My first instinct was to query the database for all rows of the particular content type and handle the counting in PHP.

First Idea

  1. Query the database for all rows of content type X
  2. Create an array in PHP of days
  3. Loop through all rows
  4. Use PHP to figure out the day the row was created
  5. Increment the array element for that day

This seemed pretty inefficient though and felt like something some SQL could handle far better.

SQL Implementation

MySQL offers the WEEKDAY function that returns an integer showing the day of the week for the date it is passed. With “0” being Monday, “1” being Tuesday etc.

The next slight problem I had is my dates were stored as timestamps and weekday requires a date in the YYYY-MM-DD format, you can also optionally pass in hours, minutes and seconds.

MySQL functions to the rescue again. This time we need FROM_UNIXTIME function. This function takes a Unix timestamp and returns it in the correct date format for WEEKDAY.

I then did a loop from 0 to 6 and stored the results in an array for output.

The loop with query in ended up as follows. I am also using the MySQL COUNT function to just return the number of results as that is all I am interested in here.

$contentCount = [];

for ($dayCounter = 0; $dayCounter <= 6; $dayCounter++) {

$contentCountSql = "
 SELECT COUNT(c.id) AS contentCount
 FROM content c
 WHERE c.type = 'x'
 AND weekday(FROM_UNIXTIME(created)) = :dayCounter;";

$query = $PDO->prepare($contentCountSql);

$query->bindParam(':dayCounter', $dayCounter, PDO::PARAM_INT);

$query->execute();

$result = $query->fetchObject();

$contentCount[$dayCounter] = $result->contentCount;

}

$PDO is a PDO connection to the database.

We loop through and get the number of rows, using COUNT, for each day and content type X.

This stored in an array with the key equal to the MySQL day and the value being the count.

So Monday would look like

0 => 763

Tuesday would look like

1 => 542

Posted in Uncategorized | Leave a comment

The Power of Knowledge Sharing

The web is constantly developing and growing at a fast pace. I often wonder how beginners even know where to start and marvel at their ability to not be daunted by the myriad of options available to today’s developers.

I started my web developing career when there was a clear distinction between HTML, CSS and JavaScript. I remember using table based layout but quickly processed to floats for layout and some simple JavaScript for things like rollovers.

With all the new technology and techniques that are coming thick and fast it’s easy to feel like you are getting left behind. Being able to quickly learn new things quickly is a massive gain to you skills and this is where knowledge sharing can really come into it’s own.

Working with such a great team at Headscape means there is always lots of ideas being bandied around and everyone is vey keen to stay on top of their area. Now we are firmly using Drupal 8 for projects we decided we should try and make knowledge sharing more formal.

Documentation

We have created a site specifically to detail how to do Drupal 8 specific tasks. It’s becoming a great reference point and as people refer to pages other have created they can improve and contribute to them. This has the dual benefits of improving the documentation while allowing team members to quickly get up to speed with a task.

The way we have approached this is to document everything in a simple concise manner, imagining we were referring a junior developer to the documentation to help them learn. So it’s entirely possible that in the future this documentation can help other, not just the present team.

Presentations

When someone in the team feels they have something sufficient to share with everyone we do short presentations. Again this has dual purposes, quickly share knowledge with others and spark conversations. It often leads us off on tangents, relative ones though. This has helped clear up outstanding questions on numerous subjects.

Motivation

Being in a productive environment where everyone is enthusiastic to produce good work really rubs off on the whole team. Watching a colleague present on work makes me want to do the same and help those around me.

I appreciate I’m lucky to be surrounded with the team that I am and a lot of people in our industry are freelancers and work alone. If you are one of those people I’d strongly encourage you to find a community or forum where you can find others to share and learn with.

Posted in Uncategorized | Leave a comment

Drupal 7 Views Sort by Two Date Fields

To achieve this you will need to implement hook_views_query_alter() in a custom module. I did not do this in Views UI.

A recent project at Headscape required me to build view listing two different content types that would use two different date fields to sort by. For examples I’ll use the default basic page and article content types.

The Problem

Some content types need to be sorted on the node created date and others on the display date field.

Trying to use the Views UI to add the two sort fields would result in first ordering by node created, then ordering by display date which is not the result we were after.

The Solution

First we need to add a new field that we can sort by. This field will have the alias order_date.

To create it we check if the display date field is null, if it is order_date gets the node created timestamp. If display date has a value we convert it to a Unix timestamp and that value is assigned to order_date.

In hook_views_query_alter we need this code

$query->fields[] = array(
  'field' => 'IFNULL (UNIX_TIMESTAMP(field_data_field_display_date.field_display_date_value), node.created)',
  'alias' => 'order_date'
);

Next we need to add the order by clause. As this is the only field we want to order by we completley over write the order by array.

$query->orderby = array(
  array(
    'field' => 'order_date',
    'direction' => 'DESC',
  )
);

Put together hook_views_query_alter will look like this.

/**
 * Implements hook_views_query_alter().
 */
function MYMODULE_views_query_alter(&$view, &$query) {

if ($view->name == 'YOUR_VIEW_NAME') {

  $query->fields[] = array(
    'field' => 'IFNULL (UNIX_TIMESTAMP(field_data_field_display_date.field_display_date_value), node.created)',
    'alias' => 'order_date'
  );

  $query->orderby = array(
    array(
      'field' => 'order_date',
      'direction' => 'DESC',
    )
  );

 }

}
Posted in Web Development | Tagged | Leave a comment

Stepping back to move forward with ReactJS

I’ve been using ReactJS as I have been exploring Headless / Decoupled Drupal and have so far found it to be very nice to work with. However, as I am not overly familar with it I’ve found myself looking up lots of things to ensure I’m doing it “the React way”. This has meant I’ve been doing more React learning than I have Drupal learning.

My solution is to go back to an existing Drupal 7 project where I have a custom piece of search functionality and replicate it using JSON feeds provided by Drupal and a ReactJS frontend.

This has been really beneficial in my learning as I have very clea objectivies and expectations. It also means I am only focussed on learning one thing at time so I don’t skip around between documentation and tutorials.

If you ae just starting with ReactJS, or any othe JavaScript famework, and Drupal I would highly reccomend this approach to get a taste of what this decoupled appoach can bring to your skill set.

Posted in Web Development | Tagged , , | Leave a comment

Headless / Decoupled Drupal 8 First Go

The installation of a minimal Drupal setup is very quick and easy. From there I enabled a few modules and a theme to help me create some data.

  • Modules enabled
  • Field UI
  • Image
  • Views
  • View UI
  • RESTful Web Services

I also installed the Devel module to help with dummy content population of my content type Article.

A common function of a website is to list content in an order, newest items or most relevant, and paginate this list. In Drupal this is commonly done in Views.

I set up my view as follows

  • REST Export
  • URL of /api/articles
  • Display 10 items
  • Show fields

This is great, nice and easy and gives the JSON I want.

Now the questions began.

  • If I can set a URL for this how are the URLs structured for individual nodes
  • If my public facing site is example.com then do I need to access my CMS on a subdomain such as cms.example.com
  • How do I know the URL to paginate the Views output
  • Can it supply a next and previous URL, how about total number of page

There is a great discussion about React in Drupal core on the Lullabot podcast. At 48:58 they talk about the Drupal APIs and specifically Views. The current status is there are some in place but using Views is a workaround at the moment.

As I keep going hopefully some of these questions will be answered, and I’m sure there will be moe posts and more questions.

Posted in Uncategorized | Tagged , , | Leave a comment

Testing SSL certificates without a domain name

Recently at Headscape we were setting up a new server ready to launch a redesign of a site. Whilst testing we were accessing the site using the server’s IP address which works fine for checking everything is working, apart from when we needed to install the SSL certificate.

The SSL certificate is based on a domain name so going to an IP address causes the SSL certificate to warn of an insecure connection. Not very helpful when you’re checking to see if everything has been setup correctly.

This is the solution we came up with.

Say our server is on an IP address of 123.456.78.9 and the domain name is reallysecure.com

Adding an entry to the hosts file of

123.456.78.9 reallysecure.com

will cause the browser to go to the new server when we request reallysecure.com

The server will see that the incoming request is for the domain name that matches the SSL certificate and, providing everything has been installed correctly, we will be accessing the site over https.

Posted in Uncategorized | Leave a comment