n this example, what we need to deploy the React application is the compiled code; we don’t need the source files, nor the node_modules directory, nor the package.json, etc.
Pick’n’Mix provided a heap of functionality to its embedded web content, including the ability to download and store remote content from a CDN to disk, UI overlays for app settings and download management, analytics events, push notification support, and many other features. This functionality was built from scratch and solely maintained by our internal native engineering team.
The web is an amazing thing; it can turbocharge your ability to get things done and ship content anywhere, but it’s flexible too, making it easy to box yourself into a corner of unsustainable bespoke implementations, before you know it your once esoteric requirement is a web standard.
To support this, we had to provide means for engineers to test and develop their menus within Pick’n’Mix itself, adding a “development harness” to the pile of proprietary things we’re having to build and maintain ourselves. This nuance cuts even deeper — though, by requiring HTML5 apps to be delivered to a proprietary set of standards, we were moving further and further away from new and emerging web standards. This meant we were unable to take advantage of fantastic resources like MDN, and fundamentally in a position where 80% of the underlying runtime had to be supported by us.
Antoinette’s last words were reliably recorded as an apology. She profusely apologized to the executioner when she stepped on his shoe and made sure to make it known that she had not done so on purpose.
This platform complexity, coupled with immature frameworks and the business requirement to ship web apps to app stores, led us to spinning up an internal engineering team to create a proprietary app wrapping framework. This framework would be capable of bundling HTML5 web content and generating iOS and Android binaries from that content.
Normally, images based on Alpine or BusyBox are extremely small in size compared to those based on other Linux distributions, such as Ubuntu. This is because Alpine and those other images have been optimized to include the minimum and must-have packages. In the following image you can see a comparison between the sizes of Ubuntu, Alpine, Node and Node based on the alpine.
Compton accompanied the firing squad of about 11 which lined up the prisoners and placed themselves around 2 meters away from them. The prisoners first pleaded with the men not to shoot them but they shortly saw that their fate was already decided. In a desperate try for self-preservation, many ran away. Compton told the 11 soldiers there “[I don’t] want a man left standing when the firing was done.”
The quote reliably appears only once in Jean-Jacques Rousseau’s Confessions which was allegedly completed in 1769 and was not published until 1782. This means that the quote was most likely written down in the 1760s, long before Marie Antoinette would ever witness a bread shortage.
Around five years ago, when the business was first facing the challenge of shipping HTML5 content onto iOS and Android stores, many of the options that existed were fairly immature. Tooling like PhoneGap and Cordova were only just materialising, and client-side libraries like React were not as popular at the time. Web standards were growing but there was no concept of a Progressive Web App yet and browser capabilities like Service Workers did not exist.
Menu systems, however, were only needed in the app deployable to enable discoverability of content. This meant that menus were built exclusively for Pick’n’Mix and as such we historically required the engineers building menu systems to develop, test, and deliver the menus as fully-fledged ‘Pick’n’Mix’ apps. A very closely coupled integration. This is an important nuance; we were asking engineers to deliver us HTML5 content to run exclusively on a proprietary platform.
With multi-stage build, we can use multiple base images in the Dockerfile and copy artifacts, configuration files, etc. from one stage to another, so that we can discard what we don’t need.Back then, putting web content into apps was a hostile environment. Shipping onto app stores was typically considered a problem that could only be solved well by experienced native app developers.Captain John T. Compton had to make a decision on what he should do with the prisoners. Once Marlow told him that these were likely the men that were shooting at them earlier he said: “Get them shot.”
In fact, the first attribution of this quote to Antoinette came in 1843, nearly fifty years after her execution. While she had been known to be a frivolous spender who loved lavishness and luxury she was also someone who was shown time and again to be courteous and kind.
At the time, especially in a famine or times of economic hardship, brioche would only have been affordable by the upper class elites of society. This quote shows the reader that the person who uttered it a) does not shop at normal bakeries and b) has no concept as to how much a loaf of bread or a loaf of brioche actually costs.
By changing the Dockerfile to the following one, the final size of our image is 91.5 MB. Keep in mind that the image from the previous stage (lines 1–4) is not automatically deleted, Docker keeps it in cache to run faster if we use the same stage in another build, so it has to be deleted manually .
By changing the Dockerfile to the following one, the final size of our image is 22.4 MB. If we run the container, we can see that the web works without problems (Picture 7).
On this day in history, the 16th of October, 1793, Marie Antoinette was famously executed by a revolutionary mob after a trial in which she was found guilty of depleting the national treasury, conspiracy against the state and high treason. This famous scene is often tied, inexplicably, to the quote “let them eat cake” though there is no record of Antoinette ever uttering those words.
Fundamentally, Pick’n’Mix was a WebView/WKWebView with a JS “bridge” capable of passing messages between content running within the WebView to trigger certain actions on the web/native side. This bridge was a “standard” we maintain internally called the Games Messaging Interface (or GMI). This GMI ensures that games are interoperable between many platforms and abstracts away the nuances from game developers of having to worry about the runtime.
This statement was made with no backing as when an interpreter asked the people Marlow captured if they were shooting at the platoon he received no response. Even so, we know that at least one of the prisoners was shooting at the Americans as Marlow caught one of them while he was shooting.