Over the holidays, I created a chrome extension that allows a user to dynamically adjust the number of servings for a recipe they are preparing. The extensio...
Posts by Category
We recently did some thought on what makes a useful test, and shared it with the organization through a tech talk.
Last week, as part of Expedia Learniversity, I gave a presentation on the Adapter and Facade design patterns.
Don’t worry about learning all of the new features introduced in the ES6 spec, just focus on these core ones that are used most frequently in React codebases!
I was recently asked to present as part of the Northwestern Alumni Webinar series. The topic: How Volunteerism Can Impact Your Career.
No, this is not the board game we all played as kids…
One of the missing components from the curriculum of the bootcamp for which I teach, is a discussion of agile methodologies and how agile is typically implem...
We are in a new age of selling… at least that’s what Daniel H. Pink argues in his New York Times best seller To Sell is Human.
This is part 2 of my reflection on “The Amazon Way” by John Rossman.
I’ve been learning a lot about Webpack recently and I decided to give a presentation at Expedia’s frontEnd engineering community of practice to share my expe...
I just finished reading “The Amazon Way - 14 Leadership Principles Behind the World’s Most Disruptive Company” by John Rossman. The book was recommended to m...
Next up in my Design Patterns series is the Decorator pattern, which allows you to give your objects new responsibilities at runtime without making any code ...
Last week, I was invited to speak during the Power Lunch speaker series at Chicago Tech Academy: a STEM focused high school in Chicago’s West Loop neighborho...
This is part 2 in my Read By Refactoring series. In this post, I’ll discuss what our instructor described as “Naming as a Process”, which highlights a way to...
Everyone can see the impact A.I. is having our lives, but an article I read in NYT magazine titled “The Great A.I. Awakening” hammers home just how impressiv...
Wow, 2016 went by fast! Here’s a quick recap of what went down, and what my goals are for 2017.
It’s been about a month since I last posted, but I’ve been busy in the meantime! I’ve switched from the Frontend to the Backend team at work, and participate...
So it winds up that the RaspberryPI I set up to serve doesfloydshavezombie.com still didn’t have a static IP after all…
This year I participated in the Hacktoberfest challenge presented by Digital Ocean. I had not done much open source contributing before, and Hacktoberfest pr...
I’m going to read through Head First Design Patterns from O’Reilly after it was recommended on an HN post that I read recently. After finishing a chapter, I’...
Wow. There was a lot more work to do than I expected to get doesfloydshavezombie.com back up and running. Here’s the final entry in this series!
I continued to set up my RBIP as a web server this weekend: I’ve finally got my application publically facing on a static IP, and the Zombie Dust checking sc...
This weekend I decided to dust off the RaspberryPi I’ve had lying around and get it up and running as a web server again. I’m currently hosting my zombie-dus...
Have you ever spent hours looking at legacy code - making notes on paper, adding comments to the codebase, and cursing poorly named methods and variables - j...
It’s been a while since I last posted, and a lot has happened over the past few months. Here’s a quick recap (with pictures!)
I bought a new Macbook Pro Retina today for personal use, and spent most of the day re-configuring the terminal and development environment to match my old m...
I’ve spent the last 10 months volunteering as an AP Computer Science teacher at a Chicagoland high school through the Microsoft sponsored TEALS program. It w...
The Syndio development team got to take another all expenses paid (thanks to the awesome Neo team!) class on modeling your data in a graph database today! Th...
There were only 3 days school this week (students got Thursday and Friday off for Easter) so instead of forging ahead with new course material before the bre...
Today the Syndio dev team took a field trip to the Chicago stop of the Neo4j Graph Days tour. Since we pride ourselves in our ability to elicit information f...
An article recently published by the New York Times Magazine highlighted research efforts by Google to answer the question “What Makes the Perfect Team?” The...
TIL stands for “Today I Learned.” I believe the concept originated from the subreddit /r/TodayILearned.
Since I am using github to host and version my content, I might as well take advantage of other features of the platform to help organize and manage updates ...
I figured it’s about time I set up a personal website!
TIL that you can quickly navigate to the beginning and end of a command in the command line by using the shortcuts ctrl+A and ctrl+E.
TIL what the true value add of testing is…there is none!
TIL that angular services maintain internal state until the page is reloaded.
TIL that angular has an “equals” method that does a deep comparison between objects to determine equality.
TIL how to design a service in Angular that encapsulates the actions necessary to supply data to a controller.
TIL that github now supports templates for both Issues and Pull Requests.
TIL about the ng-model-options directive, which augments the behavior of an input element bound to a scope property via ng-model.
TIL that instead of interpolating a data binding in a template (via double curly brace syntax), you can accomplish the same thing by adding the ng-bind direc...
TIL what the difference between angular’s watcher offerings are: $watch, $watchCollection, $watchGroup and $watch (objectEquality).
TIL why you need to call $scope.apply() when you change the value of $scope properties inside of custom angular directives.
TIL that underscore.js has an awesome debounce wrapper that grants debouncing capabilities to any custom function.
TIL how to use the Chrome “Timeline” Profiler to help uncover poorly performing front-end code.
TIL the difference between self-time and total-time in the Chrome profiler.
TIL that angular 1.3 and onwards has a one-time-bind option to pass to interpolated expressions, which tells angular that the data is not expected to change.
TIL what the angular-animate library does, after noticing it was contributing to over 60% of the scripting time necessary to scroll through our grid!
TIL about git aliases, and how they can speed up your git workflow.
TIL how to properly mock angular dependencies in Unit Tests using the Jasmine test framework.
TIL of a metric that helps measure customer engagement and loyalty: Net Promoter Score
TIL how to mock the internal clock of a test using jasmine. This was useful for testing methods that rely on a timeout or debounce before firing.
TIL the difference between an interface and an abstract class.
TIL how to overwrite mocks in tests, by saving them to a variable and modifying the function tied to the object.
TIL how the Array.prototype.sort() sorts by default, and how to pass a comparator function in to the sort method if a different sort order is desired.
TIL (more like re-learned) the differences between a few basic sorting algorithms: selection sort, insertion sort, and merge sort
TIL about cohort analysis, and how it can be used as an input to product strategy.
TIL that there exists a hard cap on the amount of data a single webpage can ship to a mobile browser, before the browser crashes.
TIL how to convert a binary string to a digit of any base, and how to convert a digit of any base to its corresponding binary string.
TIL how difficult it is to create emails with rich content…inline CSS and email client incompatibilities for days!
TIL the difference between Call By Value and Call by Name expression evaluation strategies implemented by languages such as Scala.
TIL how a standard caching strategy, the Least Recently Used (LRU) cache, works.
TIL that the amortized time complexity of adding an item to an ArrayList in Java is O(1), but that the “worst case” for an add operation is O(n). This caused...
TIL that when using Redux, there are examples of state that are best kept local to a component instead of being managed by the Redux store.
TIL the difference between PUT and PATCH, and found a nifty table highlighting
TIL that the promise implementation shipped with ES6 is not very performant, and that it is still preferable to use a 3rd party promise library for several r...
TIL that view models have utility beyond making data easier to digest by consumers.
TIL the difference between app.use and app.all in the context of an express application.
TIL about Postgresql extensions, particularly the CITEXT extension for making a case insensitive column in a table.
TIL that inline elements can’t have transformations applied to them in CSS.
TIL (more like relearned) CSS specificity rules, and (unrelated) some additional methods on the console object other than console.log.
TIL of a quick way to quickly resolve merge conflicts from the command line, in a situation where you know you want to fully accept or reject the merging bra...
TIL that the spread operator does not perform a deep copy of object properties to the target object.
TIL that the output of console.log in chrome can be misrepresentative of the actual state of an object at the point of logging.
TIL of some simple tricks to optimize images for the web.
TIL (reviewed) the differences between the 4 CSS position property values: static, fixed, relative, absolute.
TIL what Firebase is. I followed the tutorial and published a quick app to understand its capabilities.
TIL a succinct way to remember the difference between using min-width and max-width in a media query.
TIL the difference between em and rem in CSS.
TIL that node programs have different globally accessible objects than those found in the browser.
TIL that the express response object does not forward content bodies to requestors if the status code of the response is 204: No Content.
TIL how Babel transpiles variables defined with let to their ES5 var equivalents, while still maintaining the same block scoping rules that apply to let.
TIL about the behavior of script loading in an HTML page, when the async attribute is added to a script tag.
TIL how to leverage ES6 arrow functions to avoid losing “this” when writing functions inside of functions.
TIL the difference between path and publicPath in webpack, and how the output.filename property can be used to assign files to sub-directories in the path.
TIL how to configure webpack-dev-server (WDS) to both serve files from the publicPath and proxy APIs on different domains to avoid cross site request warning...
TIL how to use webpack loaders to transpile React code to ES5, and compile .less stylesheets to .css.
TIL that node’s require method maintains a cache of the modules that have been imported. I also learned that it is possible to invalidate this cache.
TIL how to use webpack plugins like ExtractTextPlugin and CommonsChunkPlugin to create smaller chunks out of my webpack bundles.
TIL how to perform snapshot testing using Facebook’s React unit testing framework jest. It is somewhat different than traditional visual regression testing… ...
TIL how to properly write a SQL statement using the LIKE operator, including how to use wildcards to match various patterns.
TIL how to calculate the magnitude, normalization, dot product, and cross product of vectors. I wrote a small library that performs the calculations - repo w...
TIL how to configure the database migration framework Flyway, as well as the difference between Versioned and Repeatable migrations.
TIL what a microservice is, what the purported benefits of microservices are, and some of the drawbacks of creating a system built from microservices.
TIL the difference between a process and a thread.
TIL what semantic versioning is, what each number of the version indicates, and why using a versioning scheme like semantic versioning is important.
TIL how to pass headers along with requests initiated by the fetch API.
TIL how to use location.replace() and location.assign() to change URLs programmatically in the browser.
TIL how to initiate a request using native browser XMLHttpRequest objects, instead of a request library that wraps these objects.
TIL how to properly define dependency versions in a pacakge.json file.
TIL how to compose classes together using the composes keyword provided by css-modules. It has changed my world.
TIL about the URLSearchParams Object, which is useful for parsing URL querystrings in to maps of keys and values.
TIL about the 6 different branches of AI, and what a Rational Agent is.
TIL that Jest module automocking does not mock the getter / setter properties of the target module.
TIL how to use process.nextTick to ensure asynchronous actions are resolved before running assertions during tests.
TIL how to unwrap react components that are decorated by higher order component wrappers like mobx, to get at the underlying component implementation during ...
TIL that the leadership style best suited for a team operating in an agile environment is different from that of a waterfall environment.
TIL about Kubernetes, Google’s open source container orchestration system.
TIL about the public suffix list, which is a list of domains in which browsers will not allow secure cookies to be set
TIL that Python does not have the ability to make class members (methods, data fields) private.
TIL about Information Entropy and Information Gain, which are key pieces towards determining the relevance of a decision when constructing a decision tree.
TIL about edge computing, and how it can lead to optimizations over cloud computing in certain scenarios.
TIL about Gini Impurity: another metric that is used when training decision trees.
TIL how to create a temporal model of a system using some simplifying assumptions for ease of computation.
TIL how to set up CSS modules for a React application that uses webpack.
TIL the difference between RUN and CMD when defining an image via a dockerfile.
TIL how to easily node_modules in unit tests using the jest testing framework from Facebook.
TIL about the single responsibility principle, and how it can lead to decoupled classes that make changes less risky.
TIL about the liskov substitution principle, and how it ensures the “correctness” of a program.
TIL about the open/closed principle, and how it can be used to ensure your code is adaptable to new requirements while remaining resilient to changes.
TIL about the interface segregation principle, and how it promotes decoupling of classes in your code through the separation of methods in to role interfaces.
TIL about the dependency inversion principle, and how it (like most of the other SOLID principles) promotes loose coupling between modules.
TIL about Purgeable Disk Space in OSX, and after hours of struggling, how to reclaim it.
TIL how to mock the constructor function of a node_module during unit tests using jest.
TIL the true purpose of API keys: a simple yet important revelation!
TIL what a breaking change was in the context of a public API or Service.