{
    "version": "https://jsonfeed.org/version/1.1",
    "title": "Published Notes",
    "home_page_url": "https://wooptoo.com",
    "feed_url": "https://wooptoo.com/feed.json",
    "language": "en",
    "items": [
            {
                "id": "github-actions",
                "url": "https://wooptoo.com/blog/github-actions/",
                "date_published": "2020-05-29",
                "title": "Publishing with Github Actions",
                "content_text": "Continuous integration and deployment has now become a well established practice in software companies of all sizes. With the advent of platforms like Gitlab CI and more recently Github Actions setting up CI/CD even for small personal projects has become quick and easy. “Actions” is the name of the …"
            },            {
                "id": "docker-multistage-builds",
                "url": "https://wooptoo.com/blog/docker-multistage-builds/",
                "date_published": "2020-02-25",
                "title": "Docker multistage builds",
                "content_text": "The multistage pattern splits the Docker image building process into two or more individual steps. These are described in a single Dockerfile and will run sequentially. The main advantage is a smaller final output image and a clear separation between concerns. Here’s a minimal example to help us get …"
            },            {
                "id": "quick-iptables-setup",
                "url": "https://wooptoo.com/blog/quick-iptables-setup/",
                "date_published": "2019-03-03",
                "title": "Quick IPTables filtering",
                "content_text": "The Linux kernel has a great firewall built-in commonly referred to as iptables. Actually iptables is only the user-space tool that you as the user interact with, while the kernel module doing all the work is actually called Netfilter. Here are a few tips on how to quickly set up …"
            },            {
                "id": "inspiron-7570-plus-plus",
                "url": "https://wooptoo.com/blog/inspiron-7570-plus-plus/",
                "date_published": "2018-03-26",
                "title": "Modding the Inspiron 7570",
                "content_text": "Not too long ago I purchased the Inspiron 15 7570 laptop from Dell’s outlet website. Having owned the amazing Inspiron 7537 for the past four years I had very high expectations from this machine. While it’s a really good product in many ways with great specs, I was …"
            },            {
                "id": "mirror-git-repo",
                "url": "https://wooptoo.com/blog/mirror-git-repo/",
                "date_published": "2018-01-10",
                "title": "Mirroring Git repos",
                "content_text": "Here is a quick way to mirror a git repo from one remote to another. This is not only useful for mirroring but also for backups. The git clone --mirror git@gitlab.com/myuser/myrepo.git command will create a mirrored repo, which is pretty much like a bare repo …"
            },            {
                "id": "python-pathlib",
                "url": "https://wooptoo.com/blog/python-pathlib/",
                "date_published": "2017-11-05",
                "title": "Introduction to Python pathlib",
                "content_text": "One of the first things many beginner Python tutorials teach is how to read or write files using patterns like: with open('file.txt') as f: f.read() And then walk directories with libraries such as os: import os g = os.walk('.') next(g) Which will go recursively through results …"
            },            {
                "id": "scraping-with-beautifulsoup",
                "url": "https://wooptoo.com/blog/scraping-with-beautifulsoup/",
                "date_published": "2017-03-09",
                "title": "Scraping with BeautifulSoup",
                "content_text": "BeautifulSoup is a handy library for web scraping that’s mature, easy to use and feature complete. It can be regarded as jQuery’s equivalent in the Python world. In this post we’re going to scrape the front page of wooptoo.com and output a clean, JSON version of …"
            },            {
                "id": "marshmallow-schema",
                "url": "https://wooptoo.com/blog/marshmallow-schema/",
                "date_published": "2017-02-19",
                "title": "Marshmallow schema basics",
                "content_text": "In this post we’re going to cover the basics of working with Marshmallow. Marshmallow is a Python library which enables us to easily sanitize and validate content according to a schema. Schemas are useful when we want to sift through user provided data en-masse as opposed to dealing with …"
            },            {
                "id": "angular-seed",
                "url": "https://wooptoo.com/blog/angular-seed/",
                "date_published": "2016-07-22",
                "title": "A new AngularJS project seed",
                "content_text": "A few months ago I started working on a project seed for AngularJS 1.x. A project seed is the initial skeleton a developer would use to get things up and running quickly when commencing a new project. There are plenty of these around with the most popular being Yeoman …"
            },            {
                "id": "keeping-home-config-in-git",
                "url": "https://wooptoo.com/blog/keeping-home-config-in-git/",
                "date_published": "2016-03-06",
                "title": "Keeping home configuration in git",
                "content_text": "Having dotfiles from the $HOME directory in git is a great way to keep track of what’s going on with some of our most important config files. However just creating a plain git repo won’t play nice with other repos found further down in the home tree. Chances …"
            },            {
                "id": "building-apps-with-gulp",
                "url": "https://wooptoo.com/blog/building-apps-with-gulp/",
                "date_published": "2014-04-16",
                "title": "Building apps with Gulp",
                "content_text": "I never quite liked JavaScript building tools. Grunt always seemed way too complicated for the simple things I wanted to accomplish. Like concatenating files and minifying them. One of the first bash commands that any Linux user learns about is cat. You can just cat a few files together and …"
            },            {
                "id": "serving-webp-today",
                "url": "https://wooptoo.com/blog/serving-webp-today/",
                "date_published": "2014-04-05",
                "title": "Serving WebP today",
                "content_text": "WebP is both a lossless image format, like PNG, which preserves every detail of the original image, and a lossy format, like JPG, which will compress the original image down to a certain quality. WebP support in browsers such as Firefox and IE is virtually nonexistent. However if a big …"
            },            {
                "id": "prototypical-inheritance-in-javascript",
                "url": "https://wooptoo.com/blog/prototypical-inheritance-in-javascript/",
                "date_published": "2014-03-24",
                "title": "Prototype inheritance in JavaScript",
                "content_text": "JavaScript has its own inheritance model that is quite unique among languages. Since JavaScript has no notion of classes yet and since everything is actually an object, we will try to clear the confusion by defining a few terms: A class is a constructor function which has properties and other …"
            },            {
                "id": "promises-in-angularjs",
                "url": "https://wooptoo.com/blog/promises-in-angularjs/",
                "date_published": "2014-02-10",
                "title": "Promises in AngularJS",
                "content_text": "Promises are quite an old concept that took off only recently in the JavaScript world. Since version 1.2 promises have become such an important part of AngularJS that they cannot be overlooked anymore. In this post we will cover the basic concepts of promises in AngularJS with a few …"
            },            {
                "id": "cors-gotchas",
                "url": "https://wooptoo.com/blog/cors-gotchas/",
                "date_published": "2012-07-09",
                "title": "CORS Gotchas",
                "content_text": "CORS stands for Cross-Origin Resource Sharing and represents a method of accessing/sharing resources across domains. These resources can be anything from web fonts to APIs. The CORS standard is only implemented in browsers, since this is the only place where it makes sense. While this is the preferred method …"
            },            {
                "id": "notes-on-restful-apis",
                "url": "https://wooptoo.com/blog/notes-on-restful-apis/",
                "date_published": "2012-04-17",
                "title": "Notes on RESTful APIs (Updated)",
                "content_text": "HTTP and REST are not new, we just misused them for a long time. A proper RESTful API should consider the following principles. Resources Resources are discrete entities — like the entities from the Entity-Relationship Model. The web is modeled around resources. Everything is a resource, not a web page, not …"
            },            {
                "id": "acta-sopa-pipa-cispa",
                "url": "https://wooptoo.com/blog/acta-sopa-pipa-cispa/",
                "date_published": "2012-04-08",
                "title": "ACTA, SOPA, PIPA, CISPA",
                "content_text": "It seems like the big players of the software and hardware industry are dead set to bring to life an incarnation of one of these laws. Never before in the history of computing has a piece of legislation been pushed forward so ferociously by so many significant companies. The core …"
            },            {
                "id": "pdo-vs-mysqli-performance-comparison",
                "url": "https://wooptoo.com/blog/pdo-vs-mysqli-performance-comparison/",
                "date_published": "2012-04-03",
                "title": "PDO vs MySQLi performance comparison",
                "content_text": "After reading this article on Nettuts, I was curious how PDO would compare to MySQLi in a real-world scenario, perfomance-wise. So I created a benchmark to dispell the myths surrounding this dispute. MySQLi is percieved to be the better performer, since it’s the official extension supported by Oracle. In …"
            },            {
                "id": "hello-world",
                "url": "https://wooptoo.com/blog/hello-world/",
                "date_published": "2012-03-22",
                "title": "Hello world",
                "content_text": "Hello world! It’s about time I launched this thing. While not being perfectly polished yet, it is close enough to what I wanted so I decided to give it a go. I will post here my findings, notes and scribblings related to development. Hopefully I’ll do it on …"
            }    ]
}