NAS + Pi Plex Server I recently bought a NAS for my home network due to my old external HDD eventually failing. In the NAS sits 2 3TB hard drives in a RAID setup so I have 3TB of overall storage, more than enough. I wanted to be able to access all of my media anywhere in the house and on any device. To save on some money I bought myself a NAS that only had the basics that I would need, file storage.
Raspberry Pi – PiHole DNS Server NOTE: I had to disable the systemd-resolve service so that DNS requests where resolved by PiHole and not the default system service. $ sudo systemctl disable systemd-resolved.service $ sudo service systemd-resolved stop Running your own network wide DNS server can have its benefits. The reason for me setting this up is that I finally got fed up seeing large, in your face, adverts on my phone at home.
Docker-Compose - Traefik + More I run a small VPS (Virtual Private Server) for several services that I use e.g. a Git server, web servers etc.. As I began to add more and more services, I felt the need to separate these into self-contained blocks. Doing this meant that I could develop the applications on whichever platform I like and not worry about dependency mismatches. I made the decision to move my services to Docker.
API Access to the Notes To give our web application an API we are going to be using the REST framework. For our API to work correctly we need to provide ways for the application to serialize data, that is, convert the database objects into JSON. We will need to create a serializer object for each of the data objects we want to be able to access. Firstly, we need to create the directory structure so go ahead and create the following directories/files inside our notes/ folder:
Securing the Application Now that we can view our notes on the website, we are going to want a login system. Currently anyone can navigate to our website and see all of our notes. Not ideal. To secure our site we will be using a combination of Djangos built-in auth module and crispy forms. First off we will add the auth modules URLs to the project so open up the URLs file in the project directory and add the following.
Creating the Application To start, we will create a virtual environment for our project and install the required libraries mkdir DjangoNotes cd DjangoNotes python3 -m venv venv source venv/bin/activate pip install -r requirements.txt Now that we have our environment setup we can create out Django application. django-admin startproject DjangoNotes python manage.py startapp notes Whilst we are still doing some admin setup, we need to initialise our database and create ourselves a superuser.
Flask API Template I often use Flask when I am writing a small web interface for an application. Flask proved to be a very simple easy to use framework and so I decided I would write an API. The end goal is to have a database back-end and a simple interface for retrieving and storing notes. However, this post is just about setting up a template and authentication for the API.
Me and My Uni Notes This post is just a small description of the process that occurs in the background after I finish writing some notes. In future I will give more in-depth descriptions of the code and how everything happens. Markdown I write all of my university notes using Markdown syntax. As a cool side project to my uni work I decided that I would write a piece of software (in Java) that would help me in writing these notes.
Basic Java Threads Java provides classes and methods to create multiple threads inside your Java process. This allows you to run multiple different pieces of code at the same time. In the code below each of the worker threads prints out that they have started, wait a random amount of time before printing their message, wait another random amount of time and print that they have stopped. Each time the program runs the output will be in a different order.
Logging with Java When writing applications in Java it is incredibly useful to print out information as you go a long so that you can track what your application is doing and the state of various different variables. One method of doing this is to use print statements, however, when it comes time to package your code into an application, you have to track down and delete/comment out all of these print statements.