Skip to main content

Mobomo webinars-now on demand! | learn more.

Another day, another product release! DIGITALiBiz has unveiled the latest version of its corporate website--built by Mobomo--and it’s beautiful. For the redesign, we leveraged WordPress, and fully customized a theme to meet DIGITALiBiz’s specific goals. The site is fully responsive, has a beefed up CMS in the back-end which utilizes the Visual Composer page builder plugin, and can support any type of media, including video and photo. Photos, specifically, have taken on an entirely new form, as site 2.0 boasts interactive photo galleries, as well as interactive staff biographies.

In addition to enabling robust, multimedia capabilities, we also strengthened the site’s integration with social media platforms (such as Facebook, Twitter, and LinkedIn), and provided an easy-to-use SEO optimization environment. This site allows DIGITALiBiz to seamlessly engage with clients, partners, and employees, and does so in a manner that enhances their position in search rankings so they can be efficiently found. Strong engagement and optimized search are crucial for any organization, but are of the utmost importance for a business technology solutions company like DIGITALiBiz. Defining and optimizing their SEO program helps them achieve key (project) goals, and we made this a central part of the redesign.

From beginning to end, this fully scalable, responsive site deployment took less than 3 months to launch (just 2.5, to be exact), and we are thrilled with the results. Take a look for yourself! Visit DIGITALiBiz.com to see more, and contact us via https://www.mobomo.com to find out how we can help you deploy a beautiful, responsive site for your organization.

Categories
Tags
Author

Mobomo is pleased to announce that it has acquired Intridea, a DC-based product development consulting firm specializing in Web 2.0 application development.

Over the past several years, Mobomo has been focusing heavily on cutting edge web development to complement its expertise in mobile. Projects such as NASA.gov and USASearch coupled with Mobomo’s background in Ruby on Rails provided the opportunity for Mobomo to flex its web muscles. Adding Intridea’s team, proficiency, and web & mobile app portfolio to Mobomo’s roster demonstrates its commitment to growing its capabilities in web development and technologies, such as AngularJS.

Both teams are excited about the opportunity this acquisition presents. “Marc Garrett and Jürgen Altziebler have built an organization of exceptional talent. We are extremely lucky to work with Intridea,” said Brian Lacey, CEO of Mobomo.

“I'm thrilled to merge our user experience, product development, and Angular skills with Mobomo's mobile and web expertise,” said Marc Garrett, CEO of Intridea.

The acquisition of Intridea means Mobomo will be able to offer even more world class web development services to our customers. "If you've read business news, received a paycheck, opened an email, had a baby, or attended a wedding, you've encountered Intridea's work. Our designs are viable, useful, and engage tens of millions of users,” said Garrett.

This acquisition was about more than just growth. It was also about bringing companies with a common ancestry together. “One aspect of the acquisition that was particularly attractive to me was the fact that Mobomo and Intridea share a common DNA in Barg Upender, who co-founded Intridea in 2007 and founded Mobomo in 2009," said Lacey. This mutual foundation will allow Mobomo to merge Intridea’s team and processes into Mobomo operations painlessly.

Our family just got a little bigger. Please join us in welcoming Intridea to Team Mobomo.

About Intridea

Founded in 2007, Intridea is an internationally recognized leader in design, user experience, AngularJS, front-end engineering, and open source. A 2011 Inc 500 fastest growing company, Intridea develops technology solutions and web products for startups and enterprise customers including ADP, Citi, Mitsubishi, and XO Group. Intridea is headquartered in Washington, DC. For more information, visit http://www.intridea.com.

About Mobomo

Founded in 2009, Mobomo is a premier provider of web and mobile development services to businesses, government agencies, and non-profit organizations. It combines technology expertise with disciplines in digital strategy, interactive marketing, and branding to create innovative applications and websites for world-class brands and organizations, such as Mars, Inc., Marriott, NASA, and the US Navy. Mobomo has a strong history of solving some of the most difficult problems using its Agile, co-creation methodology.

Mobomo has launched countless products and websites across every major market vertical. The innovative solutions it has created have gained press and won awards, including the 2014 People’s Voice Webby Award for Government website design and the 2011 AFFIRM Leadership Award for Innovative Applications, among others.

Categories
Author

For Federal Offices of Communication, the act—and art—of balancing websites that both cater to the public and promote the organizational structure and mission of the organization is always top of mind. Accordingly, those partnering with Federal offices must prioritize meeting both needs when designing and building agency sites. On numerous projects, our team has successfully managed to increase usability and deliver user-centric designs while simultaneously building sites that allow our Federal clients to bolster their brand. A sample of results for some clients:

-a swift 4% increase in first-time visitor overall satisfaction
-76% of all mobile users strongly agreeing that the new site made content easier to find
-88% of frequently visiting teens being satisfied with the new site

Below are some of the tools we’ve implemented to achieve success:

Navigation and Information Architecture

Treejack is a great usability testing tool that development teams can wield to test the information architecture and navigation of the site prior to even beginning a design. It is best used to test the findability of topics in a website using different navigational hierarchies. For one of our projects, both internal and external stakeholders were given 46 tasks to perform using a variety of different navigation hierarchies to find the most optimal site organization for both constituent groups.

treejack-information-architecture-software

Usability Testing

For usability testing, our team leverages both Loop11 and Usertesting.com. Using a live, interactive environment, both of these tools allow development teams to gain deep understanding of user behavior by observing users as they complete a series of tasks and questions on the site and/or mobile app in question. Interactions are captured and then analyzed in comprehensive reports. As an added bonus, Usertesting.com provides video footage of the interaction for review:

user-testing-video-footage

http://bit.ly/1rRvEAm

In summary, Federal websites and applications are often designed with too much emphasis on organizational hierarchy and goals, and too little focus on meeting end-users’ needs and expectations. User-Centric Design (UCD) tools can help government agencies buck this trend, however, allowing them to create websites and applications that engage users and maximize their interaction. Ultimately, this results in a sure win-win: Federal agencies’ constituents can experience an efficient, satisfying, and user-friendly design, and—with constituents’ increased engagement—organizations can ensure that their missions and information are communicated effectively. Act balanced.

Categories
Author

By: Patrick Harrington

This is my third time volunteering with From Houses to Homes in Guatemala. My previous two trips were back in the summers of 2011 and 2012. A lot of people ask me, "Why do you keep going back?" The answer to this question is difficult to put into words, but I'll give it my best shot.

From the second I step off the plane in Guatemala City, I know I have been transported into a different world. The cars are older, the traffic seems to have no rules, and the pollution seems to be a little bit stronger. As I try to find a taxi labeled "Antigua" and a driver that can understand my broken Spanish, anxiety begins to grow and I start to ask myself, "What am I doing here?"

That moment of doubt quickly fades as I begin to remember the reasons that bring me to Guatemala. At first it's the natural beauty of the country. The three volcanoes that surround Antigua are a constant reminder of the earth's strength and power. The cobblestone roads and multi-color houses that make up the city remind me of a time that seems lost in most places back in the U.S. The ruins that scatter the country fill me with amazment as I imagine the ancient civilization from which they came.

But what truly keeps bringing me back to Guatemala is the people.

Today, I met the family that we are helping: it is comprised of three boys (ages 17, 10, and 3) and their two parents. In typical Guatemalan fashion, they also introduced us to their entire extended family and group of friends. It didn't take long for the kids and family to warm up to us. The language barrier dissolved as we used our poor Spanish and hand gestures to play games with the kids (try to throw the rock in the bucket, toss the soccer ball off my head, etc.); we were quickly rewarded with laughter and smiles—a reminder that we are all connected.

While it is easy to look around and see everything they don't have, it is the happiness they share with us that keeps me coming back. It is in these moments that I realize life is truly not about what I have, but rather the people that make up my life.

Categories
Author

In April 2015, NASA unveiled a brand new look and user experience for NASA.gov. This release revealed a site modernized to 1) work across all devices and screen sizes (responsive web design), 2) eliminate visual clutter, and 3) highlight the continuous flow of news updates, images, and videos.

With its latest site version, NASA—already an established leader in the digital space—has reached even higher heights by being one of the first federal sites to use a “headless” Drupal approach. Though this model was used when the site was initially migrated to Drupal in 2013, this most recent deployment rounded out the endeavor by using the Services module to provide a REST interface, and ember.js for the client-side, front-end framework.

Implementing a “headless” Drupal approach prepares NASA for the future of content management systems (CMS) by:

  1. Leveraging the strength and flexibility of Drupal’s back-end to easily architect content models and ingest content from other sources. As examples:

  • Our team created the concept of an “ubernode”, a content type which homogenizes fields across historically varied content types (e.g., features, images, press releases, etc.). Implementing an “ubernode” enables easy integration of content in web services feeds, allowing developers to seamlessly pull multiple content types into a single, “latest news” feed. This approach also provides a foundation for the agency to truly embrace the “Create Once, Publish Everywhere” philosophy of content development and syndication to multiple channels, including mobile applications, GovDelivery, iTunes, and other third party applications.

  • Additionally, the team harnessed Drupal’s power to integrate with other content stores and applications, successfully ingesting content from blogs.nasa.gov, svs.gsfc.nasa.gov, earthobservatory.nasa.gov, www.spc.noaa.gov, etc., and aggregating the sourced content for publication.

  1. Optimizing the front-end by building with a client-side, front-end framework, as opposed to a theme. For this task, our team chose ember.js, distinguished by both its maturity as a framework and its emphasis of convention over configuration. Ember embraces model-view-controller (MVC), and also excels at performance by batching updates to the document object model (DOM) and bindings.

In another stride toward maximizing “Headless” Drupal’s massive potential, we configured the site so that JSON feed records are published to an Amazon S3 bucket as an origin for a content delivery network (CDN), ultimately allowing for a high-security, high-performance, and highly available site.

Below is an example of how the technology stack which we implemented works:

Using ember.js, the NASA.gov home page requests a list of nodes of the latest content to display. Drupal provides this list as a JSON feed of nodes:

Ember then retrieves specific content for each node. Again, Drupal provides this content as a JSON response stored on Amazon S3:

Finally, Ember distributes these results into the individual items for the home page:

The result? A NASA.gov architected for the future. It is worth noting that upgrading to Drupal 8 can be done without reconfiguring the ember front-end. Further, migrating to another front-end framework (such as Angular or Backbone) does not require modification of the Drupal CMS.

Categories
Author

angularjs lock

What is Async?

Async (aka asynchronous) JavaScript refers to the execution of more than one piece of code at the same time. This is great because it prevents your application from freezing up when certain code takes a long time to execute, but it can also cause issues in your code if you are expecting something to be complete when it may not be. These situations are called race conditions. Here is an example of when a function is performing asyc code and we don’t get the result we are expecting:

. Notice the name variable isn’t returned as “Bob”, but is instead returned as it’s initial value.

Enter: Promises

Promises allow developers to detect when asynchronous code finishes and then act on it. Instead of a function returning a value we expect, we can have it return a Promise, and then let the Promise tell us when the value is ready to use. Now let’s take a look at how Promises can fix our issue in the original example:

. Using the built-in promise library $q that ships with Angular, we can return a Promise instead of just the name variable. The Promise is “resolved” after the timeout finishes, which tells the promise to execute its then method to finally return the value we originally wanted.

Real-world GitHub API Example

One of the most common uses for Promises is within a Service that makes a HTTP call and returns the response to a controller. Since HTTP calls take some time to finish, they are a prime candidate for Promises. Here’s an example of how we can use a Promise to return the HTTP response to a controller when it’s ready:

Advanced Promises

Let’s say you need to make a number of consecutive HTTP calls within your Service before returning the result back to the controller. The $q library has a very useful method call $q.all. This allows you to pass an array of Promises to the method and it will only execute its ‘then’ method once all Promises have been resolved. This prevents any race conditions when executing multiple HTTP calls before performing another action.

Another case where we can use multiple Promises is a technique called ‘Chaining Promises’. Sometimes within a controller, we’ll need to call one HTTP Service before another HTTP Service can be called, in case we need information from the first Service. The nice thing about $q Promises is that the Promise itself returns a Promise. This way we can have a function return one of our Services that returns a Promise and then act on that once it’s ready. If we take our GitHub API example, I can chain the ‘getGithubUserInfo’ function with another function by returning a Promise. This is what that might look like:

Conclusion

Promises are a powerful tool in software development. Any web developer should have at least a basic understanding of Promises, if not a thorough grasp of the concepts discussed in this article. Please feel free to fork and edit these codepen examples to test our your own skills with Promises so you can master this critical technique.

Categories
Author

Ionic
With the release of Ionic 1.0, we’ve reached a new level in building hybrid mobile applications via web technologies. While Ionic is probably more well known for its CSS components and JavaScript/AngularJS extensions, I’d like to highlight a few tools that have really improved my ability to develop applications rapidly, which are included with the Ionic CLI.

The first, and probably most time-saving tool in the Ionic CLI, is the ability to live reload your app as you make code changes. Prior to being able to live reload, if you wanted to preview/test changes in a simulator or on an actual device, you would have to “build” (or compile) your app’s package, and then “run” (or install on the device, and launch). Web developers familiar with using live reload in Chrome to debug web apps will be very familiar with the Ionic CLI live reload process. Each time you save an HTML, CSS, or JS file that’s being “watched” in your app, the app will refresh while running on your device, so you don’t have to build & run each time (which is a very slow process). You can also change the files being watched by editing the watchPatterns in your ionic.project file. Read more about the live reload tool on the Ionic blog, or in the CLI documentation.

One of the great features of developing hybrid apps is leveraging the same code base for building iOS and Android apps. Ionic’s CSS components and JS extensions appear differently on iOS and Android, as they’re geared to mimic each native platform closely. The Ionic Lab tool allows developers to launch a browser window displaying how the app would look and behave on both iOS and Android. Since its running in a browser, it’s not going to allow you to preview native-level functionality, like if the ngCordova $cordovaCamera service performs differently on each platform, but it is very handy for monitoring CSS changes, and whether a change you made breaks something on one platform, but not the other. It also comes with the aforementioned live reload tool built in, so you’ll see both the iOS and Android version of your app refreshing in real time. Read more about Ionic Lab on the Ionic blog, or in the CLI documentation.

The last tool I really appreciate is the ability to print your app’s console logs to the Terminal tab you’re running the app from. There was a time when, before Safari allowed debugging of an iPhone connected to a Mac, developers had to hack together a solution in order to gain visibility into the JS running in their hybrid app running on a device. This consisted of Xcode logs and a tool called WEINRE (“WEb INspector REmote”). It was not pretty. Suffice to say that the ability to access the console logs of your app running on a device by simply passing the “-c” flag when running the “ionic serve” command is nothing short of a godsend. Read more about the command line flags available with the Ionic CLI.

While using live reload, Ionic Lab, and a combination of console logs and other tools available with the Ionic CLI have vastly improved the speed with which I can build hybrid mobile apps, the Ionic CLI currently has many additional features. You can emulate or run your app on a simulator or actual device, automatically generate the icons and splash screens required for both iOS and Android, or share your app with others using Ionic View. There are also many more exciting things in the pipeline, like Ionic Deploy (update your app without having to resubmit to app stores), Ionic Analytics (track all activity in your app), and Ionic Creator (prototype Ionic apps using drag-and-drop components).

Its an exciting time to be a hybrid mobile app developer, and Ionic is leading the pack when it comes to modern hybrid frameworks. Start building your own apps today!

Categories
Author

Have you ever been working with a particularly complicated web application and found that the output you were getting back from $log was difficult to wade through? Perhaps it's a complex XML response (because you're working with a SOAP API), or it's a particularly dense JSON response. Maybe the browser you use as your primary workhorse is working fine, but you found a gnarly bug in handling the response you're getting back from an API and it's failing in one of the other browsers you’re testing?

I recently ran into an issue similar to this; for me, it was while working with a SOAP API. And while the browser I'm using has all of the necessary development tools, emitting the responses I was looking for in an easy-to-read way was just not happening for me. No matter how I went about logging it all out, the response was coming back as a single line of text when emitted to the JavaScript console, and because it was a string I was having trouble easily inspecting it. While I wasn't having browser-specific issues (in this case), needing to add the extra effort of moving over to a view in my debugger was costing me precious turn-around time in trying to debug this response. If I was having this sort of issue with these responses, then the other developers on my team likely were as well.

After doing some research, I came across a fairly light-weight library called vkbeautify, which handles beautifying (as well as minifying) strings that are passed in to the appropriate method. This solved part of my problem: I now had a way to programmatically re-format my XML strings. Now, I could have stopped with simply injecting the library into the application, then just emitting out the formatted strings while I was debugging the issue I was trying to resolve. However, as I mentioned earlier, I'm working as part of a larger team, and I wanted the rest of the team to have this ability as well. Furthermore, I wanted us to be able to selectively emit data into the console in a consistent manner with some sane defaults.

The next logical step was to look at the $log service. Since this is an abstraction of the global console interface (log, info, warn, debug, etc) and it had the benefit of being stubbed so it wouldn’t display in unit tests, it made sense that I should simply extend that service. That way, any developer could call a method of the $log service to emit these nicely formatted strings.

To accomplish this, I created a provider decorator for $log and made it available from within the application. One of the nice things about provider decorators is that you can leverage a reference parent service and then call that service’s methods, which was nice because I wanted to leverage the existing infrastructure as much as possible – truly extending the $log service. So, I added a new method (called pretty, a nod to the concept of "pretty printing," which is common in most programming languages), and had that piggy-back on one of the other methods in the service. It looks a bit like this:

angular.module("myApp").config(["$provide", function ($provide) {   $provide.decorator("$log", ["$delegate", function ($delegate) { // $delegate, here, is an internal       reference to $log     $delegate.pretty = function (input, opts) {       var output;       opts = opts || {};       output = vkbeautify[(opts.type || "json")]](input); // use the correct vkbeautify for beautifying the        string - vkbeautify.json, vkbeautify.xml, vkbeautify.sql, etc; defaults to json       $delegate[(opts.output || "log")].call(null, output); // leverage one of the other $log methods to    actually emit the output; defaults to log     };     return $delegate;   }]); }]); 

Now, in our application, when a developer makes a call to $log.pretty(), the input they pass to it is run through vkbeautify with the given data type and output method (defaulting to json and $log.log, respectively). These values can be changed by passing in an Object as the second parameter with a property of type or output set to the desired value. Here are a few examples:

$log.pretty("<div><h1>Hello world</h1></div>", {type: “xml”); // // <div> //   <h1>Hello world</h1> // </div>  $log.pretty("body:{background:#fff;}.rounded_box:{border-radius:20px;}", {type: "css"}); // // body: { //   background: #fff; // } // .rounded_box { //   border-radius: 20px; // }  $log.pretty({jsonObj: {childAry: [1,2,3], childObj: {someProp: "prop"}}}, {output: "info"}); // this would    emit using $log.info; leveraging that type is defaulted to json // // { //   jsonObj: { //     childAry: [ //       1, //       2, //       3, //     ], //     childObj: { //       someProp: "prop" //     } //   } // } 

While I lose the ability to log out multiple items with this method (console.log(var1, var2, var3), for example), I gain the far more important ability to emit nicely formatted output that is easier to scan and understand. The big take-away here is that you can leverage the ability to extend $log to create output necessary to make debugging your code simpler. Think of the existing API as a starting point, and go from there. Chances are good that most use cases are already covered, but there's always something that isn't.

Finally, to help anyone else that finds themselves in this specific situation, I’ve released this as a package that’s available on bower. Just run bower install ng-log-pretty and include both vkbeautify and the library itself in your application and you’ll be off and running. You can also check out the code on GitHub.

Categories
Author
Subscribe to General