tektree blogs, zooming images and a categories list
11
categories.list.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# Categories
|
||||||
|
|
||||||
|
A list of categories used in the blog
|
||||||
|
|
||||||
|
<!-- prettier-ignore -->
|
||||||
|
| category | What it does |
|
||||||
|
| ------------ | -------------------------------------------------------- |
|
||||||
|
| blog | random blog stuff |
|
||||||
|
| IOT | anything to do with IOT |
|
||||||
|
| Homelab | anything to do with my homelab (including smart home...) |
|
||||||
|
| Development | anything to do with regular development |
|
After Width: | Height: | Size: 104 KiB |
After Width: | Height: | Size: 45 KiB |
@ -0,0 +1,43 @@
|
|||||||
|
---
|
||||||
|
title: "TekTree part 1 - TekTree - a christmassy surprise project"
|
||||||
|
date: "2015-12-19"
|
||||||
|
template: "post"
|
||||||
|
category: "IOT"
|
||||||
|
tags:
|
||||||
|
- "tektree"
|
||||||
|
- "christmas"
|
||||||
|
description: "A new maker project based on a big piece of lumber that my parents erected 🤔"
|
||||||
|
disqusId: "15"
|
||||||
|
---
|
||||||
|
|
||||||
|
I'm very excited to announce a new maker project to you guys ! It will be simple, and thus reproducible, yet fun and quite possibly even useful. (oh, and a tad crazy)
|
||||||
|
|
||||||
|
## So? What is it?
|
||||||
|
|
||||||
|
Well.... basically I'm going to assemble and program a little christmas tree thing.
|
||||||
|
|
||||||
|
I got the idea after my parents put up their christmas tree. My mom opted for a more "modern" (so I've been told) kind of tree. This "modern" tree is basically a home made christmastree-y looking thing bolted together with a few screws. (picture below) At first I didn't like the idea of a more modern, less authentic, christmas tree but once it was actually up it didn't look half bad. There were some things missing though. It just didn't make sense to me to create something new yet be limited by old stuff. For example: my parents put a string of lights **around** the wooden boards, why not integrate them? Or why not add a dimmer? Or make it follow some flashy patterns? As you might expect by now I am basically going to recreate, with a bit more finesse, my parent's christmas tree.
|
||||||
|
|
||||||
|
![a picture of my parents' new christmas tree](./media/old.jpg "a picture of my parents' new christmas tree")
|
||||||
|
|
||||||
|
## Open source?
|
||||||
|
|
||||||
|
Of course! All code will be open source! All other stuff (drawings etc.) will also be opened up to the public. Everything can be found on [Github](https://github.com/Mastermindzh/TekTree) once again.
|
||||||
|
|
||||||
|
## Step 1 - Design!
|
||||||
|
|
||||||
|
I've thought long and hard about what kind of "controller" I wanted to use. And of course I immediately wanted to use a Raspberry pi. But I asked myself, why a pi? Why not use something simpler (like an arduino) to control the lights and switches. After some serious brainstorming I decided to go with an arduino in the end. I figured the Raspberry pi zero would be too cumbersome to work with for a simple christmas tree. Besides, I have a lot more uses for a pi zero than I have for an arduino, and I got more arduino's laying around than pi zero's at the moment.
|
||||||
|
|
||||||
|
## Digital drawing
|
||||||
|
|
||||||
|
After deciding to use an arduino I had another big decision to make. Should I follow my parents' example? Or go a different route? In the end I decided my way was better (kids...) and so I decided to laser cut my wooden designs. One of the other big changes I made is to the base. Whereas my parents opted for something rugged I'm going for a slightly more "finished" look. This means that my base is nice and round with a few fun shapes on it and I even speculated about making the circle sit flush with the ground.(which would mean creating bendable wood! A challenge in and of itself.)
|
||||||
|
|
||||||
|
After that came my struggle with the drawing software. I tried creating a drawing in Coreldraw Pro.... that was... a painful experience to say the least. Then I tried drawing with a program called InkScape, while better it still didn't yield any results. Finally I decided to give up and ask for help from a friend.
|
||||||
|
|
||||||
|
Luckily my friend [Ron Nabuurs](http://www.ronnabuurs.nl) is brilliant when it comes to designing a drawing which can be lasercut. So after explaining my idea to [Ron](http://www.ronnabuurs.nl) he decided to help me out. A picture of what we ended up with can be found below. The source file we used can be found on git.
|
||||||
|
|
||||||
|
![Designs for the laser cutter, from left to right: a circular base plate with snow characters. A foldable box cutout and a tree shape](./media/new.jpg "Designs for the laser cutter")
|
||||||
|
|
||||||
|
## So what now ?
|
||||||
|
|
||||||
|
Well.... now I have to actually laser cut the pieces and assemble the tree. If we haven't made any mistakes (or I conveniently forget to mention them to you guys) I should be able to put out another blog this weekend showing you guys both the laser cutting and a test build of the TekTree.
|
BIN
content/posts/2015/tektree-part-2-lasercutting/media/back.jpg
Normal file
After Width: | Height: | Size: 995 KiB |
BIN
content/posts/2015/tektree-part-2-lasercutting/media/back2.jpg
Normal file
After Width: | Height: | Size: 996 KiB |
BIN
content/posts/2015/tektree-part-2-lasercutting/media/bottom.jpg
Normal file
After Width: | Height: | Size: 1.0 MiB |
BIN
content/posts/2015/tektree-part-2-lasercutting/media/bottom2.jpg
Normal file
After Width: | Height: | Size: 849 KiB |
BIN
content/posts/2015/tektree-part-2-lasercutting/media/bottom3.jpg
Normal file
After Width: | Height: | Size: 826 KiB |
BIN
content/posts/2015/tektree-part-2-lasercutting/media/plate.jpg
Normal file
After Width: | Height: | Size: 866 KiB |
BIN
content/posts/2015/tektree-part-2-lasercutting/media/star.jpg
Normal file
After Width: | Height: | Size: 982 KiB |
BIN
content/posts/2015/tektree-part-2-lasercutting/media/tree.jpg
Normal file
After Width: | Height: | Size: 798 KiB |
@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
title: "TekTree part 2 - Lasercutting"
|
||||||
|
date: "2015-12-19:23:00"
|
||||||
|
template: "post"
|
||||||
|
category: "IOT"
|
||||||
|
tags:
|
||||||
|
- "tektree"
|
||||||
|
- "christmas"
|
||||||
|
description: "Dangerous things involving lasers and christmassy figures. Fun!"
|
||||||
|
disqusId: "16"
|
||||||
|
---
|
||||||
|
|
||||||
|
Last friday I actually got to cut the parts for my TekTree! So excited! This is by far the biggest "piece" I have ever laser cut but luckily everything went well. This in part is thanks to my brilliant friend [Ron](http://www.ronnabuurs.nl) who helped me create the sketches for the laser cutter. Thanks again [Ron](http://www.ronnabuurs.nl)!
|
||||||
|
|
||||||
|
**Top tip!** You don't have to laser cut the designs. Just print the designs with a regular printer and stick it on some wood. Then just use something like a bandsaw to cut the pieces!
|
||||||
|
|
||||||
|
## Laser cutting video
|
||||||
|
|
||||||
|
I've gotten so much positive feedback on my last laser cutting video that I decided to make another one. This one is a little different though. It's a compilation of a few different cuts.
|
||||||
|
|
||||||
|
<iframe width="560" height="235" src="https://www.youtube.com/embed/92aTol52q8o?wmode=transparant" frameborder="0" allowfullscreen></iframe>
|
||||||
|
|
||||||
|
## TekTree assembly
|
||||||
|
|
||||||
|
Below you'll find a series of pictures I took while assembling the TekTree.
|
||||||
|
|
||||||
|
![plate](./media/plate.jpg "the baseplate")
|
||||||
|
|
||||||
|
![bottom](./media/bottom.jpg "bottom of the assembly")
|
||||||
|
|
||||||
|
![bottom2](./media/bottom2.jpg "bottom with box closed")
|
||||||
|
|
||||||
|
![tree](./media/tree.jpg "the tree inserted into the base")
|
||||||
|
|
||||||
|
![back2](./media/back2.jpg "the arduino and breadboard will just be hanging in the back")
|
BIN
content/posts/2015/tektree-part-3-wiring/media/wiring1.jpg
Normal file
After Width: | Height: | Size: 304 KiB |
BIN
content/posts/2015/tektree-part-3-wiring/media/wiring2.jpg
Normal file
After Width: | Height: | Size: 278 KiB |
@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
title: "TekTree part 3 - Wiring"
|
||||||
|
date: "2015-12-24"
|
||||||
|
template: "post"
|
||||||
|
category: "IOT"
|
||||||
|
tags:
|
||||||
|
- "tektree"
|
||||||
|
- "christmas"
|
||||||
|
description: "Read about me being tangled with wires and generally just making a mess of things"
|
||||||
|
disqusId: "17"
|
||||||
|
---
|
||||||
|
|
||||||
|
In the 3rd part of my TekTree project I'll show you guys how to wire everything. This time I even used separate colours for the power,ground and signal wires. So no more complaining ! ^\_^ All in all I think the result looks absolutely wicked. Even without the arduino case which has yet to come in the mail. (and probably won't fit)
|
||||||
|
|
||||||
|
## Wiring part 1 - schematics
|
||||||
|
|
||||||
|
Before I started to jam wires in every nook and cranny I could find I had to come up with a plan. Most of that plan has been put into a "Fritzing" sketch which can be found below and on [Github](https://github.com/Mastermindzh/TekTree). The only thing I couldn't figure out how to model on fritzing is the actual christmas tree and the power cord for the arduino.
|
||||||
|
|
||||||
|
The arduino will get power from a regular adaptor. The only modification I did to the adapter is putting a button on one of the wires. And the only reason I did that is because I'm too lazy to unplug the TekTree when I want to turn it off :)
|
||||||
|
|
||||||
|
![Wiring of the back of the Tektree. You can see a lot of jumper wires sticking out and connecting to LEDs](./media/wiring1.jpg)
|
||||||
|
|
||||||
|
## Why so many wires?
|
||||||
|
|
||||||
|
I want the project to be "manageable" for everyone. To do this I kept the wiring as simple as possible. Every LED has 2 prongs, 1 goes to ground 1 goes to the arduino. Simple. Same goes for the potentiometers, 3 legs, 1 power 1 ground 1 signal. The only led's I did bundle together (in terms of wiring) is the star. I did this to create a single star instead of multiple led's.
|
||||||
|
|
||||||
|
## Well you could've made it way prettier... and....
|
||||||
|
|
||||||
|
Well yes, as all of us know I'm perfectly capable of designing a [refined build](/images/blogs/han4pi/Front_thumb.png). I didn't want to go with a pcb this time however because that would make the barrier to entry way higher on this project. And that is something I definitely **don't** want.
|
||||||
|
|
||||||
|
I also didn't "group" all my ground wires together. (led -> led -> led -> board) This would've made the project a lot neater but it wouldn't be anywhere near as service friendly. (which was kinda the idea...)
|
||||||
|
|
||||||
|
Well then, I feel like I prepared you guys enough to show the (complicated looking, but very simple) wiring. Check it out below!
|
||||||
|
|
||||||
|
## Wiring part 2 - Actual wiring
|
||||||
|
|
||||||
|
Below you'll find the pictures I took while I was wiring the TekTree.
|
||||||
|
|
||||||
|
![Wiring of the back of the Tektree. You can see a lot of jumper wires sticking out and connecting to LEDs](./media/wiring2.jpg)
|
@ -0,0 +1,209 @@
|
|||||||
|
---
|
||||||
|
title: "TekTree part 4 - programming"
|
||||||
|
date: "2015-12-24:23:00"
|
||||||
|
template: "post"
|
||||||
|
category: "IOT"
|
||||||
|
tags:
|
||||||
|
- "tektree"
|
||||||
|
- "christmas"
|
||||||
|
description: "I finally get to the juicy code of my home-made christmas tree shambles!"
|
||||||
|
disqusId: "18"
|
||||||
|
---
|
||||||
|
|
||||||
|
In the last installment of the series I show you how to program the arduino to work with the TekTree we built. I would advise each and every one of you to download my sketch and try it but after that start experimenting with your own designs!
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
Before we start writing complicated code we first need to design a very simple test sketch for the leds. The script I used can be found below or at [Github](https://github.com/Mastermindzh/TekTree) under the following directory: Testing -> LedTest
|
||||||
|
|
||||||
|
The code is quite simple. It sets all led's as output and runs through them. back and forth
|
||||||
|
|
||||||
|
```ino
|
||||||
|
/*
|
||||||
|
Rick van Lieshout
|
||||||
|
24-12-2015
|
||||||
|
LICENSE: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
const int DELAYTIME = 100;
|
||||||
|
const int NUMBEROFPINS = 11;
|
||||||
|
const int pinArray[NUMBEROFPINS] = {0,1,2,3,4,5,6,7,8,9,10};
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
//initiate pins
|
||||||
|
for (int thisPin = 0; thisPin < NUMBEROFPINS; thisPin++) {
|
||||||
|
pinMode(pinArray[thisPin], OUTPUT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
// loop from the lowest pin to the highest:
|
||||||
|
for (int thisPin = 0; thisPin < NUMBEROFPINS; thisPin++) {
|
||||||
|
// turn the led on:
|
||||||
|
digitalWrite(pinArray[thisPin], HIGH);
|
||||||
|
// wait for a bit
|
||||||
|
delay(DELAYTIME);
|
||||||
|
// turn the led off:
|
||||||
|
digitalWrite(pinArray[thisPin], LOW);
|
||||||
|
}
|
||||||
|
// loop from the highest pin to the lowest:
|
||||||
|
for (int thisPin = NUMBEROFPINS - 1; thisPin >= 0; thisPin--) {
|
||||||
|
// turn the led on:
|
||||||
|
digitalWrite(pinArray[thisPin], HIGH);
|
||||||
|
// wait for a bit
|
||||||
|
delay(DELAYTIME);
|
||||||
|
// turn the led off:
|
||||||
|
digitalWrite(pinArray[thisPin], LOW);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Assuming all went well you should now see the led's come on 1 by 1 and create a little wave effect (first pattern down!)
|
||||||
|
|
||||||
|
Now that we know it all works let's clean up the code and add some pattern handling.
|
||||||
|
|
||||||
|
## The finished code / result
|
||||||
|
|
||||||
|
The complete code can once again be found on github or directly below the video.
|
||||||
|
That's it for now. **Merry christmas and a happy new year folks!**
|
||||||
|
|
||||||
|
<iframe width="560" height="235" src="https://www.youtube.com/embed/VlQoVNe77Ys" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
|
||||||
|
|
||||||
|
## The code that makes it work
|
||||||
|
|
||||||
|
```ino
|
||||||
|
/*
|
||||||
|
Rick van Lieshout
|
||||||
|
24-12-2015
|
||||||
|
LICENSE: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** Constant value's, these have to be changed manually **/
|
||||||
|
const int MAXSEQUENCES= 20; // number of steps in the largest sequence. Could make it 999 but that would affect performance
|
||||||
|
const int NUMBEROFPINS = 11; // number of leds
|
||||||
|
const int NUMBEROFPATTERNS = 5; // number of patterns specified
|
||||||
|
const int DELAYPOT = 0; // number of pin that pot is connected to
|
||||||
|
const int BUTTONPIN = 12; // number of pin that button is connected to
|
||||||
|
const int pinArray[NUMBEROFPINS] = {0,1,2,3,4,5,6,7,8,9,10}; // pins where leds are connected
|
||||||
|
|
||||||
|
/** Regular variables, program can alter these **/
|
||||||
|
int previousbuttonstate = 0; // used to detect whether button is pressed
|
||||||
|
int buttonstate = 0; // used to detect whether button is pressed
|
||||||
|
int pattern = 0; // pattern to start with
|
||||||
|
|
||||||
|
/** massive array which holds the patterns **/
|
||||||
|
const byte LEDsequence [NUMBEROFPATTERNS][MAXSEQUENCES][NUMBEROFPINS] = {
|
||||||
|
{
|
||||||
|
{0,0,0,0,0,0,0,0,0,0,0},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{1,1,1,1,1,1,1,1,1,1,1},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{1,0,0,0,0,0,0,0,0,0,1},
|
||||||
|
{0,1,0,0,0,0,0,0,0,0,1},
|
||||||
|
{0,0,1,0,0,0,0,0,0,0,1},
|
||||||
|
{0,0,0,1,0,0,0,0,0,0,1},
|
||||||
|
{0,0,0,0,1,0,0,0,0,0,1},
|
||||||
|
{0,0,0,0,0,1,0,0,0,0,1},
|
||||||
|
{0,0,0,0,0,0,1,0,0,0,1},
|
||||||
|
{0,0,0,0,0,0,0,1,0,0,1},
|
||||||
|
{0,0,0,0,0,0,0,0,1,0,1},
|
||||||
|
{0,0,0,0,0,0,0,0,0,1,1}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{1,0,0,0,0,0,0,0,0,0,1},
|
||||||
|
{0,1,0,0,0,0,0,0,0,0,1},
|
||||||
|
{0,0,1,0,0,0,0,0,0,0,1},
|
||||||
|
{0,0,0,1,0,0,0,0,0,0,1},
|
||||||
|
{0,0,0,0,1,0,0,0,0,0,1},
|
||||||
|
{0,0,0,0,0,1,0,0,0,0,1},
|
||||||
|
{0,0,0,0,0,0,1,0,0,0,1},
|
||||||
|
{0,0,0,0,0,0,0,1,0,0,1},
|
||||||
|
{0,0,0,0,0,0,0,0,1,0,1},
|
||||||
|
{0,0,0,0,0,0,0,0,0,1,1},
|
||||||
|
{0,0,0,0,0,0,0,0,1,0,1},
|
||||||
|
{0,0,0,0,0,0,0,1,0,0,1},
|
||||||
|
{0,0,0,0,0,0,1,0,0,0,1},
|
||||||
|
{0,0,0,0,0,1,0,0,0,0,1},
|
||||||
|
{0,0,0,0,1,0,0,0,0,0,1},
|
||||||
|
{0,0,0,1,0,0,0,0,0,0,1},
|
||||||
|
{0,0,1,0,0,0,0,0,0,0,1},
|
||||||
|
{0,1,0,0,0,0,0,0,0,0,1}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{1,0,0,0,0,0,0,0,0,1,1},
|
||||||
|
{0,1,0,0,0,0,0,0,1,0,1},
|
||||||
|
{0,0,1,0,0,0,0,1,0,0,1},
|
||||||
|
{0,0,0,1,0,0,1,0,0,0,1},
|
||||||
|
{0,0,0,0,1,1,0,0,0,0,1},
|
||||||
|
{0,0,0,1,0,0,1,0,0,0,1},
|
||||||
|
{0,0,1,0,0,0,0,1,0,0,1},
|
||||||
|
{0,1,0,0,0,0,0,0,1,0,1},
|
||||||
|
{1,0,0,0,0,0,0,0,0,1,1}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Setup only gets run once **/
|
||||||
|
void setup(){
|
||||||
|
//set all pins as input/output
|
||||||
|
initializePins();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Loop is constantly running **/
|
||||||
|
void loop() {
|
||||||
|
// read button state
|
||||||
|
buttonstate = digitalRead(BUTTONPIN);
|
||||||
|
// if button state changed
|
||||||
|
if(buttonstate != previousbuttonstate){
|
||||||
|
previousbuttonstate = buttonstate;
|
||||||
|
// check value and add to pattern
|
||||||
|
if(buttonstate == HIGH){
|
||||||
|
if(pattern +1 == NUMBEROFPATTERNS){
|
||||||
|
pattern = 0;
|
||||||
|
}else{
|
||||||
|
pattern++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Loop through all the arrays and toggle pins on or off.
|
||||||
|
for (int sequence=0;sequence<getSequences(pattern);sequence++) {
|
||||||
|
for (int pin=0;pin<NUMBEROFPINS;pin++) {
|
||||||
|
digitalWrite(pinArray[pin], LEDsequence[pattern][sequence][pin]);
|
||||||
|
}
|
||||||
|
// delay between sequences, should use millis if you want instant response on the button
|
||||||
|
delay(getDelay(DELAYPOT));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Count the number of sequences in a specific pattern **/
|
||||||
|
int getSequences(int pattern){
|
||||||
|
byte amount = 0;
|
||||||
|
for(byte i = 0; i<MAXSEQUENCES; i++){
|
||||||
|
int total = 0;
|
||||||
|
for(int pin=0; pin<NUMBEROFPINS; pin++){
|
||||||
|
total+=LEDsequence[pattern][i][pin];
|
||||||
|
}
|
||||||
|
if(total>0){
|
||||||
|
amount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** get value of pot **/
|
||||||
|
int getDelay(int potnr){
|
||||||
|
return analogRead(potnr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set all pins as either output or input **/
|
||||||
|
void initializePins(){
|
||||||
|
pinMode(BUTTONPIN, INPUT);
|
||||||
|
for (int pin=0;pin<NUMBEROFPINS;pin++) {
|
||||||
|
pinMode(pinArray[pin], OUTPUT); // we make all the declarations at once
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
```
|
@ -0,0 +1,46 @@
|
|||||||
|
---
|
||||||
|
title: "My extended leave, status updates and other stuff"
|
||||||
|
date: "2016-09-02"
|
||||||
|
template: "post"
|
||||||
|
category: "blog"
|
||||||
|
tags:
|
||||||
|
- "timeout"
|
||||||
|
- "extended"
|
||||||
|
- "leave"
|
||||||
|
description: "My blogs aren't flowing like they used to :/. Is it dead?"
|
||||||
|
disqusId: "19"
|
||||||
|
---
|
||||||
|
|
||||||
|
So….. last blog post was in December of last year. Does that mean the blog is dead? Well I’m happy to report that is NOT what it means! In this blog post I’ll address why I’ve been on an extended leave and I have some exciting news to boot!
|
||||||
|
|
||||||
|
## Good news always comes first!
|
||||||
|
|
||||||
|
Before I start on my rant about being away for so long I’d better tell you all some exciting news. And boy do I have quite a bit of it!
|
||||||
|
|
||||||
|
First of all, if you hadn’t noticed yet, the personal website has gotten a facelift! I have added a new “Software” page, this page will contain software I made without a contract and open source projects I’ve worked on. Furthermore, I have updated the CV with some new job information and a couple of snazzy logos. The Portfolio page got trimmed down a bit (moved some stuff to Software) and the contact page has gotten a nice new look with an actual form instead of just social buttons. Lastly, I added an “Other sites” drop-down menu. This menu will house links to various other websites of which I am the owner / co-owner. As some of those keen-eyed people among you will have noticed I also upgraded my “Disclaimer” page and added a new “RSS feed” to the footer of the site.
|
||||||
|
|
||||||
|
All in all, quite a few changes which will allow me to further separate Mi-soft.nl from my personal website. (update to Mi-soft.nl expected somewhere later this year hehe)
|
||||||
|
|
||||||
|
## More good news!?
|
||||||
|
|
||||||
|
Oh yes! I have recently started working on Three, yes Three, new projects. I will probably blog about all of these projects but in case I don’t here’s a little overview:
|
||||||
|
|
||||||
|
First up is a new Python (Flask) REST API which makes getting Linux OS information a breeze! I started this project because I wanted to recreate my old hardware info system (written in Java) and generally improve it overall. I started out working on this by myself but soon joined up with my old friend Janco (more on him later). We haven’t done all too much about it but in its current state it can already serve most, if not all, CPU and Memory information. Though the best feature of this new API is arguably its name. I named it after the person I have cherished for over six years now, [Sammy](https://github.com/SammySolutions).
|
||||||
|
|
||||||
|
I also finally bit the bullet regarding “Linfinity”. For a while now I’ve been wanting to create a “software install script generator” for Linux which I can use to install Linux software easily on a multitude of systems. Linfinity will be a web tool which will be able to generate software install scripts for various different distributions (aiming for at least: Arch, Ubuntu and Raspbian).
|
||||||
|
|
||||||
|
Lastly, I have some “maker” news. A friend and I have decided to try our hand at creating a Raspberry Pi workplace for the masses. We found an absolutely perfect display to use in combination with the Raspberry pi and have devised a way to mount it and the Rasberry Pi in a single chassis. Cables will be mostly routed within the unit and it all can be powered by a single standard 2.1mm adapter! More news about this soon!
|
||||||
|
|
||||||
|
## Moving away from Digitalocean
|
||||||
|
|
||||||
|
As of today I no longer have any Digitalocean droplets. Not because they offer a bad service but because they are too expensive for what I was using them for. The only real purpose my droplet still had was handling go8.nl and it’s traffic. I have since moved go8.nl over to Sohosted purely because it is a lot cheaper :).
|
||||||
|
|
||||||
|
## The rekindled friendship?
|
||||||
|
|
||||||
|
As some of you might know Janco and I completely split up about a year and a half ago after a rather lengthy fight between us. In this year and a half apart we both calmed down a bit and after a good talk we’ve decided to pick things up again. So far everything is going well and we are working on keeping it that way. Even though programming together will certainly add to both of our stress levels , and probably lead to a couple of smaller fights, we have decided to team up to create [Sammy](https://github.com/SammySolutions), my new REST API for extracting Linux OS information.
|
||||||
|
|
||||||
|
One of my other good friends (Jelle) also happened to come by some extra free time these past months and we’ve been using that time to explore the magical world of Tamriel (ESO online) and kick some butt (Awesomenauts) together.
|
||||||
|
|
||||||
|
So all these things combined have been taking up most of my free time and motivation. Which leaves none for writing blogs unfortunately. I will try to improve upon this though.
|
||||||
|
|
||||||
|
Well that's it for me folks, Have a great day and may happiness surround you :)
|
@ -26,7 +26,7 @@ After replacing the "failed" drive and letting the machine run for a while I got
|
|||||||
|
|
||||||
Something was up... and after countless hours of fighting with my server I finally figured it out. The SATA port on the controller was faulty. It didn't error, it didn't smoke, it looked fine. It even held on to the cable just fine (cause of those tiny little lips on SATA cables) so it was kinda hard to find out that the SATA port was faulty.
|
Something was up... and after countless hours of fighting with my server I finally figured it out. The SATA port on the controller was faulty. It didn't error, it didn't smoke, it looked fine. It even held on to the cable just fine (cause of those tiny little lips on SATA cables) so it was kinda hard to find out that the SATA port was faulty.
|
||||||
|
|
||||||
![picture of a random yellow sata cable](./images/sata.jpg)
|
![picture of a random yellow sata cable](./media/sata.jpg "a random yellow SATA cable")
|
||||||
|
|
||||||
So, with a way to reproducibly "fail" known good drives it was just a matter of plugging the SATA cable into another port and go on with my day.... or so I thought....
|
So, with a way to reproducibly "fail" known good drives it was just a matter of plugging the SATA cable into another port and go on with my day.... or so I thought....
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ title: Scala Day 0 - What is Scala?
|
|||||||
date: "2017-03-30"
|
date: "2017-03-30"
|
||||||
template: "post"
|
template: "post"
|
||||||
draft: false
|
draft: false
|
||||||
category: "Development/slsw"
|
category: "Development"
|
||||||
tags:
|
tags:
|
||||||
- "Development"
|
- "Development"
|
||||||
- "slsw"
|
- "slsw"
|
@ -3,7 +3,7 @@ title: Scala Day 1 - The Basics
|
|||||||
date: "2017-04-02"
|
date: "2017-04-02"
|
||||||
template: "post"
|
template: "post"
|
||||||
draft: false
|
draft: false
|
||||||
category: "Development/slsw"
|
category: "Development"
|
||||||
tags:
|
tags:
|
||||||
- "Development"
|
- "Development"
|
||||||
- "slsw"
|
- "slsw"
|
||||||
|
@ -3,7 +3,7 @@ title: Scala Day 2 - Let's get functional
|
|||||||
date: "2017-04-03"
|
date: "2017-04-03"
|
||||||
template: "post"
|
template: "post"
|
||||||
draft: false
|
draft: false
|
||||||
category: "Development/slsw"
|
category: "Development"
|
||||||
tags:
|
tags:
|
||||||
- "Development"
|
- "Development"
|
||||||
- "slsw"
|
- "slsw"
|
||||||
|
@ -3,7 +3,7 @@ title: Scala Day 3 - Concurrency is key!
|
|||||||
date: "2017-04-04"
|
date: "2017-04-04"
|
||||||
template: "post"
|
template: "post"
|
||||||
draft: false
|
draft: false
|
||||||
category: "Development/slsw"
|
category: "Development"
|
||||||
tags:
|
tags:
|
||||||
- "Development"
|
- "Development"
|
||||||
- "slsw"
|
- "slsw"
|
||||||
|
@ -3,7 +3,7 @@ title: Scala Day 4 - A challenge!
|
|||||||
date: "2017-04-05"
|
date: "2017-04-05"
|
||||||
template: "post"
|
template: "post"
|
||||||
draft: false
|
draft: false
|
||||||
category: "Development/slsw"
|
category: "Development"
|
||||||
tags:
|
tags:
|
||||||
- "Development"
|
- "Development"
|
||||||
- "slsw"
|
- "slsw"
|
||||||
|
@ -8,13 +8,21 @@ tags:
|
|||||||
- "architecture"
|
- "architecture"
|
||||||
- "writing"
|
- "writing"
|
||||||
description: "Good software design practices and a few perfectionistic tendencies lead to almost 5 years without any writing. This blog is a deep dive into a few of the struggles of the past 5 years"
|
description: "Good software design practices and a few perfectionistic tendencies lead to almost 5 years without any writing. This blog is a deep dive into a few of the struggles of the past 5 years"
|
||||||
# draft: false
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Wanting to perfect a site ...
|
Wanting to perfect a site ...
|
||||||
lots of theming issues
|
lots of theming issues
|
||||||
|
|
||||||
## The posts query bug
|
## Things I've changed
|
||||||
|
|
||||||
|
- Darkmode + switch
|
||||||
|
- Header on blogs
|
||||||
|
- prism.js darkmode + themes
|
||||||
|
- tables
|
||||||
|
- quotes
|
||||||
|
- image zoom
|
||||||
|
|
||||||
|
### The posts query bug
|
||||||
|
|
||||||
My website has a lot more pages than the official example on Github.
|
My website has a lot more pages than the official example on Github.
|
||||||
Their postsQuery retrieves everything with a slug
|
Their postsQuery retrieves everything with a slug
|
||||||
|
@ -98,12 +98,18 @@ export default {
|
|||||||
options: {
|
options: {
|
||||||
maxWidth: 960,
|
maxWidth: 960,
|
||||||
withWebp: true,
|
withWebp: true,
|
||||||
|
linkImagesToOriginal: false,
|
||||||
|
showCaptions: ["title"],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
resolve: "gatsby-remark-responsive-iframe",
|
resolve: "gatsby-remark-responsive-iframe",
|
||||||
options: { wrapperStyle: "margin-bottom: 1.0725rem" },
|
options: { wrapperStyle: "margin-bottom: 1.0725rem" },
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
resolve: "gatsby-remark-images-medium-zoom",
|
||||||
|
options: { background: "rgb(0, 0, 0,50%)" },
|
||||||
|
},
|
||||||
"gatsby-remark-autolink-headers",
|
"gatsby-remark-autolink-headers",
|
||||||
"gatsby-remark-prismjs",
|
"gatsby-remark-prismjs",
|
||||||
"gatsby-remark-copy-linked-files",
|
"gatsby-remark-copy-linked-files",
|
||||||
|
39
package-lock.json
generated
@ -31,6 +31,7 @@
|
|||||||
"gatsby-remark-copy-linked-files": "^5.23.0",
|
"gatsby-remark-copy-linked-files": "^5.23.0",
|
||||||
"gatsby-remark-external-links": "0.0.4",
|
"gatsby-remark-external-links": "0.0.4",
|
||||||
"gatsby-remark-images": "^6.23.0",
|
"gatsby-remark-images": "^6.23.0",
|
||||||
|
"gatsby-remark-images-medium-zoom": "^1.7.0",
|
||||||
"gatsby-remark-prismjs": "^6.23.0",
|
"gatsby-remark-prismjs": "^6.23.0",
|
||||||
"gatsby-remark-responsive-iframe": "^5.23.0",
|
"gatsby-remark-responsive-iframe": "^5.23.0",
|
||||||
"gatsby-remark-smartypants": "^5.23.0",
|
"gatsby-remark-smartypants": "^5.23.0",
|
||||||
@ -2231,6 +2232,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
||||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
|
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
|
||||||
},
|
},
|
||||||
|
"node_modules/@fastly/performance-observer-polyfill": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@fastly/performance-observer-polyfill/-/performance-observer-polyfill-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-hmXJBYhIs77KPyg/IcPM5sDeQSPLrTzD6DqGfSUUtvEUoQxbW6nxHYCYJE8CP+Ay+OUqLZlTpW+w1OEOZWckzQ=="
|
||||||
|
},
|
||||||
"node_modules/@fortawesome/fontawesome-common-types": {
|
"node_modules/@fortawesome/fontawesome-common-types": {
|
||||||
"version": "6.2.0",
|
"version": "6.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.2.0.tgz",
|
||||||
@ -14669,6 +14675,15 @@
|
|||||||
"gatsby-plugin-sharp": "^4.0.0-next"
|
"gatsby-plugin-sharp": "^4.0.0-next"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/gatsby-remark-images-medium-zoom": {
|
||||||
|
"version": "1.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/gatsby-remark-images-medium-zoom/-/gatsby-remark-images-medium-zoom-1.7.0.tgz",
|
||||||
|
"integrity": "sha512-TLaq+ua+nO2CX/B/FnWB0OvJiLdplzbRCXrgCxYoZs3RkN5IfUu9BJYKEFjzx6J3uhwLvBA7XqE5cFOZ2cu4AQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"@fastly/performance-observer-polyfill": "^1.1.1",
|
||||||
|
"medium-zoom": "^1.0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/gatsby-remark-images/node_modules/ansi-styles": {
|
"node_modules/gatsby-remark-images/node_modules/ansi-styles": {
|
||||||
"version": "4.3.0",
|
"version": "4.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||||
@ -22582,6 +22597,11 @@
|
|||||||
"node": ">= 0.6"
|
"node": ">= 0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/medium-zoom": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.0.6.tgz",
|
||||||
|
"integrity": "sha512-UdiUWfvz9fZMg1pzf4dcuqA0W079o0mpqbTnOz5ip4VGYX96QjmbM+OgOU/0uOzAytxC0Ny4z+VcYQnhdifimg=="
|
||||||
|
},
|
||||||
"node_modules/mem": {
|
"node_modules/mem": {
|
||||||
"version": "8.1.1",
|
"version": "8.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz",
|
||||||
@ -35846,6 +35866,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@fastly/performance-observer-polyfill": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@fastly/performance-observer-polyfill/-/performance-observer-polyfill-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-hmXJBYhIs77KPyg/IcPM5sDeQSPLrTzD6DqGfSUUtvEUoQxbW6nxHYCYJE8CP+Ay+OUqLZlTpW+w1OEOZWckzQ=="
|
||||||
|
},
|
||||||
"@fortawesome/fontawesome-common-types": {
|
"@fortawesome/fontawesome-common-types": {
|
||||||
"version": "6.2.0",
|
"version": "6.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.2.0.tgz",
|
||||||
@ -45653,6 +45678,15 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"gatsby-remark-images-medium-zoom": {
|
||||||
|
"version": "1.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/gatsby-remark-images-medium-zoom/-/gatsby-remark-images-medium-zoom-1.7.0.tgz",
|
||||||
|
"integrity": "sha512-TLaq+ua+nO2CX/B/FnWB0OvJiLdplzbRCXrgCxYoZs3RkN5IfUu9BJYKEFjzx6J3uhwLvBA7XqE5cFOZ2cu4AQ==",
|
||||||
|
"requires": {
|
||||||
|
"@fastly/performance-observer-polyfill": "^1.1.1",
|
||||||
|
"medium-zoom": "^1.0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"gatsby-remark-prismjs": {
|
"gatsby-remark-prismjs": {
|
||||||
"version": "6.23.0",
|
"version": "6.23.0",
|
||||||
"resolved": "https://registry.npmjs.org/gatsby-remark-prismjs/-/gatsby-remark-prismjs-6.23.0.tgz",
|
"resolved": "https://registry.npmjs.org/gatsby-remark-prismjs/-/gatsby-remark-prismjs-6.23.0.tgz",
|
||||||
@ -50972,6 +51006,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||||
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
|
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
|
||||||
},
|
},
|
||||||
|
"medium-zoom": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.0.6.tgz",
|
||||||
|
"integrity": "sha512-UdiUWfvz9fZMg1pzf4dcuqA0W079o0mpqbTnOz5ip4VGYX96QjmbM+OgOU/0uOzAytxC0Ny4z+VcYQnhdifimg=="
|
||||||
|
},
|
||||||
"mem": {
|
"mem": {
|
||||||
"version": "8.1.1",
|
"version": "8.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz",
|
||||||
|
@ -66,6 +66,7 @@
|
|||||||
"gatsby-remark-copy-linked-files": "^5.23.0",
|
"gatsby-remark-copy-linked-files": "^5.23.0",
|
||||||
"gatsby-remark-external-links": "0.0.4",
|
"gatsby-remark-external-links": "0.0.4",
|
||||||
"gatsby-remark-images": "^6.23.0",
|
"gatsby-remark-images": "^6.23.0",
|
||||||
|
"gatsby-remark-images-medium-zoom": "^1.7.0",
|
||||||
"gatsby-remark-prismjs": "^6.23.0",
|
"gatsby-remark-prismjs": "^6.23.0",
|
||||||
"gatsby-remark-responsive-iframe": "^5.23.0",
|
"gatsby-remark-responsive-iframe": "^5.23.0",
|
||||||
"gatsby-remark-smartypants": "^5.23.0",
|
"gatsby-remark-smartypants": "^5.23.0",
|
||||||
@ -88,8 +89,8 @@
|
|||||||
"@swc/core": "^1.3.1",
|
"@swc/core": "^1.3.1",
|
||||||
"@swc/jest": "^0.2.22",
|
"@swc/jest": "^0.2.22",
|
||||||
"@types/gatsby-transformer-remark": "^2.9.1",
|
"@types/gatsby-transformer-remark": "^2.9.1",
|
||||||
"@types/node": "^18.7.3",
|
|
||||||
"@types/jest": "^29.0.3",
|
"@types/jest": "^29.0.3",
|
||||||
|
"@types/node": "^18.7.3",
|
||||||
"@types/react": "^18.0.20",
|
"@types/react": "^18.0.20",
|
||||||
"@types/react-dom": "^18.0.6",
|
"@types/react-dom": "^18.0.6",
|
||||||
"@types/react-helmet": "^6.1.5",
|
"@types/react-helmet": "^6.1.5",
|
||||||
|