5 Benefits of Android for Businesses Seeking an Enterprise Application

As per a study published on Fliplet.com titled “Ten enterprise mobility statistics that may surprise you,” by 2015 the number of mobile workers will surpass 1.3 billion globally. Further, as per a mobility survey by CIONET in 2013, Apple ruled the roost at 65% for enterprise application development, Android was a close second with 55% market share. We elaborate here on the top 5 Android app development benefits for businesses seeking an enterprise application.Low InvestmentAndroid is an open-source platform and the software development kit (SDK) is freely available to developers. Further, being a Java-based platform, it is easy to master and execute. There are three stages to development on Android:Application developmentApp testingDeployment to Android App StoreAlso, with Material Design, Android app developers can add intricate details at a very low cost, giving the best ROI.BYOD PreferenceFigure 1: Source: IDC, Aug, 2015 (http://www.idc.com/prodserv/smartphone-os-market-share.jsp)From the pie diagram above, the market share of Android becomes quite evident. For companies that are adopting bring your own device (BYOD) policy, it is feasible to opt for Android as the enterprise app development platform because Android is available on a wider variety of devices to users of all economic groups.Easy Customization Android offers versatility with easy customization options, thus enabling developers to create applications with diverse functionalities. Whether it is complex technical customization or web application integration, Android provides ample space for executing customizations. The platform is designed to accommodate the varying requirements of business. It offers flexibility to integrate communication tools, data management functions, and multimedia tools with easy updates.Security and DistributionGoogle rolled out major security fixes in 2012 across the Android platform, making it a highly secure platform. It further pushed an address space layout customization making it extremely difficult for malware to locate data structure for executing codes. Further, an automated system pushes periodic notifications to users to decrypt their devices. For distribution, Android apps can be marketed via various marketing channels and can be easily found in the marketplace.Wearable DevicesWearable devices are fast gaining traction amongst businesses for the quick communication that can be pushed via smartwatch notifications. As per statistics provided on bolston-technology.com, 54% of enterprises already have a bring your own wearable (BYOW) policy, and 40% are planning to adopt it soon.If your company is designing its mobile strategy and considering a single stable platform to start development with, Android app development is a feasible option. The platform gives width for the applications to grow and expand as per the needs of the company with easy feature integration.The industry average to develop and launch an application on Android platform is 8 to 18 weeks based on a study by fliplet.com. If you want to implement a mobile strategy in the shortest span, Android will be the most recommended platform for its market perpetuation and ease in development.Related Refcard:Code Gems for Android Developers Read more

Google I/O: Android N, Wear 2.0, VR Platforms and Messaging Apps

Events like Google I/O, WWDC and F8 are the most exciting for developers across the world. The anticipation of new product announcements, operating systems and APIs all comes to a head when we get to keynote time. Wednesday's Google I/O keynote delivered on all fronts. Here what you get on day one of Google I/O:  Android Wear 2.0, a new beta of Android N, a huge update to Firebase, instant apps, a new VR platform, new communication apps, a smart speaker, and some news on Android Auto.  To be honest, it's a huge and overwhelming list of things, so bear with me as I give you a brief overview of the headlines. We'll take a look at the "products" after we focus on what's of interest to app developers Android N A new developer preview of Android N was made available today. So far we've seen a new JIT compiler that improves performance and takes up less storage. Alongside that we've had Multi-Window support as well as direct replies within the notification interface. The most recent developer preview brought about Vulkan, a 3D rendering API for game developers. So what does this latest preview bring?First there's a VR Mode for Android to support Daydream, which you'll see later in this article. Android Studio 2.2 gets a big update which includes a new layout designer with a new constraint layout. There's also test recording, faster builds, an APK analyzer and Firebase support.  There are a nuber of improvements to Android Pay. It's now open to all developers selling where Pay is available.The updates make it easier for users to add loyalty and gift cards, along with better mobile web payments. Finally, there are updates to Google Play Services, now moving into the 9.0 version. You'll get a new native ads format, improvements to Nearby Messages, and a video recording API.Android Wear 2.0 You can now get the  developer preview for Android Wear 2.0. New features include Standalone Apps, where an app can access the internet directly, even when your paired phone isn't close by, or turned off. There's also a number of UI changes for notifications, and that make better use of round displays.A set of guidelines on Material Design for Wearables have been published to help you get the most out of your app design.Using the Complications API, any app can show data on any watch face that implements the API. This makes it easier to launch apps from the watch face, and will provide much more variety in what you'll see appear in watch faces in the near future. There are also some improvements to input methods, the Google Fit platform and, obviously, support for Android N features like Data Saver and Java 8 Lambda support. Overall, it's a neat iteration on the current Android Wear SDK. Android Instant AppsThis one was a surprise. Instant Apps is Google's response to those who say that it's easier to have users engaged in web apps, as there's no installation overhead. With this previewed feature, apps can be run by clicking on a URL without any need to install the app. Google claim there are no major changes to source code required - if the app is modularized, Google Play will just download the parts that are needed. It just works with a few selected partners right now, and will be expanded to all developers later on in the year. The best news is that it works all the way back to Jelly Bean, so you won't need users to have the Android N installed. This is certainly a feature to watch with interest.FirebaseFirebase has been expanded to become a unified app platform, going beyind the Realtime Database, User Authentication and Hosting features to give lots more for apps on iOS and the mobile web, as well as Android. The new Firebase is a single SDK that gives you all this plus analytics, remote config, crash reporting, test lab, notifications, dynamic links, invites, AdWords and AdMobs. It's huge news for developers, and does more than fill the void that has been left in the app world since Parse shut down earlier this year. Find out more about it at firebase.google.com.Daydream VRWith Daydream, Google are providing a virtual reality platform built on top of Android N, which is expected to be available in Q3 this year.  As well as requiring more powerful phones, it will just run on Android N and also needs specific sensors.  Using a special headset and controller, the viewer is brought into an immersive experience. With VR versions of a number of core apps like YouTube, StreetView and Google Play Store, a number of large media companies are also getting involved, such as Netflix, Ubisoft and EA. Google Home Amazon Echo has had the smart speaker market to itself for a while now, but that changes with as yet undated and unpriced release of Google Home. With Home, you can use voice commands to play music, control lights and more. It seems to be a little smaller than the Echo, and will come in a variety of colors and materials. If it works as well as presented in the video below, it could easily beat the Echo for market share. New Apps for Messaging and Video CallingAt Google I/O, we saw the release of two new apps. The first, Allo, is Google's smart messaging app. It gives Google a chance to compete with Facebook Messenger and WhatsApp, although the crucial feature will be Google Assistant. The Assistant is the latest in a series of smart chat bots that we're seeing pop up everywhere. It allows Google to get information on everything from your agenda for the day, to flight statuses and finding a restaurant for you.  It also includes features such as Smart Reply, which you'll have seen in Inbox, which learns your behaviour over time, including your response style. Meanwhile, Duo, is Google's answer to Facetime, a video calling apps with crisp HD video. The differentiating feature here is Knock Knock, which shows you a live video preview of the caller before you answer! Both apps will be available on Android and iOS this summer. Of course, if you missed the live event, you can catch up on the entire keynote on YouTube. Read more

Senate committee questions Facebook over news selection

A U.S. Senate committee launched an inquiry on Tuesday into how social media website Facebook selects its news stories after a report that company employees blocked news about conservative issues from its "trending" list.The Senate Committee on Commerce, Science and Transportation asked Facebook Chairman and Chief Executive Mark Zuckerberg in a letter to answer questions about the company's news curation practices and its trending topics section.The investigation comes after Gizmodo reported on Monday that a former Facebook employee claimed workers "routinely suppressed news stories of interest to conservative readers," while "artificially" adding other stories to the trending list.U.S. Senator John Thune, the chairman of the committee, told reporters Tuesday his primary concern was that Facebook may be engaging in deceptive behavior if employees meddled with what trending news was displayed.“If you have a stated policy, which your followers or your audience knows to be the case, that you use an objective algorithm for trending topics -- you better follow that policy,” Thune said. “It’s a matter of transparency and honesty and there shouldn’t be any attempt to mislead the American public.”The letter to Facebook includes requests for information on the organizational structure for the "Trending Topics feature." Adam Jentleson, deputy chief of staff to Democratic Senator Harry Reid, balked at the request in a statement provided to Reuters."The Republican Senate refuses to hold hearings on [Supreme Court nominee] Judge [Merrick] Garland, refuses to fund the president’s request for Zika aid and takes the most days off of any Senate since 1956, but thinks Facebook hearings are a matter of urgent national interest," Jentleson said.A Facebook spokesman said it had received Thune's request for more information about how "Trending Topics" works. "As we investigate, we will also keep reviewing our operational practices around Trending Topics — and if we find they are inadequate, we will take immediate steps to fix them," the spokesperson said.Tom Stocky, the vice president of search at Facebook, responded to the allegations Monday night in a lengthy post published to the social media site saying there are "strict guidelines" for trending topic reviewers who "are required to accept topics that reflect real world events." He added that those guidelines are under "constant review" and that his team would "continue to look for improvements." Katie Drummond, the editor-in-chief of Gizmodo, called her publication's story "accurate" in a statement released to Reuters Tuesday.Gizmodo's report alarmed several social media users, with some conservatives in particular criticizing Facebook for alleged bias."'If a Conservative Speaks - and Facebook Censors Him - Does He Make a Sound?'" Wisconsin Governor Scott Walker (@ScottWalker) wrote on Twitter Tuesday, with a link to a National Review story that detailed the allegations against Facebook. (Reporting By Amy Tennery; additional reporting by Dustin Volz in Washington; Editing by Alan Crosby) Read more

If It's Blue, Let It Through – Opera Raises the Bar on Internet Security

As more and more aspects of our daily lives intersect with the internet, it is important to be aware of just how easily your actions can be tracked, recorded, and potentially used against you.Countries like Australia legally require ISPs to participate in mandatory data retention schemes which means that information like your IP address and details of your communications are available to government bodies. This is why I am so excited about the integration of a VPN service with Opera.Having invested in a VPN service since my own ISP was legally compelled to track aspects of my internet usage, the idea that I can get much the same functionality for free has obvious appeal. A VPN is pretty much a commodity these days, so being able to remove that monthly cost just by switching browsers is a good deal.Beyond just costs though, Opera has solved one of the biggest issues with VPNs by providing an easy way for non-technical users to know if they are being protected.A VPN is, by design, transparent to the end user. Once a connection is established it is actually quite difficult to tell if your internet traffic is passing through a VPN. How do you establish a behaviour of secure browsing in people who are just interested in finding out what happened on Facebook in the last 10 minutes when verifying that a VPN is active requires jumping into another application or opening a website that will extract your public IP address?Opera provides a very simple feedback loop to verify your online protection. There is now a very simple saying that anyone can remember:If it’s blue, let it through. If it’s yellow, your online actions are more likely to be tracked by governments agencies and internet organizations who may not have your best interests in mind.Okay, that yellow bit is not as catchy as it could be, but you get the idea.Of course, VPNs are no guarantee that your online actions are safe from prying eyes. SurfEasy, the VPN company bought by Opera, claims to be “a No Log network”, but how sure can anyone actually be that logs are not being kept somewhere? There is also some contention around the use of the term VPN, with Opera coming up with a new term “Browser VPN” to describe this new functionality:In our case, we are coming with a new term: a browser VPN – and our goal is that all the network activity from the browser is actually routed via our secure proxy – unlike the usual proxies that only route the web traffic. So, it’s different than a system wide VPN but it’s also different than a proxy. Thus – a browser VPN. Currently WebRTC and plugins are still not routed that way – but we’re very open about this – we’ve just released this as a developer preview and planning to fix this in the coming updates.Even still, I applaud Opera for integrating this new feature into their browser, if for no other reason than it sets a precedent that I hope other browser companies will follow in future. I look forward to the day when I can select from VPN or TOR routing directly from my stock browser installation. Read more

Object Behavior Must Not Be Configurable

Using object properties as configuration parameters is a very common mistake we keep making mostly because our objects are mutable—we configure them. We change their behavior by injecting parameters or even entire settings/configuration objects into them. Do I have to say that it's abusive and disrespectful from a philosophical point of view? I can, but let's take a look at it from a practical perspective.Let's say there is a class that is supposed to read a web page and return its content:class Page { private final String uri; Page(final String address) { this.uri = address; } public String html() throws IOException { return IOUtils.toString( new URL(this.uri).openStream(), "UTF-8" ); } }Looks simple and straight-forward, right? Yes, it's a rather cohesive and solid class. Here is how we use it to read the content of Google front page:String html = new Page("http://www.google.com").html();Everything is fine until we start making this class more powerful. Let's say we want to configure the encoding. We don't always want to use "UTF-8". We want it to be configurable. Here is what we do:class Page { private final String uri; private final String encoding; Page(final String address, final String enc) { this.uri = address; this.encoding = enc; } public String html() throws IOException { return IOUtils.toString( new URL(this.uri).openStream(), this.encoding ); } }Done, the encoding is encapsulated and configurable. Now, let's say we want to change the behavior of the class for the situation of an empty page. If an empty page is loaded, we want to return "". But not always. We want this to be configurable. Here is what we do:class Page { private final String uri; private final String encoding; private final boolean alwaysHtml; Page(final String address, final String enc, final boolean always) { this.uri = address; this.encoding = enc; this.alwaysHtml = always; } public String html() throws IOException { String html = IOUtils.toString( new URL(this.uri).openStream(), this.encoding ); if (html.isEmpty() && this.alwaysHtml) { html = ""; } return html; } }The class is getting bigger, huh? It's great, we're good programmers and our code must be complex, right? The more complex it is, the better programmers we are! I'm being sarcastic. Definitely not! But let's move on. Now we want our class to proceed anyway, even if the encoding is not supported on the current platform:class Page { private final String uri; private final String encoding; private final boolean alwaysHtml; private final boolean encodeAnyway; Page(final String address, final String enc, final boolean always, final boolean encode) { this.uri = address; this.encoding = enc; this.alwaysHtml = always; this.encodeAnyway = encode; } public String html() throws IOException, UnsupportedEncodingException { final byte[] bytes = IOUtils.toByteArray( new URL(this.uri).openStream() ); String html; try { html = new String(bytes, this.encoding); } catch (UnsupportedEncodingException ex) { if (!this.encodeAnyway) { throw ex; } html = new String(bytes, "UTF-8") } if (html.isEmpty() && this.alwaysHtml) { html = ""; } return html; } }The class is growing and becoming more and more powerful! Now it's time to introduce a new class, which we will call PageSettings:class Page { private final String uri; private final PageSettings settings; Page(final String address, final PageSettings stts) { this.uri = address; this.settings = stts; } public String html() throws IOException { final byte[] bytes = IOUtils.toByteArray( new URL(this.uri).openStream() ); String html; try { html = new String(bytes, this.settings.getEncoding()); } catch (UnsupportedEncodingException ex) { if (!this.isEncodeAnyway()) { throw ex; } html = new String(bytes, "UTF-8") } if (html.isEmpty() && this.isAlwaysHtml()) { html = ""; } return html; } }Class PageSettings is basically a holder of parameters, without any behavior. It has getters, which give us access to the parameters:isEncodeAnyway(), isAlwaysHtml(), and getEncoding(). If we keep going in this direction, there could be a few dozen configuration settings in that class. This may look very convenient and is a very typical pattern in Java world. For example, look at JobConf from Hadoop. This is how we will call our highly configurable Page (I'm assumingPageSettings is immutable):String html = new Page( "http://www.google.com", new PageSettings() .withEncoding("ISO_8859_1") .withAlwaysHtml(true) .withEncodeAnyway(false) ).html();However, no matter how convenient it may look at first glance, this approach is very wrong. Mostly because it encourages us to make big and non-cohesive objects. They grow in size and become less testable, less maintainable and less readable.To prevent that from happening, I would suggest a simple rule here: object behavior should not be configurable. Or, more technically, encapsulated properties must not be used to change the behavior of an object.Object properties are there only to coordinate the location of a real-world entity, which the object is representing. The uri is the coordinate, while the alwaysHtml boolean property is a behavior changing trigger. See the difference?So, what should we do instead? What is the right design? We must use composable decorators. Here is how:Page page = new NeverEmptyPage( new DefaultPage("http://www.google.com") ) String html = new AlwaysTextPage( new TextPage(page, "ISO_8859_1") "UTF-8" ).html();Here is how our DefaultPage would look (yes, I had to change its design a bit):class DefaultPage implements Page { private final String uri; Page(final String address) { this.uri = address; } @Override public byte[] html() throws IOException { return IOUtils.toByteArray( new URL(this.uri).openStream() ); } }As you see, I'm making it implement the interface Page. Now TextPagedecorator, which converts an array of bytes to a text using provided encoding:class TextPage { private final Page origin; private final String encoding; Page(final Page page, final String enc) { this.origin = page; this.encoding = enc; } public String html() throws IOException { return new String( this.origin.html(), this.encoding ); } }Now the NeverEmptyPage:class NeverEmptyPage implements Page { private final Page origin; Page(final Page page) { this.origin = page; } @Override public byte[] html() throws IOException { byte[] bytes = this.origin.html(); if (bytes.length == 0) { bytes = "".getBytes(); } return bytes; } }And finally the AlwaysTextPage:class AlwaysTextPage { private final TextPage origin; private final Page source; Page(final TextPage page, final Page src) { this.origin = page; this.source = src; } public String html() throws IOException { String html; try { html = this.origin.html(); } catch (UnsupportedEncodingException ex) { html = new TextPage(this.source, "UTF-8").html(); } return html; } }You may say that AlwaysTextPage will make two calls to the encapsulated origin, in case of an unsupported encoding, which will lead to a duplicated HTTP request. That's true and this is by design. We don't want this duplicated HTTP roundtrip to happen. Let's introduce one more class, which will cache the page fetched:class OncePage implements Page { private final Page origin; private final AtomicReference cache = new AtomicReference<>; Page(final Page page) { this.origin = page; } @Override public byte[] html() throws IOException { if (this.cache.get() == null) { this.cache.set(this.origin.html()); } return this.cache.get(); } }Now, our code should look like this (pay attention, I'm now usingOncePage):Page page = new NeverEmptyPage( new OncePage( new DefaultPage("http://www.google.com") ) ) String html = new AlwaysTextPage( new TextPage(page, "ISO_8859_1") "UTF-8" ).html();This is probably the most code-intensive post on this site so far, but I hope it's readable and I managed to convey the idea. Now we have five classes, each of which is rather small, easy to read and easy to reuse.Just follow the rule: never make classes configurable! Read more

Older Post