Hypocrisy and the AHCA

I just submitted a thinned-down version of the below as a letter to the editor of the Centre Daily Times. I leave it here as an open letter, and as possible inspiration for other PA-5 constituents who may wish to contact Mr. Thompson.

UPDATE (March 17, 2017): The letter was published as “Thompson rushing bill into law”.

Congressman Glenn Thompson doesn’t know how many of his constituents he is hurting in his support of the American Health Care Act (AHCA), and he doesn’t seem to want to find out. Wasting no time, Mr. Thompson tells us that the law, which was introduced on Monday and sped through the Ways and Means Committee by 4:30 a.m. on Thursday, should be sent to the Senate by March 23 and on the President’s desk by Easter. While his constituents are racing to understand the impacts the new law will have on their lives, Mr. Thompson can’t be bothered to wait for a score from the Congressional Budget Office, and seems to have no interest in independent analysis.

The Congressional Budget Office, which provides nonpartisan analysis for the U.S. Congress on budgetary and economic issues, has not yet provided a score for the AHCA, so neither Mr. Thompson nor anybody else truly knows what the plan will cost the American people or how many will lose their health insurance if it passes. Perhaps because he and the rest of the GOP know that the CBO score will be shocking to many voters, Mr. Thompson has moved to preemptively invalidate the work of the CBO, telling Talking Points Memo, “I don’t have a lot of confidence in the CBO process . . . Trust me, this bill will be subject to all kinds of alternative analysis.” Yet, as recently as 2012, Mr. Thompson held quite different views, as when he said on the House floor, “The non-partisan Congressional Budget Office served a devastating blow” to Obamacare. If the CBO was reliable then, why has it so suddenly lost credibility?

In the same March 2012 floor speech, Mr. Thompson, citing figures from the CBO, focused on access to healthcare as the metric by which to judge the Affordable Care Act, declaring it a failure based on the number of people projected to lose their employer-provided insurance coverage. Now, however, Mr. Thompson has changed his story, saying recently that, “A nation’s health policy should not be about access to health insurance.” If the number of insured was the critical measure of the Affordable Care Act, why is it no longer his concern in evaluating the GOP’s replacement?

It’s hard not to compare Mr. Thompson’s “alternative analysis” to the world of “alternative facts” which the Trump Administration is trying to create. In his rush to avoid a CBO score, and blindly further a GOP agenda, it’s estimated that 50,000 of Mr. Thompson’s constituents will lose their health insurance.

Missing Member Town Hall

Inspired by the Indivisible Guide and the work of many dedicated local constituents over a period of many months, I co-sponsored a “with or without him” public town hall event for Rep. Glenn “GT” Thompson of Pennsylvania’s 5th Congressional District. I thought that it was important that the Congressman hold a town hall during the recess/district days, especially in light of the possible upcoming votes on Obamacare.

While the Congressman did not attend (instead, he falsely accused us of being “paid protesters” and the “political opposition” who were seeking to create a “spectacle”), the event was an unbelievable success. We had almost 400 people, of all ages (include my one year-old, Molly) come out to campus on a rainy Saturday afternoon to share their questions, stories, and concerns with each other, and since we recorded the town hall with Facebook Live, Congressman Thompson will have an opportunity to respond, should he wish to do so. Perhaps more importantly, I hope that this town hall demonstrated to Mr. Thompson the passion that many of his constituents have to be able to speak with him and to hear from him, in a public setting, on the record. We will be working in the coming months to continue to send this message to Mr. Thompson, if needed. I want to especially thank Valerie Burnett, Stephanie B, Jared DeLoof, Krista Holobar, Kelli Hoover, Neeraj Kumar, Nikita Page and the IST Student Government, Sean Penfield, and Zack Rider for all of their help before, during, and after the event. None of this would have been possible without them.

For those in attendance on Saturday, we collected contact information and information about which issues constituents were most interested in getting involved. If you were not able to attend but would still like to be involved, we’d love to work with you! Please complete this Google Form, and we’ll be in touch.

We also got great media attention for the town hall, which will hopefully help draw further attention to the issue. Here are the stories that I saw; if you have any to add, please let me know.

Event Coverage

Preview Coverage


Using Web Annotation as an Educational Tool in the Classroom

Over the past year or so, along with IST M.S. student Anthony Pinter, I’ve been exploring how Web annotation tools such as genius.com or Lacuna Stories can be used in the classroom. I’ve also been trying to create my own ideal format of a Web-based textbook for Internet Law, which would have excellent navigation, readability on any device (including when printed), footnotes, and integrated annotation. A very early version of our work is available at https://internetlaw.ist.psu.edu/.

I’m most interested in using the annotation tools to help students in creating case briefs, according to my guidelines for How to Brief a Case. Anthony and I conducted a small usability study on the Web page in spring 2016, with a group of almost 150 students in IST 432. Anthony was able to present this work at I Annotate 2016 in Berlin, in a presentation titled “Using Web Annotation as an Educational Tool in the Classroom” (PDF). I think Anthony did a great job with the presentation; you can watch the video of his talk here.

Unsolicited Advice

This academic year was the second one in which I had the pleasure of serving as an honors advisor for IST and SRA students in the Schreyer Honors College. Honors advisees are assigned to me in their junior year, and so right now those first students are submitting their honors theses getting ready for commencement. I’m really proud of what they’ve accomplished—even though I, unlike their thesis supervisors, can take absolutely zero credit for their success—and so I just wanted to highlight their excellent work here:

Integration: Making Technology Work for You and Your Students

On Saturday, March 19, I’ll be speaking at the Penn State Teaching and Learning with Technology Symposium. Along with Bart Pursel, I’ll be presenting in the Integration: Making Technology Work for You and Your Students session. This will be my first time presenting at the Symposium, and my fourth year as an attendee; it’s always a great time.

I believe that a video of the session will be posted eventually, but in the meantime, here are the slides.

Hail, Caesar!

This serves as a follow-up to my award-winning (untrue) blog post on How to Create Your Own Weather Forecast Program Using Python. This time around, we’re going to learn how to program own our Caesar cipher (encrypting and decrypting) using Python, as well as how to hack that same cipher. I suppose the ambitious student could combine these two tutorials in order to send encrypted weather forecasts to his friend. Here’s what you’ll be making:

Caesar cipher

To be very clear, most of the content in this tutorial is merely a modified version of Hacking Secret Ciphers with Python. In particular, I’ve tweaked and combined components of chapters 6, 7, and 12 in a way that I hope students will find interesting. If you find this material interesting, I encourage you to read the entire book, which is available in its entirety for free online.

Getting Started with Python

If you’re a Penn State IST student, you can use the classroom computers, which come pre-loaded with Python and IDLE. If you’re not on campus, you can access them through your browser (this is very cool).

If you’re not a Penn State IST student, or if you want to install Python on your own computer, I encourage you to read Chapter 2 (“Installing Python”) of Hacking Secret Ciphers with Python.

Preparing for Detecting English

I often have to evaluate written work created by college students, so I have signficant experience in detecting when something is written in English, and when it is not (ha!). Our Python script will face the same issue when we brute-force hack the encrypted string; it will use the Caesar deciphering code with every possible key, then evaluate the results against a dictionary of English words. As a heuristic, we’ll say that if 20% of the words in the deciphered message are found in the dictionary file, and 85% of the characters are letters or spaces, then we’ve possibly identified the correct key.

We could re-create this code ourselves, but once again Al Sweigart’s Hacking Secret Ciphers with Python has us covered; see Chapter 12 (“Detecting English Programmatically”). I encourage you to read the entire chapter, but in the interest of creating a tutorial that can hopefully be completed in about an hour, you should:

  • Download the dictionary file and save it to your computer’s desktop. This file contains a whole bunch of English words. You’re probably already familiar with many of them.
  • Download detectEnglish.py and save it to your computer’s desktop. This is a Python module that simply returns true or false, according to the heuristic described above, as to whether the message contains English.

Shifting Keys

In the spirit of putting the bottom line up front, here’s the completed script:

You can paste that into IDLE, save as caesarCipher.py, then hit F5 on your keyboard to run the program.

As I said, this is mostly a combination of chapters 6 (for encryption and decryption), 7 (for brute force hacking), and 12 (for detecting English) of the hacking Python book. For line-by-line commentary on how the code works, please see those chapters. My version of the script merely combines the several functions together, and adds some error-checking.

What’s Next?

I don’t know, Christmas I guess? But if you mean in terms of learning more Python and/or cryptography, I recommend:

Finding Myself

There are many wonderful things about the IST Building, but navigability isn’t one of them. Students understandably get lost trying to find my office. The College does publish floor plans, but they are, perplexingly, hidden in a faculty/staff-only intranet. With the start of the semester around the corner, I thought it would be helpful to publish these resources:

  1. IST Building first floor plan
  2. Second floor plan
  3. Third floor plan


Many years ago, my father discovered the world’s most perfect timepiece, and he later passed that knowledge on to me, his firstborn (and arguably best) son. That watch is the Casio Men’s F105W-1A Sport Watch, and it is amazing. It boasts the following features:

  • is $11.49
  • per above, you can lose it or break it and you don’t have to care; just buy another one
  • the battery lasts for approximately 35 years
  • glows!
  • you don’t have to worry about people trying to steal it
  • does not send you notifications when you receive an email
  • is really basic and beautifully designed


casio watch

You should buy one.

How to Create Your Own Weather Forecast Program Using Python

In this tutorial we’ll explore how to access the Wunderground API (application programming interface) using Python. What we create will be very simple but it will give you a good idea of what you can do with Python and with APIs.

Wunderground (and most APIs, such as those provided by Twitter, Facebook, and Reddit) require you to create a free API key. The API key is a code passed by programs calling the API to identify the calling program and its developer. Keys are used to track and control how the API is being used, and to prevent malicious use or abuse of the API.

To create your key, create a free account here. Click the link in the confirmation email that you’ll receive, and then sign into your account. Click “Explore My Options,” and then “Purchase Key” at the bottom of the next screen (don’t worry, you won’t be spending any money). Complete the questions on the next page (put your real name and contact email; set the project name to something like “API Test” and the website to ist.psu.edu or whatever you’d like). Select “Website”, “No”, and “No” for the three radio buttons. Enter your country and a brief description (“Learning about the Wunderground API”), and then check both boxes and click “Purchase Key.” On the next page, you’ll see your key (it will be 16 hexadecimal characters, such as “4f73eacea9c60244”). Copy and paste this into somewhere handy, because you’ll need it soon.

Wunderground’s API provides answers to a variety of questions that we can ask it. Let’s say that we were interested in learning the current weather conditions in State College. In our Web browser, we can simply construct a special URL, containing our API key and the city and state for University Park, and we’ll get a plain-text set of results back. Here’s how to build the URL (note that you must replace [your API key] with, you guessed it, your API key):

http://api.wunderground.com/api/[your API key]/conditions/q/16802.json

As you can see from the URL, here we’re looking at “conditions” data, which refers to the current weather. Looking at the results, you can probably see fields like zip, latitude, longitude elevation, weather, temp_f, wind_string, and feelslike_f that look interesting. What we’d like to do in this tutorial is: 1) create a Python script that returns only the information we care about; and 2) accesses the forecast data, rather the current condition data. So, let’s do that.

You may need to install Python and IDLE on your computer; you can do that here. If you’re an IST student, you can log in to https://svg.up.ist.psu.edu. Open the Start menu and type “Python”, and then launch “IDLE (Python GUI)”.

In IDLE, select File -> New File (or New Window). In that window, type the following (again, you need to replace [your API key]):

Then select Run -> Run Module. If everything worked, you should be in a loop where the script asks for your ZIP code and then spits out the current weather conditions. So far, so good. We want to access forecast data, though, and not just current condition data.

Create a new script and type and run the following (again, you need to replace [your API key]):

You can explore many more features of the Wunderground API here. If you want to learn more about Python, I think the best place to start is here.


Over the past few years I have become dangerously, hopelessly addicted to listening to podcasts. I listen to them whenever I have a few free minutes: on my (brief) commute, walking the dog, cleaning dishes, taking a shower, and even trying to fall asleep. Lately, the success of the This American Life spinoff show, Serial, has drawn more attention to the medium, and so I wanted to record some of my favorite podcasty things.


Here are my favorite podcasts, in descending order:

  1. This American Life

    First-person stories and short fiction pieces that are touching, funny, and surprising. Hosted by Ira Glass.

  2. Accidental Tech Podcast

    Three nerds discussing tech, Apple, programming, and loosely related matters.

  3. Radiolab from WNYC

    On Radiolab, science meets culture and information sounds like music. Each episode of Radiolab is an investigation – a patchwork of people, sounds, stories and experiences centered around One Big Idea.

  4. The Talk Show With John Gruber

    The director’s commentary track for Daring Fireball.

  5. Exponent

    In this program we seek to explore the massive effect technology is having not just only technology companies, but also on society as a whole.

  6. NPR Programs: Fresh Air Podcast

    Fresh Air from WHYY [Ed. note: PHILLY!], the Peabody Award-winning weekday magazine of contemporary arts and issues, is one of public radio’s most popular programs. Hosted by Terry Gross, the show features intimate conversations with today’s biggest luminaries.

  7. DecodeDC

    DecodeDC has a broad mandate: to help Americans understand how crucial political issues affect everyday life.

  8. New Yorker: The Political Scene

    A weekly discussion about politics, hosted by The New Yorker’s executive editor, Dorothy Wickenden.

  9. StartUp Podcast

    My difficult journey from man to businessman. It’s a classic start-up story, but one that’s recorded in real time.

  10. Kumail Nanjiani’s The X-Files Files

    Kumail Nanjiani (Silicon Valley, The Indoor Kids) and a guest explore their favorite cases of The X-Files. The truth is out there!

  11. WTF with Marc Maron Podcast

    Comedian Marc Maron is tackling the most complex philosophical question of our day – WTF? He’ll get to the bottom of it with help from comedian friends, celebrity guests and the voices in his own head.

  12. New Yorker: Out Loud

    A weekly conversation about what’s new in The New Yorker.

  13. The Gist

    A daily afternoon podcast about news, culture, and whatever else you’ll be discussing with friends and family tonight. With Mike Pesca.

  14. 99% Invisible

    Design is everywhere in our lives, perhaps most importantly in the places where we’ve just stopped noticing. 99% Invisible (99 Percent Invisible) is a weekly exploration of the process and power of design and architecture.

  15. Comedy Bang Bang: The Podcast

    Join host Scott Aukerman (“Comedy Bang! Bang!” on IFC, “Mr. Show”) for a weekly podcast that blends conversation and character work from today’s funniest comedians.

  16. Hypercritical (retired, but still awesome and still worth listening to)

    A weekly talk show ruminating on exactly what is wrong in the world of Apple and related technologies and businesses. Nothing is so perfect that it can’t be complained about.”


  • Overcast: this is the best podcast player for iOS.
  • GOgroove FlexSMART X2: this is the best Bluetooth radio adapter. My car is old and doesn’t have an AUX input. There is a newer GOgroove FlexSMART X3, but I haven’t tried it, and it’s more expensive anyway. This one works wonderfully.
  • SoundBot SB510: this is the best Bluetooth shower speaker. The battery lasts forever, and you can control playback using the buttons on the speaker. It’s awesome.