3 posts tagged “52 clix”
Several years and fewer gray hairs ago, I developed an application just like Citysearch for a client. It was focused on restaurants which catered to the wine crowd, with byob service.
The client requested the ability to search restaurants through a radius. "I want all restaurants within 15 miles of Hoboken, New Jersey." At 20 years of age, I probably shouldn't have told him "no problem" before doing my homework. Fortunately, naivete is counterbalanced with determination at 20. You work dumber and harder as opposed to working smarter when you get older. But I digress...
Free as in Beer
Did you know that the United States Census Bureau gives away its city, state, zip code, latitude and longitude data for free? No foolin'. Just visit the U.S. Gazetteer Web site and download the flat files with the data. This data coupled with a math equation to determine the distance between latitudinal and longitudinal points is all you need to add regionality to your application. For PHP developers, there's a open source project called phpZipLocator to speed up the process.
How We're Using it
At 52 Clix, we're adding an Events calendar section and we'd like for our users to be able to choose to display only events relevant to their region. We prompt the user once for their home zip code. With the census data called "Zips," we look up and store the latitude and longitude.
When an event is created, the poster enters the city and state. We use the census data called "Places" to look up and store the latitude and longitude. We do not ask for the zip code because it's often the case that someone doesn't know the zip for a particular place. Some cities have different zip codes every 10 blocks!
Once the lat/lon is known for each of the points, we simply query our database with the distance math equation. We're using the query found in the GPL'd package Zipdy written by V. Alex Brennen.
There are a lot of factors which go in to making a successful social Web application. Keeping spammers at bay, ensuring a snappy response time for users, slaying the Fail Whale and so on.
However, one feature to a site that must exist as you become successful is the ability to make your large site feel small again.
What's your problem?
As a member of Yelp since 2005, I've seen first-hand the turnover of active membership - viewed here as people who participate on message boards, create and comment on events and consistently engage in communication features - as a site grows. I look at the active users on Yelp now as the 3rd generation. The first 2 broke off the site and some of them founded their own little communities, essentially retaining the culture they had developed for themselves on the site.
In each generational shift, you saw the same thing. As those outside of their culture joined the site, there is an initial snarkiness amongst the majority actives. Essentially, they are telling the noobs they better get in line with their culture, or they're going to give them a hard time at every turn. Eventually, enough noobs overwhelm the current size of the generation and the generation feels disenfranchised. They reminisce about how cool the Web site "used to be, before all these new people joined."
This concept will likely seem obvious to most people. In high school, sophomores think freshman are out of touch. The Baby Boomers think the X Generation has bad taste. Punk feels betrayed by post-punk, as seen the documentary Kill Your Idols.
My friend Chris and I were chatting the other night and he brought up something he had read in The Tipping Point, a book I've owned for 2 years but have read to actually read. He told me about The Rule of 150, which is the idea that at most 150 people can work together in harmony and be productive. While the book highlighted this in a professional, co-worker scenario, it's applicable to the online world as well. If I had to make an estimated guess at how large the active community was on Yelp, it was probably quite near 150 each time there was a fracture.
What's the solution?
How you make a site feel small again is naturally unique to each one. Flickr has Groups, for instance. The fundamental fact is you need the ability for your users to organize themselves. It's not enough to simply create your own organization and expect users to slot themselves into your structure. Because unless you have your finger on the pulse of each grouping you've created, you'll never know when or how to fracture them. Leverage the feelings of your users and give them the tools to self-organize.
Lastly, you shouldn't half-ass the tools for organizing. It's easy enough to create something you call "groups" that users create and join. However, if there's very little to do beyond join the group and state that you're a part of it, you've failed in your design. Each group needs to feel like they have all of the features of your site, but limited to a self-organized subset of members. Stop defection - go small once you've gone big.
posted by Ryan Gillespie
Firefox 3 was released about a month ago as of this post. It's definitely zippier, which any user can love. And it's now Acid2-compliant, which CSS nerds love. The people who don't love it? Those of us who have to fix our code to play nice with its new rendering engine. Yeah, we can hear the CSS evangelists screaming "Well if you wrote it 'correctly' the first time..." (quotes on the fictional statement ours)
Below are got'chas we faced when Firefox 3 users started coming to our site. Sort of a CSS Firefox 3 vs Firefox 2 cheat sheet.
Floats
Widths and wrapping floats
The main problem here is that the width of the parent element (the red box in the image below and the 2nd LI in the code below) is unspecified, but its children elements are floated and do have specified widths. The parent's parent (the UL in the code below) has a width applied that forces the DIV element to wrap. This works as it should across all browsers. Where Firefox 3 gets you though is the actual width of parent element, despite the fact that the element wrapped, is equal to the total width of all its children widths. Before, in Firefox 2, the parent width would be equal to the right edge where the child elements stopped (the red box in the Before in the image below). Now, however, you get the wider parent width (the red box in the After in the image below).
Example Code:
<ul style="width: 300px;">
<li style="float: left; width: 100px;"><img .../></li>
<li style="float: left;">
<p style="width: 200px;">Today at 2:00p</p>
<div style="width: 100px;">John Doe</div>
</li>
</ul>
Solution:
For our purposes, we just specified a width for the parent element. If you were to need a parent element that required a mutable width, we're not sure how that would be handled.
Leading edge of the unfloated
Okay, the first was was a pretty specific and hairy one. This one's bound to be more common.
It's perfectly valid to have a non-float next to a float. The non-floated will sort of appear to float when it's really just wrapping around the float. The got'cha here is bounding box for the non-float is actually the same edge as the float now (the red box in the After in the image below) whereas before the bounding box's edge was equivalent to the opposite edge of the float (the red box in the Before in the image below). This means paddings and margins are not applied the way you would expect them anymore; also, if you are changing the background color of the non-float on :hover, it will put a gnarly colored box over your floated element.
Example Code:
<div style="float: left; width: 100px; height: 100px;">.</div>
<div style="padding: 0px 4px;">Text</div>
Solution:
For our purposes, we specified the non-float to be a float to allow our element to "push" off the other float and to prevent our :hover from putting a colored block over our other floated element.
Negative z-index
It's recognized now.
Our bitterness over overlapping struggles with Son of Suckerfish and our cavalcade of relative and absolute positioned elements aside, you can specifiy a negative z-index in Firefox now and it may have made all of your anchor tags unclickable. In IE, they are still clickable.
Example Code:
<a href="#hello" style="position: relative; z-index: -10">World</a>
Solution:
Set your HTML tag to be a negative z-index lower than the z-index you're using on your A tags. In the example above, a negative z-index of -20 applied to the HTML tag will make the link clickable.
Inline-block element
It's recognized now... and it's breaking your clearfix
Once we get over our kerfuffle with updating the code, we're sure we're going to be happy to finally have inline-block in Firefox at our disposal.
The problem, and the solution, here is simple. Clearfix (thanks, Position is Everything!) makes the tag it's applied to inline. It's pretty common that you had it previously applied to a block element that isn't explicitly defined as a block element in your CSS (like a DIV).
Example Code:
<div class="clearfix">I'm not on top until I'm declared a block</div>
<span>I'm on bottom</span>
Solution:
Obviously, specify your elements as blocks, but also push your clearfix CSS as high up in the file as you can, such that it doesn't override any of your block specifiers.