What will happen to house prices in the Bay Area after the Facebook IPO?

A lot of people seem to think that house prices in the Bay Area will rise significantly after the Facebook IPO. It's fun to speculate about, but those people seem to be assuming a lot. Here are some of those assumptions I'm not so sure about:

  1. Facebook will add a significant number of new millionaires to the Bay Area.

  2. Everyone that benefits from the Facebook IPO will want to invest that money in a house, instead of into the stock market, retirement, cars, etc.

  3. Everyone that wants to invest their option cash in a house will buy shortly after they liquidate their options.

  4. Most of Facebook's new millionaires will buy houses in the Bay Area.

  5. The supply of housing for multi-millionaires is inelastic.

  6. The people buying new houses will not be vacating their old ones.

I'm not so sure that those assumptions are good ones. A San Francisco Chronicle article from 2009 said that there were 136,000 millionaires in the Bay Area in 2009, a number that has surely risen since then. Facebook has 3500+ employees, and on the high side I would guess maybe 1500 are going to earn enough money from the IPO to change their lifestyle, This would add about 1% to the Bay's total, assuming all of Facebook's newly minted millionaires live in the Bay Area.

If anything the prices of houses at the very high end (10 million plus) will rise. But it's hard to feel very sorry for people that are priced out of that market. If anything a housing shortage here may help remove or loosen some of the Bay's many restrictive housing and zoning laws.

Virtualenv is an anti-pattern (for beginners)

Every time I do a user test with a beginning programmer, I remember how hard computers are, how unforgiving the tools are, and end up wanting to apologize for how annoying and strict programming is. We are making progress with teaching people how to code, but it's still really hard.

For example, if you are just getting started with Python, here's a short list of problems you might face when trying to set up Flask, which is by far the easiest Python web server to set up.

  • Learning how to cd in the terminal
  • How URL's requested by a user map to actual code
  • HTML, CSS and Javascript, because you actually want it to be pretty.
  • How to read and write things from a database
  • Installing Flask, so learning how to use pip or easy_install
  • Python telling you your file is no good because it mixes tabs and spaces.
  • How to run Flask locally

How to draw an owl: 1. Draw some circles 2. Draw the rest of the fucking owl

And that's not even counting the stuff that's so obvious to us we forget to mention it. Most quickstart guides also fail to help people make incremental progress.

Game designers are great at teaching new, hard things. They have to be, or no one will play their games. You will notice that games don't start with you battling Ganon in an epic death match; they start with you learning how to use the character and perform actions like make a kick, or open a door. Through a series of incremental successes you become an expert in the game and can tackle more and more complex tasks.

It bugs me to see so many Python tutorials mention virtualenv as a requirement to get started. (virtualenv is a tool for sandboxing your Python apps, so each Python project on your computer is using its own set of packages). The biggest advantage of virtualenv is that you can have different versions of the same Python package (like Flask or requests) that are required by different projects, whereas if you install them system-wide you can't.

However, recommending virtualenv just adds another thing you have to do before you can see pretty lights on the screen, and represents another possible opportunity for people to lose interest, and start doing something else instead of learning how to get a web server set up.

It also introduces a significant opportunity for confusion; the "It was working yesterday, why isn't it working now?" problem. You need to remember to source your virtualenv file in every Terminal shell where you're running Python, or your terminal will tell you it can't find the library you literally just installed. Needless to say this is confusing, the Terminal won't tell you how to solve the problem, and Googling for the answer isn't likely to give you the solution you need, because it's such a generic error message.

I've never seen beginners run into the problem of needing conflicting versions of a Python package for two different projects. I was comfortable dumping everything into site-packages for over two years of Python development; only when I started working at Twilio did I need to start installing virtualenvs for every project.

As a community, I believe we should stop recommending that beginners install virtualenv. The faster we can get beginners to a Holy Shit, I Wrote Code That Made Something Happen moment, the better, and virtualenv is a big block for getting to that point. Instead I'd recommend installing pip using the one line curl program in the second paragraph here. virtualenv is something that's more appropriate to learn about and use once you have a few Python projects under your belt.

#1 on HN for Six Hours: Postmortem

On Saturday my post on how not to ask questions at a conference was the number one post on the site for a solid six hours, between four and ten PM. Here are some raw stats from the last day.

  • Since the post was submitted, I've gotten 31,787 pageviews to my site; 14,478 in the nine hours between post submission and midnight, and another 15k on Sunday. One post can bring in amazing amounts of traffic, and justify all of the effort you've put into creating quality blog content.

  • In just the last two days I've gotten 50% as much traffic as I did in the whole previous year.

Google Analytics Traffic
Can you tell which days I made the frontpage of Hacker News?

  • Of those pageviews, 30,807 were for the article itself. 414 people visited my homepage (1 in 72 people) and 253 people visited my about page (1 in every 130).

  • 8,142 visits (roughly 27%) came from mobile devices. I am really glad I added a mobile/responsive view for smaller screens earlier this year, as this makes the content much more consumable on a small screen.

  • 69% of mobile visits (18% of the total) came from an iOS device.

  • Roughly 10,000 clicks came from Hacker News and 8,700 came from the Programming subreddit, where my post is still on the frontpage a day and a half later. If your post is doing well on HN, it probably makes sense to submit it to Proggit as well, as there's a large contingent of people that use Proggit exclusively.

  • 1,479 people have clicked on the aggregate Bit.ly link and 97 people have Tweeted the post (roughly 1 in 300).

  • I added 18 Twitter followers (about 1 in every 1800 visitors), bumping my total to 418. I added one new Bitbucket follower and zero new newsletter subscribers.

  • 23 people left comments on the post (about 1 in every 1300). 156 people left comments on Hacker News, off about 10k clicks, and ~160 people left comments on Reddit, off of 9k clicks.

I've posted my "conversion rate" in all cases because I don't feel like it's amazingly high. This is probably the nature of this sort of traffic though; there to read an article and learn something and then move on to the next thing. I suppose if I can reach the frontpage a few times in short succession, people may start to recognize my name and there would be a snowball effect, in terms of the number of people signing up to follow me or posting comments.

I don't have the tools in place at the moment to be able to test my "conversion rates" and see whether they can be improved. All in all though, the low rates at which people are clicking through to other material on my site suggests that I should put any information you'd like readers to know about yourself on the post view page, or in the footer of the post itself.

“The best recommendations have a lot of verbs”

Via Tyler Cowen, an author from the Wall Street Journal interviewed the head of admissions at the Harvard Business School. The whole article is good, but this particular line stood out:

The best recommendations have a lot of verbs. They say, "She did this," versus adjectives that simply describe you.

I remember in 5th grade that we had to write Show Not Tell stories. The idea was to get out of the habit of writing "Kyle is in 3rd grade and he is really kind" - style stories and instead writing "When Joey's mom couldn't pick him up, Kyle walked him all the way home, even though it was two miles in the wrong direction."

I don't know why later teachers dropped the Show Not Tell agenda from the curriculum, but apparently people still write in this style. Maybe recommenders are lazy and it's easier to write "Shannon is a hard worker" than it is to come up with a concrete example. Maybe the recommender doesn't know the student very well, which is discussed in the article, and a problem.

The other possibility is that the person being recommended hasn't done anything interesting. It's easy to tell, because if you have done things, people tend to mention them when they're introducing you to someone, like "This is Jeff. Jeff wrote the entire billing system." You can also tell because the bullet points on your resume will have really bland verbs in them that don't really say anything, like "Developed marketing skills" or "Monitored social analytics tools for Company X".

One day you are going to have to wake up and decide to be Someone that Does Things. The World of Doing can be scary at first because there are lots of things that need to be done and no one is there to tell you how to do them.

So: what verbs to people use to describe you? Which of the versions below would you rather someone used to describe you?

  • "He's really good at finding tips and tricks to save time."

  • "He built a replacement for the school's calendar system and got 550 people to sign up."


  • "She is a really fierce competitor."
  • "She won the regional finals for her team by making free throws and getting a key steal in the final minutes."


  • "She's a hard worker."
  • "She rewrote the website to make it 100% faster, which boosted signups by 50%."


  • "His code is always reliable."
  • "While he was in charge, the API was down for a total of three minutes in two years."

Related: See Be Specific at Less Wrong.

How not to ask questions at a conference

I went to Pycon last month (my first conference ever!) The conference was totally awesome and I met a lot of cool people. But I was also pretty appalled at the question asking at the end of each talk. Here's some stuff you should keep in mind before you ask a question at a conference.

  • Ask questions that you believe would be relevant to at least a third of the people in the room. Otherwise, avoid the temptation to show off your specialized knowledge to the room and just ask the speaker afterwards. Most of them are approachable on Twitter, email, or just in the hallways.

  • Ask only one question. If you have more than one question, pick the best and ask the other one in private later. Or ask your first question and then go to the back of the line. Other people have questions to ask as well and may not get to ask one.

  • Avoid buzzword bingo. It feels like lots of people walk up to the microphone just so the room can hear them mention some buzzword that indicates they know something about the topic. If I am running a Scrum team should I use Soak testing? How does Node.js influence the development of the PyPy project? If you wouldn't ask the question without a room full of people present, then don't ask.

  • Ask a question, don't make a comment. Talk time is for the speaker to be the expert, not you. Write up your comment as a blog post and post it for everyone to read later.

  • Be brief. After a talk, time is precious and many people may have questions for the speaker, so don't ramble about how nice it is to finally see the speaker in person, or how enlightening the talk is, even if those things are true. It's a matter of courtesy to everyone else in the room.

There is an easy solution to bad questions that no one has bothered to implement yet. Have people submit questions anonymously and have the speaker or a moderator choose which ones to answer, or have the room vote using a tool like Google Moderator. This will solve the problem of the question asker-bragger asking a trivial question.

The other solution is to charge money to ask a question, which could go to whatever cause you want. If enough people in the room have the same question they can contribute to the fee to ask the question and have it asked.

Update: There's some good discussion on Hacker News. "If the question you're asking makes you look smart, there's a good chance you're being a douchebag."

Also my friend Alan Shreve wants to know if it's appropriate to push back if the speaker dodges your question.

How to use EC2 as a web proxy

If KRON Channel 4 or KICU gave me the ability to stream A's games, I'd gladly pay for it, but they don't, and we're not going to pay for cable just to get baseball.

MLB.tv is great and they allow you to stream games, but they have blackout restrictions where you can't stream the game if it's also being shown on cable locally.

Fortunately, there's a workaround. Because MLB.tv filters based on IP address, you can get around the restriction by sending your Internet traffic through a proxy computer, with an IP address that isn't blocked (this is how, for example, people in China get on the internet). Most proxies are slow though and become unwatchable if you try to stream a high-bandwidth video. If only you could use a high-bandwidth proxy and not share it with anyone else...

Fortunately Amazon provides servers in the cloud that let you do exactly this. People usually use them for running web servers, but you can use them for this purpose just as easily.

  1. Go to aws.amazon.com and login using your Amazon credentials. They will ask you for your credit card and to verify your phone number. As long as you stay inside the Free Tier (roughly 30-40 games a month) you will not be charged.

  2. Click on EC2. Click "Create Instance," then use the Quick Launch wizard. Create an Ubuntu instance (one of the "Free Tier eligible" ones) and make sure you download the credentials, as you need them to log in and they won't be available later.

  3. On the next page click on "Edit Details," then on "Security Settings." You need to create a new Security Group, that will allow computers from your apartment to connect to your new computer in the cloud. Find your apartment's IP address by visiting http://jsonip.com. Then fill out the details like this:

    EC2 Security Group Settings

    Substitute in your own IP address. If you have a cool ISP like Sonic, you can get a static IP address, which makes this much easier. Otherwise your IP address may change from day-to-day, and you'll have to update this setting, or provide a broader range of valid IP addresses in the form.

  4. You need one other piece of information which is the hostname for your EC2 instance. It will look something like this: ec2-12-34-56-789.compute-1.amazonaws.com.

  5. Now the fun parts! Open up the Terminal and type in:

    ssh -i $HOME/.ssh/mlb.pem ubuntu@ec2-12-34-56-789.compute-1.amazonaws.com -D 2001
    

    where $HOME/.ssh/mlb.pem is the route to the .pem file you downloaded earlier, and the hostname is the hostname you got above. Go ahead and leave this connection open. You need to leave this open while you're trying to watch some baseball.

    (This won't work for PC users. If you're on a PC you have to configure PuTTY to use SSH, which is an unusable mess that I'm glad I don't have to deal with anymore).

  6. Now open Firefox Preferences, click "Advanced", click "Settings", then type in these settings:

    Firefox proxy settings

    To check that they were applied correctly, visit jsonip.com in your Firefox browser. It should be a different IP than your apartment! Browse away!

Some notes:

  • The next time you set this up, all you have to do is run the SSH command in your terminal, and set up Firefox to use the proxy. It won't hurt your computer to kill either at any time, but the stream will stop working.

  • This uses the free tier of Amazon Web Services; if you go over your limits then Amazon will charge you. You can check your usage in the "Account Activity" portal on aws.amazon.com.

  • I've only done this for one game, and the usage I checked was about 0.4 GB, which means with 15 GB in/out per month, you should be able to stream about 30 games, assuming no other usage. The connection between MLB and Amazon is really good; the connection between Amazon and your apartment may not be, depending on your connection speed.

  • It may be better to configure these settings in your router so everyone can connect. I'm not sure how to do that, however.

  • Again, I wish this weren't a problem but MLB blacks out games on their streaming service, so there's no way to stream games that are on cable. I have no problem paying for a stream, as we are in fact paying for MLB.tv. I'll take this post down once someone figures out how I can pay to stream games in my local market, without resorting to hacks like this.

Stop hurting my browser

I love Tweetdeck. Well, I love parts of Tweetdeck. Specifically the side-by-side view makes it really easy to see my stream, my replies, people linking to my website and people talking about Twilio on one screen and I haven't found another tool that can do it. But Tweetdeck also breaks my browser in really annoying ways. Here are the most annoying examples.

Use of outline:none on buttons.

When you tab through a form, Tweetdeck doesn't show you which button is currently focused on the screen. I tend to stay on the keyboard wherever I can because switching to the mouse is so slow. It's much faster to fill out forms tabbing with the keyboard than clicking around with the mouse.

Operating systems have highlighters that show you which button is currently focused - on Mac OS X they show a blue glow around the box that's currently focused, like this:

Focused text box

Clearly you can see the US Dollar field is focused. Now if I tab again, the "Measurement Units" button is focused:

Focused select box

Tweetdeck doesn't like having outlines on their buttons. This is what you get if you tab from the "Password" field:

Focused password field

See how the focus disappears:

Focus disappears

It's not that annoying there. Where it's really annoying is when you are trying to post a new tweet. In GMail when I press Tab from the message body, the focus jumps straight to the "Send" button:

Gmail focused send button

This is perfect because it makes sending emails really fast - I just hit Tab, Enter and the email's sent and I'm back in my inbox.

When you press Tab + Enter from the "Tweet" field in Tweetdeck, instead of posting your Tweet, they jump you to the Camera button:

tweet text focus, tab reveals..

tweetdeck camera upload page

Normally this is annoying, but it's not that annoying; I can just Tab multiple times to get to the button. But Tweetdeck also hides the focus with outline:none in their CSS, so you can't actually tell which button is currently focused. This means you can't figure out how many times you need to Tab through to get to the Tweet button.

It's really not that hard to fix, and it won't make a lick of difference to the mouse-clicking hoi polloi. Just change the HTML tabindex of the form, and add a focused style for the button.

Using target=_blank for links.

When I read my stream, I read through all the Tweets first, opening up interesting links in new tabs to read later. I don't want to constantly be jumping back and forth between my stream and articles, because I lose my place in the stream.

Fortunately, browsers offer two methods for opening new tabs in the background. One is to hold Cmd while clicking on a link. The second is to right click and press "Open in new tab."

Neither of these is good enough for Tweetdeck; they force you to immediately switch out of your stream into new articles by adding a target="_blank" attribute to all links in the app. target="_blank" links override your browser's default behavior and switch your focus immediately to the new tab or window.

The reason they attach target=_blank attributes to their URL's is so that all of their links open in a different tab, instead of the same and Tweetdeck stays open in the browser. But that's also evil, because it breaks a user's expectation about what's going to happen when they click on the link. I want to open links in a different tab, I just don't want them to be focused, and Tweetdeck makes this impossible.

Completely breaking when Javascript is disabled.

Lately I've been playing with disabling Javascript in my browser. Mostly I am disappointed in how much of the Internet breaks when you disable Javascript, especially pages that only show content like news articles or blog posts.

It's nice at least when a site includes a <noscript> tag telling you that you need to enable Javascript for the site to function. Tweetdeck doesn't even do this. Here is what you get if you browse to web.tweetdeck.com with Javascript disabled:

Empty Tweetdeck screen with Javascript disabled

That's a blank screen, with no notice or indication that your browser didn't crap out.

They also detect your user agent, and error out if you try to access Tweetdeck with Firefox or Opera, without even making an attempt to display the page. I can understand not supporting IE, but I don't understand why they can't even try Firefox.

Unsupported browser

Conclusion

Tweetdeck is good enough that I'll continue to use it, but there are some simple things that make my experience a little miserable every time I click on a link or try to write a new Tweet. I wish Twitter as a whole cared more about accessibility and usability for all of its users (here's another example); with an estimated 100 million active users, even a small percentage of users who lack the fine motor control to use a mouse (or even a keyboard) is still a large number of people that are affected by problems like this.

Better to prevent mistakes than to fix them quickly

Friday one of my favorite teams, St. Mary's, dropped an extremely close game to Purdue. They were up one point with 31 seconds to go when one of their senior players tried to run the baseline, something you can only do after you have scored a basket. Purdue took the ball and went on to win the game.

Client Steindl hangs his head

Obviously it was a bad mistake for the player to make in that situation. But there's another person who is to blame: the referee. Before inbounding the ball, the referee will signal to the player that they either can or cannot run the baseline. Sure, the referee can blow the whistle every time there is a violation, but it's better to prevent the error in the first place. It would be like letting players line up for a free throw in the wrong order, letting the player shoot and then blowing the whistle for incorrect order.

Ultimately the blame belongs with the player who made the mistake; he should have known better. But it was an awful way to decide the game; on a technicality instead of through the actions on the court.

It's a known law of websites that any type of mistake that can be made by your users (entering a username instead of an email address, entering a wrong phone number, etc) will be. For those cases we write error handling code and prevent incorrect data from being written to our database. But it's better to prevent the error as quickly as you can - as soon as they make the mistake, if it's possible. The more time that elapses between the error occurring and the time you tell them about it, the more frustrated they are likely to be. Even better is to design your form in a way that prevents them from making the mistake in the first place.

Pretty much every site needs to validate form data on the server to make sure it's correct. But the best sites will also validate data on the client side, e.g. when the user is typing it into their computer. This way they can prevent users from making dumb mistakes.

How beginning programmers should read a quickstart guide

Programming is hard. Especially when you are just getting started, there are a lot of things, in Donald Rumsfeld's words, that you "don't know that you don't know." Lots of quickstarts for beginners assume the reader knows things about how the command line works that my experience shows they don't. I do lots of user tests with people new-to-programming and see these errors again and again.

I thought I'd put together a short list of things quickstart writers leave out, that will still leave you totally stumped.

  • Most of the time if you see an indented block of text in a fixed width font, like this:

    $ foo baz bang
    

    It usually means you're supposed to do something with the text in the box.

  • If the text in the box has a dollar sign at the beginning of it, it represents a command you are supposed to enter in your Terminal. If you get an error that looks like this:

        bash: $: command not found
    

    It means you aren't supposed to copy the dollar sign. Just type foo baz bang and hit <Enter>. Unfortunately it's hard to Google for dollar signs, so you can't really figure out what you did wrong.

  • If there's a dollar sign, followed by some more text on the lines below the dollar sign, the lines below represent the output of running the command correctly. For example:

        $ python run.py
         * Running on http://127.0.0.1:5000/
         * Restarting with reloader
    

    You are only supposed to type in python run.py into your Terminal. The rest of that stuff is the output of running the command correctly.

  • If the block of text doesn't have a dollar sign, it's probably a snippet of code you are supposed to copy into a text editor and save into a file (On Mac, use TextWrangler; on Windows use Notepad++). Hunt around the quickstart for a filename you should use.

  • If they don't tell you where to save the files, create a new folder and save all of the files in there, in the top level.

  • If the command line mentions a file you've recently created, like this:

        $ python run.py
    

    You need to run the command from "inside" the same folder as the file. The terminal has a notion of being "in" a directory (Directories and folders are the same thing). Here's a short guide:

    • To figure out which directory you are in, type pwd and press Enter. (pwd stands for "print working directory").

    • To list all files and folders in the current directory, type ls -al and press Enter.

    • To go into a folder below the current one, type cd Documents (or whichever folder you are trying to navigate to). To do more than one type cd Documents/code.

    • To go up a level type cd ..

    Once you're "in" the right place you should be able to run the command properly.

  • If you feel like you are spinning your wheels, ask for help! It's important to know how to ask. Make sure to tell people a) what you are trying to do, b) what you expected to happen, and c) what actually happened. Bonus points if you can talk about things you tried previously and why they failed to do what you wanted.

As an author of a quickstart myself, I feel like I owe an apology to users who are just getting started, for not including this information along with our guide. Sadly the terminal is just about the least beginner-friendly piece of software I can think of, and when you are just getting started, so-called "simple" errors can totally derail you and make you want to go outside and play Frisbee or roller blade.

Hopefully these tips will help you get started doing that cool tutorial you've always wanted to do.

CMC’s website shows vast improvements

Last summer I tore into CMC's website redesign, saying that the new design emphasized looks over function and did a poor job of explaining what made CMC special. I recently visited the site and they've made a bunch of usability improvements.

Here are some of the highlights. Again, I offer these up with the caveat that, I haven't done any testing or looked at any data, but I do have a lot of experience in this area.

  • The old homepage, with only 14 links, call to action button that looked like an ad, and incredibly-difficult-to-change photo content, is gone. Instead users are redirected straight to http://cmc.edu/discovercmc, which is a much better page.

  • The Discover CMC page has lots of dynamic content that promises to be much easier to update; photos of speakers, links to events, a Twitter widget and a sliding bar. It also has an updated meta description, so a Google search for "Claremont McKenna" returns more contextual information about CMC.

  • Static assets (images, CSS, Javascript) are being cached with a Last-Modified and an E-Tag header, so that browsers will not re-request the same images and CSS every time a user requests the homepage. This will help with page load times.

  • There's a call to action button on the homepage: "Plan your Visit to Claremont McKenna today."

  • The "Student Gateway" replaced all of the stock photos with links to useful content, like the login form for your email account, which used to take around four clicks. That is outstanding. (For the record, http://bit.ly/cmcmail will take you right to the old form - I set up that link junior year :)) It looks like a page I would actually use to find things I was looking for - the maintenance request page, the Collins menu, etc.

  • The calendar on the Student Gateway page uses Google Calendar, instead of the old ASPX event calendar that no one used.

  • The "Prospective Students" page has an explanation of why you should apply to CMC.

  • Skip links for disabled users!! These will help people skip to the main page content and help CMC, a nonprofit, meet government standards for website accessibility.

  • The professor home pages, which I singled out for SEO improvements, have gotten about halfway there; it's clear someone is thinking about improvements in that area. Pages now contain an h1 tag and some keywords describing what the professor does; it's a lot of work, but the pages would be best with a unique <title> attribute and a meta description, however.

These add up to amazing improvements in usability and discoverability; they've addressed most of the problems with the old site. It also represents a tremendous amount of effort on the website and whoever is responsible should be proud.

That said, it's still not perfect, and there are some more quick usability/SEO wins to accomplish. Here's a shorter, less urgent, list of areas they could still improve upon:

  • You can access the Discover CMC page from eight distinct URL's:

    • www.cmc.edu/discovercmc
    • cmc.edu/discovercmc
    • claremontmckenna.edu/discovercmc
    • www.claremontmckenna.edu/discovercmc
    • www.cmc.edu/discovercmc/index.php
    • cmc.edu/discovercmc/index.php
    • claremontmckenna.edu/discovercmc/index.php
    • www.claremontmckenna.edu/discovercmc/index.php

    Google will sometimes interpret duplicate content as a sign that you're trying to farm for content by placing the same text at different URL's. It also means Google is unsure which version of the page to point people to. It's better for Google rankings to redirect all duplicate content to one canonical domain/URL with a 301 (and better still to serve it at the root - shorter URL's rank more highly).

  • It feels odd to have distinct pages for Admission and for Prospective Students; those two have a ton of overlap and it might be best to merge them. Prospective students are the only group interested in Admissions information, and the Admission pages may get more love (see the outdated Twitter feed on the Prospective students page).

  • The dropdown menu is great and includes a ton of links to useful content. However, I expected that when I hovered over the menu item, the menu would appear automatically. Instead I had to click to make the menu appear. Normally I expect when I click on something that looks like a link, I will be taken to a different page, so I was hesitant to click on the link.

    Dropdown menus have a usability problem where users scrolling the mouse from above the menu to below the menu trigger the flyout, even though they don't mean to. The best practice here is to have the menu only appear after the user has hovered over the item for around half a second, so that transient mousers don't trigger the flyout.

One of the reasons I set up Good Morning CMC was to provide students with an actually useful calendar and a more accessible view of the information that we needed on a daily basis. With these changes Good Morning CMC is becoming close to redundant.

The number of CMC students interested in different tech fields - web design, marketing, entrepreneurship - has been on the rise recently. I wouldn't be surprised if the web team and some smart interns couldn't continue to improve the site, boosting application rates, prospective student contact rates, and alumni giving rates, through iterative improvements to the current site.

PS Sorry I didn't include images or links - I am trying to blog more often and cut down on the amount of time it takes to do so.