Feed: Brad Jasper Latest Entries - AggScore: 80.8


Visitor Rating: 8.2 (10) (Rate)
Story Clicks: 602
Lenses: (Add|?)
Comments: (Log in to add)
Log in to add feed to you bookmarks.


For the past few months I've been trying to find other developers in Iowa. Its difficult, but not impossible. I've managed to find a few here in the Quad Cities, but was able to find many more in other parts of the state.

I was able to meet some people at the recent Iowa Code Camp and am now lucky enough to have found a Python User Group being started in Iowa City.

The first meeting is tomorrow, so if you're in the area and want to find out more, please join the group.



Date Published: May 29, 2009 - 11:19 am

For the past couple of months I've been working on migrating my old website from a Wordpress based setup to a custom site written with Django.

Now that Summer is here, I've had some time to wipe off the dust and get everything launched.

If you notice any bugs, contact me.



Date Published: May 21, 2009 - 5:17 pm

Lately everyone seems to be down about the Economy. Recent graduates can't find jobs. People are being laid off in enormous numbers. Everything is very unstable, and no-one knows what's going to happen next.

But I'm hopeful. I'm hopeful because we're on the downside of a curve. The bubble just popped in the Tech world, and all the easy VC money that goes with it is gone. This means people are bootstrapping, and its a wonderful thing. Business plans and first month profits to boot!

Back to Reality

This is a good thing because it brings people back to reality and quickly erases the hype of a sustainable freemium model. The Tech world gets so caught up in its own echo chamber its reminiscent of a mini-hollywood filled with its own mini-cewebrities. The recent downturn has let people rediscover the value of business models that aren't based on advertising and "getting really big"--but I digress.

When "big ideas" stop getting VC money, lots of developers either leave the space or kill their ideas. This is a huge opportunity for the rest of us. Suddenly, there's way less competition. But not only that, there is way less VC-funded competition--even better.

I Can't Bootstrap My Idea, I Need VC Funding

Some people say their idea needs VC funding. Maybe. Some ideas need funding. But the reality is, many startups take money because its there. It helps accelerate growth and lets you work on your startup full-time until you become profitable. There are many ways to move into a competitive high-priced market, be creative.

Taking VC money is sexy and all the cool kids are doing it, but there are other ways. There's nothing wrong with working 10 hours a week on a project. Your lack of time will let you focus on what's really important. Cutting out bloat will make you leaner, quicker and better.

Now is the Time, Do it.

Launch early, get feedback, iterate quickly. Fund it with your existing job and work on it in your spare time. Have no doubt, smart developers have their heads down working on their next project. By the time everybody else starts looking for VC money, they'll already be riding the wave.



Date Published: Feb 14, 2009 - 7:39 am

The Django Admin interface is the best thing since sliced bread. Its flexible enough to handle 80% of everyday needs and built so that handling the other 20% isn't too bad. Generally speaking, its pretty good for entering data.

Little things like setting default fields can dramatically speed up the data entry process. When you repeat a process hundreds of times, a 30 second improvement can be significant.

Which is why it bugged me that I couldn't set default values for my admin.TabularInline field:

picture-3

The result was an extra minute for every host I was entering in to Hosting Choice.

After speaking with some people in #django on irc.freenote.net I realized Greasemonkey would be the best way to tackle this problem. Apparently, sub-classing the admin.TabularInline class is more trouble than it's worth.

The Greasemonkey solution is a little dirty, but it definitely gets the job done. It could have make the script shorter, but I opted to include jQuery--because I find Javascript without jQuery these days maddening.

The end result is this: picture-4

Here's the script in all its mighty. To set your own default values, adjust the defaults dictionary at the top. The keys are jQuery selectors and the values are whatever your default value is.

   // ==UserScript==
   // @name           Django Default Admin
   // @namespace      /django_admin
   // @description    Script fot setting default values in the Django Admin
   // @include        http://hosting-choice.com/admin/catalog/host/add/
   // ==/UserScript==

// Syntax is {#id, 'default value'} defaults = { '#id_feature_set-0-type': 'Price', '#id_feature_set-0-value': 6.95, '#id_feature_set-1-type': 'Bandwidth', '#id_feature_set-1-value': 0, '#id_feature_set-2-type': 'Space', '#id_feature_set-2-value': 0}

// Attach jQuery var GM_JQ = document.createElement('script'); GM_JQ.src = 'http://jquery.com/src/jquery-latest.js'; GM_JQ.type = 'text/javascript';

document.getElementsByTagName('head')[0].appendChild(GM_JQ);

// Check if jQuery's loaded function GM_wait() { if (typeof unsafeWindow.jQuery == 'undefined') { window.setTimeout(GM_wait,100); } else { $ = unsafeWindow.jQuery; letsJQuery(); } }

GM_wait();

function letsJQuery() { for (id in defaults) { $(id).val(defaults[id]); } }


Download it on Userscripts



Date Published: Feb 05, 2009 - 11:43 pm

Well the inevitable has happened. I have the urge to move my site from a Wordpress page to a custom Django site. Unfortunately, this means migrating.

I searched for good Wordpress to Django migration scripts but couldn't find any, so I decided to write one and release it for everyone else to use.

Its in a very early state but it should help you get the job done. I wrote exactly what I needed, which didn't include comments, excerpts or other less used meta data.

It should be fairly easy to expand however, so fork it and give it a shot.

Download at GitHub: http://github.com/bradjasper/django-wordpress-parser/tree/master



Date Published: Jan 31, 2009 - 9:07 pm

Exactly 4 weeks ago classes ended. I knew I wanted to create a small website over Winter break, but I didn't know what. I started with a completely different idea, and switched twice before sticking with Hosting Choice, a hosting review site. Its midnight, the night before classes start--but I'm launching the site on schedule.

The concept was simple, create a hosting review site that was run by the users. It would rely entirely on user ratings to rank hosts. This would allow me to step away from the editorial side and keep the site unbiased.

I took a week and a half vacation during the break and worked lots of overtime at my full-time job, so Hosting Choice was created in the wee hours of the night after a long days work.

But overall I'm satisfied with the result. The best part of the process was deciding which features to not put on the site. By having a firm deadline I was able to cut away a lot of unnecessary features that would have delayed the launch for weeks or months.

If you have some time, please visit Hosting Choice and add reviews for any hosts you've used.

Its time to put the nose to the grindstone again, classes start in 10 hours.



Date Published: Jan 14, 2009 - 5:24 am

I've had some issues getting LibTidy and uTidyLib (Python wrapper) installed and figured I would post my solution as I saw zero Google results on this.

The error I kept getting was:

OSError: Couldn't find libtidy, please make sure it is installed.

Here's how I found how to get around this, if you have a better solution please post in comments.

First install LibTidy from source:

cvs -z3 -d:pserver:anonymous@tidy.cvs.sourceforge.net:/cvsroot/tidy co -P tidy
   cd tidy
   sh build/gnuauto/setup.sh
   ./configure
   make && sudo make install
   


This places LibTidy in /usr/local/lib. Unfortunately uLibTidy doesn't recognize the generated library. A simple symlink will fix the problem:

sudo ln -s /usr/local/lib/libtidy.dylib /usr/local/lib/libtidy.so


Now uLibTidy is able to find LibTidy:

In [1]: import tidy


Good luck! If you're still having issues make sure /usr/local/lib is in your $PATH environment variable.



Date Published: Nov 14, 2008 - 11:23 pm

Update 10/11/09: Google has changed the way Insights works and now requires a user to login to download this information. This is planned, but hasn't been implemented yet.

Google Insights provides a lot of interesting information to see search trends over time. It provides information like general search volume, related keywords, top countries and much more.

I was working on a project that needed access to this data, so I developed a simple python module for querying a given keyword. I'm releasing it here because I thought others may find this data useful.

Here are some examples on how you would use this plugin:

>>> import insights, pprint
   >>> oInsights = insights.Insights('guitar strings')
   >>> oInsights.section('trend')
   {'2004-01-04': '74',
    '2004-01-11': '71',
    '2004-01-18': '82',
    '2004-01-25': '74',
   ...
   ...
   }
   >>> pprint.pprint( oInsights.section('related') )
   {'12 strings guitar': '10',
    '7 strings guitar': '5',
    'acoustic guitar': '90',
    'acoustic guitar strings': '85',
    ...
   >>> pprint.pprint( oInsights.section('cities') )
   {'Atlanta (United States)': '81',
    'Birmingham (United Kingdom)': '97',
    'Chicago (United States)': '90',
    'London (United Kingdom)': '88',
    'Los Angeles (United States)': '100',
   ...
   >>> pprint.pprint( oInsights.section('rising') )
   {'7 strings guitar': '+20%',
    'classic guitar strings': '+20% ',
    'dr guitar strings': '+40% ',
    'dr strings': '+30% ',
   ...

Its important to note this module only works with one keyword. It would be fairly simple to get it working with multiple keywords, but my project only required one.

Also, I'm releasing this under Beerware License.

That's all there is to it. Any questions/bugs please submit in comments.



Date Published: Oct 18, 2008 - 7:55 pm

I sold MacTips. I may have more thoughts on this in the future. Lots of lessons from MacTips.



Date Published: Aug 22, 2008 - 2:27 am

I received this comment on MacTips today:

I hate to say it, but thats not a tip. Everyone knows that. You havent been posting REALLY intresting tips lately and you dont post at least one tip a day. Mactips and the Mactips Widget are getting very boring. I used to look forward to getting a new tip for my Mac everyday after school, but now I dont. Instead, I'd rather go to Macworld.com for tips and news about Apple and Macs.

Ouch. He has point, but he was angry so his tone reflected that.

I replied with the following e-mail:

XXX,
Thanks for taking the time to post a comment on MacTips.


I welcome all criticism along with suggestions--and I definitely deserve yours.


I would disagree on your first assessment that the entry I posted is not a tip. Many users never use the right-click menu and even fewer know that holding Option changes certain preferences.

While you may think this is fairly obvious--this is brand new to other users.
Your second piece of criticism is valid, however--and I tried to acknowledge this in the post.

Some big changes are happening behind the scenes--and I promise regular (quality) content is coming soon.


May I suggest taking a look through our archives or popular posts to hold you over for the next week or so?

http://www.mactips.org/popular/

http://www.mactips.org/archives/


Thanks,Brad

Easy and to the point. This was his response:

Oh, please excuse me if I was rude. I mean that in the most sincere way posible, now that I really read what I said, it didnt sound all that nice :-/

Definitely a lot better response.

The point is I care what he thinks. I've written about this before in Building Your Website One User at a Time.

This is something I feel will not only help the site improve, but also help establish a sense of community.

The bottom line, listen to your users.



Date Published: Jun 06, 2008 - 3:35 am
u-mp2718 serv 4.9638 seconds to generate.