Skip to main content

Posts

Showing posts from 2013

Dropbox on Linux Mint 15

I noticed on Linux Mint that the Dropbox icons and menu options don't appear in my Dropbox directory. I did a little research and this is because by default when you install Dropbox it'll assume you're using Nautilus as your file browser, but by default Linux Mint uses Nemo (which is a fork of Nautilus).

Luckily it's an easy fix:
sudo apt-get install nemo-dropbox

Then quit all running instances of Nemo:
nemo --quit

When you open up your Dropbox directory again you'll see the familiar Dropbox icons.

FreeTDS on Linux Mint 15

If you're trying out or moving to Linux Mint and you're used to setting up FreeTDS on Ubuntu, you'll find that things are just slightly different on Mint.

Quick and easy fix:
sudo apt-get install freetds-bin tdsodbc

Also note that libtdsodbc.so in a different place on Mint than on Ubuntu, so instead of it being located at /usr/local/lib/libtdsodbc.so it'll be here:
/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

Generating CSV Files in Django

This is a very quick tip since it's so simple but I did run into one little wrinkle with string encoding while doing this so I thought I'd share.

I had a request to generate a CSV of all the Old Dog Haven "Walk for Old Dogs" registrants so the fine folks managing the event can do email blasts, print registration sheets, and the like.

Since Python has CSV functionality as part of the standard library the generation of the CSV data was very easy, and since the Django HTTP Response object was quite wisely designed to behave as a file-like object, writing the CSV data to the HTTP response was dead simple as well.

The only thing I ran into while writing the data to the response object was there were some non-ASCII characters in the database which threw this error:
'ascii' codec can't encode character u'\xe9' in position 4: ordinal not in range(128)

To get around this it was just a matter of tacking .encode('utf-8') to the end of the string objec…

Custom Managers in Django

I had to add a bit of functionality to the Old Dog Haven "Walk For Old Dogs" registration and sponsorship site today (feel free to sponsor me!), specifically a way for the good folks running the event to see an aggregate total of the sponsorship dollars by registrant.

Here's the Django models for Registrant and Sponsor:
Pretty straight-forward -- main thing to notice is that Sponsor has a foreign key relationship with Registrant as opposed to the other way around. And yes, in its current incarnation sponsors can only sponsor one registrant; if they want to sponsor multiple registrants they simply create another sponsor record. (It's agile baby -- release early and often! Multiple sponsorships can happen next year!)

While calculating the total sponsorship dollars by each registrant could be handled via the Django ORM, I decided to use the opportunity to execute SQL directly in a function in a custom manager.

You can read more about custom managers in the Django docs,…

django-stdimage Custom Fields and South Migrations

I'm putting the finishing touches on my latest Django site (a registration site for a dog rescue charity walk) and part of the functionality is the ability for users to upload photos. Since most people will simply snap a photo on their cell phones and upload it, and since cell phones these days take some pretty large pictures, I want to resize the images to a standard size of 800x600 when they're uploaded and also create a thumbnail.

As with most things in the Python/Django world there's a library that does exactly what I need, specifically django-stdimage, which provides a custom model field to handle resizing photos and creating thumbnails.

After installing django-stdimage via pip, updating my model class to use the new form field, and then doing a South migration, I ran into this error:

 ! Cannot freeze field 'supporter.registrant.photo'
 ! (this field has class stdimage.fields.StdImageField)

 ! South cannot introspect some fields; this is probably because they are…

Downloading from eMusic on Linux

eMusic is an excellent, long-standing digital music store and one I've been a member of for years, but to say they aren't friendly to GNU/Linux would be putting it mildly. They used to have an official (in permanent beta, but still) download manager but they've since done away with it so there is no official way to download music from eMusic on GNU/Linux.

Since I do some other audio/voiceover stuff on Windows it wasn't a huge deal for me to suck it up and download from eMusic on Windows, but that has since stopped working for no apparent reason. I click download, the download manager pops up, and nothing happens. Perhaps not coincidentally this is precisely the time the Google Music Manager stopped working as well, and also when my Windows Media Center PC stopped downloading guide data. Methinks a Windows patch of some sort borked all this stuff in one fell swoop but I'd rather not be using Windows anyway so I took it as a wake-up call.

Thankfully there's an un…

Generating and Sorting on a Transient Property in a Django Model Class

I ran into an interesting little issue in a Django application today that led to what I thought was some pretty powerful stuff in Python and Django that I hadn't had to use before, so I thought I'd share.

I'm working on an application that to keep it generic I'll simply say deals with requests from users, and these requests require various levels of approval depending on the type and severity of the request.

Here's a basic Django model class that contains the fields relative to this example:


Basic stuff so far.

Where the wrinkle comes in is there is a page in the application that lists the requests ordered by date, but the date by which each request will be displayed and sorted depends upon the impact of the request as follows:
minor: use datetime_supervisor_approvedmajor: use datetime_admin_approvedsevere: use datetime_president_approved To state the issues succinctly:
The date on which I want to sort varies for each requestI don't want to store an additional, r…

Installing and Configuring NextPVR as a Replacement for Windows Media Center

If you follow me on Google+ you'll know I had a recent rant about Windows Media Center, which after running fine for about a year suddenly decided as of January 29 it was done downloading the program guide and by extension was therefore done recording any TV shows.

I'll spare you more ranting and simply say that none of the suggestions I got (which I appreciate!) worked, and rather than spending more time figuring out why, I decided to try something different.

NextPVR is an awesome free (as in beer, not as in freedom unfortunately ...) PVR application for Windows that with a little bit of tweaking handily replaced Windows Media Center. It can even download guide data, which is apparently something WMC no longer feels like doing.

Background I wound up going down this road in a rather circuitous way. My initial goal for the weekend project was to get Raspbmc running on one of my Raspberry Pis. The latest version of XBMC has PVR functionality so I was anxious to try that out as a …

Setting Up Django On a Raspberry Pi

This past weekend I finally got a chance to set up one of my two Raspberry Pis to use as a Django server so I thought I'd share the steps I went through both to save someone else attempting to do this some time as well as get any feedback in case there are different/better ways to do any of this.

I'm running this from my house (URL forthcoming once I get the real Django app finalized and put on the Raspberry Pi) using dyndns.org. I don't cover that aspect of things in this post but I'm happy to write that up as well if people are interested.

General Comments and Assumptions

Using latest Raspbian “wheezy” distro as of 1/19/2013 (http://www.raspberrypi.org/downloads)We’lll be using Nginx (http://nginx.org) as the web server/proxy and Gunicorn (http://gunicorn.org) as the WSGI serverI used http://www.apreche.net/complete-single-server-django-stack-tutorial/ heavily as I was creating this, so many thanks to the author of that tutorial. If you’re looking for more details on …