At BlueMetal we apply Lean Engineering principles to help our clients guide the creation and deployment of software products at high velocity with low risk. In this article, Bob Familiar, Practice Director for Cloud & Services, gives readers an overview of Lean Engineering, the historical underpinnings and detail on the principles that guide the process, methodology and architecture for the products we create with our clients.
The Internet of Things is not a futuristic technology vision. It’s here today, and you probably have elements in your operations already.
Join us for an inside look at how the Internet of Things can take your business to the next level. BlueMetal and Microsoft are presenting the following two roundtable events:
December 2, 2014 – Microsoft – Great Valley Corporate Center – 45 Liberty Blvd, Suite 210 – Malvern, PA 19355 – health care focus
December 5, 2014 – Microsoft - One Cambridge Center – 255 Main St., Cambridge MA - broad focus, keynoted by Dr. Abel Sanchez, Massachusetts Institute of Technology
Agenda for both events:
8:30–9:00 Registration and Breakfast
9:30–10:30 Industry Solutions & Demos
10:30–11:30 Discussion and Close
We hope to see you there!
Last week a group of BlueMetal’s software architects and engineers attended Xamarin’s Evolve conference in Atlanta, and we wanted to share their key takeaways from this exciting conference.
Xamarin Evolve was a lot of fun. Besides all of the great updates from Xamarin I had a chance to experience great sessions from some leading experts in UX mobility and design. I had a chance to meet and socialize with fellow Bluemetalers from other offices as well as with Matt Larson, our partner manager from Xamarin.
My takeaways are not much of a surprise given the following major announcements:
• The new cross-platform Xamarin Profiler to profile applications on Xamarin.iOS and Xamarin.Android. This is a huge improvement from their previous mono log profiler. The new profiler looks and behaves more like Apple’s instruments profiling tool. Although you could profile a Xamarin.IOS application using native tools such as Instruments it did not provide a consistent cross-platform unified experience for both Xamarin.IOS and Xamarin.Android.
• Another major announcement was the Xamarin Android Player. This is a godsend for anyone who has done Android development. The Android emulator provided by Google takes eons to bootstrap and load an application for a debug session. The new player from Xamarin cuts that time significantly from minutes to seconds. Anyone doing native Android development should feel jealous and should be sending complaint letters to Google to do the same with their native Android emulator. Just proves that Xamarin is a great company building great tools and a smart company who knows that keeping developers productive and happy is integral to their success.
• Conversely, Sketches was announced. Another great tool along the theme of keeping developer productivity and happiness high. Sketches allows developers to improve on the typical write, build, test, and deploy workflow. It allows developers to write code and instantly see the intermediate results without building and deploying their code. This is not limited to just a watch-list output seen in a standard debug session, but what the UI may look like as well. In sum, Sketches is a cross platform tool that allows developers to quickly prototype and iterate ideas when creating both Xamarin.IOS and Xamarin.Android applications.
• The other major announcement was related to improvements made to the Xamarin Test Cloud. The Xamarin Test Cloud is an invaluable tool to any organization taking on a native cross platform project especially when it comes to testing Android devices. Based on this article there are over 19,000 distinct Android devices in the world (http://9to5google.com/2014/08/21/there-are-almost-19000-distinct-android-running-devices-in-the-wild/). The major takeaways was a new cross platform automated UI testing framework called Xamarin.UITest. Also, test execution enhancements that allow for parallel execution of test scripts across devices in order to improve overall testing performance in the Test Cloud. Before this feature submitting test scripts against the test cloud could create a queue of requests that ran one after another on the same device. Finally, there was a new video playback capture of the application UI while its running though test scripts.
Some other notable announcements was Xamarin support for AWS mobile services, and support of XIB files for their Xamarin.IOS. However, it was not disclosed when they are going to release the new designer features. When they do roll out XIB file support developers will no longer need to use XCode’s Interface Builder to create views.
I would say Xamarin is “evolving” to support the fuller spectrum of mobile development. We now have Sketches for quick prototyping, upgraded platform tools for building (resource monitor and Android virtual machine), a pretty sweet looking testing platform (Xamarin Test Cloud), and Xamarin Insights, a real time monitoring tool that gives you pretty rich user behavior reporting, error logging, and user notifications (“we fixed that bug you were complaining about”).
So Xamarin is becoming more involved in the project plan as you move from left to right…which is smart and necessary. Test Cloud in particular is a potentially killer feature. The company is committed to getting developers tools to make mobile as awesome as possible.
In general, the Xamarin team seems to be growing at a pretty amazing pace. They were very engaged with conference participants and they’re easy to talk to (and work with).
XAML/MVVM XAML support was very basic in Xamarin Forms – it supported only object creation and initialization. C# equivalent (using object Initializers) is equally concise and seems to be very popular. There is not yet a visual designer for XAML. In fact, Charles Petzold mentioned that the preview of his “Creating Mobile Apps with Xamarin.Forms” book did not contain any XAML code at all. Anyway it was still possible to create MVVM based application (and really cool ones as Charles presented in his “Xamarin.Forms is Cooler than You Think” session). Here is a game changer: Technical preview of the Xamarin Forms 1.3.0 release was announced on October 8. It has behaviors, triggers, styles, dynamic resources, styles based on dynamic resources. MVVM Light V5 with full Xamarin support was released by Laurent Bugnion on October 8. Xamarin Forms 1.3.0 with MVVM Light framework could be very attractive to WPF/SL/WinRT developers. It allows almost seamless transition into mobile development.
Custom renderers Another hot topic – may be the hottest, session room was packed. Custom renderer allows to implement platform-specific customization (look and behavior) of Xamarin Forms controls. This technique is especially important for custom control vendors. Major vendors already have native UI controls sets for Xamarin Forms.
Mobile backend as a service (MBaaS) There were two MBaaS providers which presented at the conference: KidoZen and AnyPresence (along with Microsoft and Amazon).
BlueMetal was a proud sponsor of this conference.
Bob German will co-present a session on OneDrive for Business with Chris Chalmers at two Beyond Tech-Ed events this week:
October 7, 2014 Hartford Marriott 200 Columbus Blvd Hartford, CT 06103
October 9, 2014 Microsoft Corporation 255 Main Street Cambridge, MA 02142
Beyond Tech-Ed 2014 brings you the latest information on Microsoft products and solutions based on the most popular sessions at Microsoft Tech-Ed, Microsoft’s premier technical conference. This free, one day event consists of four technical tracks delivered by Microsoft product experts. Registration starts at 8:30am, and both Breakfast and Lunch will be served.
Netduino is an open source electronics platform using the .NET Micro framework. I was using Netduino to create an IoT application which allows me to turn on the lights in the garage as I come closer to the garage.
- Gimbal (Proximity Sensor)
- Netduino Plus 2
- VeraLite (Z-wave controller)
- Z-wave enabled outlet.
- Azure Service Bus Queue – Setup to hold the commands/messages sent from the mobile App, consumed by Netduino/WCF service.
- Xamarin – To build the mobile app to detect the proximity sensor and send commands to the Netduino using the Azure Service Bus Queue.
This is the way I envisioned it to work:
- The proximity sensor will be in the garage.
- The mobile app will get the proximity information from the sensor as the phone approaches the garage.
- If the user is close, the App will send a message to the Azure Service Bus queue.
- Netduino will poll to the queue for new messages.
- If Netduino finds a message, the command passed in the message is checked.
- The Netduino then connects to Veralite (Z-wave controller) and sends a command to turn the light on/off based on the command in the message queue.
In theory this all should work and it does in most part. I ran into a couple of issues here which I thought might be useful to anyone working on such projects.
- Proximity values from any sensor are always fluctuating. They are never precise. It only provides information that sensor is nearby. Don’t rely on the distance value. It is based on the strength of the signal and not reliable.
- Netduino runs on .Net micro framework. Currently, it does not support SSL. All the blogs I read said that SSL implementation takes up too much memory and Netduino does not have enough to support it. So, you cannot directly connect to the Azure Service Bus queue. Hopefully, someone will implement the SSL stack soon.
But if we modify the architecture a bit, we can overcome the SSL support issue. Here is the modified architecture that worked.
I added an additional layer which acted as proxy between the Netduino and the Service Bus. Instead of Netduino connecting to the Azure Service Bus Queue endpoint, Netduino connects to the WCF service implemented behind the firewall. The WCF service checks for messages in the Azure Queue and returns the messages to the Netduino.
By using the Azure Service Bus Queues, we don’t have to open up ports on our router or setup port forwarding. Doing so, opens our network for all kinds of attacks. Not being a security expert, I would rather have all incoming ports shut tight than try and implement an authentication mechanism.
I was working on a feature stapler to add a list view on the landing page. I simply created an instance of the ListViewWebPart class, set the ListID, ViewGuid and the WebID and added the web part to the page. Great, I saw the web part on the page. But then, I realized that the web part was not rendering the view I had set.
Searching online, I found numerous articles describing how a ListViewWebPart works. To summarize, ListViewWebPart creates a hidden view and uses that view to render. So, even if you set the view while instantiating the web part, it does not use that view.
The solution for this was pretty simple, all I did was use the XSLTListViewWebPart instead of the ListViewWebPart and it used the view that I set. Here is a snippet of code that returns a XSLTListViewWebPart.
public static XsltListViewWebPart GetListWebPartWithViewFor(SPList list, string webPartTitle,string viewName)
XsltListViewWebPart lstWp = new XsltListViewWebPart();
SPView view = list.Views[viewName];
if (view != null)
lstWp.ViewGuid = view.ID.ToString();
lstWp.ViewGuid = list.DefaultView.ID.ToString();
lstWp.ListId = list.ID;
lstWp.WebId = list.ParentWeb.ID;
lstWp.Title = webPartTitle;
lstWp.ChromeType = System.Web.UI.WebControls.WebParts.PartChromeType.TitleOnly;
If your field workforce is up and running on a mobile device platform to do their work, congratulations! You’re already realizing the benefits of stepping away from a paper-based process. But is their mobile experience taking advantage of the latest and greatest functionality? Advancements in just the past two years have been so rapid that many of the functions that seemed revolutionary just a short time ago have been eclipsed. The field service experience no longer needs to be a disembodied app on a device – now the device can act as a Swiss Army knife of tools, as well as an extension of the desktop and your corporate systems.
I interviewed the experts on our Devices and Mobility team, and they shared with me fifteen mobility improvements you can take advantage of today, that will empower your field staff and make their work lives easier:
|1. E-signature capture||Needing to sign on paper, or to use a dedicated device or stylus, which is challenging if it is lost, stolen, broken, or used in a slippery / greasy environment||Sign with your finger.|
|2. GPS location detection||Continual connection to wifi drains the battery.
Example: Needing to track vehicles during their delivery routes, or find equipment or inventory at a facility.
|Get regular location updates without being continually connected.|
|3. Offline / disconnected data access||Long, tedious waiting for app sync; inability to multitask.||Sync in the background while you continue to work.|
|4. Cross-platform availability||Locked into a single platform, heavy reliance on native code.||Provide cross-platform availability with minimal native code.|
|5. Multiple functions in a single device||Dedicated, proprietary devices that provide a single function.
Example: a retail organization having a separate device for everything the customer can do in their stores – price scanning, gift registry, etc.)
|A single device that can support multiple use cases and functions.|
|6. Image capture||Needing to carry a separate camera or switch to separate function.
Example: taking photos during a site inspection.
|Hands-free data capture.|
|7. Audio capture||Ambient environmental noise means poor recording quality.
Example: Elevator shaft inspection – making voice annotations while there is a loud hum in background.
|Custom filters can provide background noise reduction as needed.|
|8. Data capture||Manual data entry.
Example: Capturing environmental temperature at different times of day.
|Sensors can report back to your app, eliminating manual data entry.|
|9. Scanning / barcode||Scan individual items with a dedicated scanner.||Walk into a room and anything with a Bluetooth low-energy signal can be captured.|
|10. Real-time streaming||Streaming kills your cellular plan & battery life.||Design apps to only stream on-demand; implement push notifications for background updates.|
|11. Screen Brightness||Battery drain.
Example: Dim environmental lighting, for example at an inspection site, requires higher screen brightness.
|Profile your app’s power consumption using tools; theme the UI to work well across ambient lighting conditions.|
|12. Dashboards||Lacking the ability to receive alerts and act upon the information displayed.||Sites are responsively designed and the computing power of the device is greater. Receive information, act upon information. See your dashboard on your phone.|
|13. Native applications||Applications such as those in the MS Office suite opened in web browser version with varying results.||The software becomes part of the tool. Applications such as PowerPoint can be opened and projected from the phone.|
|14. Personal assistant||The automated PAs of two years ago produced varying results with limited functionality.||Today’s functionality is much improved. Assistants like Siri, GoogleNow, and Cortana can analyze your calendar and help with reminders.|
|15. Segregation of enterprise / personal||Needing to carry two devices||Today’s mobile operating systems handle this nicely.|
For more information, read our Field Enablement case studies for the Insurance and Medical Devices industries, and join our Field Enablement Roadshow in New York, Chicago, and Boston! We look forward to your feedback!
Consumer expectations are changing the way that corporations design, build and run applications. Employees are increasingly asking their internal IT organizations to provide experiences that are similar to their consumer experiences with websites, devices and applications.
Successful IT organizations are addressing the need to support these increasing business demands by focusing on these pillars and dimensions:
They focus on experience, architecture and process to create successful modern applications.
Experience enables IT organization to deliver applications that operate the way that the user prefers to work instead of requiring the user to change to accommodate the applications. This demonstrates to internal users that the technology team understands their needs and is responding by making their day-to-day activities simpler, more intuitive and more efficient.
Architecture enables IT organizations to deliver applications that can scale to meet the needs of the organization and eventually to external partners. They also ensure that the user’s availability and security needs are met.
Process allows IT organizations to more effectively partner with their business counterparts to build applications. Agile methodologies allow business partners to set priorities every few weeks instead of trying to create rigid yearly plans. They also allow IT organizations to get direct feedback from the end users on what is working and what is not. Breaking down those barriers helps to deliver better software faster to end users.
Thank you for taking the time to read the business drivers of modern applications. We hope that this spurs discussion into how dramatically consumer demands have changed how we should be thinking about building and delivering applications.
In the final series post, we are going to discuss the Process pillar.
The Modern Application Process Pillar focuses on how software development teams are engaging with their business partners and customers to build applications.
Traditional applications are built by disparate product, application development and testing teams. Interaction between the teams is done through liaisons and lengthy requirements documents.
Modern applications are built by teams that contain a cross-section of skills and responsibilities. Team members will include product owners, user experience, development, testing and release (configuration) management. Ideally, the team will share the same space in an office, but often that is not possible. If it is not possible to share the same physical space then the modern application team must use tools to collaborate and coordinate their work throughout the software development lifecycle.
Participation in social networks has grown rapidly over the past decade. Consumers regularly interact with friends and colleagues on these networks. They follow people and are followed by others. They tweet, retweet, share, link, like and comment on content that gets shared with people of all walks of life.
Consumers crave social interaction and want to provide feedback into how their applications are built to better support their needs. All technical teams (development, testing and operations) want to be involved early in the development cycle to ensure that applications are built well. Providing feedback throughout the build process provides a sense of ownership among end-users and improves later adoption.
There is growing evidence that informed groups are better decision makers than a few individuals. In “The Wisdom of Crowds,” James Surowiecki argues that large groups of people are smarter than an elite few, no matter how brilliant those few are. This approach leverages the collective intelligence and experiences of many employees to build better applications.
Successful IT Organizations create cross-functional teams that allow team members to express their opinion and allow the team to set the right application development priorities to support the organizational goals.
Join us next week for the conclusion to this series.
In Part 9 of this series, we are going to discuss on the Availability Aspect of the Architecture Pillar.
As a reminder, the Architecture Pillar focuses on ensuring that the application is built using modern development techniques to create maintainable, scalable and resilient applications.
Traditional applications have extended system downtime to run maintenance and perform batch processing.
Modern applications have limited to no system downtime. They are engineered to allow portions of the application to be taken offline without impacting the availability of the whole application. They are engineered to support multiple versions of the application running concurrently. They avoid batch cycles and instead incrementally update the application data throughout the day.
Consumers expect applications to be available at all times. Prior to the web, there were two categories of consumer systems that had high levels of availability: telephony (dial-tone) and credit card payment (card swipe) systems. Consumer-driven websites embraced the need to be always-on because every second of downtime equated to lost revenue and diminished customer satisfaction.
It has been difficult for IT departments to offer high availability. Many internal IT applications are saddled with long downtimes due to extended system maintenance windows and batch cycle times. They are remnants of the time when employees only worked during business hours within company buildings. IT departments could carve out large maintenance windows for their internal application maintenance.
Modern applications recognize that the need for accessibility of information on an almost 24×7 basis is driving the need for significantly greater application availability. Modern applications are shortening if not eliminating maintenance windows to meet this need. They are transforming daily batch programs into updates that can be run throughout the day and re-engineering their applications so that they can be deployed incrementally. They are increasing availability of their application in a cost-effective manner by focusing on resiliency of many, low-cost components instead of investing in the reliability of a single, expensive component.
Successful IT Organizations focus on application availability instead of uptime through a combination of application development, infrastructure and release management disciplines. They are upgrading or replacing systems that cannot support minimal system downtime. They practice automatically deploying the application to multiple environments prior to going live. To meet this need economically, modern applications must be designed to be resilient.
Join us next week as we wrap up the series when we discuss Engagement.