I’ll be moving the blog from Blogger to GitHub Pages in the next couple of weeks and I’ll be putting the atom feed at a different address. To make sure you keep getting updates from Growing with the Web, resubscribe to the Feedburner URL. This will allow me to switch over the backing feed when the time comes.
Binomial heap
A binomial heap is a priority queue data structure similar to the binary heap only with a more strict structure, it supports quicker merging of two heaps in \(Θ(\log n)\) at the cost of a slower find minimum operation. A binomial heap is made up of a series of unique 'binomial trees' which are constructed from smaller binomial trees.
Just like a regular binary heap, the binomial heap can be either a min heap or a max heap. It also follows the properties of the heap data structure; all nodes must be smaller than their children for a min heap, or larger for a max heap.
The animations in this article will only work in certain browsers, it has been tested in the latest Chrome and Firefox.
Handy adb commands for Android
Here are some of the commands I find useful for Android's adb
. They can be used manually or to automate your build or testing process.
View connected device(s)
Use this to view all connected devices and list their IDs.
adb devices
If multiple devices are attached, use adb -s DEVICE_ID
to target a specific device.
The visitor design pattern
The visitor design pattern provides a method of separating an algorithm on an object and the object's actual class implementation. This allows the programmer to easily follow the open/closed principle;
software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification
Object-Oriented Software Construction, Bertrand Meyer
That is, modifying an entity's behaviour without modifying the underlying source code. Following the open/closed principle provides many quality-related benefits as the original code never changes.
Benefits
- Follows the open/closed principle
- Allows a new operation to be defined without changing the implementation of the class
- A visitor object can have state
Drawbacks
- If a new visitable object is added then all visitors need to be modified
The progress element
The progress
HTML element was introduced in HTML5 and is used to represents the completion progress of a task. Typically it is displayed as a progress bar but this can be overridden so is up to the web developer.
Developers should make sure it is associated with a label
element, especially when the label is not immediately preceding it. To support older browsers that don't support the progress
element, a textual description of the progress can be included within the element.
At the time of writing this article, support is pretty good for desktop with the exception of requiring at least IE10, mobile support isn't fantastic though.
SVG Stack Overflow icon
While redoing my social follow icons I realised that there didn't seem to be any SVG version of the Stack Overflow logo on the internet. So naturally I went and put one together! I hope it's useful.
How to remove the default Blogger assets
WARNING This is a tutorial designed for expert web developers, following this tutorial can break the template customiser, layout customiser and prevent widgets from being added to your blog. Your blog may also depend on them if you haven't heavily customised the template.
The default Blogger assets have plagued me ever since I started to dive deep into the Blogger template to make my design nicer and to drive the page load time down. A Blogger template requires several tags in the <head>
and the editor will refuse to apply the template without them, namely this section.
<b:include data='blog' name='all-head-content'/> <b:skin> <![CDATA[/* ----------------------------------------------- Blogger Template Style Name: Some name Designer: Some author URL: Some URL ----------------------------------------------- */ ...A lot of CSS... ]]> </b:skin> <b:template-skin> <b:variable default='960px' name='content.width' type='length'/> <b:variable default='0' name='main.column.left.width' type='length'/> <b:variable default='310px' name='main.column.right.width' type='length'/> <![CDATA[ ...A lot of CSS... ]]> </b:template-skin>
Design patterns
Design patterns in software engineering are generic solutions to some commonly occurring problems encountered when creating software. They are incredibly useful tools for both communicating a solution to a problem to other developers and also for saving time solving problems that have already been solved in quite elegant ways. Learning the big design patterns is a also just a great way to improve your skills as a software developer.