When a web application reaches a sufficiently large size, it can become infeasible to perform all actions required within a single web request/response life-cycle.
You may find yourself wishing to for example - batch up and send queued emails at particular intervals, or process payments asynchronous to the point in-time the user made the initial request.
In this post I would like to discuss our changing use of background processes (both time-dependent and continuous) due to increasing throughput demands.
An interesting problem arose last week when we wished to generate a listing of recently completed jobs (along with their shortlist fees).
Upon review of some earlier attempts, we did not like the aesthetics present when many of a particular shortlist fee were clustered together (i.e. two or more adjacent jobs with the same shortlist fee).
What we were instead looking for was to create a constraint-based ordering that when applied to the recently completed jobs, would give an even distribution of shortlist fees (data-set permitting).
Whilst working on resolving a recent JavaScript event handler bug, it deemed necessary to implement a form of throttling to make sure a race-condition would not occur.
Throughout the fix I found myself seeking a clear definition of what both throttling and debouncing a function actually entailed; as it can be very easy to mix the two subtly different concepts.
An AVL tree is a self-balancing binary search tree, where-by the height of a node’s children differ by at most one.
In the event that this property is violated a re-balancing process takes place.
This past week discussion around solving anagrams was brought up - I thought it would be interesting to devise a couple of methods for computational achieving such a task.
Providing an anagram string and a dictionary file, I wished to be returned all possible matching words from the dictionary.