Home | Random | Downloads | About | Hikes | WebCam | Search | Sitemap | Email | Feed

Securing the Internet of Things

Securing the Internet of Things

We can’t trust manufactures to build secure connected devices and so routers need to be updated to solve this problem once per network.

The distributed denial of service (DDOS) attack on Friday, October 21 was apparently caused by dodgy webcams. But next time it will be Nest or Alexa or Hue - not picking on Google, Amazon or Philips specifically here, those just happen to be the IOT devices currently plugged into my home network. My washing machine and drier would be as well but fortunately LG’s dismal app has saved me from myself by not working for toffee. Oh, I have some DropCams too. And my car is connected. The next attack will probably just come from me.

My fix: update routers to sandbox these devices. A Nest thermostat can only talk to nest.com. If it wants to DDOS Reddit too bad, no connection allowed no matter how badly the device is compromised.

When a new device is connected the router looks it up (MAC address registry?) and then puts it in the appropriate sandbox.

If Nest needs to connect to weather.gov to check the forecast then Google would need to proxy this via nest.com. If the device goes bad it’s only got one domain to attack (so there’s a pretty good incentive for the manufacturer to make sure it doesn’t).

The only downside is new routers or new router firmware. Given the current state of IOT I’d buy one.

As usual if any of my billionaire investor readers are interested get in touch.

Share:

Where did that app icon go, Android?

Where did that app icon go, Android?

As much as I’m looking forward to Daydream VR and trying to train my Google Assistant to swear there is one big problem left with Android that Mountain View should tackle first.

Where the fuck did my icon go Android?

Every so often when I update apps an icon is missing from my home screen. It’s one of sixteen apps that I use frequently enough to have pinned there but I can’t remember what it was until my muscle memory sends my finger flying to the empty square an hour or day later. Until then I’m distracted and can’t focus and scroll helplessly through the recently updated list in Google Play trying to figure out which of the updates is the culprit.

It’s not the first time I’ve been through this so I took a screenshot of my home screen just so I could not go through this again. But Google Photos backed it up and deleted it to save space so it’s somewhere in Drive that I can’t find doing me no good at all. When I figure this out I’m going to borrow my daughter’s instax and keep a hard copy in my wallet.

Google booking me a restaurant and a babysitter at a whim won’t save the time I lose to hunting down missing apps.

It might be fixed in Nougat but I can’t update for an unknown number of months because of device/carrier/manufacturer fragmentation so that’s still Google’s fault.

I have been a HTC loyalist so maybe it’s Sense and not Android in which case sorry Google, I should get mad at HTC instead.

I’m pretty sure it was Goodreads.

Share:

Google I/O 2016

An Echo knockoff and rapturous applause for variable font size in a messaging app. Not much innovation so far this year.

The horrific trend in Inbox and now Allo is machine learning auto reply so you can send something canned and inauthentic instead of actually speaking with people. Zombie Robs might approve but I'm far from convinced.

Updated 2016-05-18 14:12:

Android N looks super cool and I can't wait. The #1 productivity enhancement I'd like to see though is copy and paste icons that look like copy and paste. I do not have a clue currently.

Updated 2016-05-18 14:24:

No headset.

Updated 2016-05-18 14:40:

Android Studio is very nice. Eclipse was painful. I actually like Android Studio more than Xamarin which is saying a lot for a C# leaning person.

Share:

Automate Google PageSpeed Insights with Apps Script

Upload

Here's a quick script to automatically monitor your Google PageSpeed Insights desktop and mobile scores for a web page:

var pageSpeedApiKey = '...';
var pageSpeedMonitorUrl = '...';

function monitor() {
  var desktop = callPageSpeed('desktop');
  var mobile = callPageSpeed('mobile');
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName('results');
  sheet.appendRow([
                   Utilities.formatDate(new Date(), 'GMT', 'yyyy-MM-dd'),
                   desktop.score,
                   mobile.score
                  ]);
    
    // more available, i.e. desktop.pageStats.numberResources
}

function callPageSpeed(strategy) {
  var pageSpeedUrl = 'https://www.googleapis.com/pagespeedonline/v1/runPagespeed?url=' + pageSpeedMonitorUrl + '&key=' + pageSpeedApiKey + '&strategy=' + strategy;
  var response = UrlFetchApp.fetch(pageSpeedUrl);
  var json = response.getContentText();
  return JSON.parse(json);
}

You need a spreadsheet with a tab called results and an API key for PageSpeed Insights (activate the API in the console and create an API key for it, the browser based / JavaScript option). Paste the code above into the script editor for the spreadsheet and add your API key and URL to monitor. Then just choose triggers from the Resources menu and schedule the monitor function to run once per day.

Note that this currently just logs the overall score. There are a bunch of other values returned (like number and types of resources on the page) that you could choose to monitor as well. It would also be easy to extend this to monitor more URLs, or to send you an email if the score drops below a threshold.

Share:

Google Cloud Vision Sightings

Google Cloud Vision Sightings

I've been feeding webcam images into the Google Cloud Vision API for a few weeks now so I thought I'd take a look at what it thinks it can see. The image above shows every label returned from the API with my confidence going from the bottom to the top and Google's confidence going from left to right (so the top right hand corner contains labels that we both agree on).

Google is super-confident that it has seen a location. Can't really argue with it there.

It's more confident that it has seen an ice hotel than a sunrise (and it has seen a lot of sunrises at this point). Maybe I need to explore the Outer Sunset more.

Google is 60.96% confident that it has seen a ballistic missile submarine. I suppose that's plausible, I do have an ocean view but it's rather far away and unless there was an emergency blow that didn't make the news I'm going to have to call bullshit on that one. It's 72.66% confident that an Aston Martin DB9 went past which is pretty specific. Possibly a helicopter slung delivery?

Maybe I'm sending basically the same image in too many times and the poor system is going quietly mad and throwing out increasingly desperate guesses. Probably I've just learned that I should use 80%+ as my confidence threshold before triggering an email...

(Previously)

Share:

Chromecast won't connect to wifi - finally found the fix

Chromecast won't connect to wifi - finally found the fix

I've struggled for a while with Chromecast. The idea is great. I love using my phone rather than a remote. I like the idea of being able to cast any screen or browser tab in principle (in practice I think I've only done this once). I like the nice curated background pictures and that I could get round to using my own photos one day.

But here is how it works in practice. Fire up app. Select Chromecast icon and watch it go through the motions of connecting. Nothing streams. Reboot Chromecast, phone and router. Hard reset Chromecast and configure from scratch again. Reboot everything some more. Disconnect house from grid for ten minutes and switch off gas mains as well to be on the safe side. Finally, streaming! Repeat.

It's miserable. With both a Chromecast and a Chromecast 2 (which I really hoped might fix the problem). I've been through two different routers and I've tried a bunch of different settings but nothing seems to make the thing work. I even renamed the device to remove spaces.

For a while I considered buying an OnHub. Maybe Google's router would work with Chromecast? But it can't be bothered with Ethernet ports for some reason and so I'd need a new switch and then I'd probably need another power port and how important is John Oliver right now anyway (very)?

As much as I want Chromecast to work I've binned the wretched thing and bought an Amazon Fire TV Stick. Same basic principle but with apps on the device rather than your phone and a remote control.

I'd rather not have another remote, but it works instantly and without risking an aneurysm. It's also available with voice control which lets you both search for programs and trigger Alexa (my typical morning is asking Alexa for a flash briefing and then sobbing quietly when a daughter yells 'Alexa, stop... Alexa, play Gangnam Style').

My only gripe so far is that the voice search doesn't search inside non-Amazon apps (Netflix, HBO, etc).

Share:

Get an email when your security camera sees something new (Apps Script + Cloud Vision)

Get an email when your security camera sees something new (Apps Script + Cloud Vision)

Nest (previously DropCam) can email you when it detects activity but that gets boring quickly. How about an email only when it sees something totally new?

The script below downloads a frame from a web cam and then calls the Google Cloud Vision API to label features. It keeps a record of everything that has previously been seen and only sends an email when a new feature is detected. You could easily tweak this to email on a specific feature (i.e. every time your dog is spotted), or to count the number of times a feature appears. I'm using a Nest cam but any security camera that has a publicly visible image download URL will work.

var OAuthCreds = {
  "type""service_account",
  //...
};

var SendEmailTo = '';
var MonitorImageUrl = '';



function main() {
  var timestamp = Date.now().toString();
  var scriptProperties = PropertiesService.getScriptProperties();
  var currentProps = scriptProperties.getProperties();
  
  Logger.log('Grabbing a frame');
  var url = MonitorImageUrl + '&cb=' + timestamp;
  var response = UrlFetchApp.fetch(url);
  var image = response.getBlob();
  image.setName('image.jpg');
  var bytes = image.getBytes();
  var encodedImage = Utilities.base64EncodeWebSafe(bytes);
  
  Logger.log('Calling cloud vision');
  var service = getService();
  if (service.hasAccess()) {
    
    var request = {
      "requests":[
        {
          "image":{
            "content": encodedImage
          },
          "features":[
            {
              "type""LABEL_DETECTION",
              "maxResults":50
            }
          ]
        }
      ]
    }
    
    var annotateUrl = 'https://vision.googleapis.com/v1/images:annotate';
    var annotateResponse = UrlFetchApp.fetch(annotateUrl, {
      "headers": {
        Authorization: 'Bearer ' + service.getAccessToken()
      },
      "method" : "post",
      "contentType" : "application/json",
      "payload" : JSON.stringify(request, null, 2)
    });
    var json = JSON.parse(annotateResponse.getContentText());
    
    var anythingNew = false;
    var newText = '';
    
    for (var l = 0; l < json.responses[0].labelAnnotations.length; l++) {
      var description = json.responses[0].labelAnnotations[l].description;
      var score = json.responses[0].labelAnnotations[l].score;
      
      if (!(description in currentProps)) {
        Logger.log('Found new feature: ' + description);
        scriptProperties.setProperty(description, score);
        anythingNew = true;
        newText += 'Found: ' + description + ' (score: ' + score + ')\r\n';
      }
    }
    
    if (anythingNew) {
      MailApp.sendEmail(SendEmailTo, 'Found something new on the webcam ' + new Date(), newText, { 
        attachments: [image] 
      });
    }
    
  } else {
    Logger.log(service.getLastError());
  }
}

// modified from https://github.com/googlesamples/apps-script-oauth2/blob/master/samples/GoogleServiceAccount.gs#L50 below...
function getService() {
  return OAuth2.createService('CloudVision')
      // Set the endpoint URL.
      .setTokenUrl(OAuthCreds.token_uri)

      // Set the private key and issuer.
      .setPrivateKey(OAuthCreds.private_key)
      .setIssuer(OAuthCreds.client_email)

      // Set the name of the user to impersonate. This will only work for
      // Google Apps for Work/EDU accounts whose admin has setup domain-wide
      // delegation:
      // https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority
     // .setSubject(USER_EMAIL)

      // Set the property store where authorized tokens should be persisted.
      .setPropertyStore(PropertiesService.getScriptProperties())

      // Set the scope. This must match one of the scopes configured during the
      // setup of domain-wide delegation.
      .setScope('https://www.googleapis.com/auth/cloud-platform');
}

function reset() {
  var service = getService();
  service.reset();
}

There is a bit of setup to get this working. Create a new Apps Script project in Google Drive and paste the code above in. You'll need to provide you own values for the three variables at the top.

OAuthCreds is the contents of the JSON format private key file for a Google Developer Console project. Go to the console, create a new project and enable the Cloud Vision API. You'll also need to enable billing (more on this below) - a trial account will work fine for this. Once the API is enabled create a service account under Credentials and download the JSON file. Just paste the contents of this into the script.

That's the hard part over. Now enter the URL of the image to monitor (see this post for instructions on finding this for a Nest / DropCam device) as MonitorImageUrl and your email address for SendEmailTo.

One last thing - follow the instructions here to reference the OAuth2 for Apps Script library.

Once this is all done run the script (the main() function) and authorize it. You should get an email with a picture attached and a list of the labels detected together with a confidence score from 0 to 1. If this doesn't happen check the logs (under the View menu).

You can now schedule the script to run repeatedly (Resources -> Current project's triggers). You get up to 1,000 units a month for free so once an hour should be safe. If you need more frequent updates check the Cloud Vision pricing guide for details.

After a few runs you should only get an email when something new is detected. If you're seeing too many wild guesses then add a filter on the score to exclude low confidence features.

Enjoy, and leave a comment if you have problems (or modify this in interesting ways).

(Previously)

Share:

Google Inbox Account Switching

Google Inbox Account Switching

Google is generally pretty good about managing multiple accounts but sometimes you get completely stuck. One example is Google Inbox where your primary account is Google Apps for Work without Inbox enabled. You just get a screen saying that Inbox needs to be activated and no option to switch to another account.

There is a fix, and this sometimes works for other products as well. In the URL (https://inbox.google.com/u/0/) there is a user number. Change the 0 to 1 (or maybe 2, 3, etc depending on the number of accounts) and you can get Inbox up and running again.

One case I haven't found a clean workaround for is importing a segment or custom report in Google Analytics. You just get the default profile and if it's not what you're after then there is no way to switch. What does work here is launching an incognito window, signing in to the relevant account and then using the import link. A bit painful but gets the job done.

Share:

Not to be anal but (any number of dogs...)

Not to be anal but (any number of dogs...)

Google is going to start ranking pages based on facts. I'm game. This MUNI sign has always bothered me.

The highest capacity vehicle in the MUNI fleet has to be a two-car light rail vehicle. Capacity 436 people. The average weight of a person is 185 pounds. So we're looking at 80,660 pounds per rush hour train.

The lightest dog is a 1.4 pound Chihuahua named Ducky.

So at the absolute outside with no other passengers the limit is 57,614 dogs. I'm going to have to make some stickers...

Share:

Capture DropCam (Nest Cam) frames to Google Drive

Capture DropCam frames to Google Drive

Here's an easy way to capture frames from a DropCam to Google Drive. This only works if you have a public feed for your DropCam.

Go to the public page for your DropCam (Settings -> Public -> Short URL Link) and then view source for that page. Near the top you can find the still image URL for your DropCam:

<meta property="og:image" content="https://nexusapi.dropcam.com/get_image?uuid=12345&height=200" />

In Google Drive create a new Apps Script (If you don't already have Apps Script you can find it via Connect more apps...). Paste in the following code:

function downloadFrame() {
  var timestamp = Date.now().toString();
  
  var url = 'https://nexusapi.dropcam.com/get_image?uuid=12345&height=1280&cb=' + timestamp;
  var response = UrlFetchApp.fetch(url);
  var blob = response.getBlob();
  blob.setName(timestamp + '.jpg');
  
  var folders = DriveApp.getFoldersByName('DCFrames');
  while (folders.hasNext()) {
    var folder = folders.next();
    folder.createFile(blob);
    break;
  }
}

Replace the uuid parameter in the URL with the uuid from the still image URL for your DropCam. Note that the height parameter in the script has been changed to 1280 to get the largest possible image. A timestamp is being used to add a random cache busting parameter to the still image URL and is also used as the filename for the image.

The script will save the images to a folder called DCFrames - either create this folder in your drive or change this parameter to the desired folder.

Run the script and check that it's working. If everything looks good go to Resources -> Current project's triggers in the Apps Script editor. You can now set up a timer to save a frame as frequently as every minute (which I'm using to collect frames to make a daily time lapse movie). You can also ask Apps Script to send you an email when the script fails.

Updated 2015-07-01: DropCam is now Nest Cam - assuming that Nest keep the API going everything should keep working as above for both types of camera.

Share:

Leaving Chrome

Leaving Chrome

My Chromebook was stolen over the weekend. The good news is that I didn't lose anything given the cloud only nature of the device. The bad news was that I didn't really want to get a new one.

I loved the cost and the boot speed and being able to do nearly everything I needed to with a browser-in-a-box.

But the nearly was a deal breaker. I sometimes need to VPN and the Chromebook wouldn't. It just wasn't compatible with our flavor of VPN and I didn't want to buy another Chromebook on the off chance that Google would eventually fix this. I also have to use Skype (I'd rather not) and this isn't really possible on the Chromebook either. Imo.im was good while it lasted. IM+ is horrible.

I've abandoned the Chrome dream and picked up a Surface Pro 3.

(Read the full Chromebook adventure: Part 1: Going Chrome, Part 2: Staying Chrome? and Part 3: Leaving Chrome)

Share:

Google PageSpeed Insights hates Google Analytics

Google PageSpeed Insights hates Google Analytics

I so want to get to 100% on Google PageSpeed Insights but I'm getting dinged for loading Google Analytics!

Share:

Tedious Feed Update

Tedious Feed Update

If you subscribe to I Thought He Came With You via RSS please switch to this new feed and delete the old one.

Longer version... this blog has used FeedBurner for ever but I managed to get locked out a couple of years ago. I upgraded to Google Apps for Domains and part of the process was transitioning various services over to a temporary account and then back to the new one. Most of them made it over but FeedBurner got orphaned somehow.

I've emailed, left forum posts etc but no luck. Google doesn't really do customer service so despite actually paying them I seem to be out of luck. Also, Google hates RSS so FeedBurner probably isn't the right long term tool even if I could get back into my account.

I've been meaning to do something about this for a while but as it was working it wasn't a top priority. This changed when my blog got hacked a couple of times in a row - I'm not sure if it was the software (I'd been using BlogEngine.net) or my hosting provider but it's painful to fix and I decided I needed a change. I Thought I Came From You is now running on a home grown platform. It should be more stable, faster (some quick benchmarking suggests twice as fast so far) and not get hacked quite so often.

So switch to http://ithoughthecamewithyou.com/syndication.axd for updates (I can't recommend Feedly highly enough) and delete the old feed. If you have any problems leave a comment below or send me an email.

Share:

Staying Chrome?

Staying Chrome?

I've been using my Samsung Chromebook at work for around ten months now. It's not my main computer but it's a meeting survival powerhouse for email, instant messaging and note taking. The battery lasts approximately forever, it boots immediately and the decent keyboard and trackpad are just miles ahead of fumbling around on a tablet.

There are two problems for me with the Chrome universe. One will probably get fixed, one could be a deal breaker.

The first issue is VPN support. Apparently we use some sort of old, fiddly Cisco VPN that ChromeOS simply won't talk to. I filed Issue 261241 in the Chromium bug tracker and hopefully it will get fixed soon. If you're struggling with the same thing please star the bug report.

I can work around the VPN problem by using LogMeIn or Chrome Remote Desktop. But I can't live long without Skype. Actually I'd be perfectly happy to never use Skype again but my company runs on about fifty thousand Skype chats. I used Imo.IM for a while but they were forced to drop Skype support. Right now I'm using IM+ which as far as I'm aware is the only working Skype option for a Chromebook (please tell me if I'm wrong) but it's buggy and can't restore a connection between sessions. I either need to find a way to kill Skype at work or wait for (or write) a better web-only client.

Probably worth sticking it out, Gartner reports a 8.6% fall in PC sales but predicts Chromebooks growing to over 12 million units by 2016.

(Read the full Chromebook adventure: Part 1: Going Chrome, Part 2: Staying Chrome? and Part 3: Leaving Chrome)

(Image by he4rtofcourage, CC).

Share:

Google Spreadsheets API and Column Names

Google Spreadsheets API and Column Names

I had a play with the Google Spreadsheets API recently to feed in some data from a C# application. The getting started guide is great and I was authenticated and adding dummy data in no time. But as soon as I started to work with real data I got:

"The remote server returned an error: (400) Bad Request."

And digging deeper into the response:

"We're sorry, a server error occurred. Please wait a bit and try reloading your spreadsheet."

The original sample code still worked so it didn't seem like any sort of temporary glitch as the message suggests. After much hair torn it turns out I was getting this error because I had used the literal column names from my spreadsheet. The API expects them to be lower case with spaces removed. If not columns match you get the unhelpful error above, if at least one column matches you get a successful insert with some missing data.

Error messages are one of the hardest parts of an API to get right. If you're not very detailed then what seems obvious to you can leave your developers stumped.

Hope this helps someone else...

Share:

Finally Gmail

Gmail is taking the compose window out of the corner of your window.

Previously

Share:

Google Maps Ate My Battery

Google Maps Battery Usage

I've been slowly becoming aware that Google Maps is eating up a lot of the power on my phone (an HTC One X with Android 4.1). Yesterday as my battery was near death I saw it was up to 25% of total usage on a day when I hadn't even run the app. Something had to give. I'd already turned off Google Latitude a few months ago so the culprit had to be whatever secret-squirrel location sniffing the phone does behind my back.

Android Location Options

Android has about a million different incomprehensible weasily location options. At least in 4.1, I've seen some evidence that 4.2 is a bit better. The bargain with 'Google's location service' seems to be that if you don't send your data to them they won't send it to you. At least I think so, the description changes when you check or uncheck the option. I've had this off for today and my battery has a lot more juice. It means that Google Now doesn't work, but so far that doesn't seem to be a loss. It might hurt other apps as well, but so far I care more about not having a dead phone at the end of the day.

Share:

Chiroopractoor

Chiroopractoor

Google's use crime of a new compose window is going to become compulsory soon.

I suspect this is because it will soon be revealed that Google is rolling out a chain of high street Chiropractic facilities to treat the crick in everyone's neck from composing email in the bottom right hand corner of one's screen.

Either that or it's a bid for mobile dominance by forcing PC users to work in mobile screen sized portions of their screen until you just give up and use your phone.

Share:

Going Chrome

Going Chrome

I came to Chrome OS by a circuitous route. Initially I though a browser in a box was a silly, under-powered toy. But then I needed a meeting machine for work.

To start with I decided to use an old Macbook. It was running OSX 10.5 (Leopard) which is a bit out of date so I thought I'd update it to the latest 10.8 (Mountain Lion) goodness. But this turned out to be impossible to do from my desk. Before I could go to 10.8 I'd have to get physical media for 10.6 (Snow Leopard) and patch it up to the point where it would accept an upgrade. This meant shipping a disc or visiting an Apple Store and getting smarmed at. Unacceptable.

So I decided to ditch OSX and install Windows 8. This was a cheap online purchase and a painless install... but Windows 8 is a disaster on a non-touch device. Everything takes an extra few clicks or a half-mile scroll to the right. 

Live tiles seem like a good idea until you realize that you're not looking at the start screen often enough for them to be of any value. If Microsoft had introduced a permanent ticker at the bottom of the screen or a secondary tile screen on all Windows 8 certified devices life could have been more interesting. 

Removing the start button so you have to go into touch and swipe mode to do anything is a pain. A boot to desktop mode would be great for older devices.

The deal breaker though is the increasingly assertive Windows Update. Twice in meetings it decided to reboot the computer. It used to be you could delay updates for hours but Windows 8 just knows that the latest patch is more important that whatever you happen to be working on and cheerfully pulls the plug. 

Admittedly you can figure out how to find the vestigial, non-Windows 8 config for Windows 8 and go to manual mode. And then figure out how to turn off the nagging for not having the recommended Windows Update setting. But but by this point you realize that you've got a operating system that is about updates first and getting work done second. And Windows 8 Windows Update doesn't even update Windows Store apps so you've got a live tile nagging for updates every five seconds as well. 

On top on the Windows 8 horror the Macbook was old, heavy and had a puny battery. Also, after installing Windows 8 the only software I needed to install was Chrome and the office VPN client. Once this sunk in I ordered the new Samsung Chromebook.  

Setup on the Chromebook is: 1. Login to your Google Account (with support for two-factor authentication), 2. Choose a wallpaper (optional). 

I'm not likely to use a Chromebook as my primary machine any time soon. It is however a meeting powerhouse for email, IMs, calendar and note taking. I replaced Skype with imo.im (which I've used on Android for a while). Full Outlook web access took a bit of head scratching - see this post for details. Google Apps and Hangouts work seamlessly as you'd expect. It's light and the battery lasts all day.

The only niggle so far is that Chrome OS doesn't support the flavor of VPN that my company uses. It would be nice to get to the wiki, but it's not a deal breaker (If you have a Cisco VPN that insists on a group name go vote for this bug). 

Microsoft and Apple should be really rather worried.

Updated 2013-07-17 13:54:

Two quick updates.

Providing a group name to use with Cisco VPN devices was added in Chrome 28. Unfortunately it still doesn't work for me. I've filed issue 261241 on the chromium bug tracker for this - you can star this issue if you have the same problem.

Skype has managed to block Imo.im so that no longer works for Skype on a Chromebook. I'm using IM+ for now, but it's not nearly as good - it doesn't remember passwords and it keeps silently losing connectivity so it's easy to miss chats.

(Read the full Chromebook adventure: Part 1: Going Chrome, Part 2: Staying Chrome? and Part 3: Leaving Chrome)

Share:

Fight Facebook with Email

I was a little saddened to read today that Diaspora is transitioning over to some form of community manged slow death. I joined a pod a while back and was pretty impressed with the design. It was very similar to Google+: clean, nice features, nobody home. 

I've also joined app.net. The concept here is a social network that you pay for, so the owners are aligned with the interests of the users and developers rather than advertisers and lame brands. I wish app.net well, but it's not the future. Best case (and it's not a bad one) it could be the new WELL - a community that people care enough about to pay for (I was on the WELL in the early 90's, splitting the tab with a friend so our handle was abft, account built for two). If that is the direction it goes in then simply having a slightly longer post limit than Twitter isn't really going to cut it. And cool as it might be most people aren't going to pay for a social network. 

Any attempt to displace Facebook has to solve the problem that anyone interested in sharing anything with anyone else is already using Facebook. The only platform that is in any sense comparable is email. So someone needs to make email into a social network.

This could be an interesting startup. Create some account - [email protected] - anything you send directly to that address is a post. Anyone you copy is a mention. Reply to a thread with this email address included and you're replying on the social network as well. Anyone copied on such an email gets invited to the network if they're not already.

You've got a killer viral component and an instant social network that is supported on every platform with no investment needed. Everyone has email, and everyone is a member as soon as they claim their email address or get included in a post. 

Maybe someone has tried this already and I just haven't seen it. I'm half tempted to have a crack at it myself. 

What would be more interesting would be layering a social protocol over email, and implementing that protocol by proxy on top of email providers that don't or won't support it. This creates a core social service practically out of thin air. Facebook and Twitter are the new AOL and CompuServe. There has to be a way to leverage email into a free and open alternative.

Share:

Sending email via GMail in C#/.NET using SmtpClient

Gmail Logo

I’ve stubbed my toe on this a couple of times, so here is the magic incantation:

using (SmtpClient smtp = new SmtpClient())
{
    smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
    smtp.UseDefaultCredentials = false;
    smtp.EnableSsl = true;
    smtp.Host = "smtp.gmail.com";
    smtp.Port = 587; 
    smtp.Credentials = new NetworkCredential("[email protected]""password");
    // send the email
}

Update 2015-02-11: A comment below from Shika Helmy suggests that adding a timeout might be helpful. Also note that if you have enabled two factor authentication for your Google Account you'll need to generate an app password in order to use basic authentication to the Gmail SMTP server.

Share:

Android: Insane Contacts Storage

Oh no:

Low on space (Android)

My phone keeps running out of space. A little sleuthing under Manage Applications shows that Contacts Storage is using over 32MB. Can’t move it to the SD Card – I guess this makes sense, although it would be nice to cache some of the non-essential data there. I’ve no idea if this is a HTC problem or an Android problem (I have a HTC Aria), but some Googling would seem to indicate that it’s not uncommon.

In the People app choosing View from the menu allows you to pick which sources to use to display contacts. I had 5,854 contacts from Twitter, despite having configured the Twitter app to only sync with existing contacts. I also had a bunch of Facebook contacts, with the same configuration (existing contacts).

I tried deleting Twitter from Accounts & Sync. This warned that it would remove contacts (great!) but after blowing it away Contacts Storage had more than doubled to over 70MB.

Time to go nuclear. I backed up existing contacts and then deleted all data from Contacts Storage. My phone is happy again.

Contacts and sync in general is the worst part of the Android experience. HTC Sync is a contact-duplicating, pop-up-and-wave-my-arms-in-the-air-every-time-I-do-anything piece of Adobe Air uselessness. Google really needs a better answer for people who live in Outlook on the desktop. Or maybe they’ll eventually grind me down into GMail…

Share:

Circles

 A Circle

I just got on Google+, and the Circles concept definitely moves the ball forward, but my heart sinks a little at having yet another disconnected social identity. It’s been said before, but it’s worth saying again – social networking needs to be an open, core internet standard like email. You can live on Facebook, Google, Twitter, wherever but your social graph should be independent of any specific service.

I don’t mean this in any (well, OK, a little) granola crunching open source way. Companies should compete to the death on their social graph implementation and added value. But the actual data on who your friends are should belong to you and should be both portable and interoperable. I should be able to friend someone on Google from within Facebook and share core items in both directions. If I get fed up of Facebook I should be able to move my graph and central identity elsewhere.

We’ve got OpenSocial, strangely not mentioned in the same breath as Google+, and Open Graph which is open for things but not people. Also FOAF, XUP, and other possible foundational standards. Of course the barriers here aren’t technical.

Altly wants to be Pepsi to Facebook’s Coke. I’m waiting to see what it tastes like, but it doesn’t sound like they’re itching to change the game.

Diaspora is an interesting project, but running instances (pods) of a social network is the wrong level of abstraction.

Of course ‘owning’ the graph is tremendously valuable and it’s hard to see Facebook giving this up anytime soon. If Google really don’t want to be evil they should use Google+ to liberate us from the tyranny of walled social gardens. Unless it turns out to be another Buzz or Wave in which case it’s down to us.

Share:

Reviews and links for April 2010

The Spire by Richard North Patterson

The Spire by Richard North Patterson

3/5

A good enough holiday read and nice to see Patterson return to a straight psychological thriller rather than the last few OpEds loosely wrapped with some plot.

 

Advanced .NET Debugging (Addison-Wesley Microsoft Technology Series) by Mario Hewardt

Advanced .NET Debugging (Addison-Wesley Microsoft Technology Series) by Mario Hewardt

5/5

Comprehensive introduction to low level .NET debugging - when you need to fire up WinDbg to check out the state of the managed heap, or debug a crash dump from the field you'll find this book invaluable. I wish it had been available when I started figuring out how to use SOS.

 

The Complete Stories of J. G. Ballard by J.G. Ballard

The Complete Stories of J. G. Ballard by J.G. Ballard

5/5

Wonderful collection of all of Ballard's short stories. It's a huge book with surprisingly few duds. My favorites include The Illuminated Man, clearly the inspiration for The Crystal World, which includes meaning bombs like "It's almost as if a sequence of displaced but identical images were being produced by refraction through a prism, but with the element of time replacing the role of light." and The Ultimate City (which isn't using ultimate in the sense of being good...). I've read most of Ballard's novels but not many of the short stories before. They're well worth the time.

 

Links

- Microsoft Agrees With Apple And Google: “The Future Of The Web Is HTML5″ from TechCrunch (Which makes it all the more tragic that a huge number of clients will still be running IE6 :().

- Comedian criticises BBC 'rebuke' from BBC News | News Front Page | World Edition (The problem isn't that it was anti-Semitic, it's that it wasn't funny.).

- UK 'has a high early death rate' from BBC News | News Front Page | World Edition (That'll be the deep fried mars bars and chips.).

- Oklahoma, where women's rights are swept away from All Salon (Competing with AZ to be the most fucked up state? Sigh :().

- Cameras capture 'Highland tiger' from BBC News | News Front Page | World Edition (Tabbs was bigger than that (a house cat)).

- MI5 dumps staff lacking IT skills from BBC News | News Front Page | World Edition (MI5 has staff without computer skills?).

- The Internet Provides. from jwz (Disturbing).

- Who Really Spends The Most On Their Military? from Information Is Beautiful (Click through to the Guardian blog post, interesting reading.).

Share:

I Thought He Came With You

Robert Ellison's Blog

7,250,102,861 people still need to read this blog.

Sealion!

Sealion