I'm J Wynia. I'm a software consultant by trade who lives in Minneapolis. I'm a dabbler (see cyclical enthusiast and here) who enjoys a wide variety of pursuits. The world is an interesting place full of things worth knowing. This site is part of how I explore my curiosity and share what I learn.
The site name sums up a philosophy I have that inherently distrusts dichotomies. They are so often false dichotomies that a default assumption to that effect has served me well. I wrote up a little parable that describes that philosophy.
If you're on social networks, I can usually be found under the username: "jwynia". I'm currently most active on Twitter and you can follow me here.
I’m a firm believer in learning by making mistakes. For all of the value of learning lessons other ways, I have found the lessons I learned “the hard way” are the ones I learn better and more permanently. When I’ve been in leadership positions and those I mentor are feeling bad about their progress, I often ask if they’re failing in new and interesting ways. If they are, I consider THAT progress.
In contrast, people who make the same mistake more than once drive me nuts. That’s because it indicates someone who *doesn’t* learn from their mistakes. Someone who doesn’t learn from their mistakes is dangerous. If they don’t learn from mistakes (which are the lessons most of us learn best from), they probably aren’t exactly dynamos at learning lessons other ways either.
All of which has been on display the last few weeks when I go to Sunday breakfast.
My friend Aaron and I have breakfast every Sunday morning and a few weeks ago, we changed our regular destination to Hell’s Kitchen. Since it’s in downtown Minneapolis, parking is in a ramp. Because it’s the weekend, the parking is a flat daily rate: $5.
The first week we went there, as we went to pay on the way out and I handed him a $20, he asked, “Do you have anything smaller?”. I said I didn’t and he reluctantly made change. I didn’t think much of it.
The next week, I gave him back one of the $5 bills he gave me the week before. For the most part, I don’t use cash for much except parking, vending machines and sport arenas these days. But, it’s always been the same attendant.
Then, over the last few weeks, I’ve not had anything other than $20 bills when heading through his station. And, each and every week, he asks if I have any smaller bills.
I can understand being surprised without enough change once. Maybe even twice. But, we’re basically talking about a place where the service you sell for 2 straight days of every week is exactly $5, a place that only deals in cash. But, after weeks of working the spot, how does it not occur to you to roll up into the bank every Friday and basically clean them out of $5 bills as change?
After all, in a world where fewer and fewer transactions require cash, it becomes more likely that the only cash we have on hand is going to come from an ATM, in the form of $20 bills. The pattern isn’t likely to change soon. I have to wonder how long he’ll keep asking people for change instead of learning from the mistake?
It’s been a while. OK, that’s a whopper of an understatement. There’s the usual suspects that play a part: little stuff being posted on Twitter and other interests like brewing, Irish song and mandolin, etc. One could even just wave a hand and chalk it up to “being busy”.
But, “being busy” has really had a very specific meaning for me for the last 18 months or so. I’ve been building a software framework/product/platform called “Pliers”.
Since about 2007, I’ve been working with/subcontracting for the guys at JDB Associates, in particular, Dave (the “D”) for nearly all of my projects. During that time, we talked quite a bit about the commonalities we see in all of the projects we’ve worked on over the years (they’ve been in business since 1993 and I’ve been in the software business in one form or another since 1998).
Those commonalities combined with several long-lasting frustrations we shared. First is that of the limits of trading time for money. Most of the consulting industry operates on an hourly basis. You set a rate for your hours and bill them out. But, if you aren’t billing hours (whether sick, on vacation, doing marketing work, selling, etc.), you don’t make money. And, the amount you can make is tied to an “acceptable” hourly rate.
This means that you actually get punished for getting better or more efficient at what you do. I’ve had the experience more than once of watching another developer struggle with a task for a week and then give it to me to solve. After throwing away their attempt, I solve the problem in an afternoon. If both of us are paid hourly, unless the higher rate is 10x the lower, I can’t get paid equally for the less efficient person.
I won’t pretend that 10x ratios are always there, but I do know that the longer I do this, the better I get at it and that little bit of reality isn’t encouraging if you’re getting paid hourly.
Second, we both lamented the fact that, for many of these common problems, we were basically re-inventing the wheel. Now, it wasn’t because we weren’t aware of previous solutions. Rather, in nearly all contracts, the client owns the code. So, we build something for one client, but, because that client owns that output 100%, we can’t bring any of it to the next client.
So, we started talking in 2010 about ways to solve all of those issues (and a few others) and, in 2011, we started a completely clean-room project to build a common codebase for future projects.
Fast forward to today and we have a platform we call “Pliers” that’s 170,000 lines of code (that’s 2800 pages if printed, FYI). We’ve got a few pilot customers about to go live with applications we built on top of Pliers. And, we’re pretty happy with it in a “let’s call it version 1.0” kind of way.
The basic idea of Pliers is to help manage “work” via web applications. I put it in quotes for a reason (other than as a writing “tic”). The definitions of “work” vary wildly.
For some, like me, work is features, bugs, customer requests, product demos, prospective client requests, estimates, etc. For others, work might be customer orders, available inventory, potential employee/candidate applications, interview notes, candidate hire approvals/rejections, annual reviews, salary request, vacation requests, etc.
And, if you think of your personal life in the same way, you could consider the following things “work” too: my gym workouts (including time, repetitions, weight, etc.), food diaries, *ahem* blog posts, beer recipes, grocery trips, etc.
If you look at that “work” you get the “what” of what you want to track. For much of that work, what happens to it is some sort of process that can be described in a workflow diagram. A “vacation request” is submitted by an employee, reviewed by a manager, approved or rejected by that manager, sent over to a payroll person and made available for anyone who needs to know employee availability. That workflow gets you the “how” you want to do the work with the “what”.
Now, when you look at that workflow, it’s clear that other people are involved. Any employee should be able to submit a vacation request, but only that employee’s manager (or another manager) should be able to approve it and only someone in HR can make sure that the employee gets paid properly for the day and that their vacation balance gets adjusted.
So, we have a whole system of “who” governing the roles that are allowed to move things between statuses.
Some of those status transitions are special. We want people to get emails, other work needs to get kicked off or closed, etc. And, the definition of “valid” or “allowed to” can sometimes vary according to circumstance.
Further, when all of this work is going on, you need visibility to see what’s going on and make decisions. For some, that means visibility for work that they need to do, a la Kanban. For others, visibility means knowing what percentage of the work is in what status or how many support tickets have been closed today and other things that make those with MBA’s lip sync the acronym KPI.
Combine all of that and sprinkle with a bit of other stuff and you get Pliers.
We use web forms to collect information/work, define workflows for that work, map roles and permissions for who should be allowed to move the work, business rules for validation and what actions should happen when work reaches certain statuses, dashboards and reports to give visibility to the flurry of work happening inside.
And, I have to say, I love working this way. I’m able to build functionality so much faster and better than the 100% custom way that so much of my previous work has been. Some of our pilot projects are really amazing if I do say so myself.
We’re starting to use it for all of our own “work” both professional and personal and are seeing the benefits we predicted when work is able to be tracked and integrated with other work.
All of which puts us at a bit of a crossroads.
As we’ve been building the product, we’ve done much of it “on the side”. For the pilot projects (with largely existing clients), we basically did them at “cost”, charging them only for the time to customize and augment Pliers, giving those customers a deal and allowing us to finance some of the work.
That’s been great for the phase we’ve been in and allowed us to do what we needed to: focus on building the product.
Now, we need some help.
We’re trying to figure out the best way to bundle this product, to price this product, who to talk to about this product, how to market it, etc. So, we’re asking for whatever advice or input you’re willing to give us.
If you’d like to know more, we’re putting together a webinar/presentation that shows Pliers at work. I’d love for you to “attend” and tell us what you think. Sign up here with whatever time slot works best for you (psst, that form is powered by Pliers, so if you see any glitches PLEASE let me know so I can squash the bugs).
Afterward, we’ll also be trying to put together some video demos, etc. to show those that can’t make the live webinar.
I really look forward to your thoughts.
Over the last year or 18 months, I’ve come to a few conclusions about my diet. They may not be true for everyone, but I’ve become convinced as I’ve observed the results.
When I eat sugar or starches, it inevitably leads to unhealthy binges, eating tons of crap. I end up craving foods, even when I’m not physically hungry. I’m fairly well skilled now in being able to tell the difference, but that knowledge doesn’t seem to let me override my behavior.
When I eat wheat, I get heartburn. I used to think that when I ate pepperoni pizza, the heartburn came from the pepperoni. However, I’ve eaten an entire stick of pepperoni by itself and nothing. It’s the bread in the crust.
When I eat carbs of any sort, I gain weight. I’ve tried quite a few times to allow “reasonable” amounts of carbs into my diet only to discover that I weigh 2-3 pounds more at the end of a week or two of such eating. Even when I attempt to eat “right” while including the carbs.
When I avoid carbs, I lose weight (albeit very gradually). After weeks of gaining while eating carbs, if I cut back and go relatively strict to sub 100g levels of carbs for a few days, I start losing weight. The cravings subside, and I generally feel better overall.
When I take calcium and vitamin D, my appetite stabilizes. This one was weird to discover, but I found a study that backed my anecdotal experience. When I’m taking those particular supplements, I get full on smaller portions, stay full longer, and my hunger is sort of “muted”.
When eating out on dates with my wife and in places like hockey games, I’m incapable of resisting the foods I enjoy. Since we eat out every Saturday night and go to 10-15 hockey games a season etc. these meals affect the rest of my eating results.
Overall, that combination means that, to strike a balance, if I eat low carb most days and what I want on Sat nights/hockey games, I’ll maintain my weight. If I want to lose weight, I need to eat low carb AND reduce the calories too. Enter the smoothies.
I started making them as an attempt to solve the problem of breakfast. There’s plenty of low carb breakfast options. Heck, the breakfast options are one of the big perks of eating low carb. However, the time and mess involved in making such a breakfast has proven impractical in my life. I tried low-carb protein bars (the Quest protein bars are really good), but, despite low carbs, I was prone to eating them as snacks and far too many of them in a day (especially at $2 each).
So, someone suggested a protein smoothie. I made a few and discovered that, properly made, they filled me up until at least my 11am normal lunchtime (I like to avoid other people when getting lunch). Often, I was pushed into having to wait for lunch until 1pm and was completely fine. Prompted by that, I tried a week or so of smoothies for both breakfast and dinner, with relatively normal, low carb lunches. I lost weight easily that week. Thus, I have a eating plan where I can lose weight without being too hungry AND it’s relatively cheap and doesn’t consume time or make messes in the kitchen.
So, I’m going to share with you a few of the “recipes” that have become my favorites.
All of them are made with a “Magic Bullet” blender, using the large container. As such, I don’t so much measure as use ratios for many of the ingredients. To re-create these, you’ll have to tinker a bit.
Nearly all of my smoothies are based on this starting recipe.
To that base, I add my flavorings. I know that the typical thing here is fresh fruit and veggies. I also know that keeping that stuff around doesn’t tend to work well *for me*. It also tends to bring a lot of sugar to the party. So, I’m generally after something much quicker to make and these end up being REALLY easy to make and to have ingredients on hand.
This one is higher in calories than the rest, so I limit the number of these I eat.
These are the ones I make most often for breakfast. The Crystal Light “To Go” single serving drink mixes work really well to flavor the base smoothie. I use 2 packets when I want strong flavor, 1 if I don’t.
I always enjoyed DQ’s Mister Misty Freeze (grape slushy with ice cream in it), particularly the grape flavor when I was a kid. While I haven’t had one in years, this one tasted remarkably like I remembered.
I’ve found that many/most of the flavors in the section near the Crystal Light are pretty good. They’re all really low in carbs and work pretty well.
Overall, there are plenty of options for variety and it seems to work well for me. If you’ve been contemplating making smoothies and want something easy and tasty, give these a shot.
A few days ago, it was my turn to host our homebrew club for our monthly gathering to taste beer and “talk shop”. As March often brings up discussion of Irish beer and food, I figured I’d make the menu Irish-themed.
I’m not a fan of corned beef and cabbage (plus, that’s not terribly Irish in actuality anyway). But, I like stews and shepherd’s pie and both seemed like good opportunities for recipes including beer. So, the menu ended up being an Irish beef stew, shepherd’s pie and “my” Irish soda bread. All-in-all, a tasty menu that I’ve been enjoying leftovers from for a few days afterward.
Here are the recipes for the things other than the soda bread. Comments indicated either extreme politeness or that these are good recipes.
If you’ve never had an oyster stout, what you’re imagining is probably pretty unappetizing. Yes, it’s actually made with oysters (homebrew recipe for making your own oyster stout). However, what they add is mostly a briny, salty taste. While interesting in the stout itself, I thought it would make a really great addition to food. I was right. I used Porterhouse Brewing Co’s Oyster Stout as the oyster stout.
Brown the stew meat, onions and garlic in the butter in a large Dutch oven-type pot. Sprinkle the browned ingredients with flour and stir until the flour is saturated with the fat and browns up. Add the rest of the ingredients and simmer for a few hours until it’s at the consistency you like.
Pretty simple, but stew is. Serve with Irish soda bread.
Again on this dish, beef isn’t actually traditional, lamb is. However, there’s a flavor in lamb and goat that I just can’t get past. Use whichever meat you prefer and it will turn out tasty. I used Porterhouse Brewing Co’s Irish Red Ale on Saturday, but if you can’t get that, try Smithwick’s or brew your own (Midwest’s Irish red ale is their #1 selling beer kit and really easy to make). This is a nice dish because it can be made ahead of time/frozen and tastes better if you do so.
Brown the onions and garlic in the butter, and then brown the ground beef in a Dutch oven-style pot. Sprinkle flour on top and mix until flour absorbs the fat and browns a bit. Add the rest of the ingredients except the frozen peas and frozen corn. Simmer until the carrots are tender, adding beer as necessary to keep it from drying out. Add the frozen vegetables. This is the lower level of your shepherd’s pie. Put this into a casserole dish, but make sure to leave room for the mashed potatoes or the whole thing will spill over later. Leave 1/3 to 1/2 of the height of the casserole. Cover with mashed potatoes. If you want the best results, chilling before adding the potatoes makes them easier to spread on top.
Freeze or refrigerate if you’re not making it for the “current” meal. Bake, uncovered until browned on top and hot in the center (not sure on timing because I always use a thermometer rather than timer to determine when done). Serve with Irish soda bread. :)
Like many cooks, I don’t follow a recipe for mashed potatoes. But, here’s how I make them. They’re good enough that my wife, who refused to eat mashed potatoes when I married her, loves them now.
I peel and cut the potatoes into small chunks. They go into my vegetable steamer to steam until they’re tender. The steamer prevents them from getting water-logged and the flavor is much better as far as I’m concerned.
Anyway, I either run them through a ricer (if I want really smooth potatoes) or mash them up with a masher (if I want chunks in them). As I mash, I put in a bunch of butter. After they’re all mashed, I switch to a wooden spoon and mix them as I pour whole milk in a splash at a time until they reach the consistency I want.
For the shepherd’s pie, you want a relatively “loose” mixture so you can spread it across the meat mixture underneath.
If there are extra, topping with fresh chives, bacon crumble, cheddar cheese and eating right there in the kitchen is something one could do. You know, if one was so inclined.
Enjoy.
Recently, I’ve been toying around with options for “work” shirts for my home brewery. I have several of the Dickie’s-style work shirts from homebrew stores, etc. and like them. So, I thought it’d be fun to have a couple of “Fat Basset Brewing Company” work shirts.
Of course, having them printed the same way Northern Brewer did, you have to order quite a few shirts (even 6 is more than I really want). Then someone suggested that I just get set up to do my own screen printing. Then, I could print the logo on whatever clothing, etc. that I wanted.
Since that also appeals to my chronic desire to learn to do new things/hobbies, I, of course, started doing a bit of Googling for what’s all involved. That’s when I ran into something that I see in a lot of hobbies: assuming everyone else’s motivations are the same as yours.
I found TONS of information on screen printing at home. However, in doing so, I was struck how the vast majority of the tutorials emphasized (to the point of often including in the headline), the “on the cheap” nature of doing your own screen printing. There were tutorials about using old pantyhose as your screens, wire hangers as the frame, etc. All the while, the authors pointed out how much cheaper this was than any of the alternatives.
Clearly, the authors assumed the primary motivation of anyone seeking out info on screen printing at home would be frugality.
That particular assumption is also found in lots of the homebrewing information I’ve dug into. True, in every gathering of homebrewers, there’s someone who’s managed to figure out how to make their beer as cheap as humanly possible. But, there’s also almost always someone who got into it because they want to make beer they can’t get easily where they live. There’s the person who really enjoys building with stainless steel or wiring electronics to pumps. There’s the person who enjoys entertaining and giving beer away.
Fortunately, that diversity of motivators is represented in the content I find out there. Some sites show how to go all out and build your own stainless steel monstrosity that brews beer practically unattended. Others show you how to re-use junk you can get for free to build your home brewery.
Unfortunately, what I saw (in my admittedly small sampling) of the screen printing, the assumption of frugality nearly turned me off from even pursuing the idea. I don’t really want to do a bunch of futzing with the screens, getting them coated, exposed properly, framed and ready to go. I’m willing to do the actual printing, but don’t want to do a whole bunch of setup. And, I want a quality print when I’m done.
All of the articles that focused so heavily on the cheap way to do it left me wondering how I might actually do it WELL. Or easily. I’m not opposed to spending a little bit of money if it means that the process gets easier or that the outcome is of a higher quality.
I see these kinds of assumptions in software and other businesses as well. Rather than asking prospective customers what their needs are, salespeople assume that this customer is like many others and jump into their pitch. And, in the process, lose the customer.
It happened a little bit when I bought my new car a few months ago. I actually ordered it 9 months ago and waited 6 months to get it. When I went in and we discovered that the configuration I wanted would take 6 months, they assumed I cared about how quickly I would get the car and started pushing me to compromise on what I wanted. Fact was, I didn’t care much if I even bought a car last year at all. But, if I WAS going to buy a car, I wanted exactly what I wanted.
Ask good questions that either invalidate or confirm your assumptions whenever you can. In nearly every endeavor, it leads to better outcomes.
I’ve now been taking the song classes at The Center for Irish Music for a couple of years. One of the challenges issued by every instructor there is to genuinely memorize a song and make it our own. And, every time I hear that, the challenge resonates with me, but I never seem to get anywhere on it.
In the last couple of weeks, I’ve decided to set myself some modest goals to completely memorize the lyrics to 5 songs per semester.
When I was a kid in elementary school (a Christian school), memorization was a key part of my education. I was required to memorize not only Bible verses galore, but poems and other texts as well. Among the only childhood ribbons I have (never participated in childhood organized sports) are for competitions reciting poetry.
So, I know I can memorize plenty well, if I put my mind to it. However, I believe there are more effective techniques than the brute force methods I used as a kid.
As I thought about this and reflected on what I’ve read about memorization, I realized that what I really wanted was a web-based tool where I could enter the lyrics and have it blank out words to be supplied by the memorizer.
Obviously, if such a tool could adjust how many words should be dropped out, starting with just a few and gradually reaching the point where all of the words are missing. If you are able to fill in all of the blanks, you’ve got it memorized.
That, combined with writing the whole thing out a few times and I think I’d be on my way to learning songs quickly and thoroughly.
So, last night, while watching TV (when all my prototyping seems to happen), I put together a quick app to do the random word dropping. I called it “Text Memorizer” and you can try it out at that link. It’s REALLY simple. No saving or keeping track of “scoring”. It just highlights the box in green if you get the word correct.
We’ll see if it accomplishes the goal. Regardless, it was fun to put it together and a nice distraction from the database-heavy work I’ve been doing lately.
Warning: What follows may be seen as political. Like the theme of this blog suggests, my political beliefs don’t fit into the neat boxes that typical political conversations sort people into. If I get into a discussion with a room full of Republicans and Democrats and genuinely share my opinions, I’m likely to upset nearly everyone, for different reasons. So, in any response you make, please avoid any projecting on to me the properties of other people you’ve argued with about such matters.
I've had a few conversations lately where supply-side/trickle down economics came up (I'm great fun at a party). There's something I see as missing from most discussions of the topic.
When you look at 20th century economic activity prior to Reagan, there's actually plenty of evidence that "trickle-down" actually works. When business owners and other wealthy people did well, they re-invested in their businesses, opened new factories, and gave to charity, thus fueling the economic engine.
I really do see “trickle down economics” working when I look at the evidence of that era. So, why do I think that most of the policies that Reagan and other that followed implemented based on supply-side economic theory are a failure?
Well, first, I should say that I do think that most of those policies are failures. The gap between the rich and poor, between CEO and low-paid workers in the same companies has widened. And, while that’s been going on, companies have been making record profits while sitting on more cash than any other time in history.
So, what’s different? Taxes.
The pre-Reagan era where supply-side economics worked was a “complete” system. The top tax bracket was anywhere between 63-94% between 1932 and 1981. Lots of people think that such tax brackets are about taking money from the rich (and that’s the focus of much of the recent debate). But, that presumes that people in such tax brackets look at those tax rates and just pay them.
What high tax rates generally do instead of actually collecting that money is encourage them to re-invest it in their business or charitable giving. If your business generates $1 mil in profit and you have to pay 94% of every dollar over $500K, would YOU just write the check for $470K to the federal government? Or, knowing that if you use it to build a new office/factory, hire new workers, build new machines, increase production capacity, spend money on marketing and advertising or, alternately, put the money to work in your favorite charity?
That’s the point of high tax brackets: the THREAT of having to give that money to the government.
When that threat is there, there’s pressure to put the money back into circulation. When it’s not, you get companies sitting on $76 billion in cash. You get companies sitting on that cash rather than using it to create new products, to innovate, to put people to work, to do goo charity work, etc.
When that threat isn’t there, presidents hold meetings with CEO’s and “ask” them to get the money moving. Eisenhower didn’t have to have such meetings during the 1950’s that people so often love to harken back to. Given that the whole point of a healthy economy is to keep the money moving, that stands out to me.
When you re-invest in your business, it tends to come back in higher revenues and the cycle repeats itself. That preserves the wealth while keeping the economy chugging. Remove the forced incentives and you’re left with only the “natural” incentives to re-invest. Those shouldn’t be minimized. They’re significant.
But, when you’re making plenty of money with your existing products, with your existing marketing, you probably don’t feel much of a push to re-invest. You might just sit on the cash until a really great idea comes along. There’s no urgency.
So, huge stockpiles of cash are forming in large corporations and for the wealthiest (the, ahem, 1% if you will). There are plenty of people advocating for increasing their tax burden and even a few wealthy people saying they should pay more. Their opponents say that we shouldn’t be taking their money and “redistributing the wealth”.
I think we should put those tax brackets back in place, specifically hoping we DON’T ever collect any of that wealth via the government. I don’t want the government to take Apple’s $76 billion. I want to see what amazing products and services Apple would create if they HAD to spend it. I want to know how many people would be put to productive work if the Fortune 500 put the $2 trillion they’re sitting on to work instead of it sitting in the financial services companies.
In short, I think that the facts point to nearly all sides of this argument being right on some points and nearly all being wrong on others. In between, there’s a system that actually works. That system is, in fact, the one that existed in the era that most business people hold up as a shining example of the version of The United States we should aspire to.
So, does this make me a “liberal” or a “conservative”?
For my upcoming software products, I’m carrying forward a strategy I’ve used at several clients for skinning/theming the application: a template engine. I like to think of my template engine approach as the “reverse” of what usually gets called a “content management system”.
See, most CMS’s force you to let their app run your site as well as manage your content. If you want to write custom business logic or customize what they can do, you have to write it as a plugin to the CMS. I’d rather have content/templates available as subordinate to my application. I’ve used that approach often enough now that I’ve grown to love it and consider it one of my most useful tools.
In past implementations, I’ve used various templating languages. Back in the PHP days, I used Smarty and for the last few years, I’ve used NVelocity. It’s nice enough, but it’s different than the view engine we use for things like our back end admin portions of our platform. So, you end up jumping back and forth for syntax in views, depending on whether you’re working on the back end or the front end of the whole deal.
Since we chose NVelocity, Microsoft added the “Razor” view engine to ASP.NET MVC. I’d seen several people mention that you can use it to do “in memory” templating like what I’m used to doing with NVelocity. I wanted to do a quick prototype to get a handle on how it works. Right after doing my IronRuby prototype, I tackled a quick one using Razor to put together a templated email.
It was really easy. And, since I was already in the groove, I recorded a screencast walkthrough of the prototype, such as it is. Here you go:
So, one of the products I’m building needs several points of extensibility that can be dropped in. For a certain type of extension, we’re using MEF. I’ve been using MEF on my current client project for a while and have worked out many of its quirks. But, MEF still puts the author of extended logic in Visual Studio.
On the other side, we’ve got a templating/snippet system that stores chunks of “views” for rendering pages, emails, etc. that provide a mechanism so that the entire look and feel of the application is stored in chunks in a database. They’re editable via a web app by people other than web developers. I’ve built similar for several projects and it works out really nicely.
I want something closer to that templating solution for simple business logic and rules. There’s still a definite place in my architecture for MEF plugins. C# does heavy lifting well. However, I have long been intrigued by IronRuby as an embedded scripting engine. So, this morning, I did a quick prototype to determine how much effort it was going to be to use it in the way I want.
Turns out, it’s pretty damned easy. When I mentioned that I was doing this prototype, someone asked if I was going to blog it. It’s often easier to just record a quick explanation/walkthrough, so that’s what I did. The video is below.
IronRuby Scripting in .NET from J Wynia on Vimeo.
Since 1999, I’ve been in the software consulting business, selling my skills, either directly or through an employer who was a consulting company of some sort. In fact, since graduating from college in February of 1998, only 18 months of my working history has been in any other context than consulting.
I’ve built a decent business/career doing consulting and it’s clear that I can continue that for a good long while. However, as I headed into 2011, something was very clear to me. I need to have some ways of making money that aren’t me directly selling my time/skills.
Over 2009-2010, I billed a LOT of hours. 4 x 40 hour weeks yields “fulltime” months of 160 hours. However, rather than seeing that number regularly, I’ve had 300 hour months and rarely bill fewer than 200. In doing so, I made pretty good money during that timeframe. But, it’s tiring and isn’t something I can keep up for very long.
At this point, the only ways I can make more money selling my time directly is bill more hours (been there for 2-3 years now) or raise my rates. I am raising my rates, but the local market for contract dev work is weird for how it responds to rates. Beyond that, I just don’t like having my options limited like that.
So, I’m now working on 2 software products/services/platforms that I can use to make money via licensing, monthly fees, per-project billing, etc. In short, I’m building levers to harvest the reward of working smarter.
So, what am I building?
The biggest is a framework for building document/data workflow applications for businesses. It’s right in line with the kinds of stuff I’ve been doing in my consulting practice for years. And, that’s where that platform will be applied first. We’re going to use it as the starting point for consulting projects where we charge a licensing fee for the platform and then do the customization and extension as a more typical consulting project.
I’m really excited for the possibilities this offers to do more value-based pricing, which gets the focus on ROI instead of clients focusing on the hourly rate.
If I told you that if you give me $10 and I guarantee that I’ll bring you $20 immediately after walking outside, you probably wouldn’t question it much. In fact, you’d probably start looking for as many $10 as you could find. Yet, somehow, when it comes to software consulting, people focus on the fact that $10 for 5 minutes’ work is $120/hr and they start negotiating like mad to reduce that number.
Anyway, this product is shaping up nicely and I’m working hard to get it ready for my next consulting project. It’s .NET and is based on the tools I’ve come to rely on in the last few years: ASP.NET MVC and related tools.
The other project is a web application for managing conferences/codecamps, etc. running on Google App Engine. There’s a gap for a really cohesive app in this space and we have a pretty good plan for building one that works well.
So, while I’m cutting down on the hours billed, I’m still working like mad to get these things built, aiming for a day when the leverage starts paying off and I can shift my income away from selling my time. Until then, it’s nose to the grindstone ‘round here.
So, in an archived episode of Basic Brewing Radio (from 2009), Charlie Papazian referenced a magazine article he’d written about a mead from the 40s labelled “1949 Gulval Bochet”. In the article, he described the amazing complex flavors. In the panel discussion, he asked the other meadmakers (all world class meadmakers) if any of them had made bochet. There was basically silence. Clearly none of them had ever made it. Given Charlie P’s description, and it’s apparent obscurity, my interest was suitably piqued.
Bochet is “A mead where the honey is caramelized or burned separately before adding the water. Gives toffee, chocolate, marshmallow flavors.”
Anyway, a few weeks later, while heating some sugar for priming some beer, I forgot about it on the stove and burnt it completely to charcoal. When I tweeted about that, someone asked if I was making bochet. Suitably reminded about the idea, I decided to dig into a it a bit and ran across this video of caramelizing/”burning” the honey:
Further intrigued, I decided to pilot a small batch on the stove. I used just a single pound of honey (it’s pretty heavy and a pound is less than you think) to see how it works, how much it foams, etc.
I didn’t use an open fire, and with the controlled heat of a burner, it was pretty easy to turn the honey into a dark mahogany and it developed a wonderful caramelized flavor. I pitched that honey into a concoction of Trader Joe’s juices as a test, 1 gallon batch of cider (still fermenting). While that’s still not done, I was encouraged by the results.
While I do want to make a full bochet mead, what I’m most interested in trying first is a cyser made using the “burnt” honey. My ciders have all been getting pretty good reviews from those who’ve tried them and I’d like to enter something interesting into competitions for the cider categories (in particular the MN State Fair this summer).
Today, I took the idea up to a full 5 gallon batch size and I’m really excited about the possibilities.
Here’s what I did, in a nutshell.
I took 5 pounds of clover honey, into my 10 gallon kettle, outside, over my Blichmann burner. Given how much honey foams when you boil it, I wanted to give it plenty of room. I probably would have been fine with my 5 gallon kettle, but better safe than sorry.
I lit the burner and got the honey going. I let it go until I just started smelling burnt marshmallow and then killed the heat.
In order to ensure that the honey would be able to be poured into the fermenter, I wanted to dilute it a bit, so I grabbed half a gallon of water and SLOWLY added it into the honey. If you decide to do this, be VERY careful in this step because it will bubble and spatter quite a bit as you add water. Boiled honey/sugar is like napalm if it gets on you and it sticks like glue, so be careful.
Anyway, after I added the water, it was a nice dark liquid. In the bottom of the pot and on the sides, etc. were little chunks of solid, caramelized honey. Since I wanted that dissolved, I needed more liquid.
I took one of the 4 gallons of apple juice destined for the final recipe and added it too. For most of my “off-season” ciders, I use “bottom shelf” apple juice. Anything that’s pasteurized and has no preservatives (except Vitamin C, that’s OK) works. I’ve been using the stuff I get from Costco for about $4/gallon.
That gave me enough liquid to cover nearly all of the solid chunks of caramelized honey. I lit the burner to heat it a bit and stirred until all of the bits were dissolved.
From there, it was pretty much like most of my ciders. I put the remaining 3 gallons of juice into the fermenter. On top of that, I poured the apple juice/bochet honey mixture and topped with a bit of water. If I get this recipe refined, I’d rather have that extra liquid be apple juice or apple juice concentrate, but I didn’t have any on hand.
I was tempted to add some of the things I’ve gotten used to adding to my ciders: black tea, vanilla, etc. However, when entering cysers in competition, it’s only supposed to have apples and honey as the ingredients, and I have high hopes for this one, so I want it eligible for the cyser category and not just the “Open Mead” (which is basically the miscellaneous category).
For yeast, I went with what’s become my “old standby” for ciders: Irish Ale yeast. While I really need to do some side-by-side experiments to determine for sure, my anecdotal experience says the Irish Ale Yeast compliments ciders well, so unless I have a good reason to use something else, Irish Ale it is.
I pitched the yeast and set the carboy in my shower for the first 48 hours of fermentation. As you can see in the blurry photo below, the final pre-fermentation result is really dark. It will be interesting to see how it turns out.
Last week, a series of unfortunate events led to major problems in the production environment. The mad rush to get these problems diagnosed and fixed is something that’s pretty much part of the job when you are a software developer. It usually ends up with a steady stream of visitors to the cubicle of someone who can actually move the problem forward.
During this last round, I noticed a pattern and it struck me as funny.
If you watch TV dramas, you’re probably used to a little “recap” that happens at the beginning of an episode, particularly if it’s been a while since the last episode aired. It typically starts with the phrase “Previously On…”.
That phrase kept running through my mind as I watched people join our little scrum trying to fix the production problem. Each new person would arrive and ask the same set of questions, which had already been answered 5 or 6 times over the course of the previous half hour.
When you aren’t planning on this pattern appearing, it’s irritating. The thing is, that this is pretty much the way these things always go, so it shouldn’t be unexpected.
Once you recognize the pattern, you can deal with it. When a new person joins the room, you just accept it, give the most concise “Previously On…” and move on to solving the problem. We started doing that and found that the time spent catching the new person up went much faster than when left to happen “organically”.
I’m going to have to watch more carefully the next time to see if there are ways to make this even more efficient.
Like a lot of geeks and digerati, I register a lot of domains only to discover that I never get around to using them for anything. In the spirit of spring cleaning, I’m getting rid of some to cut my portfolio down. I could just release them, but figure the people I know (even just casually online) should get first crack at them.
This list represents a batch of projects that I thought I’d get around to at some point. I am growing more and more willing to abandon such notions when it’s clear that I’m actually not going to get around to doing anything with the idea.
Then there’s the effort I’m putting into ideas that I have a much better chance of actually executing on.
Maybe you have a use for one of these domains. If you do, let me know and I’ll transfer it over to you instead of just deleting my claim on it.
BetterIcedTea.com – was going to be for a niche blog about making good iced tea instead of just using Lipton tea bags
AutodidactUniversity.com – I am largely self-educated. Wanted to build a site to help others do the same.
Chainlink.me – aimed at being a not-all-that-short URL shortener.
CraftBeerCooking.com – Intended for a blog of recipes using beer. Even started this one, but got nowhere.
EmpireOfBlog.com – Back in the days of “pro” blogging and blog “networks”, I registered this.
RepublicOfBlog.com – Same day. Same reason.
FromTheCommons.com – This was intended to help highlight content licensed under Creative Commons licenses. Used it for a bit with subdomains like photos.fromthecommons.com to highlight CC-BY photos from Flickr. Like this idea, but I never invested enough time in it.
FromTheCommons.org – Paired with the above for covering the common domains.
HowToAskAGeek.com – I get sick of the poor way people ask technical questions. They don’t include the stuff that geeks need to actually help and often include lots of irrelevant info. Was planning on writing up a guide to asking technical questions of geeks.
MakerExchange.com – Intended to be used for a StackOverflow for “maker” culture (see Make Magazine)
MovieBits.org – Was going to be a blog of movie reviews with a binary rating system (i.e. a single bit): 1 if I would pay to see it if I had it to do over again, 0 if I wouldn’t.
OpenFiction.org – Like FromTheCommons.com, intended to highlight CC-licensed fiction. Turned out to be really hard to find much of it to feature.
So, just let me know in the comments that you want the domain. First come, first served. Anything not claimed by next week will just be released to the domain pool.
Now that such magic is no longer involved, posts are looking strange. However, rather than attempting to re-invent the magic, I’m aiming to actually fix the HTML on the articles instead. That will fix the problem forever, but takes a bit longer.
So, I’m just working my way through articles to get them all compliant.
In my exploration of KnockoutJS for a variety of projects, I’ve had several instances of a tricky requirement. “Normally”, you know in advance the kind of object your AJAX/JSON search will bring back and you can template the output grid accordingly.
However, in several of my projects, I have very good reasons and situations where the results coming back will be different columns, depending on the search criteria. That means that the KnockoutJS/jQuery template that displays the data can’t go after properties by their names.
That proves tricky to figure out within the layers of frameworks involved. There are plenty of examples of how to do a procedural loop on the list of properties of a Javascript object, but that’s within a normal Javascript “foreach”, not the jQuery templates version.
A normal Javascript foreach includes the name to be used to refer to the object that is the subject of each iteration. For the jQuery template/Knockout version, that variable isn’t visible. Instead, you just see {{each Collection}}.
After a bit of digging, I finally found the information that a couple of “magic” variables are available in the loop: $value and $index. So, if you loop on a collection, the $value is the subject of each iteration. Then, if you take that a step further and loop on the non-array object, its *properties* become the collection and thus $index becomes the name of the property and $value is the value.
Combined, that lets you dig through any unknown object (at least of known depth) and create a display template for it. This works for my need where server-side plugins will determine at runtime what the “shape” of the data being returned is, depending on the inputs.
Here’s a KnockoutJS/jQuery template that displays the values out of an unknown object.
1: <script type="text/html">
2: {{each resultRow}}
3: <tr>
4: {{each $value}}
5: <td data-bind="text: $value">
6: {{/each}}
7: </tr>
8: {{/each}}
9: </script>
Here’s a version that uses the other “magic” variable: $index, which is the actual property name.
1: <script type="text/html">
2: {{each resultRow}}
3: <tr>
4: {{each $value}}
5: <td data-bind="text: $index">
6: {{/each}}
7: </tr>
8: {{/each}}
9: </script>
If you use both $index and $value (on multiple levels (which is when things get confusing)), you can build a grid out of any list of properties off an object.
Also hugely helpful is the following combination of investigation tools. You can subscribe to the changes on a portion of your ViewModel and window.alert the new data. If you first call JSON.stringify on that data, you can get a nice, JSON version of the object. Take that JSON over to the JSON Formatter and you can see it all nicely indented and organized.
I find that to be really helpful given you don’t get code completion when writing templates to display this JSON data. The formatted JSON code gives you “documentation” for working off of.
P.S. Sorry for all of the “quoted strings” in this article. It’s a bad habit, but they all seem necessary to me.
P.P.S. This is another of those kind of article where I’m as much posting this for my future self as anything else. if it helps you too, great.
So, back this summer, I yanked this site off of Wordpress and put it on a temporary solution, powered by Lucene. That appeared to work well, but cracks started showing in that setup recently. See, this site is hosted on a cloud hosting environment.
That works great for distributing load across servers. What it’s not so good at is handling changes to the files. When, like with Lucene, the data is stored directly in files within a site, as the individual servers in the cluster attempt to sync up, they get confused.
That’s what’s been happening with this site. As I updated the Lucene indexes, all would be fine for a bit and then gradually, duplicate content started showing up on the site.
I figured it was time to switch it back to being database-powered to get around that problem. I’ve converted the dominant content over and this should make it much easier to update the site. Only time will tell if that reduced friction will result in me writing more. One can hold hope, right?
The last few years, nearly every web application I’ve built has been using the MVC pattern, and pretty much all of those using the ASP.NET MVC framework. I’ve worked out some repeatable patterns that make building a certain kind of application (straightforward CRUD and similar apps) very straightforward. That’s a good thing given how often the projects in front of me line up with that pattern.
But, there’s another kind of application I’m wanting to build and being asked to build. It’s characterized with a more sophisticated UI that has “richer” interactions. While that could be steered in the direction of Silverlight, most of the time, my clients (and myself for a couple of upcoming applications) really want more devices targeted than Silverlight supports.
That points to a Javascript/AJAX powered application. However, the looking at Silverlight I’ve done has highlighted how useful the MVVM pattern is for richer client applications. Just about the time I was thinking about whether or not that pattern might work well in Javascript, I listened to an episode of Hanselminutes where he interviewed Steve Sanderson (who has done quite a bit of interesting work using ASP.NET MVC) about his MVVM Javascript framework: KnockoutJS.
The framework drives the entire UI from a “view model” Javascript object. The UI/HTML is bound to that object and any changes to either are rippled through to all other bound elements in a really elegant way.
I did a bit of digging into the framework, looking through the examples and it all just “clicked” with me. It makes so much sense for client-side heavy web apps. I’ve got some needs on client projects as well as 2 products that I’m 50% owner of underway right now where KnockoutJS is a really good fit, so I’m plowing ahead with it.
That, of course, necessitated a prototype to get myself a little bit oriented to the framework. I figured a good place to start is with an “advanced search” screen. These are screens that are nearly always asked for in apps. But, with all of the moving parts, they’re actually tricky to get right and to include everything people want.
What usually happens (at least what I’ve seen) is that most of the feature makes it in, but there’s always at least some that gets left out from the following list:
Given that that’s usually a screen that’s more tricky to build than your typical CRUD screen, I figured it would be a good prototype for me to determine how difficult KnockoutJS was going to be to work with.
I started with a database I’ve got for generating data for other databases. For instance, if you join a few tables together, you can generate random “fake” users for your site, chosen by gender, give them semi-realistic fake addresses, etc.
Part of that database is a list of cities of the world, the regions and countries they are in. So, I built an advanced search over the cities.
I used ASP.NET MVC as the back end, writing a quick Entity Framework layer over the database. The search controller action itself is pretty hacky/basic code, but it served the purpose of letting me exercise KnockoutJS.
Once I got going, I also got curious about how this might work with OData. Since KnockoutJS in my prototype (and in general) is sending data to and fro in JSON and OData lets you put a URL-addressable layer over your data on the web, I wondered if you could expose an OData service directly to your KnockoutJS client-side app and let it access the data directly.
Enter DataJS, which handles the data out of OData and makes it more digestible as JSON. So, I included a view that did a more basic search directly to the OData service, which was a little different, but still fairly straightforward.
All told, I’m really happy with how quickly this prototype came together and how well it works. This has me really excited to implement this in all 3 of the projects I’m juggling right now. If you’ve been dabbling with (or working more seriously with) rich UI Javascript web applications, KnockoutJS is something you should really check out.
If you’d like to take a look at the code for my prototype, you can download it here.
In my last post, I mentioned that I've begun running and some other exercise as part of my quest to improve my health and decrease my risk of dying early. That activity was at the top of my list because it has a high return on investment and it's something where the effort IS the result.
That's in contrast with "losing weight", where complicated factors can mean that a tremendous effort can result in no change and no improvement in the metric that correlates with the risk of an early death.
The distinction has moved "losing weight" lower on my list than it used to be.
It's also responsible for the second item on my health improvement list: brewing and drinking beer.
Based on my experience with our culture, that statement probably alarmed more than a few of you. However, I assure you that this is actually a well thought out decision, based on good evidence.
It first came up when I was searching for the most impactful ways to reduce, in particular, heart disease. The following quote jumped out at me when I was digging around:
The American Heart Association, based on the research evidence, concludes that the "Consumption of one or two drinks per day is associated with a reduction in risk of (coronary heart disease) approximately 30% to 50%."
Read that twice. If there was a new drug, from one of the major drug companies that, when taken daily, cuts your risk of dying from heart disease by UP TO HALF, they'd be shouting it from the hilltops. For aspirin, which has a large, similar effect, we *do* hear all of the time about how it will help and doctors *do* put an awful lot of people my age and older on the low-dosage aspirin. However, I've never had anyone in the medical profession even hint at these facts when it comes to alcohol and heart disease.
So, I started digging deeper and kept coming up with more and more studies related to a reduction in risk of death. This article (on a university site) serves as a really nice summary of what the complete body of scientific study on this topic says. In short, the fact that I used to abstain from alcohol on all but a few days per year was actually one of my greatest risks for dying early.
That summary doesn't just talk about the benefits related to heart disease, but a whole range of other diseases and illnesses like Alzheimer's and Parkinsons. In other words, that cliche of a 100 year old person being asked what their secret to longevity is, and answering "a daily shot of whisky/beer/sake" may not be far off from reality.
Now, while I'm frustrated that this info wasn't shoved in front of me sooner, I understand why, even though I think that the reasons don't hold up.
See, the benefits are in a weird "U" shaped curve. If you don't drink at all, you have a high risk of dying early. If you drink more than 3 drinks per day, you have a high risk of dying early (though from different things from what I understand). Only in this narrow little band of 1-3 drinks per day and only when that level is actually consistent (no saving them all up for one day), does the big benefit exist.
I know that if this recommendation were generally made, people would miss the end of the "U" where drinking more than the 3 daily drinks eliminates the benefit. I know that's true, in part, because nearly every single person I've told about the benefits of moderate alcohol consumption has made the same joke: "Then I'm the healthiest person around because I drink a lot".
In online discussions of this research, I've seen people wonder "aloud" about "all of the people those drunk drivers kill" and heard people wonder aloud how I'll "function when I'm drunk all of the time". We have a seriously strange relationship with alcohol in this country.
Keep in mind that as an adult male of my weight and height, even under the newer 0.08 BAC standards, I'm OK to drive even after 5 beers and no waiting. Given that the benefits only exist at the 1-3 drinks per day level (and are therefore my exact level of drinking), I will never be in jeopardy for a driving violation. I won't ever reach anything resembling "drunk".
So, from about 2 months ago, I've been following the 1-3 drink regimen, like most humans historically and most places on earth other than the US.
Of course, because of how I tend to do things, rather than just going to the liquor store and picking up my "prescription", I've actually begun brewing my own beer and cider, a hobby that's proving enjoyable and paced appropriately given all of the other stuff I've got going on.
It's one of the few hobbies you can be really "into" while only putting in a few hours once every few weeks. I'm on a quest to brew what I want to drink. I think I'm on the right trail.
I have never been "in shape". Sure, at various times in my life, I've been skinny, but, despite what lots of people want to make you think, skinny doesn't necessarily mean you're healthy.
In elementary school, my lifelong dislike of participation in sports really bloomed and was joined by an ankle problem diagnosed as "tendonitis". Looking back, I believe that it was probably mostly me not wanting to exercise and blowing a little pain out of proportion.
Regardless, when the other kids were running, I spent 6th grade walking instead during gym class and getting even less exercise at recess.
In junior high and high school, my dislike of exercise continued. I played a couple of seasons of basketball, and spent most of that time doing physical, hard work on farms. However, in all of those pursuits, my goal was to get them over with as soon as possible.
Up through 10th grade, every so often, seemingly randomly, we'd be asked to do the physical fitness assessment with no real preparation beforehand. Thus, while I ran a mile a couple of times a year, I never did so easily and never in any sort of reasonable timeframe.
In college, the closest I came to exercise was riding my bike to and from class (entirely because parking was too difficult), or walking around campus in my work study job doing desktop support for faculty and students.
I've gained weight, lost it, gained it again, been diagnosed with high blood pressure, high cholesterol, etc. and am coming up on my 35th birthday. I clearly need to improve my health or start facing the fact that I'm going to live a shorter life than I want.
So, I'm attempting for the Nth time to get healthy, but with a slightly different approach than in the past. Rather than just assuming that things like "lose some weight" are the right thing to do first, I am trying to do things rationally and aim for the low-hanging fruit.
When I went looking for studies and numbers to make those decisions, I found that the level of discussion of risk factors for dying early isn't in line with how those factors actually line up in order of risk.
There's a lot of digging to come up with what I did and a lot more for me to do yet that may revise this plan, but I'm working on the few that are the evidence in front of me says will deliver the greatest reduction in my early death and can be acted on immediately.
The first thing I'm tackling is to get physically fit. When I read through the literature, it's clear that a fat person who is physically fit is much less likely to die early than one who's not physically fit. Plus, the studies also make it fairly clear that virtually no one loses and keeps weight off without exercise.
So, the beginning of this long journey is to get physically fit. But, doing what?
Basically, I hate pretty much all forms of exercise. So, I approached this logically as well. Anthropologists say that before human beings invented stone tools, our primary biological advantages consisted of 2 things: our ability to strategize and our ability to walk and run all day long and wear out our target prey.
If there's one physical activity that human beings seem built for, it's walking and running. It also seems to be the very definition of "physically fit" to be able to run reasonable distances and for reasonable amounts of time. This is confirmed by the fact that the US military uses a 3 mile run (along with a couple of other things) to determine physical fitness for officers and enlisted alike right up until retirement at 62+.
As such, it strikes me as a reasonable metric as a goal. So, I'm aiming to hit and maintain the minimum for my age. I'm starting with the running part.
I started by using the plan at Couch to 5K and am actually up to running 1.5 miles at a time over 20 minutes. For a bit in the first few weeks, my shins hurt (even on my off days), but other than that, despite my current weight of 262 pounds, my knees don't hurt, etc. at all.
I believe this is due in large part to learning some proper form and no longer landing on my heels when running. See this video for the difference.
At any rate, there are a few other things I'm doing on this journey toward living better, and hopefully, I'll share more of them soon. In the mean time, I keep increasing my running time aiming at that 3 mile distance in reasonable time.
Anyone who has done web application development "behind the firewall" has been asked to put together "a basic admin screen" for managing a work queue or other basic utility task.
I know I’ve built so many of them I’ve lost count at this point. And there’s this thing that pops up over and over again as a trend: no one ever wants to spend time or money on a visual design for them.
It makes sense, really. These apps are often quickly thrown together and frequently for really temporary purposes or in situations where the goal is just getting something working to keep people moving forward on the problem these apps solve.
From that perspective, I completely get why an internal design team or outside design firm isn’t ever engaged for these kinds of projects.
Unfortunately, there’s another trend I’ve noticed on these apps that makes that disregard for visual design a problem. Rightly or wrongly, people judge these apps largely by how they look. So, while the developer is told to "not worry" about how it looks and "just put something basic together" , as soon as people start using the less than attractive version most of us developers put together, they invariably say things about the app that are less than flattering.
I dislike it, but all of the evidence says that people do judge things by how they look. Even if it works exactly like it should, if it looks clunky, users will think it *is* clunky.
Even if you, as a dev, have good design skills (and I like to think I have at least mediocre design skills), there often isn't any time to apply them to these kinds of apps. That combination of circumstances led me, quite a while ago, to look for a decent template that I could apply to all of these kinds of apps to make them look at least "decent" while not having to spend any project time doing so.
Thus began a frustrating quest.
I looked on some of the usual places I'd looked for CSS templates before: OSWD, Free CSS Templates, etc. and didn't find much. Sure, there were hundreds of blog-like templates, but nothing that really worked for the kinds of "admin" apps I get asked to build. Then I ran across Theme Forest and thought I'd finally found my solution.
They've quickly built up a pretty extensive section of exactly this kind of admin theme. And, I've bought about half of them. Really. You should see this "themeforest" folder on my hard drive. It's packed with them.
So, having bought so many of them, which one do I recommend? None of them.
Each one in turn ended up driving me nuts and proving to be very difficult to use in the very place they're intended to be used: applications.
While they look like they'd be just the thing you'd need in these situations, for whatever reason (I don't want to speculate on what's driving this reality), they're structured in ways that make building applications using them frustrating.
As a general rule, whatever framework you're using to build your app, you've probably got various bits of code responsible for generating different portions of pages. You've probably got a loop of some sort that generates the menu, etc. The problem with many of these templates is that they spread out the responsibility for a given chunk of HTML too far apart in the file.
In several cases, i tried to add a subsection or move a few things around only to discover that these templates fought me the entire way.
So, a few months ago, I took a few hours to see if I could come up with something on my own that I could share with the world. I was surprisingly happy with the results and put in a bit more effort on it, and have now used it on a couple of quick apps, ironing out kinks in the process.
The theme is called Benevolent Dictator and I'm licensing it about as liberally as you can without making it public domain. Hopefully you can get some use out of it too.
It's based on the grid framework: Blueprint CSS, which makes the modular blocks easy to size. I've tried to include a little bit of all of the common stuff my apps need, as samples, but if there are widgets, blocks, etc. that you think are missing, please let me know. There's also a version with a dropdown "mega menu" that's proving useful in one of my current projects.
The github repository for it also includes a copy of some open source icon libraries that take up quite a bit of space, so if you don't need icons, just grab the .html and .css, etc. instead of cloning the whole repository.
As I’ve gotten more and more into using my smoker to make BBQ, I started paying more attention to my side dishes. Among my favorites has always been baked beans.
Unfortunately, when I went looking on recipe sites for inspiration, I discovered that a startlingly high percentage of the baked bean recipes are little more than cracking open a can of Bush’s Baked Beans and doctoring them in one way or another with additions.
That’s fine, as far as it goes. However, I took it as a challenge to create my own recipe for baked beans from more “raw” ingredients.
The result has had several outings now and every time, these beans have been a big hit. While I don’t make them the same way every time, the basic pattern is definitely holding up and everyone at the outings I’ve brought them to says they like ‘em.
In the tradition of a lot of BBQ, I figured if I was going to make my own, they should have beer and whiskey in them. That results in some really interesting and complex flavors that I really like.
The prep time is pretty quick, but then they sit in a crock pot for 24 hours. That sounds like a long time, but it’s really the last 12 of those hours when they really transform into what you’re after.
Anyway, here’s the recipe. Any improvements and suggestions are welcome. This is for the large oval crock pot pictured above. If you only have one of the smaller, round crock pot/slow cookers, you’ll need to cut the recipe in half.
1/4 pound of bacon or salt pork
1 lb pork sausage
1 lb of diced onions
3T of diced garlic
2 lbs of dried great northern beans
1 29 oz can of diced tomatoes
1 6 oz can of tomato paste
2 cups of brown sugar (going to raise this to 2.5 cups next time)
4 cans of beer
2 shots of whiskey
That’s the general idea. From there, I usually do something different and play with it a little bit. Last weekend, when I made them, instead of the pork sausage, I used smoked pulled pork that I had in the freezer. I’ve made them with several different varieties of beer, but use Guinness most often (also works really well in beef stew). Same for the whiskey. I usually use an Irish whiskey, but have used bourbon instead and, while they taste slightly different, they all come out good.
For more tweets, follow me here.
"Anyone want to go out for some after dinner omelettes?" -Ron Swanson
After looking at my calendar for the last couple of months, I think this half-off Wed "mini weekend" might be able to be a regular thing.
Among several other errands, I picked up a couple of items that are making me grin: http://t.co/CBVGcQLu
Took the afternoon off for some errands and to brew a batch of Little Beggar, my Belgian table beer.
If you have more coupons than items, the expresslane is not for you. Especially if the difference is measured in orders of magnitude.
Them: "You need to look in the 'Item' table." Me: "There is no 'Item' table in that database." Them: "Oh yeah, it's called 'Parts'".
Just used the "Copy this network profile to a USB drive" in Windows for the first time to get tablet on network. Slick.
How many times is this article going to be written? http://t.co/4614PRtk Is any of this still new for people?
"What would it take" to get me to be an employee? $7.2 million. Or, a WAY worse economy than I've seen in my career so far.
Had to shut the windows with rain blowing in and stuff blowing off shelves here. Looks like only a single line of storms though.
Further facilities drama: clogged furnace filter meant that A/C being turned on the last couple of days resulted in a block of ice.
Tons of drama involving the circuit box after the pizza oven and microwave in the home theater died. Turned out to be a power strip instead.
I posted the ehealthinsurance link because so many people seem completely unaware that buying your own health insurance isn't that hard.
Just got my annual health insurance premium notice. Looks like it's time to shop for new health insurance. http://t.co/l1pu9hdq
Think I'm going to take at least half of Wednesday off to brew. Need to keep scheduling such days to retain my sanity.
"Installing update 76 of 137" is what happens when you crate up a tablet for 2.5 years and then put it back in service.
anyone have resource pointers for using a TabletPC/Win7/Win8 and a projector for meeting/whiteboard/presentation purposes?
Don't show the trivial thing I can do "without writing a single line of code". Show me how to dent the universe with 1K or 25K lines.
Moved the sour porter to the oak barrel. Now we wait.
It feels very wrong to drive to a hockey game with the AC on in the car.