Category Archives: Freelancing

Sys/DB Admin and Coder Seeks Others To Build Web “A-Team”

UPDATE: There’s no location requirement. I kind of assume that I’m not going to find the best people by geographically limiting my search for potential partners. :)

Me: Live in Princeton, NJ area. Over 10 years experience with UNIX/Linux administration, databases and data modeling, and PHP/Perl. About 3 years experience using Python for back-end scripting and system automation, and less than a year of Django experience. Former Director of Technology for AddThis.com (it was bought out), Infrastructure Architect at cs.princeton.edu, and systems consultant/trainer. Creator of Python Magazine, former Editor in Chief of both php|architect *and* Python Magazine, and co-author of “Linux Server Hacks, volume 2″ (O’Reilly).

You are one of these:

  • Web graphic designer who has worked on several web-based projects for clients in various industries, understands current best practices and standards, has the tools and experience necessary to create custom graphics, and has some familiarity (secondarily) with PHP and/or Python, Javascript and Ajax. If you regularly make use of table-based web designs or ActiveX controls, this isn’t you.
  • Hardcore web developer with at least 6 years experience doing nothing but web-based projects using Javascript and (at some point) *both* PHP and Python, and has worked with or has an interest in Django, Cake, and other frameworks, and understands that client needs often don’t coincide with the religion of fanboyism. Knowledge of Javascript, Ajax, web standards and security is essential here. If your last “big project” was volunteer work to build a website for your kid’s soccer team, this isn’t you.
  • A generalist webmaster (sysadmin/db admin/scripter) with at least 6 years experience working in production *nix environments with good familiarity in the areas of high availability, web servers (specifically Apache), proxy servers and monitoring, and has worked with/supported users like the ones mentioned above on web-based projects. If you have to look at the documentation to figure out how to implement a 301 redirect, this probably isn’t you.

Experience working on a team in larger projects with multiple people would be good. Note that I’m looking for people to partner with on projects, I’m not hiring full time employees. Future partnership in a proper business is certainly a possibility, but… baby steps! I do have a couple of domains that would be great for use with this kind of project if it ever progresses that far :-)

I know that other people are out there looking for people to partner with on projects, but there doesn’t appear to be a common place for them to interact. Maybe that can be a project we undertake together :)  — if there *is* a place where people meet up for this kind of thing, let me know!

Let’s have fun, and take over the world! Shoot me an email at “bkjones” @ Google’s mail domain.

The Neverending Search for “Free” Wi-Fi

So, I’m a freelancer. I work a lot on remote machines as a system administrator, a troubleshooter of LAMP stacks and web applications, etc. I also do a little bit of web development (but not design. I’m a horrible designer). I work from home a lot. I used to work outside of the home a lot, but what I found is that “free” wireless access has so many downsides that it’s just easier to stay home. I live in the Princeton, NJ area, and have attempted to get free wireless access at Barnes & Noble, Borders, Panera, Starbucks, and a few local businesses. Here’s what I found:

Panera Bread

Yes, the wireless access is free, but it kicks you off for TWO HOURS during the lunch rush. What makes this truly horrible is that there isn’t (as far as I know) an option to *pay* for your wireless access and bypass this limitation. The odd thing is that it seems to backfire on them: if I were able to browse my RSS feeds while I ate a nice Panera lunch, I’d probably stick around. As it stands, if I go there at all, I leave at lunch time and either go home or somewhere else. I’ll eat breakfast there because they don’t turn off wireless at that time.

Turning off wireless is just not acceptable for someone who needs it to be on pretty much all the time. Clearly, Panera isn’t catering to people who are going to hang around there all day, but maybe they should: if they didn’t turn off wifi, I’d spend more than double what I spend there in a given day. I get a coffee and maybe a pastry in the morning, but if wifi stayed on, or I had the option of paying for it, I’d add to that a Frontega Chicken sandwich, maybe a bread bowl of soup in the winter, and at least two lemonades.

But now… I go somewhere else.

Barnes & Noble

Barnes & Noble recently announced that they now have free wifi. The problems with going to BN for this are many. First, going free increases demand for free wifi, which of course increases the demand for power outlets. There are surprisingly few at the location near me. The cafe area in particular hasn’t got even one single power outlet.

But power availability isn’t the worst of it. The worst part is that AT&T runs the wifi access, and as soon as I saw that, I knew something was going to be completely wrong, and I was right: AT&T drops your DHCP lease every 2 hours. EVERY TWO HOURS. There’s no warning dialog either that pops up to say “hey, we’re gonna drop you in 10 minutes”. Things just disappear. Then you have to visit the registration page again and click a checkbox and a button to be reconnected.

Probably ok for a casual email checker, but not for anyone looking to hang out for a while and do “real work”.

Starbucks

Ugh. Forget it. AT&T runs this one as well, and when I asked at my local store how to get on, they asked about my Starbucks card. I have one of those black cards that they call a “Gold Card”. Whatever. The numbers are worn off of it, and I only use it as a discount card — it’s not registered. So it needs to be registered, and then I have to WAIT 48 HOURS, and then I’m entitled to 2 hours free wifi per day. But to register, I have to go through some procedure, and they had to find a way to retrieve the last 4 numbers on my card, because they put the numbers in the area that gets swiped (bright), and they’d rubbed off.

I considered getting one of the new mini cards, which has numbers embedded underneath the plastic, but it was recommended that I stick with only one card or the other. There was seemingly no valid reason for this. I didn’t understand the recommendation, but whatever.

The alternative is to pay for it on the spot, which I might’ve done, but the wifi was down when I tried to connect.

Anyway, this all seems rather messy, doesn’t it? Between my iPhone, Barnes & Noble, and Starbucks, AT&T is making nothing so clear as the fact that they don’t want my money.

Borders

I’m actually writing this post from a Border’s bookstore. The wi-fi here IS NOT free. Know what that means? Well, it means I have to pay for it of course, but it also means there’s almost nobody here. In a cafe area that probably seats 60 or more, at 10:15AM, there are 4 people here, and I’m the only one with a laptop.

Wi-fi here is $8 for a day pass, which isn’t horrifically bad. What *is* pretty bad is that almost all of the chairs here are made of 100% hard wood with no padding of any kind. What is HORRIBLY HORRIBLY bad here is the food. If it’s advertised as edible, DON’T EAT IT. I mean bad. There aren’t English words to describe the badness. It’s No Bueno™. The selection of lunch-worthy food is super small, too. And bad. Did I say the food is bad? It is.

So I pay $8, I get access for 24 hours, and I can leave and walk across the parking lot for lunch, come back, and sign right back in. Not bad. If I had my lap desk with me, I could even sit in one of the well-padded armchairs. I feel a little guilty spending almost no money here, but I’ve *tried* to spend money on food and drinks, and I’ve really just been horribly disappointed. The only thing I’ll ingest here is the coffee. The saving grace for my conscience is that I’m paying for the wi-fi, so I don’t feel the need to spend money on stuff I might not otherwise be interested in.

The Locals Win It

Two local businesses stand out in terms of their free wifi offering. A local person that it turns out I actually know opened up a Camille’s Cafe, and there’s a local coffee shop in Hopewell that I am slowly starting to adore.

Camille’s is closer to my house, but it has, for the entire place, something like two power supplies, and they’re not placed very conveniently. However, the wifi is Really, Truly Free, and that’s good. The food is also good, and you can get healthy stuff there, so I don’t have to buy something deep-fried or made of 85% refined sugar to justify my being there sucking up their wifi.

The local coffee shop is perhaps my favorite place. The wifi is Really, Truly Free, and I would call the power situation “adequate”. The coffee and the food are both really good, and you can also get healthy stuff there. The only problem that exists at this place is parking, but usually I can get around that without too much trouble.

You Might Be a Freelancer…

  • If you’ve ever used your lunch hour to vacuum your pool…
  • If you’ve ever discounted your rate to work on something really cool…
  • If your spouse has ever complained about the mountain of receipts in the basement…
  • If you work 8 hours a day… and 3-5 hours a night…
  • If you’ve ever spent an entire day shopping for that perfect pair of flip-flops…
  • If you fold laundry during conference calls…
  • If you own as many books about “Consulting Success” and Accounting as you do about your area of expertise…
  • If you’ve ever had to tell your dog to get out of your “cubicle”…
  • If you’re able to accurately rate the quality of free wifi at any place within a 10-mile radius…
  • If you’ve ever tried to see just how many client projects you could tackle at once without your brain exploding or divorce proceedings…

…You Might Be a Freelancer.

LinuxLaboratory woes, Drupal -> Django?

Ugh…

So, today I tried browsing to one of my sites, linuxlaboratory.org, and found a 403 “Forbidden” error. Calling support, they said it was a “billing issue”. Well, I pay my bills, and I haven’t received any new credit cards, so I’m not sure what that’s about. Further, they haven’t contacted me in any way shape or form at all in a very long time, and I’ve had the same email addresses for years now. Last time they failed to contact me, it was because they were sending all of the mail to “root@localhost” on the web server.

What’s more, the tech support guy, having determined that this wasn’t a technical but an administrative problem, transferred me to a sales person who was not there. I left a message. That was 3 hours ago. So I took matters into my own hands and changed the name server records to my webfaction account, and linuxlaboratory.org now points to an old test version of the site that uses Drupal.

It’s Over Between Us…

Drupal holds the record for the CMS that has run LinuxLaboratory the longest. Since its launch in 2001, LinuxLaboratory has used all of the major, and some of the minor open source PHP CMSes. Drupal gave me something very close to what I wanted, out of the box. Nowadays, Drupal is even nicer since they redid some of the back end APIs and attracted theme and module developers to the project. I’ve even done some coding in Drupal myself, and have to say that it really is a breeze.

But the problem is this: I’m a consultant, trainer, and author/editor. I am an experienced system admin, database admin, and infrastructure architect who makes a living solving other peoples’ problems. I really can’t afford to have something that is super high overhead to maintain running my sites. With Drupal releasing new versions with major security fixes once per month on average, and no automated update mechanism (and no built-in automated backup either), it becomes pretty cumbersome just to keep it updated.

This is in addition to my experiences trying to do e-commerce with Drupal. I tried to use one plugin, but soon found myself in dependency hell — a situation I’m not used to being in unless I’m on a command line somewhere. So, out with Drupal. I know it well and I’m sure I’ll find a use for it somewhere in my travels, but not now, and not for this.

Is Django the Future of LinuxLaboratory?

So I’m thinking of giving Django another shot. In fact, I thought I might try something new and interesting. Maybe I’ll build my Django app right in front of everyone, so that anyone who is interested can follow along, and so people can give me feedback and tips along the way. It also lets me share with people who have questions about a feature I’m implementing or something like that.

For fanboys of <insert technology here>, know this: I’m a technology whore. I consume technology like some people consume oxygen. I love technology, and I get on kicks, and every now and then, a “kick” turns into a more permanent part of my tool chest. Python is one such example. I’ve done lots with Python, but have never really made friends with it for web development. I got a webfaction account specifically because they support Python (and Django). I’ve done nothing with it. Now I think I might.

But not to worry! I own lots of domains that are sitting idle right now, and I’m considering doing a Ruby on Rails app for one of them, and I’m dying to do more with Lua. There’s only so much time!

Webfaction Django Users: Advice Hereby Solicited

So if you’re a webfaction customer using Django, please share your tips with me about the best way to deploy it. I’ve used nothing but PHP apps so far, and found that rather than use the one-click installs webfaction provides, it’s a lot easier to just choose the generic “CGI/PHP” app type and install the code myself. This allows me to, for example, install and update wordpress using SVN. Is Django a similar story, or does webfaction actually have an auto-upgrade mechanism for this? How are you keeping Django up to date?

Thanks!

I’m Offering Pro-Bono Consulting

I started my company about a year ago, but I’ve been doing consulting for a long time. In fact, my first job in the IT industry was working for a consulting firm. Before that, starting as far back as grade school, I was involved in a lot of volunteer civic and community service activities. I admire companies who get involved in their communities, or even outside of their communities, wherever help is needed.

As part of my business plan, I’ve put in place a policy of accepting one pro-bono consulting project per year. So far, I haven’t gotten any requests for free consulting work, so here’s my public shout out to let you know what types of services are available:

1. Speaking or Training. My specialties are things like advanced Linux administration and SQL, but I’m perfectly capable of delivering content for people who just need to know how the internet works, or want to know more about social media.Training, funny enough, has been the bulk of my business for the past year.

2. I can help with MySQL performance tuning on *nix systems, including finding hotspots related to the design of the database itself, or how your application code interacts with the database. If it happens that your MySQL server is performing poorly due to an underpowered system, I can also pinpoint which resource is dragging on the performance of your database.

3. If you just need random scripts written to perform *nix system administration tasks, I can consult with you about the requirements and write them for you. Note that while I can script in several languages, my preference for anything longer than 40 lines of code is Python.

4. I can build PC’s, install networks, set up firewalls and wireless routers, and all of the normal “office IT” functions, but note that my consulting is Linux consulting. I don’t work with Windows (well, I do, but not for free) ;-)

5. If there’s some other thing you’ve seen me blog about here, chances are I’ll be willing to perform a pro-bono consulting engagement to do it for you, or show you how to approach a problem, a large project, a migration, automation, monitoring, security or whatever.

Unless you happen to live within commuting distance to Princeton, NJ, work will be done remotely :)

Please email your request to jonesy at owladvisors dot com. Include your organization’s name, your contact info, and as much detail about the project and what your organization does as possible. The decision of which project to take on will be based solely on the information in your request!

Training Patterns

So, I’ve been talking to some friends about training. I work with several firms in various aspects of training. Usually I’m actually delivering training, but in some cases I’m just helping to produce the training content, and occasionally I actually help build a full-fledged internal training regimen. I love doing this work, because it lets me draw upon my work experiences going all the way back to age 14!

No, seriously. Most jobs have some form of training, and even if that training results in you doing some relatively menial job like being a waiter or a shipping clerk, it’s still training, and at a high level, the idea behind that training isn’t much different from the technology training I deliver for my clients. I have also gotten some fantastic ideas about how training can be implemented by remembering the training I received, or talking to friends who worked with me, or who worked at other jobs at the time which I assume had some form of training.

There are a couple of interesting patterns that pop up a lot in training that I have not seen implemented in IT shops that I think could work fantastically well. At some point, I’ll write about them (is that a book idea? Would you read it? Let me know), but for now, I actually want to hear from YOU!

Have you ever received training so good that you felt as qualified as the trainer himself to do the job at hand? Do you remember a training experience that had you seeing light bulbs seemingly every five minutes? Is there training you received that was so good that you still remember it over 20 years (or $long_time) later? I’d really like to hear about it. If you don’t want to put it in the comments, please send it to me via email at bkjones at gmail dot com.

My first screencast: The Linux Boot Process

So, I’ve taught the Linux Boot Process as part of a couple of different training courses now, and I thought I’d share it with the world in the form of a screencast (it’s hosted at my co.’s site). This is also a test to help me figure out how to “do screencasts”, generally.

The material in the screencast is slightly adjusted, because different training clients want to see different things, and some just can’t afford to spend a lot of time on the boot process in their training classes.

I welcome any feedback anyone might have on it.

More Lessons in Freelancing

So, I’ve been freelancing now for 9 months. I did a post a while back about what was working and what wasn’t, and I still stand by those recommendations. But that was over 6 months ago. Since then a lot of things have happened. I’m happy to report that, so far, things are going great. My clients are happy, I’m happy, and I’m taking to the business end of things pretty well.

However, I’m learning more about the business, and myself, so I thought I’d share s’more thoughts on my freelancing experience to help those in the same boat, or who are thinking of making the leap:

You only *think* you’re organized

I thought I was pretty organized before I became a freelancer. I was always punctual, never missed appointments or meetings, didn’t miss deadlines — I was on top of things. I’m still doing all of that, but I’m finding that I have to organize things very differently from when I was a 9-to-5 employee.

This might not apply to you. You might already organize things in a way that would be easy to apply to a freelancing schedule. It wasn’t that way for me. I typically used to think of my life in terms of projects. I had projects I was working on, usually more than one at a time. Every week, I had a meeting with my boss to go over the status of the projects, if I had hit any roadblocks, etc. In retrospect, it was pretty nice.

Nowadays, I still have projects, but they all belong to different clients, and all of the clients need their own status, and they all have different personalities, different lingo, different businesses, and different priorities. Some client projects are heavily focused on a completion date. Others are heavily focused on a feature set. Still others are focused on a budget number. I have to interact with them all separately, and I have to think about how to present the status to each one to meet their expectations. So, I actually budget time to think about these things.

What’s more, since I do all of my work remotely on an hourly basis, if a client has to complete a task so that I can move forward, and it takes them three days, I may well have nothing I can work on and get paid for for that period of time. With some clients, this isn’t a very big deal: I offer them a discounted rate if they prepay for “bulk hours”, so they get a cheaper rate, and I’m not out of luck if there are delays. I also try to work in other smaller projects and do business development work for my company during these times.

So, the lesson is not to bother trying to come up with crazy Gantt charts and precise time lines. Your clients’ businesses don’t work that way, so yours will need to be flexible as well.

Nowadays I create more loosely defined, high-level project definitions with less detailed tasks and time lines. I still don’t lose sight of what needs to be done, and I’m still able to meet my clients’ needs.

I’m more paranoid than I thought

I’ve grown used to people asking me “How’s business?” I used to hate that question, because I didn’t really have a metric to go by that I thought was sufficient. Now I have several metrics, but I feel like I need to evaluate where I am with respect to those metrics almost daily. I guess it’s part of being a young business.

When you’re fully employed, “business”, to some degree, is always good, because you’re always employed, and always have a paycheck coming in. My stepfather worked for Exxon during the Valdez oil spill. Business for Exxon was horrible. But my stepfather’s job (i.e. “business”) was relatively unaffected.

My business has two services: consulting and training. I try to maintain training appointments for at least the next three months, and consulting projects for the next 4-5 months. If I look at my calendar and see lots of empty spots any time in the next three months, I have work to do. This methodology works for me, and makes me less stressed out than the method I used to use.

I used to just say “if at any time I have less than 6 months of expenses in the bank, I have work to do”, but looking at dollar figures every day is stressful, and I think in terms of the business it’s kinda like taking your eye off the ball. The ball isn’t money — the ball is your client list. Much like the ball brings with it the potential for a base hit or home run, your client list has the potential to pay your bills and grow your business.

More to Come

I can get a little long-winded, so I’ll stop here for now. I’m interested in your input, whether you’re a freelancer, or considering becoming one. Share your thoughts!

Fedora Directory Server on RHEL 4 and 5, Pt. 1

The last time I had to do a NIS->LDAP migration, it was in a heterogenous environment with Solaris and Linux boxes, and it was around 2004 or so. Although I hit some rough patches adjusting to changes in how FDS is packaged, the community was awesome, and helped me get back up to speed in no time. We shouldn’t forget that the community was what drove me from OpenLDAP to FDS in the first place.

But I digress. The purpose of this article (first of a series) is to share with you some technical information about how to get things going. How, exactly, do you get RHEL 4, and RHEL 5 to utilize Fedora Directory Server’s data to support NSS and PAM for user information and authentication, and autofs for automounting directories? There are documents on this, written by people who clearly do (or did) care, but at times they can be a little disjointed, a little outdated, and require some tweaking.

This document talks specifically about installing the fedora-ds-1.1.2-1.fc6 package on RHEL 5.2, populating the People and Groups trees, and testing that it actually works. Later posts will deal with getting RHEL 4 and 5 clients to talk to it for various purposes, using TLS (with certificate verification, btw).

If your real issue is understanding how LDAP data works, why it looks the way it does, or you need a refresher, I would urge you to look at two other articles I wrote for O’Reilly, devoted completely to the topic: here, and here.

Get it installed

There is no precompiled binary package of Fedora Directory Server built specifically for Red Hat
Enterprise Server (because Red Hat, of course, provides that, with support, for a fee). If you want to run FDS for free on a RHEL server, the installation process is somewhat non-trivial.  First, you must add a couple of new package repositories to your yum configuration:

cd /etc/yum.repos.d/
sudo wget http://directory.fedoraproject.org/sources/idmcommon.repo
sudo wget http://directory.fedoraproject.org/sources/dirsrv.repo

Then, you’ll need to import a couple of keys in order to verify signatures of the packages we’ll install
later:

sudo rpm --import \

http://archives.fedoraproject.org/pub/archive/fedora/linux/core/6/i386/os/RPM-GPG-KEY-fedora

sudo rpm --import \

http://archives.fedoraproject.org/pub/archive/fedora/linux/core/6/i386/os/RPM-GPG-KEY-Fedora-Extras

Next, install some prerequisite packages (you could do this first – these come from standard
repositories, not the new ones we added):

sudo yum install svrcore mozldap perl-Mozilla-LDAP libicu

You’ll need jss, and I wasn’t able to get it via a repository, so I downloaded it using a URL directly:

sudo rpm -ivh http://download.fedoraproject.org/pub/fedora/linux/extras/6/x86_64/jss-4.2.5-1.fc6.x86_64.rpm

Next, install ldapjdk (used by the FDS console application), and finally, the directory server itself:

sudo yum install ldapjdk
sudo yum install fedora-ds

WIth these packages installed, the next thing to check is that permissions are set up correctly, otherwise the initial setup script will fail:

sudo chown -R nobody:nobody /var/lock/dirsrv; sudo chmod -R u=rwX,go=
/var/lock/dirsrv
sudo chown nobody:nobody /var/run/dirsrv; sudo chmod -R u=rwX,go= /var/run/dirsrv

Finally, run the setup script which was installed with the fedora-ds package:

sudo /usr/sbin/setup-ds-admin.pl

Populating the Direcotory

The directory initially consists of a top-level entry representing the domain, and by default, FDS creates for you two “organizational units”, which are subtrees representing “People” and “Groups”. I’ll create an LDIF file for the Groups first, but there’s no reason to go in any particular order. We’re just adding data, and LDAP isn’t relational: you can add People objects who are members of Groups that aren’t in the tree yet. Here’s my LDIF file for the groups:

dn: cn=wheel,ou=Groups,dc=example,dc=com
objectClass: posixGroup
objectClass: top
cn: wheel
gidNumber: 1000
memberUid: jonesy
memberUid: tasha
memberUid: molly 

dn: cn=eng,ou=Groups,dc=example,dc=com
objectClass: posixGroup
objectClass: top
cn: eng
gidNumber: 1001

For the moment, only ‘wheel’ contains any actual members. No biggie, you can add members to groups later, or add more groups later whenever you want. Once the clients are configured, there’s no restarting of anything to get them to pick up changes to data in the LDAP data.

It’s easy to use the OpenLDAP tools to add data to FDS, but I’m going to use the FDS-supplied tool here to insert this data:

/usr/lib64/mozldap/ldapmodify -a -D "cn=Directory Manager" -w - -h localhost -p 389
-f ~/groups.ldif -c

If you’re familiar with the OpenLDAP tools, this probably doesn’t look too scary. The OpenLDAP tools require a ‘-x’ flag to bypass SASL. Aside from that, pretty straightforward.

To populate the “People” tree in FDS, or any other LDAP product, I wrote a really cheesy awk script that I can pipe the contents of /etc/passwd or ‘ypcat passwd’ through and get good results with only minor tweaking. Redirect the output to a file called ‘people.ldif’, and then you can populate your “People” tree:

/usr/lib64/mozldap/ldapmodify -a -D "cn=Directory Manager" -w - -h localhost -p 389
-f ~/people.ldif

At any time, you can verify that your FDS installation is returning results by running a query like this:

/usr/lib64/mozldap/ldapsearch -b dc=example,dc=com objectclass=organizationalUnit

I have a few more posts to follow this one. One is one getting SSL/TLS working (either one, perhaps both), creating a root CA and setting things up with certutil, another on getting the RHEL 4 and 5 clients to use LDAP, and another separate one for configuring autofs to talk to LDAP, which is a little different between RHEL 4 and 5. Subscribe to this blog in your reader to be updated as those posts come out over the next 2 weeks.

Heading to Chicago

I’ll be landing in Chicago tonight, assuming all goes well. I’ll be there through Jan 23. If there are any Linux User Groups, LOPSA meetings, Python user groups, or anything else cool (a brewer’s club maybe?) then find me on twitter (bkjones), or shoot me an email (same name, at gmail).

I’m teaching courses on beginner, intermediate, and advanced Linux administration while I’m there, with some coverage (by request!) of Python. I currently have no clients requesting coverage of Perl — just shell and Python. Sweet!