Atlantic Business Technologies, Inc.

Category: Development

Here, you’ll find insights on programming languages, frameworks, and techniques that shape the web and software landscape. Whether you’re a developer looking to refine your skills or simply curious about how things work behind the scenes, this space offers practical knowledge and thoughtful perspectives.

  • Uber, Ethics and Mobile App Development

    It didn’t take long for the news of Uber’s conduct to come to my attention. One of my colleagues, Mike McTaggart, wrote a post about it on LinkedIn titled “Uber and Ethics in Technology.” As a mobile application developer for Atlantic BT, I soon found myself being approached by my colleagues wanting to know my perspective.

    If you aren’t familiar with Uber, they’re a service that is essentially a crowd-sourced alternative to a taxi. It’s cheap, efficient, and they have a mobile app to go along with it that makes it easy to use the service to get around. It is also a mobile app that can track users in the background and allegedly has a “God View” tool that lets the company track the movements of their users.

    At Atlantic BT, we pride ourselves on ethical conduct. We need to balance what’s possible with what’s the best position for the client. At times, that can make for some difficult conversations, but they are ones we believe in having because it results in a better end product.

    Avoiding an Uber Situation: Ethics Guidelines in Mobile App Development

    In my career, I’ve gotten requests as part of projects to track a user’s location in a mobile app. On Android, all the permissions an app requires are presented to a user up-front. Sometimes, there are completely valid reasons to request fine location access, such as displaying a map with directions to your destination. But there must always be a balance. In my role as a mobile developer, it is my job to provide guidance to our clients on where that balance is. To help, I use a few simple guidelines:

    • If the application will do something in the background, let the user know, and let them turn it off.

    • Always use the least-invasive method of collection possible. If knowing what county the user is in is good enough, there’s no reason to use GPS.

    • Properly disable invasive data collection when it is not needed. If you aren’t looking at a map to see your current location, I will actively disable location collection.

    • If information is collected, store it securely. If it doesn’t have to leave the phone, store it locally in a protected area.

    • If collected information must be stored “in the cloud” let the user know. Tell them what you are collecting, and when you will store it. Again, let the user choose to turn it on or off.

    What concerns me about Uber and their handling of this situation is that it shakes faith in the mobile application industry. If people decide that they can’t trust mobile app developers, then they will simply find alternatives. A website may be slower and less efficient than a mobile app, but it can’t run in the background. By nature, mobile apps have more access to your device, and in turn, more access to you. It is absolutely imperative that all mobile developers make an effort to retain trust in our industry. When a company like Uber violates that trust, it doesn’t just hurt them and their users, it hurts all mobile developers.

    Maintaining Trust in Mobile App Development

    As I mentioned, I am a mobile developer. I love what I do, and I take pride in my work. I treat every project that I work on with care. I am writing code that users trust enough to install on their mobile  phone, and I strive to always do my utmost to be worthy of that trust.

    I don’t want to  take the same approach as Uber in my work at Atlantic BT. In that interest, I have begun to consider what I can do to prevent that from happening. I will keep the story of Uber in mind, and I will make sure to discuss it if clients ask for something similar. It may be difficult, but if the time ever comes, as Mike said in his post, sometimes “we have to say ‘No.’”

    What other considerations do you think we should have when considering users’ privacy? What can we do to keep your trust?

    *photo credit: IntelFreePress on Flickr

  • Should You Use Social Media Logins on Your Web Site?

    If you’ve visited a Web site recently that requires you to login to a customer account, you’ve likely been given the option to use one of your social media accounts to complete the login process. Using a social media login is fast, easy and fairly common. In fact, a recent study confirmed that in the U.S., 77% of Web site visitors have used a social media account to login to the site at least once and 65% use that option “always or often.” Here are a few additional highlights from the survey:

    • 53% of those surveyed say they use social media logins because they don’t want to spend time filling out registration forms
    • 47% use the social media login option because they don’t want to create yet another password to remember
    • 46% believe the sites that use social media logins will sell the data they collect
    • 42% say they believe the site will post to a social network without the individual’s permission
    • 86% feel that data collection companies should be more heavily regulated by the government

    In reviewing these numbers, there seems to be something of a paradox: Web site visitors are willing to use social media logins even though they believe the companies will misuse that information in some way. And many would be right to say that this doesn’t make sense. But it does seem to point out that in the online space, convenience and simplicity rule the day. And if you are building or running a Web site today, this should be your take away: your customers expect you to make social media logins available.

    Let’s take a look at four benefits of using social media logins within your site.

    4 Benefits of Using Social Media Logins Within Your Web Site

    1. Simplicity for the End User. As the study data points out, a majority of site visitors want to use social media logins because they believe it will save them time. You may have a lot of data you’d like to collect as part of your customer profiles, but your customers have already set the expectation: keep it simple. They do not want to answer all your questions and provide all the tiny bits of data you want to collect. If you make your registration process complex, they will likely abandon your site and move on elsewhere. So, if you want to retain those site visitors, providing a social media login option can improve your retention of customers.

    2. More Data/Better Data on Your Site Visitors. When you offer visitors the chance to use a social media login, you instantly gain access to a lot of profile data (depending on how you setup the permissions for your connection). For example, by allowing a visitor to use his/her Facebook account to login, you now have the potential to connect your visitor, your site and your own Facebook Fan Page together. This will allow you to see better audience demographics. It also improves targeting options for content and advertising. By using a standalone visitor registration process, you would forgo these options and your data would be less valuable.

    3. Identification of Customer Social Network Preferences. If you’ve tried to build a following on the various social network available today, you’ve likely encountered a common problem: finding out where your customers like to hang out. Sure, Facebook is a popular choice, but how much of your audience uses Twitter? Google Plus? LinkedIn? By offering a social media login option, you are, in effect, polling your audience to find out which social networks they prefer. You can use this data to refine your social media efforts and build a better connection with your customers.

    4. Lower Development Costs. Building a Web site with a registration process can be expensive. And the more you ask for from your site visitors, the more you’re going to pay for development. One way to minimize some of your development costs as it relates to the account creation process is to use social media logins. In many instances, the social networks have pre-packaged code ready to use that requires minimal effort by a developer to fit it to your Web site. This will save you time and money. All while providing your visitors with what they were looking for to begin with.

    A Word of Warning About Social Media Logins

    As noted above a large number of site visitors prefer to use social media logins. But that doesn’t relieve you of any responsibilities when setting social logins up for your Web site. We strongly recommend that you respect your customers and make clear the ways in which you will use the data gathered from their social network account. Your customers are already leery of companies that collect this data. Show them that you can be trusted by providing clear policies and practices within your Web site that respect their privacy while providing them with a good experience.

    Getting Started with Social Media Logins

    Social media logins can be very beneficial for your Web site. Not only do they make it easy for your visitors/customers to connect with you, they also lower development costs and provide a wealth of data and insight into customer behaviors. If you’re thinking of implementing social media logins within your Web site, feel free to contact us and let us help you through the process. Atlantic BT has experience helping sites of all sizes implement a social media login strategy that provides the benefits you’re looking for.

    About Jon Parks

    Jon Parks is a Sr. Consultant with Atlantic BT. With more than 15 years in the digital marketing and communications fields, Jon’s focus has been in  helping companies develop digital marketing strategies to achieve their online marketing goals. You can follow Jon on Twitter (@jonparks), circle him on Google Plus or connect with him on LinkedIn.

    *featured image photo credit: mkhmarketing on Flickr

  • Is Your Business Ready for mCommerce?

    Recently, InternetRetailer.com released their annual “Internet Retailer Mobile 500” report which examines the trends impacting the top 500 online retailers. The study found that by the end of 2014, sales that take place on smartphone and tablet devices– known as mCommerce– will approach $84 billion and represent about 21% of all online sales for these 500 retailers. Not to be outdone, research firm Forrester is projecting mCommerce to total 4 billion in the U.S. by the end of this year.

    $84 billion or $114 billion: either way you slice it, that’s a lot of transactions and a tremendous amount of revenue. So the critical question to ask: is your business ready for mCommerce? In this post, we’ll show you what you need to do to get your business ready for an mCommerce environment.

    Is mCommerce Right for Your Business?

    Just because mCommerce is growing at a rapid rate doesn’t mean that you need to rush right out and get ready for mobile shoppers. In some instances, your customers may not be ready to make the jump to buying from you on mobile devices. If that’s the case, you’ll be better off applying your marketing and development dollars to other, more effective areas. But, you may ask, how can you tell if it is time to make the jump to mCommerce? Consider the following:

    How much mobile traffic do you get today? A great place to start is to open up your Web analytics and take a look at how much traffic your Web site currently receive from mobile sources such as tablets and smartphones. Tools such as Google Analytics do a good job of breaking out this data so you can easily answer this question. Look at that traffic. Is it growing over time? Has it risen to what you would consider a significant level? Just having mobile traffic isn’t enough, so you’ll need to go one step further. Segment your mobile traffic and look at it for sales to see if you have any visitors currently trying to purchase from you on mobile devices. Are you finding any attempts? Is it growing over time? If so, you may have an audience that is ready to buy from you on mobile devices.

    Are your products/services a good fit for mobile devices? Would a reasonable person expect to be able to make a purchase from you on a mobile device? I recommend taking a dispassionate look at what you sell and try to make a purchase on a mobile device. Does it work? Would it make sense to complete the transaction that way? There’s a big difference between purchasing a book on a mobile device and trying to complete the purchase of a car via your smartphone.

    What are your competitors doing? Like any good business, you probably have a handle on what your competitors are doing. Take a look at their site. Can you purchase from them on a mobile device? Do they use dedicated mobile apps? Do they have a responsive designed site that makes it easy to buy using a smartphone or tablet? If your competitors are already inching toward mCommerce, chances are you will need to also.

    3 Steps to Getting Started with mCommerce

    So, you’ve looked around, checked the data and it seems like mCommerce is a good fit with what you sell online. The next critical question: how do you get started with mCommerce? Let’s take a look at three key steps to getting started with mCommerce.

    1. Mobile app or responsive Web site? Mobile apps are great for specific types of purchases such as booking and paying for a hotel reservation. In this instance you’ll need to make certain that the app framework will work well with your eCommerce platform. On the other hand, if you have a large product catalog, a responsive Web site might be a better fit.

    2. Involve a good user experience (UX) designer to create a focused design. Good design is important to creating a buying experience that will lead to conversions (sales). Whether you create a mobile app or a responsive site design, working with a UX designer can help you eliminate unnecessary design elements and clutter from the overall design. This creates a more focused experience for the buyer and provides a clear path to purchase.

    3. Get ready to measure your efforts. One of the best things about digital marketing is that you can measure your efforts. MCommerce is no exception. Prior to going live with your mCommerce offerings, you’ll need to develop a marketing analytics strategy that is focused on what you need to measure to evaluate success. Your mCommerce analytics strategy should be able to help you identify what parts of the mobile environment create the best results (sales). This data can be used as part of an ongoing effort to fine tune your digital marketing efforts to drive more mCommerce sales.

    Take the Next Step with mCommerce

    As you can see, mCommerce is an area with a lot of potential. And while many of the traditional concepts of digital marketing are applicable to mCommerce, there are a few specific considerations you’ll want to pay attention to as you explore this for your business. Atlantic BT has helped many leading companies create and establish their eCommerce presence, including mCommerce. Contact our consulting team today to learn more about how we can help you capitalize on this growing avenue.

    About Jon Parks

    Jon Parks is Director of Marketing with Atlantic BT. In his work with Atlantic BT and through the digital marketing consultancy, Dijital Farm, Jon has experience helping companies develop digital marketing strategies to achieve their online marketing goals. You can follow Jon on Twitter (@jonparks), circle him on Google Plus or connect with him on LinkedIn.

  • ASP.NET MVC: Using Ajax, Json and PartialViews

    While working on a new ASP.NET MVC project, I had a simple objective: add a new record and refresh my View. After sifting through several sites I found several resources that lead me to accomplish my goal.

    I’ve compiled my result into a new sample MVC Application that I created in Visual Studio. I’ll explain what I did using that as my reference. It’s a trimmed down version of what I did on the actual project, but it will get the point across.

    Let’s assume we want to have a View that lists some People from our data source. I started out by creating a Person data model:

    public class Person { public Guid Id { get; set; } public String FirstName { get; set; } public String LastName { get; set; } public Person() { Id = Guid.NewGuid(); } }

    Next, I created some ViewModels so that I can work with strongly typed Views:

    public class PersonIndexViewModel { public PersonListViewModel PersonListModel { get; set; } public AddPersonViewModel AddPersonModel { get; set; } } public class PersonListViewModel { public List PersonList { get; set; } } public class AddPersonViewModel { public String FirstName { get; set; } public String LastName { get; set; } }

    Next, I added a People folder in my Views folder and created a strongly typed Index View on my PersonIndexViewModel. I started out with building a table and doing a foreach to display each Person object. I moved that into a PartialView (.ascx) by creating a ParitialView in my Views/Shared folder (This blog post is very helpful for showing you how to use PartialViews). I called that PersonList.ascx and that is a strongly typed partial view on my PersonListViewModel.

    Now, I can update my View to display that PartialView with this code:

    <% Html.RenderPartial(“PersonList”, Model.PersonListModel); %>

    Next, I want to be able to perform a delete action to remove a Person from the DB. You’ll notice I’m using an Ajax.ActionLink in my PersonList PartialView so that I can perform the delete with Ajax.

    <%= Ajax.ActionLink(“delete”, “JsonDelete”, “People”, new { Id = person.Id }, new AjaxOptions { Confirm = “Are you sure you want to Delete this Person? This action cannot be undone.”, HttpMethod = “Delete”, OnComplete = “JsonDelete_OnComplete” })%>

    In the ActionLink, I specify the Action I want to call, pass the Person.Id and in the AjaxOptions I defined a JavaScript method that should be called on complete. In my People Controller I can now add the JsonDelete method:

    [AcceptVerbs(HttpVerbs.Delete)] public JsonResult JsonDelete(Guid Id) { // call your Repository to delete the Person bool result = _personList.Remove(toDelete); // return a Json Object, you could define a new class return Json(new { Success = result, Message = result ? “The person has been deleted!” : “Error!” }); }

    You would call your Repository to delete that Person and then return a new Json Object. What I did was define a couple of properties that I will reference from the JavaScript function to give feedback to the user. Here is the JavaScript function:

    function JsonDelete_OnComplete(context) { var JsonDelete = context.get_response().get_object(); if (JsonDelete.Success) { $(this).parents(‘tr.item’).remove(); } $(“#message”).html(JsonDelete.Message); }

    I found this link that showed me how to use “context.get_response().get_object();” to get the Json Object in JavaScript.

    Now that I can delete, the next logical step would be the ability to add a new Person. I’ll start out by creating a new form that uses my AddPersonViewModel Model:

    <% using (Ajax.BeginForm(“JsonAdd”, “People”, new AjaxOptions { OnComplete = “JsonAdd_OnComplete” })) {%> <fieldset> <legend>Add a Person</legend> <%= Html.LabelFor(model => model.AddPersonModel.FirstName)%>: <%= Html.TextBoxFor(model => model.AddPersonModel.FirstName, new { @class = “firstname” })%> <%= Html.ValidationMessageFor(model => model.AddPersonModel.FirstName)%> <%= Html.LabelFor(model => model.AddPersonModel.LastName)%>: <%= Html.TextBoxFor(model => model.AddPersonModel.LastName, new { @class = “lastname” })%> <%= Html.ValidationMessageFor(model => model.AddPersonModel.LastName)%> <input id=”AddBtn” name=”AddBtn” type=”submit” value=”Add” /> </fieldset> <% } %>

    Again, I use the Ajax.BeginForm to set the Action to call and define a JavaScript function to call on complete. To my Controller I add:

    public JsonResult JsonAdd(AddPersonViewModel AddPersonModel) { … Person newPerson = new Person { FirstName = AddPersonModel.FirstName, LastName = AddPersonModel.LastName }; // call your Repository to add the new Person _personList.Add(newPerson); // return a Json Object, you could define a new class return Json(new { Success = true, Message = “The person has been added!”, PartialViewHtml = RenderPartialViewToString(“PersonList”, new PersonListViewModel {PersonList = _personList}) }); }

    One important thing here is the method “RenderPartialViewToString”. I ran across this which was a tremendous resource in solving my problem here, which was returning a Json Object with a rendered PartialView so that I could use JavaScript/jQuery to update the page.

    The post I referenced above showed where you needed to create a base Controller to inherit from and that Controller defines the methods which will return a PartialView as an HTML string:

    public abstract class BaseController : Controller { protected string RenderPartialViewToString() { return RenderPartialViewToString(null, null); } protected string RenderPartialViewToString(string viewName) { return RenderPartialViewToString(viewName, null); } protected string RenderPartialViewToString(object model) { return RenderPartialViewToString(null, model); } protected string RenderPartialViewToString(string viewName, object model) { if (string.IsNullOrEmpty(viewName)) viewName = ControllerContext.RouteData.GetRequiredString(“action”); ViewData.Model = model; using (StringWriter sw = new StringWriter()) { ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); viewResult.View.Render(viewContext, sw); return sw.GetStringBuilder().ToString(); } } }

    Now with my JavaScript function is called, I can again reference my Json Object and then update the page:

    function JsonAdd_OnComplete(context) { var JsonAdd = context.get_response().get_object(); if (JsonAdd.Success) { $(“#PersonList”).html(JsonAdd.PartialViewHtml); } $(“#message”).html(JsonAdd.Message); }

    With this line:

    $(“#PersonList”).html(JsonAdd.PartialViewHtml);

    I have a div tag that surrounds my Html.RenderPartial call and I can use jQuery to just replace the HTML. Remember JsonAdd.PartialViewHtml contains the entire HTML of the newly rendered PartialView that we called from the Controller:

    return Json(new { Success = true, Message = “The person has been added!”, PartialViewHtml = RenderPartialViewToString(“PersonList”, new PersonListViewModel {PersonList = _personList}) });

    That just about sums it up how to use Ajax, jQuery, Json, and PartialViews in an effective manor in an ASP.NET MVC application.