I launched FantasyHockeySim.com as a spinoff of DetroitHockey.Net last summer and the visual elements of it were a rush job. Getting the site out the door was my priority, so I stole design elements for FHS from DH.N and put together a logo that didn’t say “fantasy hockey” at all.
Awhile ago I ranted about the Detroit Red Wings’ “Hockeytown” logo and how the only way it said “Hockeytown” was literally, with the text splashed across it. I’d done the same thing with the FantasyHockeySim.com logo, as crossed sticks said “hockey” but the only way it said “fantasy hockey” was via the FHS acronym across the front. Even then, it looked more like the logo for a high school hockey team than for simulated fantasy hockey software.
While stuck on a development project, I decided to take a crack at a new FHS logo.
Because I like shield-based logos far too much, my first pass centered around different shields. Eventually I put together one that I really liked the look of and started building alternate logos around it.
I showed the “final” set (the shield logo and “promotional” versions featuring additional text) around and realized I hadn’t solved the problem I was trying to handle in the first place. The logos still only said “fantasy hockey” literally, and even then it was only the promotional ones.
I stepped back from it and didn’t think about it for awhile until an idea came to me during my drive into work a couple weeks later.
Representing hockey in a logo is easy. Sticks, pucks, all sorts of imagery is available. How do you represent “simulation” though? Well, simulation means computers and code and, even to a layman, X/HTML’s angle brackets are recognizable as code. So I wrapped a pair of crossed hockey sticks in angle brackets and went from there.
The first issue I hit with the logo was that the crossed sticks looked a bit like an X, so I changed their position and added lines representing tape to the blades. After that, I decided to give up on my attempt at a monochrome logo, changing the color of the angle brackets to help separate them from the sticks (with the added effect of appearing as syntax coloring).
As I worked on a primary version of the logo, I also created an alternate version and a “promotional” version. The promotional logo features the “bracket” logo inside a roundel containing the “Simulated Fantasy Hockey” descriptor and the site name while the alternate is simplified version of that, without the text.
The biggest issue with the alternate and promotional logos was making sure the broken inner circle of the roundel didn’t appear like it was supposed to be attached to the angle brackets. To handle that, I shrank down the width of that inner circle and made the break in it wider. Changing the color of the brackets completed the effect.
The FHS site still needs a redesign to get away from borrowing so much from DH.N but at least now the logo is original and descriptive.
I spent a lot of time over the last year – DetroitHockey.Net‘s 20th season – thinking about what kind of site I wanted to run and what I wanted to write. I decided that I don’t want to force myself to be unbiased. I don’t want to sit in the pressbox, I want to sit in the stands. I want to write about what I find fun.
That doesn’t mean I won’t hold myself to a certain standard. I expect my readers to hold me to that, too. It also doesn’t mean I don’t want to write serious pieces or topical pieces. It just means I want to be more picky about what I write and when.
That said, today I was reminded that no matter how seriously I take myself, I can’t make those who would be my peers take me seriously.
Yesterday I published a post to DetroitHockey.Net that was the result of a not-inconsiderable amount of research and data tracking. After weeks of compiling information about domain registrations, I thought I had discovered the name of the new Las Vegas NHL team, which isn’t set to be announced for another month. Or at least a possible name.
There wasn’t much of a reception. The Red Wings fanbase doesn’t really care about the Las Vegas team name and the Vegas fans don’t seem to really trust a Red Wings blog. Disappointing, but not unexpected.
It’s credit, and it’s probably all I can ask for, but let’s take a look at how other outlets have picked up the news…
On Thursday, the Las Vegas Review-Journal reported the name could be Desert Knights.
According to the Las Vegas Review-Journal…
According to the Review-Journal…
Somewhat hilariously, NBC Sports credited the Review-Journal with breaking the story, then proceeded to quote the part of the article that credits DH.N.
How is it that all of the major outlets came to name the LVRJ as the source even as that paper named DH.N? Why did we not see Fox Sports credit the Review-Journal only for NBC Sports to credit Fox Sports?
The NHL’s Las Vegas expansion team may finally be leaning towards a decision on its name, if recent domain registrations are any indication. Those domains point to the Sin City hockey club being dubbed the Las Vegas Desert Knights.
According to the Las Vegas Review-Journal, Moniker Privacy Services — the same company that procured the NHL’s own website domain — has privately registered the rights to lasvegasdesertknights.com, vegasdesertknights.com and desertknightshockey.com. When asked about those registrations and the potential team name, team owner Bill Foley told the Las Vegas Review-Journal that he had no comment on the matter.
Fox Sports opens with a summary, immediately credits the LVRJ, and goes into exactly what information they got from that source.
The Review-Journal, however, opened as follows:
Bill Foley may get his wish on his hockey team being called the Knights. Just with a modifier.
Last week domain names were registered that might be an indicator that the NHL team scheduled to begin play in 2017 could be called the Las Vegas Desert Knights.
Last week the domains lasvegasdesertknights.com, vegasdesertknights.com and desertknightshockey.com were privately registered to Moniker Privacy Services, which is the same company that procured the domain name to NHL.com.
DetroitHockey.net first reported the new domain name Thursday morning.
In this case, a summary was provided, then all of the information, then a retroactive credit to the source. Ignoring the fact that said credit wasn’t even in the original version of the LVRJ story, it’s not hard to see that Fox Sports put the source front and center while the Review-Journal slid it in as an aside.
The LVRJ writer, Justin Emerson, apologized via Twitter after being called out. However, it’s clear that the paper got what they wanted out of this. They made no effort to correct the people who were crediting them with the find. Not their job to do so, I suppose.
So – after some prodding – the Las Vegas Review-Journal gave DetroitHockey.Net credit. They also got all the credit.
From a technical perspective, I find it hilarious to see all of these sportswriters trying to paraphrase how domain registration works. Near universally, Moniker has gone from the registrar for all of the related domains to the registrant.
Look for the technically accurate information and you’ll find the original source.
I think about hockey sweaters a lot. I’ve collected them since I was a kid. I doodle jersey concepts for fun. I study their history.
Of the ones I owned growing up, my favorite was my Steve Yzerman Team Canada jersey from the 1998 Olympics. White with the alternate captain’s A on it. Pro-weight, with that thick Bauer mesh over the body. Red dazzle material over the sleeves and shoulders with a loose mesh for venting down the side.
I always loved the feel of that sweater. The weight of the mesh. The giant Team Canada crest. Wearing it felt like wearing armor.
Though I’m a Detroit fan, no Red Wings jersey has felt like that. The mesh of an authentic jersey always feels good but the Winged Wheel is too small, its proportions are off. It’s a thing attached to the front of the sweater, not a part of it.
I think about the submissions I’ve done for the Grand Rapids Griffins’ jersey design contest and I realize how much those are influenced by that Team Canada jersey. I created them to be like armor. Heraldic imagery. And a big damn shield right on the front.
Two years ago I entered a design featuring a griffin silhouette on a shield as the primary logo, with the jersey in “vintage” white, blue, and red. The shoulder logo was a roundel with an interlocking GR logo the team had previously used. Last year I tweaked the logo to make the griffin’s wing a little cleaner, switched up the shoulder logos, changed the number font, and updated the colors to go along with the Griffins’ color change, but the striping pattern stayed the same.
This year I thought for certain that I was going to enter another red jersey, so I started with my previous design. I swapped out the “vintage” colors and simplified the striping pattern. Rather than black numbers with a white outline, I went with white numbers outlined in black as they would be more legible. I kept the player’s jersey number in the collar webbing because, as I’ve said before, I loved that feature of their old alternate jersey. I also brought back the shoulder logo from my original entry as a 20th Season patch no longer made sense. Finally, I broke down and put the Winged Wheel logo of the Detroit Red Wings on one shoulder, as the Griffins do that on their standard jerseys to denote their parent club, no matter how much I dislike the practice.
I felt like that design was too simple, though, so I continued evolving the design. For the second generation, I switched the order of the sleeve colors and removed the shoulder yoke. I wanted the Griffins’ jersey to have an homage to the alternate colored sleeves of the Red Wings’ white jersey. I also brought back the black numbers outlined in white as I figured for a one-shot jersey, legibility is less of a concern (in fact, the Griffins wore dark red numbers on a dark blue jersey for one game two seasons ago).
Unfotunately, I thought that looked far too close to the design of the Texas Stars. While the Griffins selected a design two seasons ago that was basically a color swapped Iowa Wild jersey, I wasn’t comfortable submitting something like that.
As such, I decided to fully embrace the alternate-colored sleeves. I made the jersey body red with a black stripe bounded by white and the sleeves black with a red stripe and white outline. I also changed up the shoulder logo, replacing the interlocking GR with the griffin silhouette I used on the crest as I didn’t want to re-use one of the team’s existing marks, even modified.
At this point, I thought that I had my final design. I started showing it to a handful of people and near-universally the feedback was that they wanted to see a black version. Of course, I had started out trying to make a red jersey, so at first I ignored this. Eventually I hit the point where I had to listen to what my informal focus group was saying and did a switch of the colors. While a quick Twitter poll showed 53% of fans would have preferred a red jersey, 100% of people who saw both the red and black jerseys picked the black one. As such, the black one was my final design.
There are some coincidental homages in this design. The Grand Rapids Owls, an International Hockey League team in the late 1970s, wore jerseys with red sleeves that had black stripes outlined in white. Additionally, the Red Wings sold “fashion” jerseys (alternate jerseys that were never actually worn in-game) that had a black body with a red stripe at the waist, red sleeves with a black stripe, and numbers that match this design. The stripes did not include a white outline.
The Griffins explicitly stated that they wanted a dark jersey from this year’s contest. I imagine that’s because of the AHL’s new rule that will see light jerseys worn at home until Christmas and dark jerseys after that. Previously there had been some flexibility with regards to alternates but I’d guess that’s out the window with these new rules.
At any rate, just for fun, I created a white version of my submission.
As I mentioned, the primary logo is carried over directly from last season’s submission, aside from the color switch. This is a logo full of homages. The shape of the shield is that of the DetroitHockey.Net logo as a reference to my previous work. The feathers on the griffin’s wing are those of the Winged Wheel. The griffin’s tail is that of the original Grand Rapids logo.
The shoulder logo went through a number of revisions as I sorted out what color it would be placed on, how much detail should be included, and what element would be inside the roundel.
While I think that having a silhouetted griffin on both the crest and the shoulder is a bit repetitive, I see the different uses to be somewhat like how the Tampa Bay Lightning have a lightning bolt on both the crest and the shoulder.
As I’ve said every year, I don’t expect to win this contest. This year is interesting because ten finalists will be determined by fan vote and then the Griffins staff will decide. Additionally, this year submissions do not have to follow a standardized template. If I had to guess, the vote will skew towards submissions that look like they come out of a video game, as they come across as the most impressive. Whether or not those are actually the best designs will have to be seen.
Update: After posting this I noticed that the shoulder logos are incorrectly depicted on the view of the back of the jersey. They should be switched so that the Winged Wheel is on the right shoulder and the roundel is on the left, as they appear in the view of the front of the jersey. I’m not going to update the graphics, just use your imagination a little.
I wrote last month about launching FantasyHockeySim.com and replacing the old DetroitHockey.Net Community Forums with a Slack team. At the time I promised a future post about the work I did with the Slack API.
The Slack API uses OAuth for authentication, which isn’t really a surprise. It does open up problems if you want to have actions taken on behalf of an app instead of a user. Unlike the Twitter API, the concept of bearer tokens is somewhat limited, and bots can only post messages (not extend invites or kick users, for example), so I ended up creating a user to act on behalf of the site.
Speaking of extending invitations, you can invite people to join a channel/group but there’s no formal way to invite users to join a group programmatically. There is a hack, however, that requires you to use a bearer token from the Slack API Tester application, which seems asinine to me.
Like the Facebook API – but unlike Twitter or Trello – the Slack API makes use of permission scopes. Unlike Facebook, on the user’s first login, you can only ask for identity-related scopes. As such, the signup/login workflow for FHS is redundant and somewhat annoying, but users only have to go through it once.
So I have a signup form on FHS that automatically sends an invite to the prospective user. After they sign up in the FHS Slack channel, they come back to the mothersite and log in using the new Slack user. As they log in, Slack asks if they want to give FHS identity permissions with their account. The user confirms this and logs in and I auto-create a user for them in the FHS system, where I keep track of what permissions FHS has for each user.
After logging in, if the user has not yet granted sufficient permissions, s/he will be presented with a nag screen that asks for those to be granted. After granting permissions, the screen won’t be shown again.
Now that FHS has all of the permissions it needs, the site can actually do some stuff with the user’s Slack account. Mostly this is administrative.
When a user joins a specific fantasy hockey league, s/he is added to that league’s private channel via a call to groups.invite. When s/he leaves the league, s/he is removed from the channel via groups.kick. Both of these are run by the aforementioned site user that I created, which has extended permissions (compared to the rest of the site users).
General managers (users that are members of one or more leagues) can push messages from Slack to their fantasy team’s home page. This allows them to post trade blocks or out-of-office messages – content that’s a little longer-lived than the standard Slack post. The interface for that relies on the groups.history and channels.history methods so that all of the possible posts for importing can be found. Once a message is selected, pins.add is used to make sure the message is pinned in channel. I also use pins.remove to clean up anything no longer flagged as news and pins.list to audit what should be pinned against what actually is pinned.
The site user automatically posts transaction information from the league site to the league channel using the chat.postMessage method.
Probably the most important new functionality is a “Message Center” section of FHS that shows users their missed messages from the Slack channels. This is where I feel like things get weird with the API.
In the Slack interface, there are channels and direct messages. In the API, there are channels, groups, IMs, and MPIMs (multi-person IMs). The interface obscures away the idea that private channels are actually groups. MPIMs -a type of IM that contains more than two participants – are also a special subset of groups.
That means that to find the total number of unread messages, you have to check channels.history, groups.history, and im.history and look for the unread_count. You could also check mpim.history for unread_count but groups.history gets you that.
Actually, as of when I wrote my Message Center code, mpim.history was broken. I Tweeted about unread_count always being zero and the Slack API team replied apologizing for the bug.
So in order to get the total unread count, you have to make three calls, which means three different permission scopes have to be granted.
Technically, the Slack API is really easy to work with. Make a request, pass the proper credentials, get data back. That said, after using it for a little bit, I can’t help but feel like there’s something a little off. Inconsistencies – like “channels” and “groups” being plural but “im” and “mpim” being singular – make it seem thrown together. That it’s not RESTful is a little bit of a surprise. None of that is a reason not to use it, though.
With the fantasy side of the site gone and no longer reliant on the rarely-used DH.N Community Forums, I reworked DetroitHockey.Net to remove the forums. I also pulled out my custom blog software and replaced it with WordPress.
The idea behind going to WordPress was that, while I enjoyed writing my own blog software, it left me somewhat behind the times as far as what the site was capable of. It’s a wheel I don’t want to reinvent, so instead I learned how to tap into native functionality of WordPress to do the things I wanted to do.
With the loss of the forums and the continued simplification of the site content, I was able to go with a more streamlined design. The header features the site logo (I launched with the 20th Season logo in place but it will revert when that season ends), an advertisement, and one navigation bar. This is in contrast to the old version of the site, which had a logo, three navigation menus, a login menu, an ad, and a set of links to forum discussions.
I also took the opportunity to implement the sub-navigation menu system that I developed for FantasyHockeySim.com.
The home page features seven recent headlines from the WordPress-driven news section, an embedded Twitter feed (replacing a custom developed version of the feed display), the score of the most recent Red Wings’ game, and a calendar showing the current month’s schedule (with games denoted by opponent logo).
The individual article pages use a modified version of the WordPress Twenty-sixteen theme, wrapped in the DetroitHockey.Net template.
The only other page that was heavily modified was the DH.N Contributors page, which pulls from the WordPress user system.
This version of the site is intended to be transitional, with further revisions coming after seeing how the forum-less site is used.
So Jenny is obsessed with Hamilton and has been for months. We got our tickets to see it in Chicago last week, she’s had tickets to see it in New York for months, she’s had the recording on a near-constant loop for quite some time, all that.
Of late, I’ve found myself listening to it pretty often, and something just clicked for me about “The Election of 1800.”
After several scenes of heavy drama surrounding the collapse of Alexander Hamilton’s political career, marriage, and the death of his son, Thomas Jefferson asks, “Can we get back to politics?” It signals a shift in the narrative, that the characters and story are moving on.
The first half or so of the song sets up the conflict between Jefferson and Aaron Burr. The title character finally gets brought in when asked, “Dear Mr. Hamilton: John Adams doesn’t stand a chance so who are you promoting?”
His response? “It’s quiet uptown.”
It’s a callback to the previous scene, in which he and his wife reconcile while mourning their son. It’s also a beautiful sign of how, while the rest of the world has moved on, he has not.
FantasyHockeySim.com went live last Thursday. The site plays host to a couple simulated fantasy hockey leagues using the FHLSim software. Through FHS, league members can manage their teams in real-time, as opposed to all kinds of manual data entry that is required by FHLSim out of the box.
And if that sounds familiar, it might be because up until FantasyHockeySim.com launched, all of that was a part of DetroitHockey.Net. FHS is simply that functionality spun off into its own site.
One of the leagues that had been hosted at DH.N, the National Hockey Association, is the official league of SportsLogos.Net. And some of its members were not happy about having to be members of a Red Wings site to do their fantasy hockey. So I decided to move things to a neutral site.
With the fantasy hockey side of things no longer reliant on DetroitHockey.Net infrastructure, this would also allow me to update the two sites more easily.
Originally, the site was going to be called FHLSite, as that’s what I had referred to my software as when it was a part of DH.N. I had a hard time coming up with a logo for that, though, so I changed the name to FantasyHockeySim.com, abbreviated FHS.
For the logo, I took the shield from DH.N’s primary logo and changed the colors to gray and blue, then put the letters FHS over the top of it. A pair of crossed hockey sticks – the sticks from the DH.N logo, appear behind the shield.
The basic site design was ported over directly from DetroitHockey.Net but the header and footer were updated. For the main site and each league, the basic elements of the template are the same, with branding images and an accent color swapped out to provide uniqueness. The main site is a blue-gray while the DFHL is red and the NHA is a dark blue.
The biggest change was the replacement of the DH.N Community Forums as a communication hub and an identity provider. DH.N’s Invision Power Board installation is integrated into the entire site, which included the fantasy hockey side of things. It would not be available upon moving to a new domain.
I decided to create a team on Slack and build a login system around it. I’ll write more about this in a future post on lessons learned about the Slack API, but the short version is that their OAuth workflow and API combined to allow me to have users with accounts on the FHS Slack team log in to the main FHS site and see their unread message counts, effectively replicating the functionality of the forums.
The end result is something curious, where I’ve launched a new site but created virtually no new functionality. I think it’s a good starting point, though.
Part of why I love software development is that I get to make things. Through my efforts, something new has been created. It’s a pretty awesome feeling.
As much as I love it, there’s something even better about building physical things. Even something as simple as an Ikea bookcase.
You start with a box. It’s relatively small and clean and self-contained, but it really isn’t anything useful. And the first thing you do is destroy it.
That neat and tidy box becomes a bunch of parts spread all over the floor. It’s a mess. It’s not useful and it’s even worse than the box because it’s in the way. But the mess is also potential, as each of those parts has a place.
Then you get to work, and things start to come together. The pile of parts gets smaller and smaller, fitting together with each other. Your project starts to look recognizable, like, perhaps, a bookcase.
Then it’s done. Your pile of parts is gone and in its place is a piece of furniture.
Working in software, there are no parts, really. No matter how many pieces your project may be in, none of them are physical. You can’t spread it across the floor and piece it together like a puzzle. I wouldn’t trade my job, but sometimes it’s nice to solve a problem that’s a little more tangible.
Seemingly everyone has a Comcast horror story. No one likes the company and people who use their services do so begrudgingly.
Except for me.
Oh, sure, I know they’re ridiculously overpriced but I recognize that they can get away with that. I don’t expect them to charge less than market value out of the goodness of their hearts. They’re a business; they want to make as much money as possible. Aside from the price, though, they’d been pretty good to me. Seemingly I was the only customer they treated well.
Until last weekend.
I just bought a new house and Saturday was my big moving day. I spent most of the day lugging around furniture. Mattresses and a pool table. The big stuff. Heavy stuff. By 4:00 PM, I was behind schedule and tired and ornery but I had a “guaranteed installation window” from 4:00 PM to 6:00 PM – set up using Comcast’s “Movers Edge” system – so I adjusted my schedule to make sure things were ready for the technician.
I made sure my TVs and the cable boxes I was bringing from my old apartment were all out and accessible. My cable modem was plugged in and ready to go. And I kept moving a little bit but for the most part I waited.
And at 6:10 PM, I Tweeted this:
Well, @comcastcares is officially late for my guaranteed install window. What do I win?
At 6:47 PM I got a phone call from the technician telling me that he would be unable to do the installation that day because he didn’t have any equipment for me. Two things were wrong here. First, as I mentioned, I brought my own equipment. Second, apparently this lack of available equipment was not evident until 45 minutes after my appointment was supposed to happen.
So I told him that I had the equipment already, brought over from my previous residence. He was first surprised, then told me that I needed new equipment for their X1 platform. I told him that I already had the X1 equipment.
At this point, he paused for a moment, then asked me if I’d tried hooking any of it up. I had not, so he told me to give that a shot as service to the house was already showing as active.
So an hour after the technician was supposed to have been there, I found myself doing the install myself. The TVs worked just fine. He called back as I was getting the modem set up. After I had it plugged in, he sent it a signal. It worked too. Happily, he pronounced everything complete and asked me to text him the address from which my equipment came, then disconnected.
The next day I got a response from @comcastcares apologizing for the late appointment arrival. After I explained that it wasn’t a late arrival, it was that he didn’t show at all and I basically did the install myself, they gave me a $20 credit.
Frankly, my time is worth more than that.
Now, the experience isn’t going to get me to switch, and Comcast knows that, which is why they can get away with this. They’ll continue to take my money (minus a token $20) happily. They’ll put up with public shaming in the form of this post as long as I pay my monthly bill.
So I don’t expect to change anything. I’m not trying to change anything. I’m just putting this out there as one more Comcast horror story.