remote

Good and bad design at Apple under Jonathan Ive alvin September 11, 2019 - 9:26am

This medium.com article contains a fair balance of pointing out the good and bad of design at Apple under Jonathan Ive. Most people know the good parts, so this image shows a discussion of just two of the worst design decisions made by Apple’s design team. Other bad designs under Apple include pretty much every mouse ever made, the horribly infamous butterfly keyboards, and the trashcan Mac Pro design.

It seems like at some point every design quits thinking about what’s the best for the customer and succumbs to something that looks pretty. As the old saying goes, “Absolute power corrupts absolutely.”

How to use the Linux ‘scp’ command without a password to make remote backups

Summary: How to create a public and private key pair to use ssh and scp without using a password, which lets you automate a remote server backup process.

Over the last two years I've ended up creating a large collection of websites and web applications on a variety of Linux servers that are hosted with different companies like GoDaddy and A2 Hosting. I recently embarked on a mission to automate the backup processes for all these sites, and as a result of this effort, I thought I'd share what I've learned here.

An Akka actors ‘remote’ example

While doing some crazy things with SARAH, I realized that the best way to solve a particular problem was to use remote Akka actors. I haven’t had the opportunity to work with Akka much since finishing the Scala Cookbook, so I dug around trying to find a simple Akka remote “Hello, world” example. Unable to find a good one, I read some stuff, and created it myself.

How to use @SerialVersionUID and other Scala annotations

This is an excerpt from the Scala Cookbook (partially modified for the internet). This is Recipe 17.3, “How to use @SerialVersionUID and other Scala annotations.”

Problem

You want to specify that a class is serializable, and set the serialVersionUID. More generally, you want to know the syntax for using annotations in your Scala code, and know which annotations are available.

Solution

Use the Scala @SerialVersionUID annotation while also having your class extend the Serializable trait:

A second Akka remote example: Sending objects as messages

A few days ago I shared the source code for a simple Akka remote actor example. In that example I showed how to communicate between actors in two different JVMs using Scala and Akka. In that example I showed how to communicate between the two JVMs using String messages because I didn’t want to make the example any harder than necessary.

Today, I’m taking that example just one step further to show how to communicate between actors on different JVMs by using custom objects for your messages.

Apple's free iTunes iPhone remote app

As part of my work on my Mac speech recognition software, I've been digging into the use of an iPhone as a Mac remote control. While that hasn't been much of a success yet, I did stumble across the Apple iTunes iPhone/iPad remote app.

This iTunes/iPhone remote app is a free app from Apple that lets you control some iTunes functions. Apple's iTunes remote control app doesn't blow me away, however; for me, it has many flaws, including:

A Java class that writes to and reads from a remote socket

I'm not going to describe this much today, but here's the source code for a Java class I put together from a number of other sources on the internet. In short, this code uses a Java Socket to connect to a port on a remote server, sends a command to that server to be executed, and then reads the output from the command that is executed. As a result, I assume that all information sent is text (nothing binary).

The beginning of a MySQL database script

Here is some code that I use at the beginning of a MySQL database script to (a) create a database, (b) create a local user to access that database ('foo_user'@'localhost'), (c) create a remote user that can access the database ('foo_user'@'%'), and (d) then use that database (which I need to do before starting a bunch of CREATE TABLE statements):