new post x small fixes

This commit is contained in:
Sid 2022-11-30 20:23:53 +01:00
parent a570b2f9f3
commit 9d7f662b94
11 changed files with 228 additions and 14 deletions

View file

@ -1,9 +1,62 @@
---
title: "Gameboy Color mod"
date: 2022-09-23T21:08:27+02:00
description: ""
title: "Bringing new life into my old GameBoy Color!"
date: 2022-11-30T08:03:57+02:00
description: "The pinnacle of Nostalgia."
author: "Sindre Kjelsrud"
image: ""
draft: true
draft: false
---
### The Idea
During the 2022 summer I got hooked on watching YouTube videos about modding retro consoles, all from the GameBoy Color to the Nintendo Wii. It was like injecting pure dopamine in to my brain one video at a time lmao.
But one video, by [Macho Nacho Productions](https://www.youtube.com/watch?v=yqnrEpcaans), really stood out to me. Basically he made a "Super" GameBoy Color, where he crammed like 4 mods into it. I immediatly wanted to try something like it myself, so I took my dusty, old, purple GameBoy Color with me back to Bergen, where I study.
![GBoy gif](https://mir-s3-cdn-cf.behance.net/project_modules/disp/df45fa38279981.575b65f4c025d.gif)
[*GameBoy Color CGI by Alexander Gueres*](https://www.behance.net/gallery/38279981/Game-Boy-Color-1998-Full-CGI)
---
### Products
As soon as I got to Bergen I ordered a GameBoy Color 2.0 Q5 IPS Laminated Backlight Kit, a white GameBoy Color 2.0 Laminated Q5 IPS Ready Shell and some purple buttons/pads from [FunnyPlaying](https://retrogamerepairshop.com/), and waited excitedly for them to arrive..
![Products](/img/gameboy-post/funnyplaying-products.jpg)
```js
Photo of my old GameBoy Color and the products from FunnyPlaying
```
---
### Modding process
The first step of the project was to disassemble the old GameBoy and clean the circuit board. This process was fairly easy as it only involved rubbing some q-tips, dipped in isopropyl alcohol, around the board to remove dirt and dust.
![Cleaning2](/img/gameboy-post/cleaning.jpg)
```js
Cleaning the circuit board with some isopropyl alcohol
```
---
The soldering part of the project wasn't something you need to do unless you wanted the ability to change the color of the logo and/or change the screens x- and y-position.
**Long story short**, it didn't go exactly as planned hehe.. I managed to break one circuit board by fucking up somehow withss the soldering of start and select, so had to buy a whole new GameBoy for it..
I still haven't soldered on the new board (that's why the logo is kinda scuffed lol). I'm kinda scared to do it, but one day I will!
| | |
|- | - |
|![Soldering1](/img/gameboy-post/soldering-1.jpg)|![Soldering2](/img/gameboy-post/soldering-2.jpg) |
```js
Photo of me trying to solder.. For a noob it was pretty good!
```
---
### End result
Here is the "finished" product. I'm very satisfied with the outcome as this was my first mod like ever. The games look so good and I will definitely enjoy taking this with me on trips forward!
I recommend trying this out if you want to bust out your old GameBoy Color again and play some good old Pokémon games!
| | |
|- | - |
![ShowcasePokémon](/img/gameboy-post/showcasePok-1.jpg)|![ShowcaseBattleOfSteel](/img/gameboy-post/showcaseBoS-1.jpg)
```js
Pokémon Yellow & Blades of Steel 1991
```
...

View file

@ -20,7 +20,7 @@ Experience
----------
**Operator, Manpower, Coop Main Warehouse, Loading-Department**
*2022 - 2022*
> The main tasks consist of helping the truckdrivers with loading, localisation/retrieving of products and pallets using a forklift, and acquiring necessary papers before departure, as well as the use of Witronsoftware and general maintenance of the area
> The main tasks consist of helping the truckdrivers with loading, localisation/retrieving of products and pallets using a forklift, and acquiring necessary papers before departure, as well as the use of Witronsoftware and general maintenance of the area.
**Lifeguard, Lillestrom municipality, Nebbursvollen Open-air swimming pool**
*2019 - 2022*
@ -61,13 +61,13 @@ sidBot | Python
<br><br>
My Personal Website | HTML / CSS
My Personal Website | Hugo Framework
: A personal website that gets updated during my education. [Github Repo](https://github.com/SindreKjelsrud/sindrekjelsrud.github.io)
<br><br>
CookieClicker | Java
: A game where you collect cookies by clicking on a cookie. [Github Repo](https://github.com/SindreKjelsrud/CookieClicker)
Wordle | Java
: A clone of the game Wordle. [Github Repo](https://github.com/SindreKjelsrud/Wordle)
-----------------------------------------------
@ -75,7 +75,7 @@ Extra Section
----------
IT-skills
: Knowledge of **Java**, **HTML/CSS** & **Office 365**
: Knowledge of **Java**, **HTML/CSS** & **Office 365**.
Basic knowledge of **postgreSQL** & **Python**.
<br><br>
@ -95,4 +95,4 @@ Language
References
----------
Provided on request.
Provided on request.

View file

@ -14,10 +14,16 @@ _Dec. 2021 - Mar. 2022, Python_
- For example, the command "!plsdog" uses this [API](https://dog.ceo/api) to show the user some cute pictures of dogs across the internet.
---
### My Personal Website
_Sep. 2022 - Now, HTML, CSS, JS_
_Sep. 2022 - Now, Hugo Framework_
>Github Repo: <https://github.com/SindreKjelsrud/sindrekjelsrud.github.io>
- This website uses [PaperMod](https://github.com/adityatelange/hugo-PaperMod) theme and is based on Hugo.
---
### Wordle 🔠
_Oct. 2022 - Now, Java_
>Github Repo: <https://github.com/SindreKjelsrud/Wordle>
- A recreation of the popular game [Wordle](https://www.nytimes.com/games/wordle/index.html) by Josh Wardle/The New York Times, written in Java.
- Still needs some finishing touches.. (bug fixes, cleaning up code etc.)
---
### 🍪 Cookie Clicker
_Nov. 2021 - Dec. 2021, Java_
>Github Repo: <https://github.com/SindreKjelsrud/CookieClicker>
@ -27,5 +33,6 @@ _Nov. 2021 - Dec. 2021, Java_
---
# Hobby Projects
### Gameboy Color mod
_Sep. 2022 - (waiting for parts..)_
- in the making.. (pictures coming)
_Sep. 2022 - Nov. 2022_
>Blog Post: https://sindrekjelsrud.github.io/blog-posts/gameboycolormod
![Example](/img/gameboy-post/example.jpg)

154
layouts/partials/toc.html Normal file
View file

@ -0,0 +1,154 @@
{{- $headers := findRE "<h[1-6].*?>(.|\n])+?</h[1-6]>" .Content -}}
{{- $has_headers := ge (len $headers) 1 -}}
{{- if $has_headers -}}
<aside id="toc-container" class="toc-container wide">
<div class="toc">
<details {{if (.Param "TocOpen") }} open{{ end }}>
<summary accesskey="c" title="(Alt + C)">
<span class="details">{{- i18n "toc" | default "Table of Contents" }}</span>
</summary>
<div class="inner">
{{- $largest := 6 -}}
{{- range $headers -}}
{{- $headerLevel := index (findRE "[1-6]" . 1) 0 -}}
{{- $headerLevel := len (seq $headerLevel) -}}
{{- if lt $headerLevel $largest -}}
{{- $largest = $headerLevel -}}
{{- end -}}
{{- end -}}
{{- $firstHeaderLevel := len (seq (index (findRE "[1-6]" (index $headers 0) 1) 0)) -}}
{{- $.Scratch.Set "bareul" slice -}}
<ul>
{{- range seq (sub $firstHeaderLevel $largest) -}}
<ul>
{{- $.Scratch.Add "bareul" (sub (add $largest .) 1) -}}
{{- end -}}
{{- range $i, $header := $headers -}}
{{- $headerLevel := index (findRE "[1-6]" . 1) 0 -}}
{{- $headerLevel := len (seq $headerLevel) -}}
{{/* get id="xyz" */}}
{{- $id := index (findRE "(id=\"(.*?)\")" $header 9) 0 }}
{{- /* strip id="" to leave xyz, no way to get regex capturing groups in hugo */ -}}
{{- $cleanedID := replace (replace $id "id=\"" "") "\"" "" }}
{{- $header := replaceRE "<h[1-6].*?>((.|\n])+?)</h[1-6]>" "$1" $header -}}
{{- if ne $i 0 -}}
{{- $prevHeaderLevel := index (findRE "[1-6]" (index $headers (sub $i 1)) 1) 0 -}}
{{- $prevHeaderLevel := len (seq $prevHeaderLevel) -}}
{{- if gt $headerLevel $prevHeaderLevel -}}
{{- range seq $prevHeaderLevel (sub $headerLevel 1) -}}
<ul>
{{/* the first should not be recorded */}}
{{- if ne $prevHeaderLevel . -}}
{{- $.Scratch.Add "bareul" . -}}
{{- end -}}
{{- end -}}
{{- else -}}
</li>
{{- if lt $headerLevel $prevHeaderLevel -}}
{{- range seq (sub $prevHeaderLevel 1) -1 $headerLevel -}}
{{- if in ($.Scratch.Get "bareul") . -}}
</ul>
{{/* manually do pop item */}}
{{- $tmp := $.Scratch.Get "bareul" -}}
{{- $.Scratch.Delete "bareul" -}}
{{- $.Scratch.Set "bareul" slice}}
{{- range seq (sub (len $tmp) 1) -}}
{{- $.Scratch.Add "bareul" (index $tmp (sub . 1)) -}}
{{- end -}}
{{- else -}}
</ul>
</li>
{{- end -}}
{{- end -}}
{{- end -}}
{{- end }}
<li>
<a href="#{{- $cleanedID -}}" aria-label="{{- $header | plainify -}}">{{- $header | safeHTML -}}</a>
{{- else }}
<li>
<a href="#{{- $cleanedID -}}" aria-label="{{- $header | plainify -}}">{{- $header | safeHTML -}}</a>
{{- end -}}
{{- end -}}
<!-- {{- $firstHeaderLevel := len (seq (index (findRE "[1-6]" (index $headers 0) 1) 0)) -}} -->
{{- $firstHeaderLevel := $largest }}
{{- $lastHeaderLevel := len (seq (index (findRE "[1-6]" (index $headers (sub (len $headers) 1)) 1) 0)) }}
</li>
{{- range seq (sub $lastHeaderLevel $firstHeaderLevel) -}}
{{- if in ($.Scratch.Get "bareul") (add . $firstHeaderLevel) }}
</ul>
{{- else }}
</ul>
</li>
{{- end -}}
{{- end }}
</ul>
</div>
</details>
</div>
</aside>
<script>
let activeElement;
let elements;
window.addEventListener('DOMContentLoaded', function (event) {
checkTocPosition();
elements = document.querySelectorAll('h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]');
// Make the first header active
activeElement = elements[0];
const id = encodeURI(activeElement.getAttribute('id')).toLowerCase();
document.querySelector(`.inner ul li a[href="#${id}"]`).classList.add('active');
}, false);
window.addEventListener('resize', function(event) {
checkTocPosition();
}, false);
window.addEventListener('scroll', () => {
// Check if there is an object in the top half of the screen or keep the last item active
activeElement = Array.from(elements).find((element) => {
if ((getOffsetTop(element) - window.pageYOffset) > 0 &&
(getOffsetTop(element) - window.pageYOffset) < window.innerHeight/2) {
return element;
}
}) || activeElement
elements.forEach(element => {
const id = encodeURI(element.getAttribute('id')).toLowerCase();
if (element === activeElement){
document.querySelector(`.inner ul li a[href="#${id}"]`).classList.add('active');
} else {
document.querySelector(`.inner ul li a[href="#${id}"]`).classList.remove('active');
}
})
}, false);
const main = parseInt(getComputedStyle(document.body).getPropertyValue('--article-width'), 10);
const toc = parseInt(getComputedStyle(document.body).getPropertyValue('--toc-width'), 10);
const gap = parseInt(getComputedStyle(document.body).getPropertyValue('--gap'), 10);
function checkTocPosition() {
const width = document.body.scrollWidth;
if (width - main - (toc * 2) - (gap * 4) > 0) {
document.getElementById("toc-container").classList.add("wide");
} else {
document.getElementById("toc-container").classList.remove("wide");
}
}
function getOffsetTop(element) {
if (!element.getClientRects().length) {
return 0;
}
let rect = element.getBoundingClientRect();
let win = element.ownerDocument.defaultView;
return rect.top + win.pageYOffset;
}
</script>
{{- end }}

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 805 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB