Archive for the 'Medium Priority' Category

Optimizing MySQL for WordPress

A few of the links I referred to when optimizing MySQL settings on one of the VPS’:

HTTP Error when uploading MP3 with Flash Media Uploader

I started a new thread in the WordPress forums this morning because we seem to have a unique issue on our hands. Basically, WordPress’ Flash Media Uploader is working for every file type except for MP3. One suggestion I came across was that it might be a mod_security issue; I tried the recommended .htaccess addition, however, to little luck. It seems odd that the only file type that doesn’t work is MP3.

Research on MySQL performance with WordPress on Slicehost

One of the sites we have on Slicehost has MySQL regularly using 50% to 150% of CPU, even though we have page and query caching using memcached. As such, I did a bit of research this morning in regards to optimization steps we can take. Keep in mind that this post was written at various times over several hours.

The first post I read, a rant by Jeff Atwood, lead to suggested MySQL setting configurations from Matt Mullenweg. Based on the conversation there, I looked over a few posts related to MySQL optimization including a conversation on Stack Overflow, explanation on a lightweight configuration on Debian, and a lengthy WordPress optimization tutorial. I also came across a forum thread on WordPress.org that indicates high CPU usage may actually have to do with pretty permalinks.

The steps I took today were to implement a few of Matt’s suggested memory settings. I also ran a Perl MySQL tuner script that suggested I disable InnoDB, which I did. The most proactive steps we can take, I think, are to better configure MySQL to cache queries, and reduce the number of queries made by the theme. The changes I made today, though, anecdotally have dropped the CPU usage by a third to a half.

Draft wireframes for profiles in the Connection Engine

After Daniel outlined the basic models that will be used in the profile pages for the Connection Engine I drew up some rough wireframes. The first is a basic user profile page for an individual. The aim is to mesh contact information and the challenges the individual is putting into the system.

The second is a profile view for a news organization. Similar to the user view this would bring together contact information as well as support history for the news organization as a whole.

Any feedback, critiques, or ideas are completely welcome.

Draft models for the People and Organization applications

As I mentioned yesterday, the first set of models I’m working on are for the People and Organization applications. I’m going to outline them here so that Andrew can put together basic wireframes for how the information will be structured on the view. We’re going for a basic profile view where the contact information is one part and the activity stream is the other part.

I’m adding the type of field the data is for the edit view. Users will be able to edit their own profiles and the organization profiles they are the administrator for. CoPress admins will be able to edit any profile and any organization profile.

People – Profile model extends the Django User model and includes:

  • First name (text field)
  • Last name (text field)
  • Date created
  • Position (text field)
  • Organization (foreign key to an existing organization within the system)
  • Phone (dropdown with multiple options and ability to add multiple phone numbers)
  • Email (dropdown with multiple options and ability to add multiple phone numbers)
  • IM (dropdown with multiple options and ability to add multiple phone numbers)
  • Websites (dropdown with multiple options and ability to add multiple phone numbers)
  • Address/Location (multiple text fields)
  • Photo (uploaded file
  • Bio (multi-line text field)

Organization model includes:

  • Name
  • Date created
  • Slug (unique)
  • Summary (multi-line text field
  • Websites (same as People profile
  • Email (ditto)
  • Phone (ditto)
  • Address
  • Photo

The organization view will also have a list of staff depending on which users in the system have the organization in their profile. The user’s position and photo in the staff view will be pulled from their personal profile. Lastly, every object in the system will have the ability to be tagged with various topics. Clicking on fields like Location and Position will produce a filter view where you can see all of the People or Organizations with that piece of metadata.

Ideas for reinstating an advisory board

We’ve let our advisory board lapse somewhat and I think it’s wise to put that together again with the hope of actually getting their feedback on big milestones (most notably the re-relaunch of the hosting and support program).

I did a bit of research last week on what startups normally do with their advisory boards. Fortunately, OnStartups Answers has a few really valuable threads on this topic. Basically, there are two directions we can go. One is to recruit a board of advisers that is volunteer, not necessarily required to respond to queries, and that we talk to occasionally. Two is to recruit a board of advisers that we compensate in some form and have a more formal relationship with. After talking this through a bit, it makes more sense to go with the former with where we are currently. Albert made a good point that if we are depending on the advice and input of any one person heavily, it would probably just make more sense to hire them as a consultant.

I see the steps as:

  1. Email the people we want to have as our advisers and see if they’re interested
  2. Put together a Google Group or some sort of mailing list for conversations
  3. Encourage them to subscribe to this blog and send the bigger things we want input on to the list serv

Related, there’s a really good interview with Giacomo Guilizzoni, founder of Balsamiq, that a couple of threads pointed to:

We don’t have any formal agreement nor do we meet regularly. Mostly I email them whenever I have a question I know they’ll be able to the answer, to or we meet on Skype once in a while (we try to shoot for once a month but somehow haven’t been able to keep a regular schedule with anyone. Things get in the way.) We all got together for a big crab-dinner feast in San Francisco in May, something I hope to turn into a yearly tradition.

It’s pretty informal, but every time I have some sort of contact with one of my advisers, I learn something. Or they say something that gives me an idea, or gets me unstuck. That’s what talking to smart people will do. I always say that one could do a lot worse than trying to be excellent, because “excellence attracts excellence”, and when you’re in that circle, even once in a while, magic happens.

He’s got an example letter for when we want to put together an advisory board page. I’m also very interested in his approach to transparency on the company blog, and want to reopen the discussion on how transparency applies to us in the form of a blog post when I have the time to put it together.

Code Cave, Day 2: Brief update

Just a brief update from me right now. I may write more later if I have more time to work on it. Basically, what I’ve been doing for some amount of time today is trying to abstract the first level of functionality we want for the Connection Engine into different applications, and then defining the models for each application. Here’s what I’m thinking for the base level of functionality:

  • Challenge and Solution – In some senses, this is the support ticketing mechanism. I want to move away from the support ticketing paradigm and instead focus on having well defined “Challenges” leading into documentation of the steps to produce a “Solution.” Once the Challenge reaches the Solution stage, then the tread is closed. A user can spin off a new Challenge from a closed one, however, that will create a relationship between the two.
  • Profiles for People and Organizations – I’d like to duplicate a lot of the base-level functionality that Highrise offers us currently such that we can tie it closer to the Challenge and Solution functionality.
  • Invoice and finance management – Basic accounting software that ties into the Profiles application and builds upon what Albert is already working on.

I’m focusing on the Profiles first, and it’s actually going to be two applications initially: People and Organizations. My goal is to define the models for the first, get them to validate, and then build the models for the second. Once I progress further on that, I’m going to start on HTML mockups that will provide a foundation for starting to work on the logic.

With this post, I also want to articulate a couple of issues worth solving at some point with this application. Well, couple of issues that are different sites of the same bigger one of communication. It’s about documenting the work that’s being done with any given project in such a fashion that both the person doing the work and the client have a really good sense of what’s going on. Having an experience for this will allow the client to submit a Challenge/support ticket, see that we’ve opened it and are working on it, read through the work we’ve done to resolve it, and then reference it later if they have an additional question about it. I think a highly-structured work log as a part of the Challenge to Solution process will be very important as we scale the number of projects we’re working on and need to have memory of what was done when for when the inevitable questions about it come later.

Connection Engine and the Code Cave

I’m headed to West Palm Beach, Florida on Monday for a week to hang out with DJ Strouse and Casey Stark while building cool things with Django, aka work on the Connection Engine. Casey put together a project blog and I’ll probably post updates there, here, on the blog, and on my own blog. To start things off, however, I gave them a short introduction to the ideas behind the Connection Engine.

Communication processes and needs

Email doesn’t work for everything and it’s nice to be proactive when we have the opportunity to do so. I think we should give a little thought before the first of the year to our communication processes.

At the moment, what I’d like to see the most is a tool for real-time group communication. The situation here is to have a chat tool that works like IM but can be many to many. You could have this with Skype obviously, but Skype takes up a lot of resources. It would be nice for this chat tool to also have presence indicators so you know when people are online and not online. Based on this, I think the needs are:

  • Real-time communication
  • Presence indicators
  • Multiple people can be in the same room

We have a couple of other potential tools that include Laconia and Friendfeed but both depend on buy-in from the team to be worthwhile. Laconica is really cool in that it’s installed on our own server, integrates with both desktop and iPhone clients, and has nice features. We can aggregate team updates to the blog on a daily or weekly basis if we’d like. The character limit is both a blessing and a curse, however, and buy-in is again a limitation of its effectiveness although it looks like Andrew, Will, and Lauren have been using it in the past week.

Thoughts? I think this blog is working out really well for when I want to lay out longer thoughts but don’t necessarily want to make it a 20 minute conference call discussion. Email still works for direct conversation, and it’s nice to move all conversation that doesn’t absolutely need to be done via email to other time-delayed means. Also, are there other needs I haven’t identified? Thanks

Changes that need to happen on the wiki landing page

The wiki is lacking. It’s a tool that CoPress touts as a way of connecting the community, yet we don’t do enough to actually utilize our community in the wiki process. I think a huge part of how we can illicit more community engagement is by making it easier for visitors to see what’s new and what needs to be done on the wiki. A recognition system is also an important way of acknowledging people who volunteer time to make our wiki a stronger resource (hat tip to Will who helped me earlier in the week to set up user info boxes, which will help people take ownership of their pages).

A few problems with the structure:

  • We have a lot of great information buried in pages we can’t find.
  • The community isn’t contributing as much as it should.
  • When someone from the community does contribute, those changes are lost because of a static landing page

How the landing page can be better

I envision replacing the three columns of Get Started, Get Developing and Get Involved:

  • Recent Activity: Live activity stream of recent pages
  • Top contributors: A list of people on the team and in the community who deserve to be recognized (creates incentive for people to contribute)
  • Pages that need work: An ongoing list of pages that we or the community deems important, and a list of pages that need to be started.
  • Suggested pages: A list of popular and/or CoPress staff picks for important pages like WordPress and How to Launch Your Site

Any other suggestions are welcome. I’ll be mocking this up Saturday evening.