pihole.org

Why I never read software license agreements

Posted by: chaiguy1337 on: March 23, 2009

law

In short, because I don’t believe I legally have to.

I believe in intellectual property. I believe in copyright. I believe the creator of a work has implicit rights granted by the law, and that no license agreement can change what is written in law. Therefore, the only thing a license agreement can legally do is grant me additional freedoms that are not provided implicitly by the law.

So long as I don’t break the law, or attempt to do anything with the software that would otherwise violate those implicit rights and freedoms, then there’s nothing the license agreement can make me agree to that isn’t already covered.

Let me make one thing clear: I am not a lawyer. I have never studied law. Yet I still believe in law. I believe order must be maintained by the people for the people. How nice would it be if we each got to decide which laws to abide by and which to ignore?¹

¹ In fact, it wouldn’t be nice at all: it would be anarchy. I hope that was obvious enough.

I also believe in democracy–not because it’s inherently the answer, but because it’s worked so far. The election of Barack Obama to the presidency of the United States has only served to strengthen my belief that democracy is still alive. But as soon as 50% of the voting population becomes either corrupt or ignorant, democracy falls apart. It is therefore not only our right, but our duty as citizens and humanitarians to have educated opinions and beliefs. It is our duty to care.

Since I don’t believe that using a piece of software made publically available is against the law, and since in many cases checking a box that says “I have read and agree to the terms of this license” is the only obvious way for that software to become usable, I also believe that I am in fact being forced to check that box regardless of whether or not I agree with what the license agreement states, and therefore in doing so, the law provides that I am not agreeing to its artificial (and unfounded) terms, making all such end-user license agreements void and pointless.

Now the use of someone else’s work is another story. This is not a freedom granted implicitly by the law, and therefore licenses are required for things like open source software–not because they are imposing restrictions, but because they are liberating existing ones. This is fully within the creator of a work’s right to do, and I know for a fact I, and many others, appreciate this.

Ok so I lied: there are times you do need to read a softare license. But unless I intend to bundle that person’s software with my own (which is not a freedom granted implicitly), or do anything else besides simply use the software I paid for or otherwise obtained by legal means, then I see no reason why I should be forced to read an agreement that only tells me what I already know, let alone agree to it.

So that is why I never read software license agreements.

Logan Murray is a software developer, not a lawyer. This article is a piece of opinion. Feel free to argue it. Please don’t take it as legal advice or legal fact.

OrangeNote 1.0 released!

Posted by: chaiguy1337 on: February 6, 2009

Go to orangenote.littlesoftware.ca and get free text clipping software for your PC. OrangeNote allows you to store text clippings (either entered manually or copied directly from text in another program) in a full-text index and find them by means of typing just a few letters.

 

OrangeNote™ 1.0

OrangeNote™ 1.0

OrangeNote Standard Edition is completely free for personal use and includes an array of handy features above and beyond what you might expect. Some examples: you can click a tag to instantly search for and display all sibling notes tagged with it; holding down modifier keys while the console (the system tray menu) is open will show any notes bound to those modifiers; typing a hotkey while the console is open will instantly open the note bound to that hotkey, and so forth. There are lots of nifty features to explore and discover.

If you ever find yourself typing something out again and again (who doesn’t?), OrangeNote can simplify your life and save you time by allowing you to type arbitrarily long (pages, if you want) text clippings into any program with a single keystroke of your choosing. You can choose any combination of the Control, Shift, Alt and Windows modifiers (or none) and any key thanks to a handy “keystroke recorder”—just click the “Add a hotkey” link at the top of your note and type the hotkey you want to assign the note.

The Professional Edition of OrangeNote is still in the works, but if you upgrade now for $15 you can synchronize your notes across multiple computers running OrangeNote, and upgrades are lifetime unlimited licenses, meaning you only pay once and can install the current and all future versions of OrangeNote Pro on as many computers as you like in your name. You can even upgrade for free thanks to a new service called TrialPay!

So please try it out, and most of all, please help spread the word! Remember, little companies have little advertising budgets! ;)

Tags:

piHole has its favicon back!!

Posted by: chaiguy1337 on: December 4, 2008

I’m delighted to announce that WordPress.com now (finally) supports custom blog favicons! This is an important step forward in what was previously a little blue circle-dominated world. Back when piHole started, I was using a custom installation of WordPress on my 1&1 Linux server, which allowed me to use my own favicon simply by placing a favicon.ico file at the root of my server, and tweaking a couple files. So I whipped up a little 4-bit blocky drawing of a pi symbol and a hole (fitting, no?) just for fun. Turns out I fell in love with its ironic simplicity and it came to be (in my mind at least) the perfect 16 by 16 pixel representation of my blog, and vicariously, myself.

Then came the day when piHole shut down because I had to move to ASP.NET to take advantage of my .NET skills on the web side of things, and sadly, WordPress was PHP. And so it remained for quite a while and I was without an informal outlet for my thoughts and ramblings.

Then one day while I was developing the early interface of OrangeNote I was just so thrilled at how things were turning out that I just had to tell the world, and so piHole was reborn. I decided to give the hosted service a try, even though I knew it had a few limitations. I’ll admit I first checked out Blogger, since I’d already had experience with WordPress (not that it wasn’t a good experience), but frustratingly, someone had already registered a “pihole” blog with Blogger! (Like, as if!) So I meandered back to WordPress and set up my very first WordPress.com blog, pihole.

I was delighted to discover that I could even reinstate the old pihole.org domain that I had lying around somewhere, which I promptly did, but was dismayed to learn that WordPress.com had no support for custom favicons whatsoever, and my little 4-bit drawing would have to stay buried in a directory somewhere, hidden from the world…

…until today (well, yesterday)!

favicon

How it feels to be the son of a model railroading star

Posted by: chaiguy1337 on: December 3, 2008

My dad made the cover of Canadian Railway Modeller this month! His layout, a fictional Canadian National Railways division based in the 80s, fills most of the downstairs of our house in Napanee, Ontario.

crm0001

In addition to the cover, the issue also features an article written by my dad, which includes six more photos from his layout.

Needless to say I’m extremely proud. I know how much care and devotion my dad puts into this hobby of hobbies and the recognition is well-deserved. Great work, dad!!

A note window makeover!

Posted by: chaiguy1337 on: November 30, 2008

Based on some user feedback, I’ve given the note window in OrangeNote a bit of a makeover. Margins have been slimmed down and the text area is now clearly defined, separating areas cleanly and making things feel more in place. I’ve also added a “pin” function (not shown) that allows a floating note window to be temporarily turned into a normal window complete with a task bar button.

Check out the evolution:

Before

Before

After

After

OrangeNote is currently available for beta testing at Wakoopa. Take it for a test drive and get a free registration!

The ugly side of localization in .NET

Posted by: chaiguy1337 on: November 26, 2008

I’m now convinced that .NET’s support for localization is very poorly designed indeed. While on the surface, the concept of localization (also referred to as internationalization) is a noble effort to enhance or make possible the use of computers by speakers of foreign languages, if it gets in the way of development it can be a very disruptive and problematic tool.

Take the following error an early beta tester of OrangeNote supplied me with:

System.Windows.Markup.XamlParseException: Verdien System.Windows.Data.BindingExpression kan ikke tilordnes egenskapen Opacity for objektet System.Windows.Controls.Border. Invalid real literal ‘1.0′  Feil på objektet System.Windows.Data.Binding i kodefilen OrangeNote;component/viewers/debugterminal.xaml, linje 122, posisjon 5.

Now the first and most obvious problem is that the error is not in English! While it’s true that error messages presented to the user should most certainly be translated to their native language whenever possible, exception messages are not oriented towards end users. The purpose of an exception is to convey information back to the programmer that a particular problem has arisen in the code of a program, with the intention of providing useful information to addressing and correcting the problem.

For example, when translated, the above reads roughly like this:

System.Windows.Markup.XamlParseException: Value of System.Windows.Data.BindingExpression can not be assigned to attribute Opacity for object System.Windows.Controls.Border. Invalid real literal ‘1.0′ Error in object System.Windows.Data.Binding in file OrangeNote;component/viewers/debugterminal.xaml, line 122, position 5.

Is this really something the end user needs to know? If not, why go through the trouble of translating it in the first place? Perhaps Microsoft expects my users to fix my bugs for me. Furthermore, the platform doesn’t even appear to provide any way to explicitly obtain an English version of an exception, further increasing the absurdity of the matter.

But this is only the beginning.

If you take a closer look at the problem the exception is describing you might notice something strange: .NET is complaining that “1.0″ is not a valid value for the Opacity property of a System.Windows.Controls.Border (which is a Double). Come again? 1.0 is a perfectly valid value for Opacity, unless you’re running your program on a locale that represents decimal values differently. That’s right, we can’t even program our app in English anymore! When simply changing the locale of your system affects what applications you can run on it, this is a clear indicator of a serious design problem.

Granted, this issue arises in some atypical scenarios involving dynamic parsing of lambda expressions, but the fact that it arises at all is the problem. What started out as a means to make applications more user friendly to foreign language speakers turned into a roadblock that can actually interfere with applications running at all.

In closing, my recommendations to Microsoft are as follows: First and foremost, eliminate the ridiculous and useless translating of exceptions into local dialects, and second, provide a more intuitive programming environment that takes into account programmer locale when running an application, not just user locale. These two things combined will make for a much more pleasant experience both for programmers and end users in multilingual scenarios.

See you next time.

The art of failure

Posted by: chaiguy1337 on: November 13, 2008

Just a quick post to show-off OrangeNote’s brand new crash recovery and reporting dialog. Ironically, this is something that you hopefully won’t be seeing when you run OrangeNote, but I’ve always found a friendly and elegant crash dialog to convey a sense of professionalism and polish on an application. If it’s going to crash, we may as well make it as pleasant an experience as possible.

crash1

OrangeNote™ includes the same error reporting system employed by FeedBeast™, which anonymously logs and records all unhandled exceptions that occur in the program so they can be quickly addressed in future updates. As always, submitting crash reports is completely optional.

OrangeNote™ is available for beta testing at Wakoopa, and anyone that gets involved in the project during testing will receive a complimentary license for their help.

In the past year or two I’ve come to dread the “yet another social networking site.” But recently I’ve come across three really nifty web portals that all have an aspect of social networking, but offer more to the mix than just a place for people to buddy up. Personally I’m not a huge fan of typical social networks because I find them dull and pointless, and time that could better spent elsewhere; I don’t care how popular they are. But these three portals are special in that, while still social, they are each of them geared towards a specific purpose, and the social aspect is simply an enhancement on top of that core idea.

 

Wakoopa (www.wakoopa.com)

Wakoopa

Wakoopa

 

Perhaps my favorite of the bunch is Wakoopa. Wakoopa is a startup from the Netherlands (Amsterdam) and is a social web site geared around desktop applications*. How does that work, you ask? Well you download a little lightweight tracker application (currently available for Mac and Windows with a Linux version under development) that sits quietly in your system tray and “watches” you. Now that might sound a little scary, but it only tracks what applications you run (and for how long), not what you do in them. Furthermore, Wakoopa is a member of the AttentionTrust Foundation, which upholds four key pillars of privacy and rights concerning what they call “attention”:

  • Property – you own the attention and can delete it at any time
  • Economy – your attention data is never sold to third parties
  • Mobility – your data can be exported
  • Transparency – you choose what data is used and displayed

What it all amounts to is a social network geared around the use of applications. You can see exactly what applications you use on a regular basis, and find out what applications other people are using. Wakoopa is adding new features all the time, and they are great at accepting and replying to suggestions you have for making the site better. You can suggest new features at any time by clicking an ever-present “Feedback” tab on the site.

You can see an example Wakoopa widget right here on pihole in the sidebar to the right. But the widget does not at all do the site justice, and you should really check it out for yourself. Just click the widget to be taken to my personal user page on Wakoopa (feel free to add me if you end up joining!).

*This isn’t entirely true anymore, as Wakoopa now tracks web applications too, but is still oriented heavily towards desktop applications.

 

UserVoice (www.uservoice.com)

UserVoice

UserVoice

 

The second site, UserVoice, is another that I’ve quickly grown attached to. It, too, is in its infancy, but already shows a great deal of promise. It’s basically a way to let users suggest new ideas and vote on them, so you can quickly find out what features your users really want, and which ones are only ho-hum. The publisher can add suggestions to see what end users think of them, or end users can add their own suggestions in a public setting that allows anybody to vote on anybody else’s idea. It could well be best way to come up with that next killer idea for your program, without even having to think it up yourself.

The premise is based on a limited vote mechanism where each user has ten votes per application (or “forum” as they call it). However the cool thing that makes the whole idea work is that votes are reclaimable. For example, if you change your mind, or find another idea that’s more important to you, you can take off votes from other ideas and redistribute them to your liking. When an idea is “accepted” (the company agrees it’s a good idea and promises to implement it), your votes are returned to you and you can redistribute them to other ideas as you like.

 

Get Satisfaction (www.getsatisfaction.com)

Get Satisfaction

Get Satisfaction

 

At first I thought GetSatisfaction was just the same thing as UserVoice, since it does have some overlap in that it allows end users to suggest new features and comment on each others’ ideas, but in fact there’s much more to it than that. Whereas a company’s UserVoice page is hosted and maintained by the company themself, GetSatisfaction is more a community of users than it is a company-hosted forum. In fact, users can even create a page for a company or product on GetSatisfaction without going through the company at all. GetSatisfaction allows companies to “claim” a page that has been created about them by the community, but even so that doesn’t give them control over it as is the case with UserVoice.

Personally I really like this idea because it empowers the end user, and gives them a place where they can discuss a company or product without worrying about whether their comments will be “accepted”. As such, you can expect a (for the most part) honest commentary about a product or company, and GetSatisfaction company pages even provide a way for end users to rate a company based on how likely you are to recommend the company to a friend.

* * *

As a developer and small company, I find something unique and valuable in each of them. I’ve already started a UserVoice page for OrangeNote, getting ready for the big release (which should hopefully be coming soon now), and am already excited about the ideas and feedback I’ll be receiving.

But perhaps the best thing about all three of these sites is they are all completely free. I encourage you to explore them on your own and discover three good examples of how social networking done right can actually be a great thing. If you’ve discovered another social site that offers more to the mix than just your typical buddy list or race to get the most friends, be sure to tell me about it in the comments.

See you in the cloud!

The perfect self-extracting executable

Posted by: chaiguy1337 on: October 21, 2008

Since the beginning of the FeedBeast project, I’ve been on something of a quest to find the perfect self-extracting executable maker, and I’m delighted to say I’ve finally found it! You may have already heard of it; it’s called WinRAR.

Windows software deployment is a complex process. Coming from the Mac and getting dumped into the deep end of Windows deployment, so to speak, it was quite a shock. There are a great many things you need to worry about just to get your software onto your end-user’s PC, and the headaches are multiplied if you’re deploying a .NET-based app like FeedBeast or OrangeNote.

One of the key concerns in such a deployment is making sure that the user’s computer has the .NET framework installed, before even beginning the installation of your product. This is done with the aid of what’s called a “bootstrapper”. [I'm not entirely sure where that term came from, but I reckon it has something to do with the idea of "strapping" something onto your program, which is exactly what a bootstrapper does.] It’s basically a second executable that sits alongside your installer (usually called “setup.exe”) that performs several checks to make sure your system has the necessary “prerequisites” for your program to run and/or install, optionally downloading and installing them if they are lacking.

The problem that arises from this configuration is we now have a whole directory of junk to distribute, not a nice clean singular installer file like we started with. In today’s web-deployed world, this is a real problem: users don’t want to have to download and extract a zip file just to gain access to the installer. This is where a self-extracting executable comes in.

A self-extracting executable bundles all of these pieces together into a zip file, but packages that zip file as an actual executable program, with enough logic built-in that it can extract its contents and launch the bootstrapper silently, so that it appears as though the self-extractor is the installer. This is the perception we want to give the user, because it makes things all that much simpler if they can just download a single executable file, run it, and install the program they’re trying to get.

However, it’s not always so easily achieved.

The thing is, while the idea of the self-extractor is simple, there are actually a lot of subtle points that need to be addressed when building the perfect one. First of all, we need to keep in mind that the self-extractor is what the user is going to see, not the (now embedded) installer. Therefore, the ability to customize its icon is quite handy and professional. But there’s more.

Here’s my checklist for capabilities in a self-extracting executable maker, all of which WinRAR excels at:

  • Silent mode – this is the ability for the self-extractor to be completely invisible to the user while decompressing an archive. If the archive is small, you don’t need to bother the user with yet another welcome dialog, where to extract to, and/or a progress dialog.
  • Extract to temporary directory – hand-in-hand with silent extraction is extracting somewhere that won’t get in the way. WinRAR has the ability to extract to the system TEMP directory, and even cleans up after itself when the installation is complete.
  • Ability to execute a file in the extracted archive – this is absolutely essential for building an installer wrapper. Some self-extracting archives are intended just for distributing files and such, not actually installing a program; but for our purposes, we need to have a way to launch the bootstrapper.
  • Custom icon – give your installer a professional look by providing your own file icon that can be seen in the web browser downloads and on the desktop.
  • Choose whether the executable requests elevation – installation generally requires admin privileges, but you don’t need to authenticate yourself right away. I prefer to defer elevation until the user actually clicks the Install button, which means the extractor doesn’t need to request elevation. If you’re installing from a bootstrapper though, requesting elevation from the get-go could mean only one UAC prompt rather than several.

There are also a ton more options such as the ability to customize the dialogs and logo and display a license agreement–there are seven tabs worth of customizations for self-extracting executables alone!

To put it plainly, WinRAR is well worth the $29 single-user fee. The self-extraction options alone are worth the price. However if even that is too steep for your tastes, there are some free options available, like 7-Zip and IExpress, but if you want the whole package, and my advice, go with WinRAR.

Next: How to write a simple but flexible bootstrapper using the awesome AutoIt scripting language!

Update: I just discovered that WinRAR self-extracting executables even support command-line argument passing! This means I can pass arguments to my WinRAR self-extractor and it will pass them along to the bootstrapper, which (depending on the bootstrapper) can even forward them onto the actual msi, allowing you to define variables that can then be interpreted by the installation engine! Awesome!

Taking charge of animation in WPF

Posted by: chaiguy1337 on: September 30, 2008

While working on OrangeNote, I decided that I wanted a nice modern spinner animation to indicate when a task (like a note search) was being performed asynchronously in the background. You see these things everywhere, and I personally find them pretty slick, but I couldn’t find anything out there already cooked up in WPF, and figured it would be a good learning experience (especially with regards to animation), so I decided to whip up my own.

It didn’t take long before I ran into a pretty solid limitation (or oversight perhaps) concerning animations in WPF: they are all specified with respect to a single property to be animated. In other words, there’s no global, top-down view of the state of objects involved in an animation–everything is fragmented and split up into parallel timelines. Time is innately global. It’s perhaps the most global of all things.

Suffice it to say I found this frustrating and confusing, so my quest to develop a spinning wheel animation quickly escalated into something much more: a new way to do animation in WPF.

I pulled up a copy of WordPad (OrangeNote wasn’t quite usable at this point) and jotted down some rough theoretical ideas for how I might achieve what I wanted. I wanted to keep it simple, and reuse as much of the existing infrastructure as possible, while focusing on enabling multiple properties to be animated together within the confines of a single sequential timeline. I decided the best approach was to think of transforming an ideal representation into an equivalent native representation that WPF could understand. It all has to do with factoring (yes, the same kind of factoring from high-school algebra). The idea is this: take a time-dominant form of representing an animation (where time is on the outside, and property states–represented by Setters–are on the inside) and turn it into the native property-dominant form that WPF is based on.

Turns out it worked. You can read all about it in my latest Code Project article. So if you’re stuck on a particularly complicated animation in WPF and are frustrated that you can’t think globally, check it out. And for that matter, tell your friends too. It’s completely free and open source, of course, and it even includes a spinning wheel demo project. ;)

final1

Adventures in theoretical computer science, with your host, chaiguy1337

What I’m Running

Software tracking

OrangeNote™ Users

Top Clicks

  • None

Blog Stats

  • 3,832 hits