Compare commits
9 Commits
4dc5fcb4ea
...
f8dd5a4f39
| Author | SHA1 | Date | |
|---|---|---|---|
| f8dd5a4f39 | |||
| 68be6285f1 | |||
| 6fe12d5531 | |||
| 76463f8eac | |||
| a3cbf49f00 | |||
| a65af703d0 | |||
| 633b0c5ffb | |||
| 5e4e5ce4c1 | |||
| 375d95f71f |
31
src/App.js
31
src/App.js
@ -46,7 +46,7 @@ import EquipmentPage from './Pages/Radio/equipmentPage';
|
|||||||
import PlamoMain from './Pages/Plamo/PlamoMain'
|
import PlamoMain from './Pages/Plamo/PlamoMain'
|
||||||
|
|
||||||
import { languages, getLanguage } from './Language/Language';
|
import { languages, getLanguage } from './Language/Language';
|
||||||
import { japaneseRoutes, plamoBlogRoutes, programmingLanguageRoutes } from './Routers';
|
import { japaneseRoutes, plamoBlogRoutes, plamoEquipmentRoutes, programmingLanguageRoutes } from './Routers';
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
const language = getLanguage();
|
const language = getLanguage();
|
||||||
@ -130,24 +130,25 @@ function App() {
|
|||||||
|
|
||||||
{/* Plamo */}
|
{/* Plamo */}
|
||||||
{plamoBlogRoutes}
|
{plamoBlogRoutes}
|
||||||
|
{plamoEquipmentRoutes}
|
||||||
|
|
||||||
{/* Software */}
|
{/* Software */}
|
||||||
{programmingLanguageRoutes}
|
{programmingLanguageRoutes}
|
||||||
|
|
||||||
<Route exact path='/software/dxp-development' element={<DXPDevelopment />}></Route>
|
<Route exact path='/en/software/project/dxp-development' element={<DXPDevelopment />}></Route>
|
||||||
<Route exact path='/software/configuration-automation' element={<ConfigAutomation />}></Route>
|
<Route exact path='/en/software/project/configuration-automation' element={<ConfigAutomation />}></Route>
|
||||||
<Route exact path='/software/wifi-prototype' element={<WifiPrototype />}></Route>
|
<Route exact path='/en/software/project/wifi-prototype' element={<WifiPrototype />}></Route>
|
||||||
<Route exact path='/software/embedded-game' element={<SwivForPi />}></Route>
|
<Route exact path='/en/software/project/embedded-game' element={<SwivForPi />}></Route>
|
||||||
<Route exact path='/software/raspberry-pi-jukebox' element={<RaspberryJukebox />}></Route>
|
<Route exact path='/en/software/project/raspberry-pi-jukebox' element={<RaspberryJukebox />}></Route>
|
||||||
<Route exact path='/software/kanji-application' element={<KanjiApplication />}></Route>
|
<Route exact path='/en/software/project/kanji-application' element={<KanjiApplication />}></Route>
|
||||||
<Route exact path='/software/attachment-module' element={<AttachmentModule />}></Route>
|
<Route exact path='/en/software/project/attachment-module' element={<AttachmentModule />}></Route>
|
||||||
<Route exact path='/software/teslamaze' element={<TeslaMaze />}></Route>
|
<Route exact path='/en/software/project/teslamaze' element={<TeslaMaze />}></Route>
|
||||||
<Route exact path='/software/embedded-internet-radio' element={<EmbeddedInternetRadio />}></Route>
|
<Route exact path='/en/software/project/embedded-internet-radio' element={<EmbeddedInternetRadio />}></Route>
|
||||||
<Route exact path='/software/windows10-cookbook' element={<Windows10Cookbook />}></Route>
|
<Route exact path='/en/software/project/windows10-cookbook' element={<Windows10Cookbook />}></Route>
|
||||||
<Route exact path='/software/ios-airports' element={<IOSAirports />}></Route>
|
<Route exact path='/en/software/project/ios-airports' element={<IOSAirports />}></Route>
|
||||||
<Route exact path='/software/festival-simulator' element={<FestivalSimulator />}></Route>
|
<Route exact path='/en/software/project/festival-simulator' element={<FestivalSimulator />}></Route>
|
||||||
<Route exact path='/software/boebot' element={<BoardOfEducationBot />}></Route>
|
<Route exact path='/en/software/project/boebot' element={<BoardOfEducationBot />}></Route>
|
||||||
<Route exact path='/software/metroid-horizontal-shooter' element={<MetroidShooter />}></Route>
|
<Route exact path='/en/software/project/metroid-horizontal-shooter' element={<MetroidShooter />}></Route>
|
||||||
|
|
||||||
<Route exact path='/books' element={<Books books={booksdata.books} />}></Route>
|
<Route exact path='/books' element={<Books books={booksdata.books} />}></Route>
|
||||||
<Route exact path='/linux' element={<Linux />}></Route>
|
<Route exact path='/linux' element={<Linux />}></Route>
|
||||||
|
|||||||
@ -39,10 +39,26 @@ const languageStrings = {
|
|||||||
nvisAntenna: 'NVIS Antenna',
|
nvisAntenna: 'NVIS Antenna',
|
||||||
totalUniqueQSO: 'total unique QSO',
|
totalUniqueQSO: 'total unique QSO',
|
||||||
// Scale Model
|
// Scale Model
|
||||||
|
plamo: 'Plamo',
|
||||||
scalemodel: 'Scale model',
|
scalemodel: 'Scale model',
|
||||||
// Software
|
// Software
|
||||||
code_pages: 'Code sections',
|
code_pages: 'Code sections',
|
||||||
code_pages_intro: 'Some notes and examples of code.',
|
code_pages_intro: 'Some notes and examples of code.',
|
||||||
|
software_projects: 'Projects',
|
||||||
|
// Projects
|
||||||
|
attachment_module: 'Attachment module',
|
||||||
|
boebot: 'Board of Education robot',
|
||||||
|
dxp_development: 'DXP development',
|
||||||
|
embedded_internet_radio: 'Embedded internet radio',
|
||||||
|
embedded_game: 'Embedded game',
|
||||||
|
ios_airports: 'iOS airport',
|
||||||
|
festival_simulator: 'Festival simulator',
|
||||||
|
kanji_application: 'Kanji applicatition',
|
||||||
|
metroid_horizontal_shooter: 'Horizontale shooter game',
|
||||||
|
raspberry_pi_jukebox: 'Raspberry Pi Jukebox',
|
||||||
|
teslamaze: 'TeslaMaze',
|
||||||
|
wifi_prototype: 'Wi-Fi prototype board',
|
||||||
|
windows10_cookbook: 'Windows 10 cookbook',
|
||||||
// Footer
|
// Footer
|
||||||
footer_contentparsed: 'Content is parsed by',
|
footer_contentparsed: 'Content is parsed by',
|
||||||
footer_madewith: 'This site was made with',
|
footer_madewith: 'This site was made with',
|
||||||
@ -85,10 +101,27 @@ const languageStrings = {
|
|||||||
nvisAntenna: 'NVIS antenne',
|
nvisAntenna: 'NVIS antenne',
|
||||||
totalUniqueQSO: 'totaal unieke QSO',
|
totalUniqueQSO: 'totaal unieke QSO',
|
||||||
// Scale Model
|
// Scale Model
|
||||||
|
plamo: 'Plamo',
|
||||||
scalemodel: 'Schaalmodel',
|
scalemodel: 'Schaalmodel',
|
||||||
// Software
|
// Software
|
||||||
code_pages: 'Code secties',
|
code_pages: 'Code secties',
|
||||||
code_pages_intro: 'Notities en voorbeelden van code.',
|
code_pages_intro: 'Notities en voorbeelden van code.',
|
||||||
|
software_projects: 'Projecten',
|
||||||
|
// Projects
|
||||||
|
attachment_module: 'Attachment module',
|
||||||
|
boebot: 'Board of Education robot',
|
||||||
|
dxp_development: 'DXP development',
|
||||||
|
embedded_internet_radio: 'Embedded internet radio',
|
||||||
|
embedded_game: 'Embedded spel',
|
||||||
|
ios_airports: 'iOS luchthavens',
|
||||||
|
festival_simulator: 'Festival simulator',
|
||||||
|
kanji_application: 'Kanji applicatie',
|
||||||
|
metroid_horizontal_shooter: 'Horizontale shooter',
|
||||||
|
raspberry_pi_jukebox: 'Raspberry Pi Jukebox',
|
||||||
|
teslamaze: 'TeslaMaze',
|
||||||
|
wifi_prototype: 'Wi-Fi prototype board',
|
||||||
|
windows10_cookbook: 'Windows 10 kookboek',
|
||||||
|
|
||||||
// Footer
|
// Footer
|
||||||
footer_contentparsed: 'Inhoud is verwerkt door',
|
footer_contentparsed: 'Inhoud is verwerkt door',
|
||||||
footer_madewith: 'Deze website is gemaakt met',
|
footer_madewith: 'Deze website is gemaakt met',
|
||||||
|
|||||||
@ -1,86 +0,0 @@
|
|||||||
# Airbrush booth
|
|
||||||
|
|
||||||
I built a simple diy airbrush booth in November 2024, here is the progress I made on it.
|
|
||||||
|
|
||||||
First I needed space, the bike shed below our appartment would suit well. I cleaned up everything and moved an old school desk to where I wanted my booth.
|
|
||||||
|
|
||||||
[foto1]
|
|
||||||
|
|
||||||
I started with some planks I wanted to use as foundation and to raise the entire booth a bit. These planks were left over from a old plant container I had on our balcony and tore down. I drilled holes, sanded the sides and glued some wooden dowels in.
|
|
||||||
|
|
||||||
[foto2]
|
|
||||||
|
|
||||||
[foto3]
|
|
||||||
|
|
||||||
Then saw the side panels and the back panel.
|
|
||||||
|
|
||||||
[foto4]
|
|
||||||
|
|
||||||
Saw the bars that would go in the corners, I thought these 45 degree bars looked nice from the inside.
|
|
||||||
|
|
||||||
I sawed off some of the top, so that cables for the lights could go behind these bars later.
|
|
||||||
|
|
||||||
[foto5]
|
|
||||||
|
|
||||||
[foto6]
|
|
||||||
|
|
||||||
There is no need for this many dowels, just a few is enough. I was unable to fit them together because at some point, some dowels did not exactly match up with the opposite holes, so it did not fit. I had to saw off some of the dowels until it would fit.
|
|
||||||
|
|
||||||
[foto7]
|
|
||||||
|
|
||||||
The 45 degree cut bars would have looked nice, but these bars proved difficult when I had to glue them together. I could not clamp it together, not even with another 45 degree bar on the opposite side. The opposite bar just kept sliding out of place. I considered this a failure and tore it apart before the glue could cure. I sanded the glue off and decided to just take a square bar instead for these corners.
|
|
||||||
|
|
||||||
[foto8]
|
|
||||||
|
|
||||||
[foto9]
|
|
||||||
|
|
||||||
This went much easier, I cut 2 bars to length, and again removed some of the tops for the cables.
|
|
||||||
|
|
||||||
[foto10]
|
|
||||||
|
|
||||||
[foto11]
|
|
||||||
|
|
||||||
I tried to glue a corner together, but it did not line up perfectly nice, some of the dowels were a bit too long I thing, which I did underestimated when dry-fitting.
|
|
||||||
|
|
||||||
[foto12]
|
|
||||||
|
|
||||||
For the next corner, I decided to do it more simple. Just 3 dowels and glue it to the edge, nothing more. Once dried, sand it to make the sides even. This worked rather well.
|
|
||||||
|
|
||||||
[foto13]
|
|
||||||
|
|
||||||
[foto14]
|
|
||||||
|
|
||||||
Again, add just a few dowels for the back panel, and glue together.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Next I decided to work on the planks that would form the base and carry the whole cabine. These were not the most even pieces of wood to work with and required a lot of planing to get them (a little bit) even. I wanted to do this myself and reuse these planks, but going to a workshop to have these planed would have saved a lot of time and effort.
|
|
||||||
|
|
||||||
[foto15]
|
|
||||||
|
|
||||||
[gifje1]
|
|
||||||
|
|
||||||
[foto16]
|
|
||||||
|
|
||||||
It took a few days to get them to be even enough, I then moved on to make the lid.
|
|
||||||
|
|
||||||
I cut four blocks from the bar I used for the corner to put on the lid and glued it together.
|
|
||||||
|
|
||||||
[foto17]
|
|
||||||
|
|
||||||
I was not confident I could line up the dowels on the opposite side, so I just drilled through the blocks and hammered the dowels through them. Sadly I hit one dowel a little too hard, which almost went through the front. But it will be an easy fix later.
|
|
||||||
|
|
||||||
[foto18~21]
|
|
||||||
|
|
||||||
Next come two holes in the lid for the ventilation. I drew a circle, drilled holes and then cut out the rest with a mortise chisel (schietbeitel). I made another mistake here, because I drew the inner diameter to be cut out.
|
|
||||||
|
|
||||||
[foto22~23]
|
|
||||||
|
|
||||||
Since the ventilation part is a few millimeters thick, of course it would not fit. To fix this, I used a rasping file to get rit of a few more millimeters of wood.
|
|
||||||
|
|
||||||
[foto24]
|
|
||||||
|
|
||||||
After both holes were made in the lid, I filled up some uneven and broken parts with wood plaster. Then I put on an undercoat of white paint on the wood.
|
|
||||||
|
|
||||||
After sanding the undercoat and then re-applying it again, I painted some white lacquer on the entire assembly with a paint roller. It is not necessary, but it does give it a nicer finish than just the white undercoat of paint.
|
|
||||||
|
|
||||||
@ -1,11 +1,9 @@
|
|||||||
# Scale modelling
|
# Plamo
|
||||||
|
|
||||||
Building and painting scale models is one of my hobbies. Here is a collection of the things I made and use.
|
Building and painting plastic scale models and mecha figures is one of my hobbies. Here is a collection of the things I made and use.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Blog
|
|
||||||
|
|
||||||
### Equipment
|
### Equipment
|
||||||
|
|
||||||
* [Airbrush booth](./blog/airbrush-cabine)
|
* [Airbrush booth](./equipment/airbrush-cabine)
|
||||||
|
|||||||
235
src/Pages/Plamo/equipment/en/airbrush-cabine.md
Normal file
235
src/Pages/Plamo/equipment/en/airbrush-cabine.md
Normal file
@ -0,0 +1,235 @@
|
|||||||
|
# Airbrush booth
|
||||||
|
|
||||||
|
I started building a simple airbrush booth in November 2024, here is the progress I made on it. It was completed in February 2025. Note, an airbrush booth can be made far simpler and cheaper. A purchased one is probably even better. I even used a simple cardboard box the first time, which serves the purpose well. This booth was just a fun project for me to make.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
First I needed space, the bike shed below our appartment would suit well. I cleaned up everything and moved an old school desk to where I wanted my booth.
|
||||||
|
|
||||||
|
2024-11-03
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Woodwork
|
||||||
|
|
||||||
|
I started with some planks I wanted to use as foundation and to raise the entire booth a bit. These planks were left over from a old plant container I had on our balcony and tore down. I drilled holes, sanded the sides and glued some wooden dowels in.
|
||||||
|
|
||||||
|
2024-11-06
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Then saw the side panels and the back panel.
|
||||||
|
|
||||||
|
2024-11-16
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Saw the bars that would go in the corners, I thought these 45 degree bars looked nice from the inside. Later I would regret using these bars though.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
I sawed off some of the top, so that cables for the lights could go behind these bars later.
|
||||||
|
|
||||||
|
2024-11-19
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
There is no need for this many dowels, just a few is enough. I was unable to fit them together because at some point, some dowels did not exactly match up with the opposite holes, so it did not fit. I had to saw off some of the dowels until it would fit.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The 45 degree cut bars would have looked nice as corners, but these bars proved difficult when I had to glue them together. I could not clamp it together, not even with another 45 degree bar on the opposite side. The opposite bar just kept sliding out of place. I considered this a failure and tore it apart before the glue could cure. I sanded the glue off and decided to just take a regular bar instead for these corners.
|
||||||
|
|
||||||
|
2024-11-20
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
This went much easier, I cut 2 bars to length, and again removed some of the tops for the cables.
|
||||||
|
|
||||||
|
2024-11-23
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
I tried to glue a bar to panel, but it did not line up perfectly, some of the dowels were a bit too long I think, which I underestimated when dry-fitting.
|
||||||
|
|
||||||
|
2024-11-24
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
When dry-fitting, it works better to mark the dowel with a pencil. That way, you know exactly how deep it goes in the opposite hole.
|
||||||
|
|
||||||
|
2024-11-25
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
For the next corner, I decided to do it more simple. Just 3 dowels and glue it to the edge, nothing more. Once dried, sand it to make the sides even. This worked rather well. Again, add just a few dowels for the back panel, and glue together.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Planing
|
||||||
|
|
||||||
|
Next I decided to work on the planks that would form the base and carry the whole cabine. These were not the most even pieces of wood to work with and required a lot of planing to get them (a little bit) even. I wanted to do this myself and reuse these planks, but going to a workshop to have these planed would have saved a lot of time and effort. But, I think planing by hand is very rewarding effort.
|
||||||
|
|
||||||
|
2024-11-27
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
All panels glued together on top of the foundation planks and the glass plate. This glass plate I found near the trash, it was a nice thick plate without any damage. Propably was part of a coffee table.
|
||||||
|
|
||||||
|
2024-11-28
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### The lid
|
||||||
|
|
||||||
|
I then moved on to make the lid. I cut four blocks from the bar I used for the corner to put on the lid and glued it together. I was not confident I could line up the dowels on the opposite side, so I just drilled through the blocks and hammered the dowels through them. Sadly I hit one dowel a little too hard, which almost went through the front. But it will be an easy fix later. The lid will not be glued to the other panels, so it can be taken off and moved later.
|
||||||
|
|
||||||
|
2024-12-07
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
2024-12-08
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Next come two holes in the lid for the ventilation. I drew a circle, drilled holes and then cut out the rest with a mortise chisel (schietbeitel). I made another mistake here, because I drew the inner diameter to be cut out.
|
||||||
|
|
||||||
|
2024-12-08
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Since the ventilation part is a few millimeters thick, it would not fit. To fix this, I used a rasping file to get rit of a few more millimeters of wood.
|
||||||
|
|
||||||
|
2024-12-13
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
After both holes were made in the lid, I filled up some uneven and broken parts with wood plaster. Then I put on an undercoat of white paint on the wood.
|
||||||
|
|
||||||
|
### Painting
|
||||||
|
|
||||||
|
Here you can see the dowel I almost bashed through the front. But some sanding fixed that and the paint will hide all uneveness later.
|
||||||
|
|
||||||
|
2024-12-20
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Then the whole assembly could be painted with an undercoat of primer.
|
||||||
|
|
||||||
|
2024-12-23
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
After sanding the undercoat and then re-applying it again, I painted some white lacquer on the entire assembly with a paint roller. It is not necessary, but it does give it a nicer finish than just the white undercoat of paint.
|
||||||
|
|
||||||
|
2025-01-03
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
### Electronics
|
||||||
|
|
||||||
|
My shed had a few wires leading to the bike shed, which I will utilize to build the other electronics.
|
||||||
|
|
||||||
|
2025-01-11
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
I was going to mount the T-section for the ventilation to the wall as well with some hose clamps.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The following electronics had to be mounted:
|
||||||
|
* A main switch for the ventilator.
|
||||||
|
* A switch to toggle between full speed and half speed for the ventilator.
|
||||||
|
* A switch for the LED inside the booth.
|
||||||
|
* A power converter to DC for the LEDs.
|
||||||
|
* A dimmer for the LEDs.
|
||||||
|
|
||||||
|
And while I was busy, I also decided to replace all the lights in the shed itself with LED strips, reusing the existing switch/outlet combination.
|
||||||
|
|
||||||
|
I attempted to be efficient with space first, by trying to cram as many wires as possible into the PVC tubes. But this was very hard to work with and turned out to be a big mess. I tore everything down again and tried a different approach.
|
||||||
|
|
||||||
|
2025-01-11
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The second plan was better, I made "modules" (labeled 1, 2 and 3) with incoming and outgoing wires. They would then come together into a box in the middle. This turned out well, it allowed me to work separately on each module. The box later turned out to be easily expandible as well, when I added one more line for the compressor.
|
||||||
|
|
||||||
|
2025-01-15
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
All the wires were going to be guided through white 5/8 inch PVC pipes. In order to bend them, I clamped a heat gun to the table, shoved a special spring into the pipe in order to bend them with both hands. Worked rather well, but I can only guide the wires through a single bend. I bended the pipes twice, but it was impossiple to get the wires through for me. I then cut those pipes in half after bending, put the wires in and taped them back together again.
|
||||||
|
|
||||||
|
2025-01-18
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The new electronics setup.
|
||||||
|
|
||||||
|
2025-01-19
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
And then the hoses could be attached for the ventilation.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Next work had to be done to make the LED strips. Soldering direcly to the strips proved a little difficult by hand only, so I decided to invest in some good extra hands from Weller. I used extra hands before, but these bendable clamps from Weller are perfect and made soldering a breeze.
|
||||||
|
|
||||||
|
2025-01-25
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
On this picure the wires were still a little too short, so I extended them a bit later.
|
||||||
|
|
||||||
|
2025-01-31
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
At one point I thought it would be nice to have an extra outlet near the floor for the compressor as well, along with a switch so I can easily reach it. The little box was just big enough to fit all the connections at this point.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Completion
|
||||||
|
|
||||||
|
I attached 4 strips, on each side of the lid. The final result is a nice box that provides day coloured light from every angle.
|
||||||
|
|
||||||
|
2025-02-09
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
My friend told me it looks a bit like a hangar, here is a 1/144 Zaku II for scale.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Finally completed and inspired by the hangar remark, I decided to name my booth: ["White Base"](https://en.wikipedia.org/wiki/White_Base).
|
||||||
235
src/Pages/Plamo/equipment/nl/airbrush-cabine.md
Normal file
235
src/Pages/Plamo/equipment/nl/airbrush-cabine.md
Normal file
@ -0,0 +1,235 @@
|
|||||||
|
# Airbrush cabine
|
||||||
|
|
||||||
|
Ik ben begonnen met het bouwen van een airbrush-cabine in november 2024 en afgemaakt in februari 2025, hier is een artikel over de voortgang. Het is mogelijk om veel simpeler en goedkoper een airbrush-cabine te bouwen. Het kopen van een cabine was waarschijnlijk beter geweest. Ik gebruikte voor het eerst een kartonnen doos met een ventilator als eerste cabine, wat prima is. Deze cabine was gewoon een leuk projectje voor mij om te maken.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Eerst had ik ruimte nodig, in de fietsenstalling onder ons appartement. Na het opruimen had ik een oud schoolbankje gebruikt waar de cabine moest komen.
|
||||||
|
|
||||||
|
2024-11-03
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Houtbewerking
|
||||||
|
|
||||||
|
Eerst had ik stevige planken nodig die als ondergrond zouden dienen. Deze planken had ik nog over van een plantenbak die ik op ons balkon had staan en had afgebroken. Ik had gaatjes geboord, geschuurd en duvels er in gelijmd.
|
||||||
|
|
||||||
|
2024-11-06
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Daarna de zijpanelen en het achterste paneel op maat gezaagd.
|
||||||
|
|
||||||
|
2024-11-16
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Ik had deze diagonaal gezaagde mastieklatten gebruikt, omdat ik dacht dat ze mooi zouden zijn aan de binnenkant. Ik zou later spijt krijgen dat ik deze latten had gebruikt.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Een uitsparing aan de bovenkant, zodat de kabels van de verlichting er achter door zouden kunnen.
|
||||||
|
|
||||||
|
2024-11-19
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Het is niet nodig om zoveel duvels te gebruiken, een paar is genoeg. Ik kreeg deze balken niet meer verbonden, omdat sommige duvels niet exact pasten in de tegenovergestelde gaatjes. Ik moest enkel duvels afzagen om het te laten passen.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
De mastieklat zagen er mooi uit in de hoeken, maar deze balken waren er lastig om te verlijmen. Ik kreeg de lijmklemmen niet goed, ook niet door een tweede mastieklat als steun te gebruiken. Ze gleden er telkens af en kwamen los. Ik beschouwde dit als een mislukking en heb ze losgemaakt voordat de lijm kon verharden. De resterende lijmresten weggeschuurd en toen besloten om gewone balken te gaan gebruiken voor de hoeken.
|
||||||
|
|
||||||
|
2024-11-20
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Dit ging veel beter, twee balken op maat gezaagd en wederom een uitsparing gemaakt aan de bovenkant.
|
||||||
|
|
||||||
|
2024-11-23
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Ik probeerde een balk aan een paneel te lijmen, maar deze paste niet perfect. Enkele duvels waren te lang, dit onderschatte ik tijdens het passen.
|
||||||
|
|
||||||
|
2024-11-24
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Tijdens het passen, werkt het goed om met een potlood de duvel te markeren. Dan weet je exact hoe diep het tegenovergestelde gat moet zijn.
|
||||||
|
|
||||||
|
2024-11-25
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Voor de andere hoek wilde ik het wat simpeler doen. Slechts 3 duvels en meteen lijmen. Toen de lijm droog was, de zijkanten schuren. Dit werkte goed, ook voor het achterste paneel.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Schaven
|
||||||
|
|
||||||
|
Nu moesten de planken worden voorbereid die de basis zouden vormen voor de hele cabine. Dit waren erg scheluwe, oneven stukken hout en moesten erg veel geschaafd worden om ze (een beetje) recht te krijgen. Ik wilde dit graag zelf doen en deze planken hergebruiken, maar naar een houtwerkplaats gaan om deze planken te laten schaven zou me veel tijd en moeite hebben bespaard. Echter, het is een leuk klusje dat veel voldoening gaf achteraf.
|
||||||
|
|
||||||
|
2024-11-27
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Alle wanden vast gelijmd en bovenop de planken geplaatst met een glasplaat. De glasplaat had ik ooit gevonden bij de glascontainer. Het is een dikke plaat zonder schade, waarschijnlijk van een koffietafel geweest.
|
||||||
|
|
||||||
|
2024-11-28
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### De deksel
|
||||||
|
|
||||||
|
De deksel was gemaakt door 4 kleine blokjes te maken die in de hoeken zouden komen en het frontje zouden vasthouden. Ik was dit keer niet zo zeker dat ik de gaten voor de duvel correct zou kunnen maken, dus heb ik door de blokjes heen geboord en de duvels er doorheen geslagen. Helaas sloeg ik een duvel te hard, die bijna door het frontje breekte. Maar dat was makkelijk te repareren. De deksel zelf wordt niet aan de panelen vastgelijmd, zodat ik deze los kan maken en verplaatsen.
|
||||||
|
|
||||||
|
2024-12-07
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
2024-12-08
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Er moeten nu twee grote gaten worden gemaakt in de deksel voor de ventilatie. Ik tekende een cirkel, boorde gaten en hakte de rest eruit met een schietbeitel. Ook hier maakte ik een fout, omdat ik de binnenste diameter van de montagebus gebruikte om te tekenen. Dit had de buitenste moeten zijn.
|
||||||
|
|
||||||
|
2024-12-08
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
En omdat de montagebus enkele millimeters dik is, paste het niet. Om dit op te lossen, gebruikte ik een rasp om de resterende millimeters weg te halen uit het hout.
|
||||||
|
|
||||||
|
2024-12-13
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Nadat beide gaten waren gemaakt, werden alle oneffenheden vlak gemaakt met Alabastine houtplamuur. Daarna kon de eerste onderlaag witte verf er op.
|
||||||
|
|
||||||
|
### Verven
|
||||||
|
|
||||||
|
Hier zie je de duvel die bijna door het frontje is geslagen. Maar een beetje schuren en plamuur lossen dit snel op en de verf zou alles verbergen.
|
||||||
|
|
||||||
|
2024-12-20
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Daarna kon het hele werkstuk in de primer.
|
||||||
|
|
||||||
|
2024-12-23
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Na het schuren van de onderlaag en het aanbrengen van een tweede laag, kon ik de witte lak aanbrengen met een verfrollertje. Het is niet nodig, maar het gaf de hele cabine een mooie strakke finish.
|
||||||
|
|
||||||
|
2025-01-03
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
### Elektronica
|
||||||
|
|
||||||
|
Onze stalling had enkele draden voor verlichting, die ik zou gaan gebruiken voor de elektronica.
|
||||||
|
|
||||||
|
2025-01-11
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Ik zou de T-splitsing van de ventilatie aan de muur bevestigen met slangenklemmen.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
De volgende elektronica moest worden bevestigd:
|
||||||
|
* Een hoofdschakelaar voor de ventilator
|
||||||
|
* Een schakelaar om de ventilator te laten werken op volle- en halve snelheid.
|
||||||
|
* Een schakelaar voor de LED-verlichting in de cabine.
|
||||||
|
* Een omvormer voor gelijkstroom van de LED-verlichting.
|
||||||
|
* Een dimmer voor de LED-verlichting.
|
||||||
|
|
||||||
|
En omdat ik toch bezig was, had ik ook alle verlichting in de stalling vervangen met LED strips, waarbij ik de oude schakelaar kon hergebruiken.n.
|
||||||
|
|
||||||
|
Ik wilde in eerste instantie efficiënt zijn met ruimte, door zoveel mogelijk draden in een PVC buis te krijgen. Maar dit was erg lastig om mee te werken en werd uiteindelijk een zooitje. Ik heb alles opnieuw afgebroken om een nieuw plan te proberen.
|
||||||
|
|
||||||
|
2025-01-11
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Het tweede plan was veel beter, door "modules" (gelabeld 1, 2 en 3) te maken met alle binnenkomende en uitgaande draden. Deze modules komen samen in een lasdoosje in het midden. Dit werkte erg goed, het gaf me de mogelijkheid om elke module apart uit te werken. Het lasdoosje was makkelijk uitbreidbaar, want ik kon nog een extra lijn leggen voor de compressor.
|
||||||
|
|
||||||
|
2025-01-15
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Alle draden werden geleid door een 5/8 inch PVC buis. Om ze te kunnen buigen, klemde ik een hittepistool vast aan de tafel en gebruikte een speciale buigveer om de buizen met mijn beide te handen kunnen buigen. Dit werkte goed, maar het is alleen mogelijk om draden te leiden door een enkele bocht. Ik maakte in een buis twee bochten, maar kreeg met geen mogelijkheid de lijnen er doorheen. Ik had geen trekveer. Ik moest die buis door midden zagen, de draden er doorheen leiden en weer opnieuw vastmaken.
|
||||||
|
|
||||||
|
2025-01-18
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
De nieuwe elektronica setup.
|
||||||
|
|
||||||
|
2025-01-19
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
En toen konden de slangen voor de ventilatie worden bevestigd.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Daarna moesten de LED strips worden gemaakt. Het direct solderen aan de stips was een beetje lastig met alleen mijn handen, dus besloot ik te investeren in een goed setje extra handjes. Ik heb wel eens eerder extra handjes gebruikt, maar deze buigbare klemmen van Weller zijn perfect en maken het solderen een prettig klusje.
|
||||||
|
|
||||||
|
2025-01-25
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Op deze foto zijn de draden nog een beetje kort, dus ik heb die later nog verlengd.
|
||||||
|
|
||||||
|
2025-01-31
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Ik dacht dat het handig zou zijn al ik een extra stopcontact zou hebben bij de vloer voor de compressor, waarbij ik makkelijk bij de schakelaar zou kunnen. Het lasdoosje was net groot genoeg voor al deze connecties.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Afronding
|
||||||
|
|
||||||
|
Ik maakte de vier LED strips vast, aan elke zijde van de deksel. Het eindresultaat is een mooie doos met daglicht gekleurd licht van elke hoek.
|
||||||
|
|
||||||
|
2025-02-09
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Een vriend van me zei dat het een beetje op een hangar leek, hier is een 1/144 Zaku II voor schaal.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Nu dat alles compleet is en geïnspireerd door de hangar opmerking, besloot ik om mijn cabine de naam: ["White Base"](https://en.wikipedia.org/wiki/White_Base) te geven.
|
||||||
9
src/Pages/Plamo/nl/main.md
Normal file
9
src/Pages/Plamo/nl/main.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# Plamo
|
||||||
|
|
||||||
|
Het bouwen en schilderen van plastic schaalmodellen en mecha figuren is een hobby van me. Hier is een collectie van de dingen die I heb gemaakt en gebruik.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Gereedschappen
|
||||||
|
|
||||||
|
* [Airbrush cabine](./equipment/airbrush-cabine)
|
||||||
@ -1,26 +0,0 @@
|
|||||||
|
|
||||||
### Gundam wishlist:
|
|
||||||
|
|
||||||
* MG – MSM-07 Z’gok
|
|
||||||
* HG – AGX-04 Gerbera Tetra
|
|
||||||
* HG – MSJ-06II-A Tieren Ground Type
|
|
||||||
|
|
||||||
* Bandai - BPHD-38 ms hand 02 (Zeon)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Equipment wishlist:
|
|
||||||
|
|
||||||
* Dremel, Proxxon
|
|
||||||
* Bluetack
|
|
||||||
* Kruidvat nagellak verwijderaar (met of zonder aceton)
|
|
||||||
* UV light for curing
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Diorama wishlist:
|
|
||||||
|
|
||||||
* XPS insulation foam
|
|
||||||
* Hot wire cutter
|
|
||||||
* LED filament lines
|
|
||||||
* UV resin
|
|
||||||
@ -4,15 +4,7 @@ import React from 'react';
|
|||||||
const AttachmentModule = () => {
|
const AttachmentModule = () => {
|
||||||
return (
|
return (
|
||||||
<div className='row'>
|
<div className='row'>
|
||||||
<div className="sidebar col-3 position-fixed">
|
<a href='..'>Software</a>
|
||||||
<div id="list-example" className="list-group">
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-intro">intro</a>
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-workflow">workflow</a>
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-lessons-learnt">lessons learnt</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="scrollspy-example col-6 offset-3" data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" tabIndex="0">
|
|
||||||
<section id="list-intro" className="content-section">
|
<section id="list-intro" className="content-section">
|
||||||
<h1 className="text-primary">Attachment Module</h1>
|
<h1 className="text-primary">Attachment Module</h1>
|
||||||
<h4 className="text-secondary">Solving the problem of someone else</h4>
|
<h4 className="text-secondary">Solving the problem of someone else</h4>
|
||||||
@ -51,7 +43,6 @@ const AttachmentModule = () => {
|
|||||||
<p>The actual problem here though, is why the other developers were not able to create a safe file upload feature.</p>
|
<p>The actual problem here though, is why the other developers were not able to create a safe file upload feature.</p>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,8 +4,7 @@ import React from 'react';
|
|||||||
const BoardOfEducationBot = () => {
|
const BoardOfEducationBot = () => {
|
||||||
return (
|
return (
|
||||||
<div className='row'>
|
<div className='row'>
|
||||||
|
<a href='..'>Software</a>
|
||||||
<div className="scrollspy-example col-6 offset-3" data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" tabIndex="0">
|
|
||||||
<section id="list-intro" className="content-section">
|
<section id="list-intro" className="content-section">
|
||||||
<h1 className="text-primary">Board of Education bot</h1>
|
<h1 className="text-primary">Board of Education bot</h1>
|
||||||
<h4 className="text-secondary">Learning robot platform</h4>
|
<h4 className="text-secondary">Learning robot platform</h4>
|
||||||
@ -58,7 +57,6 @@ const BoardOfEducationBot = () => {
|
|||||||
|
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,17 +4,7 @@ import React from 'react';
|
|||||||
const ConfigAutomation = () => {
|
const ConfigAutomation = () => {
|
||||||
return (
|
return (
|
||||||
<div className='row'>
|
<div className='row'>
|
||||||
<div className="sidebar col-3 position-fixed">
|
<a href='..'>Software</a>
|
||||||
<div id="list-example" className="list-group">
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-config-automation">Config automation</a>
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-development">Development</a>
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-deployment">Deployment</a>
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-feedback">Feedback</a>
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-lessons-learnt">Lessons learnt</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="scrollspy-example col-6 offset-3" data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" tabIndex="0">
|
|
||||||
<section id="list-config-automation" className="content-section">
|
<section id="list-config-automation" className="content-section">
|
||||||
<h1 className="text-primary">Configuration automation</h1>
|
<h1 className="text-primary">Configuration automation</h1>
|
||||||
<p>At <a href="https://www.hitachivantara.com/" target="_blank" rel="noopener noreferrer">Hitachi Vantara</a> I worked with other developers on automating a configuration process using <a href="https://www.python.org/" target="_blank" rel="noopener noreferrer">Python</a> and several external API.</p>
|
<p>At <a href="https://www.hitachivantara.com/" target="_blank" rel="noopener noreferrer">Hitachi Vantara</a> I worked with other developers on automating a configuration process using <a href="https://www.python.org/" target="_blank" rel="noopener noreferrer">Python</a> and several external API.</p>
|
||||||
@ -91,7 +81,6 @@ const ConfigAutomation = () => {
|
|||||||
|
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,15 +4,7 @@ import React from 'react';
|
|||||||
const DXPDevelopment = () => {
|
const DXPDevelopment = () => {
|
||||||
return (
|
return (
|
||||||
<div className='row'>
|
<div className='row'>
|
||||||
<div className="sidebar col-3 position-fixed">
|
<a href='..'>Software</a>
|
||||||
<div id="list-example" className="list-group">
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-dxp">DXP</a>
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-legacy">Legacy</a>
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-improvement">Improvement</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="scrollspy-example col-6 offset-3" data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" tabIndex="0">
|
|
||||||
<section id="list-dxp" className="content-section">
|
<section id="list-dxp" className="content-section">
|
||||||
<h1 className="text-primary">DXP Development</h1>
|
<h1 className="text-primary">DXP Development</h1>
|
||||||
<h4 className="text-secondary">OPPLE Catalog Generator</h4>
|
<h4 className="text-secondary">OPPLE Catalog Generator</h4>
|
||||||
@ -37,8 +29,6 @@ const DXPDevelopment = () => {
|
|||||||
<p>Moving forward with a structured tool, I am proud to have collaborated on this project!</p>
|
<p>Moving forward with a structured tool, I am proud to have collaborated on this project!</p>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,15 +4,7 @@ import React from 'react';
|
|||||||
const EmbeddedInternetRadio = () => {
|
const EmbeddedInternetRadio = () => {
|
||||||
return (
|
return (
|
||||||
<div className='row'>
|
<div className='row'>
|
||||||
<div className="sidebar col-3 position-fixed">
|
<a href='..'>Software</a>
|
||||||
<div id="list-example" className="list-group">
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-intro">Intro</a>
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-development">Development</a>
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-design">Design</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="scrollspy-example col-6 offset-3" data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" tabIndex="0">
|
|
||||||
<section id="list-intro" className="content-section">
|
<section id="list-intro" className="content-section">
|
||||||
<h1 className="text-primary">Embedded Internet Radio</h1>
|
<h1 className="text-primary">Embedded Internet Radio</h1>
|
||||||
<h4 className="text-secondary">Working with C</h4>
|
<h4 className="text-secondary">Working with C</h4>
|
||||||
@ -50,7 +42,6 @@ const EmbeddedInternetRadio = () => {
|
|||||||
</picture>
|
</picture>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,8 +4,7 @@ import React from 'react';
|
|||||||
const FestivalSimulator = () => {
|
const FestivalSimulator = () => {
|
||||||
return (
|
return (
|
||||||
<div className='row'>
|
<div className='row'>
|
||||||
|
<a href='..'>Software</a>
|
||||||
<div className="scrollspy-example col-6 offset-3" data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" tabIndex="0">
|
|
||||||
<section id="list-intro" className="content-section">
|
<section id="list-intro" className="content-section">
|
||||||
<h1 className="text-primary">SimFest Tycoon</h1>
|
<h1 className="text-primary">SimFest Tycoon</h1>
|
||||||
<h4 className="text-secondary">Festival crowd simulator</h4>
|
<h4 className="text-secondary">Festival crowd simulator</h4>
|
||||||
@ -84,7 +83,6 @@ const FestivalSimulator = () => {
|
|||||||
|
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,8 +4,7 @@ import React from 'react';
|
|||||||
const IOSAirports = () => {
|
const IOSAirports = () => {
|
||||||
return (
|
return (
|
||||||
<div className='row'>
|
<div className='row'>
|
||||||
|
<a href='..'>Software</a>
|
||||||
<div className="scrollspy-example col-6 offset-3" data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" tabIndex="0">
|
|
||||||
<section id="list-intro" className="content-section">
|
<section id="list-intro" className="content-section">
|
||||||
<h1 className="text-primary">iOS Airports</h1>
|
<h1 className="text-primary">iOS Airports</h1>
|
||||||
<h4 className="text-secondary">iPhone application</h4>
|
<h4 className="text-secondary">iPhone application</h4>
|
||||||
@ -35,7 +34,6 @@ const IOSAirports = () => {
|
|||||||
|
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,14 +4,7 @@ import React from 'react';
|
|||||||
const KanjiApplication = () => {
|
const KanjiApplication = () => {
|
||||||
return (
|
return (
|
||||||
<div className='row'>
|
<div className='row'>
|
||||||
<div className="sidebar col-3 position-fixed">
|
<a href='..'>Software</a>
|
||||||
<div id="list-example" className="list-group">
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-intro">intro</a>
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-settings">settings</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="scrollspy-example col-6 offset-3" data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" tabIndex="0">
|
|
||||||
<section id="list-intro" className="content-section">
|
<section id="list-intro" className="content-section">
|
||||||
<h1 className="text-primary">Kanji flashcard Android application</h1>
|
<h1 className="text-primary">Kanji flashcard Android application</h1>
|
||||||
<h4 className="text-secondary">Personalized Japanese learning</h4>
|
<h4 className="text-secondary">Personalized Japanese learning</h4>
|
||||||
@ -51,7 +44,6 @@ const KanjiApplication = () => {
|
|||||||
</picture>
|
</picture>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,8 +4,7 @@ import React from 'react';
|
|||||||
const MetroidShooter = () => {
|
const MetroidShooter = () => {
|
||||||
return (
|
return (
|
||||||
<div className='row'>
|
<div className='row'>
|
||||||
|
<a href='..'>Software</a>
|
||||||
<div className="scrollspy-example col-6 offset-3" data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" tabIndex="0">
|
|
||||||
<section id="list-intro" className="content-section">
|
<section id="list-intro" className="content-section">
|
||||||
<h1 className="text-primary">Metroid Horizontal Shooter</h1>
|
<h1 className="text-primary">Metroid Horizontal Shooter</h1>
|
||||||
<h4 className="text-secondary">Java game</h4>
|
<h4 className="text-secondary">Java game</h4>
|
||||||
@ -62,7 +61,6 @@ const MetroidShooter = () => {
|
|||||||
|
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import React from 'react';
|
|||||||
const RaspberryJukebox = () => {
|
const RaspberryJukebox = () => {
|
||||||
return (
|
return (
|
||||||
<div className='row'>
|
<div className='row'>
|
||||||
<div className="scrollspy-example col-6 offset-3" data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" tabIndex="0">
|
<a href='..'>Software</a>
|
||||||
<section id="list-intro" className="content-section">
|
<section id="list-intro" className="content-section">
|
||||||
<h1 className="text-primary">Raspberry Pi Jukebox</h1>
|
<h1 className="text-primary">Raspberry Pi Jukebox</h1>
|
||||||
<h4 className="text-secondary">Streaming internet radio</h4>
|
<h4 className="text-secondary">Streaming internet radio</h4>
|
||||||
@ -38,8 +38,6 @@ const RaspberryJukebox = () => {
|
|||||||
<img alt="Fully assembled jukebox with lights" src={`${process.env.PUBLIC_URL}/images/projects/raspberry-jukebox/fully-assembled-w800.webp`}/>
|
<img alt="Fully assembled jukebox with lights" src={`${process.env.PUBLIC_URL}/images/projects/raspberry-jukebox/fully-assembled-w800.webp`}/>
|
||||||
</picture>
|
</picture>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,14 +4,7 @@ import React from 'react';
|
|||||||
const SwivForPi = () => {
|
const SwivForPi = () => {
|
||||||
return (
|
return (
|
||||||
<div className='row'>
|
<div className='row'>
|
||||||
<div className="sidebar col-3 position-fixed">
|
<a href='..'>Software</a>
|
||||||
<div id="list-example" className="list-group">
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-intro">intro</a>
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-hardware">Hardware</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="scrollspy-example col-6 offset-3" data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" tabIndex="0">
|
|
||||||
<section id="list-intro" className="content-section">
|
<section id="list-intro" className="content-section">
|
||||||
<h1 className="text-primary">Embedded Game</h1>
|
<h1 className="text-primary">Embedded Game</h1>
|
||||||
<h4 className="text-secondary">Vertical shooter</h4>
|
<h4 className="text-secondary">Vertical shooter</h4>
|
||||||
@ -45,8 +38,6 @@ const SwivForPi = () => {
|
|||||||
</picture>
|
</picture>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,16 +4,7 @@ import React from 'react';
|
|||||||
const TeslaMaze = () => {
|
const TeslaMaze = () => {
|
||||||
return (
|
return (
|
||||||
<div className='row'>
|
<div className='row'>
|
||||||
<div className="sidebar col-3 position-fixed">
|
<a href='..'>Software</a>
|
||||||
<div id="list-example" className="list-group">
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-intro">intro</a>
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-gameplay">gameplay</a>
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-woodwork">woodwork</a>
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-lessons-learnt">lessons learnt</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="scrollspy-example col-6 offset-3" data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" tabIndex="0">
|
|
||||||
<section id="list-intro" className="content-section">
|
<section id="list-intro" className="content-section">
|
||||||
<h1 className="text-primary">TeslaMaze</h1>
|
<h1 className="text-primary">TeslaMaze</h1>
|
||||||
<h4 className="text-secondary">Gaming, Woodcraft and Teamwork!</h4>
|
<h4 className="text-secondary">Gaming, Woodcraft and Teamwork!</h4>
|
||||||
@ -99,7 +90,6 @@ const TeslaMaze = () => {
|
|||||||
</picture>
|
</picture>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,14 +4,7 @@ import React from 'react';
|
|||||||
const WifiPrototype = () => {
|
const WifiPrototype = () => {
|
||||||
return (
|
return (
|
||||||
<div className='row'>
|
<div className='row'>
|
||||||
<div className="sidebar col-3 position-fixed">
|
<a href='..'>Software</a>
|
||||||
<div id="list-example" className="list-group">
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-wifi">Wi-Fi</a>
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-tech">Technique</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="scrollspy-example col-6 offset-3" data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" tabIndex="0">
|
|
||||||
<section id="list-wifi" className="content-section">
|
<section id="list-wifi" className="content-section">
|
||||||
<h1 className="text-primary">Wi-Fi prototype board</h1>
|
<h1 className="text-primary">Wi-Fi prototype board</h1>
|
||||||
<h4 className="text-secondary">Embedded internship project</h4>
|
<h4 className="text-secondary">Embedded internship project</h4>
|
||||||
@ -55,7 +48,6 @@ const WifiPrototype = () => {
|
|||||||
</picture>
|
</picture>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,14 +4,7 @@ import React from 'react';
|
|||||||
const Windows10Cookbook = () => {
|
const Windows10Cookbook = () => {
|
||||||
return (
|
return (
|
||||||
<div className='row'>
|
<div className='row'>
|
||||||
<div className="sidebar col-3 position-fixed">
|
<a href='..'>Software</a>
|
||||||
<div id="list-example" className="list-group">
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-intro">Intro</a>
|
|
||||||
<a className="list-group-item list-group-item-action list-group-item-primary" href="#list-mockups">Mockups</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="scrollspy-example col-6 offset-3" data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" tabIndex="0">
|
|
||||||
<section id="list-intro" className="content-section">
|
<section id="list-intro" className="content-section">
|
||||||
<h1 className="text-primary">Windows 10 Cookbook</h1>
|
<h1 className="text-primary">Windows 10 Cookbook</h1>
|
||||||
<h4 className="text-secondary">UWP application</h4>
|
<h4 className="text-secondary">UWP application</h4>
|
||||||
@ -64,7 +57,6 @@ const Windows10Cookbook = () => {
|
|||||||
</picture>
|
</picture>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -21,6 +21,28 @@ const SoftwareMain = () => {
|
|||||||
</ul>
|
</ul>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
|
<h2>{getString('software_projects')}</h2>
|
||||||
|
<div style={{display: "inline-block"}}>
|
||||||
|
<ul>
|
||||||
|
<li><a href="./project/kanji-application">{getString('kanji_application')}</a></li>
|
||||||
|
<li><a href="./project/dxp-development">{getString('dxp_development')}</a></li>
|
||||||
|
<li><a href="./project/wifi-prototype">{getString('wifi_prototype')}</a></li>
|
||||||
|
<li><a href="./project/embedded-game">{getString('embedded_game')}</a></li>
|
||||||
|
<li><a href="./project/raspberry-pi-jukebox">{getString('raspberry_pi_jukebox')}</a></li>
|
||||||
|
<li><a href="./project/teslamaze">{getString('teslamaze')}</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div style={{display: "inline-block"}}>
|
||||||
|
<ul>
|
||||||
|
<li><a href="./project/embedded-internet-radio">{getString('embedded_internet_radio')}</a></li>
|
||||||
|
<li><a href="./project/windows10-cookbook">{getString('windows10_cookbook')}</a></li>
|
||||||
|
<li><a href="./project/ios-airports">{getString('ios_airports')}</a></li>
|
||||||
|
<li><a href="./project/festival-simulator">{getString('festival_simulator')}</a></li>
|
||||||
|
<li><a href="./project/boebot">{getString('boebot')}</a></li>
|
||||||
|
<li><a href="./project/attachment-module">{getString('attachment_module')}</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
<h2>{getString('education')}</h2>
|
<h2>{getString('education')}</h2>
|
||||||
{educationData.education.map((edu, index) => (
|
{educationData.education.map((edu, index) => (
|
||||||
<div key={edu.name + index}>
|
<div key={edu.name + index}>
|
||||||
|
|||||||
@ -6,7 +6,6 @@ import BlogPage from './Pages/Plamo/BlogPage';
|
|||||||
import CSharpPage from './Pages/Software/csharp/CSharpPage';
|
import CSharpPage from './Pages/Software/csharp/CSharpPage';
|
||||||
import ElmPage from './Pages/Software/elm/ElmPage';
|
import ElmPage from './Pages/Software/elm/ElmPage';
|
||||||
|
|
||||||
|
|
||||||
// Japan
|
// Japan
|
||||||
export const japaneseRoutes = languages.map(lang => {
|
export const japaneseRoutes = languages.map(lang => {
|
||||||
const pages = ['but', 'cheat-sheet', 'contrast-particle', 'dake-vs-shika', 'expressions', 'if-when', 'japanese-scale-modelling-tools', 'mae-ni-ato-de', 'particles', 'rashii-kamoshirenai-darou', 'tameni-youni-noni', 'te-form', 'te-oku', 'toka-tari-shi', 'verbs'];
|
const pages = ['but', 'cheat-sheet', 'contrast-particle', 'dake-vs-shika', 'expressions', 'if-when', 'japanese-scale-modelling-tools', 'mae-ni-ato-de', 'particles', 'rashii-kamoshirenai-darou', 'tameni-youni-noni', 'te-form', 'te-oku', 'toka-tari-shi', 'verbs'];
|
||||||
@ -26,6 +25,14 @@ export const plamoBlogRoutes = languages.map(lang => {
|
|||||||
return <Route key={`${lang}-${page}`} exact path={path} element={<BlogPage mdPath={mdPath} />} />;
|
return <Route key={`${lang}-${page}`} exact path={path} element={<BlogPage mdPath={mdPath} />} />;
|
||||||
});
|
});
|
||||||
}).flat();
|
}).flat();
|
||||||
|
export const plamoEquipmentRoutes = languages.map(lang => {
|
||||||
|
const pages = ['airbrush-cabine'];
|
||||||
|
return pages.map(page => {
|
||||||
|
const path = `/${lang}/plamo/equipment/${page}`;
|
||||||
|
const mdPath = `Plamo/equipment/${lang}/${page}.md`;
|
||||||
|
return <Route key={`${lang}-${page}`} exact path={path} element={<BlogPage mdPath={mdPath} />} />;
|
||||||
|
});
|
||||||
|
}).flat();
|
||||||
|
|
||||||
// Software
|
// Software
|
||||||
export const programmingLanguageRoutes = languages.map(lang => {
|
export const programmingLanguageRoutes = languages.map(lang => {
|
||||||
|
|||||||
@ -37,7 +37,8 @@ const Navigation = () => {
|
|||||||
<li><Link reloadDocument to={currentLanguage + '/japan/'} className="dropdown-item">{getString('japan')}</Link></li>
|
<li><Link reloadDocument to={currentLanguage + '/japan/'} className="dropdown-item">{getString('japan')}</Link></li>
|
||||||
<li><hr className="dropdown-divider" /></li>
|
<li><hr className="dropdown-divider" /></li>
|
||||||
<li><Link reloadDocument to={currentLanguage + '/radio/'} className="dropdown-item">{getString('radio_amateur')}</Link></li>
|
<li><Link reloadDocument to={currentLanguage + '/radio/'} className="dropdown-item">{getString('radio_amateur')}</Link></li>
|
||||||
<li className="hidden"><Link reloadDocument to={currentLanguage + '/scalemodel/'} className="dropdown-item">{getString('scalemodel')}</Link></li>
|
<li><hr className="dropdown-divider" /></li>
|
||||||
|
<li><Link reloadDocument to={currentLanguage + '/plamo/'} className="dropdown-item">{getString('plamo')}</Link></li>
|
||||||
<li><hr className="dropdown-divider" /></li>
|
<li><hr className="dropdown-divider" /></li>
|
||||||
<li><Link reloadDocument to={currentLanguage + '/software/'} className="dropdown-item">{getString('software')}</Link></li>
|
<li><Link reloadDocument to={currentLanguage + '/software/'} className="dropdown-item">{getString('software')}</Link></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user