Jul 01 2005

What People Don’t Understand About Software

Published by under Features,Programming

To celebrate Independence Day weekend, with all of its cold beer, grilled meat, fireworks, and patriotic remembrances, I offer the following list of fundamental ways in which most people misunderstand software:
Continue Reading »

Jun 28 2006

Interviewing Programmers

Published by under Features,Programming

Back in the early 1990′s I blew a job interview at Papyrus Studios in Cambridge, Massachussetts. If you’re a gamer, and into racing games, then you surely know the automotive simulation powerhouse that Papyrus became. Their Nascar Racing series was the definitive racing game for nearly ten years, noted for its realistic graphics, and impressive simulation of the physics of 3000 pound cars hurtling around an oval track. If you ever got bored with actually competing, you could always turn the car around and drive the wrong way at 160 miles per hour, and then enjoy the resulting chaos when you smacked into the lead cars of the pack on the back straight. Smoke, flames, cars spinning off the track, chunks of debris flying every which way. It was a blast. Unfortunately, while I loved playing the game, I didn’t get to work at Papyrus, which closed its doors for good in May of 2004. I’m sure those things are not related.

Continue Reading »

Jan 14 2007

Programming Life in the WPF – Introduction

Published by under Features,Programming

I set out a few weeks ago to build a simple example application that takes advantage of the new user interface technologies in Microsoft’s Windows Vista. These technologies are packaged as .NET 3.0, which is an extension of the 2.0 version of the framework. Extension is the right term, I think, despite the fact that the extending bits are pretty significant. Basically .NET 3.0 retains all of 2.0 unaltered, and adds three major new layers of types. Really these are three new frameworks within the larger .NET space. They are: the Windows Presentation Foundation (WPF), formerly called Avalon; the Windows Communication Foundation (WCF), once named Indigo; and the Windows Workflow Foundation (WWF), which probably also had a codename, but I don’t know what it was. The WPF targets Windows user-interface development, the space that Windows Forms has inhabited for a few years now. The WCF is focused on enabling advanced networking applications, while the WWF is a standardized means of representing and executing logical workflows. There are some very cool possibilities in all of it – I’ve recently read about peer-to-peer information sharing apps on WCF, and I know of one or two people fooling with using workflows to drive game agent behavior – lots worth writing about there. But for now I will stick with WPF, because it is enough of a revolution for one article. If you want a place to start digging in you can’t go wrong with Microsoft’s .NET 3.0 website.

Continue Reading »

Jan 14 2007

Programming Life in the WPF – Part 1

Published by under Features,Programming

The Game of Life

The Game of Life was invented by Cambridge University mathematician John Conway, probably some time in the late 1960’s. It first gained widespread attention after being mentioned in a 1970 Scientific American column on mathematical games. If you’re interested in the history of it, there is a very good dissertation on Wikipedia, and I have also included some information in AvalonLife’s help file. What we need to know here is fairly straightforward: Life is a cellular automaton implemented on an idealized 2D grid. On each iteration of the automaton cells in the grid are turned on or off according to rules that determine their state based on that of their immediate neighbors. The rules themselves are inordinately simple. They are:

For cells that are ‘on’:
- If the cell has 1 or 0 live neighbors it is turned off
- If the cell has 2 or 3 live neighbors it remains on
- If the cell has 4 or more live neighbors it is turned off

For cells that are ‘off’:
- If the cell has 3 live neighbors it is turned on

Continue Reading »

Jan 14 2007

Programming Life in the WPF – Part 2

Published by under Features,Programming

AvalonLife’s Architecture

Most of this article is about the new GUI technologies in Windows Presentation Foundation, but I think it is worth devoting a few free web column-inches to the nature of the model and controller. I’ve always enjoyed simulation programming, and although this is a very simple simulation it does illustrate some interesting techniques. Some of the decisions made in the design of the model and controller are driven by the needs of the interface, however they have been implemented in a way that preserves layer autonomy and avoids creating couplings, so I hope to be forgiven this minor breech of architect-iquette. Since the heart of any simulation is its model of the world, let’s start with that.

Continue Reading »

Jan 14 2007

Programming Life in the WPF – Part 3

Published by under Features,Programming

XAML and the User Interface

What good is a simulation without an interface? Not much. Of course, the word interface can be interpreted in various ways. I have worked with simulation models in the past that chugged along behind the scenes for hours or days, a blinking cursor in a command window the only sign that anything was happening, and then ended by spitting out a bunch of data. That’s an interface, but for AvalonLife I wanted something much more interactive. The pleasure in running Life models is in watching them evolve, so the program needed a display that could render the model to screen after each iteration. There were also a number of controls implied by the design and the needs of the simulation: timing interval settings, grid size, grid type, etc. It was actually a rather simple set of requirements for an interface, and as the visual end of a project is nearly always the most satisfying for me, I didn’t have any reluctance about diving in and starting to design what AvalonLife would look like. I had this little problem, though: as a server-side developer, even as one with a long history of Windows GUI development going back to HWNDs, I had always found it hard to keep pace with the changes in Windows interface technology. I had obtained a working competency at Windows Forms development, but now as I approached the AvalonLife project I had to face the fact that Microsoft had gone and changed it all again.

Continue Reading »

Jan 14 2007

Programming Life in the WPF – Part 4

Published by under Features,Programming

Resources and Styles

In the previous section I illustrated the basic XAML declaration of the AvalonLife main window, and talked about the resulting structure of the application’s interface both in terms of the layout and object hierarchy. The code that I presented, however, would not create anything of interest if it were compilable, because most of the detail had been removed for clarity’s sake. There’s no way I can cover all the details regarding how to instantiate, position, style, and interact with GUI elements in this article. But I do want to take a quick tour of a couple of very important subjects, with emphasis on how I applied the illustrated techniques in AvalonLife. These two topics are resources, and styles, and how they effect controls. To get going let’s take a look at a section of XAML that was redacted from the example posted in the last section. The code is takern from the Window.Resources section of the ALMainWin.xaml file. I have presented two resource declarations, and following them the declarations of the two controls that use the resources. Bear in mind that all the declarations of the containing panels and other controls have been removed. Here it is:

Continue Reading »

Jan 14 2007

Programming Life in the WPF – Part 5

Published by under Features,Programming

Drawing the Grid

When I first started mucking around with the implementation of Conway’s Game of Life in WPF my thought was that I would create a drawing surface and use System.Drawing objects to paint in my grid. I went as far as looking into which WPF object would be right to do the drawing on, settling on Canvas, because it offered absolute x,y positioning. I started to examine the Canvas object more closely, and compare it to the drawing tools that you find in System.Drawing. It quickly became clear that I was on the wrong track. None of the tools in System.Drawing line up with the way things are defined in the WPF. Take the most basic facility of 2D drawing in Windows.Forms: the Graphics class. This class implements IDeviceContext, and is what you paint on. There are two ways to get one: in the arguments of a Paint event (WM_PAINT message); and by calling the CreateGraphics() method on a Form. Well, there isn’t a CreateGraphics() defined on a System.Windows.Controls.Canvas object. Nor is there one on a System.Windows.Window object. There also isn’t a Paint event on a WPF window or control (although you can embed a WPF control into a System.Windows.Forms.ElementHost, and that has a Paint event). Something wasn’t right, and that something was the fact that I wasn’t yet thinking in WPF. I was thinking in terms of the old way of creating 2D images in a window. I started Googling, and that’s when I ran into Scott Allen’s article on OdeToCode. When I saw what Scott did to paint the grid in his version of the Game of Life, I was a little startled, and more than a little intrigued. As you’ll see in a minute it is just about the last way you would think of painting an interface if you were writing a game, and I’m sure it’s the last way Scott would think of doing it if he were writing one.

Continue Reading »

Jan 14 2007

Programming Life in the WPF – Part 6

Published by under Features,Programming

Conclusion

At the end of the last section I tied off a discussion of the graphics rendering in AvalonLife with a look at its performance running a large model on a large grid. There is so much happening under the hood that I had sworn it would crawl when it came time to actually draw anything. And yet, the performance when I got it running was more than acceptible. This is interesting, but why is it notable or important? Nobody is actually going to program games in the WPF, are they? A few weeks ago I would have said “no.” Now… well, I’m not so sure. The framework is efficient and very well designed, and there is a whole layer of 2D and 3D animation support that hasn’t even been touched on here. I can see those facilities being used for some relatively low-velocity games, and if it turns out that there are good ways to interop WPF and Direct3D, such that you can use WPF and C# to script and drive the interface, and then overlay it on a rendered 3D scene, then things could get much more exciting. It’s the “overlay” part that is the problem now, as I understand it, but perhaps Microsoft will come up with a solution. Even if the graphics model works for games, there are others reasons to be wary about designing a game with thousands of on-screen objects the way this one is designed. For one thing, it eats gobs of memory. AvalonLife takes up something like 80 megs running a 100 x 100 model.

Continue Reading »

May 01 2008

Millbrook and The Old Mountain Road

Published by under Features

Kittatinny Mountain begins at the place that is truly a water gap, thrusting its granite shoulder to the sky just East of the spot where the slim ribbon of interstate 80 skips across the Delaware River and enters the state of Pennsylvania. For many people this is perhaps all of the mountain that they see, as they speed across and over to the outlet stores of Stroudsburg, or the great expanse of the nation beyond. But the hill stretches more than forty miles Northeastward, well into southern New York’s Orange County, and is but one stony promontory of many in the long range that runs from New England deep into the south. Atop Kittatinny’s knife-edge summit runs the famed Appalachian trail, while at its feet the river lies like a sleepy snake, seeming in places to lap right up against the long ridge, marking New Jersey’s northwestern border in white-flecked silver.

Continue Reading »

May 09 2008

Iron Road to Chester

Published by under Features,Places

The Chester Branch of the CRNJ, Right of Way

I entered the woods near Chester, New Jersey by stepping over a thin cable slung between two wooden posts and heading up a narrow gravel-covered track that disappeared in leafy dimness. The better part of forty-five minutes later I was barely a mile in, but then I had the camera with me, and had seen many things worth a short delay: a spring from which orange, iron-laden water bubbled; remnants of a 19th century sewage system; ancient stone walls lining a suspiciously regular cut in the earth; century old black cinders born in the firebox of a steam engine. The path I followed was unmistakable as an abandoned railroad right of way: unlike any forest track a railroad cuts long smooth slices through the terrain: no tight curves; no steep grades. It’s why they make such nice walking trails once the trains no longer need them. The starkly artificial features of these constructions remain visible against the fractal chaos of nature long after the rails themselves have been pulled up and melted down.

Continue Reading »

May 14 2008

The Hillside Farms of Pahaquarry

Published by under Features,Places

My feet wandered back into the area of old Millbrook this weekend, and I expect they will tread that way again soon, and hopefully for years to come. This region, like the Pine Barrens in the Southern part of the state, completely fascinates me, and for the same reason. For such a small state New Jersey must be unique in having two such areas of restored wilderness. I say restored because in both the Pine Barrens, which make up much of the Southeastern corner, and the Highlands, which take up the Northwestern, civilization once thrived. Agriculture, mining, lumbering, manufacturing, transportation; every major enterprise of eighteenth and nineteenth century America was engaged in on these Northern slopes, and those Southern plains. Today there are, for the most part, just the woods, the hills, the sandy trails and woodland tracks that were once arteries, and the little dots on old maps that mark the towns.

Continue Reading »

May 30 2008

Broken Pipe(dreams)

Published by under Features,Places

Terra cotta pipe shard

The sandy loams of the Pine Barrens of Southern New Jersey are a porous filter for the water that trickles through purifying layers to feed one of the largest aquifers on the East Coast. Hours after the rain has fallen the ground is for the most part dry again, and undisturbed. Into this same ground has been poured, over the centuries, the hopes and dreams of generations of entrepreneurs. The woodcutters, colliers, iron and paper mongers, would-be glass barons, and land speculators have all thrown their best shots at these seemingly endless miles of forest, meadow, river, spung, and swamp, with as little effect. To decamp in the middle of these woods today, in Lacey Township, or perhaps old Shamong, is to find yourself set back 200 years to the turn of the eighteenth century. Before and behind you are the miles of rutted sand roads. Around you the wind moans in the cedars and oaks. There seems to be no sign of the place this once was, and yet, something gleams dully from under a thick carpet of spring greenery.

Continue Reading »

Oct 26 2008

The Lehigh and Hudson River Railway

Published by under Features

LHRR_Allamuchy_2.jpg

There’s something a little melancholy, for me, in walking along an abandoned railroad. I feel it whenever I explore the remains of our national past, but old rights of way bring it out most strongly. Partly this is because I was always a little bit of a railfan, and partly it is the significance of these narrow strips of landscape, empty and overgrown where once great steam engines chugged along hauling the commerce of a young country. A century and a half ago the great men of the day gathered in smoke-filled rooms and clinked their glasses in celebration of the last rail layed and the last spike driven, and yet now it is all just memory.

Continue Reading »

Nov 20 2008

A Hard Look at Warhammer Online

Published by under Features,Gaming

warhammer_online.jpg

This post is about an online fantasy role playing game called Warhammer Online: Age of Reckoning. It is developed and operated by Mythic, now a division of Electronic Arts. I’ve been playing it for about a month now, on the Iron Rock server, with a bunch of former Dark Age gaming buddies. You would think I am too old to be wasting time on something like that, and, in the end, the point of this essay may be that you’re right. At least, it may be that online role playing games have moved on, and I haven’t. In any case, this isn’t going to be a very positive post, and I’m sorry about that. Mythic got monthly subscription dollars from me for Dark Age of Camelot for years. I wanted Marc Jacobs to succeed with Warhammer Online, and it may well be that he will, but it doesn’t look good from here.

Continue Reading »

Jan 30 2009

Playing with Blocks: Episode 1

Published by under Features,Programming

I’ve decided to write a couple of posts about the design and execution of a Silverlight application I’m working on. If you’re not familiar with Silverlight, here it is in one sentence: Silverlight is a downloadable subset of the WPF containing just enough of the framework to execute specialized WPF applications in a browser window. It’s a competitor to Flash, without doubt, but since I never really went in for doing games and demos in Flash I don’t really think about the positioning. Silverlight lets you animate, and play sounds, and do all that cool stuff that I think of when I think of Flash. But Silverlight also has everything you need to do lightweight, browser-hosted, net-delivered applications. I don’t know if people do many apps in Flash, but that’s the part of Silverlight that gets me excited. If you think about all the datacenter cycles that get spent pushing ASP roundtrips to update the front-end, Silverlight starts to look pretty damn appealing.

Continue Reading »

Jan 30 2009

Playing with Blocks: Episode 2

Published by under Features,Programming

When you start to design an application for producing drawings in Silverlight, there are some things you don’t have to worry too much about. You don’t have to come up with definitions for shapes, or figure out a fast way to render them. You don’t have to define a color space, and gradients, and geometries for clipping and filling. You don’t even have to define what a surface is and how shapes interact with it. Windows Presentation Foundation takes care of all of that stuff, and quite nicely too.

What you do have to think about is how to organize and present that capability to the user, and how to connect the user’s intentions to the underlying systems. You need to think about how to do all that in a robust and extensible manner, in an environment that is quite a bit more constrained than the context in which a normal WPF app runs. In other words, you need everything but all the stuff I mentioned above, and that still leaves quite a lot to chew on.

Continue Reading »

Feb 03 2009

WPF Container Controls and Layout

Published by under Features,Programming

I see a lot of questions on the Silverlight.Net forums about control layout. Typically they follow the general pattern “I placed a {insert control} into a {insert container}, but {insert problem} is happening. Can you help?” I thought it would be useful to cover the main types of control containers available in WPF and Silverlight, and catalog the differences in their default behavior with respect to layout.

Continue Reading »

Feb 11 2009

Playing with Blocks: Episode 3

Published by under Features,Programming

In my last post on the Silverlight drawing project I said I was going to stay away from the design and talk about code next. Quite a bit has changed, though, since then. For one thing the DrawStylus class has fallen victim to shrinking relevance and has been removed. The operations I initially envisioned for it kept leaping to other classes until it was nothing more than a forlorn wrapper around the mouse events. Oh well. Sometimes you have to be ruthless. Some additional classes have appeared, notably the StyleBox and StyleControl, which have about the same relationship as ToolBox and Tool, but are focused on editing styles. StyleBox derived from a StackPanel, and I’ve found that works very well, so I will probably be going back and changing ToolBox to derive from one as well.

Continue Reading »

Feb 13 2009

Playing With Blocks: Episode 4

Published by under Features,Programming

Last time out I introduced the DragHandle class, a small control that can be placed on a Canvas and moved around with the mouse. DragHandle is meant to provide one of the building blocks of shape editing in an application I have been working on. I ended that post with the DragHandle built and working, but still requiring quite a bit of plumbing to do what it was designed for: affect properties of shapes. In this post I’m going to show you the class that provides the rest of the mechanism for dragging objects: the DragHandleConnector. After that I am probably going to take a break and actually write some more code. As with the previous post I have linked the source file(s) at the bottom. I am not going to distributed binaries on these because they are part of larger libraries that I am not ready to publish, but you can easily build the control and supporting classes from the source files.

Continue Reading »

May 26 2009

A Walk on the Pequest Fill

Published by under Features

Greendell-Station.JPG County route 517 leaves Hackettstown, NJ as High Street, heading north. Not far past the huge Mars candy plant on the outskirts of town the road lifts itself up and over the shoulder of Allamuchy Mt., and then it is just 517, the road to Andover and Sparta. As you drive northward past the little crossroads town of Allamuchy,sheltering in the shadow of two highways and what is really a large hill, a broad valley opens up on your left. It is typical northern New Jersey farmland, rolling and rich, stitched into quilted patterns by old stone walls, bits of forest, and wandering streams. This is the valley of the Pequest River,  which has its start in Stickles Pond high on the slopes of Wawayanda, where they call it a creek. Down here in Warren County it is a river, whatever those Sussexers might say.

Continue Reading »

May 31 2010

The Paulinskill Viaduct

Published by under Features

Almost exactly a year ago I posted a piece here about hiking out onto the Pequest Fill, perhaps the greatest mound of dirt and rock ever pushed up in one place by the hand of man. The so-called “Lackawanna Cut-off” that rode the top of that long dike provided the Delaware, Lackawanna, and Western Railroad with a straight, 70 MPH shot across the heavily wooded, steeply ridged terrain of northwestern New Jersey. That meant steam locomotives pulling long trains filled with the rich resources of the west would no longer have to follow the circuitous “old route” with its crumbling, single-tracked tunnel at Oxford. If that goal required burying an entire river valley, well this was the age of progress. On with it!

Pequest-Fill-Slope.JPG

Not surprisingly the valley of the Pequest was not the only natural obstacle faced by the engineers of the DL&W. Just 12.5 miles west of where the fill rejoined the mountainside at Greendel they had to leap another river valley, this time that of the Paulinskill. The word “kill” when referencing a river or stream derives from the Middle Dutch word “kille”, and that hints at the early role this watercourse played in providing a route to the south for Dutch and German immigrants from the settlements in the Hudson River valley to the northeast. They came seeking land to farm, and metals to mine, and they found both, here, and in far greater quantities as their descendants moved westward into Pennsylvania.

The valley of the Paulinskill was the last major obstacle before the DL&W’s new route would leap the Delaware, and fortunately it was not so daunting a challenge as the Pequest had been. At barely a quarter mile wide it could be crossed by a bridge, and so it was. The resulting span was at one time the largest reinforced concrete structure in the world. Variously known as the Paulinskill Viaduct, or the Hainesburg Viaduct, the bridge still sits there, casting its broad shadow across a river frequented by fly casters and kayakers. Unused since the road was abandoned by Conrail in 1984, it has now become perhaps the worlds largest planter. A few weeks ago I decided to head out and have a walk around, and if I could manage it, out onto, the Paulinskill Viaduct.

Paulinskill Viaduct at Station Road

The structure itself is easily spotted in Google Earth, especially if you know the route of the cut-off. Getting to it is a matter of following a winding trail of scenic rural highways so characteristic of this part of New Jersey. Eventually you drop down onto Station Road and follow the edge of the valley around the shoulder of a hill , the river winding its way on your left, huge trees blocking out nearly all view of the sky, and suddenly there it is: a massive, crumbling concrete edifice reminiscent of some post-apocalyptic Roman aqueduct. Just under the span, between two huge pillars, frequent use has carved out a small dirt parking area. I pulled the truck in, parked next to the trucks of fishermen and the Subarus of kayakers, climbed out, and looked up.

My first thought was: holy crap that is a lot of concrete over my head. My second thought was along the lines of “someday that’s coming down.” It then also occurred to me that I had watched maybe one too many episodes of “Life After People” on the Mystory Channel. Yes, it is going to come down, but it’s not coming down anytime soon barring some geological event. Structures like this, and dams, and perhaps even superhighways, become a permanent part of the landscape. Miraculously transport yourself 20,000 years into the future and visit this spot and you’ll nod and say “Yep, that’s the Paulinskill Viaduct,” even if it is no more than a straight line of rubble at the lower end of a small lake.

Paulinskill Viaduct support arch

The bridge itself feels right in place with all the abandoned remnants of past industrial prowess that can be found tucked here and there in this urban-accessible stretch of very beautiful, very rural countryside. Various partiers have covered its flanks in graffiti. Wierd NJ has published lurid tales of possible demonic ceremonies deep within the hollow pillars and damp service walkways, and this has led to round after round of board-it-up/tear-it-down as the adventurous and credulous try to penetrate its interior reaches. The area itself seems scoured, the brush around the bridge ground down by legions of feet, beer cans and bits of household refuse scattered in the little recesses where the concrete forms corners, presumably protected from the passing gaze of patrolling police.

After getting a few pictures I turned my eyes upward. I wanted to see what the view was like from the top of this thing for the same reason that I had hiked out onto the Fill: because that was the most visceral possible impression of it. Stand at the base of a sky-scraping office tower and look up, and you’ll be impressed. Stand at the rim of its uppermost terrace and look down, and I guarantee you will be more impressed. I wanted to stand on the Paulinskill Viaduct and look down. But for the moment there didn’t seem to be any easy way up.

Paulinskill Viaduct span over Station Road

I started to work my way up the side of the valley under the bridge. The ground had been scraped clear, and the gnarled roots of huge trees made for convenient footholds, but the way soon grew very steep and I found myself hauling my weight up by the arms. I used to be able to do that without feeling as if my lungs would explode. About halfway to the top a trail cut off to the right and followed a steep dry wash up to the level of roadbed. As I stepped out onto it I first looked east, and saw essentially the same view as on the Greendel end of the Fill: a cinder-black, narrow, very torn-up trail that is all that remains of the roadbed itself.

To the west the bridge, grass-covered and with mature trees growing along its entire length, presented a spectacle at once awe-inspiring and melancholy. A gate had been placed across the approaches but had long since been driven into the dirt. Out in the middle of the span a group of ATV riders had stopped to appreciate the view. The Lackawanna Cut-off is one long race track for them, from the Andover side of the Fill all the way to the Delaware. That may end someday if New Jersey Transit follows through on plans to re-open the Cut-off for a route to Scranton. If they do, they will have a lot of work to do on the Viaduct.

View west along the Viaduct

Everywhere the bridge shows the effects of age, disuse, and vandalism. Concrete is crumbling from erosion and trauma. The thick iron piping that formed the safety railing has in many places been pried or wrenched out, leaving an unprotected drop of 80-100 feet to rocks or the river. This is not a place you want to bring small children who aren’t leashed to you. The roadbed itself is just a dirt trail, indistinguishable from any other trail through New Jersey woodland, save for the concrete on either side, and the occasional open manhole that gives access to the drainage and service areas below. The previously mentioned trees lend an air of unreality to the scene. What are they doing here, 100 feet above the river on this concrete thing? I think the Mystory Channel people must have come here at least once.

The view from the center of the span is worth the climb. I hesitate to say that for fear that someone will read this, go out there, and get hurt or arrested. So before I say more let me add: the bridge is very dangerous, and you are not supposed to be out on it. If you go out on it, then your life and criminal record are in your hands, not mine. If you do, then when you reach the middle you’ll be rewarded by impressive views of the Paulinskill valley for maybe ten miles in either direction. To the west you’ll see Kittatinny Mountain and the Water Gap. Yeah, it’s worth it. But stay away from the edge, and watch for manholes. They tend to pop up at your feet, and I can’t say with perfect confidence how far you’ll fall if you step into any of them.

Kittatinny Mountain from the Viaduct

Back down in the valley, and quite a bit more breathless than when I arrived, I walked out under the bridge to the river, and looked up again, this time with a more critical eye. Yes, NJT will have their work cut out for them with the viaduct. The bridge is dying. The interior drainage system has failed in many places, corroded away or clogged into uselessness. Undirected flows of water are the enemy of all man-made structures, and concrete bridges are no exception. Water drips from seams between poured sections, and finds its way along rusty reinforcing rod, dissolving it until the rod is gone and only the water remains, forcing an ever-wider path for itself. Chunks of concrete have been pried loose by the seasonal forces of New Jersey’s climate.

So yes, unless NJT actually does rehab the bridge, it’s going to come down. If they don’t, then eventually someone is going to have to knock it down, or keep people out of the valley, and off the roadbed. That seems impossible, and maybe building a railroad to Scranton is easier. In the meantime it stands here with its furry crown of misplaced forest, a monument to a time when nothing, not a 3.5 mile-wide valley, and certainly not a comparatively puny little river crossing, was going to stand in the way of opening the west to American progress. The railroads of Northern New Jersey almost universally went broke. There were other routes west, easier routes, to the south and north, and none of these constructions in the long run did anybody any lasting good. But here they are, like so many other Ozymandian inventions, and as long as they are here people like me are going to be drawn to them, hearing some faint echo of the hopes and dreams of an earlier time.

You can view the full gallery of images from my visit to the Paulinskill Viaduct here.