December 17, 2008 by
ryan
Oxitis [oks - ahy - tis]
-Noun
Acute or chronic anxiety toward sharing code online; this anxiety is usually caused by fear of public ridicule or excessive criticism regarding imperfections in code.
Origin:
2008, Josh Schwartzberg (n.); Oxitephobia; avoidance of placing imperfect code online; initially referring to Microsoft Oxite
December 12, 2008 by
ryan
"nice post!!thanks for the info..that's great and cool"
-Random Spammer
As
a web developer / someone who has a blog, I understand dealing with
spam is one of the necessary evils of having a comments enabled on my
site. For the most part, my site has remained far enough under the
radar that most spammers do not waste their time. More recently,
however, there has been a gradual influx of comment spam with a title
something along the lines of "[Company Name] SEO Test." There is worse
spam for sure but it was definitely annoying.
A quick Google
search pointed me to a Web Development and Search Engine Optimization
company hosting an SEO competition. I checked the rules and sure enough,
there was a rule stating that only Ethical SEO Techniques would be
permitted. Quickly, I emailed the organization one of the comments
(with url, ip, email, etc) exepecting the offending parties would be
removed from the competition, eliminating additional garbage comments.
I was shocked to receive their reply.
Unfortunately
this is not against the rules of the competition – I would encourage
you to remove the spamming links for your website to discourage this
behaviour but as I said I can’t actually penalise this person
for making posts on other peoples websites.
Sorry about the spam.
Gaming the System
In
my opinion, Search Engine Optimization should be about perfecting a
website and the website's content; not tricking google into thinking
more people find your content useful than actuality.
Optimizing tags
and titles is one thing but gaming the system to garner search ranking is wrong
and is detrimental to the web as a whole. Just because commenting is
legal and allowable does not make it ethical. Unfortunately, this
practice will continue to exist as long as it gets results and
organizations act as enablers to those who would use these tactics for
financial gain (not to mention increased search engine ranking for the
enabling organizations).
Link Spam is Digital Graffiti
Imagine
for a second if companies condoned this practice outside of the Web --
what if McDonalds or Nike paid for their logos to be spray painted on
other's property? To make matters worse what if after receiving
numerous complaints they held a press conference and said "soap and
water removes the paint" or "just hire some guards and the problem will
go away."? I think it's safe to assume that practice would not be
received so kindly (h/t
Matt Braun on the graffiti analogy)!
Fortunately a link is not as hard to remove as paint but the concept is
similar.
Solutions anyone?
Social networks such as
Digg,
DotNetKicks and
DZone have always been plagued by those who would
try to circumvent the rules for personal gain. Where honeypots and
captcha systems would traditionally help against
bots, an increasing number of spammers seem to be actual people. The
administrators of these social networks are constantly coming up with
more sophisticated ways to combat spam but what should small blogs and
websites do?
Currently,
there are a number of methodologies for preventing blog spam that work
with varying degrees of effectiveness but none are ideal. Obviously,
you can moderate comments -- this works okay but is painful if you are
getting a lot of spam or a lot of comments. Also, make sure your
comment links have a rel="nofollow" attribute (h/t
Simone Chiaretta). Google
does not take nofollow links into account when calculating page rank.
Although this does not reward the spammer, it does not prevent spam.
What I would like to see is a centralized comment system like Disqus or
IntenseDebate that lets a user login with OpenID, Google Friend
Connect, Microsoft LiveID, Facebook Connect (whichever the user wants).
There would be a standard vote up / down vote for every comment a user
makes where the overall votes across all sites would determine the
users rating. Casting a down vote would remove a minimal amount of
points from the voter to prevent someone from going on a down vote
rampage (exactly how
StackOverflow works). Site owners could set
restrictions that would prevent users with a rating less than a
specified number from posting on their site. This may be idealistic and
introduce a new realm of privacy concerns but if done properly, I think it
would help eliminate a great deal of spam.
Wrapping things up
Although there are many less-than ethical tactics to increasing a
site's ranking, site structure and site content are the best methods of
SEO. I would love to hear your thoughts, ideas and any suggestions you
have in eliminating link spam.
If you liked this post...
November 13, 2008 by
ryan
Based on a great suggestion from Ben Scheirman and Simone Chiaretta I have converted the Gravatar URL helper class into a HtmlHelper extension method. This was my first stab at making a HtmlHelper extension but it seems to be working nicely and helps me keep my code a lot cleaner. Instead saving the URL (which I would highly advise against) or doing some weird method calling acrobatics in the Controller, I can simply say <%= Html.Gravatar("email@email.com") %> inside the view.
I've added a couple different method definitions for various parameters. You can pass in just an e-mail address, an e-mail and gravatar parameters (see here for more info on gravatar parameters) or an e-mail address, gravatar parameters and html attributes. A quick usage summary is listed below (I'm using my brother Joel's gravatar in the examples)
|
<%= Html.Gravatar("email@email.com") %>
Base Gravatar Helper
|
 |
|
<%= Html.Gravatar("email@email.com", new { s = "128", r = "pg" })%>
Gravatar helper with optional Gravatar Parameters
|
 |
|
<%= Html.Gravatar("email@email.com", null, new { style = "border:5px solid" })%>
Helper with HTML attributes. Please note, this is still expecting the Gravatar parameters -- you can pass in null if you want to just grab the default image with no additional properties.
|
 |
|
<%= Html.Gravatar("email@email.com", new { s = "128", r = "pg" }, new { style="border:5px solid;"})%>
Helper with both Gravatar parameters and HTML attributes
|
 |
Anyways, I've posted the class file below. Hopefully you find it useful -- I would love to hear what your thoughts are or of any changes you would like to see.
GravatarHelper.cs (2.72 kb)
November 9, 2008 by
ryan
UPDATE: See here
In the near future, I have a web project coming out that I've been working on for the past month or so. I'm not going to give too much detail on that just yet, however, in working on this project, I had to come up with a way for users to have profile images. I would rather not host these images on my server, I decided to leverage Gravatar (Globally Recognized Avatars).
There are a couple pre-existing options for dealing with gravatar in the .NET framework, however, I'm using the MVC framework -- standard ASP.NET controls are out of the question. After a brief look on the Gravatar site (specifically the page dealing with how the URL is constructed), it seemed like this would be a pretty easy task to write a class that I could use to get gravatar image paths. Below is the main part of the class I created to retrieve gravatar information based on an e-mail address:
public static string GetGravatarURL(string email, string size)
{
return (string.Format("http://www.gravatar.com/avatar/{0}?s={1}&r=PG",
EncryptMD5(email), size));
}
public static string GetGravatarURL(string email, string size, string defaultImagePath)
{
return GetGravatarURL(email, size) + string.Format("&default={0}", defaultImagePath);
}
private static string EncryptMD5(string Value)
{
System.Security.Cryptography.MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] valueArray = System.Text.Encoding.ASCII.GetBytes(Value);
valueArray = md5.ComputeHash(valueArray);
string encrypted = "";
for (int i = 0; i < valueArray.Length; i++)
encrypted += valueArray[i].ToString("x2").ToLower();
return encrypted;
}
All we're really doing is creating a URL based on the Gravatar path, an MD5 encrypted version of an e-mail address and some user specified parameters. For the methods, Size is how many pixels the image should be (up to 500) and defaultImagePath is the url to use as an alternate image if the user does not have a Gravatar image. There is a rating parameter also but for my site, I'm setting it to PG always.
This is not all that difficult but hopefully useful. I plan to continue writing examples as I make progress on the web application I mentioned.
September 21, 2008 by
ryan
Justin Etheredge recently posted a question for the community on his site. I think this is a good thing to think about because my definition of a good developer is one who continually tries to be better at their craft. My suggestions may be very similar to others but I would love to hear feedback.
Read : the first suggestion I have is a bit obvious. I like to read books and blogs on programming -- especially methodologies and architecture. Its hard to find good books becuase there seems to be an over saturation, many of which are not good. That being said, there are quite a few that I would still recommend : Head First Design Patterns, Don't Make Me Think (not really a programming book but important for anyone that writes applications with end-users) and Code Complete. Additionally I'm really looking foward to Beginning ASP.NET MVC by Simone and Keyvan. As for blogs, there are tons I subscribe to but a few I'll mention are Justin's, Jurgen Appelo's and Dustin Campbell's.
Share : I first started my site to help myself and hopefully others with programming topics. As I chose a subject to write about, I realized I did a lot more research than I would if it was just something I wanted to learn. Additionally, there was a lot of experience that I gained from the comments on the articles. Sharing information with a high level of transparency helps you become a better developer because you will get feedback on your work.
Set Goals : Set goals to learn new languages / techniques. I start off by reading blogs/books/articles then think of achievable pet project to use these new techniques on. The progress on the project can be used as the baseline for determining your progress. This is not saying you would be an expert in the new area but, in my opinion, is one of the best ways to learn.
There are tons of additional ways to become a better developer and I would love to hear your suggestions!
August 19, 2008 by
ryan
Tonight I have the privilege to be giving a talk on the ASP.NET MVC Framework at the
Northwest Ohio .NET User Group!
(6PM, at the HCR Manor Care building downtown)! If you interested in
learning about some of the reasons for using the MVC framework along
with creating a basic MVC application you might want to check it out :)
August 18, 2008 by
ryan
Wow, the theme generator that my brother and I made is on Channel 9.
It's in the video at about 11:30. Thanks to Dan and team for mentioning it! View the channel 9 site here.
August 18, 2008 by
ryan
I like to have business cards so I can easily give people my contact information. My amazing wife designed this for me to kind of keep the cards with a programming look and feel.

Let me know what you think!
August 7, 2008 by
ryan
This is a really short post but I wanted to pass the word along. I just finished a fun little ASP.NET MVC Application to generate Visual Studio
themes based off of 3 given colors. I have always felt that selecting
every color to make a coherent theme is way too repetitive. This web
application automatically chooses complements / contrasts based off
your initial color selections (and uses jQuery to let you preview your
theme before creating). I will be making another, more detailed post later that will explain how it all works but for now, check it out and let me know what you think.
View the application
July 25, 2008 by
ryan
This is probably another thing that many people know but it's new to me. In the Modify table window, you can generate a script to show the ALTER TABLE that Management Studio creates.
Make your change (add column / delete column / change a columns data type, etc.)
Click the 'Generate Change Script' button (this option is not at all hidden but was something I didn't take the time to use because I never needed it before).
View the dialog with the change script
Thanks to my friend Ross for pointing this out to me. He really needs to start blogging these tips :)