Archive
Support Architecture for your Web Application
Whenever I start a new project, in particular a web project of some kind, there are several steps that I take in preparation for scaling the project or supporting different business functions. Let’s face it, not everything that the website might expect to do should be done by the website; a classic example of this might be notification that a subscription is about to expire. That sort of occasionally scheduled business process is certainly doable in the context of web development, but in general it’s not recommended.
One that might be less apparent might be tasks such as general email delivery, say a forgot password email, where under high traffic one might want to off-load the email delivery to a secondary process rather than hold up rendering of a web page to the browser while the email is built, formatted, and ultimately delivered.
To support a wide variety of potential offline processes, I generally will setup what I might refer to as “harnesses” for three different types of processing. These harnesses are fairly generic, interacting with an interface implementation and typically based of the standard .NET configuration model for instantiation of the class implementing the interface. In many cases, the interface implementation is common to all three harnesses, such that the processes are interchangeable.
There are three basic timing elements for things you might want to accomplish offline from your website. The first timing element I would refer to as “do something repeatedly every so often”. The second timing element I would refer to as “do something on a scheduled basis”, whether that schedule is every few hours or once a day or even once a month. The last timing element I generally prepare for is a “one off” or “one time” execution.
It should be noted that this sort of architecture presupposes that you have full control of your computing environment either through ownership of the servers or access via some sort of cloud computing or virtual hosting service, such that you can install and run items from the console or command line. Obviously this would not be possible if all you had was a web host for your website.
Under those assumptions, I will create three things. First, I will create a Windows Service. This service’s sole purpose would be to take a configured set of objects that implement my interface and run them repeatedly at a specified interval, say once every three minutes. A good example of this might be a process that monitors an email inbox for new messages and processes them in some fashion. Because this is a Windows Service, it might be wise to give each object its own thread, or if you are the latest .NET platform, its own Task.
Second, I will create a standalone console application that I intend to schedule to run regularly. This console application will also load up a configured set of interfaced objects and run them a single time when the scheduled task executes. A good example of this might be some sort of nightly statistical analysis that needs to be done for reporting. In the same sense as the Windows Service, if you have a lot of objects, it might be wise to allow for sequencing some of them in order while noting which ones are truly independent, and then multi-threading them or assigning them Tasks in the proper order.
Last, I will create a near-replica of the standalone console application above, but likely without the multi-threading in place as this is considered to be a one time execution. The application above and this one might even go so far as to be exact copies deployed separately, with one scheduled and one not, if the different requirements for each don’t stray. Common uses of this would be for one-time data conversions, say for example you had inherited a poor database structure that had a person’s name all in one field and you wanted to split into first and last name.
Once I have these three harnesses built, it becomes very easy to generate a plug-and-play approach to any tasks that would need to be scheduled or executed in a predictable fashion without constantly creating new services or new executables to handle the work. This would then allow me to very easily move tasks that my web project might eventually find overwhelming or detrimental to performance off into background tasks without constantly reinventing the wheel. It also allows me, if I so choose, to install or write some code to monitor the execution of these harnesses without having to rewrite the monitoring code every time as well.
This approach has been helpful on several projects and saved me a lot of work down the line.
Why I’m a WGU Student, and Why I Believe in Competency-Based Education
I’m a failure as a traditional college student.
It’s true. I was so burned out at the end of high school, bored out of my head with spending time in a classroom, that even though I was Junior National Honor Society, and was ranked 7th out of a class of 542 in my sophomore year, I spiraled and basically crashed my senior year of high school. I simply could not tolerate another year in the classroom.
So I didn’t go to college and went to work instead.
No less than 4 times I’ve tried to go back to school the traditional way. I can show you the transcripts. Each time, they ended the same way, with me burning out on the overload and the ridiculously boring amount of time I had to spend sitting at a desk. I learn extremely quickly, and I can absorb and articulate back things I learn very quickly. So equally as quickly I would eventually lose interest.
This is by no means a reflection on the students who need to learn that way. I get that other people will learn differently but arrive at the same equally qualified result. But it didn’t work for me at all.
Many times over the last 10 years, as my career has progressed, I’ve often said that if I could find some way to get credit for life experience, or at a minimum “test out” of topics that I already knew, that I would consider going back to school, but without that, I saw no way I would ever go back to school and finish my degree.
Early in 2012, inspired by a colleague of mine who was taking online courses to further her degree in computer science, I started looking around for a way to pursue my degree under the following conditions:
- I could do all course work online
- I could proceed as quickly or as slowly as I needed
- I could “test out” of courses as quickly as possible
- I did not have to spend hours and hours in either a virtual or a brick-and-mortar classroom
Today, I’m a student at Western Governor’s University. I’ve just finished my first 6 month term, and in that 6 months I’ve completed 9 classes and find myself about 18 months short of getting my Bachelors in Software Development.
How is that possible, you ask?
Well, first of all, WGU cares that you know what you say know, not how long it takes you to prove you know it. Out are classroom sessions and lectures and repetitive assignments. In are self-driven curricula and online course materials followed by competency exams or papers / projects demonstrating your understanding of the material. Out are teachers, in are equally qualified course mentors whose job it is to make sure you stay on task and give assistance where needed. The “teachers” instead spend time vetting and perfecting the online curriculum to make sure it meets accreditation standards as well as industry standards.
This link is instructive, talking about how their philosophy is based on something similar to airline pilot training, based on competency, and how it was founded with the backing of 19 state governors who agreed with its philosophy of education.
Note that the university is 15 years old now, and fully accredited. In my IT program, I’ve managed to test out of several courses. And it’s not just traditional “testing out”, either. Since my program is IT, the WGU courses are based on industry certification exams. That means that in order to pass Database Fundamentals, I needed to pass the base level Microsoft Certification for database design.
This resulted in two perhaps counter-intuitive outcomes. First, because it’s a Certification test program, I would argue that you learn more in that class, and because you do earn the Certification, the class carries real weight on your resume. Secondly, because my current job requires me to be an expert on the subject matter anyway, I was able to read the material once and pass the exam. In some classes I’ve been able to take a pre-assessment exam, identify my weaknesses relative to the material, review what I don’t know as well, and take and pass the certification exam in as little as two weeks, studying a couple of hours a night after work and life has calmed down.
Under what circumstances would spending 40 classroom hours to arrive at the same result make sense to a student like me?
Not all of the courses are like that, naturally. My humanities course required me to write a paper comparing periods of art, which were graded by three “graders” against a published rubric covering about 20 different specific points of knowledge. So other courses have their own way of determining competency. But even that class only had two assignments, and I was able to choose when during my term to do the class and turn in the work.
In addition, the cost is so much less than your typical school. Because of WGU’s competency-based online curriculum, they don’t have brick-and-mortar schools or teachers in the traditional sense. This means they can charge a lot less. In fact, my 6 month first term cost me a total of $3,000.
But here’s the kicker. While I must take 12 units, I am allowed to take as many as I can successfully finish, at no additional cost. So I spent $3,000 for 6 months, and finished 27 units. Let’s do the math, shall we? That’s $111 per unit, or $333 per class. My pace is completely at my discretion and control, and the quicker I can finish, the cheaper my education will be.
But that doesn’t even begin to factor the opportunity cost savings of not having to spend over 500 hours in a classroom over that 6 months. I was able to do the work at my pace, at my discretion, and accelerate or decelerate my pace at will. I saved a massive amount of time relative to traditional education for sure.
WGU also has a very lenient transfer policy, and transferred in 11 of my previous classes, even though some of them I had taken as long as 20 years ago.
Many argue that this philosophy violates the “college experience”. You know, where you learn to interact with your peers, achieve greater socialization, and all that. That’s great for a lot of people, and I’m sure people who want to go through that do well. Members of my family have gone through the traditional college experience and are fantastic at what they do.
But for me, at my age (and even when I was in my 20s), as a driven, self-motivated individual, what I really want at the end of the day is proof that I can do the job I’m trained to do. The social aspect of that learning is much less important.
The end result is that I have found the school I was looking for and for the first time I can see an affordable, reachable goal of a Bachelor’s degree…and in addition I’ll have 18 industry certifications on my resume to prove my competency. And trust me, competency is what really matters to my employer.
For more information, visit:
Western Governors graduates those who prove ‘competency’
Western Governor’s University
My philosophy on playing bass
My recent sit-in with Lori Diamond and Fred Abatelli has got me thinking a bit about my musical career and its current state. While I am basically “not playing” right now, at some point down the road it might be nice to get into some studio work, or maybe find a blues power trio and play a few times a month. That said, I’ve had discussions over the years with several musicians about what I think is important in order to be a good bassist. So I’ve compiled my personal opinion here. Note this is my personal philosophy and in no way means that I have any real clue what I am talking about!
Be the “rock”
I consider the bass to be the foundation of any band. By this, I mean that I as the bassist have the most impact on dynamics, the most impact on tempo, and the most impact on tightness. By their nature, guitars are less impactful on the overall tightness and tempo of a song, and the same could be said for melody-based keyboard parts. And while the drummer certainly has a great measure of control, I consider it my responsibility to ensure that songs are at the correct tempo and the correct feel. I want to be the “rock” or the “glue” that holds the song together, that ties everything together.
My first to-do, whether it’s a new band, a sit-in, a new song, what have you, is to make sure I am absolutely 100% locked in and in tune with my drummer. It’s not called a rhythm section for nothing! But beyond that, I want to be the bridge from drummer to the other musicians, to be the one communicating, making eye contact, and keeping everything together. Good bands take hard work and communication and I want to be 99% sure that my parts are locked in and dependable, so that the other musicians have the freedom to work their magic over the top of my foundation.
Play nice with others
This is vitally important when you play with keyboardists, in particular the talented ones who utilize the full scope of their 88 keys. I’ve been lucky enough to play with several awesome keyboardists over my career, and in doing so I had to learn to play with them across their varying styles. Covers versus original ends up being slightly different, as the covers already have their parts clearly delineated, and if you are both playing the parts as executed, generally you should be fine.
In the case of originals, however, it’s critical that the bassist be highly aware of what the keyboardist is doing musically with their left hand, the hand that handles the bass keyboard parts. Rightfully so, talented players will use their left hand to enhance their keyboard parts, and it becomes necessary for the bassist to find their way around those parts and bring something different to the table to keep from blending in or blurring what the keyboardist is doing in the lower ranges.
It’s also important to key in on the techniques of your drummer and attempt to match your right hand to their rhythm. Many times you can heighten the perception of your riffs and fills by tying the timing of those fills to drum fills. My favorite bass fills are ones where it becomes difficult to separate the hit on the drum head from the pluck of the bass string; this shows tightness and makes both the drum and bass notes shine.
Bring your own sense of melody
I am not going to comment here on the specifics of note choice, because I think that’s hard to abstract away from any particular song. But I will say that you should never be afraid to give your bass parts some sort of melody or melodic impact. Whether it’s inversions against the guitar chords, i.e. walking down as the guitar part ascends, or a completely counterpoint melody to the vocals, as long as you are holding down the tempo and the feel I think it’s completely acceptable to have some melody in your parts and not just sit on the chord root notes or do triad scale walks. There’s nothing wrong with triad patterns, as they certainly have their place and time, but I have never felt obligated to use them where something a little sharper, or bouncier, or catchier might do.
Bring the passion
One thing I will definitely insist on, is to play your notes with conviction. Mean them. Attack them. Even on ballads, go after your notes with emotion. The notes themselves don’t matter from a passion standpoint; if you don’t feel the riff, or feel the fill, or feel the slide, the notes won’t resonate with you or with your audience. If your bass part isn’t making your body move, or your head wiggle a bit, then I would argue you are not committed to the part. There are a lot of bassists out there better than me, but I mean what I play, and that comes across and makes a difference.
Keep the action low
I won’t bother to say much about technique, other than acknowledging that mine is mostly by feel and technically speaking pretty bad, mostly due to my small hands compared to the size of the neck of a bass guitar. While I can write music by hand, and studied here and there with different teachers, I am largely self-taught, can’t sight-read, and have found that my style and ability changes over time the more or less I play.
At the end of my 3-year run with IronHorse Exchange I was probably at the top of my game; despite my small hands I felt a certain sense of synergy with my 5-string Fender J-bass that was the result of a tip I picked up somewhere in a magazine. I read that the higher your string action was, and/or the farther you kept your fingers from the fretboard, that both the time and energy it took to play a note was dramatically increased. It was one of those things that immediately afterward seemed very obvious. Many basses off the shelf do not have extremely low action due to the potential for fret buzz. Still, I took all of my basses in and had them strung as low as I possibly could, and then always kept my fingertips hovering just above the strings. I took them back in for adjustments every couple of months to keep the action tight. My play was faster, cleaner, and less tiring over the course of 3 or 4 60 minute sets of 80s cover material.
Embrace the obscurity
Good bassists are hard to find. Everyone wants to play guitar or drums, and a lot of times someone gets relegated to playing bass and not consciously learning the instrument or focusing on improving. I can say for sure that I would have rather been a smokin’ guitarist, but I got gigs because I was a competent bassist fluent in a variety of styles. There is always a band looking for a good bassist.
What this meant, largely, was that I did not garner the same attention at gigs and elsewhere as a result. Now I will grant you that I’m not the most attractive person, and certainly wasn’t expecting any particular attention, nor was I someone who joined bands to “get girls”, but I think it’s important to note that notoriety is something musicians will at times strive for, and that is part of what leads them down the path of guitarist or vocalist or drummer. Generally speaking most bassists go comparatively unnoticed.
I will stipulate, though, that other musicians will be aware of your contributions and will take notice, and that’s much more important. At least it is to me.
