Welcome

Welcome to the award-winning website of Bill MacKenty - where I discuss technology and education! I'm the Director of Technology at the American School of Warsaw, where I support the effective use of technology in schools and classrooms.

Games work in education

I am especially interested in the use of computer games in learning and teaching. I have successfully used games in my classroom to help students learn. Please click here to see what I've written about games in education, and feel free to explore Balanced Gaming, my consulting business that helps parents, schools, and gamers understand how computer games fit into a balanced life.

Educational Technology

Technology strengthens, deepens, and broadens our learning. Want a hint how to successfully integrate technology into learning? It's not about the what, it is about the how. Click here to learn more....

Expression Engine

Expression Engine is a best-of-class content publishing system. I've used Expression Engine to provide powerful and flexible solutions for my school. Built on the Code Igniter PHP framework, it is an excellent tool for schools.

Text Based Games

Text based gaming has been around since the earliest days of computing. Using only text, players enter in another world, and explore, socialize, achieve and impose in the game world. There is no sound, no flashy graphics, simply text. Click here to learn more.

About

I first realized I was a geek in the 6th grade. My 6th grade math teacher put me in front of a Texas Instruments 99A and 4 days later I was teaching the class how to program. I absolutely love hacking around in OS X and Linux. I have worked with kids and helped others my entire life. I love teaching, and watching a kid “get it” really lights me up. I am very interested in effective education, educational theory, assessment, and learning.

From the Blog

Western Theater Timeline (June 1944 – November 1945)

June 1944

  • 5–6 June 1944 – Airborne Phase of Overlord:

    British 6th Airborne (Operation Tonga) secures bridges east of Caen; U.S. 82nd/101st Airborne drops (Operations Albany, Boston, Chicago, Detroit) secure causeways behind Utah/Omaha. Coordinated French Resistance actions in Brittany (Operations Dingson and Samwest) disrupt German lines.

  • 6 June 1944 – Operation Overlord (D-Day, Normandy Invasion):

    Allied forces (U.S., U.K., Canada, Free France) land on Utah, Omaha, Gold, Juno, Sword. German defenses under Field Marshal Rommel resist heavily, particularly at Omaha. Over 156,000 troops land on the first day.

  • 7–12 June 1944 – Battle for the Beachhead:

    Allies consolidate, link up beachheads, capture Carentan and Bayeux. German counterattacks by 21st Panzer and 12th SS Panzer Hitlerjugend fail to dislodge the Allies.

  • 13 June – 9 July 1944 – Battle of Caen (Phase 1):

    British and Canadian forces push toward Caen in Operations Perch and Epsom (late June) leading into Charnwood (7–9 July), meeting fierce resistance from Panzer Lehr and SS units. U.S. forces push west toward the Cotentin Peninsula.

  • 18–30 June 1944 – Capture of Cherbourg:

    U.S. VII Corps seizes Cherbourg after intense fighting, opening a vital port.

July 1944

  • 1–20 July 1944 – Operations Windsor, Charnwood, and Goodwood (Caen area):

    British/Canadian offensives culminate in the capture of northern Caen (9 July) after heavy aerial bombardment; Operation Goodwood (18–20 July) expends German armored reserves around Caen.

  • 25–28 July 1944 – Operation Cobra:

    U.S. First Army launches a concentrated offensive south of Saint-Lô after massive carpet-bombing by the U.S. Eighth Air Force; breakthrough achieved and rapidly exploited by American armor.

  • 25–28 July 1944 – Operation Spring (Canada):

    Canadian attacks south of Caen (Verrières Ridge) to fix German forces; high casualties.

  • 30 July – 4 August 1944 – Operation Bluecoat:

    British and Canadian forces attack south from Caumont to support Cobra and pin German units.

August 1944

  • 1 August 1944 – U.S. Third Army Activated (Patton):

    Exploits Cobra breakout, drives into Brittany and east toward the Loire.

  • 7–13 August 1944 – Battle of Mortain (Operation Lüttich):

    German counterattack aims to cut off Patton’s spearheads; U.S. First Army halts the offensive.

  • 14–21 August 1944 – Operation Tractable and the Falaise Pocket:

    Canadian/Polish-led Operation Tractable closes the Falaise Gap; encirclement of German 7th Army and Panzer Group Eberbach. Over 40,000 prisoners; Normandy campaign effectively ends.

  • 15 August 1944 – Operation Dragoon (Southern France):

    Allied invasion of Provence; forces push north up the Rhône valley.

  • 19–25 August 1944 – Liberation of Paris:

    French Resistance rises; U.S. 4th Infantry and French 2nd Armored enter Paris on 25 August.

September 1944

  • 1–11 September 1944 – Allied Advance to the German Frontier:

    Rapid liberation of northern France and Belgium. Brussels liberated (3 Sept). Antwerp captured (4 Sept) by British forces, but its approaches remain in German hands. Supply shortages begin to stall the advance.

  • 7–19 September 1944 – Siege of Brest (Atlantic Ports Campaign):

    U.S. forces reduce the German garrison; other Channel ports (Boulogne and Calais) captured later in September; Dunkirk isolated and besieged.

  • 17–25 September 1944 – Operation Market Garden:

    Airborne landings at Eindhoven, Nijmegen, Arnhem (largest airborne operation to date). U.S. 101st and 82nd Airborne secure southern bridges; British 1st Airborne isolated at Arnhem. Objective—crossing the Rhine—fails.

  • Late September 1944 – Battle of the Scheldt Begins:

    Canadian First Army begins operations to open the Scheldt Estuary and unlock Antwerp’s port.

October 1944

  • 20–28 October 1944 – Operation Pheasant (Liberation of Southern Netherlands):

    British Second Army and Polish units clear ’s-Hertogenbosch–Tilburg area, stabilizing the front north of the Scheldt.

  • 2 October – 8 November 1944 – Battle of the Scheldt (continued):

    Canadian operations capture Walcheren Island; estuary cleared and Antwerp’s port finally opened to Allied shipping.

  • October 1944 – Battle of Aachen (fell 21 October):

    First major German city taken by the Allies (U.S. First Army). Intense urban combat; heavy German losses and prisoners.

November 1944

  • 2–21 November 1944 – Battle of the Hürtgen Forest (phase intensifies):

    U.S. forces fight attrition battles in dense terrain near the German border; heavy losses, limited gains.

  • 8–24 November 1944 – Operation Queen:

    Allied push toward the Rhine between Aachen and the Hürtgen; Germans delay Allies ahead of winter.

  • 18–22 November 1944 – Battle of Geilenkirchen (Operation Clipper):

    British 12th Corps with U.S. forces reduces the Geilenkirchen salient, tied to Operation Queen objectives.

  • 19 November 1944 – Metz Captured (Lorraine Campaign):

    Patton’s Third Army secures Metz after prolonged siege; drives toward the Saar.

December 1944

  • 16 December 1944 – 25 January 1945 – Battle of the Bulge (Ardennes Offensive):

    Last major German counteroffensive achieves initial surprise; Bastogne besieged but held by the U.S. 101st Airborne. Patton’s relief and restored air superiority reverse gains by late January.

  • 31 December 1944 – 25 January 1945 – Operation Nordwind (Alsace):

    German offensive in the Vosges/Alsace sector against U.S. Seventh Army and French First Army; ultimately contained.

January 1945

  • 8–25 January 1945 – Allied Counteroffensive in the Ardennes:

    German salient eliminated; approximately 100,000 German casualties. Hitler’s last offensive capability exhausted.

  • 29 January 1945 – Colmar Pocket Cleared (Alsace):

    U.S. and French forces eliminate the remaining German bridgehead in southern Alsace.

February 1945

  • 8 February – 11 March 1945 – Operations Veritable & Grenade (Rhineland Campaign):

    British/Canadian forces (Veritable) and U.S. Ninth Army (Grenade) clear the west bank of the Rhine in difficult, flooded terrain.

  • Late February 1945 – Preparations for Operation Lumberjack:

    U.S. First and Third Armies posture for a drive to the Rhine (formal execution in March).

March 1945

  • 1–21 March 1945 – Operation Lumberjack:

    U.S. First and Third Armies drive to the Rhine, seizing key cities west of the river and setting conditions for crossings.

  • 7 March 1945 – Capture of the Ludendorff Bridge at Remagen:

    U.S. forces seize an intact Rhine bridge, establishing the first Allied bridgehead east of the Rhine.

  • 15–24 March 1945 – Operation Undertone:

    U.S. Seventh Army and French First Army advance through the Saar–Palatinate, breaking German defenses south of the Moselle.

  • 22–28 March 1945 – Crossing of the Rhine (Multiple Sectors):

    Operation Plunder/Varsity (23–24 Mar): 21st Army Group crosses near Wesel; largest single-day airborne drop of the war. U.S. Third Army crosses at Oppenheim/Mainz; additional bridgeheads established along the river.

  • 29 March – 1 April 1945 – Breakout into Germany:

    Allied forces advance rapidly into central Germany; German Army cohesion collapses.

April 1945

  • 1–21 April 1945 – Ruhr Pocket:

    U.S. First and Ninth Armies encircle ~320,000 German troops; Germany’s primary industrial region lost.

  • 4 April 1945 – Ohrdruf Concentration Camp Liberated:

    First Nazi concentration camp liberated by U.S. forces; atrocities documented.

  • 11 April 1945 – Buchenwald Concentration Camp Liberated:

    Further evidence of systematic atrocities discovered.

  • 12 April 1945 – Death of President Franklin D. Roosevelt.

  • 16–30 April 1945 – Advance into Bavaria and Saxony:

    Allies capture Nuremberg (20 Apr), Bremen (26 Apr), and link up operations toward Hamburg; Munich captured (30 Apr). French First Army reaches the Alps.

  • 25 April 1945 – Elbe River Link-Up:

    U.S. and Soviet troops meet near Torgau, cutting Germany in two.

  • 30 April 1945 – Hitler’s Suicide in Berlin.

May 1945

  • 2 May 1945 – Surrender of Berlin (to Soviets):

    Western Allies halt on agreed demarcation lines.

  • 4–7 May 1945 – Unconditional Surrender of German Forces:

    German forces in northwest Germany, Denmark, and the Netherlands surrender (4 May). General Alfred Jodl signs unconditional surrender at Reims (7 May). Effective 8 May – V-E Day.



Read More >>

Computational History

History as a System, Not a Story

Traditional historical study often centers on narrative: who did what, when, and why. Computational history reframes the past as a complex system—a dynamic network of agents (people, groups, nations), resources (food, technology, territory), and constraints (environment, ideology, communication).

Each element is expressed as data:

  • Population growth as numerical time-series.
  • Political alliances as graph structures.
  • Economic exchanges as weighted edges between nodes.
  • Cultural attitudes as variable states within belief models.

By encoding historical information into logical and mathematical forms, we can run simulations that explore how small changes in input conditions—a drought, an assassination, a religious reform—may lead to dramatically different outcomes.

Boolean Logic: The Skeleton of Historical Systems

Boolean logic supplies the formal structure on which these systems operate. At its core, it represents the simplest decision space: true/false, on/off, war/peace.

Illustrative rules:

  • Alliance == true increases the probability of coordinated military action.
  • ResourceScarcity == true triggers rebellion where economic pressure crosses a threshold.
  • CulturalAlignment == false raises tension between adjacent polities.

With these rules we construct state machines—abstract models that change based on logical conditions. In simulation, thousands of transitions unfold over time, revealing patterns that mirror real processes: economic collapse, ideological contagion, or imperial expansion.

Noetic Logic: Modeling Human Thought and Belief

History is not made by systems alone; it is made by minds. Noetic logic (from Greek noēsis, “understanding”) formalizes mental states to describe how agents perceive truth, assign value, and act based on internal reasoning.

Belief-driven dynamics we can model include:

  • When religious conviction overrides economic self-interest.
  • Why leaders interpret the same data—troop movements, trade reports, omens—differently.
  • How shared myths and cognitive biases propagate and alter collective behavior.

In short, a Boolean model constrains what is possible; a noetic model helps explain why actors choose among those possibilities.

Merging the Logical and the Noetic

The most powerful insight appears when we integrate both layers into a single computational framework: Boolean logic defines external mechanics; noetic logic defines internal cognition operating within them.

  1. Initialize environment: political borders, economic indicators, climate data.
  2. Define agents: rulers, factions, institutions—each with belief matrices and behavioral parameters.
  3. Iterate through time: apply Boolean rules to update the world; apply noetic rules to update beliefs.
  4. Observe emergence: revolutions, migrations, alliances, collapses—mirroring or diverging from known outcomes.
Note: The goal is not deterministic prediction but probabilistic insight—ranges of plausible trajectories given data and modeled psychology.

Predicting Without Pretending

Computational history cannot predict the future as prophecy. History’s complexity and contingency preclude absolute foresight. But it can illuminate trajectories, reveal feedback loops, and identify leverage points where decisions—individual or collective—produce outsized effects.

For education and research, simulations help to:

  • Clarify cause and effect in nonlinear systems.
  • Bridge humanities and computation in authentic inquiry.
  • Explore how much of history is logic—and how much is human imagination.

Toward a New Craft of Historical Inquiry

The aim is not to replace traditional scholarship but to augment it—equipping historians with tools to explore questions that text alone cannot answer. By fusing Boolean precision with noetic subtlety, we can build models that respect both the mechanics and the meaning of human events.

In doing so, we reclaim history not as static record, but as living computation—an ever-evolving simulation of mind, matter, and possibility.

Author’s note: This article outlines my working approach to computational history. If you’re interested in classroom-ready exercises, agent-based demos, or formal specifications for the noetic/Boolean layers, feel free to reach out.



Read More >>

Redis, message queues and the Producer-Consumer Model

I'm in early days of architecting a 3D space system for pennmush. The design documents are here and I'm greatly enjoying simply hacking about.

I've never used redis before, so I'm learning quite a bit about the server, the diagnostic and performance tools and the "gotcha's". The basic idea is pennmush (a server for text-based games) sends a message to redis message queue which is then read by the space engine (written in rust) which then sends a message back to pennmush via redis. The space engine will update position of space objects, manage combat, trading, etc... Pennmush will manage interface and out-of-space story. Really fun stuff



Read More >>

Hacking in space

For me, programming has always been an adventure, a way to explore ideas, systems, and new ways of thinking. And right now, my latest obsession is building a 3D space server for a 4X game.

This isn’t just any project; it’s a real labor of love. It’s one of those endeavors where I find myself just hacking away, thinking about how all the pieces fit together, and iterating on the mechanics of space movement, exploration, and simulation. I’ve been fascinated by space games for a long time—especially those that model and simulate 3D space in meaningful ways. There’s a certain beauty in translating real-world physics and strategy into code, creating a universe that feels alive with possibility.

My love for coding and game development started with text-based multiplayer games. Back in the day, I spent countless hours on PennMUSH servers, fascinated by the intricate worlds that could be created with text alone. These games were more than just entertainment—they were interactive systems that rewarded creativity, strategic thinking, and collaborative storytelling. Playing these games shaped the way I approach programming. They taught me to think about data structures, world-building, and the fine balance between rules and player agency.

Now, with my 4X space server, I get to apply those lessons in a whole new dimension—literally. Designing movement in a true 3D space, handling scale, managing player interactions, and ensuring the world remains dynamic and engaging are all challenges I relish. I love the deep systems thinking that comes with game development: balancing resource management, tactical combat, and exploration while keeping everything efficient and scalable.

But more than anything, this project is about learning. I’ve always believed that game programming is one of the best ways to grow as a developer. It forces you to think across multiple domains—physics, AI, databases, networking, UI design—and integrate them into a cohesive whole. Every time I work on this project, I discover something new, whether it’s a better way to handle spatial indexing or a clever trick for optimizing server-side calculations.

For me, coding has never just been about solving problems; it’s about creating worlds. And this 3D space server is one of my most exciting worlds yet. Whether or not this project ever sees the light of day beyond my own development machine, it’s an experience I cherish. Because at the end of the day, I’m here for the journey—the hacking, the problem-solving, and the sheer joy of making something that feels like magic.



Read More >>

Automation Has Made Programming Less Fun.

The screen blinked back at me, a silent acknowledgment of the journey I was embarking upon. Over the past 41 years, coding has been more than just a profession; it's been a passion fueled by curiosity, creativity, and the thrill of solving complex problems. But recently, I had an experience that made me question the evolving landscape of programming and its impact on the joy it once brought me.

A few weeks ago, I decided to create a simple ASCII-art 4X space game—a project that, in the past, would have been a delightful challenge filled with hours of brainstorming, debugging, and incremental victories. This time, however, I turned to a Large Language Model (LLM) to assist me. In just about two hours, the game was complete. No hurdles, no late-night problem-solving sessions, no trial-and-error. And yet, instead of feeling accomplished, I was... bored.

Coding has always been akin to solving a intricate puzzle. Each bug fixed and each function optimized brings a sense of achievement that's hard to replicate. The process demands patience, logical thinking, and creativity. It's not just about the end product; it's about the journey—the countless trials and errors that lead to the final result.

When an LLM can generate code in a fraction of the time, it strips away the challenges that make coding rewarding. The automation of problem-solving turns an engaging process into a mechanical one. The excitement of unraveling a complex issue diminishes when the solution is handed to you on a silver platter.

As an educator, I see the same patterns emerging among my students who are learning to code. The allure of quick solutions is tempting, but it deprives them of the fundamental experiences that build proficiency and confidence. Struggling with code isn't a setback; it's a crucial part of the learning curve. It's through debugging and iterative problem-solving that students develop a deeper understanding of programming concepts.

When students rely too heavily on AI-generated code, they miss out on the opportunity to think critically and develop their problem-solving skills. The "eureka" moments that come after hours of hard work are invaluable. They not only reinforce learning but also build resilience and a growth mindset.

This isn't to say that LLMs and AI tools have no place in programming—they undoubtedly increase efficiency and can handle repetitive tasks with ease. However, it's essential to strike a balance. For seasoned programmers like myself, perhaps it's about using these tools to handle mundane aspects while reserving the more challenging problems for manual coding. For students, it might mean using AI as a learning aid rather than a crutch.

Coding is changing rapidly with the advent of AI and automation. While these tools offer incredible benefits, they also pose questions about the future of programming as a fulfilling craft. For those of us who find joy in the challenges of coding, it's important to remember why we started in the first place. And for the new generation of coders, embracing the hard work and the hurdles isn't just beneficial—it's essential.

The next time you sit down to code, consider taking the longer path. Embrace the difficulties, relish in the trial-and-error, and remember that sometimes, the struggle is where the real fun lies.



Read More >>

That musical thing

Jaxon's finger hammered lightly and quickly on the drum. His eyes were closed, and he seemed consumed entirely by the music he was playing. A slight smile. The bassist was strumming, the pianist was finding the right note at the right time, and the crowd was with them. Maybe the darkness, perhaps the small space, but at a point during the show, a discernible "togtherness" happened. Jaxon lifted his head up. The cadence of the music flowed, started to become softer and then ended.

Jaxon exhaled softly, the stress his shoulders visibly relaxing, and focused on the crowd. All of them were on their feet applauding and gesturing in appreciation of the music. His band mates all seemed to be coming out from the act of creation and appreciating the appreciation. The lights slowly became brighter.

After some time, Jaxon stood up, waved to the crowd and waled off the stage. He took a glass of water and broke into a laugh "ok, THAT was fine creation, mates!", his fellow band members laughed and nodded in agreement "a fine set" said Silian, matter of factly. A few minutes later some eager members of the audience insisted on continuing their gratitude for an incredible live show.



Read More >>

About

I am the director of technology at the American School of Warsaw. I am committed to strengthening, deepening and broadening student learning through technology. I honestly believe HOW we teach is far more important than WHAT we use to teach. I am a technology skeptic and a technology evangelist. I am certified school building leader and school district leader in New York State. I love technology, and hacking around - especially in Linux and OS X. I am a text-based gaming aficionado, and I enjoy smoking a pipe now and again. Please feel free to poke around and learn more about me and my views of educational technology.

I do almost everything there is to do in technology and education. My goal is create the conditions for excellence in education through technology. And I'd like to share what I know with the educators in Poland.

Testimonials

Bill is a true pioneer in educational technology who knows his stuff and who has a knack for explaining that stuff without denegrating or belittling his audience. He taxes the audience's attention, not their education or intellect.

Chuc M....

Conference Notes and Press

Baruch College - 2010

Keynote: The Right Circumstances for Games in Education

Schenectady Museum & Suits-Bueche Planetarium, New York - August 19 2008
Presentation here (1.8mb PDF file).

Top 10 best ed tech blogs June 2008

M*U*S*H: Online lecture: the advantage of ignorance

Boston Globe: blogging in the classroom

Article here | pdf here (42.5 KB PDF file)

School Library Journal: Games in the classroom

Article here | pdf here (58.8 KB PDF file)

Tech Forum Chicago

eSchool News blog award & roundtable

Games Developer Conference

Hunter College High School: Integrating Technology

2006 Martha's Vineyard Technology Professional Development Day

Introduction to Blogging (4.4 MB PDF file)

2005 MassCUE Annual Technology Conference

This is the blogging presentation in PDF format (about 2.5 MB)
Games in Education (warning, 14 MB file !!!)

Tech Forum New York

Public forum on Video Games, Kids, and Education

Games in Education Conference at E3Expo 2005