The Assistance and Access Bill 2018

Posted on Posted in Uncategorized

The Assistance and Access Bill 2018

So. It turns out that the "Communique" that various intelligence agencies released last week that threatened to legislate back doors into every commonly used piece of communication technology wasn't an idle threat, as they already have a few things in the works. The farthest along is this bill in the Australian government that proposes to essentially force various companies to co-operate in compromising their security for the government's benefit.

The bill itself has the general boilerplate of crime / terrorism / children to justify itself. However the frightening part is the language used. It proposes that the backdoors be accessible without requiring a court order and imposes a gag order punishable by 10 years in prison on anyone who discusses how these backdoors are used. This is incredibly open ended, and while most of the opponents to this bill generally cite the standard issues with any proposal to backdoor encryption without weakening security; that is, it's impossible and many people will be robbed as well as having their identities stolen; my immediate thought boiled down to something which might not be a complete coincidence on the government's part. That is, retaliation against political opponents. With this bill, you could immediately crush any political movement you wanted. You don't even have to be obvious about it, as you're effectively in the same room as they are. Once you can monitor Labor/Liberal's/Green's communications you can pretty much insure that they never win an election again just by continually being one step ahead and countering their strategies directly. If anyone is then caught abusing this bill, well so what, if the victim tells anyone they'll go to jail for 10 years. If they tell anyone anyway, the government will say it was a one off action by a single person and publicly tell them off in a small press release. Then send the other person who spoke out to jail for 10 years to insure that no one else gets any ideas.

Why do I think the government would do such a thing? Partly because western governments have targeted journalists and other unpopular political leaders in the past, so I don't doubt that both the Australian government and the Americans who also will get access to this data will immediately be tempted to try using it to get rid of a few annoying people who just "don't know when to keep quiet". Also partly because in an era of Donald Trump, political leaders are now starting to be investigated, and some incredibly far reaching crimes are being uncovered. Would those people have hesitated to use this level of access for personal gain if it had been available at the time? It's a rhetorical question, of course not. Finally because the current government is embroiled in scandal after scandal and they don't seem to be upstanding enough to restrain themselves from abusing this power once they have access to it.

As for the stated goal of the bill? Combating terrorism, sex and financial crimes? Maybe it could be helpful, however you can already get a great deal of information with a warrant in almost every situation, and there are few laws preventing the police from simply grabbing people if they want to (for a limited time, you can detain practically anyone for questioning). One thing we've learnt from the scandal with HSBC being caught laundering money for the cartels is that a lot of the time the reason people / corporations get away with these crimes is that those in charge of supervising them simply don't care or are willing to give the perpetrators the benefit of the doubt. It turns out that it's easy to give people the benefit of the doubt when they're incredibly wealthy and influential and prosecuting them is a huge hassle. It's easier to tap the phones of people protesting dumping into the great barrier reef, also more profitable. If you do want to investigate terrorism and abuse you can do so now, it just requires you to get a warrant and demonstrate a reason before you begin deploying the power of the government against an individual.

So if you feel that maybe this bill needs to be rethought, at least to make it require a warrant and not impose penalties on people discussing it's deployment (like all other aspects of the law). The government has a period where it accepts email commentary at the following address. I encourage people to write in if they feel strongly, as Australians we need to be a part of our Democracy.

https://www.homeaffairs.gov.au/about/consultations/assistance-and-access-bill-2018

I also wrote in to my MP, Jane Prentice, but got a form letter in response. I'm not entirely sure if my email has been read, but I'll definitely follow up on it and establish a line of communication with my representatives. This is really the problem here, I don't really want to be up to date on politics, however with all the scandals in the news it looks like I have to be, as the alternative involves giving people who are either involved in financial scandals or complaining about petty office bullying on national news the unchecked ability to just assign themselves more powers while removing oversights. Even if the current administration is responsible and doesn't abuse this bill, can we guarantee that the next administration does the same?

Using Wireless Broadband as your main connection

Posted on Posted in Uncategorized

Using Wireless Broadband as your main connection

In Australia the internet service providers can be a bit hit-and-miss. Old wiring (you can bet all wiring will be a copper connection) means that a connection that was perfect originally can slowly degrade over time (for ADSL) or a cable box can be unmaintained (for cable); and getting a technician to investigate can be a hair-pulling experience. It may be different depending on your provider but of the three incidences I can remember where technical issues developed on a line, it went down roughly as follows...

  •  - Moisture had built up inside the box servicing the building, as it was outside the property line and ISP property this had to be fixed by a professional.  Of the three technicians that investigated not one of them fully dismantled the box to check. They did a line test and confirmed that there was a signal (technically true), but had no comment about 97% packet loss. The eventual resolution required one of the owners calling a personal friend inside the ISP to have them directly check for the specific issue and direct a fix.
  •  - The lines were technically existing (but heavily corroded), the ISP suggested that the modem be used on a friend's line at a separate residence to check to see if it worked there and to call back. I'm not sure how familiar you are with ADSL, but this would never work with any other house, because ISPs generally route per-residence. So of course the owner has to call back and say that the second modem must be defective and get a third replacement. Issue resolved. The end result that the contract was terminated and the owner moved to a different type of internet connection after paying for two months of no service.
  •  - Lines slowly degraded over time. After three months of no service the contract was terminated.

There's no point in calling for assistance if the ISPs are unlikely to fix anything. They know that depending on the issue they may never make the money back, and it's more cost efficient just to stall until the client gives up.

Solution. Optus is now offering a "Home Wireless Internet" plan. It's on the 4g network at $70 for 200GB of transfer. It's slightly low for someone who makes heavy use of youtube or Netflix but while I've known it to have some intermittent issues it's been incredibly solid for almost a year and a half now.

The main advantage of this is that if there are any issues Optus has to fix them immediately. If you're without internet then several blocks have also lost mobile service; and that's something that isn't going to go unfixed.

Speeds are fairly solid, I've seen an average of 600KB/s, but other people with the service have peaked around 1MB/s. It's not as good as NBN, but good enough for 1080p streaming and I personally prefer the reliability over the speed given a choice. One additional benefit, you get a router provided with the service (that works only for this) and if you move you can take the router with you. Technically you're not supposed to use it outside of your designated address due to allocation issues, however as a mobile device it works anywhere that Optus provides 4G service, this means you can take it with you to your new address and only need to call Optus to change your address at some later point without any service interruption in the meantime.

I can definitely support more cellular ISPs in the future. It should be noted that Vivid wireless was recently bought by Optus, they also offer a wireless service but which had somewhat worse ratings in the past. Currently the prices are the same, but the terms of service and the offered routers are different. Vivid offers an unlimited plan but only in some frequencies.

Best languages to learn for work…

Posted on Posted in Uncategorized

So what languages are best for finding work?

In my previous post I went over some of the best languages to start learning development with. Python and jQuery aren't just for learning programming, they're both very useful in a large variety of situations. However there aren't too many software development firms that rely exclusively on Python or jQuery. So what languages are the most popular among people hiring software development?

Based on my own personal experience in the software industry and without doing some official poll I'd say those languages are C# and Java for Desktops (and possibly C# for WebApps as well but those generally use a wider variety of languages). Interestingly the Dice Insights poll for employers actually puts Python and C / C++ above C#, though at that point I suspect you're going to be doing embedded systems development instead of desktop applications. 

C# and Java are both fairly easy to learn (less so than Python, but more so than C) and with the various tools available it's simple to become rapidly productive with them and therefore employable. If required to choose I'd go with C#, it's more flexible, has simpler and more straightforward grammar with fewer surprises and there are more tools available of generally more reliable quality.

I'm sure that anyone who's interested in learning more will rapidly find out by themselves, but it's probably worth giving a general overview of the languages and their benefits. C# is somewhat of an interpreted language like Python, that means that it's run inside another application instead of directly inside the "metal" of the computer. This means that it's theoretically slower than pure C, but as it's "strongly typed" (more on this later) it's faster than Python. I should take pains to point out that in practice C# will probably be faster than C. C needs to be compiled for the hardware that's going to run it, and it's very low level which means that it runs at the speed of the metal running it, but that also means that if you want any optimizations to take advantage of special hardware features, you'll have to implement those yourself. C# on the other hand comes with various optimizations inside the virtual machine running it, when the code is executed, the VM will choose the appropriate matching low level instructions on the fly. This means that on machines that have new features (like SSE)(SSE hasn't been "new" for decades, but work with me) C# will run the SSE low level code, on machines that don't, it won't. It can also more easily take advantage of different operating system improvements without specifically having to be told. So in practice C can be faster but among other things the C# code will be translated into the equivalent of compiled C on first run, so the only real performance difference is from hand-tuned optimizations.

The point of all that is that you shouldn't worry about speed when choosing between C# and C and pick based on other language characteristics. C# is a language developed and supported by Microsoft, Windows comes with a built-in interpreter for it (the .NET framework) and Microsoft also builds the tools for writing, testing and compiling C# (Visual Studio). With "Xamarin" you can even use it to build Smartphone apps (but if you want to build for iOS you'll still need a Mac). It can also be used to build websites with IIS and ASP.NET (never do this). C# doesn't have any real downsides so it's a very solid choice for software development.

Java is essentially exactly like C#, but with more downsides. It's currently developed and supported by Oracle and it hasn't seemed like Oracle has really been putting a lot of thought into it lately. Java has fewer libraries available and fewer libraries built in, the grammar is slightly more complex and there are more annoyances in the language that require additional care to work around when developing with it. Most importantly though, the interpreter is far more tricky to use efficiently than C# due to how it allocates memory to itself. It's easy to waste memory pointlessly or to run out suddenly (or both). Java can be used for websites with Apache / Spring and Android smartphones / tablets use this as their main programming language for apps. Although you can use C# if you are willing to learn Xamarin.

There is only one real advantage to Java in that it can be used on all operating systems with only some changes to the code. C#'s main interpreter .NET is Windows only and doesn't exist on Linux or OSX. If you want to have a really cross-platform C# application that runs on all systems from the same code base you will need to build against Mono or GTK+. Even then the icons and drawing won't look completely at home in OSX, but that's something that is also unavoidable with a Java application.

It might seem that I'm repeatedly criticizing Java here, but that's because I am. Choosing a language poorly to start with doesn't stop you from completing your project, but it does mean that as the project goes on you're spending progressively more time writing code around language issues instead of writing code to accomplish business requirements. That's why I generally choose languages that are easy to work with like C#, PHP, Python depending on the specific goal of each contract. It allows you to not only get a quick start, but to maintain a good rate of speed as the project progresses instead of getting bogged down. It also helps when the language has a good set of libraries to draw from, as you will be able to slot in advanced features quickly instead of being forced to develop your own (probably lower quality solution) from scratch during the project.

So I've said all that, and Java is still #1 on Dice. Why is that? Honestly after spending a solid period of my life writing Java as a line developer for a development company, I still don't know. My advice is to learn C# first and transition to Java later if it's that or starve.

On learning to code.

Posted on Posted in Uncategorized

On the value of learning to code

I've noticed recently there have been a lot of articles on learning how to code. As someone who's already deeply involved in the IT industry as a professional developer I admit to being torn on this subject in some ways. I'm always glad to see my field gaining more interest and exposure, and there's definitely plenty of work out there for people who are competent. On the other hand, there are also plenty of unemployed programmers out there. I'm not sure what it's like in other fields (carpentry, construction, etc..) , but the level of experience where you can really "take off" and see the high pay and flexible lifestyles that you often hear about is several years of experience after graduation from your degree. This is already assuming you're driven enough to seek constant training and additional experience for those years. Software development is also a field where you have to seek continual training in order to keep up, often in your personal time. 

Does this mean I want to dissuade people from starting a career in Software Development? No, but I do want to see the people who start prepare themselves to put in the effort until they succeed. It's misleading to think that you'll get a degree and then immediately bounce into a great job. The difference though is that once you have the experience it's much easier to turn that degree into a fulfilling career. Of course this is my only career so take my words with a grain of salt. It's possible I'm way off and this is really the worst career ever.

Still, some of you may be interested in what worked for me.

I'm not dissuaded, what should I study?

You're not thrown off? Great. Persistence is key in this field. I'm assuming that you need to choose both a first language to start with as well as trying to figure out which languages to specialize in more deeply once you've gained some experience. Firstly I've heard it said that you can tell a great programmer because they specialize in the more obscure languages. After having worked with people skilled in the less common languages I disagree that learning obscure tools is the mark of greatness. Something like "Lua" or "rust" might be great for their one unique use case, but it will be far harder to find assistance, technical support, libraries and additional staff. If you're on a team and the one programmer that codes in "Scala" quits, who's going to replace them on the team to fix bugs as they come up? You'd better hope this one off genius programmer left excellent comments and documentation (ha,ha..).

No, stick to the classics, they're classic for a reason. 

As a first programming language I'd recommend "Python" or "Javascript". They're both completely different languages that focus on completely different things, but they're powerful, flexible and easy to pick up for beginners as well as having loads of training materials. Python is generally a server side language (it runs on your computer directly) and Javascript is generally a client side language (it runs inside a browser when a user visits your web-page), but only generally. Javascript can run on your computer with Node.js (a library) and Python can render web-pages for a web browser with (web.py). It can't run inside a browser itself though, only Javascript can do that. If I was forced to choose I'd choose Python though, as finding errors in Python code is easier as well as it being much better suited for most things you'd want to learn programming to start doing. You can be productive and start solving problems almost immediately.

One of the main reasons to pick a popular programming language is the availability of "libraries". These are pre-prepared code chunks that can fulfill a certain function. For example PHP has a library called "Carbon" that's really good for date conversion, with Carbon you can turn anything a user types into a date, turn a date from computer time into almost any string format and do math between dates while also taking into account different time-zones (how many hours between 8AM in Sydney on Friday the 11th of May 2016 and 2PM in Singapore on the 10th of February in 2017). Web.py is another python library that will run a web server for you and generate web pages when people go to various URLs. Because the server is in python it can easily and quickly integrate with other Python libraries, for example "socket" and "hexlify" to generate a binary packet and send it to an embedded system (think robot arms) when an authorized user clicks buttons on a web-page.

By the way, if you decide to learn Javascript then you absolutely must learn jQuery as well. It's a Javascript library that's practically a language by itself and removes a lot of Javascript's bad points. For example Javascript runs differently on every browser and the implementation differs between different browser versions; for example IE 11, 10, 9, Edge, Chrome and Firefox all do Javascript slightly differently. jQuery checks the browser that's being used and provides different code depending on that to guarantee you get the expected result. You can still do this by hand but given how many possible browsers there are the amount of complexity will be hard to handle for any project that isn't completely trivial. It also provides a lot of functionality that replaces paragraphs of Javascript in a single line, so don't go without jQuery.

This post is already getting on a bit so let's end it here for now.

Chromebooks, why they’re great

Posted on Posted in Uncategorized

Chromebooks, why they're great

I've had a battered second-hand Chrome-book for about two years now. I originally meant to get Windows 10 on it but never succeeded for a number of reasons; however it does turn out to be situationally useful. What really amazes me is how incredibly low maintenance the Chrome-book is, I can leave it in a closet for 6 months, when I fire it up it's always snappier and more responsive than my quad-core desktop, if there are any updates, I'm prompted to install them with a tiny taskbar icon, and not a screen filling dialog that pops up while I'm typing with the "Reboot Now" button highlighted by default. This isn't bad for a machine that I bought for $200.

So it wasn't a surprise to hear that Google was discontinuing their Chrome-book range. They looked awesome and I'm sure they were great machines, but a Chromebook isn't a 'real' computer. With office-live you can do almost all your work on it (but, crucially, even office live is not feature equivalent with the desktop applications), but not quite all the things you would want to do on a real machine. So it's a problem when you're trying to sell Chrome-books for the same price as a decent full laptop. To put it another way, my 2GB, probably single cored Chrome-book is probably more responsive than my 8GB quad-cored laptop, but if they were both for the same price, of course I would choose the laptop, and an 8GB Chrome-book would just be pointless (at least for the moment).

So why the sudden love for Chromebooks? We spent quite a bit of time yesterday trying to diagnose a remote client issue. To the point where I had to log in to their machine to try and see why they were having issues. Not only was their personal laptop vastly underpowered but they were still running the various "helper" applications that came with an off-the-shelf machine. Those tend to be wasteful and poorly coded, so it's standard procedure to strip them out if you must get a laptop from Harvey Norman or Office Works. In addition they were also running two virus scanning tools on a machine without an SSD (you should scan at the entry point to your network if you don't have SSDs on your machines, it will be a significant slowdown otherwise). At the time their main issue was that our systems were running too slowly it was very tempting to simply mail them a $200 machine to access our systems with.

If we retained a client for a number of years because of it, we would still have come out ahead even if we never charged them anything for the free laptop.

Of course your clients might object to getting second hand machines, but brand new ones are also $200, though I see that prices are fairly variable across HP's different stores. However I did manage to find a 4GB Chrome-book here for only $200. If you need to demonstrate that a problem is with the client side systems, it may be worth keeping a stockpile on hand that you can mail out for a few weeks until the client is convinced and returns them.

Coin-Hive

Posted on Posted in Uncategorized

Coin-Hive and the less bleak advertising future

Most people have probably heard of Bitcoin by now; when it first came out they were each worth less than 1c and are currently up past $4000 each. They'll probably go up even further as they're proving a good hedge for personal savings for those living in places where the local economy is undergoing shocks, additionally the Russian government is also looking into Bitcoin mining as a good use for their excess electrical production that would normally be discarded.

Mining is the process where processed transactions are validated by a server through an exceptionally computationally intensive process and added onto that -coin's permanent record. For coins like Bitcoin that grow over time, this is also the point where the miner gains some new coins from the mining process (meant to allow the coins to grow over time and be naturally allocated between users as popularity grows) .

There are other coins as well, all of them focus on different attributes. For example Moneiro and Litecoin both use a different function that is much harder to run in parallel. The main difference is that both coins will remain mineable on regular processors instead of running on GPUs or ASICs like Bitcoin. This makes it much harder for a small group of people to posses all the mining machines at once and corner the networks' processing power.

One interesting aspect of Moneiro is that the hashing function runs very well in JavaScript. That's where coin-hive comes in. Their alternative to ads is to allow site owners to run a JavaScript library that mines Moneiro coins as users browse the site. The pay rate is supposed to be pretty good too, much better than conventional advertising and far less intrusive, the user doesn't have to think about it and none of their data is collected.

So far it seems to be taking off like a rocket. However the Coinhive team is getting worried since virus scanners are picking up on it, some Javascript blockers are also stopping the code automatically. Their new plan is to make it opt in. Personally I think that will probably kill it, and we'll end up with a replacement that does the same thing from a different company.

The problem with opt in is twofold.

  1. Users have been conditioned to click "No" to anything they're asked to do. Do you want to give your personal information? No. Do you want to sign up to our newsletter? No. Give us.. No. You don't even have to think about it anymore. So of course presenting them with a menu will just mean it gets clicked off before people even think about it.
  2. People never want to pay for anything. Wikipedia is the most used site on the internet, but how many people actually donate? By all accounts it's less than 5%. Same for most places on the internet. Even assuming that some people opt in, which less than 5% will. That just means that a small fraction of users are supporting the usage of all the others, which is hardly fair.

Not that I'm saying you should be running this stuff in secret, you do need to tell people what you're doing. Also it should come with throttling by default so it doesn't affect the user experience. Still, if it's meant to replace ads then it should be transparent and unnoticeable. Anything else and you're better off running advertising.

Of course when I found out it exists I had to try it out. I'm running it now and I can definitely tell it's a bit noticeable on the experience. It's annoying that the developers are focused on opt-in (which will immediately kill it's current rush of popularity)  and not on building in more effective throttling to limit the user impact.

Running a Python Script as a Windows Task

Posted on Posted in Uncategorized

Running the Python Script as a Windows Task

You will probably to want the preceding script to fire off at an interval, possibly on a Windows machine. Here's my method for setting up Python scripts to run as tasks on Windows systems. You will first want to set up a basic task in the Windows Task Scheduler.

Capture

You will need only one trigger for daily. Note that if you're using a task that you want to run slightly more often you will want to use the "repeating" option near the bottom, with a duration of "Infinity". For monitoring scripts I usually prefer to have them start to check something and then stop rather than running continually since this eliminates the chance that they might silently crash or fail to start at boot.

Capture2

For actions you'll want just one to run the application, something like the following.

powershell -command &{python <absolutepath>.py}

With powershell as the application and everything beyond that as the command passed to it. If you specify the operating directory you won't need an absolute path (which includes the drive letter), and this might help if your application uses relative pathing for the rest of its files.

Capture3

 

Scripting Habitica with Python

Posted on Posted in Uncategorized

Scripting Habitica with Python

Like a lot of people working in IT, I'm always curious to try new productivity tools and see if they help me be more organized and productive. One site that I have found helps me be more together is "Habitica", which allows you to list both daily habits and one off tasks like a quest menu, and gain virtual experience for ticking them off (and virtual level ups). Personally I think it's the best online todo list out there, and would probably be a hit even without the XP bar and "boss battle" functionality. Additionally there's a fairly good app for iOS available that has the same functionality as the web interface.

One other important thing.... it also has a public API and is scriptable. So for example you could expose an online tool that added tasks onto your daily checklist automatically when clients send an email or place an order. Or if you wanted to stick to a fitness schedule, but found the daily tasks to be too inflexible for the schedule you wanted to use.  In my case, I wanted to have schedule of slowly increasing difficulty that broke up tasks automatically past a certain threshold. The API can be a bit vague on how to actually send a query, so I've included my code here for anyone who wants to see an example of how to send a command that adds a todo.

import json
import requests
import path
import pickle
import os

intCounter = 20
intBreak = 40

strFilename = os.path.expanduser('~') + "workout.temp"

if os.path.isfile(strFilename):
    with open(strFilename, 'r') as f:
        intCounter = pickle.load(f)

intTempCounter = intCounter

while intTempCounter > 0:
    block = 0
    if intTempCounter >= intBreak:
        block = intBreak
        intTempCounter -= intBreak
    else:
        block = intTempCounter
        intTempCounter = 0
    dctJson = {"text":"Pushups - " + str(block), "type":"todo"}
    headers = {'x-api-user': '<user>', 'x-api-key': '<key>'}
    r = requests.post('https://habitica.com/api/v3/tasks/user', headers=headers, json=dctJson)
    print r.status_code
    print 'Workout Counter = ' + str(block)
        
intCounter += 1
with open(strFilename, 'wb') as f:
    pickle.dump(intCounter, f)

If you're curious my interpreter is the standard Anaconda python 2.7 installation available here. There will be a follow up post on automating power-shell commands in Windows, though if you're running Linux this could easily be solved via a cron job.

 

Windows 10 Configuration

Posted on Posted in Uncategorized

Windows 10 Configuration

I remember being told a while ago that if you're seeing advertising on the lock screen in Windows 10 it's because you've enabled it yourself so you've got no cause for complaint. By the way, this is a gigantic lie; it seems to be enabled on both blank installs and for anyone who uses a prebuilt system, which are most of our small business customers. I also remember the rejoinder "I thought I was buying an operating system, not a vertically integrated marketing platform".

The advertising does begin to wear thick after a while though, let's do a quick summary...

  • Advertising on the lock screen
  • Popups advertising Microsoft Office on the desktop
  • Microsoft OneDrive popups on the desktop asking if you want to log in "now" or "later"
  • Advertising Microsoft Edge when you try to change your default browser
  • Recommended apps being "suggested" on the start menu

This makes the telemetry and automatic updates even worse, because you know that more advertising can be added at any time, and with forced and automatic updates there's nothing you can do to stop them. This means that for anyone who is required to configure and support (or just use) Windows 10 desktops one of the more useful tools is going to be O&O Software's Shutup 10.

With it you can control most aspects of the Windows 10 telemetry experience, including the updates and Windows Defender. There are multiple provided levels of aggression, depending on how tolerant you are of Microsoft.

 

The first mode only mimics what settings users would usually configure by themselves, assuming they remembered where everything was and could be bothered to wade through each menu for each of their machines. A slightly more aggressive setting that also disables some of the features that are only accessible through registry entries but which is still completely safe and a third mode that disables even those things that require policy editing, such as Windows Defender and Windows Update.

Though if you want to insure that your machine runs at full speed and never reboots unless you upgrade directly, the third mode is the one you want to use. Especially if you use your system for work and can't risk an update making it unusable.

One word of caution. The highest mode also disables showing usernames on the lock-screen. This means that if you are running this on a machine that has a "strange" username, you'll want to insure that it's written down or else you may be stuck working backwards to figure it out; or booting the machine up with a linux livecd to pull the username off the windows drive. I recommend Fedora Linux Workstation Live for this operation. Mostly because it's the only distribution I've found that is both signed for secure boot and adept at handling different hardware out of the box.

(Part of) the bleak advertising future

Posted on Posted in Uncategorized

(Part of) the bleak advertising future

Whenever a browser accesses our homepage, it submits a request that contains a language code for the language it wants to see pages in. Currently our site only has an English version, but if it had different versions we would be able to use this system in order to provide the most appropriate version of the page for each user without having to ask them what language they wanted.

Well, I was looking through the languages requested from the users accessing our site and found something interesting. You'll see the language circled in the image on the right.

And I have to ask, why go to all the trouble? This is obviously a script masquerading as a browser for the purpose of hitting every single website and spraying its message everywhere. The problem is the message, it's more annoying than anything and doesn't exactly encourage me to go out and vote. On the other hand I have to admire the sort of twisted tenacity that thought this advertising method was going to be a good idea. It's original, I'll give them that.