How I got rid of Google

For the last couple of years I’ve been gradually removing myself from Google.

Why? Snowden.

Before Snowden I knew, in my heart, that I wasn’t happy with a big company hoovering up data about me (I’d quit Facebook for this very reason).  I’d previously convinced myself that Google was OK and that they would “Do no evil”.  I still believe that of them today, but what about tomorrow.  There’s a great quote which I first encountered due to a post that went viral on metafilter: “If you are not paying for it, you’re not the customer; you’re the product being sold.“.  Am I happy with Google having my data as the price for using their services?  No, I’m not.

Back on the topic of privacy, I’ve got nothing to hide – that doesn’t mean that my privacy doesn’t matter.  Spend 20 minutes to watch this ted talk on Why Privacy Matters.

So, motivation aside, what have I done?

Well let’s list what I used to use and what I now use:

  • Google Search – Starting with the easiest – I simply switched which search engine I use.  My first search engine is now DuckDuckGo (scroll down on their homepage to learn more about them).  It’s not as good as Google but it’s good enough and getting better all the time.  For the cases that it does let me down I mix and match between bing and google; I realise that’s against the whole point of this post, but I’m ok with it due to the next item in the list …
  • Google Chrome – I switched to Firefox, simple.  AND … I got some plugins.  They’re awesome! The following 3 plugins combine to get rid of all tracking by the likes of Google.
    • uBlock Origin blocks ads, trackers and malware sites.  It’s brilliant.  It blocks around 10% of my browsers requests and I don’t notice a thing.
    • Self-Destructing Cookes – Once you close a tab it’s cookies are deleted (and you can whitelist for sites that you want cookies for).
    • I don’t care about cookies – If you blow up all your cookies you start getting very annoying popups on sites saying “we use cookies, click to acknowledge”.  Well, this plugin stops that nonsense.
  •  Gmail – This is when things start getting more difficult.  To replace a service like gmail when you’ve been so invested in it for over a decade isn’t as simple as switching your browser.  The way I did it was to get my own domain name and run my own email server.  I’ve done this before so it didn’t daunt me but I knew it was going to be a lot of effort.

    • Server – On the server side I’m running a fairly standard Dovecot and Postfix setup.  I put in some extra effort so that accounts and aliases are configured in a mysql database.  Later on I also configured Solr for full text search of email – this was always the killer feature in gmail and I’m more than happy with my substitute.  All of the emails are indexed and searches on them (server-side) take place in milliseconds.  The data migration was a bit of a pain – I used Google Takeout to get all of my emails in one place, then added them to thunderbird and then copied them accross to my email server.  It took a while but it worked.
    • Web clientNextcloud (owncloud when this all started but that forked and I moved to Nextcloud).  This is a recurring theme on how I replaced google.  In a nutshell it is an open-source piece of software that let’s you host your own private cloud.  There is a comprehensive suite of plugins available, one of which gives you a web client for email.  It’s a nice UI and it does everything I want.
    • Mobile client – I run android and there’s an app called K-9 Mail that meets my needs perfectly.
  • Google Contacts – Nextcloud does this for me.  Synchronisation to my android device is done with an app called DAVdroid
  • Google Calendar – Nextcloud does this for me.  Synchronisation to my android device is also done with DAVdroid
  • Google Photos – Nextcloud does this for me.
  • Google Drive – Nextcloud does this for me.
  • Google MapsOpenStreetMap is perfectly capable for my needs
  • Google Keep – Nextcloud does this for me.  For tasks the synchronisation to my android device is also done with DAVdroid
  • Google+ – I stopped using it.  This took a bit of thinking about but in the end I realised that an online social network has never actually made my life any better.
  • Google Android – The problem with the android phone you buy in a shop is that it comes with “Google Play Services” already on there.  This gives google full access to everything on your phone – eek.  The good news is that underneath this software there is the Android Open Source Project (AOSP) which other developers have taken and made awesome without the Google octopus being wrapped around it.  Personally I’ve been running omnirom for the best part of 2 years and I love it.
  • Google Play Services – Running a different rom only solves the first part of the problem with Android.  This problem is deeper than it first appears though.  Some applications depend on you having Google Play Services installed.  Most of these I can live without but there were 2 that this posed a problem for me.  The app I use to control my thermostat at home apparently needs Google Play Services to do it.  So does the app I use to interface with my burglar alarm (I can understand this more as it uses Google Cloud Messaging to push notifications such as “you have an alarm”).  The solution (and this one took a while to get right) was microG.  This is an open-source reimplementation of Google Play Services.  It works perfectly for me 🙂
  • Google Instant Upload – Take a photo and have it uploaded – great idea … and, Nextcloud does this for me 🙂
  • Google Play Store – The place to get apps for an android device.  Nicely substituted by f-droid.  Even better, every app on there is open-source.  This makes me a very happy man.
  • Google NavigationOsmAnd is a nice app (open source ofcourse) that does navigation on my android.  Good enough for me.
  • Google Reader – I realise this has been gone for a long time but I’ve never found a replacement I’ve been happy with.  I have now, Nextcloud has a plugin that does what I want.

So to recap by turning things on it’s head, this is what I’m running and what it replaces:

  • Ubuntu server
    • Dovecot, postfix, solr – gmail server
    • Nextcloud – Server for contacts, calendar, photos, drive and keep.  Web client for gmail, contacts, calendar, photos, drive, keep
  • Omnirom android – Google android
    • Nextcloud client – instant upload, drive
    • DavDroid – contacts, calendar, tasks
    • K9 – gmail client
    • F-Droid – Google Play Store
    • microG – Google Play Services
    • OsmAnd – Google Navigation
  • NAS – backups.  I have nightly backups running for all of these services, they go across to my NAS which is, in turn, backed up to external drives.
  • My own domain – For a lot of this to work and to run it out of my own home I needed a few extra services (I don’t have a static IP address)
    • No-IP Plus Domain – so that when my IP changes the domain still resolves to me
    • Backup MX – if, for whatever reason, my email server was offline I didn’t want to miss any emails, this sorts that problem out.
    • Alternate-Port SMTP – some email servers will reject email that comes from specific IP address ranges (e.g. domestic).  It’s annoying and wrong but I can’t change it.  This service gets around the problem.
  • Encryption – https achieved thanks to Let’s Encrypt

So here I am, finally Google free.  It’s been a long journey that’s taken the best part of 2 years (yes, I could have been quicker but this was a free-time hobby thing and I don’t get a lot of time for that sort of thing).

It’s sort of a hollow victory now though … during this time our wonderful government in the UK passed a law (nicknamed the “Snooper’s Charter”) that says our ISPs have to store all internet activity for a year.  The cherry on the cake?  It doesn’t apply to our MPs!  Fortunately, for now at least, there’s a way around it.

 

Working with mono-service on a raspberry pi

I was working with on a .net service that I wanted to run on my raspberry pi.  Initially this was fairly easy but then I wanted to run it on startup as a service.

After a bit of digging I found out about mono-service and mono-service2 (for .net 1 and .net 2 respectively)

Working with this is as simply as …

To start a service

To stop a service

Woah – ok stopping isn’t so straightforward …

Basically when the service starts it puts a lock file in the /tmp folder.  This is just a text file that contains the process id (pid) of the exe that is running.  By doing the cat, and passing that to kill, the service will stop.

Next up was to get it to run on start up.

I found a useful bash script to start, stop and restart the service … http://www.geekytidbits.com/start-stop-daemon-with-mono-service2/

Unfortunately this didn’t work immediately for me as my version of linux was built differently and didn’t have some of the parts this script depended on.

My finished script now looks like this:

This was put in \etc\init.d\bpi.sh and I did a chmod to make it match the others in that directory.

Note that there are a couple more parameters to our start command … -l to tell it where to put the lock file and -d to give it a start directory (my application writes logs and they would appear in funny places without this).

Finally the following command sets things up to start and stop in different runlevels:

sudo update-rc.d bpi.sh defaults

 

Creating tasks in Outlook from an external data source

I’ve had this script for many years but currently I don’t have a use for it so I’m getting rid of it but putting it here for future reference in case I need it again.

It’s got code to retrieve data from a database and convert it to a tab delimited string.  There’s more code which then parses this into tasks.  The upshot of this is that I’ve used it in the past to take data from the clipboard (having come from excel).

The code has been anonymised which will have introduced a bug or two but the gist of it is valid.

 

Determine the installed version of .net framework

Just making a quick reference for myself of the info found on msdn.

Take a look at the following registry keys

Frameworks 1 – 4
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP

Frameworks >= 4.5
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\Release
where
378389 = .NET Framework 4.5
378675 = .NET Framework 4.5.1 installed with Windows 8.1
378758 = .NET Framework 4.5.1 installed on Windows 8, Windows 7 SP1, or Windows Vista SP2
379893 = .NET Framework 4.5.2

TFS: automating pending change set reminder emails

As an admin of a TFS server I wanted to be able to send an email to people reminding them of any pending changes they may have.
I knocked up a quick application and have now configured it to run once a week with a scheduled task.

The main logic to get pending change sets is (where _vcs is a VersionControlServer from the Microsoft.TeamFoundation.VersionControl.Client namespace):

The PendingChange class is a simple POCO:

After that it was a simple case of looping through the PendingChanges List<> building up emails and sending them.

 

Find a SharePoint feature with PowerShell

As I keep having to figure this out every time I come to do it I’m leaving it here for reference.

To find a SharePoint feature when you only know part of the name of it the following command can be used:

 

VPN goes mainstream

I’m beginning to hear a lot more about VPN’s (personal use for anonymity) in the press and I’m a bit worried it’s not understood enough.

Sales pitch: Get a VPN and your internet anonymity is restored.
Truth: It can be, but you have to be careful.

Other people will know more than me – there more than likely will be more to worry about than this. My main concern: cookies.

You get a lovely new vpn and then you use the same browser and user account to get on the net. BAM! You’re not anonymous any more!

A lot of the VPN providers sell the fact that it’s good for internet cafes. This is partly true – it will stop the others on the same wifi from snooping.  The problem is that as soon as you log on to Facebook via your VPN you’re not anonymous.  These are two different uses for a VPN and they’re not compatible.  If you’re looking for anonymity what are you doing on a social network?!  Scared of your ISP?  You should be just as scared of any website you need to log on to!

My steps for a nice clean VPN:

  1. Get a VPN service (don’t use it yet!)
  2. Set up a fresh windows user account (some may say this is overkill but it’s saved me a few times.  If you have a separate windows account then you don’t have to worry about your normal browser accidentally being opened and sending cookies.)
  3. login to that user account and download firefox as the first thing you do
  4. From now on, when on your VPN, only use your new windows account and firefox as your browser
  5. Change the cookie settings to never allow cookies from a third party site (I’ve gone a bit further than this and ban all cookies and only re-enable source-cookies if I have a specific problem)
  6. Install the NoScript firefox addon
  7. Now you can start using your VPN
  8. Never log on to any site – if you must log on to some sites then:
    1. get a new anonymous email account that is unrelated to everything else
    2. use that account for everything while you’re on your VPN
    3. never use those accounts while not on your VPN

All for now …

 

Clone a web application

I needed to set up a new web application that was a copy of an existing web application. The constraint was that there was only one farm available to work with (I did have other farms but they were running different versions of SQL server).

Approach 1
I’ll first point out that this didn’t work, skip ahead if you’re not interested.
I went through the following steps:

  1. perform a SQL backup of the content database
  2. restore the backup into a new database
  3. created a new web application
  4. marked the content database that this created as offline
  5. attached the cloned database to the web application with the powershell command Mount-SPContentDatabase – I was sure to pass in the -AssignNewDatabaseId parameter

The result was the database attached but it had no site collections in it.

It turns out that this approach could work but only if you attach it to a different farm. You can then backup that database and restore/attach it back on the source farm.

As I stated at the beginning – I didn’t have the luxury of a second farm.

Approach 2
The only option left that I could think of was to backup and restore each site collection manually.
I knocked up the following powershell script to automate this and it worked …

 

Scripting new Active Directory users

I needed an easy way to create users in Active Directory.

PowerShell to the rescue … although it didn’t work out.

The PowerShell command New-ADUser depends on AD having web services enabled which is a feature that came out with 2008 R2 – needless to say the AD server I was working with didn’t have this. So I fell back to the good old fashioned command line: dsadd user.

I put together an excel with columns like this:

So for this data

The following command is generated:

This is going to save me minutes – literally minutes – every month!