Monday, April 29, 2019

IT links (22. - 28.4.2019)


Sunday, April 28, 2019

AI, ML, Robots and Brains (15.4. - 21.4.2019)

Society


Algorithms


Robots


Health


Cars


Hardware


Brains

Tuesday, April 23, 2019

IT links (15. - 21.4.2019)


Friday, April 19, 2019

AI, ML, Robots and Brains (8.4. - 14.4.2019)

Society

The rise of the killer robots – and the two women fighting back
AI must be accountable, EU says as it sets ethical guidelines
Facebook’s AI is helping to deliver health care and electricity to unmapped regions
How artificial intelligence can help in the fight against human trafficking
What you may not understand about China’s AI scene
A leading AI conference is trying to fix the field’s reproducibility crisis
7 surprising things that could change the job market by 2030
Democrats want feds to target the 'black box' of AI bias
This newsletter was not written by a robot*
Google takes on 'Africa's challenges' with first AI centre in Ghana

Algorithms

Two rival AI approaches combine to let machines learn about the world like a child
Using artificial intelligence to understand collective behavior
New technique cuts AI training time by more than 60 percent
New algorithm helps to detect and analyze suspicious activity in surveillance footage
How machine learning can help regulators
First machine-generated book published
Scientists improve cycling performance of Al-based batteries with high areal density cathode
'Deep learning' casts wide net for novel 2-D materials
Machine learning algorithm predicts who will be left standing in 'Game of Thrones'
AI agent offers rationales using everyday language to explain its actions
Artificial intelligence singles out neurons faster than a human can

Robots

Can robots build a Moon base for astronauts? Japan hopes to find out.
Robots created with 3D printers could be caring for those in golden years
Team develops robotic machine vision solution for shiny objects
Meet Blue, the low-cost, human-friendly robot designed for AI
Walmart robot janitors will mop floors, scan shelves, sort items and more
Alphabet’s drone division has launched its first public delivery service
Robots to the rescue of the Great Barrier Reef
This robot can sort recycling by giving it a squeeze
A robot has figured out how to use tools

Health

AI identifies risk of cholesterol-raising genetic disease, Stanford-led study finds
An AI Firm Wants to Predict Costly Pharma Flops

Cars

This compact and cheap lidar could steer small autonomous vehicles
Ford is realizing that the self-driving car market is not as simple as it thought
Italy's Motown Opens Its Roads to Autonomous-Vehicle Testing
A user's guide to self-driving cars
Tesla’s inclusion of Autopilot on every car unravels a long-term Full Self-Driving strategy
Self-Driving Light Trucks Will Be Allowed on California Roads

Hardware

Qualcomm Announces New AI Chip for Cloud Data Center Servers

Brains

I feel you: Emotional mirror neurons found in the rat
'Mindreading' neurons simulate decisions of social partners
Team Linked to Elon Musk Edges Closer to Brain Computers

Thursday, April 18, 2019

IT links (8. - 14.4.2019)


Monday, April 15, 2019

Removing duplicate links in Feedly with own Chrome extension

As an info junkie, I am interested in a broad range of topics, able to go through hundreds of links each day. Feedly is allowing me to do it via my cell phone and computer easily.

But when you are following a bigger number of RSS channels, you start to notice duplicate links, pointing to the same articles:


And this can be sometimes pretty annoying.

So, I decided, as a software developer, to get rid of such duplications. I decided to implement a Chrome extension for that because it looks like the most straightforward approach. I also wanted to try it, because I never implemented such an extension before. So, this article can serve as a short tutorial on how to make it.


Basic extension structure



The main file here is manifest.json. It contains metadata related to an extension, like name, description, the extension icon (representing the extension in Chrome's extensions panel), or permissions it needs.



Content and background scripts


There is a possibility to display HTML popup in case a user clicks on the extension icon, but we are not going to need it here. We just need to trigger action that detects duplicate links and removes them.

For this purpose, two separate types of scripts are needed. The first one - background script in Chrome extension development terms - handles the icon click event. Background scripts (defined in background.scripts property of manifest.json file) have access to Chrome API (and thus access to the click event), but cannot access the content of a page.

The second type of scripts - content scripts - have access to page content. These are defined in content_scripts property of the manifest. They are injected into the code of every visited page (if you do not specify any restrictions) and interact with the content.

We want to have a script injected to the Feedly page only in our case. This restriction is defined in content_scripts property - in matches array.

These two types of scripts are separating extension logic from access to page content. But to make it work together another piece of functionality is needed - message passing.

We can see how this works on the example of two scripts from Feedly Unique extension. The first one represents background script - handles Feedly Unique icon click event - sends clicked_feedly_unique message:

The message is then handled by event listener on the content script side:


This script also contains the algorithm for duplicates removal.


Loading the extension into your browser


And now, how to use it in your Chrome browser?

The first thing you need to do is to turn on developer mode in your Chrome - just enter Extensions page (chrome://extensions/) and toggle Developer mode switch in the upper-right corner.

Then click the Load unpacked button (upper-left corner) and select your extension code folder on your local machine.

The plugin is then displayed on Extensions page together with other installed plugins:


For each change, you do to your extension code a reload button highlighted above must be clicked.

Background page link enables you to access the Chrome developer tools window of background scripts. So, you can spot errors or see debug logs of the scripts there. This information is not visible in the developer tools window of a page where a plugin functionality should be applied.

Content scripts stuff only should be visible in the developer tools window of a particular page.

You should see and access the plugin in Google Chrome's extensions panel after load into Chrome:



Feedly Unique and future improvements


The Code of extension that I developed is available on GitHub here.

There are some additional features that could be included in the extension, like automatic scrolling down to load all available links, triggering title-only view and sorting from the oldest to newest (both needed for the proper working of the extension).

Now you need to do all these changes manually before you run the extension.

Saturday, April 13, 2019

AI, ML, Robots and Brains (1.4. - 7.4.2019)

Society


Algorithms


Health


Hardware


Robots


Cars


Brains

Wednesday, April 10, 2019

IT links (1.4. - 7.4.2019)


Thursday, April 4, 2019

AI, ML, Robots and Brains (25.3. - 31.3.2019)

Society


Algorithms


Health


Hardware


Robots


Cars


Brains

Tuesday, April 2, 2019

IT links (25.3. - 31.3.2019)

Oracle revealed in a presentation on 21st March that future Java development will focus on improving language and runtime support for big data, machine learning, and cloud-native workloads.

Couple of days ago (19th March) JDK 12 was released.
This release contains (in preview mode) for example really nice simplification of switch statements - switch expressions.

This reminds me one simple lightweight web framework that I discovered recently, Javalin. Look at simple Hello World example:

Javalin app = Javalin.create()
  .port(7000)
  .start();
app.get("/hello", ctx -> ctx.html("Hello, Javalin!"));

The server starts at port 7000 and call to "/hello" returns the message.

But I am missing raw String literals from recent Java release, hopefully they will be included in JDK 13.

Anyway, there is a nice approach how to deal with long Strings, simply with String.join call:

String.join(System.getProperty("line.separator"),
       "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.",
       "Nullam at arcu a est sollicitudin euismod.",
       "Class aptent taciti sociosqu ad litora torquent per conubia nostra.");

And more interesting things are to come - one really interesting improvement, that could be included in JDK 13 release, are better default messages for the most common Java exception, NullPointerException.

Spring Framework celebrated the 15th anniversary of its first release on 25th March

27th March - IntelliJ IDEA 2019.1 was released. Adds functionality like Themes customization (I am so far happy with my Darcula theme), and support for already mentioned switch expressions.
Another for me interesting functionality is for example improved Maven Diagrams for dependencies check and ability to cherry-pick only some of the files right from the VCS log.