Welcome, Guest | Sign In

Submit - Cancel

Snowy Drive Down the Peshekee Grade

Katie and I woke up at a small Ishpeming motel to find the ground covered in snow. This was more than a little surprising, as it was the second week of May, but the Upper Peninsula likes to misbehave in the late spring. We packed up the car with Logan and headed west on US-41 towards the Peshekee Grade to find the remains of the Iron Range & Huron Bay Railroad.

Straight portion of the old grade

Straight portion of the old grade

During the turn of the century, when the Champion-area iron was first discovered, an ambitious plan was made to build a 36 mile-long railroad to Huron Bay, MI. The track would go through the Huron Mountains and involved deep rock cuts, woodland trestles, a huge ore dock, and a dangerously steep northern grade. Because of the grade and the poor quality of work it was torn up, never to be used. $2.2 million was spent with only vague remnants of the grandiose plan.

We turned north on the Huron Bay-Peshekee Grade Road, which follows the railroad's route fairly close (at least the southern portion of it). The first section of the road was paved...

read more »

Eastern Cliff of Clark Creek Valley

Cliffs have quickly become one of my more recent hiking interests. Like mountains, they offer some excellent views of the area, and the sharp relief can make for some interesting routes and rock outcroppings. Good cliffs are hard to find in the Upper Peninsula, thanks to the millennia of erosion gnawing down on the terrain. An unexpected ally can help keep the steep rock face from getting buried by its own sedimentation - flowing water.

Cliffs of Eastern Clark Creek Valley

Cliffs of Eastern Clark Creek Valley

A river or a creek flowing at the base of a cliff can wash away any sort of debris that is eroded off of a cliff. I've already seen a number of examples: downstream of the McClure Basin (Dead River), southeastern edge of Mulligan Plains (Mulligan Creek), and the deep gorge near Cliff Lake (Cliff River). Mulligan Plains is the most interesting; with steep slopes stretching along the entire eastern wall, it is only the southern half, with Mulligan Creek flowing at the base, that the cliff's steep rock face is exposed. Today I was hoping to find another exposed cliff face on the...

read more »

Beginner Web Developer Mistakes

With my introduction into web development coming from a static html/css direction, I've had to overcome several bad coding habits over the years. Most of these started with poor assumptions about the way websites worked. It took a crash course in php programming and a few hard bumps before realizing how wrong my first websites really were. Here are a few of those assumptions and how I built on them to increase my programming skills.

Each URL relates to a unique file on a web server

If you're only used to working with static html files than this assumption is largely true. Every different URL that a user visits on a web page is in reference to a different file on the server. Without any type of scripting, the file is merely a chunck of html and can only be changed by a webmaster physically manipulating the document. My first dynamic website used php include commands to pull a fixed header and footer for all of my pages, allowing me to make global site changes from a single file. When I finally started to learn more about php variables and url manipulation, I kicked myself for the extra time and work I spent creating larger sites. There are a number of techniques that you can use to have a single script output multiple pages on a site, a concept I discussed with...

read more »

Revisiting the Database Class

Several months ago I wrote a blog post describing how to create a database class that would wrap the native php mysqli connection. You can read that post here. Since that post was written I've learned a lot about proper php classes and realized that I made several mistakes in that blog post that I'd like to revisit.

Singleton

The database class that I wrote constructs a new read/write connection whenever it is instantiated. However, there is nothing unique about this connection - it remains the same no matter how many different instances you have of this class. There should be only one instance of this class in this case. If you have several different connections (say, a different user for each of your databases or schemas) then you'd have to look at passing connection information into the class through a factory class, but this case requires a singleton.

A singleton class is fairly simple to make. By making the __construct method private and maintaining a single instance saved within the class, you guarantee that there will be only one instance of the class. It can be very helpful to restrict some classes in a singleton manner. For this case we'll avoid creating multiple identical mysqli connections...

read more »

Cliffs of Mulligan Plains

The -15ºF air hit me like a brick wall as I stepped outside of my car at Mulligan Plains. Unaccustomed to the cold Upper Peninsula mornings I quickly covered my nose and mouth with a warm scarf before heading down the plowed two-track. The sun's early rays had only just begun showing over the eastern cliffs and I didn't have time to wait for the valley to warm up; there was a long, hard hike before me.

Last summer marked the first time I visited Mulligan Plains without stopping by Mulligan Falls. I had always known that there were other attractions in the narrow valley but had never made a direct effort to see them until then. The main goal of today's trip was to revisit one of these sights: Rocking Chair Lakes. My route wouldn't be an easy one but did a promise some awesome views of the plains. I planned to start near the bridge over lower Mulligan Creek, follow the top of eastern cliffs to Rocking Chair Lakes before looping back to the car, resulting in a 6 mile hike with plenty of vertical distance change.

The first climb of the day was a familiar rock cliff directly southeast of the bridge over Mulligan Creek. Having seen this hill on every one of my visits to Mulligan, I had often thought about climbing it and the potential views it would offer of the...

read more »

What's With the Big Pause?

When I first decided to create an online blog I wanted to avoid a common pitfall of many other blogs: lack updates. While there were a few empty months in 2009, it feels like a did a good job with regular posts every week or so... Until the New Year rolled around. This is the first blog post in over six months.

Starting in mid-November a few things changed that really impacted my regular blogging. The first, and most obvious one, was winter. While I do enjoy winter adventuring, driving to the Upper Peninsula through the snow to come up with fresh content for the hiking side of my blog was something I decided to avoid. That, coupled with decrease daylight and other seasonal blues, dampened my motivation to write new hiking blogs.

Another problem that I ran into was a decrease in time. Not only did I start working later hours in November at my full-time job, but I started a large contract project that ate up any free time I normally reserved for my personal site development. My site was half rewritten at this time - I was starting to implement a model-view-controller framework (that was later scrapped for my current, very awesome framework) - and I was trying to concentrate on too many independent web project at the same time.

So, to sum that all up, I simply...

read more »

Katie and I at Mulligan

It's no secret - I really like Mulligan Plains. This remote section of Marquette County is off the beaten path and contains many hiking adventures, including waterfalls, cliffs, and lakes. So when Katie and I headed up north on a cool fall day before hunting season I made it a point to take her to Mulligan and show her one of my favorite Upper Peninsula destinations.

Even though we slept in at the Ishpeming hotel quite a bit, we managed to make it to the creek before noon. The easiest place to visit at Mulligan are the falls north of Silver Lake Basin, so we took the county roads up along the western edge of the plains and parked at the foot bridge over Mulligan Creek. Faith and I had visited this area a year ago and had taken a convoluted route to the falls that involved crossing the creek over a beaver dam and bushwhacking through some terribly thick pine trees. A four-wheeler had given us this route before, but I didn't want to follow it today.

Katie and I crossed the narrow, shaky bridge over the creek and headed up the narrow two-track. Instead of cutting across the creek, like I did last time, we cut off the trail (which bends northwards) and continued along the side of the creek. The trees weren't thick on this side of the creek, but we did have to go up...

read more »

Intro to SQL Part D

For the last post in this short series on SQL I wanted to explain some more in-depth usage. A technique that I wish I would have started using in my early websites is a centralized script to handle all of my database calls. PHP does have some great functions built in to connect, read, and write using SQL statements (check out mysqli), but it's easy to start copying the same eight to ten lines of code every time you want a piece of data from your tables. A better approach is to handle the queries with a centralized class.

Before anything can be read or written to a table with a SQL statement, you need to create a connection. Your website will be signing as a user with specific privileges. A good technique is to make two users, one that can read and one that can read and write. By using the former user as much as possible and taking extra care with the latter one, you will minimize the possibility of hackers uploading malicious information or dropping whole tables.

Once a connection is made you can start having fun with the database class, customizing the methods as much as necessary to integrate it easily with your site. I prefer returning my information as arrays of objects or single objects, so I have two separate methods in my class.

read more »

Intro to SQL Part C

While the last two posts focused heavily on theory and fundamentals of SQL it's time to start on the actual usage. There's a ton of good tutorials out there that skip right to the code, but as a young developer, I wasn't convinced that SQL was a worthwhile tool until I was forced to use it. I wanted to spend a good amount of time discussing the basics before jumping into some examples. If you're looking for more advanced and specific uses, I'd highly recommend checking out w3schools SQL tutorials.

As I introduced in my last post, an SQL table is a collection of unique rows. There are two primary things that you do with the data in a table - read and write. With the proper syntax, a hacker can write to your database, injecting into or deleting your data, so it's important to restrict the front end privileges and validate. That's a subject for a later post, though. Let's look at how you can read a table.

Reading from a table is also known as a 'select' statement, since you're selecting entire rows of information. You can restrict how many rows you select, pulling single rows or entire tables, and you can also restrict what fields you select out of the rows. A select statement has several important...

read more »

Intro to SQL Part B

In my last post, I introduced some of the basic ideas of data storage and how I came to realize that SQL would be a great solution to my content handling problems. Now I'd like to walk through some of the more advanced concepts and start going through some basic uses. There's plenty of great tutorials out there if you'd like to take SQL to the next level (I'd recommend checking out w3schools), but I hope these posts make a great foundation for a starting developer.

An Excel workbook is a good way to picture a SQL database. A database is a collection of tables (one table per tab), with each table showing a different portion of the total content. Each table should be unique in most cases to avoid duplicating your data. The individual tables in the database have some constraints. Rows must have the same number of columns and identical column types. It's also a good idea to keep the columns simple. If you're saving numbers, then the column should be set to save numbers.

The last paragraph may be hard to understand at first, so here's another example. This blog is being saved in a SQL database. One table is saving all of the posts, with each row in the table relating...

read more »