How to Create Interactive JavaScript Charts from Custom Data Sets

Image result for DeCaffeinate Converts CoffeeScript To JavaScriptCharts are a great way of visualizing complex data quickly and effectively. Whether you want to identify a trend, highlight a relationship, or make a comparison, charts help you communicate with your audience in a precise and meaningful manner.

In my previous article — Getting Started with AnyChart: 10 Practical Examples — I introduced the AnyChart library and demonstrated how it is a great fit for your data visualization needs. Today, I want to dig a little deeper and look at AnyChart’s data mapping features which allow you to create beautiful charts from custom data sets with a minimum of fuss.

I also want to look at the many ways you can customize AnyChart to suit your requirements, as well as how you can change the look and feel of AnyChart charts by using themes. There are currently 17 out-of-the-box themes to choose from, or you can create your own. And if you’ve not got the best eye for design, why not buy our book to get a leg up.

As the Head of R&D at AnyChart, I could spend all day talking about this library, but now it’s time to get down to business.

Data Mapping in AnyChart

More from this author

  • Getting Started with AnyChart — 10 Practical Examples
  • Introducing GraphicsJS, a Powerful Lightweight Graphics Library

To facilitate the integration of custom data sources into charting applications, AnyChart has special objects called data sets. These objects act as intermediate containers for data. When data is stored in data sets, AnyChart can track changes to it, analyze it, and work with this data in a more robust and effective manner. In short: interactive JavaScript charts have never been easier!

No matter if you have an array of objects, an array of arrays, or a .csvfile, you can use data sets to:

  • ensure full and explicit control over the series created
  • define which column is an argument (x-axis)
  • define which columns hold values for which series
  • filter data
  • sort data

Basics of Data Mapping

The best way to learn how data mapping works in AnyChart is to look at an example. Let’s imagine an array with the following custom data set:

var rawData = [
  ["A", 5, 4, 5, 8, 1, "bad"],
  ["B", 7, 1, 7, 9, 2, "good"],
  ["C", 9, 3, 5, 4, 3, "normal"],
  ["D", 1, 4, 9, 2, 4, "bad"]
];

There’s nothing too wild going on here — this kind of custom data structure is common in a lot of existing applications. But now you want to use this array in AnyChart. With many other charting libraries you would be forced to transform the data to a format that the library can work with. Well, with AnyChart things are a lot simpler — just look what we can do. First, load the array into a data set:

var rawData = [
  ["A", 5, 4, 5, 8, 1, "bad"],
  ["B", 7, 1, 7, 9, 2, "good"],
  ["C", 9, 3, 5, 4, 3, "normal"],
  ["D", 1, 4, 9, 2, 4, "bad"]
];

var dataSet = anychart.data.set(rawData);

And then, once the data has been loaded into the data set, the real magic begins: you can now create so called views. These are data sets derived from other data sets.

var rawData = [
  ["A", 5, 4, 5, 8, 1, "bad"],
  ["B", 7, 1, 7, 9, 2, "good"],
  ["C", 9, 3, 5, 4, 3, "normal"],
  ["D", 1, 4, 9, 2, 4, "bad"]
];

var dataSet = anychart.data.set(rawData);

var view1 = dataSet.mapAs({x: 0, value: 1});
var view2 = dataSet.mapAs({x: 0, value: 2});
var view3 = dataSet.mapAs({x: 0, high: 3, low: 4});
var view4 = dataSet.mapAs({x: 0, value: 5, meta: 6});

You’ll notice that when defining a view, you determine which columns from the original array are included and what names these columns get. You can then use them to create whichever kind of charts you like. For example, here’s how to create a pie chart from the custom data in the 5th column.

Note: AnyChart needs only x and value fields to create a pie chart, but the views also contain a meta field with the data from the 6th column. You can map any number of optional fields and use them as you like. For example, these fields can contain additional data to be shown as labels or as tooltips:

anychart.onDocumentLoad(function() {
  var rawData = [
    ["A", 5, 4, 5, 8, 3, "Bad"],
    ["B", 7, 1, 7, 9, 5, "Good"],
    ["C", 9, 3, 5, 4, 4, "Normal"],
    ["D", 1, 4, 9, 2, 3, "Bad"]
  ];

  var dataSet = anychart.data.set(rawData);
  var view4 = dataSet.mapAs({x: 0, value: 5, meta: 6});

  // create chart
  var chart = anychart.pie(view4);
  chart.title("AnyChart: Pie Chart from Custom Data Set");
  chart.labels().format("{%meta}: {%Value}");
  chart.container("container").draw();
});

And this is what we end up with:

Note: You can find all of the demos in this article as a CodePen collection.

Multi-Series Combination Chart with Custom Data Set

Now, let’s see how we can use the same custom data to create a combination chart with line and range area charts on the same plot. This section is going to be very short since now you know what views are. All you need to do is choose the proper views and create the necessary series explicitly:

anychart.onDocumentLoad(function() {
  var rawData = [
    ["A", 5, 4, 5, 8, 3, "Bad"],
    ["B", 7, 1, 7, 9, 5, "Good"],
    ["C", 9, 3, 5, 4, 4, "Normal"],
    ["D", 1, 4, 9, 2, 3, "Bad"]
  ];

  var dataSet = anychart.data.set(rawData);

  var view1 = dataSet.mapAs({x: 0, value: 1});
  var view2 = dataSet.mapAs({x: 0, value: 2});
  var view3 = dataSet.mapAs({x: 0, high: 3, low: 4});

  // create chart
  var chart = anychart.line();
  // create two line series
  chart.line(view1).name("EUR");
  chart.line(view2).name("USD");
  // create range area series
  chart.line(view2).name("Trend");

  // set title and draw chart
  chart.title("AnyChart: Combined Chart from Data Set");
  chart.container("container").draw();
});

This is what it looks like:

Live Data Streaming and Filtering

And now, to showcase the beauty of views and data sets. For this we’ll create a column chart and a multi-line chart, live stream data into a data set, and accept only certain values into the column chart. Sound complicated? It isn’t really!

anychart.onDocumentLoad(function() {
  var rawData = [
    ["A", 5, 4, 2, 6, 3, "Bad"],
    ["B", 7, 2, 1, 9, 5, "Good"],
    ["C", 8, 3, 2, 9, 4, "Normal"],
    ["D", 1, 4, 1, 4, 3, "Bad"]
  ];

  dataSet = anychart.data.set(rawData);

  var view1 = dataSet.mapAs({ x: 0, value: 1 });
  var view2 = dataSet.mapAs({ x: 0, value: 2 });
  var view3 = dataSet.mapAs({ x: 0, value: 3 });
  var view4 = dataSet.mapAs({ x: 0, value: 4 });
  var view5 = dataSet.mapAs({ x: 0, value: 5 });

  // create chart
  var chart1 = anychart.line();
  // create several line series
  chart1.line(view1).name("EUR");
  chart1.line(view2).name("USD");
  chart1.line(view3).name("YEN");
  chart1.line(view4).name("CNY");

  // create column chart
  // based on filtered view
  // that accepts values of less than 5 only
  var chart2 = anychart.column(
    view5.filter("value", function(v) {
      return v < 5;
    })
  );

  // set title and draw multi-line chart
  chart1.title("Line: Streaming from Data Set");
  chart1.legend(true);
  chart1.container("lineContainer").draw();

  // set title and draw column chart
  chart2.title("Column: Filtering Stream");
  chart2.container("columnContainer").draw();
});

// streaming function
var streamId;
function stream() {
  if (streamId === undefined) {
    streamId = setInterval(function() {
      addValue();
    }, 1000);
  } else {
    clearInterval(streamId);
    streamId = undefined;
  }
}

// function to add new value and remove first one
function addValue() {
  // generate next letter/symbol as argument
  var x = String.fromCharCode(
    dataSet.row(dataSet.getRowsCount() - 1)[0].charCodeAt(0) + 1
  );
  // append row of random values to data set
  dataSet.append([
    x,
    Math.random() * 10,
    Math.random() * 10,
    Math.random() * 10,
    Math.random() * 10,
    Math.random() * 10
  ]);
  // remove first row
  dataSet.remove(0);
}

You see that we’ve created a custom data set and five derived views. Four of them are used as is to create lines, but when creating our column chart, we apply the filtering function and let only values of less than 5 into the view. Then we stream data by adding and removing rows from the main data set, and all the views automatically receive data and charts are updated — no coding is needed to implement this!

This is just the tip of the iceberg as far as data mapping goes! You can do the same with arrays of objects and CSV data, and you can sort, search, listen to changes, go through values, as well as change existing rows. There are also special views for hierarchical data utilized in Tree Maps and Gantt Charts, and such views can be searched and traversed.

Customizing Chart Visualization

AnyChart is extremely versatile when it comes to chart customization. You can change line styles, fill colors, use gradient fill or image fill on almost any element. Colors can be set using String constants, HEX or RGB notation, or a function that returns one of these values. The library also offers a number of built-in patterns, as well as an option to create patterns of your own.

Themes

The easiest way to change the look and feel of AnyChart charts is to change the theme.

In fact, you can create your own theme or use one of those that already come with the library. There are currently 17 out-of-the-box themes available in AnyChart: Coffee, Dark Blue, Dark Earth, Dark Glamour, Dark Provence, Dark Turquoise, Default Theme, Light Blue, Light Earth, Light Glamour, Light Provence, Light Turquoise, Monochrome, Morning, Pastel, Sea, Wines. The files for these themes can be obtained from the Themes Section at AnyChart CDN.

You can reference them like so:

<script src="https://cdn.anychart.com/js/latest/anychart-bundle.min.js"></script>
<script src="https://cdn.anychart.com/themes/latest/coffee.min.js"></script>

And activate the theme with just one line:

anychart.theme(anychart.themes.coffee);

Let’s use the basic chart from the previous article by way of an example.

anychart.onDocumentLoad(function() {
  // set theme referenced in scripts section from
  // https://cdn.anychart.com/themes/latest/coffee.min.js
  anychart.theme(anychart.themes.coffee);
  // create chart and set data
  var chart = anychart.column([
    ["Winter", 2],
    ["Spring", 7],
    ["Summer", 6],
    ["Fall", 10]
  ]);
  // set chart title
  chart.title("AnyChart Coffee Theme");
  // set chart container and draw
  chart.container("container").draw();
});

Now the look and feel of that chart is completely different.

Note: you can browse through all the themes and see how they work with different chart types and series on the AnyChart Themes Demo Page. Please refer to the AnyChart Documentation to learn how to create your own themes and read about other options.

Coloring

As you have seen, it’s quite trivial to color elements in the AnyChart charting library. But there’s more! It is also possible to color shapes with solid colors with opacity, use radial and linear gradients, and make lines dashed. You can apply colors by their web constant names, HEX codes, or RGB, RGBA, HSL, HSLA values — just as you can in CSS.

To showcase all of this in one powerful sample, I want to highlight another option along the way — namely that you can color elements using your own custom functions. This may come in handy in many data visualization situations, for example when you want to set a custom color depending on the value of the element. Let’s test this out on a Pareto chart. AnyChart can build this chart from raw data and calculate everything it needs.

anychart.onDocumentReady(function() {

  // create Pareto chart
  var chart = anychart.pareto([
    {x: "Defect 1", value: 19},
    {x: "Defect 2", value: 9},
    {x: "Defect 3", value: 28},
    {x: "Defect 4", value: 87},
    {x: "Defect 5", value: 14},
  ]);

  // set chart title
  chart.title("Pareto Chart: Conditional coloring");

  // set container id and draw
  chart.container("container").draw();
});

But say we want to highlight the elements that have relative frequency of less than 10%. All we need to do in this case is to add some coloring functions:

// Get Pareto column series
// and configure fill and stroke
var column = chart.getSeriesAt(0);
column.fill(function () {
  if (this.rf < 10) {
    return '#E24B26 0.5'
  } else {
    return this.sourceColor;
  }
});
column.stroke(function () {
  if (this.rf < 10) {
    return {color: anychart.color.darken('#E24B26'), dash:"5 5"};
  } else {
    return this.sourceColor;
  }
});

As is shown in the example, we can access the coloring function context with the help of the this keyword, then we create a condition and output whichever color or line setting we need. We use a simple HEX string with opacity for the color: '#E24B26 0.5'. For the line, we calculate a darker color using AnyChart’s special color transformation function and also set an appropriate dash parameter: {color: anychart.color.darken('#E24B26'), dash:"5 5"}.

Here’s what we end up with:

Default Pattern Fill

The AnyChart JavaScript charting library also provides a very flexible way to work with pattern (hatch) fills. To start with, you have 32 pattern fill types. They can be arranged into your own custom pallets, and you can directly set which one to use for a certain series, element, etc. Here’s what the code for a monochrome pie chart might look like:

anychart.onDocumentReady(function() {
  // create a Pie chart and set data
  chart = anychart.pie([
    ["Apple", 2],
    ["Banana", 2],
    ["Orange", 2],
    ["Grape", 2],
    ["Pineapple", 2],
    ["Strawberry", 2],
    ["Pear", 2],
    ["Peach", 2]
  ]);

  // configure chart using chaining calls to shorten sample
  chart.hatchFill(true).fill("white").stroke("Black");
  chart
    .labels()
    .background()
    .enabled(true)
    .fill("Black 1")
    .cornerType("Round")
    .corners("10%");

  // draw a chart
  chart.container("container").draw();
});

The only thing we did to enable the pattern fill is chart.hatchFill(true).

Custom Pattern Fill

AnyChart gets its ability to use custom patterns from the underlying GraphicsJS library. I introduced this library and showcased some really cool drawing samples in my article here on SitePoint: Introducing GraphicsJS, a Powerful Lightweight Graphics Library. The fact that AnyChart is powered by GraphicsJS allows for some really amazing results, but a picture is worth a thousand words, so let’s proceed to the next example.

We’ll create patterns using one old font that used to be rather popular among geologists – Interdex. I remember one of AnyChart customers asking us how to use this in his project, and he was very happy to learn just how easy it was.

First, if you want to use a font that is not present on your system, you need to create a web font and properly reference it in the CSS file. A sample of such file for our Interdex font can be found on the AnyChart CDN. We need to reference it along with the font management library being used and the AnyChart charting library:

<link rel="stylesheet" type="text/css" href="https://cdn.anychart.com/fonts/interdex/interdex.css"/>

<script src="https://cdn.anychart.com/js/latest/anychart-bundle.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fontfaceobserver/2.0.7/fontfaceobserver.js"></script>

After that, we can proceed with the coding:

var fontLoad = new FontFaceObserver("Conv_interdex");

// create chart when font is loaded using
// https://cdnjs.cloudflare.com/ajax/libs/fontfaceobserver/2.0.7/fontfaceobserver.js
fontLoad.load().then(function() {
  anychart.onDocumentReady(function() {
    // enable hatch fill by default and make chart monochrome
    anychart.theme({
      chart: {
        defaultSeriesSettings: {
          base: {
            hatchFill: true,
            fill: "White",
            hoverFill: "White",
            stroke: "Black"
          }
        }
      }
    });

    // create a stage, it is needed to create a custom pattern fill
    stage = anychart.graphics.create("container");

    // create a column chart and set title
    chart = anychart.column();
    chart.title("AnyChart Custom Pattern");
    // set the data
    chart.data([
      ["Jan", 1000, 1200, 1500, 1000, 1200, 1500],
      ["Feb", 1200, 1500, 1600, 1200, 1500, 1600],
      ["Mar", 1800, 1600, 1700, 1800, 1600, 1700],
      ["Apr", 1100, 1300, 1600, 1100, 1300, 1600],
      ["May", 1900, 1900, 1500, 1900, 1900, 1500]
    ]);

    // set custom hatch palette
    // it can be populated with any number of patterns
    chart.hatchFillPalette([
      getPattern("A"),
      getPattern("N"),
      getPattern("Y"),
      getPattern("C")
    ]);

    // set container and draw chart
    chart.container(stage).draw();
  });
});

// function to create patterns
function getPattern(letter) {
  var size = 40;
  // create a text object
  var text = anychart.graphics
    .text()
    .htmlText(
      "<span " +
        "style='font-family:Conv_interdex;font-size:" +
        size +
        ";'>" +
        letter +
        "</span>"
    );
  // create a pattern object
  var pattern = stage.pattern(text.getBounds());
  //  add text to a pattern
  pattern.addChild(text);
  return pattern;
}

I’ve included all the explanations in the comments, but just to sum up – you can create custom patterns, arrange them in custom pattern palettes, which you can then apply to an entire chart. If you’re paying attention, you’ll notice that we’ve made use of the AnyChart themes mechanism to set defaults.

Here’s the end result. Lovely, I’m sure you’ll agree…

Custom Series

And the final sample in this article is for those who want even more flexibility and customization. While AnyChart strives to provide an ever-increasing number of chart types out of the box, data visualization is an enormous field, and each project has different requirements. In order to make (and keep) everyone as happy as possible and provide a way to create the visualizations of their choice, AnyChart open-sourced the JavaScript drawing library of GraphicsJS and also opened the source of the AnyChart JavaScript charting library itself.

But if you really, really want to go with 100% custom drawing, you’ll have to do a lot of work if you decide to fork the source code. For example, customizing might be a pain, and you could potentially have problems merging future versions if AnyChart doesn’t accept your pull request.

Luckily, there is a third option. With most of AnyChart’s basic chart types, you can override the rendering function and change the appearance of chart elements, while keeping all of the other things AnyChart provides.

Below you will find a code sample that shows how to transform a widely used range column chart (which is supported in the AnyChart charting library), into a less common cherry chart (which isn’t). The main thing to bare in mind when you override AnyChart’s rendering function, is that this function calculates everything from values supplied to a series, and your own (custom) series should be created out of a series with the same number of values.

anychart.onDocumentReady(function() {
  // create a chart
  var chart = anychart.cartesian();
  chart.xAxis().title("Month");
  chart.yAxis().title("Cherry price");

  // create a data set
  var data = [
    { x: "Apr", low: 29, high: 37 },
    { x: "May" },
    { x: "Jun", low: 29, high: 47 },
    { x: "Jul", low: 12, high: 27 },
    { x: "Aug", low: 20, high: 33, color: "#ff0000" },
    { x: "Sep", low: 35, high: 44 },
    { x: "Oct", low: 20, high: 31 },
    { x: "Nov", low: 44, high: 51 }
  ];

  // create a range column series
  var series = chart.rangeColumn(data);
  // set a meta field to use as a cherry size
  // series.meta("cherry", 50);
  // set a meta field to use as a stem thickness
  // series.meta("stem", 1);

  // optional: configurable select fill
  series.selectFill("white");

  // call a custom function that changes series rendering
  cherryChartRendering(series);

  // set container id for the chart and initiate chart drawing
  chart.container("container").draw();
});

// custom function to change range column series rendering to
// cherry chart with a special value line markers
function cherryChartRendering(series) {
  // cherry fill color
  series.fill(function() {
    // check if color is set for the point and use it or series color
    color = this.iterator.get("color") || this.sourceColor;
    return anychart.color.lighten(color, 0.25);
  });
  // cherry stroke color
  series.stroke(function() {
    // check if color is set for the point and use it or series color
    color = this.iterator.get("color") || this.sourceColor;
    return anychart.color.darken(color, 0.1);
  });

  // set rendering settings
  series.rendering()// set point function to drawing
  .point(drawer);
}

// custom drawer function to draw a cherry chart
function drawer() {
  // if value is missing - skip drawing
  if (this.missing) return;

  // get cherry size or set default
  var cherry = this.series.meta("cherry") || this.categoryWidth / 15;
  // get stem thickness or set default
  var stem = this.series.meta("stem") || this.categoryWidth / 50;

  // get shapes group
  var shapes = this.shapes || this.getShapesGroup(this.pointState);
  // calculate the left value of the x-axis
  var leftX = this.x - stem / 2;
  // calculate the right value of the x-axis
  var rightX = leftX + stem / 2;

  shapes["path"]
    // resets all 'path' operations
    .clear()
    // draw bulb
    .moveTo(leftX, this.low - cherry)
    .lineTo(leftX, this.high)
    .lineTo(rightX, this.high)
    .lineTo(rightX, this.low - cherry)
    .arcToByEndPoint(leftX, this.low - cherry, cherry, cherry, true, true)
    // close by connecting the last point with the first
    .close();
}

Here’s what we end up with

Conclusion

I hope you’ve found this look at AnyChart’s more advanced functionality useful and that this has given you plenty ideas and inspiration for your own data vizualizations.

If you’ve not tried AnyChart yet, I urge you to give it a go. Our latest release (version 7.14.0) added eight new chart types, five new technical indicators, Google Spreadsheet data loader, marquee select and zoom, text wrap and other cool new features.

And if you’re using AnyChart in your projects and have any comments or questions regarding the library, I’d love to hear these in the comments below.

[“Source-ndtv”]

6 great Android features missing from iOS 11

6 great Android features missing from iOS 11

Credit: Ben Patterson

Call me a flip-flopper, but the new features in iOS 11 have me thinking of jumping back to iOS after switching to Android barely a year ago.

Indeed, the new version of iOS brings such enticing features as a revamped App Store, a customizable Control Center, and drag-and-drop for iPad users, plus such catch-up features as one-handed typing and easy person-to-person payments.

But returning to iOS would mean leaving behind many Android features I’ve grown to love, from the ability to set up multiple user profiles to one-touch Google searches on whatever’s onscreen at a given moment.

Read on for six awesome Android features that iOS 11 has yet to match, starting with…

Multiple user profiles

Given all the innovations coming to the iPad courtesy of iOS 11, from the ability to drag-and-drop elements from one side of the split screen to the other and the new, persistent app dock, you’d think Apple would toss in a feature that’s been standard on Android for years: user profiles, perfect for letting family members in a one-iPad household create their own personal iPad spaces.

Multiple user profiles

Ben Patterson

If you’ve been waiting for Android-like user profiles to arrive on iOS, bad news: they’re still missing in iOS 11.

For whatever reason, though (privacy concerns, perhaps?), Apple has yet again passed on adding user profiles to the iPhone or iPad. That means if you share your iPad with your toddler or teenager, you’re sharing all your iPad data, too, including your e-mail, your open browser tabs, your Facebook app, everything.

Multiple Do Not Disturb schedules

Android has really spoiled me with its “automatic rules” for Do Not Disturb mode. With automatic rules, you can set up multiple Do Not Disturb schedules for weeknights, weekends, meetings, and any other scenarios you dream up. For example, I have Do Not Disturb set to turn itself off early (as in 6 a.m.) on weekday mornings, while on weekends, Do Not Disturb keeps things quiet until about 8.

Multiple Do Not Disturb schedules

Ben Patterson

Android’s “automatic rules” let you create multiple Do Not Disturb schedules, as opposed to the single Do Not Disturb schedule in iOS 11.

In iOS 11, though, Do Not Disturb mode still lets you set only a single schedule, meaning you can’t set Do Not Disturb to give you more quiet time on weekends or during meetings.

Yes, the new “Do Not Disturb While Driving” feature (which automatically silences notifications whenever your iPhone senses you’re driving) is a nice innovation, but it’s too bad iOS 11 didn’t catch up to Android’s Do Not Disturb features.

Search the entire screen

As with previous versions of Apple’s mobile software, iOS 11 lets you perform quick web searches on selected text via Spotlight, iOS’s universal search feature. That’s helpful if you want a deep search on a narrow selection of text, but sometimes I’m looking for a broader search of everything on my screen.

Scan the screen

Ben Patterson

Android’s “screen search” feature lets you do a one-tap Google search on everything that’s on your screen, a feat that iOS 11 has yet to master.

Here’s where Android’s Screen Search feature comes in handy. With a single tap of the What’s on my screen button in Google Assistant, Android will scan the entire screen and return any relevant search results, handy if you want a quick, 360-degree cheat sheet on a news article or web page. Pretty neat, and there’s no real equivalent on iOS, not even once iOS 11 arrives.

Clear all app windows

Here’s an Android feature I’d sorely miss even though I know it’s more cosmetic than anything else. The “Clear All” button on Android’s Overview screen instantly closes all your open app windows, leaving you with a soothing “No recent items” message when you tap the Overview button again. For a neat-freak like me, tapping the Clear All button never gets old.

Clear all app windows

Ben Patterson

The “Clear All” button on Android’s Overview screen might be the feature that Android-to-iOS 11 switchers miss the most.

On iOS, though—and yes, this includes iOS 11—there’s no easy way to clear out the massive stack of app windows on the multitasking screen, forcing you to flick up on dozens of individual windows until the coast is clear.

Now, I’m sure iOS comes with marvelous under-the-hood tools that manage the resources used by your apps and automatically suspends those that have been sitting untouched in the background for too long.

Still, though, I know it’ll kill me the first time my thumb reaches for the non-existent Clear All button on my new iPhone 8 (assuming I actually make the big leap).

Delete all local photos & videos from the Photos app

You’ve probably heard about the new storage-saving features in iOS 11, particularly when it comes to the storage-hogging Photos app.

Delete all local photos & videos from the Photos app

Ben Patterson

iCloud Photo Library will help shave some of the storage space consumed by your iPhone snapshots, but Google Photos for Android can wipe all local pictures and videos, perfect for keeping photo storage to an absolute minimum.

For example, Apple announced support for a new image format (HEIF, for “High Efficiency Image Format”) that can halve the amount of storage gobbled up by your snapshots.

Also coming in iOS 11: shortcuts that do a better job of recommending storage-saving features like iCloud Photo Library, which uploads all your pictures and videos to the cloud and then automatically pares down the number of images sitting on your iPhone or iPad.

Those are worthwhile improvements, but here’s something I’d sorely miss if I went back to iOS: the “free up space” feature in Android’s Photos app, which instantly zaps each and every local snapshot and video stored on your handset.

Thanks to the “free up space” feature, photos take up less than 100MB of space on my 16GB Nexus 5X. On the other hand, the Photos app on my old iPhone 6 consumes a ridiculous 17GB of storage, even with iCloud Photo Library turned on (and yes, with the Optimize iPhone Storage option enabled).

Bonus tip: The iOS version of Google Photos has a “free up space” feature just like its Android counterpart, meaning you could clear up tons of storage space on your iPhone or iPad by uploading your photos to Google and then using the “free up space” option to delete your local copies. Keep in mind, though, that if you’re using Google Photos and iCloud Photo Library at the same time, wiping your local images and videos with Google Photo’s “free up space” feature will also delete those photos from iCloud, so make sure all your local image files are safely backed up first.

Symbol shortcuts on iPhone letter keys

As with the latest version of Google Keyboard for Android, iOS 11 will bring symbol shortcuts to letter keys on the iPad keyboard, handy for saving a few keystrokes when you need to type a number key, an ampersand, or another common symbol.

Symbol shortcuts on iPhone letter keys

Ben Patterson

Thanks to iOS 11, symbol shortcuts on letter keys (shown here on Google Keyboard for Android phones) are finally coming to the iPad; not so for iPhone, unfortunately.

That’s a welcome change, but unfortunately, iOS 11’s so-called “QuickType” keyboard is only coming to iPad, not iPhone. Now, you could argue that the iPhone keypad is too small for symbol shortcuts, but the shortcuts on Google Keyboard work just fine on my five-inch Nexus 5X.

[“Source-ndtv”]

Researchers from the UGR develop a new software which adapts medical technology to see the interior of a sculpture

Researchers from the UGR develop a new software which adapts medical technology to see the interior of a sculpture

A student at the University of Granada (UGR) has designed software that adapts current medical technology to analyze the interior of sculptures. It’s a tool to see the interior without damaging wood carvings, and it has been designed for the restoration and conservation of the sculptural heritage.

Francisco Javier Melero, professor of Languages and Computer Systems at the University of Granada and director of the project, says that the new software simplifies medical technology and adapts it to the needs of restorers working with wood carvings.

The software, called 3DCurator, has a specialized viewfinder that uses computed tomography in the field of restoration and conservation of sculptural heritage. It adapts the medical CT to restoration and it displays the 3-D image of the carving with which it is going to work.

Replacing the traditional X-rays for this system allows restorers to examine the interior of a statue without the problem of overlapping information presented by older techniques, and reveals its internal structure, the age of the wood from which it was made, and possible additions.

“The software that carries out this task has been simplified in order to allow any restorer to easily use it. You can even customize some functions, and it allows the restorers to use the latest medical technology used to study pathologies and apply it to constructive techniques of wood sculptures,” says professor Melero.

 

This system, which can be downloaded for free from www.3dcurator.es, visualizes the hidden information of a carving, verifies if it contains metallic elements, identifies problems of xylophages like termites and the tunnel they make, and detects new plasters or polychrome paintings added later, especially on the original finishes.

The main developer of 3DCurator was Francisco Javier Bolívar, who stressed that the tool will mean a notable breakthrough in the field of conservation and restoration of cultural assets and the analysis of works of art by experts in Art History.

Professor Melero explains that this new tool has already been used to examine two sculptures owned by the University of Granada: the statues of San Juan Evangelista, from the 16th century, and an Immaculate from the 17th century, which can be virtually examined at the Virtual Heritage Site Of the Andalusian Universities (patrimonio3d.ugr.es/).

 

 

[Source:- Phys.org]

 

Attackers start wiping data from CouchDB and Hadoop databases

Data-wiping attacks have hit exposed Hadoop and CouchDB databases.

It was only a matter of time until ransomware groups that wiped data from thousands of MongoDB databases and Elasticsearch clusters started targeting other data storage technologies. Researchers are now observing similar destructive attacks hitting openly accessible Hadoop and CouchDB deployments.

Security researchers Victor Gevers and Niall Merrigan, who monitored the MongoDB and Elasticsearch attacks so far, have also started keeping track of the new Hadoop and CouchDB victims. The two have put together spreadsheets on Google Docs where they document the different attack signatures and messages left behind after data gets wiped from databases.

In the case of Hadoop, a framework used for distributed storage and processing of large data sets, the attacks observed so far can be described as vandalism.

That’s because the attackers don’t ask for payments to be made in exchange for returning the deleted data. Instead, their message instructs the Hadoop administrators to secure their deployments in the future.

According to Merrigan’s latest count, 126 Hadoop instances have been wiped so far. The number of victims is likely to increase because there are thousands of Hadoop deployments accessible from the internet — although it’s hard to say how many are vulnerable.

The attacks against MongoDB and Elasticsearch followed a similar pattern. The number of MongoDB victims jumped from hundreds to thousands in a matter of hours and to tens of thousands within a week. The latest count puts the number of wiped MongoDB databases at more than 34,000 and that of deleted Elasticsearch clusters at more than 4,600.

A group called Kraken0, responsible for most of the ransomware attacks against databases, is trying to sell its attack toolkit and a list of vulnerable MongoDB and Elasticsearch installations for the equivalent of US$500 in bitcoins.

The number of wiped CouchDB databases is also growing rapidly, reaching more than 400 so far. CouchDB is a NoSQL-style database platform similar to MongoDB.

Unlike the Hadoop vandalism, the CouchDB attacks are accompanied by ransom messages, with attackers asking for 0.1 bitcoins (around $100) to return the data. Victims are advised against paying because, in many of the MongoDB attacks, there was no evidence that attackers had actually copied the data before deleting it.

Researchers from Fidelis Cybersecurity have also observed the Hadoop attacks and have published a blog post with more details and recommendations on securing such deployments.

The destructive attacks against online database storage systems are not likely to stop soon because there are other technologies that have not yet been targeted and that might be similarly misconfigured and left unprotected on the internet by users.

 

 

[Source:- JW]

New JVM language stands apart from Scala, Clojure

New JVM language stands apart from Scala, Clojure

Another JVM language, Haskell dialect Eta, has arrived on the scene, again centering on functional programming.

Intended for building scalable systems, Eta is a strongly typed functional language. It’s similar to Scala, a JVM language that also emphasizes functional programming and scalability, and Clojure, another a functional language on the JVM.

But Eta sets itself apart from such competitors because it’s immutable by default, it uses lazy evaluation, and it has a very powerful type system, said Eta founder Rahul Muttineni, CTO at TypeLead, which oversees the language. This combination allows static guarantees and conciseness simply not possible in Scala or Clojure.

Currently at version 0.0.5 in an alpha release, Eta is interoperable with Java, allowing reuse of Java libraries in Eta projects and use of Eta modules in Java. Strong type safety enables developers to tell the compiler more information about code, while immutability in Eta boosts concurrency.

Eta also features purity, in which calling a function with the same arguments yields the same results each time; function definitions are treated as equations and substitutions can be performed like in math. Eta proponents said this makes it easier to understand code and prevents a lot of bugs typical in imperative languages. “Purity allows you to treat your code like equations in mathematics and makes it a lot easier to reason about your code, especially in concurrency and parallelism settings,” Muttineni said.

Eta is “lazy by default,” meaning data stays in an unevaluated state until a function needs to see inside. This lets developers program without having to be concerned about whether they have done more computation than was required. Developers also can write multipass algorithms in a single pass. “Laziness allows you to stop worrying about the order in which you write your statements,” said Muttineni. “Just specify the data dependencies by defining expressions and their relationships to each other, and the compiler will execute them in the right order and only if the expressions are needed.”

Plans call for fitting Eta with a concurrent runtime, an interactive REPL, metaprogramming, massive parallelism, and transactional concurrency. Support for the Maven build manager and a core library are in development as well, along with boilerplate generation for Java Foreign Function Interface imports.

 

 

[Source:- Javaworld]

How to print from Edge for Windows 10

Image result for How to print from Edge for Windows 10b

How do I print web pages in Edge?

Microsoft Edge features all of the standard print tools for creating copies of web pages; those important stories and official forms can be physically printed on your printer, or they can be converted to PDF for further editing. Here’s everything you need to know about printing from Edge for Windows 10.

A look at Edge’s print settings

For anyone unfamiliar with printing from the web, here’s a look at the print settings in Edge.

  • Printer: Choose which printer you’d like to use.
  • Orientation: Choose from Portrait or Landscape.
  • Copies: Choose how many full copies of the printing job you want to be printed.
  • Pages: Choose from all pages, the current page shown in the preview, or page range. You can specify the range yourself by typing, for example, 5-7.
  • Scale: Change how large you’d like text and images to appear.
  • Margins: Set how wide or narrow you’d like the margins to be on printed pages.
  • Headers and footers: Toggle on and off. When on, the article’s title, the website, and the page number will be displayed at the top of the page, while the URL and date will be displayed at the bottom of the page.

For more settings, click More settings near the bottom of the print window.

  • Collation: Choose from collated or uncollated. Collated print jobs involving multiple copies will print in sequence, making it easier for physical distribution and binding. Uncollated print jobs with multiple copies will print out of sequence, i.e. four copies of page one, then four copies of page two, etc.
  • Pages per sheet: Choose how many pages you want to see on each sheet of paper. Scaling will occur.
  • Paper size: Choose the paper size you’re currently using in your printer.
  • Paper type: Choose the type of paper you’re currently using in your printer.
  • Paper tray: Choose which tray on your printer to use.

  • How to print a webpage

    First things first; here’s how to print a page as-is in Edge.

    1. Launch Edge from your Start menu, taskbar, or desktop.
    2. Navigate to a webpage you want to print.
    3. Click the More button in the top-right corner of the window. It looks like •••

 

[Source:- Windowscentral]

Will the R language benefit from Microsoft acquisition?

Microsoft’s recent acquisition of Revolution Analytics represents a significant move on the company’s part. Revolution Analytics is built around the highly popular R language, an open source programming language designed specifically for statistical analytics.

In addition to the R language, Revolution Analytics offers two platforms for developing and deploying R-based applications, one of which is also open source and available free to the public. With this acquisition, Microsoft is clearly moving into new territory. The question that remains is whether the impact will be felt only within Microsoft, or across the R community at large.

The world of Revolution Analytics

Formed in 2007, Revolution Analytics set out to build and support the R community as well as meet the needs of a growing commercial base. Since then, Revolution Analytics has become the world’s largest provider of R-related software and services. That shouldn’t be surprising, given that R is the world’s most widely used programming language for statistical computing and predictive analytics.

Since its rise to fame, Revolution Analytics has continued to support the open source community, contributing regularly to projects such as RHadoopand ParallelR. The company also supports more than 150 R-based user groups across the globe. Revolution Analytics’ own open source product, Revolution R Open, provides a development platform for R-based applications that users can download for free and share with other users, making analytical software affordable to a wide range of individuals and organizations.

Yet Revolution Analytics has been just as busy on the commercial side with Revolution R Enterprise, a more sophisticated version of the open platform. With the enterprise edition, organizations can implement scaled-out options for exploring and modeling large sets of data. The enterprise edition uses parallel external memory algorithms to support large-scale predictive modeling, data statistics and machine-learning capabilities, delivered at breakneck speeds on multiple environments.

A closer look at R

Ross Ihaka and Robert Gentleman at the University of Auckland created the R language in 1993 to address the limitations of existing analytical solutions. In 1995, they released R to the open source community under the terms of the GNU General Public License established by the Free Software Foundation.

From there, the code quickly gained in popularity among analysts and those developing analytical applications. Organizations that have used R include Google, Facebook, Twitter, Nordstrom, Bank of America and The New York Times, to name a few. R set a new standard for analytics that delivered predictive modeling capabilities lacking in more traditional languages.

Because R was created by and for statisticians, it contains many of the features needed to accomplish common statistical-related tasks. For example, R includes data frames, a natural data structure available in few other languages. R also makes it easier to track unknown values within an application so the actual values can be easily inserted once they are known. In addition, R makes it easy to save, reuse and share new analytical techniques with other developers and data scientists.

The R language is particularly efficient at generating visualizations, such as charts and graphs, to identify patterns and hidden anomalies. The language is efficient at reading data, generating lines and points, and properly positioning them into meaningful representations, whether maps, plots (image, scatter, bar), 3-D surfaces or pie charts.

What’s in it for Microsoft?

According to Microsoft, the Revolution Analytics acquisition will help its customers more easily implement advanced analytics within Microsoft platforms, including on-premises, on Microsoft Azure or in hybrid cloud implementations.

To this end, Microsoft plans to build R and Revolution Analytics’ technologies into Microsoft data systems, including SQL Server. Developers and data scientists will be able to take advantage of in-database analytic capabilities that can be deployed across environments. Microsoft also plans to integrate R into Azure HDInsight and Azure Machine Learning, providing more options for creating analytical models that can aid in making data-driven decisions.

Microsoft’s deep pockets also will let the company invest in the R-based applications that Revolution Analytics brings to the table. In addition, Microsoft promises continued support of Revolution R Enterprise across multiple operating systems and heterogeneous platforms such as Hadoopand Teradata. In addition, Microsoft says it will also continue Revolution Analytics’ education and training efforts for developers and data scientists.

What is particularly interesting about Microsoft’s acquisition is its stated commitment to foster Revolution Analytics’ open source nature, not only for the R language, but also for other open source commitments, including Revolution R Open, ParallelR, RHadoop, DeployR and other notable projects.

Perhaps this isn’t such a leap. Microsoft was already an R proponent long before bringing Revolution Analytics on board, having used R to enhance Xbox online gaming and to apply machine learning to data coming from such sources as Bing, Azure and Office. And Microsoft already supports R extensively within the Azure framework.

Microsoft’s acquisition of Revolution Analytics is still new, and despite the promises coming out of both companies, we don’t know what R will look like once everything has played out. What we do know is that R is a popular and widely implemented technology used in a wide range of analytical applications. The marriage between Microsoft and Revolution Analytics could go a long way in solidifying R’s hold on analytics. And we all know how much Microsoft likes to maintain its hold over those industry pieces of the pie.

 

 

 

[Source:- techtarget]

Azure Data Lake Analytics gets boost from U-SQL, a new SQL variantb

Image result for Azure Data Lake Analytics gets boost from U-SQL, a new SQL variant

The big data movement has frozen out many data professionals who are versed in SQL. Microsoft’s U-SQL programming language tries to get such folks back in the data querying game

One of the dirty little secrets of big data is that longtime data professionals have often been kept on the sidelines….

Hadoop, Spark and related application frameworks for big data rely more on Java programing skills and less on SQL skills, thus freezing out many SQL veterans — be they Microsoft T-SQL adepts or others.

While continuing its push into Azure cloud support for Hadoop, Hive, Spark,R and the like, Microsoft is looking to enable T-SQL users to join the big data experience as well.

Its answer is U-SQL, a dialect of T-SQL meant to handle disparate data, while supporting C# extensions and, in-turn, .NET libraries. It is presently available as part of a public preview of Microsoft’s Azure Data Lake Analytics cloud service, first released last October.

U-SQL is a language intended to support queries on all kinds of data, not just relational data. It is focused solely on enhancements to the SQL SELECT statement, and it automatically deploys code to run in parallel. U-SQL was outlined in detail by Microsoft this week at the Data Science Summit it held in conjunction with its Ignite 2016 conference in Atlanta.

Beyond Hive and Pig

The Hadoop community has looked to address this by adding SQL-oriented query engines and languages, such as Hive and Pig. But there was a need for something more akin to familiar T-SQL, according to Alex Whittles, founder of the Purple Frog Systems Ltd. data consultancy in Birmingham, England, and a Microsoft MVP.

“Many of the big data tools — for example, MapReduce — come from a Hadoop background, and they tend to require [advanced] Java coding skills. Tools like Hive and Pig are attempts to bridge that gap to try to make it easier for SQL developers,” he said.

But, “in functionality and mindset, the tools are from the programming world and are not too appropriate for people whose job it is to work very closely with a database,” Whittles said.

This is an important way to open up Microsoft’s big data systems to more data professionals, he said.

“U-SQL gives data people the access to a big data platform without requiring as much learning,” he said. That may be doubly important, he added, as Hive-SQL developers are still a small group, compared with the larger SQL army.

U-SQL is something of a differentiator for Azure Data Lake Analytics, according to Warner Chaves, SQL Server principal consultant with The Pythian Group Inc. in Ottawa and also a Microsoft MVP.

“The feedback I have gotten from database administrators is that big data has seemed intimidating, requiring you to deploy and manage Hadoop clusters and to learn a lot of tools, such as Pig, Hive and Spark,” he said. Some of those issues are handled by Microsoft’s Azure cloud deployment — others by U-SQL.

“With U-SQL, the learning curve for someone working in any SQL — not just T-SQL — is way smaller,” he said. “It has a low barrier to entry.”

He added that Microsoft’s scheme for pricing cloud analytics is also an incentive for its use. The Azure Data Lake itself is divided into separate analytics and storage modules, he noted, and users only have to pay for the analytics processing resources when they’re invoked.

More in store

While it looks out for its traditional T-SQL developer base, Microsoft is also pursuing enhanced capabilities for Hive in the Azure Data Lake.

This week at the Strata + Hadoop World conference in New York, technology partner Hortonworks Inc. released its version of an Apache Hive update using LLAP, or Live Long and Process, which uses in-memory and other architectural enhancements to speed Hive queries. It’s meant to work with Microsoft’s HDInsight, a Hortonworks-based Hadoop and big data platform that is another member of the Azure Data Lake Analytics family.

PRO+

Content

Find more PRO+ content and other member only offers, here.

  • E-Handbook

    Shining a light on SQL Server storage tactics

Meanwhile, there’s more in store for U-SQL. As an example, at Microsoft’s Data Science Summit, U-SQL driving force Michael Rys, a principal program manager at Microsoft, showed attendees how U-SQL can be extended, focusing on how queries in the R language can be exposed for use in U-SQL.

The R language has garnered more and more support within Microsoft since the company purchased Revolution Analytics in 2015. While R programmers dramatically lag SQL programmers in size of population, R is finding use in new analytics applications, including ones centered on machine learning.

 

[Source:- techtarget]

Planning an efficient upgrade from SQL Server 2005: Step 3 of 3

Image result for Planning an efficient upgrade from SQL Server 2005: Step 3 of 3

As the end-of-support deadline for SQL Server 2005 draws near (April 12, 2016), you are probably starting to think about your upgrade strategy. Upgrading SQL Server is a multistage effort that takes time. Planning your SQL Server upgrade early will help you save money and prevent unnecessary business interruptions.

In our previous two posts, we discussed the importance of discovering what you’re running in your IT environment and then finding ways to customize your upgrade by choosing target destinations for each of your applications and workloads — on-premises servers, virtual machines or the cloud.

Now, we’ll walk you through some common upgrade strategies and offer ways that you can approach the upgrade process. By planning thoughtfully, your upgrade will be smoother, less complicated and more cost-effective.

Common upgrade strategies

Consider the following three approaches for your SQL Server upgrade:

  • In-place. An in-place upgrade replaces an existing instance of SQL Server 2005 by installing SQL Server 2014 over it and using the same hardware and platform. This strategy is great for when you aren’t worried about a little downtime and would prefer not to have to re-create the database configuration. While this might be the most straightforward way to upgrade, it is the least common, because most organizations prefer to take the opportunity to consolidate servers, perform hardware refreshes, or target some servers for virtualization rather than remaining physical.
  • Side-by-side. A side-by-side upgrade involves installing SQL Server 2014 as a secondary instance on the same hardware and platform as SQL Server 2005. In this scenario, you can keep your old system running right up until you switch to the new version of the database. This minimizes downtime and allows for parallel testing. While this option might be used in dev-test scenarios, it is uncommon in production server upgrades.
  • New instance installation. The most common and recommended upgrade strategy for SQL Server 2005 is to install SQL Server 2014 as a new instance using different hardware and new OS platform. Many organizations can benefit from acquiring new hardware or virtualizing their infrastructure as part of a SQL Server upgrade. This strategy, like side-by-side upgrade, allows for parallel side-by-side testing, and also renders your organization especially immune to any kind of downtime during the upgrade process. In addition, installing a new instance allows organizations to upgrade from 32-bit to 64-bit platforms and provides the most flexibility for taking advantage of the new features in SQL Server 2014.

The upgrade process

Regardless of which strategy you choose, it’s a good idea to tackle any database upgrade methodically so you can respond along the way as aspects of the project unfold — especially if your database systems are large and complex. Plan thoughtfully to avoid unnecessary time and resource costs.

You can choose any process framework for running your upgrade — Microsoft Operations Framework (MOF), Prince2, ITIL, SixSigma, etc. What’s important is that you identify one that works for your individual environment and stick with it. Know that most likely you will have to revisit earlier stages in the process and potentially need to reshape your plan as the migration and upgrade progresses. You may even need to revise your initial scope if you discover additional downstream systems.

 

Larger upgrade projects can take six to 12 months to execute, so the time to begin planning is now. Mitigate any concerns about business interruptions and achieve a faster, highly available system at the end of the upgrade process.

 

[Source: Blogs Technet]

Has BlackBerry eliminated Its BBM App From The home windows keep?

BlackBerry Logo

looks as if we’ve got another exit. It seems that Blackberry has unexpectedly removed its BBM app for home windows telephone from the home windows shop. No reason has been provided for this, if you’re wondering.

This, of path, follow Brexit, the selection that Britain made the day gone by to exit the ecu Union.

however this one is far much less severe from what the electorate in the uk decided.

Blackberry users, or even the majority, took to the employer’s cozy messaging platform, BBM, which presently is one of the maximum famous messaging gear round. So famous, in truth, that Blackberry ended up producing customers for different cell running structures.

even if they struggled to stay relevant in the market themselves.

home windows telephone, with all its trials and tribulations, obtained a BBM messaging app, which until currently changed into to be had within the windows save for users to download and set up on their handsets.

however, the app is now longer available in the store.

The employer has not supplied any info on why it determined to cast off the application.

then again, as matters stand, this unexpected disappearance is both a mistake or an intentional removal that would imply a pair of things. That Blackberry might be getting rid of guide for windows smartphone, or that it is readying an updated UWP model of the utility.

Of path, this is all natural speculation at this factor.