We can distinguish two main families of detection techniques:
Behavioral detection: this family of approaches leverages the
user’s behavior, such as mouse movements or browsing speed, to
predict whether a user is human or not.
Fingerprinting-based detection: this second family of approaches
leverages information about the device and the browser, such as
the browser version, the Operating System (OS) or the number of
Converting responsive, continuous media to paged paper of any size
and orientation can be challenging. However, CSS print control has
been possible for many years, and a basic style sheet can be
completed within hours.
I was casually doing a security audit on my blog
(JeremyMorgan.com) recently and
decided to look a little deeper into my security logs. With a bit of
Linux command line kung fu, some Golang, and Google sheets, I was
able to get a pretty good idea of where the attacks are coming from.
The Definitive Higher Math Guide on Integer Long Division
In mathematics, long division is a powerful procedure through which
division can be carried out with pencil and paper. As powerful as it
is, it is generally taught at the pre-college level without much
consideration on its underlying theory or its alternatives…
There were several moments over the last few weeks when I heard
people discuss differences between Python
one of the first ones mentioned was that lists are ordered and dicts
Today I made embedded YouTube videos responsive as part of my work. I
used the technique given in Responsive YouTube
Embed, an article
by John Surdakowski.
Overload Functions in Python
Function overloading is the ability to have multiple functions with
the same name but with different signatures/implementations. When an
overloaded function fn is called, the runtime first evaluates the
arguments/parameters passed to the function call and judging by this
invokes the corresponding implementation.
Many startups have been there - what feels like legions of new users
are signing up for accounts every day and the engineering team is
scrambling to keep things running.
It’s a good a problem to have, but information on how to take a web
app from 0 to hundreds of thousands of users can be scarce. Usually
solutions come from either massive fires popping up or by
identifying bottlenecks (and often times both).
With that said, I’ve noticed that many of the main patterns for
taking a side project to something highly scalable are relatively
This is an attempt to distill the basics around that formula into
writing. We’re going to take our new photo sharing website,
Graminsta, from 1 to 100k users.
Clustering is a Machine Learning technique that involves the
grouping of data points. Given a set of data points, we can use a
clustering algorithm to classify each data point into a specific
group. In theory, data points that are in the same group should have
similar properties and/or features, while data points in different
groups should have highly dissimilar properties and/or
features. Clustering is a method of unsupervised learning and is a
common technique for statistical data analysis used in many fields.
Most recently, we drastically improved the performance of a service
by switching its implementation from Go to Rust. This post explains
why it made sense for us to reimplement the service, how it was
done, and the resulting performance improvements.
over the past three months, I've been reading through “Haskell
Programming, From First Principles” by Chris Allen and Julie
Moronuki, the 4th release candidate of
the 1.0 edition (1.0-rc4). I'm pleased to say that I made it to the
end of this 1,857 page (by the e-reader PDF version)
monstrosity. Here's some of the things that I, as a software
engineer who has used Python in production and Haskell doing book
exercises only, liked and didn't like about Haskell.