Amazon Provides DIY Echo Plans for Raspberry Pi

About the Project

This project demonstrates how to access and test the Alexa Voice Service using a Java client (running on a Raspberry Pi), and a Node.js server. You will be using the Node.js server to get a Login with Amazon authorization code by visiting a website using your computer’s (Raspberry Pi in this case) web browser.

This guide provides step-by-step instructions for obtaining the sample code, the dependencies, and the hardware you need to get the reference implementation running on your Pi.

Getting Started

Hardware you need

  1. Raspberry Pi 2 (Model B)Buy at Amazon
  2. Micro-USB power cable for Raspberry Pi (included with Raspberry Pi)
  3. Micro SD Card – To get started with Raspberry Pi you need an operating system. NOOBS (New Out Of the Box Software) is an easy-to-use operating system install manager for the Raspberry Pi. The simplest way to get NOOBS is to buy an SD card with NOOBS preinstalled – Raspberry Pi 8GB Preloaded (NOOBS) Micro SD Card
  4. An Ethernet cable
  5. USB 2.0 Mini Microphone – Raspberry Pi does not have a built-in microphone; to interact with Alexa you’ll need an external one to plug in – Buy at Amazon
  6. A USB Keyboard & Mouse, and an external HDMI Monitor – we also recommend having a USB keyboard and mouse as well as an HDMI monitor handy if for some reason you can’t “SSH” into your Raspberry Pi. More on “SSH” later.
  7. WiFi Wireless Adapter (Optional) Buy at Amazon

Skills you need

  1. Basic programming experience
  2. Familiarity with shell

0 – Setting up the Raspberry Pi

  1. Insert the micro SD card with NOOBS preinstalled into the micro SD card slot on your Raspberry Pi.
  2. Plug in the USB 2.0 Mini Microphone, and the (optional) WiFi Wireless Adapter.
  3. Plug in your USB keyboard and mouse.
  4. Connect your monitor using the HDMI port.

1 – Booting up the Raspberry Pi

  1. Now plug in the USB power cable to your Pi.
  2. Your Raspberry Pi will boot, and a window will appear with a list of different operating systems that you can install.
  3. Tick the box next to Raspbian and click on Install.

  4. Raspbian will then run through its installation process. Note: this can take a while.

  5. When the installation process has completed, the Raspberry Pi configuration menu (raspi-config) will load. Here you can set the time and date for your region and enable a Raspberry Pi camera board, or even create users. You can exit this menu by using Tab on your keyboard to move to Finish.
  6. Once rebooted, login to your Raspberry Pi. The default login for Raspbian is username pi with the password raspberry

NOTE: To load the graphical user interface at any time type startx into the command line.

More info:

2 – Installing utilities & dependencies

NOTE: You will be using the Terminal utility on the Raspberry Pi to install the utilities you need for this Alexa Voice Service walkthrough. Terminal comes preinstalled on the Raspberry Pi, and you can get to it from the Desktop. You can learn more about Terminal here.

2.1 – Enable SSH on Raspberry Pi

SSH allows you to remotely gain access to the command line of a Raspberry Pi from another computer (as long as they are both on the same network). This removes the requirement to have an external monitor connected to your Raspberry Pi.

SSH is enabled by default on Raspberry Pi. If you run into problems getting SSH to work, make sure it’s enabled. This is done using the raspi-config utility.

Type the following in the Terminal:

sudo raspi-config

Then navigate to SSH, hit Enter and select Enable SSH server.

2.2 – SSH into the Raspberry Pi

Now let’s SSH into your Raspberry Pi. To do that, you need to know the IP address of your Raspberry Pi.

Type this command into the terminal:

hostname -I
> //this is an example Raspberry Pi’s hostname, it would be different for you

If you’re on a Windows PC, follow the instructions here to SSH Using windows

Now that you know the IP address of your Raspberry Pi, you are ready to connect to it remotely using SSH. To do this, open the terminal utility on the computer you would like to connect from and type the following:


It will prompt you for your password. NOTE: the default password for the user pi is raspberry

Voila! You’re now remotely connected to your Raspberry Pi. Now you’ll install all the utilities while connected remotely via SSH.

2.3 Install VNC Server

VNC is a graphical desktop sharing system that will allow you to remotely control the desktop interface of your Raspberry Pi from another computer. This will come in very handy as you get rid of the external monitor connected to your Raspberry Pi.

sudo apt-get install tightvncserver

Start VNC Server

To start the VNC Server, type:

Run VNCServer at Startup

You want to make sure the VNC Server runs automatically after the Raspberry Pi reboots, so you don’t have to manually start it each time with the command tightvncserver through SSH. To do that, type the following in the terminal:

cd /home/pi
cd .config

Note the ‘.’ at the start of the folder name. This makes it a hidden folder that will not show up when you type ‘ls’.

mkdir autostart
cd autostart

Create a new configuration by typing the following command:

nano tightvnc.desktop

Edit the contents of the file with the following text:

[Desktop Entry]
Exec=vncserver :1

Type ctrl-X and then Y to save the changes to the file.

That’s it. The next time you reboot the VNC server will restart automatically.

Connecting to Raspberry Pi via VNC

You may now disconnect the Monitor, keyboard and mouse (if you like). Now with SSH (allows remote access to the terminal) and VNC (allows you to remote control the Raspberry Pi’s desktop interface) installed, the external monitor is optional. Feel free to disconnect it from the Raspberry Pi.

2.4 – Install VLC

Get VLC media player by typing:

sudo apt-get install vlc-nox vlc-data

NOTE: If you are running on Raspberry Pi and already have VLC installed, you will need to remove two conflicting libraries by running the following commands:

sudo apt-get remove --purge vlc-plugin-notify
sudo rm /usr/lib/vlc/plugins/codec/

Unable to fetch errors
If you run into some “Unable to fetch” errors while trying to install VLC, try the following:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install vlc-nox vlc-data


Make sure VLC is installed correctly

whereis vlc

This will tell you where VLC is installed.

Most programs are stored in /usr/bin. On my Raspberry Pi, I see:

vlc: /usr/bin/vlc /usr/lib/vlc /usr/share/vlc /usr/share/man/man1/vlc.1.gz

Set the environment variables for VLC

Type the following into the terminal:

export LD_LIBRARY_PATH=/usr/lib/vlc
export VLC_PLUGIN_PATH=/usr/lib/vlc/plugins

Check if the environment variables were set successfully

> /usr/lib/vlc

> /usr/lib/vlc/plugins

2.5 Download and install Node.js

Verify Node isn’t already installed. It should print ‘command not found’.

node —version
> command not found

Now type:

sudo apt-get update 
sudo apt-get upgrade

Set up the apt-get repo source:

curl -sL | sudo bash -

Install Node itself:

sudo apt-get install nodejs 

2.6 Install Java Development Kit

You need to have Java Development Kit (JDK) version 8 or higher installed on the Raspberry Pi.

Step 1: Download JDK
Assuming this is a fresh Raspberry Pi and you do not already have JDK installed, you’ll need to download JDK 8 from Oracle.

  • Raspberry Pi 1 and 2 models – The binary you are looking for is “Linux ARM 32 Hard Float ABI”. Download the tar.gz file jdk-8u73-linux-arm32-vfp-hflt.tar.gz from the Oracle link above.
  • Raspberry Pi 3 model – The binary you are looking for is “Linux ARM 64 Soft Float ABI”. Download the tar.gz file jdk-8u77-linux-arm64-vfp-hflt.tar.gz from the Oracle link above.

Step 2: Extract the contents
Extract the contents of the tarball to the /opt directory:

sudo tar zxvf jdk-8u73-linux-arm32-vfp-hflt.tar.gz -C /opt

Set default java and javac to the new installed jdk8.

sudo update-alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_73/bin/javac 1

sudo update-alternatives --install /usr/bin/java java /opt/jdk1.8.0_73/bin/java 1

sudo update-alternatives --config javac
sudo update-alternatives --config java

NOTE: If asked to choose an alternative, type the number corresponding to the jdk version you just installed – for example – jdk1.8.0_73

Now verify the commands with the -version option:

java -version
javac -version

2.7 Install Maven

Step 1: Download Maven

Download the Binary tar.gz file apache-maven-3.3.9-bin.tar.gz from

Step 2: Extract the contents
Extract the contents of the tarball to the /opt directory

sudo tar zxvf apache-maven-3.3.9-bin.tar.gz -C /opt

Step 3: Tell your shell where to find maven
You’ll do this in the system profile settings so it is available to all users.

Create a new file /etc/profile.d/, and type the following inside it:

export M2_HOME=/opt/apache-maven-3.3.9
export PATH=$PATH:$M2_HOME/bin

Save the file. Log out and back into the Raspberry Pi so the profile script takes effect. You can test that it is working with the following command:

mvn -version

3 – Getting started with Alexa Voice Service

3.1 Register for a free Amazon Developer Account

Get a free Amazon developer account if you do not already have one.

3.2 Download the sample app code and dependencies on the Raspberry Pi

Download the sample apps zip file. By downloading this package, you agree to the Alexa Voice Service Agreement.

3.3 Copy and expand the .zip file on your Raspberry Pi

  1. Unless you downloaded the zip file on your Raspberry Pi directly, copy and then expand the zip file on your Raspberry Pi.
  2. Make note of its location on your Raspberry Pi. Further instructions will refer to this location as

3.4 Register your product and create a security profile.

  1. Login to Amazon Developer Portal –
  2. Click on Apps & Services tab -> Alexa -> Alexa Voice Service -> Get Started
  3. In the Register a Product Type menu, select Device.
  4. Fill in and save the following values:

Device Type Info

  1. Device Type ID: my_device
  2. Display Name: My Device
  3. Click Next

Security Profile

  1. Click on the Security Profile dropdown and choose “Create a new profile

  2. General Tab

    • Security Profile Name: Alexa Voice Service Sample App Security Profile
    • Security Profile Description: Alexa Voice Service Sample App Security Profile Description
    • Click Next

Client ID and Client Secret will be generated for you.

  1. Now click on the Web Settings Tab

    • Make sure the security profile you just created is selected in the drop-down menu, then click the “Edit” button.

    • Allowed Origins: Click “Add Another” and then enter https://localhost:3000 in the text field that appears.
    • Allowed Return URLs: Click “Add Another” and then enter https://localhost:3000/authresponse in the text field that appears.
    • Click Next

Device Details

  1. Image: Save the following test image to your computer, then upload it:
  2. Category: Other
  3. Description: Alexa Voice Service sample app test
  4. What is your expected timeline for commercialization?: Longer than 4 months / TBD
  5. How many devices are you planning to commercialize?: 0
  6. Click Next

Amazon Music

  1. Enable Amazon Music?: No (You may optionally select Yes and fill in the required fields if you want to experiment with Amazon Music. However, Amazon Music is not required for basic use of the Alexa Voice Service.)
  2. Click the Submit button

You are now ready to generate self-signed certificates.

4 – Generate self-signed certificates.

Step 1: Install SSL

sudo apt-get install openssl

Verify install

whereis openssl
> openssl: /usr/bin/openssl /usr/share/man/man1/openssl.lssl.gz

Change directories to /samples/javaclient.

cd /samples/javaclient - //your sample apps location

Step 2: Edit the text file ssl.cnf, which is an SSL configuration file. Fill in appropriate values in place of the placeholder text that starts with YOUR_.

Note that countryName must be two characters. If it is not two characters, certificate creation will fail.

Step 3: Make the certificate generation script executable by typing:

chmod +x

Step 4: Run the certificate generation script:


Step 5: You will be prompted for some information:

  1. When prompted for a product ID, enter my_device
  2. When prompted for a serial number, enter 123456
  3. When prompted for a password, enter any password and remember what you entered
    1. Password: talktome (you can even leave it blank)

Step 6: Edit the configuration file for the Node.js server

The configuration file is located at:


Make the following changes:

  • Set sslKey to /samples/javaclient/certs/server/node.key
  • Set sslCert to /samples/javaclient/certs/server/node.crt
  • Set sslCaCert to /samples/javaclient/certs/ca/ca.crt

IMP: Do not use ~ to denote the home directory. Use the absolute path instead. So, instead of ~/documents/samples, use /home/pi/documents/samples.

Step 7: Edit the configuration file for the Java client

The configuration file is located at:


Make the following changes:

  • Set companionApp.sslKeyStore to /samples/javaclient/certs/server/jetty.pkcs12
  • Set companionApp.sslKeyStorePassphrase to the passphrase entered in the certificate generation script in step 5 above.
  • Set companionService.sslClientKeyStore to /samples/javaclient/certs/client/client.pkcs12
  • Set companionService.sslClientKeyStorePassphrase to the passphrase entered in the certificate generation script in step 5 above.
  • Set companionService.sslCaCert to /samples/javaclient/certs/ca/ca.crt

5 – Install the dependencies

Change directories to /samples/companionService

cd /samples/companionService

Install the dependencies by typing:

npm install

6 – Enable Security Profile

  1. Open a web browser, and visit

  2. Near the top of the page, select the security profile you created earlier from the drop down menu and click Confirm.

  3. Enter a privacy policy URL beginning with http:// or https://. For this example, you can enter a fake URL such as
  4. [Optional] You may upload an image as well. The image will be shown on the Login with Amazon consent page to give your users context.
  5. Click Save.

  6. Next to the Alexa Voice Service Sample App Security Profile, click Show Client ID and Client Secret. This will display your client ID and client secret. Save these values. You’ll need these.

7 – Updating the config files

Login to the Raspberry Pi via VNC

Step 1: Update config.js
Navigate to the following file and open it in a text editor.


Edit the following values in this file –

  • clientId: Paste in the client ID that you noted in the previous step as a string.
  • clientSecret: Paste in the client secret that you noted in the previous step as a string.
  • products: The product’s object consists of a key that should be the same as the product type ID that you set up in the developer portal and a value that is an array of unique product identifiers. If you followed the instructions above, the product type ID should be my_device. The unique product identifier can be any alphanumeric string, such as 123456. Example products JSON is: products: {"my_device": ["123456"]}

Save the file.

Step 2: Update config.json
Navigate to the following file, and open it in a text editor.


Edit the following values in this file:

  • productId: Enter my_device as a string.
  • dsn: Enter the alphanumeric string that you used for the unique product identifier in the products object in the server’s config.js. For example: 123456.
  • provisioningMethod: Enter companionService.

Save the file.

Step 3: Preparing the pom.xml file

Navigate to the following file and open it in a text editor.


Add the following to the pom.xml in the section:

8 – Run the server

Login to the Raspberry Pi via VNC

In your terminal window or from the command prompt, type:

cd /samples/companionService
npm start

The server is now running on port 3000 and you are ready to start the client.

9 – Start the client

Open a new terminal window/tab (SHIFT+CTRL+TAB in Raspbian)

cd /samples/javaclient

Upgrade your Java version

Make the script executable by typing:

chmod +x

Run the installation script:


You will get a message from Oracle Java installer that you must accept the Terms of Service for Java SE Platform, press Enter.

Press Tab, and then Enter to say “Yes” to the Terms of Service.

Build the app

Before you build the app, let’s validate to make sure the project is correct and that all necessary information is available. You do that by running:

mvn validate

Download dependencies and build the app by typing:

mvn install 

When the installation is completed, you will see a “Build Success” message in the terminal.

Run the client app:

You are now ready to run the client app by typing:

mvn exec:exec

10 – Obtain Authorization from Login with Amazon

  1. When you run the client, a window should pop up with a message that says something similar to:

    Please register your device by visiting the following website on any system and following the instructions: https://localhost:3000/provision/d340f629bd685deeff28a917 Hit OK once completed.

    Copy the URL from the popup window and paste it into a web browser. In this example, the URL to copy and paste is https://localhost:3000/provision/d340f629bd685deeff28a917.

    NOTE: Due to the use of a self-signed certificate, you will see a warning about an insecure website. This is expected. It is safe to ignore the warnings during testing.

  2. You will be taken to a Login with Amazon web page. Enter your Amazon credentials.

  3. You will be taken to a Dev Authorization page, confirming that you’d like your device to access the Security Profile created earlier.

    Click Okay.

  4. You will now be redirected to a URL beginning with https://localhost:3000/authresponse followed by a query string. The body of the web page will say device tokens ready.

  5. Return to the Java application and click the OK button. The client is now ready to accept Alexa requests.

  6. Click the Start Listening button and wait for the audio cue before beginning to speak. It may take a second or two for the connection to be made before you hear the audio cue.

Press the Stop Listening button when you are done speaking.

Let’s talk to Alexa

Ask for Weather:
Click the Start Listening button.
You: What’s the weather in Seattle?
Click the Stop Listening button.
Alexa: Current weather report for Seattle

Some other fun questions you can ask Alexa

Once you hear the audio cue after clicking “Start Listening” button, here are a few things you can try saying –

  • Request Music Playback: Play Bruce Springsteen
  • General Knowledge: What’s the mass of the sun in grams?
  • Geek: What are the three laws of robotics?
  • Fun: Can you rap?
  • Set a Timer: Set the timer for 2 minutes.
  • Set Alarm: Set the alarm for 7:30 a.m.

More on Music Playback
The “previous”, “play/pause”, and “next” buttons at the bottom of the Java client UI are to demonstrate the music button events. Music button events allow you to initiate changes in the playback stream without having to speak to Alexa. For example, you can press the “play/pause” button to pause and restart a track of music.

To demonstrate the “play/pause” button, you can speak the following command: Play DC101 on iHeartRadio, then press the “play/pause” button. The music will pause in response to the button click. Press the “play/pause” button again to restart the music.

11 – FAQs

I got the Raspberry Pi working with AVS, but I can’t hear the audio response from Alexa

Check to see if you are seeing the response coming through on the Terminal and if you see the response cards on your Alexa app. If yes, you probably need to force audio through local 3.5mm jack, instead of the HDMI output (this can happen even if you don’t have an HDMI monitor plugged in).

To force audio through local 3.5 mm jack, pen Terminal, and type

sudo raspi-config 

See Raspberry Pi Audio Configuration

How do I find the IP address of my Raspberry Pi?

hostname -I

Unable to fetch errors –

If you run into some “Unable to fetch” errors while trying to install VLC, try the following –

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install vlc-nox vlc-data

Original URL:

Original article

ODROID-C2 Compared to Raspberry Pi 3 and Orange Pi Plus

tl;dr: The ODROID-C2 is a very solid competitor to the Raspberry Pi model 3 B, and is anywhere from 2-10x faster than the Pi 3, depending on the operation. The software and community support is nowhere near what you get with the Raspberry Pi, but it’s the best I’ve seen of all the Raspberry Pi clones I’ve tried.

The original Raspberry Pi was the first mass-market ‘single board’ computer that kicked off a small computing revolution in terms of hardware interaction via GPIO, experimental monitoring, automation, and robotics projects, etc. Through the past few years, it has evolved from being a very slow and limited computing platform to being as fast as some lower-specced smartphones, and can now run a desktop Linux environment bearably well. The Raspberry Pi 2 and Pi 3 (just announced on Feb 29—see my review of the Pi 3 here) were the first models with quad core processors, and they’re both decent generic Linux computers, especially for the low $35 price tag!

Once the Pi became a popular product, similar single board computers were introduced with different features and functionality, in a similar price range. I recently reviewed one of the main competitors, the Orange Pi Plus, which for $39 offers faster networking, onboard fast eMMC storage, and a bevy of other features—but which also requires a lot more effort to get up and running, and has nowhere near the community and documentation surrounding the Raspberry Pi.

ODROID-C2 - Front

ODROID-C2 - Back

Another primary competitor in the space is the ODROID, from Hardkernel. The original ODROID-C1 was already a decent platform, with a few more features and more RAM than the comparable Pi at the time. The ODROID-C2 was just announced in February, and for $39 (only $5 over the Pi 3 price tag) offers a few great features over the Pi 3 like:

  • 2GHz quad core Cortex A53 processor (Pi 3 is clocked at 1.2 GHz)
  • Mali-450 GPU (Pi 3 has a VideoCore IV 3D GPU)
  • 2 GB RAM (Pi 3 has 1 GB)
  • Gigabit Ethernet (Pi 3 has 10/100)
  • 4K video support (Pi 3 supports HD… drivers/support are usually better for Pi though)
  • eMMC slot (Pi 3 doesn’t offer this option)
  • UHS-1 clocked microSD card slot (Pi 3 requires overclock to get this speed)
  • Official images for Ubuntu 16.04 MATE and Android (Pi 3 uses Raspbian, a Debian fork)

The Pi 3 added built-in Bluetooth and WiFi, which, depending on your use case, might make the price of the Pi 3 even more appealing solely based on a feature comparison.

But features and specs are really just the tip of the iceberg. As I found when reviewing the Orange Pi, there are many factors you have to consider when evaluating what single board computer makes the most sense for your projects or usage; especially if you’re not a hardcore Linux kernel hacker, you might want to consider factors like the user community, forums, and software support you get from the companies/foundations behind the boards.

Acquiring an ODROID-C2

Unlike the Pi 3 (and pretty much every Pi since the B+), there’s no huge run on ODROID-C2s, so I went to the official USA distributor’s site (AmeriDroid) and bought an ODROID-C2 for $41.95 plus $7 shipping (I also added in an official clear case and the recommended power adapter, for convenience—though you can power the ODROID-C2 through the USB OTG port just like the Pi). Note that there was a recent post in the ODROID forums stating that the first batch of ODROID-C2s had already been sold out as of March 16, but many distributors still have them in stock.

Getting a Pi 3 can be an exercise in frustration; almost a month in, it’s only in stock in some stores, and people are still price gouging by selling at higher prices with cheaply-assembled Pi starter kits and on eBay. I was lucky to find them in stock at my local Micro Center for list price; the situation should improve over time… but considering the Pi Zero is still perpetually out of stock everywhere, the Pi Foundation definitely needs to beef up its manufacturing and distribution partnerships to meet demand!


ODROID-C2 and Raspberry Pi 3 comparison - face
A view of the ODROID-C2 and Pi 3 from the top.

ODROID-C2 and Raspberry Pi 3 comparison - ports
A view of the ODROID-C2 and Pi 3 from the side.

One of the first major differences between the Pi 2/3 and the C2 is the massive heat sink that’s included with the ODROID-C2. Based on my observations with CPU temperatures on the Pi 3, the heat sink is a necessity to keep the processor cool at its fairly high 2 GHz clock. The board itself feels solid, and it feels like it was designed, assembled, and soldered slightly better than the larger Orange Pi Plus, on par with the Pi 3.

One extremely thoughtful feature is the ODROID-C2 board layout mimics the Pi B+/2/3 almost exactly; the largest components (e.g. LAN, USB, HDMI, OTG, GPIO, and even the screw holes for mounting!) are identically placed—meaning I can swap in an ODROID-C2 in most situations where I already have the proper mounts/cases for a Pi.

Setup and first boot

The process for setting up an ODROID-C2 is pretty much the same as the Raspberry Pi; you download the official OS image from the appropriate wiki page (in this case, I downloaded Ubuntu 16.04 1.1), expand the image file (since it’s a large .xz file, I used The Unarchiver for Mac to expand it), then flash it to a microSD card.

On my Mac, I inserted a Samsung EVO 16GB card, ran diskutil unmountDisk /dev/disk2, then ran sudo dd if=image-expanded.img of=/dev/rdisk2 bs=1m to copy the image to the microSD card. The official Ubuntu image is over 5 GB, so it takes a little time. (For the Pi, there’s an official CLI-only ‘Raspbian Lite’, which clocks in around 1 GB, so it’s little faster to copy.)

ODROID-C2 - microSD card slot under the GPIO pins on back
The microSD card slot is in a peculiar location, just clearing the GPIO pins on the underside.

Insert the microSD card into the slot on the underside of the ODROID-C2 (it’s in a bit of a strange location, with the card sticking out over the soldered GPIO pin connections), then plug in your keyboard, mouse, and HDMI monitor, and then plug in power to boot it up.

It boots to a pleasing Ubuntu desktop login page (default admin username is odroid with the password odroid), and after first boot, everything is configured and ready to go. One nice thing about the setup experience is you don’t have to manually run sudo raspi-config and expand the filesystem manually (or do the same via a GUI config panel)—on first boot, the OS expands the filesystem to cover your whole microSD card automatically.

The official Ubuntu MATE environment is nice, but for better efficiency, I used the ODROBIAN Debian Jessie ARM64 image for ODROID-C2 instead. The download is only 89 MB compressed, and the expanded image is ~500 MB, making for an almost-instantaneous dd operation. There are some other images available via the community as well, but ODROIBIAN seems to be the most reliable—plus it already has excellent documentation!

Using the C2

Since it defaults to Ubuntu MATE, the desktop environment is pleasant (more so than Raspbian’s default GUI), and it even comes with both Chromium and FireFox installed, so you can choose from one of the two most popular and well-supported browsers. However, after I ran sudo apt-get update && sudo apt-get upgrade (which took quite a while the first time) to make sure all packages were up to date), neither Chromium nor FireFox would launch; they would launch and then quit after a few seconds. So I re-imaged the card (which took a couple hours) and tried again.

Chromium took about 4 minutes to launch the first time (it seemed like nothing was happening, but one CPU core was spiked at 100% the whole time), and FireFox took about 8 seconds the first time. After that, both took 4-5 seconds to launch, and nothing seemed slow or inconsistent when using them.

Most apps that come preinstalled with MATE worked flawlessly, though every once in a while FireFox or Chromium would crash and need to be restarted (Chromium much more so than FireFox—see this forum topic). Hopefully this is just a growing pain with a relatively new ODROID revision and a new OS distribution, but it’s a little disconcerting, especially after hearing grief on some forums about Hardkernel being stuck on the Linux 3.x kernel for a while.

It’s hard to match the level of software/OS support the Raspberry Pi foundation and community provides, but of all the single board computers, the ODROID-C2 and the Hardkernel community seem to have the most solid footing; reading through forum posts like Ubuntu 16.04 LTS for ODROID-C2 makes me confident that the Hardkernel devs and community are working to smooth out the rough patches, and in just the past month, the progress has been excellent!

Benchmarking the C2 vs Pi 3 vs Orange Pi Plus

For the Pi Dramble, I have a few pain points with the current generation of Raspberry Pis; I could always use more raw CPU speed (that’s the main bottleneck for authenticated web requests), but one of the even more important considerations is network bandwidth—the Pi 3’s limited bus only allows up to ~95 Mbps over wired lan, or up to ~321 Mbps if using a USB 3.0 adapter. The ODROID-C2’s faster CPU clock, default UHS-1-clocked microSD reader, and built-in Gigabit Ethernet port paint a great portrait on paper—but the proof is in the pudding. As with all my other reviews, I’ve run the ODROID-C2 through my benchmarking gauntlet to compare it to the Pi 3 and Orange Pi Plus.

CPU Benchmarks

Others have already beaten the CPU benchmarks to death; architecturally, the quad-core Cortex A53 64-bit processor is very close to the Pi 3’s processor; however, the .8 Ghz faster clock rate and larger memory allocation does provide a marked increase in performance over the Pi 2/3 for many tests, including some real-world Drupal web application tests later in this post.


A fast and reliable network link is important if you either need lots of throughput for things like serving lots of web traffic or passing around files on a network (e.g. using the ODROID-C2 as a NAS). I have comprehensive networking benchmarks posted on the Pi Dramble site for the Pi 2 and Pi 3, but let’s see how the ODROID-C2 compares:

ODROID-C2 - Networking benchmarks vs Raspberry Pi 3 and Orange Pi Plus

The raw stats:

  • 100 MB file download (via 100 Mbps Internet, onboard Gigabit Ethernet): 10.7 MB/s (10.6 MB/s on Pi 3)
  • 100 MB LAN file copy from ODROID-C2 to Mac (onboard Gigabit Ethernet): 32.7 MB/s (13.98 MB/s on Pi 3)
  • 100 MB LAN file copy from Mac to ODROID-C2 (onboard Gigabit Ethernet): 39.5 MB/s (9.98 MB/s on Pi 3)
  • iperf raw throughput (onboard Gigabit Ethernet): 938 Mbps (321 Mbps on Pi 3)

iperf gave absolutely an absolutely rock solid 938 Mbps, which is awesome—the Orange Pi was a little shaky in its results, varying in test runs from 300-750 Mbps, but never getting near a full 1 Gbps throughput. The Raspberry Pi 3 can get 95 Mbps on the built in 10/100 Ethernet port, or up to 321 Mbps on a Gigabit USB 3.0 adapter. The ODROID-C2 delivers on the networking throughput in spades; pair it up with a nice SSD in a USB enclosure and a fast eMMC card, and this could be an excellent option for NAS or any kind of streaming!

Power consumption

For some projects (and in general, in my opinion), the amount of power that’s drawn is an important consideration. Typically, the less current draw the better, especially if you don’t have as good a quality power supply, or might need to run the board off a battery for certain applications (e.g. mobile robotics, mobile sensors, mesh networks). I have a good overview of power consumption for the various Raspberry Pis, and here are a few stats for the ODROID-C2:

ODROID-C2 - Power benchmarks vs Raspberry Pi 3

The raw stats:

  • Idle, no keyboard: 350 mA (260 mA on Pi 3)
  • ApacheBench webserver stress test: 800 mA (480 mA on Pi 3)
  • 400% CPU load: 650 mA (730 mA on Pi 3)

The most surprising thing to me is how the ab stress test (basically hitting Drupal hard for a long time, pegging the CPU cores, the memory, and the microSD card at the same time with uncached requests) used a lot more power on the ODROID-C2 vs the Pi 3. The Pi 3 must have a little better power optimization overall, while the ODROID-C2 has a little better power optimization for the CPU itself.

Storage / microSD card

Unfortunately, I am not able to test the eMMC performance at this time as I don’t have the required module, but I did run a set of benchmarks against the built-in microSD card reader (using a Samsung EVO 16 GB card), comparing the results to a Raspberry Pi 3 running Raspbian (with the microSD card reader overclocked):

ODROID-C2 - microSD card reader benchmarks vs Raspberry Pi 3

The raw stats:

  • hdparm buffered: 35.29 MB/s (40.88 MB/s on RPi)
  • dd write: 30.2 MB/s (39.1 MB/s on RPi)
  • iozone 4K random read: 9.64 MB/s (11.77 MB/s on RPi)
  • iozone 4K random write: 2.04 MB/s (2.36 MB/s on RPi)

I posted more comprehensive benchmarks for microSD cards on the Raspberry Pi, but what I think may be even more interesting is running the OS off the eMMC; it promises to be 5-10x faster than even the fastest microSD cards I’ve tested, and it’s not too expensive an addition to the ODROID-C2 (the 8GB eMMC module with Ubuntu is currently $21).

Without microSD card overclocking turned on for the Pi, the numbers for the Pi are all basically halved—be wary of any benchmarks that claim the Pi 2/3 are 2x slower than the ODROID-C2 or other boards… the only real difference in that case is the Pi defaults to a more stable slower clock for the microSD reader, but if you have good microSD cards (UHS-1 or better), there’s not much risk to overclocking the reader.

Drupal performance

For my purposes, one of the most comprehensive benchmarks is one that tests the full LEMP stack, pegging all four CPU cores, hitting disk I/O heavily, and consuming most of the onboard RAM. I used the Drupal Pi project to quickly install the LEMP stack on the ODROID-C2, with Nginx 1.6.x, PHP 7.0.x, and MySQL 5.6.x. It installs a copy of Drupal 8.0.5, which can be a pretty heavyweight application if you bypass all of Drupal’s caching. Here are the results:

ODROID-C2 - Drupal benchmarks vs Raspberry Pi 3

The raw stats:

  • Anonymous (cached) requests (Drupal 8.0.5, PHP 7): 183.93 req/s (128.03 req/s on Pi)
  • Authenticated (uncached) requests (Drupal 8.0.5, PHP 7): 16.18 req/s (12.02 req/s on Pi)
  • Cached requests (Nginx as reverse proxy): 9,860 req/s (2,220 req/s on Pi)

The ODROID-C2 is almost 40% faster than the Pi 3 across the board… meaning I’m a little bit tempted to switch a couple of the Pis in my existing Pi Dramble out with ODROID-C2s, just for the nice speed boost! Here are the full Drupal benchmarks on a Pi 2 and Pi 3 for comparison.

Note that, when measuring fully cached results—where the network bandwidth is the limiting factor—the ODROID-C2 blows the Pi out of the water, even if the Pi uses a Gigabit USB 3.0 adapter, due to the incredible speed advantage the onboard 1 Gbps Ethernet provides.

Summary and recommendations

Single board computers - Orange Pi Plus, Raspberry Pi A+, 3 model B, Zero, ODROID-C2

A few years into the small single-board ARM computer revolution, the playing field is starting to level out; the Raspberry Pi is perpetually the leader in terms of breadth of community and mindshare, while various clone manufacturers try to differentiate based on slightly differing feature sets and spec bumps. Some clones’ documentation and community are painfully inadequate, leading to a bad initial experience and frustration with any small issues.

The ODROID-C2 is a very solid competitor to the Raspberry Pi model 3 B, and is anywhere from 2-10x faster than the Pi 3, depending on the operation. It’s network performance, CPU performance, and 2 GB of RAM are extremely strong selling points if you thirst for better throughput and smoother UIs when using it for desktop computing. The Mali GPU cores are fast enough to do almost anything you can do on the Raspberry Pi, and the (smaller, but dedicated) community surrounding the ODROID-C2 is quick to help if you run into issues.

The ability to easily install Android or Ubuntu MATE (or one of the community distros, like ODROBIAN) is a benefit, and instructions are readily available (more so than other clones).

One of the best advantages of the C2? You can likely grab one within a few days, shipped via one of Hardkernel’s distributors. Good luck getting a Pi 3 at list price in the next few weeks!

The fact that I’m considering adding an ODROID-C2 to my Raspberry Pi Dramble cluster should indicate how highly I regard it as an alternative to the Raspberry Pi 3 for use as a headless server. For single-board beginners, and for general stability and ongoing support, you’ll have more success and happiness starting with a Pi 2 or Pi 3. But for those used to the ecosystem and the limitations of ARM-based Linux, the ODROID-C2 is a very nice product!

You can buy the ODROID-C2 from ameriDroid for $41.95.

Original URL:

Original article


Open-source Animation Production Software-to Develop and Create All Together

  • This is software for producing a 2D animation.

    It is based on the software “Toonz”, which was developed by Digital Video S.p.A. in Italy, customized by Studio Ghibli, and has been used for creating its works for many years. Dwango launches this OpenToonz project, in cooperation with Digital Video and Studio Ghibli.

  • This software can be used by anyone free of charge, no matter whether the purpose of use is commercial or not.
  • This is available as an open source, so that users can modify its source code freely.
  • We aim to develop a new platform for connecting the academic research into frontline animation production.

How it has been used in Studio Ghibli

Since the software “Toonz”, which is the original version of OpenToonz, was first used for some cuts of Princess Mononoke, it has been used in the ink and paint, color design and digital composition process(*) of almost all of works of Studio Ghibli. After “Arrietty/The Secret World of Arrietty”, it was customized inside the company, and evolved to become more usable according to its production style.

(*) The ink and paint, color design and digital composition: Processes from the scanning of hand-drawn pictures to the production of final footages

Open source, which can be used by anyone free of charge

The source code of OpenToonz can be modified freely, based on the license(*). It can be used by anyone free of charge, no matter whether the purpose of use is commercial or not. It can be used in all kinds of scenes, such as professional production, amateur production, and school education.

(*) For further information on the license of the software (installer), see the rules of use of OpenToonz. Its source code is available under the terms of the New BSD License.

Functions to meet on-site needs

OpenToonz is equipped with the unique functions that have been improved repeatedly based on the opinions of production staff, including the scanning tool “GTS” specializing in animation, which was developed in Studio Ghibli. For details, see “Introduction of the functions unique to OpenToonz” written below.

Effect development kit (SDK)

Dwango newly developed SDK, a plug-in effect for image processing for OpenToonz. By using SDK, anyone can add effects to OpenToonz. Video expression researchers can receive swift feedback from on-site workers, by developing and releasing their outcomes as plug-in effects.

By using the plug-in effect SDK, the effects developed by Dwango’s machine leaning research and development team are released. They include the effect of automatically changing picture styles by applying the deep learning technology and the effect of producing affected incident light like those in classic works before the digitization of the production environment.

Please download OpenToonz, GTS, or effects via PC browser.

※ GTS is available for Windows only

Please tell me the recommended PC environment.

The requirements for using OpenToonz comfortably are as follows:


  • Microsoft Windows 7 SP1/8.1/10 (64bit required)
  • Intel Core i series processor
  • 4GB or more RAM
  • 500 MB or more available storage space
  • 1280 x 1024 or higher monitor resolution


  • OS X 10.9 or a later version
  • Intel Core i series processor
  • 4 GB or more RAM
  • 500 MB or more available storage space
  • 1280 x 1024 or higher monitor resolution

The requirements for using GTS comfortably are as follows:

  • Microsoft Windows 7/8.1/10
  • Intel Core i series processor
  • 2 GB or more RAM
  • 8 MB or more available storage space
  • Scanner compatible with the TWAIN standard (including the driver software)
    ※EPSON DS-50000 is recommended.
If I find a defect or have a trouble, what should I do?
OpenToonz has a Google group, to provide a place where users can solve troubles. Join the group to request functional improvements, report bugs, and have discussions with other users.
In addition, there is a forum for developers and video researchers in GitHub. Please offer development-related topics here.
Can I interview you?

Thank you very much for having interests in OpenToonz. If you want to interview us, please contact the following.

This address is exclusively for inquiries from the media. We will not respond to inquiries from anyone other than media staff. We would appreciate your understanding.

Original URL:

Original article

Analytics 101: Choosing the right database

When you’re new to the analytics ecosystem, it’s easy to get overwhelmed by all of your options for getting up and running. This is especially true when it comes to picking the right foundational technology: the database.

Choosing properly: four rules of the road

When it comes to finding the right database for the job, there are a few good rules of thumb.

Start with the end in mind

Unpredictable queries are almost always the root cause of database performance problems. If no one queried your database, then your performance metrics would be great. To make unpredictable queries predictable you need to take as much on-the-fly computation out of the system as you can.

To do that, you’ve got to anticipate what your users are going to ask for and have it ready (or as close to ready as possible) ahead of time. If you’re consistently able to have those answers ready, then consider a database with semantics to match.

Choose the right data model

Each database is built for its own unique type of workload. Its authors have made intentional trade-offs to make their database good at some things while sacrificing flexibility or performance in other categories.

For example, Riak was built to get large chunks of data in and out very quickly. It isn’t necessary for Riak to understand the semantics of the data in order to do that, so it isn’t optimized to do so. That’s why Riak isn’t a good choice if you need to do aggregations like SUM, MIN, MAX, and so on at query time.

When you start with the end in mind and have a good notion of how your data is going to be accessed, you should be able to pick a database that best matches that pattern.

Remember that disks are fast—and memory is faster

Networks are getting faster every day. Even SAN-based disks like EBS are a significantly wider bottleneck than they used to be. That said, the key to building performant services involving disk access is to read from the disk in a predictable way.

Consider, for example, that you’re using Postgres. If your query pattern calls for aggregating a few hundred rows that are neatly organized on pages, you’ll get (mostly) consistent performance. If the number of rows that you need to aggregate is unbounded, or if you’re not predictably accessing pages, you’ll have a lot of problems.

That said, memory is much faster than disk—but it’s also really, really expensive. If your data set is small (or you’re willing to pay a premium to buy enough memory for larger data sets), then serving your data out of memory will give you significant performance improvements.

Consider both reads and writes

Data isn’t actually useful unless it’s in a database. Too often, engineers forget about the process of loading data and end up with performance bottlenecks because the database is so busy servicing writes that it can’t service reads.

The good news is that you can predict writes much better than you can reads. In most cases, you’re better off issuing writes in large, infrequent batches than trying to do many small, frequent writes. Another effective strategy is to use a queue to buffer writes as a mechanism for throttling throughput.

In extreme scenarios, it might be worthwhile to have two database clusters: one for writing to, and one for reading from. The clusters’ built-in replication can act as a buffer or throttling mechanism.

Databases to consider

Now that you know the key considerations for selecting a database, here are a few categories and vendors to get you started on your way.

General purpose databases

Examples: Postgres, MySQL, MongoDB, MSSQL

These are mostly relational databases, with the exception of MongoDB. All of these databases work well serving small- to large-sized data sets in a high-throughput environment with multiple query patterns. They also all support some type of secondary indexing, which makes it easy to add new methods for accessing your data quickly.

It’s worth noting that this type of database can be problematic for very large data sets, or for workloads distributed across multiple machines (again, with the exception of MongoDB, which natively supports clustering—but in a somewhat weird way).

Distributed table-oriented databases

Examples: Cassandra, DynamoDB, HBase, BigTable

These databases are much like their relational cousins, but forego certain features in order to make it possible to scale out across a cluster. Each has its own set of tradeoffs and features, so be sure to investigate them individually.

Key-value databases

Examples: Redis, Riak, S3, SimpleDB

These databases are best suited for when you know exactly what data you want to look up. Even though some of them support secondary indexes, you should consider them in the context of being key-value only.

The main considerations in this category will be level of scale and read consistency. Redis is highly consistent, but can’t handle very large data sets. Alternately, Riak can scale out to whatever your ops team can handle—but sometimes it’ll take a bit before you can read what you just wrote.

Massively parallel processing databases

Examples: Impala, SparkSQL, BigQuery, Redshift, Hive, Presto

Traditionally, MPP databases have been deployed when in-house analyst teams need the ability to slice-and-dice (very, very large) data sets at will. Concurrent reads to these types of databases were very limited.

However, offerings like Impala, Redshift, and Presto are starting to change this. Their features that make it possible to use these technologies in user-facing applications.

Similarly, these tools have traditionally only been made available to enterprises willing to sign long contracts with huge price tags. But new candidates like Redshift and BigQuery are upsetting this model by making technology available to anyone with a credit card.

Choosing a database is just the first step

Once you’re up and running with the right database, it’s time to see the results of your analytics. That’s where Reflect comes in, making it possible to build beautiful and engaging data visualization interfaces in minutes. Want to see it in action? Request access today.

Please enable JavaScript to view the comments powered by Disqus.

Original URL:

Original article

Jenkins 2.0 Beta

Jenkins 2.0 is currently in


. We encourage you to download it, try it out, and give us your


but for production systems please continue to use the current



Jenkins is an open source automation server with an unparalleled plugin
ecosystem to support practically every tool as part of your delivery
pipelines. Whether your goal is continuous
continuous delivery or
something else entirely, Jenkins can help automate it.

Jenkins 2.0 brings Pipeline as code, a new setup experience and other UI
improvements all while maintaining total backwards compatibility with
existing Jenkins installations.

Beta Downloads

Download the .war
Download native packages

Highlights of 2.0:


As organizations of all types seek to deliver high quality software faster,
their use of Jenkins is extending beyond just continuous integration (CI) to
continuous delivery (CD). In order to implement continuous delivery, teams
need a flexible way to model, orchestrate and visualize their entire delivery


Jenkins 2.0 supports delivery pipelines as a first-class entity. The Pipeline
plugin introduces a domain-specific language (DSL) that helps Jenkins users to
model their software delivery pipelines as code, which can be checked in and
version-controlled along with the rest of their project’s source code.

The expressive domain-specific language makes it easier and faster to create
a simple “build, test and deploy” pipeline or build advanced pipelines. The
end result is improved productivity for teams.

Key Features and Benefits of Pipelines

Pipeline as Code

  • Easily define simple and complex pipelines through the DSL in a Jenkinsfile.
  • Pipeline as code provides a common language to help teams (e.g. Dev and Ops) work together.
  • Easily share pipelines between teams by storing common “steps” in shared repositories.

Pipeline Stage View

  • A new interface makes it easy to visualize the progress across an entire pipeline.


  • Pipelines are long-lasting and can survive infrastructure outages.

Built-in support for Git, GitHub branches

  • Each feature branch can define its own delivery pipeline, which Jenkins can detect, automatically managing Pipelines when branches are created or deleted.


The abundant plugin ecosystem means that new Jenkins users must navigate
through long lists of plugins to find the most suitable plugins to match
their needs. Without any “batteries included” to address the most common needs,
getting started with Jenkins can be an intimidating experience.


For new users, Jenkins 2.0 starts up with suggested plugins to get them
started with the right set of tools to use Jenkins effectively from day one.

There are a number of user interface improvements, such as the
improved job configuration page, to make configuring jobs easier.

Key Features and Benefits of Improved Usability

New “Getting Started” experience

  • Start with a set of suggested plugins that match the most common needs.

Redesigned “Create Item” page

  • The “Create Item” page has been redesigned to include icons for job types.
    Once you have a larger number of item types to choose from, the page will group item types by category.

New Job Configuration page

  • Tabs at the top of the job configuration page let you quickly jump to various sections on the form.
    The redesigned form elements make it easy to tell which options are related.

Jenkins 2.0 is a drop-in replacement of the Jenkins 1.x series of releases
and fully backward compatible. There is practically no reason not to
upgrade once 2.0 is released.

Give us feedback!

We’re very interested in your feedback on what you think of the Jenkins 2.0 beta release.

To experience Jenkins 2.0 properly, we recommend you set up

a different Jenkins home directory

. This way, you’ll both get to try the new setup, and keep your production instance
safe from possible issues.

Original URL:

Original article

Everything You Need to Do to Secure Your Raspberry Pi Home Automation Projects

When you’re working with connected devices or home automation projects on the Raspberry Pi, it’s important to lock down your Raspberry Pi so it’s secure. Over on, they show you exactly how to that.

Read more…

Original URL:

Original article

Windows 10 passes 20% share in the U.S.

One in five Windows-powered devices steered to a host of U.S. government websites in March ran Windows 10, according to preliminary data.

For the first time, Windows 10 accounted for more than one-fifth of the visits to sites tracked by the Digital Analytics Program (DAP), which mines traffic to more than 4,000 websites on over 400 different domains maintained by U.S. government agencies, such as the Internal Revenue Service and the National Weather Service.

The bulk of the visits to DAP websites originate in the U.S.

Through Thursday, Windows 10 recorded 20.2% of visits in March by Windows PCs, smartphones and tablets. That was a one-percentage point increase from February and more than two percentage points above January’s.

To read this article in full or to leave a comment, please click here

Original URL:

Original article

Proudly powered by WordPress | Theme: Baskerville 2 by Anders Noren.

Up ↑

%d bloggers like this: