Cleaning up Repetitious PHPUnit / Symfony test assertions

Coming from Rails, I know that DRY (don’t repeat yourself) is a virtue. In my Symfony PHP project, I was faced with copy-pasting a hundred lines in order to test a bunch of methods in PHPUnit. So, I wrote a quick wrapper to take in the arguments as minimally as possible instead of cluttering up the code with tons of duplicate syntax:

How the Internet Works

How The Internet Really Works: A Hands-On Crash Course from Ethernet to HTTP using Wireshark

Screenshot from 2014-04-04 22:24:37Whether you’re a hacker, IT pro, coder, or just curious, it helps to know exactly how the Internet works: you may understand the idea of connections, but do you understand all the protocols and steps that it takes to create and troubleshoot a connection?

Ever wondered what exactly happens between typing “” into the address bar and seeing the webpage appear on your screen? Do you know what would happen if two computers had slightly different subnet masks, or how ARP spoofing works, or what exactly the Kaminsky DNS attack was, or what happens when you plug a switch back into itself?

This was presented at CactusCon 2014, and the slides / wireshark captures are available here: (the slides are sparse; turn on notes to see what I said for each slide.) If you don’t have PowerPoint, you can download LibreOffice (free) or see the SlideShare.

Also note that this is a semester worth of Networking 101 presented in about an hour; this is enough to get you started Googling for topics of interest and hopefully a gut feeling for all the different things happening during a typical connection, but some bits are omitted– please do more research in order to get a complete understanding. Open Wireshark yourself and send out your own traffic; read books or tutorials, consider certification classes like Network+, Security+, or Cisco.

Finally, I’m happy to answer questions in the comments or on twitter @willbradley .

Full Notes

Just in case you can’t see the notes attached to the slides, here’s my full notes below: Continue reading

On the practical side of starting a hackerspace

Many people have been asking me about starting hackerspaces/makerspaces lately. I’m going to use this post to aggregate their questions and my answers.

What do you think about doing a Kickstarter for seed money?

It’s possible, but “the HeatSync Way” is to find your people first. To do this kind of endeavor it seems like you need 5-15 “good people” who are prepared to stick around for at least a year of creating this business — as a hobby, with perhaps 2-5 hours per week commitment. Continue reading

On Do-ocracy and Structureless Groups

This is a cached copy of a blog post from because I think this is a valuable thing to keep and share. I’m not the author.

There are no structureless groups

In the past, one of the orgs I founded was an attempt structurless-ness. In some ways it worked out fine, but in several ways, internally especially, it was always tripping over itself. I burnt out and left for related reasons, but something about the situation has always rubbed me the wrong way.

Why didn’t structureless work? Being a bit of an anarchist, I was pretty sure when I started it, that the do-ocracy system would be better than something with more command and control. It’ only a few years later when reading this article on structurelessness that I realized how non-sense the conceit was to begin with.

TL;DR: Every human group has a structure, it’s inevitable. Specialization, interests, skills, or just I-get-along-with-her-better builds a structure. You can’t have a structureless group.

Continue reading

Best Linux Laptop? Dell XPS13 Developer Edition (“Sputnik”) Review

1-month update! See the bottom of the post.

6-month update! See the bottom again.

1-year update! Seriously, see the bottom.

2-year update at the bottom!

Finally, a 3-year update!


As a programmer I needed a laptop that was powerful, lightweight, had a keyboard I liked, and ran Linux well (no driver issues especially with WiFi.)

The Dell caught my eye because it’s almost exactly on par, price and specs wise, with a Macbook Air. (The big difference being battery life: Apple is boasting 12 hour stats that nobody else can touch. But I don’t mind carrying around a charger.)

I considered the competitors: Lenovo X1 Carbon, ASUS Zenbook UX301, System76 Galago UltraPro, Chromebook, but either the keyboard layout or Linux compatibility seemed iffy; the Dell is the only one that comes with Linux out of the box aside from System76. It’s obvious that Dell has put significant work into making their laptop compatible with Ubuntu, so I figured I’d support that effort and try it out. The others may work just fine with Linux, or you may be alright with their keyboards/trackpads; up to you! I just can’t stand nub-mice, trackpads that require effort to click, mushy keyboards, layouts that omit function keys, or layouts that place navigation keys in weird places.


Firstly, Dell’s website leaves a lot to be desired. The only way to find the XPS13 Developer Edition is to filter by OS and choose Linux; otherwise you’ll only be able to see the XPS13 with Windows. Way to make Linux feel like a second-class citizen!

When narrowing down my final ultrabook options a Dell chat representative popped up, so I asked some questions about the 21 day return policy. The rep’s answers were good enough to convince me to try the Dell out, but he quoted me a system with an Atheros AR9462 a/b/g/n Bluetooth 4.0 network card instead of the Intel® Dual Band Wireless-AC 7260 + Bluetooth 4.0 quoted on the website. He assured me that this was an upgrade, but in hindsight I think there’s a reason the Atheros was cheaper. Many reports online of Dell Support exchanging defective Atheros cards for Intel cards.

Finally, the rep asked me for my credit card info via chat; which, according to my tests, was not encrypted via HTTPS. My warning bells rang all over the place; that can’t be acceptable business/security practice. Finally, my billing address is different than my shipping address, but the quote I received via email didn’t reflect this; I asked about it and the rep assured me my correct shipping address was entered correctly. The order also said it’d take two solid months to ship, but the rep assured me he’d expedite the order and I’d get it much sooner. He finally called me to complete the order (cell phones are more encrypted than HTTP, I guess) but the whole affair felt very shoddy, and my gut was telling me something would go wrong.

A few weeks later (hey, fast!) I got a Fedex tracking number and sure enough it had the destination of my billing address, not my shipping address. Great, so much for promises. Good thing I can forward stuff between addresses without too much pain. None of the rep’s other promised communications happened, just the chat, invoice, and tracking number. Oh well. All’s well that ends well I guess, except I can’t shake the feeling that I’d have been better off trusting my gut and ordering from the website instead of via a representative, and I can imagine some horror scenarios where everything didn’t turn out fine. Definitely go with the website instead.

Update: looks like I saved a few hundred dollars because the Dell rep ordered me an XPS without a touchscreen; so while all the options on the website are expensive models with touchscreens, mine isn’t. Can’t complain, I’m not big on the idea of touchscreen laptops anyway (especially in Linux.)

Update update: looks like I actually got sold the prior-year’s model for a few hundred bucks off. Shitty bait-and-switch, but then again I’m happy with the end result? QUIT PULLING MY HEARTSTRINGS, DELL.



I was worried at first because the shipping box was pretty beat up from its two trips, but the actual product box was unscratched and very sleek. Apple-inspired plastic wrapping around the laptop itself, fabric scratch-resistant sheets, recycled paperboard, etc. Continue reading

How did HeatSync Labs Start?

I just got a message on the HeatSync Labs Facebook account asking about how we started; figured I’d post it here since it’s a common (and necessary) question:


What was the goal when Heatsync was still in its building phase?

To create a place that removes obstacles to people making things; to support a community of creators in Arizona and improve the area; to provide resources to the public, since many of us had just graduated from college and didn’t have those resources anymore.

Can you describe how the Workspace came to be? in terms of development, funding, spreading the word, and so on

First, the founders went around to other similar places to see what worked and what didn’t work about those locations; chatting with other founders and learning from them. Then they went around to local meetups to find others who might be interested in using such a space, or helping somehow. Finally we started meeting up in freely accessible areas before we grew to the point where we outstayed our welcome and needed our own dedicated space. Continue reading