Completing Three Major Projects in One Year

I think it’s important to brag about any project that you manage to take from idea to completion. Many people (myself included) have a ton of ideas, few of which become something, and even fewer of which are actually finished and out there. So you should take any opportunity you get to shout out anything you’ve completed.

Built a website? Cool. Remodeled your kitchen? Nice. Wrote a short story? Awesome. Get out there and tell people!

I know the feeling of wanting to start something new every day just to forget about any mistakes you might have made in the previous day. It’s all about start, start, start. It’s never about finish, finish, finish. I guess sometimes we feel like “new” is better than “old” even if that “old” thing has potential.

Without further ado, these are three major projects that I managed to complete in late 2015 and early 2016. They’re not much, but hey, they’re mine!

Twolips Dating

TwolipsDatingSplashTwolips Dating is an online dating community aimed at those who want to find others based on their knowledge and skills. Find yourself attracted to someone really good at math? Awesome. Find people in the community who have answered a ton of math related trivia questions and quizzes. Sign up for free.

Or just check out the blog to follow updates until you’re ready to start.

Safer Stash

SaferStashSplashSafer Stash is an online encrypted virtual storage for your physical stuff. The image above does a good idea of succinctly describing it. Think of it as an online backup for receipts and images of your expensive belongings so that you’re protected in the event of a loss or other need. Sign up for free.

Or just check out the blog to follow updates until you’re ready to start.

Dota Database

DotaDatabaseSplashThe Dota Database is a site dedicated to Dota 2 enthusiasts and “stats nerds” who are interested in the internal data of Dota 2. You can quickly look up hero stats, item stats, cosmetic item stores, live matches, and more directly data mined from the Dota 2 Game Client and Steam. There’s absolutely no cost to using all the features.… Read more

Agile Development isn’t a Silver Bullet

Buzzwords are the worst. The absolute worst. They seem to be something that some higher up read about and decided to preach to his or her employees. Inevitably the buzzwords will end up on job requirements (even if the job has nothing to do with that buzzword) or talked about endlessly during job proposals and interviews. Honestly, it’s a huge red flag if someone repeats a certain methodology, process, or philosophy without justifying the context. “Agile” is just one such buzzword that seems to be really misunderstood and misapplied.

When Agile Becomes a Burden

What is this “Agile” thing? Supposedly its a software development methodology designed to react to a faster paced and rapidly changing form of software construction. Perhaps your requirements are in flux, or your customers don’t really know what they want until they see something in development, or you’re just really interested in that “scrum” word you keep hearing about on various tech blogs. Regardless, you really want in on that sweet, sweet Agile action.

You hire some scrum masters, software engineers (remote is OK), QA engineers, technical writers, and business analysts. You setup a scrum board. You preach the tales of development sprints, user stories, and research spikes. You do all the things that you learned during your 2-day Agile bootcamp in Silicon Valley. Oh man, you’re on a roll you think to yourself. There’s no way a project can fail if I know of all the problems in our daily standups!

Over time, some cracks start to appear in your process. Why are we revisiting a piece of code from three sprints ago? What do you mean you didn’t put in proper error handling and documentation? You had to meet your sprint deadline (which includes development + deployments + QA + code review + documentation + user acceptance). There’s no time for “clean code” and algorithms that “make sense.” Just get that stuff checked in and commit to your next sprint, damn it!

Maybe it’s a cultural thing. Maybe it isn’t the Agile process at fault here. Maybe you’re just misusing it.

Knowing Your Gaps

Agile is a process with many faces. There are a ton of variations, all or none of which may apply to whatever project you have on hand. The lesson here is that you shouldn’t mass apply any one Agile methodology to your project without careful consideration of what the project is, what the project’s goals are, and how the people on the project like to work. Take some time to analyze these facets and build a process around your projects, cultures, and environments.

Just because some other organization saw a billion percent increased revenue after adopting the most recent buzzwords doesn’t mean that the exact same process will yield the exact same results for you.

Look inward before you put that buzzword on your job requirements.… Read more

Add New SSH Login to Azure Linux VM

Some time ago, I created an Ubuntu virtual machine in Azure using a password-based login. Over time, I got annoyed with having to enter the password each time I logged in, so I decided to switch over to using SSH public keys. Unfortunately, the Azure documentation regarding such a scenario assumes only that you will be creating a new virtual machine from scratch to create a public key based login. Have no fear. I have figured out how to do this without having to recreate your virtual machine.

Requirements

  • Linux-based client (your computer)
  • Linux-based virtual machine in Azure with password-based login (Azure)

Create the RSA Keys on Your Computer

Azure requires RSA keys with 2048-bit encryption, so you should do this:

Just press ENTER when asked where to store the file unless you really want to put it somewhere other than the default. In most cases, the default is fine. After you pick the location, enter a good password to unlock the private key when prompted during login.

Transfer the Keys from Your Computer to Your Server

In order to copy your keys to the server on which you want to login, you will need to have a password-based login already setup. If this is your case, do the following:

Enter your server’s password-based login when prompted to begin the copying process.

Confirm Your Key Based Login Works

Do this and enter your previously created key’s decryption password:

References

https://help.ubuntu.com/community/SSH/OpenSSH/KeysRead more

Get Over Your Fear of Remote Work

This article is aimed at both employers and employees alike. In some circles of the technology industry, there seems to be this pervasive anxiety when discussing the activities of remote workers. In fact, certain CEOs have gone so far as to reign in the egregious act of working remotely by effectively banning the practice altogether. I’m sure he or she sent out a memo including words like “agile,” “synergy,” and “cohesion” to seal the deal.

As the complexity and needs of software continues to grow, companies need to be willing to hire workers whose only option is to work remotely due to location or other life circumstances. Rejecting a possibly great candidate because they are unable or unwilling to relocate across the country is a huge loss for many reasons.

First, the employer missed out on an opportunity with a great candidate. Perhaps that person would have been responsible for saving the company a lot of money or publishing a renowned product. Second, by hiring a remote worker, the employer can forgo the cost of physical on-boarding, providing a phone, providing a desk, and providing a location for which the employee can conduct work. Instead, the company only needs to provide hardware and software to get the employee started. Third, remote employees have far more time to actually do work without having to worry about travel time to and from the work location. In some instances, traveling can consume hours each day depending on the commute distance. Instead of wasting time in traffic, the employee can spend time on work.

Yes, there are downsides to remote employees, but many of them can be mitigated by occasional trips to the main office and conducting shared activities on remote communication technologies like VOIP and instant messaging. When talking to people who are skeptical, the first fallacy that I hear is, “But I need someone to be physically next to me to get my work done!” To be honest, this sounds like a personal problem. If you are unable or unwilling to get work done without physically seeing your coworkers, then you need to work on adjusting away from such an attitude. Between webcams, phones, instant messaging, desktop sharing, and remote desktops, there should be almost no excuse to having difficulties communicating with remote workers.

Remote work is going away. I would argue that it will increase in necessity as population increases, cities become more widespread, suburbs move beyond reasonable commuting distances, and job opportunities become more spread out. There’s simply no way to avoid the globalization of our economy. In order to adjust appropriately, we all need to be more accommodating to qualified candidates who would prefer or must work remotely. Your company may depend on it.… Read more

The Woes of Windows Store App Submissions

I recently submitted a Windows 10 / Windows Phone app to the Windows Store named Data Viewer for Dota 2. I’m here to warn the world just how awful the process of submission can be.

Microsoft first created the concept of the Windows Store with the release of Windows 8, Windows RT, and Metro Apps — I mean Windows Store Apps — I mean Universal Windows Apps. Whatever you want to call them, the store quickly became an unregulated messy disaster full of copycat and scam apps. Many, many apps were nothing more than front ends to scamming websites, copies of things like Facebook, or general do-nothing apps with a price tag and description which made it seem like a good purchase.

In order to address this problem, in normal Microsoft fashion, Microsoft decided to wait 3 years and come up with a new process of submitting the app. Every app would be held to “rigorous” standards which would guarantee all apps were clearly named and labeled to prevent confusion and scams. There are several guideline posts out there from Microsoft, and you can rest assured that all of them are vague and barely helpful.

So how did this affect my app? Originally, the app was named “Dota Database” after its sister site and had the same icon as appears on that site. The first submission resulted in this super helpful message: The app name and icon do not accurately represent the features.

Uh…OK? I’m not sure it could even get more vague than that. So as a guess, I figured maybe they were complaining about the word “Database” since the app isn’t literally a database but instead is a viewer into a database. I renamed the app to “Dota Data Viewer” and tried another submission. That was apparently a mistake because guess what message came back after failing? The app name and icon do not accurately represent the features.

At this point, I tried emailing the support address suggested by the submission report. I decided to get to the point and ask for more information about why the app was failing submission and asked about what specifically I should change. The response was kind of helpful: Hello Developer, you will need to make your app distinguished from other apps in the store with a unique name such as “Skype for Windows” or “User Guide for Microsoft Word.”

Then I changed the app name to “Data Viewer for Dota 2” which is specific and distinguished from any other apps. In addition, I changed the app icon to the one you now see in the Windows Store which clearly states the app is a data viewer and not an actual game. Surely success will come after this! Wrong. The app was rejected with the exact same copy and paste message: The app name and icon do not accurately represent the features.

Now I’m upset. I email the support desk again and receive the exact same response: Hello Developer, you will need to make your app distinguished from other apps in the store with a unique name such as “Skype for Windows” or “User Guide for Microsoft Word.” Hey Microsoft, that isn’t helpful!… Read more

How to Rename Your App in Windows Store

This applies to the Windows Store and Windows Dev Center as of March 1, 2016 and assumes you are uploading a Windows 10 Universal Platform App.

The Windows Dev Center started out badly back in Windows 8, and it hasn’t improved too much since then. I have to be honest when I describe it, because it’s sometimes nothing short of painful. One of those pain points is the UI and poor documentation regarding the concept of the “App Name”.

In order to submit to the store, you need to create “App Packages”. Each package has metadata associated with it that you define in your “App Manifest” (Package.appxmanifest in your project). This manifest is where the app’s name must match exactly with whatever names you have reserved in your Dev Center for that app.

Creating the App Name

When you create an app submission, you have to pick an “App Name”. This is the name that is displayed across your Dev Center Dashboard and the Windows Store. This name also has to match exactly in your app’s created manifest. That secret bit of information isn’t documented well and seems to only appear in tiny text when you are creating an app package through Visual Studio.

Changing the App Name

If your app has not yet been submitted to the store, then you can change the name by reserving a new one in the Dev Center, changing the manifest to that name, creating an app package, and then uploading that package. Don’t try to rename directly from the Dev Center (that’s where I kept looking). Instead, you have to reserve the name and change it in the manifest to match. There is no way to rename an app from the Dev Center!

If your app has already been submitted, you will need to reserve the new name, create a new update submission, change the manifest accordingly, create the package, and upload it to the new submission. If the submission is approved, the new name should show up in the store. I think there’s a delay in the new name showing up (16-24 hours).… Read more

Share a Generic XAML ListView, ItemsSource, and DataTemplate with UserControls in Windows Universal Apps

This post applies to Windows Universal Apps specifically. These techniques probably won’t work with WPF or Windows 8/8.1 Apps because the XAML hierarchy and namespaces are different.

The title is certainly a mouthful, but stick with me to understand where this scenario can be useful.

Let’s say you want to re-use a ListView without copy and pasting everything about it wherever you need it. Simple enough, right? Just put it in a UserControl! Not so fast. What if you want to define the ListView’s ItemsSource from one level above the UserControl? It gets a little more complicated. This is especially true if you want to take advantage of a VisualStateManager with the ListView’s ItemTemplate.

CustomListView

For example, I had a UserControl which allowed users to scroll left/right on a ListView by clicking buttons left/right instead of using a scrollbar. I wanted to share this ListView in multiple places,  but didn’t want to restrict the UserControl to a single ItemsSource by hard coding it in the UserControl itself. I wanted to “pass in” the ItemsSource and DataTemplate to define the layout of the items from one level above the UserControl. Additionally, I wanted the layout to change based on the width of the screen to work with phones, tablets, and wide layouts.

So here’s what I did after a few hours of struggling through wildly varying documentation across WPF, Windows 8/8.1, and Windows Universal Apps.

Creating the DataTemplate UserControl

We first need to define the lowest level of the chain to determine what and how the data will be displayed in each data bound ListViewItem. We put the XAML in a separate UserControl so that we can also attach a VisualStateManager to the ListViewItem and have it re-organize appropriately on different layout sizes.

This UserControl will then be referenced one level up in the DataTemplate of the main UserControl which contains the ListView and the left/right Buttons.

Before we can go to the next step, we need to add some code to the code behind.… Read more

Don’t Bother with WordPress on Windows/IIS

I’ve written in the past about how to setup WordPress on an Azure App Service and about connecting that WordPress instance to MySQL in an Azure VM. While these articles do contain some useful information about setting up WordPress and its interaction with Azure services, I’ve come to the conclusion that WordPress simply doesn’t function as nicely when hosted on IIS.

For about 1-2 years, I hosted several WordPress blogs in Azure App Services which connected to MySQL instances on an Azure VM (exactly as described in my articles above). I struggled endlessly with strange plugin issues and constant timeouts when attempting to connect to MySQL. For example:

  • Certain caching plugins complained that certain settings could not be applied due to IIS
  • WordPress.com and JetPack integration sometimes didn’t detect plugin and WordPress updates properly
  • When attempting to update plugins from WordPress.com or JetPack, it would simply fail with no error messages
  • Random and intermittent “Database connection” failures would occur even though I could guarantee the username/password/connection information was correct (especially since connections would succeed and then fail 30 seconds later)

I tried debugging these issues for months including monitoring incoming traffic on the VM to diagnose MySQL connection timeouts but was ultimately unsuccessful in determining a solution. Actually, that’s not entirely accurate. I did come up with a solution. I stopped using WordPress on Azure App Services.

So what to use then? I decided on using my existing VM to host the classic LAMP stack. It was already running Linux and MySQL, so I just had to add Apache and PHP. Hosting WordPress under this environment and technology stack has proven to be much more reliable and friendly with plugins.… Read more

Introducing the Dota Database

I’ve spent some recent weeks building a cool new web site which exposes a lot of Dota 2 game data which may not be easily accessible to most players. You might be thinking, but I already use DotaBuff for all my Dota 2 needs! DotaBuff is great, but it doesn’t cover everything.

For starters, the new Dota Database that I’ve created is useful to see some of the finer details regarding heroes, hero abilities, items, item abilities, cosmetic items for purchase in the store, and more. This includes details like spell and ability behaviors, which shops you can purchase an in game item, hero level progressions, cosmetic item sets, and even pro player autographs. The information for these specifics comes directly from the game files and the Valve provided Dota 2 web APIs.

Live League Game Listing

This page will give you a paged listing of all currently live league games. Some games will display blank data when still in the hero picks/bans phase. Each listing shows the league, the team names, elapsed times, spectator counts, series scores, team scores, player scores, player picks, team worth, and team XP. Click in to the listing to see all the live updated details for the match.

See it in action

LiveLeagueGame

Live League Game Details

When you click in to a live league game, you’ll see a page full of information about that game. Every 20 seconds, the page will refresh and show you the latest updates about the match. All data is provided by Valve through its Dota 2 league web API.

LiveLeagueGameDetailsTopAt the top, you’ll first see the league and its details, team picks/bans, and some details about the match itself such as match id, series scores, spectator counts, and the duration of the game. Click any hero to go to the details page for that hero.

LiveLeagueGameDetailsMiddleLiveLeagueGameDetailsTopIn the middle, you’ll see the “meat” of the game such as individual player details, map positions, tower statuses, team worth, Roshan status, items purchased, and more. This is basically the section that you’ll want to pay attention to as the game progresses.

LiveLeagueGameDetailsBottomAnd finally, near the bottom of the page, you’ll see a table which contains the overall status of every player in the game. This allows you to quickly sort and compare every player against each other with things like XP, kills, deaths, gold, and more. It’s a good way of determining which team is probably in the lead. Just keep in mind that player stats don’t necessarily indicate which team is winning.

Heroes and Details

Interested in the heroes you can choose from in game? Want to know everything about them? Ever wonder what specific behaviors were attached to their abilities? Then this page is perfect for you.

HeroGridBy default, you can view all heroes by a grid of their icon. This provides a highly compressed and easily visualized selection of which hero you want to read more about. However, comparing heroes against each other is impossible in this view. To remedy that, check out the next way of viewing the data.… Read more

A Quick Reference to Azure Key Vault via Powershell

Azure Key Vault has been generally available in certain regions since June 2015. You can’t use the Azure Portal to work with the key vault yet, so you have to drop down into Azure Powershell and run a few commands. It’s a little confusing to get started since development is ongoing and Azure Powershell itself changes frequently.

Here’s how I have been achieving some simple Azure Key Vault commands via Azure Powershell. I’m using Azure Powershell version 0.9.8, so keep that in mind if you’re comparing these commands to the Getting Started guide linked previously in this article.

Check Your Azure Powershell Version (optional)

If you don’t know what version of Azure Powershell you’re using, try this:

Switch to AzureResourceManager Mode if Necessary (optional)

Since you’re using version 0.9.8 like me, you need to switch into Azure Resource Manager mode.

Login to Azure

Login to your Azure account and enter your credentials in the popup window. It seems kind of odd that it wouldn’t just make you login via Powershell parameters.

Create a Resource Group (optional)

You need an Azure Resource Group to add the Azure Key Vault to. If you don’t have one already, create it now. If you already have one, skip this step.

Create a Key Vault

Now create the Azure Key Vault. To be honest, I don’t know what would happen if you added it to a location that’s different from the Resource Group’s location.

Create a Key and Add It to Your Key Vault

Now you need to add a Key to your Key Vault. This cmdlet will create a software-protected key. You could also create a hardware-protected key, but keep in mind that there may be costs associated with that method of extra protection.

Confirm the Key Was Created

Read more thorough documentation here.Read more