Michael Hoisie http://hoisie.com/ Michael Hoisie's Blog The five most useful packages in Go http://hoisie.com/post/the_five_most_useful_packages_in_go http://hoisie.com/post/the_five_most_useful_packages_in_go"#disqus_thread When Go launched a couple months back, it came with a pretty good collection of packages . I've been playing with the language more or less since it launched, and in that time I've written code that's covered quite a few of these packages. While there are a bunch of weird ones that I've never used, there are several that I seem to use repeatedly. So in no particular order, these are the five most useful go packages I've found.

1. bytes

bytes.Buffer is probably the most useful type for working with data. It's a dynamic-size byte buffer that lets you read and write strings or bytes. At any time you can get the underlying data in either string or byte array format. It also implements several recurring Go interfaces (io.Reader, io.Writer) which makes it usable as buffers in many other packages. I've found it particularly useful in the following situations:

  • Network programming - most network programming involves constructing binary or string packets
  • Text processing - building small parsers for languages involve splitting up streams of text

Example:

    var buf bytes.Buffer
    buf.WriteString("This is some json: ")
    json.Marshal ( &buf, map[string]int {"a":1, "b":2})
    println ( buf.String() ) 
    //prints: This is some json: {"a":1,"b":2}

2. reflect

Reflect is a powerful package that lets you do runtime type inspection. Although Go is a statically typed language, many functions can work with generic data through the use of the generic type : interface{}. This is especially useful in packages that do serialization or data storage.

For instance, we can write a simple method that prints some details about the argument:

func printMyType(val interface{}) {
        fmt.Printf("Val is: \n")
        switch v := reflect.NewValue(val).(type) {
        case *reflect.StringValue:
                fmt.Printf("string %q", v.Get())
        case *reflect.IntValue:
                fmt.Printf("int %d", v.Get())
        case *reflect.MapValue:
                fmt.Printf("map with %d keys:\n", v.Len())
                for _, k := range (v.Keys()) {
                        fmt.Printf(" %v: %v\n", k.Interface(), v.Elem(k).Interface())
                }
        }
        ... more type reflection
}

3. os

If you need to make a system call, you're going to need to import this package. Anything that involves calling the underlying system -- like like forking processes, executing commands, reading/writing files, opening directories, or grabbing environment variables -- go through the os package.

4. ioutil

This is a small package with just four useful methods:

  1. ReadAll - reads a data source (io.Reader) until it hits EOF
  2. ReadDir - reads the directory named by dirname and returns a list of sorted directory entries.
  3. ReadFile - reads the file named by filename and returns the contents.
  4. WriteFile - writes contents to a file by filename

5. vector

This is more or less the equivalent of python lists. It lets you implement stacks, queues, heaps, or whatever other structure you'd like on top of a list.

    var a vector.Vector
    a.Push(12)
    a.Push("hello")
    fmt.Printf("a len %d\n", len(a))
    fmt.Printf("%v\n", a[1])

So, that's the end of this list. If anyone has packages they've found useful, feel free to post them here. Next time I plan to write about packages that Go desperately needs.

Comments

]]>
web.go http://hoisie.com/post/webgo http://hoisie.com/post/webgo"#disqus_thread In the past week I've been working on a new web framework -- called web.go. It derives a lot of characteristics from two web frameworks that I use often: web.py and pylons. It's written in the Go programming language. You can check it out on github: http://github.com/hoisie/web.go.

While there are several missing features, one of the nice benefits is rendering speed is extremely fast. This is mostly because web apps are compiled to native code.

In the next couple weeks I'm planning to write a few web apps in this new framework and flesh out some missing features. I encourage people to watch the project on github and give it a try :)

Comments

]]>
Five reasons to switch from OpenDNS to Google DNS http://hoisie.com/post/five_reasons_to_switch_from_opendns_to_google_dns http://hoisie.com/post/five_reasons_to_switch_from_opendns_to_google_dns"#disqus_thread Yesterday, Google made a launch announcement about a new public DNS Service. I've been using OpenDNS for the past couple years, so any new DNS service is interesting for me. After poking around the Google Public DNS site for a bit, and running some tests locally, I decided to switch over to Google's DNS. Here are the top five reasons:

1. Proper negative responses.

While OpenDNS responses are technically valid, they go against the spirit of the DNS protocol. If a hostname doesn't exist, the DNS server should return a negative response. OpenDNS strongly defends this as a 'feature', but when Verisign (the root dns server of .com, .net, etc..) enabled this same feature, it caused a complete shitstorm. To their defense OpenDNS does allow people to turn off this feature, but I couldn't find out how to do this. You probably need to create an account and download some kind of client software.

2. OpenDNS makes money from negative responses

They make TONS of money, and that's kind of a slippery slope. They have lots of data about which queries generate the most revenue. So what's to stop them from returning their landing page for valid hostnames which are high-earners. Yes this is cynical, and it probably won't happen, but if they do it cautiously, nobody will really notice, and they'll get a lot more more revenue.

3. Software development using DNS

Also related to 1), but I'd like to focus on software development. Lets say you're writing software which interacts with hosts given some user input (i.e crawling a website, downloading content, sending e-mail, etc.). Undoubtedly there's going to be user errors, and if you're using OpenDNS, no matter what hostname you query, you'll always get their server as a result.

Using OpenDNS:

>>> socket.gethostbyname("www.google-misspelled.com")
'208.67.219.132'
>>>

Using GDMS:

>>> socket.gethostbyname("www.google-misspelled.com")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
socket.gaierror: [Errno -2] Name or service not known
>>>

I'd definitely like to see an error or exception if I'm trying to reach an invalid host, or I'll end up sending a lot of junk to opendns.

4. Privacy features

Google DNS seems really focused on Security and reducing the number of DNS-related threats. They go into much more detail here.

5. Simple IP addresses

8.8.8.8, 8.8.4.4, 4.3.2.1 . Seriously :) I have no idea how Google managed to get those ip addresses (hell, I didn't even know they were valid), but it's impossible to forget them. It took me a few months to memorize the OpenDNS addresses (I've even had to look them up on my blackberry a few times).

Comments

]]>
A keyword ad model for twitter http://hoisie.com/post/a_keyword_ad_model_for_twitter http://hoisie.com/post/a_keyword_ad_model_for_twitter"#disqus_thread Some time in the near future, Twitter will begin sending out advertisements alongside of tweets. It's a revenue model which makes sense for them, and it would not require any drastic change in the service. They WILL do this because they need to come up with something sustainable, and quickly.

Not matter which way I think about it, it seems to always reduce to a adwords/adsense-type model. The adwords model will basically let advertisers bid on keywords. When a twitter user gets an update from their friends' timeline, a certain percentage of the tweets are ads which are contextually relevant to their followers' content. So if I'm following lots of sports icons, I'd probably get offers from sport merchandisers, etc..

Also, the adsense model will let high-ranking twitter users make money from their subscribers. A twitter user with two million followers is inherently more valuable to the service than one with 20. So twitter will probably allow them to turn on advertising, which will show advertisements that are relevant to the high-traffic users' content. A side-effect of this could be that the more celebrities you follow, the more advertisements you'll receive, unless the number of ads is limited.

Another side-effect of this is that twitter clients will have be able to have a revenue model. It would be easy for clients to just block ads, but with some incentives they could show ads by default.

Comments

]]>
My thoughts on the Go Programming language http://hoisie.com/post/my_thoughts_on_the_go_programming_language http://hoisie.com/post/my_thoughts_on_the_go_programming_language"#disqus_thread Early this week a group from Google released a new programming language called 'Go'. It's supposedly a uber version of C -- a systems language that has a lot of cool features like garbage collection and concurrent programming. Being a language buff I decided to check it out.

The first interesting thing about Go is the authors. Two guys on the team, Rob Pike and Ken Thompson, are legends in software engineering. They are the kind of guys that can write complete operating systems from scratch. When guys like this develop a programming language, it's hard not to pay attention.

If you watch Rob Pike's technical presentation of Go, he emphasizes that it's designed with speed and concurrency in mind. He notes that there hasn't been much change in system languages for the past decade or so, and since then computing requirements are vastly different.

So I wrote my first Go program, eightqueens.go, which (surprisingly) solves the eight queens problem.

It was relatively painless to write, but I'd have the following suggestions for the go team.

Building and Running Issues

  1. The environment variables for building go are weird. $GOROOT points to the source, and why do you actually need to set $GOARCH and $GOOS? It's easy to detect that.
  2. Go uses a custom, funky build system. Most linux programs are compiled through autoconf and make. The build system has quirks, like if the $GOBIN directory isn't added to your path, it won't install.
  3. The build script automatically installs go. But you have to create the installation directory manually.
  4. The binary naming scheme is weird. For i386 you have the following program names:
    • 8g - compiles .go programs to go object code
    • 8l - a linker which takes go object code and produces binaries
    • 8c - no idea what it does
    • 8a - some kind of assembler
  5. If you have a different architecture, these binaries will be named differently (6a, 6g, 6l, 6c for amd64). I couldn't find out why they use this seemingly arbitrary naming convention.
  6. Compiling and running a go program takes three steps (it would be nice if it
    was just one):
    • run '8g program.go'
    • run '8l program.8'
    • run '8.out'

Language Issues

  1. Sometimes semicolons are needed, and sometimes they're not. Other languages seem to get around the need to use semicolons (i.e ruby and python).
  2. The languages require braces for most control expressions, even if they only contain one inner expression.
  3. There isn't an exception mechanism
  4. Ambiguous assignment. The following are identical:
    • a:=1
    • var a = 1
    • var a int = 1
  5. A compilation error happens when a variable is declared and not used. I'm not a huge fan of this.
  6. Weird debug statements. This happened when I had an out-of-bounds error.

    HelloSIGTRAP: trace trap
    Faulting address: 0x0
    PC=0x804886a
    
    main·initBoard+0x6a /home/Mike/workspace/gotest/eightqueens.go:10
      main·initBoard()
    main·main+0x56 /home/Mike/workspace/gotest/eightqueens.go:17
      main·main()
    mainstart+0xf /home/Mike/workspace/go/src/pkg/runtime/386/asm.s:81
      mainstart()
    goexit /home/Mike/workspace/go/src/pkg/runtime/proc.c:135
      goexit()
    eax     0x878fe000000008
    ebx     0x878fe00809e1dc
    ecx     0x878fe000000000
    edx     0x878fe000000005
    edi     0x878fe000878fc4
    esi     0x878fe000878f9c
    ebp     0x878fe000000008
    esp     0x878fe000878f90
    eip     0x878fe00804886a
    eflags  0x878fe000200246
    cs      0x878fe000000073
    fs      0x878fe000000000
    gs      0x878fe00000003f
    Trace/breakpoint trap
    

Overall I think go will find a good niche - a high performance language that's suitable for most system tasks. It has a great initial library, and it seems to have attracted a large community already(the irc chat room currently has over 500 users). I'm definitely planning to use it for some some simple projects. Looking forward to seeing how go evolves :)

Comments

]]>
couchdb-python and httplib2 http://hoisie.com/post/couchdbpython_and_httplib2 http://hoisie.com/post/couchdbpython_and_httplib2"#disqus_thread If you're using couchdb-python, there's a nasty bug in httplib2 which causes all sorts of weird stuff to happen. The underlying issue is that httplib2 repeats certain requests (PUT, and DELETE). For instance, if you delete a document or a database, the first request succeeds, but the second fails (with a 404 error) because it's already gone. Also, if you store something, the first PUT will go through, but the second won't and you'll get a document update conflict.

You can determine if this is happening by running the test suite that comes with couchdb-python. Just check out the latest couchdb-python, and run 'python setup.py test'. If most tests fail, then you should httplib2.

The couchdb bug is here. This is where you can find the quick patch.

If you're affected by this, star/comment the httplib2 issue here

Comments

]]>
Updates http://hoisie.com/post/updates http://hoisie.com/post/updates"#disqus_thread I haven't posted to this blog for a while. I suppose I should make a couple of updates:

  1. I've been living in SF for about one year now. If you've lived in SF before, you'll agree that it's a very lively city. The friends I've made are incredible, and there's been a ton of personal development in the past year, a lot of it being non-technical.
  2. For the past 10 months, I've been working at Scribd as an engineer, working mostly on Flash, but also hacking on other parts of the site.
  3. Theres tons of stuff I want to write about. Most of it is not tech-related (aside: I wonder if I can get posterous to auto-post here.. I've been using that for my other blog)

Comments

]]>
Application Domains in Flex http://hoisie.com/post/application_domains_in_flex http://hoisie.com/post/application_domains_in_flex"#disqus_thread There's a great article that explains application domains and security domains for flex applications:

http://www.scribd.com/doc/12990361/Loading-Applications

Application domains are a very integral part of the flash runtime, yet it's a topic that doesn't get a lot of attention from developers. Although many apps don't need to worry about this, there are plenty of apps that are either modular (i.e code is contained within flex modules), or include embedded flash components. In this case application domains is definitely something that you should consider.

I like to think of application domains, for the most part, as "class bags": the system application domain contains all the definition for the flash runtime classes, and your 'Application.currentDomain' contains definitions for all flex classes (i.e mx.managers.*).

If you're loading a flex module, or embedding a flash component, you need to be careful which application domain it's being loaded into. If you load a component into an application domain where there could be naming conflicts, it's likely that your application won't run correctly.

The safe thing to do, in general, is to load all modules and components into child application domains. That way you can do things like have a flex 3.3 application which includes a charting component written in flex 3.1. Luckily this is the default for most loading mechanisms in flex.

Comments

]]>
When will the record industry learn http://hoisie.com/post/when_will_the_record_industry_learn http://hoisie.com/post/when_will_the_record_industry_learn"#disqus_thread A few days ago word got out that Warner Music will remove all of its content from Youtube. There is a WSJ article here . It's likely that Warner wanted more money from Youtube and tried to renegotiate. Youtube, in the meantime, got tired of losing money on the content, so it refused the new terms. Minor loss for Youtube. Big mistake for Warner.

Now, Warner Music is a pretty big deal. They have some of the most popular and mainstream labels in existance. Their videos were no doubt among the most popular on Youtube. They were making a lot of money from these videos (upwards of 100 million dollars). But it wasn't enough.

Instead of making money on this, Warner will go back to spending money fighting piracy. And haven't the past 8 years shown how effective the record industry is in fighting piracy?

The fact is that all of these videos will simply reappear on Youtube. No matter how aggressive Warner is in it's copyright claims, no matter how many people they hire to send notices, the videos will come back. Users will be pissed off that their favorite bands aren't on the site, and will upload the videos. People will have to scroll a little deeper in the search results to find them, but in the mean time, Google won't be paying any money to Warner for these illegal views.

Also, for many people, Youtube is the new MTV. It can be a very effective tool for the music industry. Not only mindshare, but Warner could have leveraged Youtube to sell more albums with intelligent linking.

Instead, it's competitors will continue to reap the benefits of Youtube. I wonder how long it will be until Warner realizes its mistake and puts the content back up.

Comments

]]>
Git merge in windows http://hoisie.com/post/git_merge_in_windows http://hoisie.com/post/git_merge_in_windows"#disqus_thread If you find yourself in the situation where you're developing in Windows and using msysgit, and your repo has a conflict, merging can be a painful experience. The best thing you can do is to do it manually. There are plenty of nice tools for merging in windows, but none of them (at this point) seem to work with msysgit. Just read the documentation on merging, and do it by hand. This is explained nicely in the docs:

http://www.kernel.org/pub/software/scm/git/docs/git-merge.html

Comments

]]>
Site redesign http://hoisie.com/post/site_redesign http://hoisie.com/post/site_redesign"#disqus_thread I upgraded the design of this site to a more professional elegant distinguished look. Now it's running a modified version of the wordpress theme unsleepable. It's odd using a wordpress theme for a non-wordpress site, but I don't mind, some wordpress themes are astounding, and the theme ecosystem around wordpress great.

The new site has a couple new 'features' - each post has tags, and I got rid of the Friendfeed widget. It's also running on the bleeding-edge pylons and couchdb.

If you're considering stealing a wordpress theme for a non-WP site, a quick word of advice: don't bother using the theme source (the php files) as a starting point, unless you want to reimplement the wordpress API. It's much easier to use the page source of an existing site as the starting point.

Comments

]]>
Thoughts on my rank http://hoisie.com/post/thoughts_on_my_rank http://hoisie.com/post/thoughts_on_my_rank"#disqus_thread It was six weeks ago when my home page launched , and it only now appears in Google as the top search result for my name. It wasn't a gradual climb either - all of a sudden it jumped from result 15 to 1. Why the sudden jump? I have no idea -- the content wasn't updated recently, and Google's Webmaster tools didn’t say anything. It could be a number of small changes I made in the past weeks that were finally analyzed, or it could be some obscure temporal feature in Google’s ranking algorithm. Perhaps each time Google crawled the site, it had a little more content, and a better link structure. But honestly, I have no idea.

This might explain why SEO is such an anecdotal process. Without being able to immediately see the effects of your optimizations, it’s impossible to tell exactly how you came about your ranking. The best you can do is read the disparate advice about SEO and try some of the tactics. And then wait several weeks.

For people that depend on Google's organic traffic, this could be a dilemma. If a subtle change you made weeks ago cause a dramatic shift in your search ranking, how exactly do you pinpoint the issue?

Either way, being the first entry for my name has a couple of nice benefits:

  • When people search for my name, they'll click on something I control.
  • II'll be spending much less time worrying about SEO, and more time on the content

Comments

]]>
Moving to SF part I - finding an apartment http://hoisie.com/post/moving_to_sf_part_i__finding_an_apartment http://hoisie.com/post/moving_to_sf_part_i__finding_an_apartment"#disqus_thread So you've been inspired by guys like Andrew Chen who move to SF on a whim, and now you're thinking about it yourself. SF is an exciting place to live, and the tech community is probably the best in the world. But for those who actually do it, I'd like to offer my sincere advice for the first step: finding housing can be a real pain in the ass. It's the hardest during the summer months, when the hiring machines inside companies are running full steam, and there's tons of immigration to California. This can be a real tough obstacle - so if you want to have an easier time moving, try the winter or spring.

If you are intent on moving in the summer be prepared to spend several weeks looking for a place. You might get get lucky and find it in a few days, or get unlucky and spend months looking. Having some kind of reliable short-term housing is critical.

The usual route is to use craigslist. In most cities, Craigslist usually takes a few days. But in SF during the summer, you're competing with hundreds of other people for apartments. Some of the more popular CL listings get hundreds of e-mails from prospective roommates. With numbers this high, you have a near-zero chance of being selected. It's especially bad if you're male. Landlords prefer females. Females prefer females. If you're a female, you're lucky. Otherwise, you have to suck it up and look harder.

The best thing you can do is avoid craigslist altogether. Contact your friends who are in the area. Use facebook or twitter status messages. Let people know you're coming and someone might have a room available. This should be your first step - it's not a time to be shy or passive.

If you do have to resort to Craigslist, you have to be persistent. From my experience, around 10-20% of the listings you e-mail will respond. If you can arrange a showing, you have a much better chance of getting a place. You should be able to find something after sending e-mail to ~50 listings. If you're picky, it might take over hundreds.

The first step is to create a spam message template. This is the message you'll be sending to every listing. It should be personal, well-written, and you should customize it a little for each post. The goal is to get as few people to ignore it. Tricks like including their name in the subject line help. There's technology that can make browsing listings easier, like custom Craigslist search RSS feeds, or mashups like HousingMaps . Keeping the e-mails organized helps a lot.

By far the most important thing is to be persistent. It's a huge schlep, but you'll get it eventually. Having been through this process, I understand the how painful it can be. Send me an e-mail and I'll try to help you out.

Comments

]]>
How to make a self-help book http://hoisie.com/post/how_to_make_a_selfhelp_book http://hoisie.com/post/how_to_make_a_selfhelp_book"#disqus_thread "Ben is struggling. Ben changes his usual routine and starts doing X. Fast forward a few years, and now Ben is successful."

Therefore, authors conclude, doing X will also make you successful.

That seems like a good formula self-help book. It reminds me a little of how medicine was performed up until the 20th century. People were given a treatment, and if it seemed to have a positive effect, it was given to everyone. But the problem was that lots of medicines were placebos. This changed thanks to better statistics and hypothesis testing.

I'd love to read a self-help book that does real hypothesis testing about their treatments, instead of presenting anecdotal evidence. It would be a great book no matter what.

Comments

]]>
We need more metrics in politics http://hoisie.com/post/we_need_more_metrics_in_politics http://hoisie.com/post/we_need_more_metrics_in_politics"#disqus_thread We need more metrics in politics

"[Sarah Palin] already has more executive experience than the entire Democratic ticket combined"

  • Rudy Giuliani, RNC 2008

What does this mean? Does Giuliani actually believe it is true? In some sense it doesn't matter, because it resonated with Republican voters everywhere, and received thundering applause from the convention audience. It seems that people actually believe this, and don't bother to question it. But in reality it is a shallow statement, devoid of any real facts. And most political speeches, it seems, are full of these types of remarks.

The terms 'experience' and 'executive experience' have been thrown around since the beginning of the campaign season. Obama has been bashed, time and time again, for his lack of 'experience', and McCain's main platform is his many years in the Senate. Yet by Giuliani's metric, the mayor of Oswego, New York has more executive experience than Mccain, and all the legislative branches combined.

That's why we need metrics for certain things in Politics. But not everything can be measured. When Giuliani says crap like "Change is not a destination and hope is not a strategy", nothing in that statement can be counted. But things like experience, to some degree, is quanititive. It can be a simple weighted sum. Weights are different for certain levels of service, and multiply then by time in office. Time wouldn't be measured linearly, because the difference between 12 years and 18 years in the Senate, in my opinion, is negligable. The weights would increase for each level of office, and the population of the state or district would also play a large role (I'd wager any day that becoming a Senator in California is more difficult than becoming a Senator in Kansas).

A similar metric could be created for 'executive experience'. It would take into account time spent in an executive office. Maybe with metrics like these in place, it would be harder for politicians to spend their whole speeches talking about the lack of experience of candidates. The most they could do is cite the number. And they could save rhetoric for actual issues, which I think is more reasonable.

Another thing that I'd like to measure: is McCain really a maverick? How many times did he actually vote in opposition to his party? That would be fun to measure. Anyone know any good political databases?

Comments

]]>
Atlassian - the next billion dollar software company? http://hoisie.com/post/atlassian__the_next_billion_dollar_software_company http://hoisie.com/post/atlassian__the_next_billion_dollar_software_company"#disqus_thread At first sight, Atlassian's software lineup doesn't seem too remarkable. A bug-tracker, a wiki, and a few other developer tools. Most of this stuff isn't revolutionary, and they have some a-list blogger competitors . But when you dig a little deeper, it's one of the few 'enterprise' companies to successfully use ideas from web 2.0 and open source in their product.

If you use the Adobe bug-tracking and development forums for Flash/Flex product lines, you'll hardly notice that it's running Atlassian. But when you submit a bug to their tracker, you start to notice that the process is almost unique for a large company. Most of the time, within a couple hours of submitting a bug, an Adobe test manager will triage the report. If there's actually something wrong, they'll assign it to an engineer. A lot of the time, bugs are punted or deferred - but they are never ignored, and the submitter is directly involved with the engineering team. It's a similar process in the forums - when you post a question, chances are that it'll be answered by real Adobe engineers.

There's still lots of process involved, and probably even more behind the scenes, but I don't know of too many other companies that take the community into account. It probably makes Adobe engineers and testers feel more accountable for their bugs because everything is public. If you're not fixing the bug, bloggers can easily rant about it. The community can vote on the important issues. There's just lots more transparency.

Of course, this process isn't perfect, but it's much better than other large companies. Microsoft, for instance, still relies primarily on Usenet for collaboration with their customers (to their credit, they have also taken up blogging ).

Adobe seems to be one of the only companies to really embrace open-source methodologies for product development. Ant it seems to be working for them. Flex is being embraced by developers, partly because there's a lot more sense of involvement and transparency. Many of the features for Flex 4 (the next version) have already been implemented by the community -- holy crap!

Software like Atlassian is changing the game - it's giving companies many advantages of open source, and it's doing this in a simple way - just by making some of the development process open to the public.

Comments

]]>
If you care about SEO http://hoisie.com/post/if_you_care_about_seo http://hoisie.com/post/if_you_care_about_seo"#disqus_thread I found a great video about SEO techniques from Tony Wright . It's not just about SEO, though, it's about all aspects of website marketing -- including advertising, viral mechanisms, and lots of other topics. SEO is a pretty tricky game, and I don't claim to be an expert by any means. Tony, on the other hand, seems to have a background doing this kind of stuff, so a lot of what he says comes from experience. One of the takeaways is that SEO is "a gift that keeps on giving" -- once you get great search placement, the incoming traffic is free. It's not rocket science, but it requires a certain mindset and awareness.

The reason I've been more interested in SEO lately because I've been having problems getting this domain to the top of the Google results. One problem I had was duplicate title and meta-description tags. These things are hardly an issue when you run software like Wordpress, which includes SEO out of the box.

After watching the video, I've been fixing up this site to be more search engine friendly. Mostly common sense stuff, like making sure that urls and titles contain keywords, and there are some quality outbound links. Small things. Eventually I might pull data from friendfeed or disqus server-side, and render it on each request.

In the mean time, check out the video:

Comments

]]>
Every day http://hoisie.com/post/every_day http://hoisie.com/post/every_day"#disqus_thread I've always been impressed with writers who can blog every day, especially those who can consistently pump out quality posts. People like Scoble, and Techcrunch -- they're everywhere, which (at least partially) explains why they're so popular.

Some do try blogging every day, but it seems that their posts lose focus. I think Raymond chan is an example of this. His early posts provided a unique view into early Microsoft Culture. These days, while many of his posts are still technical, lots of his posts are about things he reads on the internet. It's not his fault -- but he's trying to maintain one post a day, and there's only so much about Windows you can say.

I've read somewhere that 'blog' is a term old media uses to describe any form of online media. I don't think Techcrunch or Gawker or fasttcompany.tv qualify as a blogs -- they each have several web sites, and some even employ a pretty large staff. At some point 'blog' will be dropped, and they'll just be media companies.

I can't imagine writing something good every day. If I was out in the field, I might be able to write summary posts about things I did. I actually tried that for a while about a year ago here, but quickly realized that it was only amounting to garbage. When your 'field' is sitting in front of a laptop coding, there really isn't much to write about. Sure you can post about code snippets, but it isn't something I want to do every day.

So my goal is to only publish things after editing them for at least three to four days. It's to write stuff that doesn't seem like garbage when I read it a few months down the line. Maybe one day I'll get the hang of it.

Comments

]]>
An interesting exercise http://hoisie.com/post/an_interesting_exercise http://hoisie.com/post/an_interesting_exercise"#disqus_thread I was checking out some videos online when I came across Mike Arrington's talk from Startup School '08.

One of his main points was that entrepreneurs should have a blog or website. It's the best way to interact with the press and media, and it lets you respond to any type of product review -- positive or negative.

This actually gave me the initiative to create a blog. But after checking out the existing platforms (wordpress, typepad, blogger), I couldn't find anything that was worth the effort. They all seem broken in different ways, but the common one is lack of personalization: when I create a blog, it looks too generic. Of course, if you don't like the default look, you can try a better-looking template with more CSS hacks, but then making modifications is more painful. Struggling with a wordpress theme is not my idea of time well spent.

The theming engines in these platforms generally involve editing the server-side PHP/SQL/CSS code. Blogger is a little better about this, they actually have a theme XML language, but who really wants to learn the custom blogger schema? All this explains why there's a market for professional blog designers (search for that in Google). But customizing a blog should be as easy as editing a word document, or creating a mockup.

Many people, it seems, are happy with the default themes. They really only care about transcribing their thoughts, and any blog platform solves that. But like Arrington says, if your blog is the center-point of your interaction with the community, shouldn't you be able to add a greater level or personalization?

I think so, which is why I decided to roll own. Creating a blog from scratch is a great way to exercise your favorite language, web framework, database, whatever. You only add the features you want.

And it was remarkably easy, because most web frameworks are built for this type of project. Plus, adding Disqus and FriendFeed widgets help with all the heavy lifting. The only thing you need to is store and edit the content, which is pretty trivial.

So the next time you're trying to decide between Typepad or Wordpress, choose neither. Roll your own.

Comments

]]>