sqlmag

I’ve had a subscription myself for 2 years now to SqlMag. They’re one of many of Penton Media’s magazines, along with the Windows IT Pro site. I like paper mags for portability’s sake – the beach, roadtrips, etc. The same goes for Code Magazine and MSDN Magazine.

Dead Tree Edition?

I’ve often asked myself if a paper-magazine-delivered-to-your-door makes any sense these days. Rather, does it make sense to me? Obviously the magazine industry has been in trouble, along with every other industry, since the internet moved their cheese. Along with that analysis is the subscription cost of the magazine, and its (perceived) benefits.

  • Can I get this content, or similar, or better in other places?
  • Why do I need the paper version?
  • Yes, they let you into their walled garden of SQL Server content when you’re a subscriber, but…
  • Is the content actually useful to me?

Yays

Nays

  • they’ve got Itzik Ben-Gan
  • a perception of trust
  • content is NOT automatically out-of-date on arrival
  • too many ads & ads are not relevant to me
  • yes, ads are their business!
  • content not always suited to me
  • far too many other free resources on the internet

 

SqlMag’s Top 10 IT Websites – December 2009 edition

Flipping through the Dec. 2009 copy, I saw something that had me questioning SqlMag’s quality and relevance. The headline was straightforward – Your Top 10 Favourite IT Websites. The “Your” bit seems to indicate that the readers had a vote in it, or… something. The list of sites, though, got me a bit suspicious. More than a few questionable choices here, and it was just too much to not say something. Let’s take a look:

sql-server-magazine-top-10-december-2009 10. Google – this was waaay to obvious to be on anyone’s serious list of IT websites. Can you even call this an IT website?! It’s certainly got lots of content indexed, but questionable whether it’s an actual IT website. If they’d mentioned Google Code, then I could see where they were headed.

9. Major Geeks – this stood out like a sore thumb. Isn’t this a shareware/utilities download site? I can’t remember the last time I specifically visited the site on my own desire, but it was probably for a copy of WinZip 5.0 in 1998.

8. TechNet – sure.  A solid and stable resource put out by a major 1st party vendor. Lots and lots of technical info on anything Microsoft that you’re administering.

7. The Register – whaaa? This site is an anti-Microsoft FUD machine. Take the worst of Britain’s tabloid industry, combine with dash of tech news, and you’ve got “the Reg”. A terrible pick!

6. ServerFault – now you’re talking. A Q&A site for system administrators and IT professionals that's free. Perfect, a well deserved site.

5. Slashdot – hardly a tech resource, in my opinion. Call it Tech News 1.0, run by editors with their ‘base’. It’s full of anti-Microsoft FUD, this time with their Borg.gif adorning any Microsoft story. That, to me, shows exactly the level of professionalism the site operates with. A terrible pick for your Top 10. I’m debating whether it’s Slashdot or The Register who use the term ‘M$’ more often than the other. Another sore thumb of a pick. Aside – who really thinks that term is funny?

4. Windows IT Pro – the readers submitted the parent company’s flagship website as a Favourite IT Website? Something doesn’t smell right here.

3. GPAnswers – admittedly I do NOT or haven’t visited this site. Certainly Group Policy is a major set of tools to help set rules around A.D and the computers and users within. GPAnswers’ forums are running on vBulletin, and is run by a Group Policy MVP.

2. CodeProject – a clearinghouse for articles and how-to projects. A worthwhile consideration, but certainly not #2 on my list.

1. Experts Exchange – ARE YOU FREAKING KIDDING ME?! You’ve lost your mind, SqlMag! This site is the absolute scummiest Q&A site on the planet. Their entire business model is built around CLOAKING their site, and TRICKING THEIR VISITORS into paying. (Yes, you can see the full set of user answers when you scroll 8 pages down!)

SqlMag, bad choice for your #1. Even if this list WAS user-generated, which I doubt, any list that includes Experts Exchange loses credibility, in my eyes. When I’ve asked any developer about their experience in finding good answers from that site, roundly I’ve heard nothing but bad things. I’ve even thought this piece was done by an intern, or some writer’s little cousin’s brother.

My Own Top 10 Tech Sites

I can’t sit and cast my personal judgement on their picks for Top 10. Let’s see how hard it will be for me, maybe it’s tough!

  1. StackOverflow & ServerFault
  2. Channel 9
  3. CodePlex
  4. Your RSS reader + your fav blogs. Take it to 10+, or as far as you like.  Mine include developers and leaders in the community – Phil Haack, Jon Skeet, Scott Hanselman, Scott Gu, Brent Ozar, and more.

You don’t need 10 to get a good list. StackOverflow is full of excellent questions and answers on EVERYTHING a developer needs. The amount of quality answers and quality answerers are enough for a top 50 list.

Online Really Has Moved Their Cheese

I can’t bring myself to pay any more money for the mag. That really sucks for the people who work on the mag, and that industry in general but they’ve got incredible opportunities to redirect their efforts on the web. The shift in the print industry has been obvious for years, hopefully they can improve their website to keep users/readers coming back. I believe that established industries need to be more agile or nimble in their ability to change with technology.

If their strategy is to continue to grab technical readers, and SQL Server being one of those topics/content areas, then they really should ask themselves: “What do database professionals need/want?” Is it education, how-to, one-way articles, Q&A, user-created content, interaction with your authors… there are lots of ideas out there.


Posted in: learning , punditry  Tags:
Actions: E-mail | Permalink | Comments (1) |
Phil posted on December 12, 2009 07:08

Recently I found myself with the desire to start a new site. Rather than jumping into Visual Studio headfirst, I sat down and thought about how to start.

  • What technology am I going to use? I always jump to this in the Top 5 Things I Consider, and I know it’s not terribly important, and I know I should be thinking of other things. I always know the answer to this question, though.
  • What features should be on this site? Getting warmer. I typically write down the main features of the site goals of the user in point form. I am trying to train myself with this way of thinking: The site doesn’t matter without the users wanting it to. Don’t think about features, think about the user’s goals.
  • Monetize? Sure, in some small way, but that’s not the main point of this new site, though.
  • How will the user see and contribute to the site? Most important and relevant question. Piss off your users, or make it too complicated, or too lame, and you’ll lose visitors.

The typical process I go through when faced with a new idea and a fresh start is to pull out the pad of paper and a pen. I am not a design genius, like most software developers, but try my best to grok user experience. Sometimes I fall flat, sometimes I look back at previous work and throw up a little, and sometimes I am happy. Most of the time, I think I’m just lucky that I don’t have too much scrutiny on my layouts and flow in my corporate line of business web apps.

mockingbird

I found this site recommended a few times on StackOverflow. It’s almost self explanatory to how the site works.

mockingbird mockup of youtube

Draggy, Droppy, Stretchy, Copy

There’s a palette on the left, and a design surface on the right. Make a page for each of the user-goals. This isn’t going to be set in stone, and things will change. Arrange the page elements on the design surface as you like.

Some neat features or user experiences I noticed:

  • Labels/text scale nicely as you grab the corner and stretch. It (smartly) figures out when to bold and/or increase the size of your label. Other elements scale beautifully, especially those that are icons – calendar, pie chart, Twitter logo, etc.
  • Double click any element to modify its text or contents – just as you’d expect.
  • Configuring a Linkbar was easy. Mockingbird really nailed this element.
  • You’re able to associate links with pages that you’ve already defined. Just drag the Page on the left onto a form element.
  • Elements are very generic – no Windows or Mac bias. It’s just a rounded rectangle representing a button.
  • There are lots of great elements that trigger new ideas. Seeing the Map and the Banner ad were great. Aside - tag clouds – meh… does anyone really like and use the tag cloud in the real world? I know StackOverflow has one, but I have never used it.
  • The overall feel or experience is very much like a sketch. Positioning elements is made easier thanks to the horizontal and vertical alignment bars. Nice touch!

mockingbird thumbnail grid

Go Try It

Just jump into mockingbird. You don’t need to create a mockingbird account to try; only to save and retrieve your designs. It’s free!

I wonder what platform mockingbird is running? Oh wait, it’s called Cappuccino  (learn more) and it’s

implemented using a new programming language called Objective-J, which is modelled after Objective-C and built entirely on top of JavaScript

Very cool user experience! Kudos to the mockingbird developers Saikat and Sheena.


Posted in: development , design  Tags:
Actions: E-mail | Permalink | Comments (0) |
Phil posted on December 11, 2009 03:06

Here’s a class that’ll make your life easier when you want to deal with saving information in cookies on your user’s browser. Everyone needs a wrapper class for all those external data-stores – session, cookies, file system, web.config and app.config, registry, log files, etc. Here’s a class usable in ASP.NET Web Forms and ASP.NET MVC.

Wrapper Class

Here’s a static class that you can simply include in your web project, and refer to its static properties to get to your cookies. Any and all simple datatypes can be used, and heck, even serialized versions of your POCO objects can be saved/retrieved here. Image if you wanted to save those shopping cart items, a collection of user prefs, or whatever, you could simply override the .toString() method in your custom class.

Just Make Properties

The key pattern here is that you purposefully create new properties for each piece of data that you want to save/retrieve. This solves the problem of:

  • having to remember strings all over your project.
  • ensuring no duplicates exist – imagine if multiple developers created a defect by using the same string indexer for their cookie, and ended up stomping each other’s value?
  • typos in cookie names.

Instead, the data access cookie-retrieval is done through named properties. This solution solves all those potential problems. Here’s a peek at one of these properties.

public static string UserFullName
{
get { return GetCookieVal(CookieItem.UserFullName); }
set { UpdateCookieVal(CookieItem.UserFullName, value, 365); }
}

Enums Help

With the aforementioned ‘remembering strings’ problem, the pattern that this class uses relies internally on an enum to handle the naming of the value in the cookie. The enum will boil down to an integer, but really we don’t care what the key’s is actually stored as in the cookie. We really only care to access/read/save the values constantly and easily from our calling code.

Download

Download the cookie class, or copy/paste from below. You can see that I pre-loaded it with some amusing properties for your entertainment!

Be sure to change the ApplicationName const at the top.

Special thanks to Special-K!

using System;
using System.Web;

namespace MyNamespace
{
public class Cookies
{
private const string ApplicationName = "MyCoolApplication";

private enum CookieItem
{
UserGuid,
UserFullName,
UserLoginExpiry,
UserHadForBreakfast,
UserTimezone
}
/**************
All cookie values are accessible by public static methods.
No typos/duplicates are possible from calling code!
**************/

public static string UserFullName
{
get { return GetCookieVal(CookieItem.UserFullName); }
set { UpdateCookieVal(CookieItem.UserFullName, value, 365); }
}

public static Guid UserGuid
{
get { return new Guid(GetCookieVal(CookieItem.UserGuid)); }
set { UpdateCookieVal(CookieItem.UserGuid, value.ToString(), 365); }
}

public static DateTime UserLoginExpiry
{
get { return DateTime.Parse(GetCookieVal(CookieItem.UserLoginExpiry)); }
set { UpdateCookieVal(CookieItem.UserLoginExpiry, value.ToString(), 365); }
}

public static string UserHadForBreakfast
{
get { return GetCookieVal(CookieItem.UserHadForBreakfast); }
set { UpdateCookieVal(CookieItem.UserHadForBreakfast, value, 1); }
}

private static string GetCookieVal(CookieItem item)
{
HttpCookie cookie = GetAppCookie(false); //get the existing cookie
return (cookie != null && (cookie.Values[item.ToString()] != null)) //value or empty if doesn't exist
? cookie.Values[item.ToString()]
: string.Empty;
}

private static void UpdateCookieVal(CookieItem item, string val, int expireDays)
{
//get the existing cookie (or new if not exists)
HttpCookie cookie = GetAppCookie(true);

//modify its contents & meta.
cookie.Expires = DateTime.Now.AddDays(expireDays);
cookie.Values[item.ToString()] = val;

//add back to the http response to send back to the browser
HttpContext.Current.Response.Cookies.Add(cookie);
}

private static HttpCookie GetAppCookie(bool createIfDoesntExist)
{
//get the cookie or a new one if indicated
return HttpContext.Current.Request.Cookies[ApplicationName] ?? ((createIfDoesntExist) ? new HttpCookie(ApplicationName) : null);
}

}
}


Posted in: c# , asp.net , best practices , code blowout , development  Tags:
Actions: E-mail | Permalink | Comments (0) |