Preparing for Life After Windows 10

By | Ideas For Your Business | No Comments

Information Age, a publication that specializes in creating trusted environments to connect business with providers of information technology products and services, has published an article detailing how rugged mobile device users can prepare for life after Windows.

Sourced by Marco Nielsen, vice president, Managed Mobility Services, Stratix Corporation and Brett Cooper, partner, Enterprise Mobility Strategy, BlueFletch, the article defines and explores the three key steps enterprises must take to make the transition to a new OS.

To read the article in full, click here.

Ladies Made the Midtown Alliance Member App

By | Ideas For Your Business | No Comments
In early 2017, an all-female project team from BlueFletch was sent out to make the Midtown Alliance mobile application. There was no specific plan to draft a team of only girls, but as the resources fell, so female the team was. I (Kira) did business analysis and project management, Nicole made a delightful design, Alli cranked out the React Native iOS and Android apps, and Wanita QA-ed the finished product until it hurt.
Midtown Alliance, WIT, Women in Tech
Midtown Alliance, WIT, Women in Tech
Midtown Alliance, mobile app dev, women in tech
Midtown Alliance, Women in Tech, WIT

The Midtown Alliance Member App allows MA members who live or work in Midtown to redeem deals at neighborhood businesses.

While there is nothing remarkable about any one of us doing the particular job that we were assigned to do, statistically, it was improbable that we would find ourselves as a group of all girls (At BlueFletch, there is currently a 3.13% chance that a random four-person project team would be all-female). The composition of our team was unique enough to be noticed and positively reflected on by our client, Midtown Alliance.
So what does a lady tech team look like?

Read More

Beginners Guide to Voice Services In the Age of Digital Assistants

By | Internet of Things, IoT | No Comments

Leveraging your voice to initiate a command, start a service or even change the channel has been around for years. I remember in my grade school days hearing the voice of my parents or grandparents to fetch them something from the other room, change the channel on the television or even just to be quiet. These days, kids have a lot of distractions, from tablets to noise canceling headphones, rendering those ‘old school’ personal assistants no longer available.

All jokes aside, digital assistants and voice driven interactions are becoming commonplace as voice services increasingly improve. BlueFletch has been fortunate enough to work with clients across an array of industry verticals to explore how voice services will impact their organizations. We’ve helped our clients leverage voice services for more impactful engagement with their customers, allowing them to engage customers in new ways and capturing metadata that would be lost during a normal human interaction. Other clients are increasing the efficiency of their workforce by adding voice services in order to allow a worker to be hands free, keeping attention on critical actions and creating a safer work environment.

A (Recent) History of Voice Services

In recent years, we are yelling less at kids and more at Alexa, Bixby, Cortana, Google and Siri. Every major tech company is working on its own digital assistant that is powered by a set of voice services.

      • Apple released Siri in 2011 and now Siri is apart of most of Apple’s operating systems (i.e. iOS, watchOS, macOS and tvOS)
      • Amazon Alexa was made popular by the Amazon Echo and the Amazon Echo Dot. Fun fact, the name Alexa was chosen due to the fact that it has a hard consonant with the X and therefore could be recognized with higher precision.
      • Microsoft lifted its character from the Halo video game franchise to launch their intelligent personal assistant Cortana.
      • Google Assistant was unveiled just last year. Different from Google Now, the Google Assistant can engage in two-way conversations.

This year has been the year of the voice for BlueFletch. We have been a part of many workshops and brainstorming sessions where voice is the centerpiece of the User’s experience. For those new to the space, I wanted to talk about the three technologies that are key to bringing these voice experiences to life.

Read More

Mobile App Migrations Are Not Only Inevitable, But Are Also Often Business-Critical

By | Ideas For Your Business | No Comments

There is a great deal of hype these days about “digital transformation”. The term can span from simply going paperless to applying digital technologies to refine and optimize business models and workflows. Not surprisingly, the enterprise opportunities associated with digital transformation have attracted a lot of attention, particularly from consulting vendors and service providers. Unfortunately, this attention has led to confusion in the marketplace as to what digital business transformation means, and as a consequence, it has been inconsistently defined and unevenly applied and measures to address it have tended to be unreliable and incomparable. VDC Research has a simple definition for digital transformation: it is the integration of digital technologies and business models to engender organizational change while improving employee productivity, performance and customer engagement and service. A critical component of today’s digital transformation strategies is migrating legacy mobile applications running on aging equipment to take advantage of more sophisticated and functional modern mobile solutions and their intuitive interfaces.

One such example is the ubiquitous ruggedized handheld computer, the de facto hardware used for data collection and processing across a variety of workflows in virtually every industry. These devices are widely deployed in warehouses and distribution centers for inventory and material management applications, courier delivery drivers supporting parcel delivery verification, and beverage distributors supporting digital exchange. Organizations rely on these devices to conduct business critical applications and operations in real time. However, the dominant OS supporting this ecosystem of devices is quickly approaching its end of life, leaving current customers with no clear migration path forward. Put another way, no matter which OS platform an enterprise looks to deploy next to support its business-critical applications, each application will require recoding and rework, as it will not be compatible with modern mobile platforms. Moreover, these legacy devices fall well short of today’s mobile standards across all performance, functionality and usability criteria, ultimately limiting their potential impact on business operations. VDC has tracked these deployments, and estimates that there are 15 to 20 million legacy rugged handheld devices currently deployed supporting various line-of-business (LOB) applications.

Microsoft’s Windows CE and Windows Embedded Handheld 6.5 have long tenure as the OS platforms of choice for the majority of these deployment scenarios. The portfolio of devices and form factors is broad, development tools are mature, and the developer community is sizeable. In addition, with support from Microsoft for the past decade, businesses have been able to effectively manage and maintain their deployments (often longer than expected). But change has been forced on this ecosystem, with Microsoft’s end of life of its prolific Windows platforms looming, and the emergence of a new generation of modern Android-powered purpose-built ruggedized handheld devices not to mention the flood of smartphones being used in various corporate settings.

If your organization maintains ruggedized mobile deployments, there are several important dates that should be marked on your calendars:

  • June 10, 2018 — Windows Embedded CE 6.0 will be End of Life
  • June 9, 2019 —  Windows Embedded 8.1 Handheld will be End of Life
  • January 14, 2020 — Windows Embedded Handheld (WEH) 6.5 will be End of Life

Preparing for Microsoft’s most prolific Windows Embedded Operating Systems End of Life is essential for any organization maintaining these deployments; the devices impacted are often required for day-to-day job-related activities/functions of their users.

Simplifying And Benefiting from App Migration

A recent VDC survey shows that 56% of organizations plan on upgrading their existing fleet of mobile devices because these devices are nearing their end of life and/or the old age of their existing devices. In addition, the motivation to upgrade applications to a more visual and modern user interface was cited by one in four respondents as a critical factor influencing their upgrade decision. This is notable, as many ruggedized mobile deployments in use today are text-oriented and keyboard-centric solutions. Our data also showed that when evaluating next-generation mobile platforms, security, lifecycle support, and ensuring business continuity were most frequently cited as key requirements.

Legacy Migration Read More

BlueFletch and Community Outreach

By | Ideas For Your Business | No Comments

The democratization of technology means that technology is becoming accessible to the masses. According to the Pew Research Center, roughly 77% of all Americans own a smart phone. Each of these smart phones can easily out compute NASA’s Apollo Guidance Computer, the machine that put humans on the moon. Apollo 11’s on board computer had only 3.8KB of RAM. For comparison, an iPhone 7 Plus sports 3GB of RAM. That’s 3 trillion bytes versus 3000 bytes. The difference is vast.

More powerful technologies are available to more members of the public. Access to technology is becoming more widespread. But what about education and exposure to technology in schools? Some students can learn about computer science and get involved with technology in high school. For some students, their exposure to technology is limited. In 2013, there were 11 states that had 0 black participants. That same year, 3 states had no female students take the exam. There is still a disparity between the availability of computing resources. Here are some organizations that are attempting to bridge the gap:

Black and College Bound & GitHub Scholars

GitHubPictured: BlueFletch and Black and College Bound in the office

Coordinators
Deana Ervin, Phd, MBA
Angela Holcomb, LCSW

About the organization and BlueFletch’s Involvement

Black and College Bound is focused on providing preparation, guidance, and support to students of color throughout the college admission process. Black and College Bound provides a cavalcade of resources to help students secure their futures at higher learning institutions. These resources range from standardized test prep; financial aid and literacy; college fairs and tours; and finally, academic preparedness.

This past summer, Black and College Bound partnered with GitHub to form the GitHub Scholars Program. Students had opportunities to learn technology and interpersonal skills. All of the students formed teams and synthesized these skills to order to create business plans for social impact projects.

BlueFletch was excited to host these students in our office. We are enthusiastic about sharing our love for technology. Representation in tech matters. For a group of students of color, seeing people that look like them in tech re-affirms the notion that a career in tech is not only accessible but attainable.

GitHub Scholars

Pictured: Girl Scouts of East Atlanta alongside Angels N Tech at the Lenox Square Microsoft Store

Angels N Tech

Coordinators
Angela Chambliss, MS, PMP
Tarenia Carthan, BS

About the organization and BlueFletch’s Involvement

Angels N Tech is an organization dedicated to stimulating interest in STEAM (Science Technology Engineering Arts and Mathematics) amongst girls and young women. Angels N Tech strives to promote these fields through a series of hand-ons events. Thus far, Angels N Tech has hosted workshops and hackathons in the Atlanta area.

Angels N Tech recently partnered with the Girl Scouts of East Atlanta to hold the More than Cookies HackAThon. The troop was separated into two groups that tackled social issues involving mental health and implicit stereotyping. The hackathon was hosted by Microsoft at the Lenox Square location. The day was split into two pars. In part one, the teams focused on using the design thinking methodology to ideate and plan their ideas. In part two, the teams implemented their solutions.

Again, representation matters! The troop was able to work alongside their mentors. These women represented professionals in various fields like public health, psychology, engineering, computer science, and data science. The scouts felt passionate and empowered to solve problems that were important to them with the aid of technology. It is refreshing to represent as a developer at BlueFletch and tell these girls: “I am a black woman in technology. You can be too”.

Education for underrepresented groups in STEM and STEAM is far from perfect. Organizations and initiatives like the aforementioned help target groups that are typically left out of the tech conversation. That is true power of technology democratization: making opportunities available for all with the aid of technology.

Take aways from a Friday Code Review

By | Android, Ideas For Your Business, Mobile Development | No Comments

Do you do code reviews? If so, why? What do you benefit from your code reviews?

Most companies do code reviews to prevent future program errors, but in my opinion a major benefit of code reviews is to ensure the code is maintainable, that others can read and follow the code.

If you have not read the book Clean Code by Bob Martin, I highly recommend it, as it will give you techniques for writing maintainable code.

code reveiwCode Review Fridays

Here at BlueFletch we have a standing weekly code review meeting.  The engineers meet as a group and review some portion of code from a current project.  This meeting does not replace individual project code reviews, but is meant to benefit everyone in the company not working on the project.

Some of the benefits are:

1. See what others in the company are working on
2. Get insight into different technologies
3. Get help with a tricky piece of code
4. Ideas on doing a project differently

During our code reviews we look for the following items:

1. Readability — is the code easy to read / follow
2. Maintainability — can our customers easily maintain it
3. Usability — are the classes easy to use, are they overly complicated?
4. Does the code make sense?

Additional items we look for can be found here

A Recent Review

On a recent Friday we reviewed a couple of Android projects we inherited from other companies. As per our practice, we reviewed the code from the aspect of clean code and best practices, discussing how we would make the code maintainable and easier to read.

During the review four major issues jumped out:

1. Pyramid of doom
2. Project organization
3. Code Reuse
4. Hardcode Strings

code reviewPyramid of doom (or Callback Hell)

Every engineer has run into this, regardless of the language or platform, you have a function that has many, many levels of indention. This could a HUGE if statement with many conditions or a series of callbacks within callbacks. The deeper the code, the harder it is to follow and maintain.

Example:


if ( conditionA) {
    if ( conditionB ) {
        if ( conditionC ) {
            block of code doing something 1
         } else {
            if ( conditionD ) {
                block of code doing something 2
            } else {
                block of code doing something 3
            }
        }
    } else {
       if ( conditionE ) {
            block of code doing something 4
       } else {
            block of code doing something 5
       }
    }
}

 

Tip: If you find yourself coding such a monstrosity, STOP! Refactor the code. Start with the inner code and place the code into separate methods. Yes, you end up with more methods, but the code will be more readable, and with smaller methods you get code that is easier to write unit tests.

A possible rewrite (one of many ways, but easier to write unit tests):

..
 if ( conditionA) {
    methodConditionA()
 }
..

methodConditionA() {
   if ( conditionB ) {
       methodCondtionB()
   } else {
       methodCondtionE()
   }
}
methodCondtionB() {
    if ( conditionC ) {
       methodHandlerProcssingLogic1 ()
    } else {
       methodCondtionD()
    }
}
methodCondtionD() {
    if ( conditionD ) {
        methodHandlerProcssingLogic2()
    } else {
        methodHandlerProcssingLogic3()
    }
}
methodCondtionE() {
    if ( conditionE ) {
        methodHandlerProcssingLogic4()
    } else {
        methodHandlerProcssingLogic5()
    }
}
methodHandlerProcssingLogic1() {
    block of code doing something 1
}
methodHandlerProcssingLogic2() {
    block of code doing something 2
}
methodHandlerProcssingLogic3() {
    block of code doing something 3
}
methodHandleProcssingLogic4() {
    block of code doing something 4
}
methodHandlerProcssingLogic5() {
    block of code doing something 5
}


 

Project organization

Within one of the projects we reviewed, there were 67 fragments, all within one package. For non-Java programmers, imagine 67 code files within one folder, with the files having similar names.

There were 11 fragments referring to devices; 4 related to signing in; various fragments for product registration, and 2 About fragments.

How are these 67 fragments related? Which ones need to be looked at when enhancing a feature of the application? Where do we start?

Tip: How you organize your code can help those that follow. If you make it easier to identify features and/or the process flow, then those that follow will be able to understand your project.

If the engineer building the project had separated the fragments out by features or relating the code in some manner, then working with the project would be easier.

Some suggestions for organization include placing all the “User” related (sign in, forgot password, account creation) into one package.   Place settings related fragments into another package.  Place device related fragments into another package.

Get the idea? Organize the project by context.

Code Reuse

Within one of the projects we reviewed the code utilized simple REST API calls to gather data. A simple pattern of URL creation with HttpUrlConnection classes and code to handle the result.

After some research we noticed the same endpoint was used in multiple places. Then we found the same exact code pattern, almost line for line, in 15 other places.  The code had been copied from place to place, with minor changes to suit the need.

And there was a bug within the code that required a major change within each piece of code. Yuck!

Another project we reviewed had a common error message display, but the display code was copied into each Activity (25 code files). Imagine if they decided to change the look/feel of the error display, 25 code files would have to be updated and tested. Dooh!

Yes, as software developers we need to get things done fast, but the consequences of copying code from one part of the project to another will cause you headaches down the road. As no code is perfect, at some point it will need to be fixed or enhanced, how many places do you want to make changes?

Tip: if you find yourself copying a block of code from one part of the project to another, almost line for line, then build a reusable code object, either a new method, a new base class, something common. This will reduce the amount of code to maintain, and if a bug does arise, you have one location to fix it.

Hardcode Strings

Imagine opening a code file for the main activity of a project and having to scroll through 1,300 lines of hardcoded string literals? Yes, we had to do that during our code review.

We as engineers get lazy, we need to add a new UI label or a new error message, instead of doing it correctly we put the text directly in code. It never fails, later the project needs to be localized and now you have to pull all the strings out to a string resource file. How time consuming! How much time does it take to add the initial string to the resource file, less than a minute?

Tip: Take the time up front, do it right, and for the sanity of the engineer that follows you into the code base, do not hard code 1,300 lines of string literals into the main activity.

Conclusion

As software developers/engineers, we should take pride in our code. We should build our code to be readable, maintainable, and testable. Doing code reviews either as a group or individually will help you and others to learn and improve code.

And please: organize your code, write reusable modules, do not hard code strings, and break down your large unruly code blocks into smaller methods.

BlueFletch Honored with Floor & Decor’s IT Vendor of the Year Award

By | Ideas For Your Business | No Comments

Atlanta, GA – July 14, 2017   BlueFletch is proud to announce it is the recipient of Floor & Decor’s annual IT Vendor of the Year Award, in recognition of BlueFletch’s commitment to excellence and dedication to providing leading enterprise mobility solutions. Floor & Decor, a specialty retailer of hard surface flooring, uses BlueFletch’s solutions to improve efficiencies for employees to streamline store processes.

“The team from BlueFletch has been an integral part of our mobile initiatives. They have worked side-by-side with our internal teams to help us keep up with the pace of growth over the last few years” said John Adamson, Chief Information Officer, Floor & Decor.

“It has been our pleasure to work with Floor & Decor’s exceptional team. Together we have tackled some of the more complex challenges facing retailer today.  It’s awesome to work with them on some of the technological demands of the retail landscape” said Brett Cooper, Partner at BlueFletch. “We are honored to be named IT Vendor of the Year and look forward to continuing to help in the future.”

Floor & Decor gives its IT Vendor of the Year Award to the company it believes demonstrates exceptional performance and dependability on a consistent basis. BlueFletch has been assisting Floor and Decor with its mobile initiatives since 2012.

About BlueFletch
BlueFletch is team of mobile development experts dedicated to helping our enterprise clients solve business problems using mobility. Since 2008 BlueFletch has grown into a widely trusted mobile company in the enterprise space by developing high value line-of-business apps for companies in Retail, Consumer Goods, Healthcare, and Transportation & Logistics. For more information, please visit www.bluefletch.com

iOS 11 Features for the Enterprise

By | Ideas For Your Business | No Comments

WWDC has wrapped up and so now it is up to us in the world of iOS to make sense of all these newly unveiled features. Now, being a developer who is often working in the enterprise realm, I tend to look at many of these features from a slightly different angle. When people hear about ARKit adding augmented reality to iOS, they probably think about the implications for games like Pokémon GO and interior decorating apps that allow you to see a fake end table super imposed next to their couch. My first thoughts are about it’s possible use in retail and warehousing to help highlight objects of interest or present additional information for the user. With this post, I’ll be going over some of the new features and SDKs in iOS 11, and how they relate to the enterprise and working world.

ARKit, iOS11ARKit – Previously developers had to do all of this by hand, and truth be told, it’s not easy. Super imposing into an image isn’t very difficult, but however, super imposing graphics in a 3-dimensional space with depth, that is also moving, is extremely difficult. ARKit does the heavy lifting for developers by locating features and planes, and it allows you to create 2d or 3d objects via SceneKit or SpriteKit to super impose onto these features and planes. As stated earlier AR can be useful to locating and highlighting items, but when combined with some other technologies it can be so much more. For example, when paired with iOS 11’s Machine Learning and Vision frameworks, mechanic might be able to have their device see an unknown engine part, detect what part it is, and then super impose the documentation for that part on half of their screen. Obviously, this technology on a phone or tablet has some limitations, but as smart glasses become more mature they will be a fantastic candidate for augmented reality in the enterprise. Read More

TAG Announces Diversity Game Changers in Tech Industry

By | Ideas For Your Business | No Comments

Atlanta, GA – June 19, 2017 The TAG Human Resources and Diversity society and TAG’s publication, Hub Magazine, today announced the GameChangers that will be recognized at the 7th Annual TAG Diversity Awards.

The event is made possible by Platinum Sponsor, Google and Silver Sponsors, Manhattan Associates, SunTrust, and Turner and will be held Tuesday, June 27th at the Morehouse School of Medicine NCPC Auditorium.

This year, The TAG Diversity Awards will recognize a select group of industry GameChangers along with the recipient of the prestigious Diversity Leadership Award. The work and achievements of these outstanding individuals are helping to advance diversity and inclusion in Georgia’s technology community.

Read More

ag Grid

Choosing a Data Grid Component For Your React Project

By | Ideas For Your Business | No Comments

In a React application I am working on we are using the Material UI component library, but immediately realized it’s table component did not have the features we needed. Many of the available grid components had the features we needed like sorting, filtering, search, and adjusting column order and size. However, there were only a few components that had the features we needed like exporting to excel and row grouping. Of those few, only ag-Grid had a built-in option for material theme styling. With a little css the grid was styled very similar to the Material UI table.

Top: Material-UI Table Component
Bottom: ag-Grid with material theme and some css

Another stand-out feature was the ability to pass through the gridOptions a context object that would be available to any custom cell renderer that you implement. This enabled us to pass props that included event handlers that could update the state of a parent component or launch async actions thus giving us the ability to make the grid even more interactive. For example, we were able to integrate commenting through the grid. Here is the table component code and the result.

import React from 'react';
import {AgGridReact} from 'ag-grid-react';
import 'ag-grid/dist/styles/ag-grid.css';
import 'ag-grid/dist/styles/theme-material.css';
import { columnDef } from '../table_util.js';
import DescriptionCellRenderer from '../descriptionCellRenderer.jsx';

const columnWidths = {
  'description': 400
};

class ExampleTable extends React.Component{
  constructor(props){
    super(props);
    this.data = props.data || [];
    this.columnDefs = this.columnDefs.bind(this);
    this.onGridReady = this.onGridReady.bind(this);
    this.gridOptions = {
      rowHeight: 56,
      headerHeight: 55,
      enableColResize: true,
      groupUseEntireRow: true,
      groupDefaultExpanded: -1,
      groupSuppressAutoColumn: true,
      groupSuppressRow: true,
      animateRows: true,
      suppressRowClickSelection: true,
      onRowClicked: this.onRowClicked,
      rowSelection: 'single',
      suppressMenuMainPanel: true,
      context: {
        currentUser: this.props.currentUser.user,
        handleCommentSave: this.props.handleCommentSave
      }
    };
  }

  columnDefs(){
    let columns = Object.keys(this.data[0]);
    let cols = [];
    columns.forEach((name, i) => {
      let col = columnDef(name.toUpperCase(), name);

      if (name === 'description') {
        col.cellRendererFramework = DescriptionCellRenderer;
      }

      if (columnWidths[name]) {
        col.width = columnWidths[name];
      }

      col.headerClass = 'table-header';
      cols.push(col);
    });

    return cols;
  }

  onGridReady(params) {
    this.api = params.api;
    this.columnApi = params.columnApi;
  }

  render(){
      return(
      
<div style={{height: '770px', width: '100%', backgroundColor: 'white'}} className="ag-material">
        <AgGridReact 
          onGridReady={this.onGridReady} 
          columnDefs={this.columnDefs()} 
          gridOptions={this.gridOptions} 
          rowData={this.data} 
          enableSorting='true' 
          enableFilter='true'>
        </AgGridReact>
      </div>

    );
  }
}

Integrating comments into an ag-Grid table.

Ag-Grid is an excellent choice to use as your data grid component. It has all the powerful features you would expect from a solid grid component such as multi-sort and search and essentially every aspect of the grid is customizable so it was easy to adapt to design changes. If you choose ag-Grid you are likely to have a smoother development process.