CodeMash 2017 Thu

How to Win Friends and Influence People With Data Visualization by Amanda Cinnamon.
This talk was pretty good because it covered the essentials about making good presentations. Focus on the action you want the audience to take. Don’t overwhelm with data. The default Excel charts and tables have too many useless lines. Try using tables for their layouts, not emphasizing or using their lines. Pie charts use a lot of space but make area comparisons hard (nonlinear).

Having said that, this presentation used a lot of xkcd comics, which is cheating. Also, the presenter seemed to be unaware of the wealth of existing books about making good presentations, in particular, How to Write and Publish a Scientific Paper by Robert A. Day. I emailed it to her, and she said she’d look into it. That’s a good outcome.

A math-free introduction to Neural Networks by Randall Koutnik.
UI/UX Netflix employee. Enthusiast, not expert. No math, high level talk. Mostly pictures and poorly hand-drawn diagrams. Recommendations: Use Python tensor flow learning, not JS. Try those ANN tutorials again using Tensor Flow. This wasn’t a good talk because I didn’t learn much. At least the presenter was entertaining with the “Calculords” and “Warror JS” projects he worked on, but I wasn’t convinced that he understood ANN very well.

Why Clock Speeds Won’t Be Getting Much Faster, or: EEs Are Amazing by Dan Wiebe. This was one of my favorite talks this year, despite it not being news for years. I really liked learning about the main factors currently limiting clock speeds in silicon: propagation delays, capacitative distortion, heat dissipation, speed of light, diode drop, and feature size (manufacturing contaminants). This presenter wasn’t an EE, and he didn’t seem to know much about the D latch (Flip flop) circuit he showed, but at least he got the facts right, and he gave a solid presentation.

A Synchronicity – Asynchronous Programming in Android by John Pendexter. This talk was pretty good because the presenter emphasized the two main rules of Android threading and gave specific examples of what can go wrong if you don’t. 1. Do not block the UI thread. 2. Do not access the UI outside the UI thread. (These are the same rules in every UI I’ve ever written for, i.e., Win32 and Android, but their exact details vary widely.) He covered a lot of libraries in a short time, but I was very satisfied with this presentation because I learned some new tricks for Loaders.

Digital Payments in a Mobile World by Parag Joshi. I enjoyed learning about the different payment methods (Square readers, Stripe, Android Pay, Apple Wallet). The variations in fees are somewhat surprising, but I guess everyone needs to make a profit somehow. It was valuable to learn that there is no “debug” mode for payment APIs. All calls are real! Refund fees are about 30%. Also: charities are treated very differently by some APIs.

Square readers for credit cards are used to build your own POS system. You can do NFC tap, chip reader, or mag stripe read. Square already has an app that businesses can use (no programming required). Even for 3rd party POS, Square App must be used. Fee for manually entering CC number is higher (due to fraud risk).

Python 3: It’s Time by Charles Yost. I’m a casual Python user, mostly for Scikit-learn, but I haven’t been happy to see the fragmentation of Python 2 vs 3. This talk convinced me that it’s OK to just ignore Python 2 at this point. Python 3.0.0 (2008) was a complete rewrite with sluggish performance and few packages. The point of the rewrite was to fix Unicode strings and byte encoding. 3.2.0 was the first good one. Integer division is now float by default, but floor is available. map and filter return iterators. range now behaves like xrange, and xrange is gone. pyenv – easily switch between versions of python.

Stranger Streams: How to RxAndroid by Michael Yotive. RxAndroid – subscribe to Android UI events as Observables. creates a pool of background threads, but they aren’t used unless you observe on them. Warning: Observables are immutable, so calling functions on them will create new Observables. So always use method chaining! Warning: Back Pressure – when consumers can’t consume events fast enough. Rx will throw “missing back pressure handler” exception; app dies.

CodeMash 2017 Plans

It’s time for CodeMash again. I’m looking forward to learning new things and getting outside my comfort zone, with respect to programming languages and new frameworks. Last year I tried to get familiar with Node.js and microservices. This year, I’m trying to go to more of the functional programming and machine learning talks. I’m somewhat sad that Stephen Cleary doesn’t have a presentation this year, and neither do I. I guess the reviewers want a wider variety of presenters, as the acceptance rate was under 20% and there are a lot of new presenters.

Anyway, we’ll see how it goes. Time to mash some code!


TWP Presentation: Real-time Messaging to Webapps from a Production Database

I am pleased to present a new talk, “Real-time Messaging to Webapps from a Production Database”. Click here to launch the non-interactive presentation. If you want to host by a local server to show the interactive version of the slides, follow the instructions here. Here is a link to the PDF version which should work even after all the javascript code has become too old to run in any browser.


WebSockets are a fast and efficient way to push data from servers to browsers on both desktop computers and mobile devices. Well-known examples include stock tickers, chat rooms (e.g. Slack), social media updates, and online games. Learn how WebSockets are used at the Jeep Wrangler plant for messaging and notifications for critical production activities.

This talk will demonstrate Java servlets with CometD, front-end jQuery code, and webapps currently being used to support production of 250,000+ Jeep Wranglers per year. By attending this talk, you will gain a better understanding of the constraints of an automotive assembly line and real-time messaging.

Bio – David Johnson is a software developer at the Toledo South Assembly Plant, which produces the Jeep Wrangler. David splits his time between writing webapps, and automation. He uses Java, C#, C++, and Javascript. Ask him about barcodes!

Happy Pi Day 2016! (Galperin’s method)

This year for Pi Day, I have a demo of π’s appearance in bouncing balls, also known as Galperin‘s method due to a paper published in 2003 (Playing Pool with π (the Number π from a Billiard Point of View”, Regular and Chaotic Dynamics, V. 8, No 4, 2003). Here is a youtube video demonstrating the phenomenon:

Numberphile also produced a video about it, and the NY Times Blog also gave a different derivation.

Here’s a link discussing the math.

Basically, conservation of momentum and conservation of energy produce a system of equations that reduce down to stating that the the cosine of the number of collisions will change from positive to negative at an integer equal to [10^N*π], so the number of collisions will produce digits of π!

FoxCon2016 – abstract and references

Abstract: Building Webapps to Help You Build a Jeep

Historically, automotive plant operators received part numbers and VINs in printed formats to run production line (including sub-assembly lines, e.g., sequencing and kitting). These “broadcasts” or build sheets were temporarily attached to cars and quickly discarded upon vehicle completion. In contrast to the traditional printouts, this talk will introduce mobile webapps as an effective way to replace paper printouts and provide vital production information quickly and efficiently. Videos of an automotive plant assembly line will illustrate how operators receive and use information from both the original paper and new webapp formats.

References and External Links (videos, etc.):

Megafactories Ford F150
23:50 final assembly – JPH through 25:49

Four Principles Lean Management – Get Lean in 90 Seconds

Megafactories Dodge Challenger
Broadcast sheets

Kanban Pull Simple Demo
Shows kitting concept

Sonic Production at Lake Orion
Shows kitting carts on the assembly line

Digital Picking System By nbtprofessional

Chrysler Group LLC Belvidere Assembly Plant
at 3:39, sequenced parts in carts

FoxCon2016 – Schedule

Saturday January 30

Time        Speaker        Topic

08:00-09:00 Bob Ruple      Opening Comments

1 09:00-10:15 Bob Pierce    Automating the manufacturing process powered by VFP – A Case Study

10:15-10:30                Break

2 10:30-11:45 Kevin Cully    Xojo Development with focus on 64bit apps and Raspberry Pi

11:45-12:45 pm             Lunch at Park Inn Hotel

3 12:45-02:00 Mike Levy     On my way through the Actor Model, I met Microsoft Orleans

02:00-02:15                Break

4 02:15-03:30 Ondrej Balas   Custom Middlewate in ASP.NET 5

03:30-03:45               Break

5 03:45-05:00 Dave Bernard   The Driverless Car Revolution

Sunday January 31

Time         Speaker       Topic

09:00-09:15  Bob Ruple     Opening Comments

6 09:15-10:30  David Johnson Building Webapps to Help You Build a Jeep

10:30-10:45                Break

7 10:45-Noon   Phil Sherwood The Business of Software

  Noon-1:15 pm               Lunch at Park Inn Hotel

8 01:15-02:30  Brian   Koryzinski          The Secrets of LINQ: the modern day Houdini/Introduction to  DocumentDB

02:30-03:00                Closing Comments

3:00 pm                    Conference Dismisses


CodeMash 2016 Recap – Day 4

ASP.NET 5: How to Get Your Cheese Back

This talk didn’t do much for me except convince me that Microsoft continues to struggle for relevancy by reinventing the wheel. Rewriting ASP.NET from scratch only serves to frustrate everyone involved with it. Not worth my time.

A Developer’s Journey from Object Oriented to Functional Programming

This talk was basically an intro to F#, which I’ve played with before. I wish the author had spent more time describing the good parts of functional programming because he spent a lot of time just talking about object oriented design. I guess there’s no substitute for reading a good textbook functional programming, but I don’t think any minds were changed in the audience.

Having said that, it is definitely possible to go overboard with pure functions or LISP-style macros that later make the code unreadable and unmaintainable. It’s hard to find the sweet spot of a functional language that doesn’t require extra deployment dependencies, and it is still possible to debug it without going insane (haskell is too pure to debug without going insane), and it has enough popularity with other programmers and businesses to not destroy anyone’s career and/or code base.

Or you could just keep writing in a common language (like C# but with more lambdas and linq) and wait for this fad to pass, much like every attempt to popularize functional programming in the past.

Cure What Ails You With This Rx: An Intro To Reactive Extensions

I love the idea of Reactive Extensions. It’s async plus events as an enumerable, which should be a winning combination. If there’s one subject I should really spend more time doing and less time just thinking about, it is this one. I don’t like how some of the transformation functions have opaque internal state (distinct when changed), and it’s all really just for loops under the covers (i.e., iterators), and some of the operands cause every result to be loaded into memory simultaneously (sorting, order by), and some of it looks like a bad SQL optimizer, but the final result looks so clean and simple that I’m left convinced that I should do it anyway.

This talk was presented well, and I wish the author the best of luck with his crazy beehives and temperature measuring circuits, whatever they were.

Side note: maybe Stephen Cleary will finally update Nito Sockets to use Rx, and then I’ll be set for life. 🙂

Software Development Lessons Learned from Industrial Failures in the 1980s

This was the worst talk because it was entirely plagiarized from an NPR story about NUMMI. It didn’t even have programming. I think that NUMMI and the Toyota Production System are very important subjects in the automotive industry, but the author of this talk spent most of her time giving out prizes and stealing photos from websites and books without attribution. It was at this time that the downsides of CodeMash became apparent to me: there are no published proceedings, so you can’t cite work in the conference or hold anyone accountable for the content of their talks. The turnover in technology is so fast that trying to find the signal from the noise in the abstracts is going to be almost impossible anyway.

Oh well, I got plenty of value out of the other talks at CodeMash.

Great Galloping Cuckoos: Algorithms Faster than log(n)

I love to learn new algorithms, and this talk covered a few of them:

This talk made me realize that the majority of programmers in the room had not gotten a CS degree in college, and they did not know the basics of analyzing algorithms in operations performed or memory usage. It worries me to think about how much code must be written without coming close to the harder topics, theoretical or practical. (Heck, I’ve seen lots of buggy implicit FSMs and bad network socket code, so I shouldn’t be surprised.)

The author was trying to do something weird with his Raspberry Pi cluster and full text searches of billions of chemical formulas, which is exactly the kind of madness that CodeMash should encourage.

Cross-Platform Desktop Apps with Electron

Somehow I ended the conference back on node.js, but this time for desktop apps, not for servers. It does sound much easier to go cross platform with javascript and Chrome than with Xamarin. Too bad the GUI looks uniformly bland, much like Java desktop apps from 15 years ago. It still might be worth a shot anyway.

Closing Ceremony

Wow, this was not worthwhile at all. I should have gone home early because the odds of getting anything in the lottery were very bad (mostly because I didn’t know you had to put your ticket into the lottery bowl on Friday morning, but not sooner than that, or else you couldn’t win).

Final thoughts: I was pretty tired at the end, but I was glad that I went. It so rare for me to get to talk with any other programmers, let alone experts, and I easily got the value I’d hoped for out of informal discussions about SQL Broker and linq and async. Here’s to next year’s abstract submission going better.

CodeMash 2016 Recap – Day 3

CodeMash was great. I had a good time, and I learned about several important new programming languages and libraries. I’m writing up my notes here about the talks I attended to motivate myself to follow up on them.

The point of going to a conference like CodeMash is to keep learning new technologies. The relentless rate of change in programming can be overwhelming, but it is important to keep learning anyway, even when the latest fads appear to be reinventions of old ideas. (E.g., slack is just IRC on mobile devices, but it seems to be replacing email.) Anyway, to the talks from Day 3:

Node.js Crash Course

The bottom line I got from this was that when people talk about microservices, they probably mean node.js. It’s appealingly simple: service side javascript with isolated databases are fairly easy to develop and deploy, and the js single event loop structure encourages you to simplify your architecture. Best use: websockets, push notifications in real time.

Overall: an excellent talk about a popular subject.

Get Some REST –On Practical RESTful API Design

This talk was overly academic, being pedantic about how URLs should identify objects, not actions. Sure, if you buy into the whole REST architecture for everything, then it is a good idea to have some standards, but I didn’t learn any new practical parts of this subject.

Microservices – Beyond the Hype

I’m not sure that this talk really got beyond the hype, but it was a rare instance where the abstract perfectly matched the presentation, and I can’t really add much beyond what the original author wrote:

“Microservices are all the rage these days. Everyone is trying to sell their vision of SOA as “microservices”. You know it has reached the mainstream, because the backlash has started, too. When you boil it down, Microservices trade business domain complexity for infrastructure complexity. If you have a lot of business domains, this can help keep your software from turning into a big ball of mud. If you don’t, it’s just building complexity for complexity’s sake. In this talk, we will look at why and when you would want to build microservices, how you would do so, and what to avoid. We won’t fixate on the size of services, but on how to split things apart. After this talk, you will know if you should consider using microservices.”

My favorite part of this talk was the discussion of “The Eight Fallacies of Distributed Computing.

Async Everywhere!

I love Stephen Cleary’s work, and multi-threaded programming is one of my favorite areas to work in (regardless of language). The main point of this talk that driving the adoption of async is being driven by mobile first development (required by app stores) and by cloud first development (scalable server utilization). I couldn’t agree more with this message.

Having said that, async/await is just a compiler trick. It’s really powerful in some scenarios, and it’s helpful to have the compiler create a FSM automatically, but I don’t think it really makes the hard problems any easier. How would you use it to solve the dining philosopher’s problem or multiple producers multiple consumers problem? I think actors and message passing are required to tackle the hardest problems, and I hope that more programming languages add first class support for those techniques. Async/await is progress, but I’m still “await”ing the techniques which will want to make me forget about mutexes forever.

Anyway, I really loved this talk, and I hope Stephen Cleary keeps raising awareness of this topic.

A Deep Dive Into Modern Crypto

Wow, rarely does a presentation make me worry as much as this one did. It’s scary to list all of the broken techniques still in popular use: DES, 3DES, RC4, MD5, SHA1. I guess I’d heard most of the flaws before from Bruce Schneier’s blog and books, but I haven’t seen it all laid bare before. Especially worrisome is the thought of general purpose quantum computers in only 15 years, which could cut the strength of all crypto in half (256-bit ECC RSA down to 128-bit equivalent security) while providing no easy path forward except to massively increase key size.

It’s a thought-provoking and deeply worrying topic with implications for online commerce and national security.

Intelligently Extracting Data from PDFs

Well, what can you expect from a product pitch? I agree that PDFs lose a lot of information present in the original document (e.g., semantic organization between lines and pages), but I really doubt that OCR’ed text can really be as good as the originals.

The author is an expert on the subject matter, and if this is the most important problem facing your business, I guess I would agree with buying the product he was selling (despite the lack of comparison to other products).

Everything you wanted to know about writing async, high-concurrency HTTP applications in Java, but were afraid to ask

I felt this talk was overly specific to the author’s product and implementation of HTTP downloads, but he had a lot of entertaining pictures and metaphors. My favorite: CLOSE_WAIT socket errors are like hiding in a grocery store after the business has closed.


SQL Server Users Group Presentation (NWO-PASS)

I was pleased to present my talk, SQL Server Notifications In A Manufacturing Environment, again for the Northwest Ohio SQL PASS Chapter. I removed the C# code and replaced it with information relevant to a database administrator – what a Query Notification looks like inside SQL Server, how it affects other clients, etc. The revised slides are linked here Johnson Sep 2015 NWO-PASS-SQL Server Notifications. I also made some printed handouts with a summary of the talk – handouts for NWO-PASS Meeting.

The turnout was pretty good, and I got a lot of interesting questions. The most frequent question seems to be about how the Query Notification interacts with transactions, which I addressed in my slides. To summarize the answer: a QN becomes part of the transaction that fired it, so if that transaction rolls back, so does the QN. It’s not really much different than how the actions of an INSERT/ UPDATE/ DELETE database trigger become part of another transaction.