• Westward Bound
  • About Aaron Brander

The Saulzar Codex

~ and other writing by Aaron Brander

The Saulzar Codex

Category Archives: On Technology

Creating with a Constraint

08 Friday Feb 2013

Posted by Aaron Brander in On Technology

≈ 2 Comments

When I was in school, it was rare for me to finish a report before the deadline. It really did not matter if the professor gave me a day, a week, or a month to complete it; I didn’t complete it until just before class.

Part of the issue for me was prioritizing. It always seemed like a night playing basketball or video games was a higher priority to me than finishing a paper I had another week to finish.

But it was not just priority. It’s the constraint that a deadline gives. With no constraint, I have a hard time conceptualizing what to do with the excess time. If I thought the paper would take three hours, what would I do with the other hundred hours I could use?

In the business world, there is another constraint. Our partners have budgets and we have to deliver the best solution we can within their budget. As a creative person trying to craft a solution out of 1s and 0s, that’s often a hard concept to grasp. I hear “best solution” and I start thinking about all of the cool features I could build. I want to think about mobile and tablets and responsive design and ajax and push notifications and modularization and reusability; any number of things that could make the application the very best it can be.

The problem comes when the perfect solution in my mind does not match the budget the partner has approved. That’s when I have to change my mindset. I have to understand what the partner needs and find a way to deliver the very best product I can within their budget.

The budget is a constraint. The constraint causes me to be creative in ways that I would not be without it. If I think my idea of the perfect solution will take 100 hours, but I only have 40 hours to complete it, I have to find a way to craft a solution out of the time I have. Perhaps I have to ignore the latest technology because that would take extra research time. Maybe I have to make the module less flexible and just build it to fit the current need.

It is not about delivering less. It’s about delivering something great within the constraint.

Give yourself a constraint on something today. Give yourself one hour to complete that task you’ve been putting off. Tell yourself that you have to have the home remodel done by the end of the week. You’ll be surprised at the solutions you come up with when you make a constraint.

Share this:

  • Twitter
  • Facebook
  • More
  • Email

Like this:

Like Loading...

Keeping your software young

01 Monday Oct 2012

Posted by Aaron Brander in On Technology

≈ Leave a comment

Tags

.NET, Mindscape, technology

Every once in a while, I look at the date and wonder how fifteen years have passed since I graduated high school.  Looking back at those four adolescent years, they feel more like four decades.  It is crazy to experience the speed of life.

The software we build wonders the same thing. Has it really been seven years since that website was built?  Wasn’t it just yesterday that Ajax was the thing of the future, and IE 7 was the greatest step forward in Internet history (ok, maybe that was never the case).

Time and Technology stop for no man, and it certainly does not stop for the applications we build. So what can we do to keep them fresh and healthy?  It’s not so different from the additional exercise, better diet, and regular checkups that we do for ourselves. In the case of technology, the key is to keep up on blogs, product releases, and to continue to use the application so you can understand its needs.

Microsoft released .NET 4.5  on August 15, 2012, and I was pleased to have a few minutes to install Visual Studio 2012 with .NET 4.5, and give webTRAIN, our Web Marketing Platform, an upgrade.

webTRAIN was built back in 2007 as a .NET 2.0 website using Visual Studio 2005.  Since that time, we have upgraded it to .NET 3.5 and have been using Visual Studio 2008 to code it.  I really have been looking forward to upgrading to .NET 4.0, but I wanted to wait until we had new servers with IIS 7 installed.

We made the move to a new 4 server network with IIS 7 a few months back. With that, we were finally able to consider moving to .NET 4.  I heard .NET 4.5 was around the bend, so it made sense to wait just a bit longer.

The actual process of moving into Visual Studio 2012 and .NET 4.5 was not as painful as I thought it would be.  We have run into two hiccups so far in our testing.

1) .NET 4.5 handles request validation differently that .NET 3.5 and .NET 4.0.  This came up specifically when trying to pass HTML from a Tiny MCE editor to our model.  We found the answer in this whitepaper. The portion that affected us was “Support for unvalidated requests’”, which I have copied below:

*******************************************************************

To allow this, ASP.NET 4.5 now supports unvalidated access to request data. ASP.NET 4.5 includes a newUnvalidated collection property in the HttpRequest class. This collection provides access to all of the common values of request data, like Form, QueryString, Cookies, and Url.

Using the forum example, to be able to read unvalidated request data, you first need to configure the application to use the new request validation mode:

<httpRuntime requestValidationMode="4.5" ...
/>

You can then use the HttpRequest.Unvalidated property to read the unvalidated form value:

var s = context.Request.Unvalidated.Form["forum_post"];

Security Note: Use unvalidated request data with care! ASP.NET 4.5 added the unvalidated request properties and collections to make it easier for you to access very specific unvalidated request data. However, you must still perform custom validation on the raw request data to ensure that dangerous text is not rendered to users.

*********************************************************************

 

2) After updating our development servers to .NET 4.5, webTRAIN seemed fine and dandy. However, we found that it caused an issue with an MVC app that used automatic build and deploy via Team City on our development server. It built the code against .NET 4.5 assemblies and when we deployed it live, where .NET 4.5 is not yet installed, it ran into an error.

The error was:

Could not load type ‘System.Runtime.CompilerServices.ExtensionAttribute’ from assembly ‘mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089’.

We ended up having to retrieve mscorlib from C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0 and building it directly into our application.  It required a manual change to the programs’ XML file to include:

<Reference Include=”mscorlib” />
<Reference Include=”System.Core” />

There’s still lots more testing to do to make sure webTRAIN will play nicely with the new updates, but it’s great to know that we can begin to include Strongly Typed Datasets, Model Binding, HTML 5 snippets, and all the other great .NET 4.5 upgrades into our new features.  webTRAIN is feeling younger already!

Have you had luck upgrading to .NET 4.5?

Aaron Brander is the VP of Technology for MINDSCAPE at Hanon McKendry.

Share this:

  • Twitter
  • Facebook
  • More
  • Email

Like this:

Like Loading...

The Cost of Interruptions (Or how to get things done)

25 Tuesday Sep 2012

Posted by Aaron Brander in On Miscellany, On Technology

≈ Leave a comment

Tags

work life

I found myself sitting at my desk the other day, and knew that I had to get some work done.  The problem was that every time I started, something else distracted me.  Each instance I was distracted, it took time to remember what I was doing, build up the context that I had my brain set in before I was interrupted, and get back in the Zone.

Interruptions today are easier than ever. Here’s a small list of the interruptions that can find me from where I sit:

  1. Email notification
  2. Instant messenger for chatting with co-workers
  3. Desk phone
  4. Cell phone
  5. Internet!
    1. Facebook
    2. Google Reader
    3. ESPN
    4. CNN
    5. USA Today
    6. Detroit Free Press
    7. Research for my next vacation
  6. Meetings
  7. A window
  8. A grumbly stomach

It’s a wonder I get anything done at all with all those potential interruptions.  So then, what is the key to being productive?  It is not necessarily eliminating the interruptions.  Your brain craves distraction, and sometimes the distraction is what triggers the creative idea that you were looking for.

Instead, the answer is focused, uninterrupted time.  Here’s a strategy that works well for me.

A) At the end of the day, I make a list of the 2 or 3 most important things to accomplish tomorrow. Often there will be a number of ancillary items under the main items. If I get to them, great. If not, they’ll wait for another day.

B) When I get to the office, don’t check your email right away! A day’s worth of distraction awaits you there. Turn off the email client and put it away until later.

C) Turn the instant messenger to Busy so your co-workers know not to bother you.

D) Put your head down and work until at least 1 of the items is complete. If possible, complete them both.

E) Now that the day is rolling along, and you’ve completed enough that you feel productive, check your email.  I like to check it at 11 and 4pm, and do my best to avoid it the rest of the day.  If it’s an emergency, they’ll call, but it rarely is that important.  What is important is getting substantive work complete, and not just checking off small tasks that do nothing more than move a ball forward.

Give it a try sometime! I think you’ll be pleasantly surprised with how much work you can accomplish by focusing on 2 or 3 of the important tasks each day.

Share this:

  • Twitter
  • Facebook
  • More
  • Email

Like this:

Like Loading...

Coding is Creativity

31 Friday Aug 2012

Posted by Aaron Brander in On Technology

≈ 1 Comment

Tags

technology, work

I was having a discussion about great literature the other day, and something that was said struck me as very applicable to software development.

“How did he build an entire world out of what was in his head?”

We were talking about Tolkien, and were both impressed with the breadth of material he created.  Sure, he wrote the Hobbit and the Lord of the Rings.  But supporting that was the creation of a couple of languages, most notably Elvish, and books of foundation legends.

The same could be said of music and art.  How does someone take what they see in their mind, and bring it forth into the world for others to enjoy?

I like to consider myself a writer, and since I have a book published at Amazon, and have even received a small check from its sale, I guess that makes me a published writer.  I am also a software developer, and have created applications for personal use, sale, and at the direction of clients.  You may think that on the surface, the two have nothing in common.  However, I have found that they are very closely related.

The Idea

Both a great story and a great application begin with an idea. The idea phase is exhilarating and freeing. There are no boundaries, no road blocks and no constraints.  Your imagination runs wild over what you could make and what you could do with it.

The Implementation

Once the idea is decided upon, a story and an application take planning.  There are some writers, and some coders, that can hop right into the details.  I’ve read a book on Stephen King’s writing process, and he’s fortunate enough to be able to watch the story unfold as he writes.  For me, I write like I code. I plan it out.

That’s the first step in implementation. Then I start coding the large portions of the application or outlining the different plot devices and characters. It’s in this phase that I see the full scope of what I envisioned, and start to give myself constraints such as time, cost, or word count.  Working with constraints inspires more creativity.  How can I finish this in a weekend?  How can I keep it under 100,000 words?  The constraint drives good design.

The Details

When writing, the difficult detail for me is creating believable dialogue. I can write fight scenes all day, but crafting discussion between characters is not easy.  In code, it’s often all of the small items, like the UI for the user signup screen, the retrieve password code, or making sure all the possible iterations of interaction are covered and tested.  It’s where the project is no longer fun every day, and the only way through is to roll up your sleeves and to keep moving forward.

The Payoff

Once my website is live, my application is released, or my story is in front of readers, the feeling is the same.  Relief that it is done, pride that my idea came to life, and concern that others will treat it with the same love and care that I did while building it.

Writing great code is an art, and one that is beginning to receive the recognition it deserves alongside literature, music, and art.

Share this:

  • Twitter
  • Facebook
  • More
  • Email

Like this:

Like Loading...

Scheduling is a breeze (Thanks to LiquidPlanner)

24 Friday Aug 2012

Posted by Aaron Brander in On Technology

≈ Leave a comment

Tags

Mindscape, technology, work

Back in February, we were buried under a mountain of work.  It’s not a bad problem to have, but it sure made for quite the logistical nightmare.  It was not easy to schedule dozens of projects for dozens of team members and still make sure we hit our deadlines.

I wrote about the problem at that time, and a small sliver of hope that had appeared on the horizon. That sliver of hope is called LiquidPlanner.

lp

We have been using LiquidPlanner since February, and it has significantly streamlined our process.  Instead of juggling a calendar for each team member in Google Calendar, we just assign tasks to a team member, put a low and high estimate for how long it should take, and let LiquidPlanner handle scheduling the project.  It’s easy!  The whole team participates in project management now because they can see all of the tasks assigned to them and how it affects the schedule.

Instead of using Basecamp to handle messages, to-dos and file management, LiquidPlanner handles that too. Tasks are central to LiquidPlanner because they drive the schedule. It also allows us to comment on tasks, add messages, and work with clients.

As an added bonus, we can track our time against a task.  So, we’ve eliminated our home grown time tracking system and instead track time directly in LiquidPlanner.

LiquidPlanner is not all rainbows and unicorns.  There are a few things that were nicer in our previous systems, or could use some improvement.

  • The upcoming schedule is not as easy to read as Google Calendar.  They do a great job handling a LOT of data, but it takes time to get used to.
  • Communication is not as nice as it was in Basecamp. The biggest issue is not being able to tie files directly to a comment. 
  • If I assign a restricted member to a task in a project they don’t have access to, they should automatically be added to the project.  Too often we have tasks that people can’t see.
  • Pricing is per user, so it can get pricey.

But in the end, not having to use 3 different systems, and scheduling that is WAY easier makes LiquidPlanner a no-brainer for us.

If you have lots of projects that need to be schedule across many different resources, and you are tired of using MS Project, or cobbling together multiple systems to try and create something useful, give LiquidPlanner a try!

Aaron Brander is the VP of Technology for MINDSCAPE at Hanon McKendry.

Share this:

  • Twitter
  • Facebook
  • More
  • Email

Like this:

Like Loading...

Code Collaboration or (Subversion isn’t always Subversive)

11 Wednesday Jul 2012

Posted by Aaron Brander in On Technology

≈ Leave a comment

Tags

technology, work

Have you ever attempted to work on a Microsoft Word document with friends?  You created the document, emailed it to six friends, and suddenly found yourself struggling to merge all of the different changes that came back to you.

It’s a nightmare.

If so, first off, it’s time to leave the Office and move to Google Drive.  It’s a great way to collaborate online, in real time, on documents and spreadsheets.  I use it when I write stories and blog posts in my spare time, and for all of my work documents too.

This post, however, is not about how to plan your vacation with six friends by using Google Drive.  This post is about how multiple programmers can work on the same project at the same time.  In its simplest form, it is two programmers sharing one content file, much like working with a friend to edit a Microsoft Word document.

At its most difficult, it is multiple teams of front and back end coders working on thousands of files in a project.  Do you want to be the person to merge all of those files by hand as changes are made?  Nope, neither do I.

That’s where subversion comes in.  No, not subversion, the attempt to overthrow structures of authority.  The subversion I am talking about is a software versioning and control system.

We did not always use subversion at Mindscape. Originally, we used the FTP server functionality that came with Dreamweaver.  It allowed us to check out a file from the server.  If someone else tried to checkout and work with the file as well, they were told that it was in use.

It was alright when there was three of us. Sure, sometimes a person would ignore the lock and work would get lost. Or someone would forget to check a file in before going on vacation, and we had to wait for them to get back and unlock it.

As the team grew, those mistakes happened too often. That’s where subversion came in.

A very trimmed down explanation of subversion would be that there is a machine that controls the repository that all the files come from.  Users can get files from the repository.  On their machine, a subversion client keeps track of changes made to those files.

When the user checks the files back in, the server compares the changes to the what it has. If there have been no changes since the user started working, it just applies the changes. If someone else made a change first, the server will attempt to merge the changes together.  Mostly it works great, but sometimes it cannot merge it for you. In that case, the users are notified and have to manually merge the changes.

At Mindscape, we use a software service called Springloops to manage our repositories. It was easier to set that up then to learn how to administrate our own server. It has the added benefit of being able to deploy sets of changes to our development and production servers. It’s actually been a great tool for us.

On our computers, many of us use Tortoise, a free subversion client that keeps track of file changes locally. It’s easy and integrates directly into Windows.

Utilizing subversion, we are able to have multiple people working on a project at the same time. We can use the logs to go back through and see each change that happened, when it happened, and who made the change. It’s a great way to see who built a feature, and just as nice to figure out who to blame for a bug!

It certainly beats emailing files back and forth and trying to have a person manage merging them together.

Aaron Brander is the VP of Technology for MINDSCAPE at Hanon McKendry.

Share this:

  • Twitter
  • Facebook
  • More
  • Email

Like this:

Like Loading...

Another set of eyes (or Blinded by the Light)

30 Wednesday May 2012

Posted by Aaron Brander in On Technology

≈ Leave a comment

Tags

Mindscape, technology

sherlock

I just spent the last week banging my head against a wall.  I came away with no physical bruises, though my metaphysical cranium hurts a bit. 

It is not the first time this has happened to me, and I am sure it won’t be the last. And I’m willing to bet that something similar has happened to you, Dear Reader.  

The issue cropped up with our new server environment.  We added a second web server and a load balancer to split traffic between the two machines.  It will be a great environment for both performance and for redundancy.

We ran into a strange issue after running with the load balancer for a few days. It seemed that if we made a change to the website, the two servers got out of sync and started throwing errors. The error mentioned that it was looking for a particular dynamically built assembly file.

The issue happened quite frequently in our old environment, and typically it just took a refresh of the page to get it running perfectly until the next update.  That didn’t work in the new environment. We troubleshooted it for a while, but we finally made the decision to stop load balancing and go back to one server until we can figure out the issue.  As soon as we went back to a single server, the issue cleared up.

To me, that meant it was an issue with having more than one server in the mix.  I began to work with our hosting partner to find a fix while I did a lot of googling for answers. After a week of trying a lot of different things, including making our site work as a precompiled site instead of dynamically compiled, we were no closer to the answer.  I was really confident that precompiling the site would fix it and when it did not work, I was out of ideas.

Enter a second pair of eyes.  Eric Patterson had just come free from a different project, so he helped me look deeper into the issue. Armed with the knowledge of all I had tried in the past week, he took a closer look at the Stack Trace for the error we had.  Stuck deep down in the stack trace, he kept seeing this:
DBauer.Web.UI.WebControls.DynamicControlsPlaceholder.RestoreChildStructure

That is a control that we use to put our “Page Parts” onto the site in the correct order. For me, that was not a clue because I knew it was used on every page.  For Eric, who had no such mental constraints, it was a place to start looking.

He quickly found this article.  It seemed to fit perfectly:
1) Error only in a web farm (which is what we have after introducing the second server) 2) Error with finding the temporary Assembly name
3) Using the DBauer Dynamic Controls Placeholder.

That article has a pretty easy fix to the issue that will cause the Dynamic Controls Placeholder to use a relative path to the User Control and not a fixed path.  If you need the source code, it can be found here.  I made the change to the source code, compiled it, and added it to our website.

The error disappeared!

There’s something to be said for walking through a problem and eliminating possibilities. That needs to be done.  But when you find the frequency and power of your head banging into that wall increasing, go grab someone else to help.  Their fresh perspective can often find you the answer quickly.

Share this:

  • Twitter
  • Facebook
  • More
  • Email

Like this:

Like Loading...

The Internet is Down (or How did we ever live without it?)

29 Tuesday May 2012

Posted by Aaron Brander in On Technology

≈ Leave a comment

Tags

technology, work

The internet is down in the office.  My productivity just came to a screeching halt.

The code I was writing in Visual Studio? Turns out I was connected to our development server’s database, so I can’t test my code without the Internet.

Check my email and work on that? I work in Gmail all day, and don’t have a way to access it offline.  Without the internet, I don’t have any email.

Ask a co-worker if they have Internet? Not feasible.  Google Chat is down when the Internet is out, so no instant messaging.  Use my voice to ask?  That’s just barbaric. Instead I’ll take off my headphones, I can’t reach Pandora anyway, and stare at the expensive brick in front of me.

Check Facebook or ESPN while I wait for the Internet to come back… oh wait. That’s on the internet too.  I’d watch some TV while I wait, but I stream that through Hulu and Netflix.

No work, no email, no music, no diversions.  What’s left? When did our lives become so dependent on the Internet?  I’d go outside, but without weatherchannel.com, how will I know what it’s like out there? Should I risk life and limb and step outside unprepared? I think not.

I thought I’d write this blog, but I use Google Docs and those need online access too. It took some brainstorming, but I realized that I had Microsoft Word on my computer still and that I could type this blog up there. Whew, something I could accomplish.

I guess I could have used pen and paper, but I’m not even sure where I could find it!

Oh, wait.  The internet is back! Sweet. Now I can post this blog and get back to work!

Aaron Brander is the VP of Technology for MINDSCAPE at Hanon McKendry.

Share this:

  • Twitter
  • Facebook
  • More
  • Email

Like this:

Like Loading...

Request.URL–what’s that property?

24 Thursday May 2012

Posted by Aaron Brander in On Technology

≈ Leave a comment

Tags

.NET, technology, work

Request.URL can be used in .NET to get the value that the web browser used to access a page. However, there are many different properties to choose from, and sometimes it is difficult to know which property to use.

I tired of guessing at the correct value and decided to write a small bit of code to display all of the properties so I could find the correct value faster next time.

Here’s what my code looks like:

Imports System.Reflection

Partial Class Tests_requestURL
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        Dim info() As PropertyInfo = Request.Url.GetType().GetProperties()
        For Each a As PropertyInfo In info
            If a.CanRead Then
                Me.ltlValues.Text &= String.Format("{0}: {1}<br><br>", a.Name, a.GetValue(Request.Url, Nothing))
            End If

        Next
    End Sub
End Class

The code uses a bit of reflection and I am sure can be helpful for figuring out the properties of any other object.

For this url:

http://train.mindscapesolutions.com/tests/requesturl.aspx?query1=test&query2=test

The output is:

AbsolutePath: /tests/requesturl.aspx
AbsoluteUri: http://train.mindscapesolutions.com/tests/requesturl.aspx?query1=2&query2=3
Authority: train.mindscapesolutions.com
Host: train.mindscapesolutions.com
HostNameType: Dns
IsDefaultPort: True
IsFile: False
IsLoopback: False
IsUnc: False
LocalPath: /tests/requesturl.aspx
PathAndQuery: /tests/requesturl.aspx?query1=2&query2=3
Port: 80
Query: ?query1=2&query2=3
Fragment:
Scheme: http
OriginalString: http://train.mindscapesolutions.com:80/tests/requesturl.aspx?query1=2&query2=3
DnsSafeHost: train.mindscapesolutions.com
IsAbsoluteUri: True
Segments: System.String[]
UserEscaped: False
UserInfo:

Share this:

  • Twitter
  • Facebook
  • More
  • Email

Like this:

Like Loading...

Java, JavaScript and jQuery (Or What’s With All the J’s?)

13 Friday Apr 2012

Posted by Aaron Brander in On Technology

≈ Leave a comment

Tags

Mindscape, technology, work

Technology is full of confusing terms, and building websites is no different. As a developer or as a person in need of a website, you will no doubt encounter a number of acronyms and words that you either don’t understand, don’t want to understand, or that just plain make you want to cry a little bit out of sheer frustration.

DNS? PHP? .NET? IIS? Apache? Joomla? Drupal? CMS? IE? FF?

The list grows longer and your attention span grows shorter. I’ll not bore you with all of the acronyms now, I’ll just save that for another post. Instead, I want to shed a small ray of sunshine upon a dark corner of confusion.

What’s the difference between Java, JavaScript and jQuery?

Java

Let’s start with what Java is not. Java is not coffee; you won’t find it at Starbucks.

Java is not a populous island nation in the Indian Ocean; at least, not the Java we are talking about.

Java is a programming language developed in 1995 for Sun Microsystems. Its main purpose is to be able to run on all different types of operating systems. In other words, a program written in Java can run on a Microsoft computer and an Apple computer. All you need is to download the Java run-time to your computer and you can run any Java applications.

Java can be used on the Web, but I haven’t seen an example of a site using Java in a long time. If someone is telling you they’ll build your website using Java, they probably mean JavaScript.

JavaScript

JavaScript is not Java, just like tea is not coffee and Bermuda is not the same as Java the nation. Beyond some superficial similarities in syntax (the words and symbols used to write the code), Java and JavaScript are quite different.

JavaScript is built to run on the Web. How it executes and how well it performs is dependent on the type of browser you are using (Check out this website to help you determine: What is a browser?).

JavaScript was decried, denigrated and dismissed by many programmers for years, including myself. The relatively recent rise of “fancy” websites that update quickly without reloading a page (Ajax or asynchronous JavaScript execution) has brought JavaScript into prominence, and has even made an old hater like me at least acknowledge its importance.

If a salesperson is talking to you about using JavaScript to build something on your website, they are probably talking about implementing some sort of “fancy” interface feature to make the site more appealing to your visitors.

jQuery

Finally, we come to jQuery. jQuery has nothing to do with questions. In fact, it answers a lot more questions than it raises. jQuery is a library of functions that uses JavaScript. It is like using the phone instead of sending a telegram. It is like sending a text instead of using the phone. It is like using GPS navigation instead of an old, paper map.

jQuery is what made it palatable and fun to start using JavaScript again. It is the most popular JavaScript library in use today, and if you are building a site you should be using it. If you are having a site built, when the sales person talks about JavaScript, it is almost certain that the developer will be utilizing jQuery to make it happen.

So there you have it. Java, JavaScript, and jQuery, now clear as mud for you!

Share this:

  • Twitter
  • Facebook
  • More
  • Email

Like this:

Like Loading...
← Older posts

Categories

  • On Books
  • On Miscellany
  • On Technology
  • On Travel
  • On Writing

Get Social


My Links

  • Brander Photography
  • Libzig.com
  • Mike July.com
  • Mindscape @ Hanon McKendry
  • Picture Perfect
  • Westward Bound

.NET 1 star 2 stars 3 stars 4 stars 5 stars 90 day challenge African Mythology Alexander the Great Basketball Bernard Cornwell Bob Lee Swagger China Coming Soon Dan Brown Danes David Gemmell diet Dresden Files Fantasy Fencing Fiction Final Four fitness Gladiators golf books golf practice Google Halo Hiking Historical Fiction History HTML James Clavell Japan Jim Butcher Kindle King Alfred Last of the Mohicans Lord of the Rings Magic Michigan State Spartans Microsoft Mindscape Neil Gaiman Non-Fiction Norse Mythology On Books programming Project Management Putting R.A. Salvatore ratings Richard Sharpe Roman Empire Roman History Romans Rome Samurai Saulzar Saulzar Codex Saxons Science Fiction Shattered Sports Books Stalin Stephen King technology Tolkien Travel Washington D.C. Wizards work Work in Progress Writing

Blog at WordPress.com.

Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
To find out more, including how to control cookies, see here: Cookie Policy
  • Follow Following
    • The Saulzar Codex
    • Join 33 other followers
    • Already have a WordPress.com account? Log in now.
    • The Saulzar Codex
    • Customize
    • Follow Following
    • Sign up
    • Log in
    • Report this content
    • View site in Reader
    • Manage subscriptions
    • Collapse this bar
 

Loading Comments...
 

    %d bloggers like this: