Quantcast
Channel: Infragistics Community
Viewing all 2223 articles
Browse latest View live

The CIO’s new role in enabling digital transformation

$
0
0

 

Challenges present themselves everywhere. When faced with challenges, some grow stronger; some see the idea of challenge not as a negative but as a positive. It’s important to remember (without getting too ‘New Age-y’) that within all challenges there are opportunities for rejuvenation and transformation.

The idea of transformation is a very handy mindset to have for a Chief Information Officer (CIO) today. IT innovation has never been as rapid and for CIO’s the pressure is on to keep up. An important aspect of the job has always been about helping their business take advantage of the latest technology trends, and never more so than today, where mobile and cloud computing are smashing down cultural norms and changing how we do things.

In today’s post we will look at the challenges CIOs face in the wake of rapid digital innovation, the universalization of mobile technology in the workplace and how they can turn these challenges to their own advantage, while still ensuring the progression of their business’ IT capabilities and enable positive digital transformation.

Shadow IT

One of the biggest challenges a CIO faces is the emergence of Shadow IT. Many readers may already be aware, but for those who are not, Shadow IT refers to IT systems and solutions that are used in your business without the knowledge and/or the approval of corporate leadership. ‘Stealth IT’ is another term used that means the same thing, and it is something that is redesigning how IT departments need to operate to keep the right amount of control over their company’s IT infrastructure.

The Cloud and mobile technology is changing the world. It is also changing how we work. There are now so many consumer apps out there that your employees may use to get their work done, even when these tools have not been passed through the usual processes of your IT department to make sure they are functional, can support multiple users and secure. With the prevalence of BYOD (Bring Your Own Device), CIOs and IT departments are put in a tricky position.

Do you choose to try and ban all unauthorized apps on a personal or corporate device? Or, do you work to ensure stability, security and compliance for any and all applications your employees use? Perhaps you should allow employees themselves to choose the apps that they feel allow them to get their work done most efficiently? It’s important to keep in mind that with the rate of innovation only continuing to increase, it’s likely that even the most progressive IT departments will, at varying points, fall behind the curve of the latest trends.

So, what can you as a CIO do to make sure your systems and corporate content remain secure, your employees are working within consistent platforms but also have the latest technology available to them to get their jobs done with the minimum of fuss and frustration?

Challenge vs. Opportunity

Shadow IT is a complicated matter. It is both a challenge and an opportunity facing CIOs in the corporate world. The challenge revolves around keeping company data safe and in line with compliance and other regulations, without alienating your workers who want the latest apps and tools. It’s a balancing act for each individual organization and CIOs need to make this decision based on their company’s circumstances.

There are a number of things that a CIO should consider to help make sure Shadow IT, mobile working and cloud trends work for you and your company rather than hinder you and create unnecessary risks.  

Understand how information flows around the business now

Information has long been the lifeblood of business. However, the manner in which we access our information has changed right along with the innovation of new technology. As a CIO you need to be fluent in the current devices, apps and tools that your employees are making use of to access this information and how it impacts workflows and communication. You’ll also need to be able to predict what the next innovation will be. That means keeping a close eye on what’s happening in both business and consumer tech, and by facilitating the flow of information within your company rather than getting hung up on your changing influence. Remember what the ‘I’ in your title stands for.

Change management

Updating systems and ensuring high adoption rates have always been the bones of the job. When a better way of doing things becomes apparent in IT, it has always been the CIO’s job to effect positive change within their company, and deal with the risks. It just so happens, with the cultural shift that mobile and cloud computing is causing, the change is happening much faster than what many have been used to. A starting point should be implementing usage policies regarding BYOD and remote working that protect corporate data without compromising users’ productivity.

Ability to manage culture shifts

This shift goes beyond the concept of ‘fast change’, and may as well be considered ‘constant change’. It represents a cultural shift as deep and meaningful as anything has in the past – think the move from typewriter to desktop computer or the advent of the Internet. It is and will be the CIO’s job over the coming years to chaperone their business into this world of continuing innovation by constantly helping their team to move with the changes. The ultimate way to reduce shadow IT is to make sure your IT systems are as optimal as possible so there is no temptation for your employees to stray to unauthorized tools. But of course that’s not always possible, meaning being flexible is the key and accepting that shadow IT will likely continue to be on the periphery.

The complete solution for any large-scale digital transformations, enterprise mobilization and modern UI initiatives. See what's new in Infragistics Ultimate 16.1!

       


Windows Forms Release Notes - April: 16.1 Volume Release

$
0
0

Release notes reflect the state of resolved bugs and new additions from the previous release. You will find these notes useful to help determine the resolution of existing issues from a past release and as a means of determining where to test your applications when upgrading from one version to the next.

Release notes are available in PDF and Excel formats. The PDF summarizes the changes to this release along with a listing of each item. The Excel sheet includes each change item and makes it easy for you to sort, filter and otherwise manipulate the data to your liking.

Download the Release Notes

PDF - Windows Forms 2016 Volume 1
Excel - Windows Forms 2016 Volume 1

10 Tips for Using AngularJS

$
0
0

There are a lot of powerful frameworks out there, but if you don’t know best practice, they can be pretty confusing. In this post we’ll be looking at Angular JS. First of all, what actually is Angular JS?

Angular JS is a JavaScript-based open source web application framework used to develop rich HTML Web applications in a modular fashion and using MVVM framework (try and say that quickly). As it implements an MVVM framework, it helps you develop applications with less code and more flexibility. Since Angular JS is completely client side, it also helps you to create mobile or tablet apps easily. For example, YouTube applications on the PS3 are built using Angular JS.

There are many features available with Angular JS, below are just a few standouts:

  1. Data-binding– Angular JS provides the directives in order to bind your HTML (view) with your JavaScript functions (controller).
  2. Form Validation– Angular JS provides form validations which are a basic requirement for any application that accepts input.
  3. Dependency Injection– AngularJS has a built-in dependency injection subsystem that helps developers by making the application easier to develop, understand, and test.
  4. Templating– Angular JS provides a way to create your own HTML templates which can be multiple partial views or even a single page
  5. Routing– Like MVC, Angular JS also provides the routing feature to switch between views.

 

A history lesson...

Angular JS made its debut in 2009 and was developed as an attempt to replace the Google Web Toolkit. The previous code name of Angular JS was ‘Locality-Filtration’. Misko Hevery and Igor Minar of Google were the founding members of the Angular JS in-house development team. After its success, Angular JS was officially supported by Google and made into an open source framework. The 1.0 version of Angular JS was released in 2012 and version 1.5.5 is the current stable release of Angular JS (also known by its code name ‘Ice-Manipulation’).

There are many JavaScript based frameworks available to create Rich Client side applications using an MVC pattern. However, each of them has its own special way of harnessing JavaScript’s power. In the rest of this post, we’ll look at the best ways of harnessing that power with Angular JS.

Harness your powers (like Spiderman)

If you’ve decided to use it for your application, below are some of the best practices for Angular JS:

 1. Initialization & Expressions– When you develop any web application, always load your JavaScript code at the bottom of your HTML so that the loading of the HTML is not hampered in order to load your JavaScript files. Also, split your complex logic into methods in the controller which can be rendered in specific views. Each controller should only contain logic for that particular business view.

 2. Modularize your Angular Code– When we start writing applications we tend to include everything in the main module. This is fine for a small app, but when it comes to managing the code for a more complex tool - which tends to get big over time - it’s a huge pain. So, always split your code into proper modules. Divide your application features into modules and accordingly create their Angular Modules. This way you can reuse the modules in another page or view.

 3. Avoid DOM manipulations– Most of the DOM manipulations will be available as an out-of-the-box feature of Angular JS, so use those features wherever possible. The reason for this is that Angular JS has a mechanism that ensures all its various pieces are in sync. Now, if you manipulate DOM, Angular JS triggers the events automatically to make the application state consistent which increases the unnecessary overhead on the application. If you still have to do DOM manipulations, always aim to do your manipulations inside a $scope.$apply(callback) function.

 4. Keep Business Logic in Models– Always keep your business logic in models so that it can be easily shared between the controllers and other services. This way we can easily perform unit testing on the models. The model is for application logic which is specific to your application and how it wants to interact. Controllers should only direct your code to a method or service that updates your model and in your model create helper classes to implement that business logic.

 5. Validations in Angular JS– Angular JS provides the wonderful feature of validating your form. This is the backbone of any application that accepts user inputs. Most often, forms validation is written in separate parts as: ‘if, else if..’ which is a very bad practice. In this approach, the user has to submit the form so many times to see one validation error after the other.

Angular JS, by contrast, provides a way of validating the form as the user is filling it out. And of course, almost all validations are provided by Angular JS directives as out-of-the-box and are easy to use.

 6. Utilize the Angular JS unit testing– Unlike other frameworks, Angular JS provides a great framework to unit test your models. Most of the time, developers do manual testing to see if their code is functional or not. Sometimes, to test a minor change, manual testing takes more time compared to developing a unit test. The Angular JS core team developed a couple of tools - Protractor and Karma– to do the unit testing of your Angular JS code for you. Thanks guys!

 7. Invest in Naming Conventions– The most important thing when developing any application should be to set up consistent naming conventions so that your code is easily readable and manageable. Any developer should be able to read your code and maintain it in your absence.

 8. Define your components– Do not include your model, controller and factory components in a single file. Create three separate files for each and accordingly write your code in each of them. Something like this myapp.module.js, myapp.controller.js, myappfactory.js and so on.

 9. Scopes– This is one of the most important features which every developer should take care of. The scope should always be write-only in controllers and read only in templates. Do not create properties in the scope – use the object.

Now with full support for Angular 2 Beta, see what's new in Infragistics Ignite UI 16.1!

The Future of Work

$
0
0

What will the future look like? This has been a popular question since… forever. In the 1950s the predictions for the turn of the millennium noted that common, universal interplanetary travel was something more probable over possible, as was finding intelligent life on Mars. Robots would be in every home, helping with the household chores, and our telephones would fit in our handbags.

Well, from our perch of 2016 we can see how wide-of-the-mark some of the predictions were and yet how close to the reality others remain. Take, for instance, the one about how our telephones will fit in our handbag. They do, and so much more besides.

Here’s a prediction of our own: the future of work lies in the world of mobile. It’s all about flexible working. The future will see more and more of us working remotely and in a more adaptable way. Today’s post is about the future of the enterprise, about how the workplace is changing, what we can look forward to in the next few years and how your business should be preparing to take advantage of innovations that are available right now.

Mobile working

These days not only do our cell phones fit in our handbags (and our pockets), they are an all-powerful source of information; a tool for getting both personal and professional tasks completed; an interactive map, a watch, an instant messenger, an email client, a conference call creator, a camera, a word processor, and a file sync and share tool among many other functions. In fact, actually making phone calls is almost the last thing we use our phones for these days.

And innovation isn’t plateauing here. At the rate of progression of machine learning, computers are changing what they can do and, by proxy, what we can achieve with them. The level of learning and automation is such that programs can successfully complete an even greater share of the our most tedious, banal, motivation-reducing tasks so that we can concentrate our energies on the more important aspects of our work and business. The goal for the immediate future will be for devices having the ability to anticipate our needs and allow us the space to be even more productive. But the ‘future’ is almost here already. The productivity we can achieve with our smartphones right now would seem incredible to someone even five or six years ago.

Remote work today has become much more feasible and much more popular than in the recent past. But it’s not without its challenges.

The rise of freelancing

There are multiple forces transforming the way we work. Companies across all industries, are undergoing a rapid disruption to how they do business thanks to IT innovations. There are now better ways to be productive at cheaper costs, but that also means these companies face more competition than ever as cloud computing has leveled the playing field– allowing smaller businesses the resources to compete against their bigger rivals.

One of the changes that has come about is the rise of freelance workers. Approximately 30% of the workforce in the U.S. are freelancers, and the expectation is for this to rise to 40% by 2020. With so many companies of differing sizes, there is a lot of choice (and work) out there for a freelancer. But it’s not all plain sailing: working freelance means you gain the added task of looking after your own marketing, taxes, benefits such as healthcare, etc. and also you may miss out on the more intangible aspects of being office-based, like the socializing, and possible on-the-job learning.

Combining freelancing with full employment

Perhaps the ideal of the future of work is to get to a happy medium which combines all the benefits of freelance with the security and engagement of being part of a team. That’s where the process of remote collaboration comes in. If you could be part of a great company but also work on your own specific schedule, whenever and wherever it was most convenient for you, that would likely increase motivation, productivity, as well as company loyalty, right? Data compiled from numerous studies, articles, and whitepapers suggest that it would.

We have you covered

With SharePlus from Infragistics you get the benefits of remote and flexible work with your team by mobilizing your SharePoint investment. Improve your organization’s collaboration instantly in the simplest, most cost-effective way. Your teams from across the globe as well as locally can access multiple file sources and content from on-premises and in the Cloud, enabling them to share, organize, and work together wherever they need to. Set up a custom mobile workspace for specific projects and share and store important content where everyone can see it. Build and manage projects remotely, work collaboratively with colleagues from two seats down to two time zones away.

As we move to increasingly more flexible ways of getting our work done, your business needs solutions that will allow you to stay ahead of your competition. Whether you are a team of freelancers operating out of a digital office, a traditional ‘brick and mortar’ company, or a combination of both, SharePlus allows you to stay connected and securely collaborate from anywhere at any time. Customize your workspace and how you work by mobilizing your business practices; reduce the cost of IT infrastructure, boost productivity and gain a significant ROI.

To find out more about how Infragistics can help your business move into the future and mobilize your business practices, visit us now. Or, for a free trial of our SharePlus mobile collaboration tool click here.  


When it Comes to Dataviz, Color is Complicated: Part 1

$
0
0

In all the articles I've written here I've covered a fairly broad range of topics related to data visualization: the use of tick marks and labels, data density, the problems with dual-axis charts and much more. I've touched upon the use of color a few times but only in passing. That's because I think, while interesting, the topic can be quite confusing and that makes writing short articles difficult. In this two-part series I'll try to bring together previous advice on the use of color, cover why I think it's a complex topic, define some relevant jargon, and provide links to a few resources that I have found useful. In this part I cover why what we see might not be what we expect to see. In Part 2 I'll look at picking suitable color palettes.

What Color is That?

One morning in February 2015 I awoke and checked what was going on in the world via Twitter. Everyone was talking about a white and gold dress. Or rather they were talking about what looked like to me like a white and gold dress. Many felt the same as me but some strange people were claiming it was blue and black. It turns out those strange people were actually right. The viral phenomenon that was "the dress" showcased the peculiarities of our vision system.

Colin Ware describes, on page 69 of Information Visualization (third edition), how "[n]eurons processing visual information in the early stages of the retina and primary visual cortex do not behave like light meters; they act as change meters". One benefit of the complex way our visual system works is that we can usually detect a gray surface as being gray, a white surface as being white and a black surface as being black whether we're in bright sunlight or a dimly lit room and independently of the color of the illuminant. This is called "color constancy" and it shouldn't be too difficult to imagine how this could have been an evolutionary advantage in the past. Information about the light source itself is usually much less important.

To achieve color constancy the brain has to make some educated guesses about the illuminant. Sometimes it gets things wrong. This would appear to be at least part of the reason for the disagreement over the dress.

If you're creating a visual representation of some data it's rare you'll ever have to worry too much about the perceived colors of a dress. But it does still highlight the fact that sometimes we misinterpret color stimuli. Take the simple image below:


If you've never seen this illusion before you may be surprised to learn that the small squares are the same color. You can check this using the eyedropper or color-picker tool of your favorite image editing program. If you're on a Mac it's quicker to use OSX's DigitalColor Meter app.

This color contrast illusion can be significant for data visualization: if you're using the same color encoding on two different backgrounds you need to check whether they really look the same. Remember the blocks of color in your key or legend too. If a chart background is, say, light gray then the background in the key should also be light gray and not white or black (we're not talking about natural illuminants here so don't expect your brain to fix it for you).

Not Everyone Has Perfect Color Vision

The color-sensitive cells of the retina are called cones and we (most of us) have three types - millions of each - making us "trichromats". The types are frequently referred to as red, green and blue, though it's more proper to use long (L), medium (M) and short (S), describing the wavelengths of peak sensitivity. Even this is very much a relative designation: L cones are most sensitive to light at around 580 nanometers, M cones to light at around 540 nm and S cones to light at around 450 nm (Ware, page 97). (There's no relation here with the designations for radio waves!)

Color blindness, or color vision deficiency (CVD), in humans is the result of a lack of, or deficiency in, one type of cone cell. It can be acquired or inherited and the latter is fairly common in men (around one in 12 suffer). If it is L or M cones that are lacking the resulting condition is frequently described as red-green color blindness, while blue-yellow color blindness results from defective S cones. In reality, the effect is more nuanced than these common names would suggest and a number of tools have been developed to help trichromats without a CVD ensure their work is accessible to those who do suffer. My favorite is ColorOracle. It's a really simple app for Windows, Mac and (some) Linux OS's that sits in the notification area (system tray) or menubar. You click on its icon, select a form of color deficiency and it instantly (temporarily!) changes the colors on the screen to simulate the deficiency.

Deuteranopia, the formal name for a problem with M cones, is the most common form of CVD. As I've previously mentioned, it's a good reason to avoid using only red and green color encoding in your visualizations. If you do want to use a "traffic light" color scheme then one option is to use a secondary encoding to reinforce the differences, for example a red circle and a green triangle (perhaps with an amber square).

Try one of our most wanted features - the new XAML 3D Surface Chart and deliver fast, visually appealing and customizable 3D surface visualizations! Download Infragistics WPF 16.1 toolset  from here.

A dribbble chapter at Infragistics

$
0
0

 

Show and tell for designers based in Sofia

clip_image002

In the world of design, dribbble is the go to place for sharing your own design concepts and ideas and a treasure island for designers wanting to browse, comment or get inspired by shots (screenshots of the works of others). I believe that this vivid online community is very well known across all digital professionals, if not by the name, then most likely by the distinctive pink basketball logo.

This week the fifth Sofia dribbble meetup took place with the support of Infragistics and the design team from our office in Bulgaria. Together with the design fellas from KickflipX, the same team behind one of the most memorable workshops at UXify Bulgaria 2015, we brainstormed topics for discussion and made sure there were enough swag items, cold beers and fresh chips. We also selected a brand new location in one of the newest co-working spaces in Sofia, 1Hub.

The discussion part exceeded our expectations and the two hours that we planned were only enough for half of the topics. We kicked off the meetup with a discussion about content strategy. As designers, we all agreed that content, not design, should happen first. But we also agreed that this rarely happens.

People shared their workarounds for lorem ipsum, like stripping all the content from your closest competitor’s product or making up funny copy, as described in an earlier Infragistics blog, “Wireframing and Deadpool”. Some people also shared that even when there is content, it is rarely the real deal because it may not have been written by a copywriter. Sometimes it is badly structured, written by the customer themselves, or overwhelmingly long and complicated.

Of course, the topic of “dribbblisation” of design was brought up (the danger of polishing your concepts too much, too early in the process) and risks this involves. A small orange basketball served diligently as the token-to-speak and helped us with the moderation even when opinions got intense.

clip_image004

The token-to-speak orange basketball in the middle held by Vasil Enchev (uffo), a dribbbler with
sharp sense of humor, who calmed us down when we got too serious. Image attributed to the author.

Next we discussed some practical topics, including different ways to earn traction as a designer. The best dribbblers in the room shared their ways of getting followers in the community and the types of projects that converted best. One of the group’s insights was to join “challenges”, e.g. Daily UI elements for 100 days, as a proactive participant. Darin Dimitrov (deezel) shared how a blog post he wrote a while ago got him tons of freelance contracts and with that we kicked off a short discussion about blogging. After another short discussion on contracting as a freelancer and making sure that you don’t get tricked by the client, we settled down to a lengthy discussion about productivity hacks when working out of the office. To be more precise, we spoke about how we focus and stay productive during occasional work-from-home days, working from home on a long-term basis or working from a co-working space. Our hosts from 1Hub also joined the discussion, sharing some reasons and insights regarding why their customers book a desk rather than work from home. When working from a home office, we discussed ideas like pomodoro, a standing desk, and dedicating a certain area of your home to work, work and work.

The most awaited and exciting part of the meetup was during the closing minutes, of course. There was a license raffle for which Infragistics provided 5 one-year licenses for the latest version of Indigo Studio. Happy one year of free prototyping, remote usability testing on indigodesigned and code generation to all the winners!!!
clip_image006

Photo or it didn’t happen, 3 guys and 2 gals went home with licenses for Indigo Studio. Another lucky
three got the Infragistics T-shirts laying on the desk in front of me. Image attributed to the author.

Simplifying Objects, Inheritance and prototype in JavaScript

$
0
0

Although JavaScript is a Class-Free language, it supports objects creation, overriding properties/methods and inheritance. In this post, we will explore the concepts of object creation and inheritance.

In JavaScript, Objects can be created in three possible ways:

  1. An object as literal
  2. Using the function constructor
  3. Using the Object.Create method

Object as literal

A simple object Student - as an object literal - can be created as shown in the listing below:

var Student = {

    name:"dj",
    age:32,
    Father: {'name':'Ram','occupation':'service'
    },
    Subjects: [{

        name:"Physics",
        marks:89
    },
	{

	    name:"Chemistry",
	    marks:95
	}]
};

Above we have created an object called Student. There are three types of properties attached to Student: simple properties like name and age, complex properties like “Father”, and an array property called Subjects. We can read properties as shown in the listing below:

console.log(Student.Father.name);for (var i in Student.Subjects) {
    console.log(Student.Subjects[i].name);
}

We can also have a function serve as the property of an object, which is known as the method. So let’s say we want to attach a method “Speak” to the Student object.  We can add the Speak method as shown in the listing below.

var Student = {

    name:"dj",
    age:32,

};

Student.Speak =function (message) {var finalMessage =this.name +" has said :"+ message;
    console.log(finalMessage);
};

Student.Speak("I am the best");

On calling Speak function as method, we will get output as shown in the image below:

There are some important points about the Speak method to remember:

  1. Properties can be added to an object at any time; a property can be added to an object after its creation too. For example, we added the Speak property later to Student object, rather than at the time of object creation.
  2.  In the object’s method, the object is defined by value “this”. That is why we are able to print the name of the Student using this.name in the method.
  3. Calling a function as method is known as “Method Invocation Pattern”

In the above example, we are calling the Speak method on the object “Student”. So the value of this inside the Speak method is the Student object.  

If we want to pass some other object as the value of “this” in the method, we can use the apply or call function. For example, we have one more object called Parents and,

  1. We are calling the Speak method of the Student object directly and the value of “this” in the Speak method would be Student.
  2. We are passing Parent as the value of “this” in the Student object’s Speak method. We are using the apply function to call the Student object’s Speak method and passing the Parent object as the value of this.

We can perform above tasks as shown in listing below:

Student.Speak("I am the best");var Parents = {'name':'Ram'
}


Student.Speak.apply(Parents, ["I am the Best"])

 On running we will get the output as below:

As you may infer from the output, the value of “this” in the second line is Parent, hence as output we are getting Ram for the value of name.

Using function constructor

The second way of creating an object is by using the function constructor. When we call a function using the new operator, the function becomes a constructor and returns the newly created object. In the function constructor, the current object is represented by “this”.

function Person(name, age) {this.name = name;this.age = age;this.message =function () {
        console.log(this);
        console.log(this.name +" is "+this.age +" years old !");
    }

};

var person1 =new Person("dj", 32);var person2 =new Person("mj", 34);
person1.message();
person2.message();

In the above listing, we are calling the Person function using the new operator, hence, the Person function behaves as a function constructor and returns a new object which is being saved in person1 and person2. We are then calling the message method on the person1 and person2 objects.  

On running the above snippet, we will get the output as shown in the image below:

One point worth noticing in the above output is that each object has its own message method. In many cases, you may not want that. Perhaps, you may want the message method shared across objects with the value of “this” set to the object calling the method. This can be done by attaching the message method to the prototype of Person.

function Person(name, age) {this.name = name;this.age = age;

};

Person.prototype.message =function () {
    console.log(this);
    console.log(this.name +" is "+this.age +" years old !");

}
var person1 =new Person("dj", 33);var person2 =new Person("mj", 34);

person1.message();
person2.message();

What is happening here? On executing the above snippet, you will find that the message method is not getting copied for each object, and it is part of the prototype of the Person constructor function.  When running the above snippet, you’ll get the output shown in the image below:

Function constructors enable us to have private properties in the object. We can create a private property in two possible ways –

  1. Using the var instead of this to create a property
  2. Using the REVEALING PATTERN.

A private property can be created using var as shown in the listing below-

function Person(name, age) {var prvvar ="i m private"this.name = name;this.age = age;
};var person1 =new Person("dj", 33);var a = person1.prvvar;
console.log(a);

Here, the expected value of prvvar outside the Person function is undefined. 

Another way a private variable can be created is by using the revealing pattern. We can create private properties by explicitly returning public properties and public methods from the constructor function as shown in the listing below:

function Person(name, age) {this.name = name;this.age = age;return {
        pubvar:this.name +" is "+this.age +" years old"
    }
};var person1 =new Person("dj", 33);var a = person1.pubvar;
console.log(a);

Let us see what is happening here. We are explicitly returning pubvar as public property. In above snippet, name and age properties become private variables and accessing them outside the Person function will return undefined.

 Inheritance in JavaScript

JavaScript supports prototype-based inheritance so instead of class, objects inherit each other. Before we learn about inheritance, let us have a look at a prototype in JavaScript. In JavaScript, a prototype behaves differently for functions and objects.

What is a prototype?

Every function has a prototype property. Let us consider a function as below:

function foo(name) {this.name = name
};var fooPro = foo.prototype;
console.log(fooPro);

As output, we will get an empty object as the prototype value of the function.

 

A function prototype is the object instance which eventually becomes the prototype of all the objects created using that function constructor. 

Let us go ahead and create objects using the new operator for the foo function. In the below listing, we are creating two objects and then printing __proto__ value of both the objects.

foo.prototype.age =30;var fooobj1 =new foo("mj");var fooobj2 =new foo("dj")

console.log(fooobj1.__proto__);
console.log(fooobj2.__proto__);
if (fooobj1.__proto__ === foo.prototype) {
    console.log("true");
}

You will find that __proto__ value of both objects are the same. Also one important observation could be __proto__ value of objects are equal to the prototype value of the function. The expected output would be as shown in the image below

By looking at the above example we can say that the function prototype is an object instance which will become the prototype of all the objects created using that function as a constructor.

On the other hand, objects do not have prototype values, instead, they have __proto__ value.  Let us consider below example:

var foo ={};
console.log(foo.prototype);
console.log(foo.__proto__);

We are printing the prototype value of foo and also __proto__ value of foo.  For prototype value, JavaScript will return undefined, whereas for __proto__, it will return an empty object. The expected output would be shown as seen in the image below:

Each object inherits an object. Object __proto__ value is set to the object instance from which the object is inherited.

Using __proto__ for inheritance

Some important points about JavaScript inheritance are as follows

  1. JavaScript supports prototype based inheritance
  2.  In JavaScript, objects inherit each other
  3. The Parent object is also known as the prototype of the child object in JavaScript.
  4. In JavaScript inheritance is implemented through  (for objects) special property __proto__
  5. To access a property, JavaScript first searches objects, if it does not find it, it searches that in __proto__ property of object.  In modern browser __proto__ property is also known as prototype property.

Let us start with two very simple objects

var animal = {

    eats:true,
    canRun:function () {
        console.log("yo can run!");
    }
};var dog = {

    canbark:true
};

Here we have two objects: animal and dog. The object animal has two properties – eats and canRun. The object dog has one property: canBark.

Let us see how object dog can inherit the object animal. Using the _proto__ property, dog can inherit animal as shown in the listing below:

dog.__proto__ = animal;
console.log(dog.eats);
dog.canRun();

By setting __proto__ property to animal, we inherited animal to dog. As you notice in the above example, now on the dog object, we can access the eats and canRun properties.

JavaScript interpreter searches for the property in two steps.

  1. First it searches for a property in the current object. If it finds it, it uses it.
  2. If it does not find a property in the current object, it searches for the property in the __proto__ values of the object until the __proto__ value becomes null.

Working with “this” in inheritance

Regardless of the value of __proto__, JavaScript always assigns the current object as the value of “this”.  To understand it, let us modify the previous object,s animal and dog.

var animal = {

    eats:true,
    canRun:function () {this.isCute ="yes"
    }
};var dog = {

    canbark:true
};

As you notice, we have two objects: animal and dog. In the animal object’s method canRun, we are creating a property isCute and attaching that to “this” or the current object. Let us go ahead and inherit animal in dog.

dog.__proto__ = animal;
dog.canRun();var flag = dog.hasOwnProperty("isCute");
console.log(flag);

As you rightly noticed, using the hasOwnProperty() method, I am checking that whether isCute is property of the dog object or not. We will get output of true. This happens because before calling the canRun() method , JavaScript assigns dog as the value of “this”.

The JavaScript method hasOwnProperty() returns true for the object’s own property and false for the properties of the prototype. In this case it would return true, because isCute has been attached as the property of the dog object.

Let us take one more example to explain how value of “this” gets assigned. In the previous example, we used __proto__ to create the inheritance. In this example, we will use the Object.create() method to clone an object. Later in the post, we will cover more about Object.create().

Let us consider we have an object foo as shown in the listing below:

var foo = {

    c:8,
    add:function () {this.c =this.c +1;
    }
};

Object foo has two properties, c and a method add. In the add method, the value of the c property is getting incremented by 1. Next let us go ahead and create another object by cloning object foo using the Object.create() method.

var koo =Object.create(foo);
koo.c =99;
koo.add();
console.log(koo.c);

What is happening in the above code snippet? We are creating the object koo by cloning the object foo. So object koo has all the properties of foo. We are setting the value of property c and then calling the method add on the koo object. As we discussed in the previous example, regardless of the value of the prototype, the value of “this” is always set to the object before the dot in calling the method.  So in this case, the value of “this” is set to the koo object. The expected output of the above snippet would be 100.

 

With the new ECMA specs, __proto__ is getting depreciated, and all browsers support prototypes. We can use a prototype instead of __proto__ to create the inheritance. Keep in mind that a prototype only works with function constructors, and it is widely supported in all the browsers.

Let us see how a prototype can be used to create an inheritance. Let us start with a function Employee as shown in the listing below:

function Employee(name) {this.name = name;
}var e =new Employee("dj");

We are calling the Employee function as the constructor using the new operator to create an object e.  While executing the constructor, the value of the name property is set to value dj. Next let us go ahead and create another constructor: SuperEmployee.

function SuperEmployee(sal) {this.sal = sal;
}

SuperEmployee.prototype = e;var se =new SuperEmployee(5000);
console.log(se.name);

The SuperEmployee function prototype is set to object instance e.  The object instance of the SuperEmployee constructor is going to inherit the name property of e object instance.  We can also set the prototype of SuperEmployee as shown in listing below:

function Employee(name) {this.name = name;
}

Employee.prototype.age =30;function SuperEmployee(sal) {this.sal = sal;
}
SuperEmployee.prototype = Employee.prototype;var se =new SuperEmployee(5000);
console.log(se.age);

In the above listing, we are setting up the prototype value of the SuperEmployee function to the Employee Prototype. In this way, SuperEmployee will inherit all the properties of the Employee prototype.

Inheritance using Object.create()

In JavaScript, we can create an object by using the Object.create method as well. I find this to be the  simplest way of creating an object.

var foo =Object.create(Object.prototype);
foo.name ="dj";
foo.age =33;
console.log(foo.name);

In the above snippet we have created an object foo, and then dynamically added two properties: name and age. “dj” will be the output, as shown in the image below:

Some important points about Object.create() are as follows:

  • This method takes two arguments .The first argument is the prototype of the object to be inherited, and is the required argument.
  • The second argument is the optional argument, and adds new properties in the newly created object.
  • The first argument can be null, but in that case the new object will not inherit any properties.
  • To create an empty object, you must pass the Object.prototype as the first argument.

 

We can use Object.create() to create an object inheriting another object instance. For example, let us say we want to inherit foo object in koo object.

var koo =Object.create(foo);
koo.grade ="a";
console.log(koo.name);
console.log(koo.age);
console.log(koo.grade);

 

While creating the koo object, we are passing foo object in Object.Create. So koo object will inherit all the properties of foo object.  JavaScript will make copy of foo object such that can be assigned as prototype value of koo object.

 

Putting it all together to create a simple prototype Inheritance chain

So far we have learned about function constructors, object literals, the __proto__, prototype, and Object.create(). Now let us put all them together to create a help function which will accept two objects and create an inheritance between them.  We can create that function as shown in the listing below:

var inherit =function (child, parent) {
    child.prototype =Object.create(parent.prototype);
}

To create the inheritance we are setting the prototype of the child as the prototype of the parent function. Now let us go ahead and create a simple function constructor, foo, and create the object instance of that.

var foo =function () {this.name ="class foo";
}

foo.prototype.print =function () {
    console.log(this.name);
}var f =new foo();
f.print();

If you are following along the discussions you know f is an object instance of foo and as output we will get an output of class foo. Next, let us go ahead and create another function, fooChild, and inherit it from the foo function using the inherit function we created above.

var fooChild =function () {this.name ="foo child";this.surname ="I'm the child of foo";
}

inherit(fooChild, foo);
var fchild =new fooChild();
fchild.print();

In the above code snippet we are inheriting foo in fooChild and also calling the print method of foo on the object instance fchild of fooChild constructor function. This will print the name property of fooChild as shown in the image below:

To print the surname property we need to override the print method in fooChild function, as shown below:

fooChild.prototype.print =function () {
    foo.prototype.print.call(this);
    console.log(this.surname);
}

After overriding, when you call print method on fooChild object, it will print both name and surname values.

In this way we can create a simple inheritance chain in JavScript. Putting it all together, the inheritance chain code will look like this:

var foo =function () {this.name ="class foo";
}

foo.prototype.print =function () {
    console.log(this.name);
}var f =new foo();
f.print();var fooChild =function () {this.name ="foo child";this.surname ="I'm the child of foo";
}

inherit(fooChild, foo);
var fchild =new fooChild();

fooChild.prototype.print =function () {
    foo.prototype.print.call(this);
    console.log(this.surname);
}

fchild.print();

And the expected output would be as follows:

Conclusion

In this post we started with constructing simple objects and ended by creating a function to create a prototype inheritance in JavaScript. We covered the following topics in this post:

  • Object literal
  • Function constructor 
  • Revealing pattern
  • Understanding the value of “this”
  • __proto__ property of object
  • Prototype value of function
  • Inheritance using __proto__ and prototype
  • Object.create() method for object construction
  • Creating an inheritance chain

I hope you like this post and find it useful. Have something to add? Leave a comment! Thanks for reading.

When it Comes to Dataviz, Color is Complicated: Part 2

$
0
0

This is Part 2 (in a series of 2) on why color is a complex and confusing topic. In Part 1 I looked at cases where colors might not be interpreted as expected. Here I'll cover the difficulties of picking a suitable palette.

Be Subtle

Even if you avoid color contrast illusions and palettes that are difficult for those with CVD to interpret, it's still easy to make something that looks bad. Strong, saturated, vibrant colors stand out... so long as they're used sparingly. If everything is strong, saturated and vibrant you'll get something unpleasant like the chart below.

In general, use muted colors for anything that will take up a large area (like bars in bar charts). Use stronger colors for smaller items (such as points) and to highlight. Using a color that's simply different to the norm, rather than significantly more vivid, can also be effective for highlighting something significant:

Be Consistent

If you use color to distinguish two or more categories in one chart it makes sense to repeat the color scheme when the same categories appear in another chart in the same document. If you keep swapping and switching your audience might get confused and draw the wrong conclusions from your presentations of data. That's worse than not showing the data at all.

Sometimes this advice may come in to conflict with the advice above regarding object size and color vibrancy: if one chart shows bars and another points then something has to give. The best option may be a compromise set of colors that are slightly more vivid than you'd like for the bars and slightly less vivid than ideal for the points. Another option is to use the same hues (eg "red", "blue", "yellow") but vary the lightness depending on the chart type. (It's also plausible that a dot plot might be as good as or better than a bar chart anyway.)

As discussed here, you should also try to follow common conventions where applicable. This, of course, may be at odds with my advice about traffic light colors in Part 1. I did say color was complicated!

Get Some Assistance

Unless we want to draw particular attention to one category, the colors we select for our categories should be of similar vividness. That is, one should not stand out more than the others. This is a tricky task. You can't, for example, just compare the sums of the red, green and blue values a color picker tool will give you. Human perception of color simply doesn't work that way. Creating color scales that encode numerical values is just as, if not more, difficult.

You may be coming to the conclusion that creating a good color palette for visualizations can be hard. The easy way out is not to bother. That doesn't mean you have to accept your software's defaults though.

One of my favorite resources is ColorBrewer. It offers an interactive palette selector that was designed with maps in mind. There is, however, no inherent reason not to use it for other visualizations. You can pick from a range of "sequential", "diverging" and "qualitative" palettes. The qualitative palettes are best for encoding categorical information. Sequential and diverging palettes can be used for encoding values; the latter should be used when you wish to highlight how the high and low values differ from some middle value (perhaps the mean or median or simply a 0 point when both positive and negative values are possible). There's an option to export a chosen palette as a JavaScript array that I find particularly helpful.

Printing is Problematic

ColorBrewer lets you restrict palettes to only those that are CVD friendly, those that remain distinguishable when photocopied in black and white, and/or those that work well when color printed. This latter option illustrates another issue when it comes to color: The range of colors that a typical monitor can display (its "gamut") is less than a human can see but greater than can be printed on a basic CMYK printer. What you see on your laptop screen is generally not what you get on paper.

But Wait! There's Much More

My goal here wasn't to make you scared of using color, but to point out some of the dangers in order that you may be able to avoid them. I've skimmed over most of the underlying science, partly because it's not exactly trivial and partly because it's not really my area of expertise.

Everything I have covered barely scratches the surface. I don't have space to tell you about the problems with rainbow color palettes or why brown is a bit weird or anything about opponent process theory or perceptual color models or to explain the difference between luminance, brightness, and lightness (these confuse me all the time). All these things and a lot more are covered in chapters 3 and 4 of Colin Ware's book Information Visualization (mentioned in Part 1). It does get quite technical a times but I highly recommend it for anyone who wants to know about the science of color and of information visualization.

Try one of our most wanted features - the new XAML 3D Surface Chart and deliver fast, visually appealing and customizable 3D surface visualizations! Download Infragistics WPF 16.1 toolset  from here.


Mute On, Mute Off?

$
0
0

Sometimes I’m amazed when very simple usability problems are overlooked in an otherwise good design. Google Maps is a great mapping app, with one major exception – turning off the audio directions. As you read this, you might at first think, “Big deal! That’s not that hard to figure out.” But remember that this is an app that people use while driving. So it needs to be extremely easy to turn on or off the audio directions.

So how do you turn off the audio? You might think to tap on the menu icon in the lower right corner, and look for something that says “Audio” or “Sound.”

Google Maps app main screen

But instead of an Audio or Sound setting, you see the Mute setting – Off. This is not a button that performs the action Mute, but a property called Mute with the state On or Off. Why is that a problem? It’s exactly backwards to reality and expectations. Sound or Audio is the property that people want to turn on or off, not Mute.

Google Maps app Mute off settingGoogle Maps app Mute on setting

Mute On or Off requires you to stop and think, “Mute is off. So that means… audio is on, I guess? Yes, I suppose that’s what it means.” Keep in mind that you’re looking at the screen and thinking about this as you hurtle down the highway at 70 miles per hour.

It would be much more natural if the setting was Audio – On/Off. Yes, we’re all familiar with Mute buttons to turn off audio, but those are action buttons. Pressing a mute button performs a muting action. That’s different from a Mute property with On/Off states.

Mute On/Off is like a light switch with the label Darkness On/Off. It’s the exact opposite of what you normally expect and requires you to perform mental gymnastics to figure out what it will do. Keeping with the light switch comparison, a Mute button is like a single button with the label “Turn off Lights.” Neither of those cause confusion because each is a single action that tells you what will happen when you press it.

How else could this be designed?

The other major navigation apps handle turning the audio off in a much more natural manner. Apple Maps has a Navigation Voice setting, with the options, “No Voice, Low Volume, Normal Volume, and Loud Volume.”

Apple Maps app navigation voice settings

Waze has buttons for Sound On, Alerts Only, and Sound Off.

Waze sound settings

These apps provide options for concepts that we easily understand (Sound and Navigation Voice) and match what we want to do – turn them on or off.

The lesson is, provide natural-language labels for functions and actions that your audience understands. Stick with conventions used elsewhere, and avoid technical terms (like Mute) when natural language (Sound On/Off) will be more understandable. And when in doubt, test with users to find and fix problems like this.

Microsoft Power Apps: a look at UX capabilities

$
0
0

If you’ve ever been frustrated by the complexity of getting even basic enterprise apps built, you’re not alone. Gartner recently revealed that they expect the demand for enterprise mobile apps to grow at least five times faster than availability over the coming years.

Whether you’re looking for simple forms for mobile colleagues, workflows for their daily tasks or more powerful BI or specific jobs, mobile apps can be amazingly helpful. They save time and let your employees become a lot more productive.

However, many companies simply can’t produce all the apps they’d like their workers to use. Unless yours is a particularly large organization, the chances you’ll have a team of in-house developers is small. You’re therefore dependent on third party teams, consultants and freelancers; all costly and in high demand everywhere else.

Microsoft has recognized this problem, and in November 2015 announced the upcoming release of PowerApps. This amazing little tool might just change your life!

What is PowerApps exactly?

PowerApps represents a very clever move from Microsoft. Having recognized that they will always struggle against Apple and Android in the consumer app stores, they’ve turned their attention to the burgeoning enterprise app market instead.

PowerApps effectively allow anyone to play at being a developer. By providing a simple and intuitive environment for creating apps without any code, employees can connect to company data and create functional (if somewhat basic) apps by themselves.

This certainly isn’t the first time anyone has attempted to allow non-techy people to build apps, but it’s perhaps the most advanced attempt.

As good as this sounds on paper, will it be a success in practice? By providing your colleagues with quick and dirty apps, will you be damaging their User Experience? And is this even a problem?

What you get with PowerApps

PowerApps will basically work as follows. Once you’ve downloaded your version of PowerApps (there are going to be a variety of levels from free to premium), you get to choose from a series of templates for your app including:

  • Event signups
  • Product catalogues
  • Surveys
  • Workflows
  • Service desk calls
  • Opportunity tracking
  • And more

You can then introduce data from a wide range of Microsoft and third party sources such as:

  • SQL Server
  • SharePoint Server and Online
  • Salesforce
  • Google Drive
  • OneDrive
  • Dropbox
  • Dynamics CRM Online

Business users can then build apps with no code by connecting to these data sources. Apps can be built for iOS, Android and Windows from an easy to use ‘drag and drop’ design canvas.

You can introduce controls, graphs and other features straight from a side panel of commands. Apps and APIs are hosted in Azure, and your business user can share the app with his/her colleagues via a simple email link, making the whole process very quick and easy.

Should mobile developers start rewriting their CVs?

In a word, no. PowerApps is a very welcome move from Microsoft. It will allow teams to create apps that, frankly, would be a waste of time and money to farm out to professional developers. PowerApps let users build the kind of simple apps that otherwise would never have been built because they were, well, too simple!

Microsoft are kind of gambling on the idea that for forms, workflows and approval scenarios, business users aren’t going to be bothered about having the world’s most beautiful app. The focus is all on function, much less on aesthetics.

For a more complex app – and anything that involves B2C – you’re going to need a much more powerful design tool. Nonetheless, PowerApps does include some neat UX features.

  • Charts. PowerApps let you import data from a whole range of sources and display these as column, pie and line graph style charts. They might not have the most appealing visualizations, but they do what they need to do. If your salesperson simply needs to see how much they’ve sold this year, as the following chart shows, PowerApps does the trick:

 

(Source: Microsoft)

 

  • Multimedia. One thing we think is particularly neat about PowerApps is the ability to add multimedia. Business users with no technical know-how can add videos, music, voice recordings and images. Mobile users will be able to use the capabilities of their devices and add information directly into the app.
  • Interactions. When building an app, even the least experienced business person will be able to implement some basic UX features around interaction. For instance, they can change how pages will appear on screen, how they will scroll and how images react when end-users select them.
  • Galleries. Again, this is pretty straightforward stuff, but PowerApps lets business people define how images and content are displayed in their apps, their size, shape and position. The following screenshot shows how users can define the layout of an image gallery.

 

 (Source: Microsoft)

The power’s in your hands

PowerApps are a very welcome move from Microsoft. Anything that puts more IT power into the hands of business people has to be a good thing and will help users achieve a lot more in terms of mobility.

Of course, they’ll never offer the same level of control as some of the more advanced offerings. PowerApps are a little like Paint is to Photoshop. Nonetheless, for simple, functional apps, PowerApps is a very exciting move and we can’t wait to see what impact it will have on the market.

Use Infragistics' Indigo Studio new, amazing feature to create remote usability studies and see click-maps and stats about how users interacted with your prototype. Find out more here and get started right away. 

 

 

What are the real benefits of being an MSDN subscriber?

$
0
0

A typical software developer’s day includes anything from writing and coding new programs to resolving bugs and attending meetings with clients. With the rapid evolution of technology in the past decade, developers should also spend at least part of their day keeping up to date with tech news. Be it a new tool or framework, IT pros need a finger on the pulse - you never know when you’ll be asked to work on an entirely original technology.

Developers are a mixed bunch, but if they share one thing in common, it’s the unending requirement to learn about the software they work with. You just cannot rely on one particular set of technologies as you can always count on disruptive tech knocking even the most popular tools into irrelevance. We all know, for instance, how the Pascal and VB languages are now decreasing in terms of popularity and usage.

Taking that further, when applying for jobs, interview questions often focus on the technologies you know and how comfortable you are in adapting to a new technology. Equally, your contribution to the community is also analyzed.

Microsoft Developer Network (MSDN)

Microsoft’s Developer Network one of the largest community platforms for developers working on Microsoft technologies. MSDN is free for students at participating universities and provides resources required in the development lifecycle. Key benefits of an MSDN subscription include:

  • Online and offline versions of Microsoft Product documentation
  • Software licenses for Microsoft Products like Visual Studio, Windows, Azure, etc.
  • Technical support
  • MSDN magazine
  • Updates on various events and conferences h

So, how can you use your subscription to the max?

Develop and test solutions in the cloud with Azure

Microsoft provides Pay-As-You-Go access to the Azure test environment with an MSDN subscription. This gives access to Virtual Machines, the Azure Database, BLOB Storage, Websites, Mobile services and more.

Development Centers for all Needs

With an MSDN subscription, you get to use specific development centers for all Microsoft Products. Within these development centers, you get all the resources required to build your application under any framework or devices with all the documentation and resources available for each tool, framework, languages or service.

MSDN forums

Once developers start learning and implementing new technology, it’s common to encounter issues which aren’t completely covered in the documentation. MSDN provides a great platform under the covers of MSDN Forums for users to post their issues and queries. These forums are constantly moderated and have a healthy participation rate. Gaining insights from others has never been so easy, with a talented pool at your disposal, subscribers can pick the brains of some of the best programmers and developers around.

Improve your coding skills

With access to Microsoft tools and technologies, developers are free to learn any new technology using the MSDN subscription. With MSDN subscriptions, subscribers can access exclusive benefits and use vast development resources.

Let’s say I want to develop a PowerShell script to create my own SharePoint farm on Azure which I can use for my SharePoint Development. We all know that the cost of a SharePoint license is pretty hefty and not every developer cannot afford it. But with the Azure monthly credits I can swiftly create my own VM with SharePoint configuration and use it for developing my PowerShell script to test on the VM. A major plus point.

Great for beginners

Microsoft has launched various free services for developers such as Visual Studio Online, Visual Studio Code or Visual Studio Community so that a beginner can quickly start learning about the new technologies without worrying about the licenses. Visual Studio Code is available for Windows, iOS and Linux too. As per Microsoft, Visual Studio Community has all the features of Express and more, and is still free for individual developers, open source projects, academic research, education, and small professional teams.

Availability of code samples

Developers often need to jump right into application development and if there are any ready-made code samples available, this can save them a lot of effort. Microsoft provides code samples for various technologies on its MSDN site under the Code Samples. This resource offers more than 8,000 samples to help developers to begin using various technologies. There’s also an open source community called codeplex where you can find many more Microsoft code samples. And they just keep on giving - Microsoft has a visual studio gallery that currently comprises of more than 5,000 projects for you to learn from.

MSDN offers developers a pretty good deal; it provides a space where they can explore Microsoft’s products and use them in their day to day development and testing activities. For anyone working in Microsoft land, MSDN offers as many individual benefits as there are individual users,

The complete solution for any large-scale digital transformations, enterprise mobilization and modern UI initiatives. See what's new in Infragistics Ultimate 16.1!

 

Wearing your business apps – IoT’s place in the enterprise

$
0
0

 

It’s time to place your bets on what was the first ever piece of wearable tech. Ready?

Google glass? No. The Apple Watch? Wrong again. How about Dr. Julius Neubronner’s Miniature Pigeon Camera? Close, but no cigar. The answer dates back to the 17th-Century, when Chinese mathematicians transferred the trusty abacus onto a ring.

We’ll admit that the ‘tech’ side of this particular invention is up for debate, but the idea of getting our accessories to help our day-to-day activities has been around for much longer than we might think.

Another step beyond mobile working, wearable tech aims to operate silently in the background. While virtual reality (VR) and augmented reality (AR) are beginning to make a breakthrough, we’re currently able to kit ourselves out fairly well with wearable tech. Google Glass takes many of the core functionalities of your smartphone – GPS, messaging and emails, translation – and puts them right before your very eyes. And for those that don’t like wearing glasses, Samsung has even patented a ‘smart’ contact lens. Recent research saw Apple responsible for two-thirds of all smart watch shipments in 2015, accounting for over 12,000,000 units – and Fitbit posted a new quarterly shipments record in Q4 last year. It seems that “software increasingly belongs on the wrist, and this is the direction the market is going.”

 

So what can we expect of wearable tech to come? Well, for one, it might not be entirely wearable… Ingestibles may be the next step for keeping track of your vitals, and could tell you when you last took your medication. ‘Embeddables’ and ‘invisibles’ are designed to capture vital data through your skin; the former are inserted into muscles, skin or nerves while the latter are ‘stick-on tech’ like a skin colored patch or tattoo-like sensor.

In 5 years’ time, we might all be calling friends on our watches, following directions through our contact lenses while dressed in connected outfits. But what about wearables and the Internet of Things when it comes to enterprise?

The shift to the enterprise

A 2015 Forrester report found that 51% of tech & business leaders identify wearables as a critical, high, or moderate priority for their organization. The same report states three core factors that are driving wearable computing into the enterprise:

  • The connected world: sensors, networks, and analytical software to connect physical objects to computer systems.
  • Predictive analytics: Software/hardware solutions that allow businesses to analyze big data sources to deploy predictive models and improve performance.
  • The mobile mind shift: The expectation of attaining desired information at any time, on any device at a person’s moment of need.

These three factorsmake the case for enterprise wearables, and perhaps the Internet of Things in general, a more reasoned one. Smartphones in particular have raised our want and need for a constant stream of information and knowledge, and yet are still restricted in some aspects. While it’s true that mobile devices have made considerable progress on the ease of access to content and data, it becomes a different story entirely with something that is physically attached to your body. Forrester believe that in 5 years’ time, the market for company-provided wearables will be larger than the consumer market.

The new wave of BYOD

It might not be right around the corner, but companies will soon need to embrace these connected devices the same way they did with smartphones and tablets. It involves ensuring you have the right policy controls to support wearables, as to increase employee productivity without putting sensitive enterprise data at risk. Devices such as smart watches are designed to be on you at all times, but smaller devices have more of a tendency to get lost. For this reason, it’s vital that your company employs strong user authentication that is able to secure data on a device if it happens to fall into the wrong hands. The following are 5 steps to consider when dealing with wearable enterprise technology:

1.   Sensitive data

When mobilizing your data it will help to know which content is sensitive and which isn’t. Most companies (we hope!) already have policies for categorizing sensitive data, but this may change as it is mapped to new technology. So, make sure you’re fully up-to-date with you company policies before you begin.

2.   Security policies

It helps to view wearables as an extension of your overall mobility strategy. Smart watches, for example, are largely extensions of smartphones, so it’s important to analyze how well your existing smartphone data protection policies will apply to smart watch usage. You may need to make some adjustments to current policies as not to impact employee productivity.

3.   Profile your users

Most companies will employ varying levels of access to content for employees on mobile devices, and the case should be the same for wearables. Leaking data to outside vendors could result in huge problems, so you need fine-grained control.

4.   Protect the device data

Separating corporate data from personal data is a key aspect to your security policy, especially when devices like smart watches are even more personal than smartphones. As such, encryption used for sensitive, corporate data should be different from that used for personal data.

5.   Usability matters

If you can’t make your security measures usable, then employees will look for ways to work around it, and eventually find them. Wearables are sure to offer a new level of contextualized user experiences, with access to relevant information faster than ever before.

Wearable technology's impact – or at the least, future impact – on the enterprise world cannot be undervalued. IDC estimate the wearable tech market to react almost 112 million units by 2018, and this rapid growth will require companies to embrace the new wave of connected devices.

The complete solution for any large-scale digital transformations, enterprise mobilization and modern UI initiatives. See what's new in Infragistics Ultimate 16.1!

 

Public Speaking 102

$
0
0

Gearing up even better to deliver a talk that lasts even longer

Last month I set out on a quest to share my observations on what makes a conference talk stick in the memories of the audience. I outlined the importance of a confident beginning and end, striving to make your points easier to comprehend and tailoring your talk to the expected audience. I also shared my personal favorite, especially when talking about design: showing actual objects. That was a good, but far from exhaustive, beginning and therefore, I want to add to that list a few more ideas. Putting everything in action is neither pleasant nor easy but I can assure you that the reward in the end is worth the effort. Let’s go on with the list.

Speak calmly. Don’t run through your presentation, speaking at a rate that people find hard to comprehend. If you have too many slides or too much content to share, then you probably didn’t do your job selecting and preparing the topic well enough. Giving a talk is like telling a story, so when you practice pay attention to the pace of your storytelling. When a new section of your topic is about to begin leave a few silent seconds, take a few steps, breathe in deeply and start the next section. People need some time to comprehend what you just spoke about and to prepare for what is coming. However, don’t be too phlegmatic or you risk having your audience silently fall asleep.

Plant your feet but move your body. Taking a few steps when switching between topic sections is fine but if you intend to elaborate on a section, keep your feet planted on the ground. Once you stop walking at the beginning of a new section, the audience will automatically refocus and you should remain in the same area until the section is over. This does not mean to freeze and only move your lips, of course. Use body language and gestures to stress particular concepts – just try not to wander around too much.

54326214613476

UXify Bulgaria 2015 opening session. Image attributed to: Infragistics Inc.

When things go wrong tell a joke. Prepare a few beforehand and if you lose your train of thought or there is a moment of awkward silence, take advantage of it, rather than make excuses. My observations show that when you make excuses, you usually lose attention and credibility for the rest of your talk. If you mess things up, soldier on. If you treat it as insignificant, so will the audience. By the end of your talk, they will probably have forgotten all about it.

Respect your audience. You might be “the expert” on stage but that does not make you superior to your audience. You connect with them by minimizing the perceived gap between you and them. Taking care to do this well will allow your ideas to really “get under their skin”. Treat questions with respect and give your best answer. Be extra careful during the Q&A session because you may be asked questions that are only marginally related to your presentation topic. They might be trying to be polite, since no one else is asking questions, or may have missed (or misunderstood) something. Even when the answer is obvious, try to understand why the question is being asked and politely give the best answer you have. If this seems impossible at the time, invite the person to discuss his question once the Q&A is over. Remember that being disrespectful to someone, especially to someone who is trying to be polite, is unprofessional and never appropriate.

Prepare well. I usually start rehearsing a week before the talk and do so for an hour every day. I tell the story until it becomes a habit in order to be able to observe myself in the process. This not only builds up my self-confidence, but it also allows me to reflect on my pace, focus on the right gestures and work on simplifying the way I express my ideas.

Becoming a good speaker requires dedication, commitment and the right set of habits - habits that the tips in these two blogs aim to help you establish (check out Public Speaking 101 if you haven’t already). However, as with habits (that are not permanent and require practice to maintain), a person may deliver one talk that is excellent and lasting only to follow it up with a mediocre one. It is crucial to understand that the key to successful public speaking is not only building the right set of qualities but in maintaining them over time. Follow the rules that work best for you diligently, do it for every talk that you give, and let me know which worked best for you. Brace yourself - conferences are coming!

New Solutions to Old JavaScript Problems: 2) Default Values

$
0
0

Introduction

This is the second in a series on how new JavaScript features, introduced in the ECMAScript 2015 standard (aka ES6), allow for simpler solutions to some old JavaScript problems. In part 1 I covered block scope and the new let and const keywords. Here I will look at default arguments for functions.

Default Arguments the Old Way

Here's a very simple JavaScript function for logging a greeting message to the console:

let greet = function(name){
   console.log("Hi, I'm " + name);
}

And here's two examples of calling that function:

greet("Elvis Presley"); //Hi, I'm Elvis Presley
greet(); //Hi, I'm undefined

Since the second call to greet doesn't pass in any arguments, the call to console.log just outputs name as "undefined". We can add a more appropriate fallback by using the logical OR operator, ||, inside the function and supplying a suitable moniker:

let greet = function(name){
   name = name || "John Doe";
   console.log("Hi, I'm " + name);
}

greet("Elvis Presley"); //Hi, I'm Elvis Presley
greet(); //Hi, I'm John Doe

Sometimes the use of || doesn't work as intended. Here's the skeleton of a function for plotting the mathematical function y = x2 + 1 using IgniteUI. (I've deliberately left out important aspects like chart labels to keep the code to a minimum).

let makeChart = function($selector, min, max){"use strict";		
   min = min || -5;
   max = max || 5;

   let stepSize = (max-min)/10000;
   let data = [];

   for(let i=min; i≤max; i=i+stepSize){
      data.push({x:i, y:Math.pow(i,2)+1});	
   }

   $selector.igDataChart({
      dataSource: data,
      width: "300px",
      height: "200px",
      axes: [
         {
            name: "xAxis",
            type: "numericX",
            minimumValue: min,
            maximumValue: max,
         },
         {
            name: "yAxis",
            type: "numericY",
            minimumValue: 0
         }
      ],
      series: [
         {
            name: "series1",
            type: "scatterLine",
            xAxis: "xAxis",
            yAxis: "yAxis",
            xMemberPath: "x",
            yMemberPath: "y",
         },
      ],
   });
}

Assuming three floating (left) div elements — with id's of "chart1", "chart2" and "chart3" — we might draw three copies of the function like this (here $ is the jQuery object):

makeChart($("#chart1"));
makeChart($("#chart2"), -3, 3);
makeChart($("#chart3"), 0);

The final results may comes as a surprise: rather than the x axis starting at 0, the third chart is identical to the first.

This happens because 0, the value passed in for the minimum value of the x axis (min) in the third call to makeChart, is falsy. That means the line

min = min || -5;

changes min to -5.

We can get around this easily, but with a few more keystrokes, by explicitly comparing min (and max) to undefined, rather than checking for truthyness:

min = min!==undefined ? min : -5;
max = max!==undefined ? max : 5;

With this in place, the third chart does now have an x axis that starts at 0.

More Intuitive Default Arguments

ES6 makes setting defaults easier and the new syntax may seem familiar if you've ever programmed in C++ or R. Simply add an equals sign and the default value for each function argument that needs one. The makeChart example above then becomes:

let makeChart = function($selector, min=-5, max=5){"use strict";

   let stepSize = (max-min)/10000;
   let data = [];

   /*rest of the function*/
   
}

In an ES6 compliant browser, this is equivalent to the example above, where we compared min and max to undefined, but with less typing. I think it also makes the code more transparent and a casual user no longer has to inspect the function body in order to find the default values.

The greet function from earlier can also be simplified:

let greet = function(name="John Doe"){
   console.log("Hi, I'm " + name);
}

greet("Elvis Presley"); //Hi, I'm Elvis Presley
greet(); //Hi, I'm John Doe

More Complex Examples

ES6 default values don't have to be simple strings or numbers. You can use any JavaScript expression and later arguments can refer to earlier ones.

One common way to introduce object-oriented programming to new coders is through the construction of various animal classes and objects. JavaScript isn't really a class-based language but objects are still important. Object factories - functions that return objects - are an easy way to make a large number of objects quickly. They're also a place where default arguments can be very useful. Let's create some talking dog (!) objects. The following is all perfectly valid ES6 code that utilizes default values (the defaults for name are, apparently, the most popular male and female dogs names as listed here at the time of writing):

let createDog = function(gender="male", name=(gender==="male")?("Bailey"):("Bella"), hobby="barking"){
   return {
      name: name,
      gender: gender,
      hobby: hobby,
      sayName: function(){console.log("Hi, I'm " + this.name); return this;},
      sayGender: function(){console.log("I am a " + this.gender + " dog"); return this;},
      sayHobby: function(){console.log("I enjoy " + this.hobby); return this;},
   };
};

Here's an example of use with the default values:

createDog().sayName().sayGender().sayHobby();

This prints out...

Hi, I'm Bailey
I am a male dog
I enjoy barking

We could specify all arguments, for example...

createDog("female","Barbara","fetching").sayName().sayGender().sayHobby();

prints out...

Hi, I'm Barbara
I am a female dog
I enjoy fetching

We can also accept default values for one or more parameters by passing in undefined. For example...

createDog("female",undefined,"fetching").sayName().sayGender().sayHobby();

leads to the output

Hi, I'm Bella
I am a female dog
I enjoy fetching

Note that this does mean you can't pass in undefined as a placeholder when you don't know the true value. You probably want to use null instead.

The expression for the default name isn't particularly robust. For example, the following is probably not what was intended:

createDog("Male").sayName().sayGender().sayHobby();
Hi, I'm Bella
I am a Male dog
I enjoy barking

In this case gender was set to "Male", which doesn't match "male", thus the default name expression results in a "Male" dog called Bella. We could just change the first argument to isMale (or isFemale of course) and assume a Boolean input. And that might be the sensible option here. But it doesn't lend itself so well to highlighting the fact that we can use even more complex expressions, so we won't. Instead we'll use the following modified function:

createDog = function(gender="male", name=(gender.charAt(0).toUpperCase()==="M")?("Bailey"):("Bella"), hobby="fetcing"){
   return {
      /*object unchanged*/
   };
}

Now any gender string beginning with "m" or "M" is taken to be male for the purposes of default-name assignment. That could mean "male", "Male", "man", "m", "M", or "Marmalade". Any other string — "female", "Female", "JavaScript" etc — will set name to "Bella" if you don't provide an alternative. This version will also throw an error (a good thing, generally) if you pass in something really silly for gender, like {} or /male/.

It's important to restate that ES6 default values are assigned from the left. It may be that you'd prefer name to be the first argument of the createDog function. The following won't work when called without a name parameter because the expression for the default tries to use gender before it is defined.

let createDog = function(name=(gender.charAt(0).toUpperCase()==="M")?("Bailey"):("Bella"), gender="male", hobby="reading"){
   return {
      /*object unchanged*/
   };
}

If you come to JavaScript from a language like Python or R then you may be used to using named parameters alongside default arguments in your function calls. This is still not possible in JavaScript. The closest you can do is to use an options object in place of multiple arguments. Unfortunately, combining an options object with ES6-style default parameters is not particularly easy (see here for details).

Now with full support for Angular 2 Beta and Bootstrap 4, see what's new in Ignite UI 16.1. Download free trial today.

Feature Spotlight: Infragistics WPF NuGet Packages

$
0
0

On Infragistics product ideas website there is a highly voted product idea titled “Use Nuget for Distribution”.  Well, it turns out that Infragistics does have NuGet packages for some of their products that are installed locally with the Infragistics Ultimate Installer.  You just have to know where to look.

Where can I find them and how do I use them?  Good question! 

Find and Extract Packages

Simply navigate to “C:\Program Files (x86)\Infragistics\2016.1\WPF\NuGet Packages” and you will find two zip files.  One for the standard assemblies and another for the “version free” assemblies.

nuget packages location

Extract the content of the zip file and you will see the available NuGet packages for all of the WPF controls.

Create a Local Repository

Next create a new folder somewhere on your hard drive to be used as the location of your local Nuget repository.  After you create this folder, copy all of the Infragistics WPF NuGet packages and paste them into this location.

Infragistics WPF nuget packages

After that, open up Visual Studio and open the NuGet Package Manager Settings

open package manager settings

Now, add a new NuGet Package Source and set the “Source” to the location of your newly created folder containing the Infragistics WPF NuGet packages.

create new nuget package source

Using The Infragistics WPF NuGet Packages

Now, all you have to do is create a new WPF application in Visual Studio and open the NuGet editor.  This can be done by right-clicking the solution and selecting “Manage NuGet Packages for Solution”.

In order to add the Infragistics WPF NuGet packages you must change the “Package Source” to use the local repository you created in the previous steps.

change nuget package source

Once you do this, all of the Infragistics WPF NuGet packages will be available.

add Infragistics WPF Nuget Packages

Now search for the control of your choice, add the package, and you are ready to rock-and-roll!

That’s it!  It’s that simple.  Now go have some NuGet fun.

As always, feel free contact me on my blog, connect with me on Twitter (@brianlagunas), or leave a comment below for any questions or comments you may have.


What’s the Key to a Winning Data-driven Strategy?

$
0
0

Today, we are creating and consuming more data than ever. In business, in our personal lives, on our desktop, with our multiple mobile devices. In fact, every day we create 2.5 billion gigabytes of data. Big Data is becoming one of the biggest driving forces behind the global economy and is actually supporting economic development in developing countries.

The prediction is that in less than five years, 40 zettabytes of data in the world will exist. For context, three years ago the entire Internet was estimated to hold about 5 billion gigabytes – which is 0.5 of 1 zettabyte. So, that would be an increase from 5 billion to 400 Billion gigabytes.

Of course, these numbers - their sheer size - sitting on your screen, are impossible to really comprehend. Certainly without the help of a visual aid.

Mind your own data business

So, where does your company’s data fit into all this? It’s pretty straightforward, actually. Your Line of Business (LOB) tools are the biggest producer of data for your organization. For example, if your company uses SharePoint or Office 365, it’s likely then that you have a wealth of data concerned with every aspect of your business. The likelihood also is that this data is quite complex and dispersed across your entire LOB infrastructure – which in and of itself can be disjointed.

In today’s post we focus on the key to a winning data-driven strategy, so you can collect all your significant data in a single space and effectively and consistently streamline your visual presentation of that data for better decision making. Get every member of your team ‘in on the ground floor’ with your findings and/or strategies.

Within your SharePoint ecosystem you likely have lots and lots of existing and useful company data:

  • Calendars – to schedule meetings, set reminders, help manage your team members
  • Employee vacation roster – so you can easily see who has scheduled time off; or who is available for a project at certain time, etc.
  • Daily task manager – to provide your busy day with much needed structure
  • Document folders – holding a wealth of information and crucial work
  • Excel spreadsheets – the inevitable source of massive amounts of data

This, of course, is just the ‘tip of the iceberg’ when it comes to the amount of information you carry within your Line of Business systems. Bear in mind also that a lot of this data is dynamic and ever-changing. So it stands to reason that you should be able to view and display it in a vibrant and active way.

Static data doesn’t ‘excel’

The unfortunate fact is - despite the spike in data volume that we are now creating on a daily basis - the means that most companies use to view their crucial information is as static as simply numbers on a spreadsheet. Microsoft Excel has been a market leader in data management since the mid-eighties but, in the thirty years since, as discussed above, data creation and the volume of data companies are storing, analyzing and using these days has exposed some of the program’s weaknesses.

For instance, after a certain volume of information, an Excel spreadsheet doesn’t scale properly as the complexity of your business task or function increases. It can be cumbersome to share multiple spreadsheets with colleagues and migrating data from other apps and locations into Excel can be slow and tedious. It also fails in its one-dimensional view of graphs, without a drill down function. Graphs in Excel exist only to show results, rather than find patterns and trends.

Data that goes for miles

You should be doing more with all your available data. The key is using the information that you’re creating, that you’re recording, the data that is building up, to help inform your business strategy. If ‘knowledge is power’ then managing your knowledge is the way towards harnessing your power in the most effective way.

When it comes to taking your important information and being able to successfully use it as part of your business strategy you need a great Data Visualization solution. If the question is: what is the key to a winning data-driven strategy? Then, enabling LOB users with self-service data visualizations & data discovery is the answer.

That’s where ReportPlus comes in. ReportPlus can handle an extraordinary amount of data across a wide range of applications and clients. With a Desktop and iOS creator apps, and Android and web viewers, ReportPlus enables you to connect to your data from your SharePoint Sites as well as Office 365, Microsoft Dynamics and many more, and create impressive and dynamic visualizations that you can share with your whole company no matter where your colleagues might be.

Designed for mobile working, with ReportPlus you can quickly view dashboards and reports on any device, so you can interact with your data in the office or on-the-go. The apps and dashboards can also be installed securely On-Premise, for compliance needs, or if you just need extra piece of mind.

The app is a modern Business Intelligence essential for data-driven professionals (and let’s face it, today most of us are). One of the greatest assets of ReportPlus is its self-service design and how simple it is to use. Connect to your data from every source you use - files On-Premises, content in the cloud - and combine it into one dashboard and create compelling data visualizations, without the need for detailed IT knowledge or experience. Used to make faster, smarter decisions by the guys working on the building site as well as the head engineer in charge of the operation, ReportPlus gives us insights in an instant.

To find out the extent of the power of ReportPlus, visit its website and seehow this data visualization solution can be the key to a winning data-driven strategy for your business.

What's New in IG TestAutomation 2016.1

$
0
0

The primary focus for Infragistics Test Automation is to offer you peace of mind. Such that when you develop with our controls, your teams can seamlessly implement automated testing of the user interface (UI) to confidently produce higher-quality releases. IG Test Automation, currently supports our Windows Forms controls via HP’s Unified Functional Testing (UFT) and IBM’s Rational Functional Tester (RFT).  We also support our WPF controls via HP’s UFT.

As IG Test Automation’s purpose is to automate tests of the UI of applications using IG controls, this what’s new will start off with the new controls and I will follow with changes in existing controls that had changes that would affect how the UI behaved. 

 

New Controls supported by IG TestAutomation

XamScatterSurfaceChart

By far the most requested item on our Product Ideas page, this new chart is perfect for those scenarios where you need to visualize price volatility plots in the financial services industry, instrument measurement, and equipment testing, process simulation, modeling, and monitoring applications.

XamScatterSurfaceChart


 

UltraSpreadsheet

 New to Infragistics 2016.1 is a fully-featured spreadsheet control, which allows for the visualizing and editing of spreadsheet data, represented by the data model supported by the Infragistics Excel Engine. Currently only supported in HP's UFT.

UltraSpreadsheet

 


 

IG Controls with UI-Altering Improvements

UltraWinGrid

The UltraWinGrid has several new features this release, two of note that required additional support for IG TestAutomation are :

Collapsible Column Groups

 The UltraGridGroups collection supports ExpansionIndicators, allowing the user to hide all columns assigned to them. This improves the readability of your grid by allowing users to quickly prioritize information most relevant to them.

UltraGrid's Collapsible Column Groups

 

Collapsible Child Bands

 The UltraGrid supports BandExpansionIndicators at the header of each child band, allowing for collapse/expand funcitonality on each individual child band. This improves ease of navigation between sibling bands with large data sets and reduces information clutter on the UI.

UltraGrid's Collapsible Child Bands

xamTabControl Tab Dragging

As of 16.1, if you’re using the xamTabControl, you can now reorder tab items by clicking and dragging a tab item with your mouse to a new position. To enable this feature, simply set the TabDragMode property to the desired behavior.

xamTabControl, dragging Tabs

xamDataGrid

Collapsible Column Groups

Hey didn't I just read about this feature? Yup, what seemed like a good idea for Windows Forms, we decided to add it to our xamGrids too.

 xamDataGrid Grouped Fields

Field Moving

While not necessarily new to 16.1 controls as a feature, it is new to 16.1 IG TestAutomation as a recordable action. Previously it was only possible to move fields by using SetNAProperty.

More Right to Left Support in Windows Forms

We started in 14.1 introducing Right to Left support in our of our editor controls. In 16.1 we expanded our right to left support to our UltraTab and UltraTabStrip controls.

 

Download the free trial of IG TestAutomation for HP 16.1
http://www.infragistics.com/products/windows-forms-test-automation-for-hp/download

Download the free trial of IG TestAutomation WPF for HP 16.1
http://www.infragistics.com/products/wpf-test-automation-for-hp/download

Download the free trial of IG TestAutomation for IBM RFT 16.1
http://www.infragistics.com/products/windows-forms-test-automation-for-ibm/download

Voice your suggestions today, for the products of tomorrow 
http://ideas.infragistics.com/

Why prototyping is not only essential for the design process but for overall product development too

$
0
0

Why prototyping is not only essential for the design process but for overall product development too.

Developing or building anything new involves a long and complex process and requires real attention to detail. Whether it’s the construction of a new skyscraper or the design of a new mobile app, the steps from initial conception and those first sketches right through to the final build and finishing touches all require meticulous attention to detail.

Now, for any good developer, designer or architect, creating that fantastic ‘thing’ - be it an app, new building, or product - is the ultimate goal. How they achieve this is down to a whole host of significant factors. An area that has undoubted importance along the way is prototyping.

The word prototype or ‘prototypon’ derives from ancient Greek, and means “primitive form”. And that’s exactly what it is. Google’s definition, “a first or preliminary version of a device or vehicle which others forms are developed” takes the point further. A prototype is a very simple means of showcasing to stakeholders what a final design may look like by painting a picture of something that is tangible - not just a static wireframe or idea in a colleagues head. Let’s take a look at some of the advantages of prototyping.

Four key benefits of prototyping

1. Save money

You could argue that prototyping will increase the overall cost of a project. At first view, you’d be correct. However, it’s far less expensive to resolve and rectify any problems with a new design in the early stages of development than it is towards the end of a project. Imagine missing the prototyping phase when building some new software, being a week from a ‘go-live’ date and finding out there’s a problem with the UX or user journey. A project can grind to a halt, resources, in the form of money (and time!) are needed to fix the issue, all of which is made more complicated by the fact so much work has been done to date. As Benjamin Franklin said “by failing to prepare, you are preparing to fail”. Don’t let that be you.

2. Get instant feedback

As with any product, the end goal is making something that is appealing to end users. A big part of what we do at Infragistics is helping developers build new apps and designs with some great UI dev tools and components. By creating a prototype during the design process and putting it in front of your target audience you can get feedback on what they like, dislike, would change, would add and so on. In addition, when a prototype is in the hands of a user you don’t always know what the product will do or how they’ll use it. With a prototype, you do.

It’s far easier for people to make a decision by actually seeing something! Tools like Indigo Studio are great when it comes to designing animated UI prototypes. Remember, companies pay millions of dollars on market research to hear from users - a prototype is a simple way to showcase your offering and receive feedback that is instant and actionable.

3. Test to your heart’s content

A piece of software or new product that has been through prototyping will, 9 times out of 10, have a much more desirable design quality and be far closer to the needs of the user, compared to a product that hasn’t. How do you get to that point? Testing. A prototype should be seen as a ‘working document’, it will always evolve and change. Very rarely will the first prototype be the finished article.

It’s human nature. We test ourselves over and over to make sure we know that critical bit of information when it comes to an exam. The development of any product is similar. You want the best outcome, so it will go through a number of stages. By testing - looking at areas such as cognitive habits - you can continue working towards a product that will finally meet the brief and is optimized for end users.

4. Make the most of your time

The time spent developing a product can be all-consuming. Thinking about every little detail is certainly a good skill to have and desirable when it comes to micromanaging. However it shouldn’t become a detrimental factor. You want to work in the most efficient way possible and maximize your time. By creating a scalable, lightweight and functional prototype during the design process, it will eliminate a number of ‘what-ifs’ and any confusion when it comes to coding, and focus attention on other areas of a product's development.

A picture paints a thousand words

Building a product that rocks can be one of the most satisfying and rewarding feelings. Seeing your vision come to fruition and in the hands of a user, or making a mark in the world of architecture makes all the hard work, time and effort worthwhile Prototyping plays a pivotal role in both the design process and to the overall product development. Get it right, and the life of your treasured design will help others for years to come.

Use Infragistics' Indigo Studio new, amazing feature to create remote usability studies and see click-maps and stats about how users interacted with your prototype. Find out more here and get started right away.

Reviewing Usability Study Results

$
0
0

Banner image

One main purpose for conducting a usability study is to find out how well your design meets users’ expectations, and get some targeted usage data to help evaluate this in practice. However, collecting a lot of data about usage is useless unless it’s actionable. That is, it should quickly let you identify tasks that are problematic, and even better if it let's you identify the problematic step in the task flow.

Making usability study results actionable is the motivation behind how we have designed the study results view. And all this without having to review the results of each and every participant. The idea is to quickly gather insights from the aggregated statistics. We agree that its 's important to understand what a specific user did; however, in order to design for more than 1 user, we rely on how a group of users performed on the task. We should be looking for patterns in the usage and not solo data points.

Naturally, there is no report, without actually setting up a study. To learn about how to set up usability studies for your Indigo Studio prototypes, read the following post: 

Set-up Remote Unmoderated Usability Studies

Remote, and Unmoderated Usability Studies

Usability studies on indigodesigned.com are remote and unmoderated in nature. That is, the study moderator does not have to be present when users participate in a study. The main advantage of this technique is that more than 1 user can simultaneously participate in the study. This also frees you of the need to explicitly schedule time with participants. Participants can participate when they have the time.

The usability studies section on indigodesigned.com shows you any studies in progress or completed in the past. The results are updated in real time. As in, as and when a participant completes a task, the task statistics are updated. The study report consists of the study results overview, a detailed task report, and a click-map view.

Study Results Overview

Study overview provides a high-level summary of how many users participated and completed the task successfully. It shows avg. time required to complete the task and whether users made of use of guidance. If the user used guidance, the task is automatically marked as failed. Study Overview

Task Details Report

Task details view provides a more granular view of how participants completed a particular task. You can see how many completed, skipped or failed the task. The percentage completed gives you an idea of how early or late did the design fail. Task details view The task details view also shows a step-by-step view of the task. If for some reason say most users quit or requested guidance at step 2, you know that’s the part of the flow you need to redesign first. Participants have the option to leave comments while they complete the task or at the end of it. When they do, you will see a comment count next to the tis step.

Click-Map view

The click-Map view shows where the participants ended up clicking. It captures both attempted interactions and successful ones. Successful interactions are those that lead to the next step in the recorded task flow. The click map only shows max. 2 attempts per participants to make the visualization actionable. Click-Map View The theory is that if the participants were unable to proceed after two failed attempts, there are already significant usability problems to fix.

Summary

This article provided a quick overview of the usability study report. Reading not your thing? No problem. We recorded a quick video just for you.

[youtube] width="650" height="488" src="http://www.youtube.com/embed/CHK7rGMBUcA" [/youtube]

About Indigo Studio for Interaction Prototyping

Don’t have Indigo Studio? Download a free 30-day trial, which will let you try all of the prototyping goodness! Experience our unique story-driven prototyping approach-- a LEAN UX/AGILE prototyping solution.

Download Indigo Studio

Looking to suggest improvements and new ideas for Indigo Studio?

Submit a new idea

If for some reason you are having trouble with Indigo Studio, check out our help topics, forums or contact support.

Get Support

Follow us on Twitter @indigodesigned

View Release Notes

Best Practices: Team Productivity, Regardless of Devices or Storage Services

$
0
0

2015 was a big year for a number of business trends, as collaboration, the cloud, mobile working and productivity made statements on their importance in the enterprise. With technology evolving at such an impressive rate, 2016 has continued on from where 2015 left off, and pushes us further into the fabled “office of the future”.

A lot of these prevalent business trends are at the heart of SharePlus; many of the app’s core features involve maximizing team collaboration, working outside of the traditional office space and on mobile devices.

Continual quest

Despite the fact that roughly half the adult population owns a smartphone, mobile is still in its infancy in terms of its influence on customer behavior. Of course, the smartphone will no doubt mature at an astounding rate given how quickly it has started off (that current 50% is expected to rise to 80% by 2020) and as such the enterprise is doing all it can not to get left behind.

SharePlus is available on iOS and Android devices; optimized for the mobile support of SharePoint and Office 365. Offering a mobile user experience with the ability to access, edit and share all your files, images, documents and more, you’re able to connect to several SharePoint portals without the need of your IT department.

No Wi-Fi? No problem!

The appeal of mobile working stems from the ability to work from any location; you’re no longer chained to your desk if you want to be productive. We’ll admit that working in any location may be a bit of a stretch - it would prove difficult to continue responding to emails if you were inside the Krubera Cave, for example. Difficult, but not impossible. Offline capabilities mean you can stay productive without a Wi-Fi connection, adding, editing and deleting files which will re-sync when a connection is reestablished.

The power of social

It’s difficult to think of social as a new trend due to its monopolization of the web, but in terms of the enterprise it’s still seen by some as a novelty. Its value should by no means be overlooked, however, as it has become the new standard for companies of all sizes to communicate quickly and freely. SharePlus’ Social Module brings social to SharePoint, allowing you to share ideas, start conversations and keep up to date with your colleagues. Access both your public and private document libraries from your personal SharePoint storage to collaborate with others on documents.

The Documents Module

As the rate of data creation grows with no sign of slowing, 2015 saw the beginning of the battle for Cloud storage with heavyweights Microsoft, Google, Apple and Amazon all staking their claim. The latest update which came to SharePlus improved upon the Documents Module– created to facilitate access to all your relevant documents. Your files can be accessed from a number of different locations: your personal cloud storages, a private local storage on your device or a shared location across your network. The cloud content sources that are available are:

  • OneDrive for Business

Office 365 or SharePoint personal cloud storage (this will be pre-configured if you are using SharePlus Enterprise and have Social features enabled).

  • Google Drive

Cloud storage

  • Dropbox

Cloud storage

As we create more and more content, storing it somewhere that’s easily accessible becomes more of a necessity than a want. A centralized location for your documents is another step towards a more mobile, collaborative working environment.

Accessing your files from content sources is a simple task, with a varying list of actions (dependent on the content source). For Google Drive and Dropbox (as well as any Network Drives) users can create documents using Local Files or your Photo Album, add folders to organize your files, as well as record photo, video and audio from your device.

For those of you using OneDrive for Business, the above applies, plus a few other features stemming from Office 365 compatibility. Along with creating documents or folders, users are also able to add their own ReportPlus dashboards. In the settings menu, users can alter the way SharePoint lists are displayed – switching between the SharePoint list view or the SharePlus list view. SharePlus also allows for ad hoc sorting and grouping: by dragging list columns to the ‘Group By’ and ‘Sort By’ sections, you can specify group criteria and sort criteria respectively.

Best practices

With the addition of new content sources, there are more ways than ever to work on your files and documents with SharePlus. As we are likely to create even more data and content every day, having a centralized space to store it all is critical. SharePlus provides you access to more of your content than before, meaning you can enable your teams to be work anytime anywhere while mobilizing your SharePoint investment.

Viewing all 2223 articles
Browse latest View live