Blog


30
Jan 12

Post to WordPress from Simplenote or Dropbox

Edit: See this updated post for enhancements

This is for all of you Markdown and plain text nerds out there. You’re my people.

I’ve been tinkering with a simplified mechanism for posting to this site. Most of my posts are started in Simplenote. If it’s a long post then I’ll work in BBEdit but the document still resides in my Simplenote/NVAlt/Dropbox folder1. When I’m done with a post, I’ll preview it in Marked and copy the html. I have a Keyboard Maestro macro that will post the html on the clipboard directly to Macdrifter.

However, if I’m away from home, I must post via the web on Windows or iOS. Neither is a great option. I have Brett’s MD Quicktags plugin installed, but it seemed like I could streamline the process a bit.

I’ve come up with a solution that lets me write in MultiMarkdown on Simplenote or Dropbox and automatically post the article when it is tagged with “post”.

Hazel

Hazel is the next level of folder actions. Hazel watches items in a folder and performs actions based on a defined condition. For some context, take a look at Eddie’s post on Practically Efficient. He has a very good introduction to Hazel.

I setup two Hazel rules. NVAlt supports Simplenote tags through OpenMeta extended attributes. The first rule looks for a file in my Simplenote folder to get the OpenMeta tag of “post” and makes a copy of the file to another folder. Importantly, the Hazel rule will not overwrite a file if it already exists in the destination folder. This is critical and I’ll explain more later.


Copy Rule

The second Hazel rule does all of the work. Once a new .txt file appears that has never been processed, Hazel runs it through a Shell script. Well, it’s a Python script run by Hazel’s embedded shell script action. Note how Hazel passes in the file path.

Hazel Script

Here’s the full script (you will need to provide your own WordPress connection credentials):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
python
import markdown
import xmlrpclib
import os
import sys

filePath = sys.argv[1]

#Connection details for the WordPress xmlrpc connection
wpUrl = 'WORDPRESS_XMLRPC_ADDRESS_HERE'
wpUser = 'WORDPRESS_ACCOUNT'
wpPass = 'WORDPRESS_PASSWORD'
wpBlogid = ''
status_draft = 0
status_published = 1
categories = ''
title = ''

# Create server instance
wpServer = xmlrpclib.ServerProxy(wpUrl)
try:
    myFile = open(filePath, "r")
    rawText = myFile.read()
   
    # Process with MD Extras and meta data support
    md = markdown.Markdown(extensions = ['extra', 'meta'])
   
    # Get the html text
    html = md.convert(rawText)

    # extract the title from the meta dictionary
    title = md.Meta['title']
    # title is actually a list
    title = title[0]
    # extract the categories but keep them as a list
    categories = md.Meta['category']

    # Only post if there is a title in the meta data. I don't want to hassle with parsing the file name.
    if title != '' :
        data = {'title':title, 'description':html, 'categories':categories}
        post_id = wpServer.metaWeblog.newPost(wpBlogid, wpUser, wpPass, data, status_published)
       
        # Pass the result for a growl message
        print data
except (RuntimeError, TypeError, NameError):
    # Make the error message as elaborate as you like. It's all right there in the exception.
    pyStatus = "Error"
    print pyStatus

The Script

I’ve looked at several Python options for processing Markdown and posting to WordPress but I’ve never been happy with any of them. Python is generally my weapon of choice, when I have one. I generally like to use as few odd-ball modules as possible to reduce maintenance overhead when upgrading or porting to another system. In this instance, I’m using the most common Python Markdown module to process the text. There are a couple very cool things with this module. First, it supports Markdown Extras like the ones I use in MultiMarkdown. This includes footnotes, code blocks, tables and meta data. The second is how it supports meta data. It can pretty much extract anything. In this example, I’m extracting the “title” and “category” fields but I could use date, author or just about anything I want. For multiple categories, I put each category on a subsequent indented line and the module knows they are all categories.

Once I’ve extracted all of the content, I then take advantage of another common Python module, the xmlrpclib module. This is the bit for getting the content posted. The xmlrpclib module also supports the necessary meta data for WordPress posts. For a nice overview of the same process I went through in coming to this conclusion, see Sami Slkosuo’s post.

I considered using the Python WordPress XMLRPC module but it looked like over-kill for my needs. I may yet use it to avoid double posting and make updating published posts possible. It’s very tempting.

Start to Finish

The new workflow looks something like this. I write as much as I want in MultiMarkdown in Simplenote/NVAlt. If I want, I preview with Marked. When I’m ready to post, I just add a Simplenote/NVAlt tag of “post” to the entry. The article gets published by my server at home without any other effort from me. Additionally, the Markdown version of the article is saved my archive folder for permanent reference.

There is a small catch though. Because I’m lazy and a bit squeezed for time I didn’t come up with a satisfactory way to avoid duplicate posts. I needed to avoid multiple posts of the same article if I made a small edit in Simplenote. If I accidentally make a small edit to an entry already tagged, It could get posted multiple times. The easiest solution I came up with is to not overwrite the file if it exists in my “Posts” archive. That way the second Hazel rule will not run a again.

I’m sure there’s a more complete solution that would save the post id returned from the initial post and keep track of it. Or maybe just check to see if I already have a post with that title and do an update if I do. I’ll get around to that feature when I get some more time. For now, I think this is pretty nice.

It’s not just the simplicity of the workflow that I like. I also like that I can twiddle a post for awhile in Simplenote without ever having to reload a draft from WordPress or log back in to the site. I can write and then when I am done (or tired of the subject), I can add the “post” tag.

TaDa!

This post made it to the site via this mechanism. If you’re reading this, then everything worked according to plan. 2 Ok, I’ve actually been using this method and tweaking it for awhile. If you’ve noticed odd unprocessed Markdown or other artifacts, then you’ve been part of this grand experiment. Thanks for your patience.


  1. I have my Dropbox notes folder syncing with Simplenote by way of NVAlt. NVAlt is always open on my computer at home and that computer is always awake. I’ve posted about that before. 
  2. There you have my secret. I don’t run a dev or test instance of this site. I’m making live changes like an idiot. 

17
Jan 12

Static Site From Dropbox, Perl, and AppleScript [Link]

I’ve got a crush on Stephen Hargrove now. His blogging setup is wonderful.

By way of Brent Simmons


10
Jan 12

Pseudonyms, Trolls and the Battle Over Online Identity [Link]

Ben Brooks:

“…these are, I think, the same people that have great insight to add through emails that I receive.”1

Again, I think this depends on your perspective. Some craft a site to be a megaphone. Some craft a site to be a discussion. Everyone is entitled to their own expectations for a site they run and pay for. In my opinion, if comments are all sequestered in an email inbox, they’re not very valuable to anyone other than the recipient. I actually prefer comments to be public and in context on this site. Expecting disconnected sites to be a conversation is just silly to me.2 Maybe it’s the value of comments from plebs that is in question. I know I have stopped sending comment email all together. The absence of a comment form tells me all I need to know about the perceived value of my input.


  1. I wonder what those comments were. I wonder if they provided additional insight or value. 

  2. Hey look at me! This post is a conversation. No. Actually, it is not. 


4
Jan 12

Comments Are Content

I always say, “to each their own” and think that everyone is entitled to their own opinion. I also appreciate that people like Marco and Matt have a large number of visitors that are probably pretty vocal. More than I do, I’m sure. But I’m not a fan of killing off comments. I don’t mean unfiltered comments where every troll gets their say, but rather well curated comments are also part of the content.1

Have you ever read the comments on Dr.Drang’s site? They’re very good. How about Brett’s site? Also good stuff. I’ve learned a number of interesting things from comments on my site as well. For me, comments are the difference between having a conversation and having a soap box. If turning off comments is what it takes to have great reading material from Marco and Matt, then so be it. I’d be disappointed if the trend continued on sites like LeanCrew.com or BrettTerpstra.com.2

Edit: Sorry for the poor writing. I guess I was a little from-the-hip on this one.


  1. Hence my “About” page urges comments but also quotes Will Wheaton: “Don’t be a dick”  
  2. I appreciate the irony that I am using my blog to make a comment about Matt’s post, precisely as he would prefer. But it’s unlikely an average reader of Matt’s site will ever find this comment, so it’s not really part of the conversation. 

24
Dec 11

What’s So Fun About Fake?

I wrote about the Mac application “Fake”[1] awhile ago. From my very first use, I thought it was an incredibly clever tool. Fake is like a super-charged automator for Webkit. It makes automating interactions with webpages easy and simple. But why would I want to use Fake instead of Automator or curl or even a Python script? Here’s an example that I just started using.

If I want to add an affiliate link for a Mac or iOS app, I need to visit the Apple Link Maker page with my affiliate id as a get-parameter in the link. Then I need to choose iOS or Mac apps and type in the application name. I hit search and get back a list of apps. If I typed the name correctly, then the app I want will be on the top of the list.

Link Maker

applist

I’m not done yet. I want the link, so I click the “App Link” to get a pop-over. I then select the link text and copy it. It’s kind of tedious and therefore, I haven’t used them much. What’s worse, all of the content only exists after the JavaScript has executed and added the content to the page. I can’t just submit a form and get a new page, I have to click the Submit button to generate the new document elements. That’s where most web scraping breaks.

JS Popover

This is a common problem with automating web-interactions. Automator, curl or python’s urllib will not have access to the content I want. That’s because developers are expecting a javascript engine to insert content into the DOM. Without a JS engine, the urllib2, Scrapy or BeautifulSoup functions are not useful.[2] That’s where something like Fake comes in handy.

Hello Fake

With Fake, I can automate the entire process. I build a Fake workflow much like I build an Automator workflow. Drag and drop actions and set variables. Fake has auto-discovery for form fields too. Just ctrl-drag from the action to the location on the page to auto-discover the element id. Fake will automatically determine the proper tag hierarchy to find it in the future.

Fake can also press buttons on the page. Now I’m getting somewhere. It can even extract the content I need from the JavaScript pop-over.

Here’s the workflow:

Fake Workflow

Macro Time

But how can I automate this process? Well, I kind of like Keyboard Maestro for this kind of stuff. Luckily, Fake has good AppleScript support. In my macro, KM pops up a form where I choose an app type[3] and type an app name to query. Next, an AppleScript is executed to launch the Fake workflow.

tell application "Fake"
    activate
    open "Macintosh HD 2:Dropbox:Development:Fake Workflows:getAppLink.fakeworkflow"
    delay 1
    run workflow
    wait until done
    close front document
    quit
end tell

Fake can also run AppleScript so it can also get variables from Keyboard Maestro. Here’s the code from the first Fake action that grabs the input from the form:

 
set kmVarAppLink to ""

tell application "Keyboard Maestro Engine"
    set kmVarAppName to (process tokens "%Variable%AppName%")
    set kmVarAppType to (process tokens "%Variable%AppType%")
end tell
tell application "Fake"
    set variable with name "appName" to kmVarAppName
    set variable with name "appType" to kmVarAppType
end tell

Now fake has all of the information needed to load the page, populate the drop downs, click submit and then load the JavaScript pop-over. Finally, it copies the affiliate link to the clipboard for me.

Fake Macro

The final workflow goes something like this:

  1. cmd-opt-M to open my Markdown palette of macros
  2. Type C to choose the macro for appstore affiliate links
  3. Fill out the popup form and click ok
  4. wait for the alert that the macro is complete
  5. paste the affiliate link

Nice. I’m starting to play with Fake as more than just a way to probe web pages. It has some great potential. I haven’t even touched the more powerful actions that allow custom JS to be run against a page.

I would like to see more options to export a workflow to a stand-alone applet or script. Or perhaps a separate headless engine that could run independent of the application (like Keyboard Maestro). I’d also like integration with 1Password for autofill of passwords. I have a couple other ideas for automation that would require hard-coding login credentials and I’m not a fan of that.


  1. Affiliate Link
  2. There are things like Selenium that provide a JS engine to Python but I find it to be overly difficult and time consuming to use. I’m also not good at Python. So there’s that.
  3. I find it interesting that the form value submitted for iOS apps is “software” and the form value for Mac apps is “macSoftware”

14
Dec 11

Akismet Is Good

Yes, the new WordPress 3.3 is very nice. But you know what? Akismet is the only reason I still have comments open on this site. I received 166 spam comments in 48 hours. Not one of them made it through. Also, primecasefunding dot com are A-holes.


1
Dec 11

A Moving Story

If you’re not interested in running a blog on WordPress then this post will not be interesting to you. However, if you have an interest in hosting and domain servers then read along. I was previously hosting this site on Bluehost.com. My domain had been hosted there since 2006 with a few hiccups. I changed domain names on December 30th, 2010 and lost quite a bit of content from the previous year. It’s a long story and not very interesting. I was dumb and lazy.

This past year, traffic has increased and Bluehost began to show some cracks in their service. The overall uptime had decreased dramatically, even by their own admission. Customer service had also become dramatically worse. A typical scenario was that I would try to post content and the site would be completely unavailable. I would contact customer support and receive an email reply 12 hours later stating that the site was up. Well, no duh. Even worse, they began to delay responses by requesting additional authentication before responding. This was particularly annoying given that my requests were made from my admin account on their support page. Twitter proved that my situation was not unique.

I began the hunt for a new hosting service. I had there requirements for any company I would consider:

  1. Quick response to support emails (no more than 2 hours)
  2. An honest SLA (or uptime guarantee) that they could send in an email
  3. Some way to demo without a large investment

SquareSpace

I really wanted to move to SquareSpace. They support my favorite podcasts and they have good taste. A great thing about SquareSpace is that they offer a 14 day unpaid trial period. That allowed me to do a test migration of my content and tryout some designs and trial posts. The trial was a lot of fun and demonstrated why so many people are choosing to migrate to SquareSpace servers.

In the end, there were a couple of things that dissuaded me from going with the cool kids over on SquareSpace. First and foremost, I post code to my site regularly. I use the CodeColorer plugin for WordPress. That allows me to stick with the standard “code” tag but get language specific syntax highlighting. There were a couple options for SquareSpace, but nothing out of the box. It would have been a hack and I would have to always post via html instead of their lovely Markdown interface.

Code formatting alone would not have been enough. I migrated a good amount of existing content during the trial period. Several images were lost and some formatting was mangled. Now it is likely that the issues are on my end and I am missing some closing tag somewhere. But the fact remains that the posts render just fine on WordPress.

Finally, I’m really happy with my current workflow for making posts. I upload images via FTP as I capture screenshots and paste the automated URL right into the draft as Markdown. Now, I could come up with an equally satisfying workflow that involved some other options but everything I tried was more complicated than writing in NVAlt and Simplenote and converting to html on the fly for posting.

Big Kahuna

I found two other hosts that replied to support emails promptly and thoroughly and offered some kind of uptime assessments. KahunaHost was one of them. Here’s the reply I received when I asked about their SLA for one of their hosting plans:

“It’s 99% on Just Me packages and 100% on Business. Uptime is currently at 57 days since the last interruption which was 2.2 seconds in duration. http://www.kahunahost.com/clients/serverstatus.php

Sounds good to me. Keep in mind, most hosting services will not provide an SLA. The fact they even shared one was a huge win. I came very close to moving to KahunaHost.

WebFaction

WebFaction[1] came up in a conversation with a friend of mine. We were talking about learning Django and he had heard good things about them as a Django host. It didn’t take much to figure out that they are a full feature hosting service, and not Django specific.

They could not provide an SLA but they did provide a very prompt and honest answer. They provided their uptime for the last year which was >99%. It was a good enough response to purchase a one month trial. In contrast to many hosting solutions, WebFaction provides an option to purchase any number of months of service with a discount for longer periods. That one month trial is what sold me. It was cheap enough that it didn’t feel like a commitment but flexible enough, I could test every aspect of the service.

Keep It Simple

What first struck me about WebFaction was that it has a very minimal admin console. The design speaks to its purpose. The goal is to get something installed and running and then just work with application. The WordPress installation was as simple as possible.

What really sold me on WebFaction was that I wanted to start learning Django. The installation was about a 5 second investment to have a working Django instance installed.

Beyond WordPress and Django, they offer a number of other application packages to install, for example WebDAV and CherryPy.

Then there’s the backend access. Unlike SquareSpace, WebFaction lets me use SSH and FTP to interact with the server. While this sounds like a pain, I have a number of macros and scripts that push and pull content with the server. On my end, I’m generally just hitting a keyboard combo and then waiting for a Growl notification of completion.

Performance

WebFaction is fast with little latency for a shared server.

The recent links from MPU and Brett Kelly probably sent a fair amount of traffic my way.[2] WebFaction performed like a champ. I didn’t notice any delays in the page loading. I don’t know the exact amount of traffic, but I do know that when MacSparky linked me awhile back, BlueHost choked and throttled the sight for over a day.

This site is on a shared server but WebFaction appears to have a low population for each server. I can tell, because through FTP I can see all of the other home directories. I can’t get into them, but I can see the total number and there are not many. On my previous host, I could see all of the other servers through the inscrutible log files that were generally filled with hundreds of other servers and their respective errors. Yes, their server logs were shared. Try troubleshooting that.

Moving a Site

Now for the reall nerdery. The move to a new host was pretty painless. So painless, that I was sure I had missed something. I performed the migration in the following order.

1. Create a New WordPress Instance

WebFaction allowed me to create a domain named macdrifter.webfactional.com. It’s still there if you want to check.

I just performed the out-of-the-box install of WordPress and set the admin password. Done.

2. Export WordPress

I made a backup of all of the wp-content by downloading over FTP and cloning to a backup drive. I should have also made a database backup but BlueHost had enough barriers up to prevent it, that I didn’t hassle any further.

I then transfered all of the wp-content to the WebFaction instance via FTP.

The accepted way to migrate a WordPress site is to use the built in export function to download an XML file of the existing site. From BlueHost, this took about 10 minutes. I then imported into the blank install on WebFaction which took about 1 minute.

From the new host I performed the WordPress import without incident. I did a random check of the content and everything looked in order. Moving on…

3. Configurations and Plugins

Trust me, do the configuration and plugin installs while you still have access to the previous WordPress instance. There’s no way you’ll remember it all. I just kept both admin panels open and progressed through each section turning knobs and hitting buttons.

I also took the opportunity to change the design. I moved to the Cleanr theme and began tweaking the CSS and sidebar. It’s important to try this with actual content since I wanted to check how code and quote blocks looked. After I was happy with the design it was time to test.

4. Test Posts

I published multiple posts with every kind of element that I would normally include. I also tested posting from the WP Console with Brett Terpstra’s excellent Markdown plugin QuickTags.[3]. I also had to reconfigure all of my macros and scripts to point to the new server. Testing put my mind at ease, but I still needed to move domain and point it to the new host.

5. Move the Name Registrar

BlueHost was also my domain registrar. I decided to cut all ties and move my domains to Hover.com[4]. The process was easy and required little more effort than filling out a form and then releasing the domain through my BlueHost account. Hover is almost too pleasant to use. I ended up moving all of my domains and buying a couple extra. There’s no up-sell or pressure. It’s all above board.

The last step was to change the name server at Hover to point to WebFaction. Not much else to say. It’s just a matter of pointing to ns1.webfaction.com. So I held my breath and saved the name server setup. It took a day or so for the redirection to propagate but by Tuesday, the site was live and functioning as planned.

Conclusion

This process sounds like a lot of work. It was. However, submitting support tickets is also a lot of work. Moving to a new host is work I only need to do once. In reality it also provided some unexpected benefits. It allowed me to focus on simplifying my site and reduce the number of plugins. It also caused me to reconsider my backup system for the site. I had been running a backup plugin but when it came time to try and use the backup, it failed. The best backup for me is the simple XML export from WordPress and an FTP’d copy of the content. I’m also now planning on periodic database backups.

Onward

I’m hoping to learn enough Django to move the entire site to a new platform. Why? To learn something new and give me more control over my own site. Of course all the sausage will get made on a staging system that has no connection to Macdrifter.com.


  1. That’s an affiliate link. If you like WebFaction and sign-up through that link, I get a little kickback towards the cost of my hosting.

  2. I’m not sure. I have not checked Google Analytics. I try to stay away and only check once or twice a year. I find it corrosive to my enjoyment of the blog.

  3. Seriously. This is a must for Markdown lovers. It’s so full featured it’s rediculous. I’m also declaring this Brett Terpstra week.

  4. Remember Tucows? They’re now Hover. Great company.

 


25
Nov 11

Advertisements and Disclosures

My recent move to a new hosting service was a little more expensive than I had budgeted for. I run this site as a monetary loss. I don’t consider it an overall loss because I’ve met really interesting people through the site and received some great suggestions that were worth the amount I pay for the hosting service.

However, I don’t make money off of the site. I’m considering a small change to that situation but I don’t want to change the nature of the site. I worry that if I start to make money off of advertising then it becomes work. It subconsciously influences what and why I post. So I am trying an experiment. I’m testing myself and the advertising model.

Advertisements

I’ve added a small advertisement to the sidebar. It’s for Marked by Brett Terpstra.[1] It’s something I use all of the time. I’m using it right now as I write this. It’s something that I want to see succeed and be an example of quality workmanship. It’s something I am doing for free. There may be other apps and I may start to get paid for them. I will make another post if that day comes. In the meantime, consider the ads endorsements for things I think are damn awesome. Awesome enough to maintain a perma-post on the sidebar. Yes, Marked is awesome.

Brett was kind enough to participate in my little experiment. I doubt he’ll make much, if anything, off of the ad. My traffic is very minor in comparison to a Marco or Shawn. Brett is taking a risk too. He’s now associated with my sidebar. Already the experiment is generating some data. I’m conscious that something I post will be viewed alongside his application icon. I hope that makes my site better.

Disclosures

In very few posts, I’ve included an Amazon affiliate link. Usually it’s an afterthought. That’s good, since I don’t want to post just to drive Amazon ads. However, I will always try to include a footnote when a post includes an affiliate link.

I don’t participate in ad or PR campaigns. I’ve been contacted several times to try an application or service but I’ve always turned it down. The primary reason is that I’m just too busy to fiddle with a new system or app that does not provide immediate value. I also want to buy my own stuff if I’m going to write about it. The cost is part of the value proposition for any app. OmniOutliner Pro is an awesome application. Is it $70 worth of awesome? Yes. Yes it is.

Finally, I want to make a comment about something that I’ve seen recently with sites I love but almost made me not pursue ads on this site. Several sites have participated in an ad campaign without obvious disclosure. They have written “reviews” of an app that they were also displaying as an ad. It took me awhile to figure it out since I read most of them as an RSS feed and do not see banner ads.[2] It was only after visiting one (and then each site in turn) that it was obvious to me this app was being advertised and that each site may have agreed to write a review. It felt wrong. I felt like I couldn’t trust the review except that I had already purchased the app and knew it was great.[3] I still felt very slightly cheated of a review I could trust. I also feel like I will always second guess every review from these sites in the future.

Can a site be paid to advertise a product and write a honest review? Absolutely. Should the reviewer disclose that they are being paid to advertise the product in the review. Probably.

So before I contacted Brett about Marked, I decided not to post reviews for companies/people/products that I currently receive payments from. That sounds like a good policy.[4]

There you have it. I now have an ad on Macdrifter.com.


  1. That ad and the elegant css effects are 100% Brett. I’m just a monkey that pasted some text he provided.

  2. It could be argued that by not visiting the site directly, I’m forcing them to find alternative modes of advertising. They should get an RSS feed sponsorships then. I don’t mind sponsored feeds at all.

  3. I’m being awkwardly ambiguous on purpose. The Web sites and app in question are all awesome. I also have no direct knowledge of the cause and effect relationships I suggest. This is all supposition.

  4. This is my policy. I’m not preaching that anyone should do something because I do it. There are enough preachers on the Internet and I’m no role model. Also, everyone has their own set of requirements and demands to answer for. Mine are pretty basic.


13
Nov 11

Moving Day

I found a new host over on WebFaction and I’ve been very happy with their support and performance. I’m also moving my domains to Hover.com during the same window. It’s all a tiny bit irritating but I’ve made multiple backups of everything and tested out the import process several times. In a way, it’s kind of like when I get a new Mac and I take the time to clean up my files and reexamine my backup system.

The most noticeable change should be improved performance (WebFaction really is performing well) but a there will be a few minor improvements as well.

  • There will be a bit of a redesign of the site to clean it up.
  • All user accounts will be reset. Sorry, but the vast majority of “registered” users are spam anyway.
  • I’m changing the search plugin to provide better and more immediate results

There may be some hiccups and I apologize in advance if I flood your RSS feed with duplicate and/or old posts.

See you on the other side. I hope.


11
Nov 11

Another Day, Another Outage

My hosting service is trying very hard to encourage me to move away. I’ve settled on WebFaction for hosting and an ultimate goal of moving to Django from WordPress. The support responses from WebFaction have been stellar and digging through Twitter reveals that their customers are generally very happy.

What this means for the site, is that I will slowly start turning off features and validating the XML export from WordPress. I’ll first get a WordPress clone running on WebFaction and then build the Django site. Hopefully nothing breaks. I apologize in advance if the RSS feed gets re-populated at some point. I’ll try not to be annoying.


1
Jul 11

Check Your WordPress

Security exploits are mainstream. There’s no escaping it. It will only become more common. Do yourself a favor and be diligent and take nothing for granted. Even WordPress blogs are vulnerable.

 

post script: Yes, I checked this site and it’s clean.


18
Jun 11

Site Themes

I’ve been using the MidMo theme on this site for awhile. I like it because it is easy on my old eyes and very simple. There are some quirks that bother me so I am considering a new theme. There’s a lot to choose from. I’m also considering some commercial options.


1
Apr 11

Quality Analysis and Writing

In some ways, we are in the golden age of weblogs. As an example, Asymco has created a quality publication that rivals the best print news sources. The WSJ and NYT should be very concerned that this is their competition and it is ostensibly free to access.


4
Feb 11

Keep it coming

SimplicityIsBliss has some very helpful info. It’s new to me but is now in my short list of feeds for useful Mac information. There is particularly heavy attention paid to Omnifocus but in a good way.

 


30
Dec 10

Mind The Gap

I recently migrated a previous site to Macdrifter.com. In the process I lost a number of posts. Either I am too lazy or the posts were not good enough to try and restore. It’s likely a combination of both factors. Either way, I am going to consider it an opportunity for a clean start. I’m leaving the old posts up in case anyone still finds them useful, but I plan to move onward and upward.