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

Infragistics WPF Release Notes – October: 15.2 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, Excel and Word 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.

In order to download release notes, use the following links:

WPF 2015 Volume 2 Release (Build 15.2.20152.1000)

Notes in PDF Format
Notes in Excel Format
Notes in Word Format


Your Old Language Version is Costing You Money

$
0
0

 

Imagine that you walk into a company, and take a stroll through the software department.  All around you, as far as the eye can see, developers toil away, staring into 17 inch CRT monitors.  What would you think of that?  Would you have to restrain yourself from jogging over to the HR department, enthusiastically, to apply for a job?  Or would you thank your lucky stars that you worked somewhere else?  I’m betting the latter.

One of the most penny wise, pound foolish strategies that a company can pursue is hiring a team of software developers, whose mean salary may be in the six figure range, and saving a few bucks by forcing them to do their work on obsolete hardware.  It’s foolish because the productivity lost by these expensive workers far outpaces the cost of updated computers and monitors.  Of course, this is pretty commonly known these days.  You don’t see or hear about nearly as many companies skimping too much on a second monitor or new machines for software developers.

And yet, it’s still fairly common to make developers use older versions of programming languages and frameworks.  Now, this isn’t a completely direct parallel.  Companies historically have let hardware age on developers’ desks mainly as a cost savings strategy, whereas continuing to work on a “stable” version of a language or framework is generally a risk minimization strategy; why port your code base to v-next when that could introduce bugs and it doesn’t matter to the users?  That’s a fair argument, but the thing is, when you pull back a level of abstraction, risk minimizing is, at its core, still about cost savings.  In a company, everything comes down to top line revenue minus bottom line cost.

So why would I argue that it makes sense to upgrade to v-next, taking the risk and possibly incurring the cost associated therewith?  Well, instead of answering that directly, how about I show you?  Take a look at the following code that you might find in some kind of .NET based, online dating application.

1

2

3

4

5

6

7

8

9

10

11

12

13

public class GeographicRegion

{

    private readonly IEnumerable<DatingProfile> _profilesInRegion;

       

    public GeographicRegion(IEnumerable<DatingProfile> profilesInRegion)

    {

        _profilesInRegion = profilesInRegion;

    }

    public IEnumerable<DatingProfile> FindActiveTwentySomethings()

    {

        return _profilesInRegion.Where(profile => profile.Age >= 20 && profile.Age < 30 && profile.IsActive);

    }

}

Nothing too remarkable. There’s a concept of “Geographic Region” and each region is handed, upon instantiation, a strategy for enumerating profiles found within it. It has a method called FindActiveTwentySomethings() that, unsurprisingly, looks for anyone with an age in the 20s and a setting on the profile indicating that the profile is active. Apart from a potential discussion of which sort of collection type might make the most sense, there’s absolutely nothing remarkable happening here. This code is so simple that it’s almost not worth discussing.

But let’s go way, way back in time and look at what someone might have written in the days of Visual Studio 2003.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

public class GeographicRegion

{

    private readonly DatingProfile[] _profilesInRegion;

 

    public GeographicRegion(DatingProfile[] profilesInRegion)

    {

        _profilesInRegion = profilesInRegion;

    }

    public IEnumerable FindActiveTwentySomethings()

    {

        ArrayList matchingProfiles = new ArrayList();

               

        foreach(DatingProfile profile in _profilesInRegion)

        {

            if (profile.Age > 20 && profile.Age < 30 && profile.IsActive)

                matchingProfiles.Add(profile);

        }

 

        return matchingProfiles;

    }

}

 

The first thing you’ll notice is that the code is longer, but not horribly so. The second thing that you’ll probably notice is that the FindActiveTwentySomethings() method is not only longer, but it’s also no longer declarative, but, instead, imperative. The code no longer says, “give me profiles where the age is in the 20s and the profile is active.” Instead it says, “first, declare an array list; next, loop through the items in the profiles and for each of those items, do the following… etc.” Finally and perhaps most subtly, the lack of generics (those came with C# 2.0 in 2005) means that the method no longer forces type safety. ArrayList and IEnumerable here both deal in Object. This doesn’t seem to be an immediate problem here, since the dating profile is strongly typed, but if you’re a caller of this method, that’s hardly reassuring.

None of these things seems like a big deal in this small context, but imagine this start difference, writ large across an entire code base, application ecosystem or software department. The C# 1.1 code shown above is more verbose, harder to read, harder to work with, and more error prone during maintenance. This means that developers in such a code base spend more time floundering, troubleshooting, squinting to try to understand, and generally wasting time (and money) than their counterparts working in a modern code base.

Over the course of time, language and framework authors, like any software vendors, address shortcomings in their products and add features that make things easier and more efficient for their users. So, every time a new version of a language comes out, you can expect development in that language to trend toward more efficiency. As a company or a department, if you deliberately avoid such updates, it’s no different than not updating hardware as it ages. Your team’s productivity (and morale) will suffer.

It’s not common for companies to be penny wise and pound foolish about hardware any longer. So, don’t make the same mistake with your software. Have a plan to stay on the latest bits and keep your developers operating at peak efficiency. You don’t have to adopt everything that comes out right away, but you can’t afford to let it go too long.

 

Infragistics Ultimate 15.2 is here. Download and see its power in action!

 

What Kind of Money Do Developers Make? (Infographic)

$
0
0

If you're interested in what developers of different types are earningright now, take a peek at this Infographic! We've checked out almost all of the relevant sites and wrapped together a ton of data for you so check it out!

Share With The Code Below!

<a href="http://www.infragistics.com/products/aspnet><img src=" http://www.infragistics.com/community/cfs-filesystemfile.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/d-coding/8838.Developer_5F00_Salaries.jpg "/> </a><br /><br /><br />Developer Salaries <a href="http://www.infragistics.com/products/aspnet">Infragistics ASP.NET Controls</a>

Six Shocking Facts about Enterprise Mobile Security and How to Avoid Them

$
0
0

A lack of mobility in today’s market could harm a business in many ways. Not being mobile might lead it to miss out on consumer solutions or result in missed business opportunities. As a result, enterprise mobility has become a must-have for modern organizations, delivering many successes and opportunities. Yet despite the advantages of mobility, security threats are fast evolving through malware sophistication and targeting and pose a real threat to your company’s security.

In this post, we want to highlight a few facts about enterprise mobile security and how organizations who want to embrace enterprise mobility can go about avoiding the associated threats.

Mobile Devices & Threats

According to research by the Enterprise Strategy Group, enterprise mobility technology spending plans for the next 12 months show an 18% increase in BYOD initiatives and a 19% increase in mobile applications deployment. For Q3 2014, Android OS achieved a worldwide Smartphone market share of over 84%, a remarkable increase from 17.2% in 2010. Equally there has been a huge growth in Android malware, with about 99% of all mobile malware detected by Kaspersky Lab in 2012 designed to attack Android devices.

In 2014 alone, about 81% of organizations suffered a data loss incident and new malware increased by 71%; a clear message about cybercrime reaching a critical point. A 2015 global study by Check Point shows that 59% of organizations with a BYOD policy are faced with the problem of tracking/controlling access to corporate and private networks, while 46% are faced with the challenge of keeping device OS and apps updated.

The Changing Mobile Landscape

We want to highlight six areas where organizations can make more effort in managing exposure to the various security threats that come with enterprise mobility, becoming proactive in preventing vulnerability.

1. Mobile Endpoints

The current use ofenterprise mobile endpoints for Android (66%), Apple (77%) and Windows (33%) is set to significantly rise (by 20% for Android, 10% for Apple and 30% for Windows). Organizations can better manage their growing mobile device fleet by setting and maintaining security policies, protecting information on devices, and by applying authentication to both networks and applications.

2. Device-Level Security

Respondents of a Ponemon mobile security survey indicated lax attitudes tomobile security. While 77% of people viewed mobile technology as essential and 76% thought mobile usage could negatively impact security, only 39% had mobile security measures in place. Better identity and access management systems for tracking user account changes and the ability to establish patterns and define normal activity are some of the ways in which organizations can successfully mitigate the risk of device-level data breach.

3. Mobile Applications

With a basic security test fail rate of over 75% for mobile apps due to a number of factors ranging from lack ofproper encryption to the number of weekly attacks on mobile apps, it is no surprise that mobile device breaches are hitting companies very hard. Organizations must first educate their employees about the risks associated with mobile applications, then standardize on trusted enterprise-grade applications, implement category-based applications management processes and encrypt documents to prevent data loss.

4. Cyber Security Strategy

According to Cisco’s 2015 Annual Security Report, acyber security benchmark showed that while 90% of respondents were confident in their security capabilities, a full 60% were not patching software and systems. Organizations must build on the following security principles: security must support the business, work with existing architecture and be usable, be transparent and informative, enable visibility and appropriate action and, finally, must be viewed as a people problem.

5. App Stores & Developers

Mobile apps can easily copy personal details, GPS coordinates or details of all apps installed on a device andupload them. Organizations now face high-riskapplication events as many as 305 times per day - up 88% from last year’s rate of 162 times per day - as a direct consequence of downloaded apps. Organizations therefore need to implement a software-defined protection architecture and combine OS and CPU level sandboxing with threat extraction technologies to mitigate against fast-evolving attacks from app store and/or developer vulnerabilities.

6. Wipe Data

IBM’sMaaS360 analytics gathered from global IT organizations indicate that on average, 450 devices get wiped in a day, with 51% using manual wipe and only 37% doing a full wipe. Improved containerization capabilities are essential for organizations to be able to isolate work data, making it easier to perform selective wipes or even repurpose a device previously used by another employee.

Secure the Future

Organizations must be future minded, setting clear long term objectives on how to optimize security infrastructure, tools and technologies in order to be prepared for the ever increasing vulnerabilities and threats resulting from the changing mobile landscape. By understanding both potential and unknown cyber security threats, utilizing the expertise of information security professionals and creating solid plans that align with your business, you can turn security into an enabler and fully reap the benefits of the mobile enterprise.

Have you already tried Infragistics SharePlus, our native mobile SharePoint solution? SharePlus is amazingly easy to adopt and loved by users working with SharePoint on the go. Sign up for a SharePlus Enterprise demo today.

What’s New in Infragistics WPF 15.2

$
0
0

Infragistics WPF 15.2 is your release!  That’s right… your release.  My job as a Product Manager here at Infragistics is to give you, our customers, a voice.  I listen to your feedback, both positive and negative, and make sure our products reflect those conversations.  For years, Infragistics has been working on building a community with you, with honest and transparent communication.  It took some time, but you have finally discovered your voice.  You have been empowered by your voice.  Now, you have directly influenced the products you use with your voice.  Every single feature that we are delivering with our Infragistics WPF 15.2 release was requested and/or influenced directly by you.  We don’t have a single feature with any corporate strategy, agenda, or market influence.  This release is all about you, our customers.

Ask and thou shall receive! Let’s check out all the controls and features you ask for, and that we delivered in our 15.2 release.

xamBusyIndicator

Back in 2010, I started an OSS project called the Extended WPF Toolkit.  You may have hear of it.  The very first control in it was a busy indicator control.  Over the years, I added many more controls to the toolkit, but the busy indicator was always one of the most popular controls in the toolkit, and for good reason.  Every single WPF application I ever wrote had the need for a busy indicator control, and I am confident you have had a similar experience. Surprisingly, this is a control that has been missing from the Infragistics WPF offering for a long time.  Well, not anymore.  Thanks to you, we now have the best busy indicator control on the market.  Period.

For those of you that may not be familiar with a busy indicator control, it’s a control that makes it easy for a developer to report the progress of a long running, multi-threaded, process to their end-users.  It shows a dialog on top of an area of a view in which an animation will play to give the end-user visual feedback on the progress of an operation, while locking out the underlying view elements with a slightly transparent overlay.

xamBusyIndicator

Showing the xamBusyIndicator is as simple as setting the IsBusyproperty to true when a long running process is about to start.  To close it, set the IsBusy property back to false when the operation has completed.

The xamBusyIndicator supports both determinate and indeterminate states.  For indeterminate states, set the IsIndeterminate property to true, and a continuous animation will play until the operation has competed.  This is common for scenarios of when the time to complete an operation is unknown.  For determinate states, the developer can update the ProgressValueproperty in order to increment animation values to give the end-user visual feedback of the exact percentage complete of the operation.

The xamBusyIndicator ships with eight built-in animations (seven shown below) which can be changed using the Animationproperty.  Developers can also provide their own animation via a DataTemplate. Keep in mind that some animations only support the indeterminate mode regardless of the value of the IsIndeterminate property.

xamBusyIndicator animations

As with most busy indicator controls, the xamBusyIndicator also support the use of custom BusyContent, and the ability to delay the appearance of the indicator with the DisplayAfter property.  Another cool feature is the ability to set focus to any control in the view using the FocusAfterproperty, so when the xamBusyIndicator is closed, focus can be set on an element like a TextBox for a better end-user experience.

Another really cool thing we added for the xamBusyIndicator was actually to the WPF Sample Browser.  We added a cool configurator so that you can customize the xamBusyIndicator and then export the style for use in your application.  This way, you don’t have to write any code.  Just get the xamBusyIndicator just like you want it, export the style to the clipboard, and then paste into your application.  It’s that easy!

xamBusyIndicator configurator

xamDataGrid

Prior to 15.2, the xamDataGrid only provided the Excel style multi-select filtering option if the grid was using the FilterUIType of LabelIcons.  As you can imagine, that Excel style filtering is a very popular style of filtering, and we know how annoyed you were with this fitering option not being available with the FilterRecord option.  So we fixed it!  You can now provide this familiar Excel style filtering to your end users when using FilterRecord as the FilterUIType by setting the FilterOperandUIType to ExcelStyle.

xamDataGrid excel filtering

If you’re an MVVM developer, which if you are doing WPF you better be, then you are well aware of the INotifyDataErrorInfo interface.  Now, the INotifyDataErrorInfo interface is different than the IDataErrorInfo that is available in earlier versions of WPF.  INotifyDataErrorInfo was released with .NET 4.5 and is the new recommended interface to use for reporting error information both synchronously and asynchronously.  As you may have guessed by now, the xamDataGrid fully supports the INotifyDataErrorInfo interface.

Along those same lines, if you are doing MVVM, then you know all about the INotifyPropertyChanged interface.  But, what happens if your objects don’t implement INPC?  What can be done?  Well, there are a number of design patterns you could follow to add support for INPC.  Or, you can just use one of the two new methods we added to the xamDataGrids Record called RefreshCellValue and RefreshCellValues.  These new methods allow you to manually refresh the data that has been displayed to your users without the need for the INotifyPropertyChanged interface.

When we announced the release of the new TemplateField for the xamDataGrid, we had tons of great feedback and praise.  We also had a very common request.  As of the 15.2 release, you can now use a DataTempateSelector to utilize business logic to determine which template to apply for both the EditTemplate and DisplayTemplate.  Simply create a DataTemplateSelector class, add your logic, and then set the EditTemplateSelector and/or DisplayTemplateSelector properties.

The last feature we added to the xamDataGrid for 15.2 is a handy new event called DataSourceChanged.  This will allow you to respond any time the data source of the xamDataGrid has been changed.

xamPropertyGrid

For those customers wanting more control over the sorting of properties and categories in the xamPropertyGrid, wait no more.  We have introduced a number of new attributes and properties to the xamPropertyGrid to give you complete control over how the properties and categories are sorted.  For property sorting, simply decorate each property in a class with the PropertySortOrderAttribute and provide an integer to designate the desired order of the property.  For example; decorating a property with the following attribute would sort the property into the 5th position in the XamPropertyGrid display:

[PropertySortOrder(5)]

In order to set the sort order of categories, you need only to decorate the class with the CategorySortOrderAttributeand provide the name of the category to sort, as well as an integer to represent the desired order of the category as it will be shown in the xamPropertyGrid. You can declare multiple CategorySortOrderAttributes on a class to represent each category you have defined.  For example; the following attributes on a class would assign sort orders for 3 categories used by the properties in the class which would appear in the xamPropertyGrid in the order of “Touch”, “Behavior”, and “Appearance”:

[CategorySortOrder(“Appearance”, 5)]
[CategorySortOrder(“Behavior”, 4)]
[CategorySortOrder(“Touch”, 1)]

But Brian… what if my business object libraries can’t reference the Infragistics WPF assemblies?  Great question!  If the classes that contain the properties to be displayed in the XamPropertyGrid are contained in an assembly that doesn’t, or can’t, have a reference on the XamPropertyGrid and therefore doesn’t have access to the two custom attributes described above, we support an alternative approach where you can decorate your classes/properties with custom attributes that you define in your own assembly. The XamPropertyGrid will recognize these developer-defined custom sort attributes as long as they conform to the following 2 rules:

The developer defined attribute names must be:

  • CategorySortOrder (or CategorySortOrderAttribute)
  • PropertySortOrder (or PropertySortOrderAttribute)

And each must take parameters of the following types:

  • CategorySortOrder must take 2 parameters: one of type string for the category name and one of type int for the sort order
  • PropertySortOrder must take 1 parameter of type int for the sort order

But Brian… My objects are closed for modification, or I don’t have the access to modify the classes directly.  So I can’t even use my own custom attributes, even if I wanted to.  Now what?  No problem!  If you cannot, or prefer not to, take a declarative approach and decorate the types/properties with attributes, we provide a programmatic way for you to control the sort order. We do this by exposing two settable properties on the XamPropertyGrid of type IComparer:

  • public IComparerCategorySortComparer
  • public IComparer PropertySortComparer

Another feature asked for by customers was the ability to support the System.ComponentModel.MergablePropertyAttribute to give you control on how properties are edited when they exist on an object instance that is part of a multiple selection in the xamPropertyGrid.  When a property is decorated with the MergableProperty, the decorated property is hidden from the xamPropertyGrid and will not be available for editing.

Lastly, support for the System.ComponentModel.ICustomTypeDescriptor interface has been added to give you more control on how properties are displayed in the xamPropertyGrid by providing dynamic custom type information.

xamPropertyGrid ICustomTypeDescriptor support

xamComboEditor

The xamComboEditor now has support for the System.ComponentModel.DescriptionAttribute so that when binding the xamComboEditor to an items source that is an Enum, whether as a standalone editor or as an editor in the xamDataGrid, it will display the descriptions declared via the attribute rather than the actual Enum values.  This is one of those small, but very help and much needed features.

xamComboEditor DecriptionAttribute support

Legends

We made improvements to the API of the the Legend, ItemLegend, and ScaleLegend by exposing a number of new properties so that you can more easily change the appearance of the items that appear in the legends.

  • TitleForeground
  • TitleFontSize
  • TitleFontFamily
  • TitleFontStyle
  • TitleFontWeight
  • TitleFontStretch
  • ItemsForeground
  • ItemsFontSize
  • ItemsFontFamily
  • ItemsFontStyle
  • ItemsFontWeight
  • ItemsFontStretch

In addition, there are four new properties of positioning/aligning title and items within legends:

  • TitleHorizontalAlignment
  • TitleVerticalAlignment
  • ItemsHorizontalAlignment (not apply to ScaleLegend)
  • ItemsVerticalAlignment (not apply to ScaleLegend)

Note:  These new properties do not affect the legacy theme for the xamDataChart because the base class of the legend controls use different properties in this theme.

xamDataChart

New properties have been added to the xamDataChart that allows the developer to more easily set a major and minor gridline interval. This eliminates the need for you to create custom code to recompute the interval values each and every time the end-user zooms, scrolls, or when new data is added to the chart.

xamSpreadsheet

The xamSpreadsheet now has support for data validation.  You can now validate cell values, provide tooltips, and show error messages based on invalid values.

xamSpreadSheet data validation

Excel Engine

Our popular Excel engine, the engine that powers our xamSpreadsheet control, has added four new methods to its API.  These methods make it much easier to insert and delete rows and columns from the WorksheetTable class.

  • DeleteColumns(int tableColumnIndex, int count = 1)
  • DeleteDataRows(int dataRowIndex, int coun = 1)
  • InsertColumns(int tableColumnIndex, int count = 1)
  • InsertDataRows(int dataRowIndex, int coun = 1)

xamRichTextEditor

The xamRichTextEditor received a new method called GetPositionFromPointwhich enables a customer to get the nearest valid text insertion location relative to the supplied point. The method name and parameters match the name/parameters used by the WPF RichTextBox so that customers can easily discover this new method and be familiar with how it should work.

Let’s Wrap this Baby Up!

Besides the new xamBusyIndicator control, and all the new features I mentioned in this post, we are delivering much more that I didn’t get a chance to talk about.  We have tons of other smaller features, and bug fixes, and performance optimizations that are part of our newest 15.2 release.

I hope you are as excited about this release as I am.  As you have probably noticed, things are changing at Infragistics, and your voice is louder than ever.  If you have ideas about new features we should bring to our controls, important issues we need to fix, or even brand new controls you’d like us to introduce, please let us know by posting them on our Product Ideas website.  Follow and engage with us on Twitter via @infragistics. You can also follow and contact me directly on Twitter at @brianlagunas.  Also make sure to connect with our various teams via our Community Forumswhere you can interact with Infragistics engineers and other customers.

If you are not using our WPF controls yet, remember that a free evaluation download is only a click away.

Lastly, when you do build something cool with our controls, please make sure to let us know.

What's New in 15.2? Webinar Recap

$
0
0

Infragistics Ultimate 15.2 is here, and you're going to love it! We’ve been hard at work updating our products to help you build apps with the features your customers have been asking for, so check out our launch webinar and get exclusive access to the latest news from Infragistics, including:

  • a look at what's new through great demos that show the value you can deliver across desktop, web & mobile apps;
  • a deep dive into new rapid prototyping features in Indigo Studio;
  • a sneak peek into what you can expect in the next few months from Infragistics, and more!

Don’t miss out: download your free trial of Infragistics Ultimate 15.2 and view the webinar recording here!

[youtube] width="560" height="315" src="http://www.youtube.com/embed/OUI8EzfY-RY" [/youtube]

Potential error while using Windows 10 64-bit's "Apps & Features" interface to uninstall lnfragistics Ultimate products

$
0
0

Windows 10 has provided a new way on how you can uninstall programs from your system. The built-in “Settings” application has a “System” option where you can view “Apps & Features”.  This will list applications installed on your system and provide an easy way to uninstall them.

Uninstalling a product via Apps & Features

If you attempt to uninstall an Infragistics product via “Apps & Features”, you might experience an error.  This may be due to, at the time of this posting, an issue in the tooling used to create the installation as explained at http://wixtoolset.org/issues/4857/.  This issue, so far, has only been seen on Windows 10 64-bit machines. 

While we have seen this error during testing, we have not been able to reproduce it consistently on every Windows 10 64-bit machine.  If you do happen to experience this error in your environment, the products can still be uninstalled successfully on Windows 10 via one of these options.

Option 1– Use the “Programs and Features” option in “Control Panel” and choose the "Uninstall" option for the product.

Option 2 - Run the Infragistics Platform Installer that you used to install the product initially.  It can also be used to modify, repair, or uninstall the product.

Option 3– If you still have the .MSI file for the product you want to remove, run it and choose the “Remove” option.

From Data to Decisions: How Do You Make Decisions?

$
0
0

What was the best decision you ever made? Was it when you chose the University you’d study at? Was it the time you decided to change your career? Was it when you threw caution to wind and took that month long vacation?

The decisions we take can change our lives. Of course, not every decision will have an enormous impact on your long term happiness or success (Indian takeaway or Chinese takeaway?). However, the way we actually make decisions – whether it’s in our personal lives or at work – is largely similar. The thing you’re deciding on could be enormous or insignificant, but the process of reaching a decision can often be almost identical.

The issue is that our decision making process excels for certain types of choices – the kinds of things that kept our ancestors alive and kicking. However, the modern world, and especially the world of work, asks us to make a lot of complex decisions which require rational thinking and to leave our ‘gut instinct’ aside. While ‘intuition’ still has a lot of currency in the world of work, it’s also important to consider a wide range of facts – especially when large sums of money and other peoples’ livelihoods are involved.

Business Intelligence is key to forming the best decisions and in today’s post we’ll look at how you can tap into your organization’s data to make the best decisions.

How do you arrive at decisions?

The vast majority of our decisions are made using heuristics. Heur-what-stics? Heuristics is, basically, a hard to pronounce word which describes how we make decisions by reducing complexity in the world around us.

Your mind is very good at making associations between things in the world around us, combining these with our experience, and helping us make decisions on the back of this. Heuristics is useful because it saves us a lot of time. We can think of the brain as a filter, constantly cutting out the noise and helping us focus on what’s important. If we didn’t have this capability, we’d basically never make any decisions about anything. Let’s illustrate this with a quick example.

You need some new pants and are walking through a mall in the city center on your lunch break. On arriving at the mall you look at the floor plan. You find a department store; once there you follow the sign to the men’s clothing department (assuming you’re a dude). Although there are lots of jeans available, you haven’t got a lot of time, so instantly pick a pair made by a well-known brand.

Heuristics helps you navigate this situation quickly and effectively. There were probably plenty of pants-selling stores you could have visited in the mall, but you chose the department store unconsciously because you knew you’d find what you were looking for there easily. When you chose the well-known jeans brand, heuristics came into play again. You associated it with quality, paying more on trust that the designers know what they’re doing.

In both these situations, you could have spent a long time analyzing every single option. You could have visited every store in the mall trying out their stock. You could have compared all the jeans in the department store, examining how they were stitched, testing the strength of the rivets on the pockets. But, you would get nowhere in life if you took this approach to everything. Heuristics helps you make decisions fast.

However, not all decisions are made heuristically. Daniel Kahnemann, Nobel Prize winning  cognitive psychologist and author of Thinking, Fast and Slow describes two different types of thought. One is our quick, heuristic thinking. The other is slow, deliberate and logical.

So, what’s this got to do with Business Intelligence?

The decisions we make in the workplace should combine the two kinds of thinking humans are capable of. In high pressure situations, you can’t spend hours dithering about which course to follow. Nonetheless, this isn’t always the most appropriate method. Heuristics is, inevitably, based on past experience, prejudice and unconscious ‘instinct’. This can be useful in some case, yet in others it will hold you back. 

For example, if you’re deciding to expand operations into a new market, this isn’t the kind of thing that should be done on a whim. You need to be sure there’s actually a market for your product, that you have the resources to set up new offices and hire new people. If this kind of decision isn’t made with solid facts backing it up, you risk making major blunders. Yet, as the graph below shows, a lot of decision makers keep making choices based on heuristic methods:

Research: Which of the following best describes your personal approach to making significant management decisions?

Source: Economist Insights

Business Intelligence can help decision makers avoid making major decisions ‘on a whim’. Tools like ReportPlus from Infragistics allow any decision maker to draw their organization’s data into easy to use, interactive dashboards on a touchscreen device. This allows rapid access to hard facts and means fewer decisions are based on instinct and more decisions are based on logical and deliberate thinking.

ReportPlus is available on iOS, Android and will soon be released for desktop. Try ReportPlus free on iOS today. It might be the best decision you ever make.  


Who Are the World's SharePoint Experts?

$
0
0

It’s not often we start a post like this, but, be prepared for disappointment: Gregory Hartley and Maryann Karinch claimed a couple of years back that you can become an expert in anything in just two hours. Does this mean you’ve been wasting your time attending SharePoint webinars, joining community forums, and reading blogs like...ours? We’re not convinced.

Mastering SharePoint takes years of dedication, building relationships and countless hours devoted to the product to reach anything close to expert status. Experts not only know SharePoint inside out, they also use their knowledge to contribute, to give back to the community and help all of us get more out of our communications and collaboration platform. Today we wanted to give a high five to those influential folks whose in-depth knowledge gives so much back to the community.

Expert ease

So, how exactly do you define an expert? Is it the individual who has made the most money? The person with the most expansive knowledge or the best public speaking skills? It’s impossible to judge, for the most part due to the word ‘expert’ being a comparative term. Perhaps that is the reason why so many profess to being an expert themselves.

And true, while there are many great influencers and people championing and providing a wealth of advice around SharePoint, there are that special few who have really driven the success of Microsoft’s platform and we think we’ve found them. So without further ado, here’s our list of SharePoint experts!

Jeff Teper

The Corporate Vice President of OneDrive & SharePoint at Microsoft, Jeff Teper was one of the minds behind bringing someone called Satya Nadella into the company all the way back in 1992 - a move which some would say has paid off.

Often working under the alias of “The Father of SharePoint”, Jeff was one of the Foundations Knowledge Management team that later went on to develop and create the business collaboration platform. In 2011 he identified cloud computing as the most important technology of the year, and four years down the line we can see that he wasn’t wrong. It’s clear that Jeff and Satya have similar aspirations for the company, and his close relationship with the CEO combined with his hand in the creation of SharePoint meant there wasn’t really any way Jeff couldn’t appear on this list.

Julia White

Julia White is the general manager of the Microsoft Office division, which oversees SharePoint. A 13-year veteran of the company, she was caught in the firing line somewhat earlier this year at Ignite, where rumors spread about the neglect of the on-premises SP2016, forcing her to assure that SharePoint Server ‘16 was not being disregarded. She also wrote this article on “The Evolution of SharePoint” for the Office blog back in February.

What’s more, Julia has been praised for her laid-back attitude, whilst still possessing all the customary fiery traits of a businesswoman at the top of her game. She’s also been labelled “the first cool Microsoft employee in potentially forever”. Not a bad title to have!

Mary Jo Foley

A Microsoft journalism giant, Mary Jo Foley has been in-the-know with everything Microsoft for the past 30+ years, going all the way back to 1983. She continues to write freelance for a number of tech publications, and authored the book“Microsoft 2.0: How Microsoft Plans to Stay Relevant in the Post-Gates Era” which received widespread critical acclaim. With further successes in podcasting and news editing, it’s fair to say she knows her way around Microsoft in the press. Her ZDNet blog contains all the latest releases on everything Microsoft.

Being so involved in the Microsoft world, Mary is always the first in line when it comes to product releases, updates and everything in-between, including SharePoint.

Follow her on Twitter for rolling updates on the world of Microsoft (and occasionally craft beer!)

Naomi Moneypenny

Naomi is the Chief Technology Officer at Synxi, where she leads the development team for the adaptive recommendations and machine learning engine for SharePoint. A thoroughly active member of the SharePoint community, she was named a Top 25 SharePoint Influencer in 2014 and more recently grabbed the number one spot on the Top 25 Office 365 Influencers.

Her blog is filled to the brim with articles exploring enterprise social and collaboration, innovation, trend forecasting and of course, SharePoint. You can also view a list of events where Naomi is speaking around the world.

That’s a wrap!

As always with these types of posts, there are many more people we could have included. However, we’d like to think there’s not much room for dispute on whether or not the above deserved a place on our list. They’ve all spent a significant part of their working lives dedicated to the world of SharePoint and Microsoft, and have reaped the well-deserved rewards. Then again, maybe the true root to their success is that they all read “How to become an expert in anything in 2 hours”. We’d have to ask them!

You don't need to be a SharePoint expert in order to mobilize your corporate SharePoint! Check out Infragistics' SharePlus' demo: the ultimate mobile productivity solution for SharePoint and Office 365.

How to create relationships between entities in the Entity Framework Code First Approach

$
0
0

 

 

The Entity Framework Code First approach allows us to create a model as a plain class and then the database gets created from the domain model or entity class. In the Code First approach, the database gets created from the classes.

Some advantages of the Entity Framework Code First approach include (as stated in Scott Gu’s blog):

        Developing without ever having to open a designer or define an XML mapping file

        Defining your model objects by simply writing “plain old classes” with no base classes required

        Using a “convention over configuration” approach that enables database persistence without explicitly configuring anything

        Optionally overriding the convention-based persistence and using a fluent code API to fully customize the persistence mapping

 

Rather the delving more into theoretical concepts, in this post we will directly jump into code and create a table and database using the Code First approach. In this post we will learn how we can create entities and a relationship between entities in the Entity Framework Code First approach. In the EF Code First approach, there are two options to create the relationship between entities, through:

1.      Data annotations

2.      Fluent API

In this post we will use data annotations to create the relationship between entities.

 

Create database with one table

Let us start with creating a table named Student in a database with the code first approach. The domain class Student can be created as shown in the listing below:

 

namespace CodeFirstDemoApp

{

   publicclassStudent

    {

       publicint Id { get; set; }

       publicstring Name { get; set; }

 

       publicint Age { get; set; }

 

    }

}

 

As you might have already noticed, the Student class is a plain class. Entity Framework will use the Student class to create the table in the database. The Student class represents the domain entity and it should not have any information or references of the database. Entity Framework will use the Student class to create the Student table.

Once the domain entity class is created, next we need to create a Context class which will inherit the DataContext class. The context class can be created as shown in the listing below:

 

using System.Data.Entity;

 

namespace CodeFirstDemoApp

{

    publicclassContext : DbContext

    {

        public Context() : base()

        {

        }

        publicDbSet<Student> Students { get; set; }

    }

}

We have created the Context class with the default constructor. Later in the post we will talk about various options in the constructor. In the context class we are doing the following tasks:

·        Creating the default constructor. Since we are not passing any parameter in the constructor, so the EF will create a database with the name as Namespace.Class name. So in this case, the created database name will be CodeFirstDemo.Context.

·        Since we are not passing a connection string information in the constructor of Context class, the EF will create a database in the default database server of SQL Server Express.

·        To create a database in the desired server with the desired name, we need to create the connection string and pass that as a parameter in the Context constructor.

·        To create the table in the database, create a public property of the generic DbSet type with domain entity passed in it.

 

So far we have created the Student entity class and the Context class. Now we can write a simple LINQ to Entity query to create the database and perform the operations as shown in the listing below:

 

using System;

using System.Linq;

 

namespace CodeFirstDemoApp

{

    classProgram

    {

        staticvoid Main(string[] args)

        {

            CreateStudent();

            Console.WriteLine("Student Creatred");

 

            Context c = newContext();

            var result = from r in c.Students select r;

            foreach (var r in result)

            {

                Console.WriteLine(r.Name);

            }

          

            Console.ReadKey(true);

        }

 

        staticvoid CreateStudent()

        {

            Student s = newStudent

            {

                Id = 1,

                Age = 12,

                Name = "Foo"

            };

                Context c = newContext();

                c.Students.Add(s);

                c.SaveChanges();

        }

    }

}

 

 

Custom database name

When we work with the default constructor for the Context class, EF by default creates the database with a fully qualified name as Namespace.Contextclass name. However we can pass the desired name of the database mydb in this case in the constructor as shown in the listing below:

public Context()

            : base("mydb")

        {

           

        }

 

In the SQL Express EF will create a database with the name mydb.

 

Working with Connection String

As of now we are relying on the EF to create the database. However we can pass a connection string to create a database at the desired server and a name. The connection string can be created in the config file as listed below:

<connectionStrings>

    <addname="democonnectionstring"connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=Demo1;Integrated Security=True;MultipleActiveResultSets=true"providerName="System.Data.SqlClient"/>

    </connectionStrings>

 

We have created a connection string to create a database in local db server. Next we need to pass the connection string name in the constructor of Context class as shown in the listing below:

  public Context()

            : base("name=democonnectionstring")

        {

           

        }

 

Relationship between Entities

In the Code First approach, we can create a relationship between entities using either of the two options:

1.      Data Annotations

2.      Fluent API

In this post we will create relationship using data annotations.

 

One to One Relationship

We may have a requirement to create one to one relationships between two entities. In other words, we need a Primary key – Foreign Key relationship between two entities. Let us say we have two entities and the following rules:

1.      There are two entities named Student and StudentAccount

2.      Student is a primary entity

3.     StudentAccount is a dependent entity on Student

4.     Primary key of StudentAccount will be foreign key of Student

We should not able to create a StudentAccount without a Student and there can only be one entry of Student in StudentAccount. Put simply, each Student will have one StudentAccount and no StudentAccount will exist without a Student.

Let us first create the primary entity: Student

 publicclassStudent

    {

     

       publicint Id { get; set; }

       publicstring Name { get; set; }

 

       publicint Age { get; set; }

 

       publicvirtualStudentAccount StudentAccount { get; set; }

 

 

    }

 

As you might have noticed, in the Student entity we have a virtual property of the type StudentAccount which is created as shown the listing below:

 

 

  publicclassStudentAccount

    {

        publicint Id { get; set; }

 

        publicstring Name { get; set; }

 

        publicint Amount { get; set; }

 

        [Required]

        publicvirtualStudent Student { get; set; }

 

    }

 

Again you might have noticed that in the StudentAccount entity we have a virtual property of the type Student. Since Student is a primary entity, the virtual Student property in the StudentAccount entity is annotated Required. Further, a Context class can be created as shown in the listing below:

 

using System.Data.Entity;

 

namespace CodeFirstDemoApp

{

    publicclassContext : DbContext

    {

        public Context()

            : base("name=democonnectionstring")

        {

           

        }

        publicDbSet<Student> Students { get; set; }

        publicDbSet<StudentAccount> StudentAccounts{ get; set; }

    }

}

Always remember that we cannot create a row in the StudentAccounts table unless we do not have a corresponding row in the Student table.  Data can be created in the related table as shown in the listing below:

 

  staticvoid CreateStudent()

        {

            Student s = newStudent

            {

                Id = 1,

                Age = 12,

                Name = "Foo"

            };

            StudentAccount sa = newStudentAccount

            {

                Amount = 300,

                Name = "Sports Account",

                Student = s

            };

                Context c = newContext();

                c.Students.Add(s);

                c.StudentAccounts.Add(sa);

                c.SaveChanges();

        }

 

 

As you might have noticed, we are setting the object of Student as a property of StudentAccount.  We can retrieve records from both the tables as shown in the listing below:

Context c = newContext();

            var result = from r in c.Students select r;

            foreach (var r in result)

            {

                Console.WriteLine(r.Name);

                Console.WriteLine(r.StudentAccounts.Amount);

            }

 

 

To verify the relationship between entities in SQL Server Management Studio, we can see the columns created with the constraints and keys as shown in the image below:

 

 

Here the Id column of the StudentAccounts table is both the primary key and foreign key.

 

One to Many Relationship

We may have a requirement to create one too many relationship between two entities. Let us say we have two entities

1.      There are two entities Student and StudentAddress

2.      Student is a primary entity

3.     StudentAddress is a dependent entity on Student

4.     One Student can enroll in multiple StudentAddress

One Student can have many StudentAddress. One of the column of StudentAddress will have foreign key as primary key of Student.

Let us first create the primary entity Student,

 

publicclassStudent

    {

     

      public Student()

       {

           StudentAddresses = newHashSet<StudentAddress>();

       }

       publicint Id { get; set; }

       publicstring Name { get; set; }

 

       publicint Age { get; set; }

 

       publicICollection<StudentAddress> StudentAddresses { get; set; }

 

    }

 

 

You might have noticed that we are creating a property of collection of StudentAddress and then creating a set value of the StudentAddress property in the constructor of Student. The StudentAddress class can be created as shown in the listing below:

 

publicclassStudentAddress

    {

        publicint Id { get; set; }

        publicstring  Address { get; set;}

 

        publicint StudentId { get; set; }

 

        publicvirtualStudent Student { get; set; }

    }

 

Again you might have noticed that in the StudentAddress entity we have a virtual property of the type Student. Since Student is a primary entity, the virtual Student property in the StudentAddress has a corresponding StudentId property.

Further, the Context class can be created as shown in the listing below:

 

publicclassContext : DbContext

    {

        public Context()

            : base("name=democonnectionstring")

        {

           

        }

        publicDbSet<Student> Students { get; set; }

        publicDbSet<StudentAddress> StudentAddresses { get; set; }

    }

 

Always remember that we cannot create a row in the StudentAddress table unless we do not have a corresponding row in the Student table. Data can be created in the related table as shown in the listing below:

 

   staticvoid CreateStudent()

        {

            Student s = newStudent

            {

                Id = 1,

                Age = 12,

                Name = "Foo"

            };

 

            StudentAddress sa1 = newStudentAddress { Address = "Delhi", Id = 1 };

            StudentAddress sa2 = newStudentAddress { Address = "Bangalore", Id = 2 };

            s.StudentAddresses.Add(sa1);

            s.StudentAddresses.Add(sa2);

 

                Context c = newContext();

                c.Students.Add(s);              

                c.SaveChanges();

        }

 

As you might have noticed, we are adding the objects of StudentAddress to the Student.  We can retrieve records from both tables as shown in the listing below:

staticvoid Main(string[] args)

        {

            CreateStudent();

            Console.WriteLine("Student Created");

 

            Context c = newContext();

            var result = from r in c.Students.Include("StudentAddresses") select r;

            foreach (var r in result)

            {

                Console.WriteLine(r.Name);

                foreach(var a in r.StudentAddresses)

                {

                    Console.WriteLine(a.Address);

                }

            }

          

            Console.ReadKey(true);

        }

 

 

To verify the relationship between entities in SQL Server Management Studio, we can see the columns created with the constraints and keys as shown in the image below:

 

 

 

Many to Many Relationship

Last but not least, let us see how we can configure a many to many relationship. Let’s say we have a Student entity and a Subject entity. One Student can be enrolled in many Subjects and One Subject can have many Students. To create a many too many relationship between these entities, let us first create the Student entity as shown in the listing below:

publicclassStudent

    {

     

      public Student()

       {

           Subjects = newHashSet<Subject>();

       }

       publicint Id { get; set; }

       publicstring Name { get; set; }

 

       publicint Age { get; set; }

 

     

       publicICollection<Subject> Subjects { get; set; }

 

    }

 

Here we’re creating a property of collection of Subjects and then creating a set value of the Subjects property in the constructor of Student. The Subject class can be created as shown in the listing below:

 

  publicclassSubject

    {

        public Subject()

        {

            Students = newHashSet<Student>();

 

        }

        publicint Id { get; set; }

 

        publicstring Name { get; set; }

 

 

        publicvirtualICollection<Student> Students { get; set; }

    }

 

In the Subject class also we are creating property of collection of Students and in the constructor of Subject class creating a set of students. This is all we need to do to create a many too many relationship between entities.

Further, the Context class can be created as shown in the listing below:

publicclassContext : DbContext

    {

        public Context()

            : base("name=democonnectionstring")

        {

           

        }

        publicDbSet<Student> Students { get; set; }

 

        publicDbSet<Subject> Subjects { get; set; }

    }

 

We can create the rows in the Students and Subjects table as shown in the listing below:

staticvoid CreateStudent()

        {

            Student s = newStudent

            {

                Id = 1,

                Age = 12,

                Name = "Foo"

            };

 

            Subject s1 = newSubject { Id = 1, Name = "Phy" };

            Subject s2 = newSubject { Id = 2, Name = "Maths" };

            s.Subjects.Add(s1);

            s.Subjects.Add(s2);

 

                Context c = newContext();

                c.Students.Add(s);              

                c.SaveChanges();

        }

 

We can retrieve records from both the tables as shown here:

 

staticvoid Main(string[] args)

        {

            CreateStudent();

            Console.WriteLine("Student Created");

 

            Context c = newContext();

            var result = from r in c.Students.Include("Subjects") select r;

            foreach (var r in result)

            {

                Console.WriteLine(r.Name);

                foreach(var a in r.Subjects)

                {

                    Console.WriteLine(a.Name);

                }

            }

          

            Console.ReadKey(true);

        }

When we verify the relationship between the Student and Subject entity, we will find that EF has created an extra table to maintain the many to many relationship

So there you have it, that’s how to create relationships between entities in the Code First approach. In this post we started with working with single entities and then proceeded to create a relationship between the entities. I hope you find this post useful, thanks for reading.

 

Infragistics Ultimate 15.2 is here. Download and see its power in action!

WinPivotGrid - it's not just for OLAP anymore...

$
0
0

WinPivotGrid - it's not just for OLAP anymore...

WinPivotGrid is typically associated with OLAP (Online Analytical Processing) data, serving as a front end for MDX and XMLA data sources. It also supports the presentation of non-hierarchical data via the FlatDataSource class.

This article discusses the new database adapter classes which were added in the 15.2 release to facilitate the presentation of data obtained from database tables in the WinPivotGrid control.

What exactly does 'OLAP' mean anyway?

OnLine Analytical Processing.

Well, that's what each letter in the acronym stands for, anyway. I'll defer the formal definition to the folks over at OLAP.com, who can presumably explain it better than I:

" OLAP is the technology behind many Business Intelligence (BI) applications. OLAP is a powerful technology for data discovery, including capabilities for limitless report viewing, complex analytical calculations, and predictive 'what if' scenario (budget, forecast) planning. "

Okay...sounds cool. Data discovery, limitless report viewing, complex calculations, etc. Yes, all these things sound like stuff I'd like to have in my application. How do I get that?

OLAP please - and hold the server.

So one way to go about incorporating business intelligence into your applications is to familiarize yourself with Microsoft's SQL Server Analysis Services (SSAS) model. You might need to make a few stops along the way for things like server configurations, user permissions, integrating with SQL Server, and then of course on to the actual business of data mining, dimensions, cubes, roles, KPIs...and probably a few acronyms I've neglected to mention.

Getting the point? None of this is terribly difficult, but can be time consuming - more so if you don't already have access to these things. Wouldn't it be great if you could bypass all this SSAS business and go straight to the part where your users are slicing and dicing data just like they would on a fancy OLAP server?

Introducing the FlatDataSource.

Designed specifically so that you can get all that neat multi-dimensional data presentation (and all the slicing, dicing, and filtering that goes along with it), without an OLAP server, the FlatDataSource class was introduced with the 14.2 release. All you need is a standard, garden variety .NET class, and an IEnumerable implementation that contains the instances of this class which comprise your data set. You create a FlatDataSource instance with this IEnumerable implementation, assign it to the WinPivotGrid's DataSource property, and that's really it...

What's that? You don't believe me? Alright, let's go through it step-by-step with a quick example.

  1. The .NET class

    Let's assume you have a .NET class named CustomerOrder, with all the data required to describe an order for a given product, made by a given customer on a given date. Oh, yes - with the price of that product...finance people get all bent out of shape when you don't include that kind of stuff.

    A C# implementation of such a class would look something like this:

    CodeSnippet-CustomerOrder

  2. The IEnumerable implementation

    Now we need an IEnumerable implementation which consists of instances of this CustomerOrder class, with each instance representing an actual order. We'll assume this part is self-evident, and continue on to the creation of the FlatDataSource instance which we use to serve this data to the WinPivotGrid control. That code looks something like this:

    CodeSnippet-IEnumerable

  3. The End Result

    As you can see, the data which we generated from a "non-OLAP" data source appears in the WinPivotGrid exactly as if it were produced by an OLAP query. Users can slice, dice and filter this data any which way they like:

    PivotGrid DataSelector

  4. The Missing Piece

    The astute reader will have noticed that in section 2, The IEnumerable Implementation, there is a call to a method named GetData at line 44...and the GetData method implementation is nowhere to be found...huh?

    Now I could give you one of the usual excuses like, "beyond the scope of this article" or my personal favorite, "omitted for the sake of brevity" (as if the internet were running out of space and my saving a couple of kilobytes here is going to stave off impending doom). The fact is, there's nothing fancy going on in there, but it does represent several hundred lines of code, mostly involving database querying and table joining and all that good stuff, which may very well be off the point of this article, but is still of interest to anyone who wants to use the WinPivotGrid to display data from "regular" databases.

    Wait a minute - did you say several hundred lines of code??? Gulp. Yes, that's what I said. You've got to connect to the database, query it across a couple of different tables, create instances of a proxy class to hold the flattened data, and get the resulting recordset into an IEnumerable implementation containing a list of those proxy class instances. Certainly not rocket science, just tedious, manual labor. There's got to be a better way...right?

Adapt and Overcome.

In order to address this shortcoming, a new namespace was added in the Infragistics.Olap.DataSource.Flat assembly, Infragistics.Olap.FlatData.Adapters. This namespace contains two new classes, SqlAdapter and OleDbAdapter, each representing a liason between the WinPivotGrid control and a database table or query.

These adapters greatly simplify the act of querying a 'standard', i.e., non-OLAP database, and presenting the result in the WinPivotGrid control. In the simplest case, only two properties need to be set - one for the connection string which establishes the connection to the database, and one for the SQL statement that defines the data to be returned.

The following code sample gives you an idea of how these adapters work:

CodeSnippet-SetDataSource

In closing.

Hopefully you'll agree that these data adapters greatly simplify the problem of presenting standard database data in the WinPivotGrid control. If any of the material presented here was unclear, or you have further questions, post in the WinPivotGrid Forum, and we'll be happy to help you out.

Developer News - What's IN with the Infragistics Community? (10/5-10/18)

$
0
0

You guys are ALL about the "Top" Lists this time! I had a blast reading through these, and I'm sure you'll learn at least one thing too. Check them out and don't be shy -- share your favorite development related top list too!

6. Guess What's Now the Most Popular Course at Harvard (Quartz)

5. 6 Top Programming Languages for Mobile Development (InformationWeek)

4. 15 HTML5 Tools to Make Your Life Easier (Creative Bloq)

3. Rating Programming Languages – Swift is Hot, Dart is Not (CIO)

2. 10 Most Used git Commands (Excel with Code)

1. 9 Ways Google is Changing the World (Business Insider)

What Is Microsoft's SharePoint Market Size Worldwide?

$
0
0

SharePoint is undoubtedly one of the world’s most important and widespread enterprise productivity tools. However, Microsoft are, quite naturally, secretive about the actual value of the product. In today’s post, we'll be trying to discover that answer by taking a high-level overview of SharePoint’s growth and adoption worldwide. Furthermore, we'll be looking at how it is doing in terms of usage, market growth, revenue and so on.

Since its introduction in 2001, the product has seen accelerated rates of deployment across many realms. Some famous examples of engaging SharePoint environments were created by the Ministry of Sound and Ferrari. Alongside this, SharePoint as a communications tool saw companies like Vodafone and Heineken construct impressive and award winning intranet platforms for communicating with staff.

The road to success

To best gauge SharePoint's gradual journey to success, let's have a look at the SharePoint timeline over the last few years.

There are a number of key dates in the fabled history of SharePoint. These help us to set the scene when assessing its market share over the last few years: 

  • SharePoint 2007: Released in November 2006, this edition laid the foundation of many features that have been heavily used since. SPD, content types, permission groups and more were introduced.
  • SharePoint 2010: This product was released in May 2010 and saw the product evolve further with such features as the inclusion of PowerShell support, Office Ribbon (that had previously been introduced in the Office Suite 2007) and sandboxed solutions.
  • Skype Acquisition: Microsoft confirmed that they had struck a deal to buy out Skype.
  • Acquisition of Yammer: Yammer was purchased by Microsoft in June 2012, with a goal to integrate into Office 365.
  • SharePoint 2013: This was released to the market on November 2012 and saw more changes made, such as a revamped search and the replacement of MySites with OneDrive.

We can flesh this timeline out further by including two more relevant events.  These are:

  • Office 365 Launch: Office 365 & SharePoint Online were launched in June 2011 and were based on the SharePoint 2010 interface.
  • Office 365 Upgrade:  The SharePoint Kernel of Office 365 was upgraded to SharePoint 2013 in February of that year.

So, with these dates in mind, how could we assess SharePoint’s global market size?

SharePoint in 2010

In 2009, SharePoint was a $1.3 billion business with more than 100 million users. As a result, there was a lot of pressure on Microsoft to deliver a solid upgrade on SharePoint 2007. As such, 2010 was a big year for SharePoint as May 2010 saw the delivery of the first truly mature version of the product. As alluded to in the timeline above, a lot of new and "foundation-making" enhancements were all building on a very solid SharePoint 2007. This was the first instance we saw high levels of synergy between Office Clients and SharePoint, and it was also the year that Microsoft revealed their ambition to conquer the cloud. Steve Ballmer coined the term "Software as a Service" for the first time.

SharePoint in 2011

Fresh on the heels of launching SharePoint 2010, Microsoft launched their assault on the heavens with the June 2011 release of Office 365. This was the replacement for the earlier ill-fated BPOS and had been designed from the ground up with both cloud architecture and security in mind. In 2011, Microsoft earned an estimated $1.3 billion in licensing revenue alone. This was also the year that SharePoint celebrated its 10th anniversary. Microsoft took the opportunity to emphasize their commitment to Office 365.

SharePoint in 2012

2012 saw both some interesting figures and important movements on the technology front. Statistically, SharePoint passed the $2 billion mark for earned revenues. Microsoft also claimed that two in every three knowledge workers had worked with SharePoint. On the technology front, Microsoft also purchased a potential rival in the collaborative market when they acquired the Enterprise Social Network known as Yammer. The market also saw the release of the long awaited SharePoint 2013.

SharePoint in 2013

Early in the year, Microsoft upgraded the Office 365 experience to match that of SharePoint 2013.

SharePoint in 2015

Microsoft are expected to continue their market dominance of enterprise collaboration sectors in the coming years. The company is projected to grow at an annual average growth rate of 20% over the next four years, so we can expect many more good things to come.

Major player

SharePoint holds a major place in what is undoubtedly a competitive and multi-billion-dollar industry. A product earning $2bn in 2012 which was mostly On-Premises based and yet to see the benefits of Skype, Yammer or the next-generation features of Delve or Sway will be worth a great deal more today. 

For some time, there was talk of Microsoft only pushing Office 365, but recently published news regarding the future of On-Premises and hybrid builds is reassuring. This means that not only is a greater technological scope catered for, but there is more opportunity for Microsoft to increase their market share moving forwards and converting these into very rewarding revenue streams.

Looking to mobilize your corporate SharePoint? Check out Infragistics' SharePlus' demo: the ultimate mobile productivity solution for SharePoint and Office 365.

Ignite UI Release Notes - October 2015: 15.2 Volume Release

$
0
0

With every release comes a set of release notes that reflects the state of resolved bugs and new additions from the previous release. You’ll find the 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 both 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

Ignite UI 2015 Volume 2

Infragistics ASP.NET Release Notes - October 2015: 15.2 Volume Release

$
0
0

With every release comes a set of release notes that reflects the state of resolved bugs and new additions from the previous release. You’ll find the 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 both 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

ASP.NET 2015 Volume 2


UltraDataChart Data Annotations

$
0
0

What are Data Annotations for the UltraDataChart?

With the release of Infragistics 2015.2 Windows Forms controls, data annotation layers were added to the UltraDataChart. But what exactly are they? Data annotations are essentially just series layers, similar to ColumnSeries, AreaSeries, etc, but instead they add mouse over UI interactions to the UltraDataChart.

There are a variety of types of annotation layers. You can use any combination of them for a more visually informative presentation. You can also select a specific target either series or axis for them, via the TargetSeries and TargetAxis properties respectively, or leave the respective fields empty and it will apply to all applicable series.


Tooltips

Most people by now are familiar with the concept of tooltips, even if they may not know the term. Essentially what tooltips do is when you mouse over something them enabled on it, it will display a descriptive bubble of information about its target.

Without even adding a new layer to the WinDataChart, you can add tooltips by two methods.

First you can just set the ShowDefaultTooltip to true, which is false by default, and it will build a simple tool tip for the series. It will have an icon of the color(s) of the series itself, in the shape representative of the type of series, the series title, and show its respective value(s).

Second you can instead create your own custom tool tip, by hooking up the TooltipContentUpdating event on the Series. This event will give you the DataContext of series that it is expecting for the tool tip, and allows you to return a control that it will display for the tooltip.

There are two scenarios I would avoid using just either of these methods by themselves. First is, when dealing with multiple series, because internally they are unaware of each other, you can potentially have one tooltip overwrite another. The second, for line series or scatter style series, because you have to mouse over the points drawn part of the chart to have it register, they work better with column and area based charts. For both of these scenarios I would recommend a specific tooltip layer.

Tooltip Layers

For each of the below tooltip layers, they use the series tooltip's as defined like described above, via either the default if ShowDefaultTooltip is set to true, or the custom tooltip, via the TooltipContentUpdating event. With the tooltip layers enabled, as they are aware of all the series, they display for the closest datapoint(s) with a tooltip. 

ItemTooltipLayer

Displays an individual tool tip for each series it applies to, layered so they won't conflict and with an arrow like adornment that points to their respective points. The ItemTooltipLayer targets the series

ItemTooltipLayer

CategoryToolTipLayer

Displays a merged tooltip for all category values in each series that it applies to.

CategoryTooltipLayer
 

Markers and Highlights

Markers are small images used to designate the data points. You can either have them on all the time, or only when you mouse over them. Highlights will do just that either highlight the marker, or a column band around the area of the data point. Like tooltips for most series, you can turn the markers on the individual series, via the MarkerType property, although for all but the point based Marker series they are turned off by default. 

You can of course mix and match multiple annotation types. Below is a the CategoryItemHighlightLayer, which are the moving markers for all three charts, and the markers turned on for all the items of the Green chart.

CategoryHighlightLayer

CategoryItemHighlightLayer

The CategoryItemHighlightLayer, shown both above and below, has a property called HighlightType. HighlightType defaults to Auto, which it will pick the most appropriate HighlightType for the chart displayed, but you can also force it to one of the two options, Marker shown above and Shape shown below.

Shape CategoryItemHighlightLayer

CategoryHighlightLayer

While the CategoryItemHighlightLayer is good for highlighting the individual item values for each chart, the CategoryHighlightLayer is better for when you want to show highlight all of the items in a category together.

Shape CateogyHighlightLayer

CrosshairLayer

The CrosshairLayer by default renders as intersecting lines, for each axis value for each series the layer is rendering for, relative to the mouse cursor. Shown below you can see the two horizontal lines for equating to each series Y value, and as the categories align you see one vertical line for designating that. You can of course turn off either of the lines, and show just horizontal or just vertical as well.

CrosshairLayer

I've only scratched the surface with what you can do with the annotation layers. Each of the layers is highly customizable, be it targeted for individual series, changing the brush colors, thickness, outline, etc. As well as the TransitionDuration, which for most is by default set to 0, which snaps from DataPoint to DataPoint, but in the above I set it to between 250ms-500ms so that you can see a smooth animation between data points. Another possible useful property for more fluid charts, might be UseInterpolation, which instead of snapping from data point to data point, it will allow you to stop data point values. 

Want to explore them further try?

Documentation:

     http://help.infragistics.com/doc/WinForms/2015.2/CLR4.0/?page=DataChart_ChartAnnotationLayers.html 

Trial Version:

     http://www.infragistics.com/products/ultimate/download

Annotate Wisely

$
0
0

 

Merriam Webster defines an annotation as "a note added to a text, book, drawing, etc., as a comment or explanation". Chart annotations can provide extra detail, highlight points of interest or simply be used for disambiguation purposes. However, filling a graphic with annotations can distract from the visual salience of the data itself, so it's important to find the right balance. If we say that a charts title, axis labels and axes titles are structural components rather than annotations then it's probably safe to conclude that many charts don't require annotation.

Straddling the line between structural component and annotation are line and marker labels. Where possible, I try to label lines directly. In the example below the labels are at the end, for a line illustrating a distribution I'd be more inclined to place the label centered above the maximum. Either way, this reduces the need of the viewer to switch gaze from line to legend and back and requires no form of color identification task which can be awkward for those who suffer from a color vision deficiency (color blindness). If the label names are small then direct labeling will use up much less additional space (there's no need to draw a line for each label in the key for instance) and for a fixed image size we have more room to display our data.

In multi-category scatter plots (like below) it's too much to directly label every point and can be confusing to label only one per category. With lines that frequently cross, neat and unambiguous labeling of each line can be difficult (though matching label color to line color may help), especially if trying to automate the chart creation process. Consequently, direct labelling isn't always a practical solution and a discrete legend may be required.

As hinted at in the first paragraph, annotations can also be used to provide specific details about individual points, clusters of points and line segments. They can even be used to explain the empty spaces — sometimes the biggest insights one can get from a chart come from understanding where the data points aren't! Knowing what to label, where to place the labels and how they should appear may not be entirely obvious and is frequently a matter of trial and error. As always, context is important.

One frequent use of annotation is to print the values of bars in a bar chart as in the example below. This can be helpful but shouldn't be thought of as necessary - precise values are best displayed in an accompanying table.

As I (hopefully), demonstrated in my recent article, connected scatterplots benefit greatly from annotation in two ways. Firstly we can label the points with the value for the third variable we're interested, the one that isn't plotted along either axis (usually this means time). Secondly, specific anomalies or points of interest can be explained through more extensive text. Here's the final chart from that article again.

Note that the annotations use the same simple typeface (Helvetica) as the axis labels. There's no reason to use fancy fonts or vibrant colors, as in the remake below, that only act as a distraction and make reading difficult.

Connected scatter plots generally work well with large amounts of annotation that help to tell a specific, evolving, story. However, sometimes the story in a chart really only concerns a single data point. The rest of the data is there to provide context and illustrate the anomalous nature of that one point. The annotation can give it focus as well as providing you with a platform to communicate further. Sometimes you'll be able to explain the cause of the outlier, on other occasions you might have to explain that you have no clue what is going on. Both cases are interesting but it's important your audience knows what you're trying to say: "This anomaly can be explained by..." or "I cannot explain this anomaly (HELP!?!)". The chart below illustrates the former (you can read more about the data here).

If a chart forms some part of a larger article then your probably don't want to annotate your graphics with blocks of text that just repeat what has been said in the blocks of text that surround the chart. However, thanks to Twitter and other social media, charts are now frequently shared without the surrounding text of the article. This provides at least some motivation for moving text from the surrounding article in to the chart. In this sense, perhaps the "rules" for choosing which annotations should be added to a chart are evolving, like the story in a connected scatter plot.

 

 

Infragistics Ultimate 15.2 is here. Download and see its power in action!

What is a SharePoint List?

$
0
0

The list is potentially one of the oldest forms of personal organization. Before the days when nearly a third of humanity had smartphones, a list would consist of a few hand-written lines on a piece of scrap paper: groceries, things-to-do etc. Nowadays, a ‘list’ can take on any number of different digital forms. SharePoint, back in 2001, was ahead of the curve and made lists one of its key data structures when building sites.

In Microsoft's words,“Organizations use SharePoint to create sites.”

More specifically, ‘Team Sites’ are a key means for people to work, find information and communicate together. ‘Team Site’ was in fact the original name for the first ever version of SharePoint that Microsoft introduced. The name is rather self-explanatory. Once you create a site, you can invite other members of your team to work on it with you. This common workspace naturally becomes a place for collaboration and communication. Team Sites are a private web space, with access only permitted to those who are invited to join. Think of it as a (really) big container for all your teams work.

Lists and Libraries

SharePoint is formed of a number of building blocks that constitute the primary components that make up a Team Site. Of these blocks, list apps (previously known as Web Parts) are used to customize the interface and edit the content of your site. Lists and libraries are the backbone to Team Sites, and to SharePoint as a whole. If you think of anything that would earn a place on a company intranet - contacts, departments, documents, announcements - it can be displayed as either a list or a library.

Users of pre-2013 SharePoint iterations may find some confusion between the terms Web Parts, apps, list apps, lists and all the rest. Before 2013, lists and apps were self-titled. Now, however, anything inserted into a site takes the name of an app, and these apps are categorized into list apps, libraries etc.

Although very similar, there are a few differences between lists and libraries. The easiest way to distinguish between the two is that in a list, each row is a record of information. In a library, each row is a document.

A-list organization

When you add an app in SharePoint, there are a number of pre-set list apps to choose from, as well as the option to create your own custom list:

  • Links list
  • Announcements list
  • Contacts list (can sync to Microsoft Outlook)
  • Discussion Board list
  • External list
  • Survey

List apps, like much of SharePoint, are easily customizable. You can instantly edit a list in your browser just like an Excel spreadsheet in the ‘quick edit’ view, and you can access the ‘list’ tab to adjust the settings for the entire list. Switch, modify and create new views, email links, view who the list is shared with and modifying workflows are some of the settings you can use. You can even edit or customize the form that exists for every list that’s created (something that wasn’t really possible without custom work in pre-2013 SharePoint, but is getting even easier in the latest versions of SharePoint Online).

When there isn’t a template which does exactly what you want, you can create a Custom list much the same way as above. As the name suggests, a custom list gives you the basics - the ‘Title’ column and little else - and lets you customize it as much or as little as you want. With a Custom list, you also have the ability to import lists from Excel, or publish them straight into SharePoint.

Lets Re-view

If you or your company make extensive use of SharePoint, then your site is understandably going to be filled with a lot of content.

For all your documents, SharePoint provides a default view in every library: ‘All Documents’, which includes the default columns that are present in every library: ‘document type’, ‘document title’, ‘date modified’ and ‘modified by’. Whilst this is a competent solution when dealing with a small number of documents, companies with a lot of content may need more precise ways of finding what they need.

Sorting, Filtering and Grouping are three of the features available to create refined views for your document library. It’s an incredibly simple process: if you were to sort a column by ascending alphabetical order, SharePoint will give you the option to ‘save view as’ - storing this view for further use whenever you want it.

This of course is the same for all your list items. You can give your customized view a title, make it public or private, and then sort through any view, default or custom created, for a filing system that is as efficient as you want to make it.

Data limits increased in SharePoint 2016

As well-equipped as SharePoint is to deal with large amounts of data, there are always limits that end-users run into. In SharePoint 2013, there are two categories that define the varying limits of SharePoint:

Thresholds and Boundaries on list numbers:

  • List View: 5,000 items per view.
  • Admin View: 5,000 items per view.
  • Co-Author Limits: 10 concurrent editors per document (Boundary is 99).


Files in libraries:

  • File Size: 2GB per item.
  • Document Count: 30,000,000 per library.
  • Bulk Operations: 100 items per bulk upload.

In SharePoint 2016, Microsoft will be expanding the content database size, list threshold size, maximum file size and more:

Content Database Size

Site Collections per Content Database

List Threshold

MaxFile Size

Indexed Items

Content database sizing into TB’s

100,000 site collections per content database

Increased List Threshold >5000

MaxFile Size increased to 10GB and removed character restrictions

2x increase in Search scale to 500,000,000 items

Increases to boundaries in SharePoint 2016 will make the platform even more useful for business users. The humble list has served them well so far and it doesn’t look like going anywhere yet.

Looking to mobilize your corporate SharePoint? Check out Infragistics' SharePlus' demo: the ultimate mobile productivity solution for SharePoint and Office 365.

What's New in IG TestAutomation 2015.2

$
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. I will follow with changes in existing controls that had changes that would affect how the UI behaved, lastly I’ll list any bug fixes that were implemented this cycle.


IG Controls with UI-Altering Improvements

Toolbars Manager

New to the ToolbarsManager is Notification Badges, which allows you to call attention to specific events on tools. In addition to support this feature further as well as ToolbarManager as a whole, we've extended the GetNAProperty style methods to work on Tools. Using the same identifier you would use to interact with the tool, you can get and set the properties on the instance of the tool.
15.2 UltraToolbarsManager - Badge Notifications 

XamDataGrid

There were a number of new feature improvements to the XamDataGrid, and all of the XamDataPresenterBase controls. Including but not limited to, ExcelStyle Filtering. Conditional based CellTemplates, and support for INotifyDataErrorInfo, allowing you to build custom data validation into the XamDataGrid. All of which are supported in IG TestAutomation for WPF. 

15.2 XamDataGrid, ExcelStyleFiltering DataValidation 

XamSpreadSheet

Similarly the XamSpreadsheet, not to be left out, also supports data validation based on rules set on the worksheet's cells.

XamBusyIndicator

The XamBusyIndicator is a new content control allowing for your developer to give a clean UI facing to those long waits for loading data. Likewise IG TestAutomation extends that and allows you to test the state to make sure it's done loading. 

15.2 XamSpreadsheet DataValidation, XamBusyIndicator

IG Test Automation improvements

Update and re-release of legacy TestAdvantage for HP installers

Our default support policy is one year. Which often that is enough time to find and resolve any issues that may arise between our controls and the TestAdvantage proxies. But over the years there have been changes related to the release of new operating systems and architecture changes that either required manual installation of the product. Or in one case a patch in QuickTest Professional caused any keyboard based for actions to seize up during replay. Specifically the issues resolved were:

TA Version

Description

2008.2 and earlier

In QTP 9.5 there was a patch and QTP 10 and later in release there was a change in the how QTP internally sent strings to the AUT, that we used, that caused all the actions that used that method to seize upon calling it. 

2009.1 and earlier

With the changes in how Windows stored keys in the registry for x64 based machines. The registry locations our installers were expecting changed. 

2009.1 and earlier

With the release of QTP 9.5 HP changed the installation location of QTP.

All versions

Added opt-in metrics collection, which essentially collects OS information, TA versions, and QTP\UFT version info so that we can better assess support needs.

2010.2 and earlier

Added check to make sure QTP\UFT was run once before installing TA. This is because QTP\UFT on first run over-writes our registry additions to their namespace on first run. 


 

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

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

Download the free trial of IG TestAutomation for IBM RFT 15.2
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/

Infragistics Windows Forms Release Notes – October: 15.2 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, Excel and Word 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.

In order to download release notes, use the following links:

Windows Forms 2015 Volume 2 Release (Build 15.2.20152.1000)

Notes in PDF Format
Notes in Excel Format
Notes in Word Format

Viewing all 2398 articles
Browse latest View live