From 6fec46c8bc0f507d8a8932051322bc7d532b2d48 Mon Sep 17 00:00:00 2001 From: PA4KEV Date: Tue, 3 Jan 2023 22:28:58 +0100 Subject: [PATCH] Apply primary and secondary colours and change favicon --- public/favicon.ico | Bin 24838 -> 24838 bytes src/App.js | 2 +- src/Pages/Home.js | 4 ++-- src/Pages/Linux/Linux.js | 4 ++-- src/Pages/Radio/Radio.js | 4 ++-- .../Software/Projects/ConfigAutomation.js | 20 +++++++++--------- src/Pages/Software/Projects/DXPDevelopment.js | 14 ++++++------ src/Pages/Software/Software.js | 20 +++++++++--------- src/UI/Navigation.js | 2 +- 9 files changed, 35 insertions(+), 35 deletions(-) diff --git a/public/favicon.ico b/public/favicon.ico index 48b9229cdd1370c5fcb8968a94a4e1c4f0ab564e..5fe92ee30b28654c00fe5908cea6bb1e41843e24 100644 GIT binary patch literal 24838 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 literal 24838 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 meWm {
-

Hallo, my name is Kevin.

-

Nice to meet you! :)

+

Hallo, my name is Kevin.

+

Nice to meet you! :)

I have done configuration automation, DXP development and ...

When it comes to technology and engineering, I am always curious and eager to learn and adept myself. One of the things I enjoy the most is being able to teach others. Interns who enthousiastically become better programmers themselves through my knowledge is amazing! Check out my Software journey.

My other interests are:

diff --git a/src/Pages/Linux/Linux.js b/src/Pages/Linux/Linux.js index 7566647..371a633 100644 --- a/src/Pages/Linux/Linux.js +++ b/src/Pages/Linux/Linux.js @@ -7,14 +7,14 @@ const Linux = () => {
- intro + intro
-

Linux

+

Linux

diff --git a/src/Pages/Radio/Radio.js b/src/Pages/Radio/Radio.js index 482a707..0fb0da1 100644 --- a/src/Pages/Radio/Radio.js +++ b/src/Pages/Radio/Radio.js @@ -5,14 +5,14 @@ const Radio = () => {
- intro + intro
-

Radio amateur

+

Radio amateur

My callsign is: PA4KEV

diff --git a/src/Pages/Software/Projects/ConfigAutomation.js b/src/Pages/Software/Projects/ConfigAutomation.js index 3bc5ebc..ec7f1f2 100644 --- a/src/Pages/Software/Projects/ConfigAutomation.js +++ b/src/Pages/Software/Projects/ConfigAutomation.js @@ -5,24 +5,24 @@ const ConfigAutomation = () => {
-

Configuration automation

+

Configuration automation

At Hitachi Vantara I worked with other developers on automating a configuration process using Python and several external API.

Products would be picked, assembled, configured and finally packaged for shipping at the distribution centre where I collaborated on this project. Configuration happend by connecting a Windows laptop to the product and apply settings. This related to the product's operating system, network and storage settings.

CTO config
-

Development

+

Development

This project started as a local Python 2 script when it started, to only automate very specific settings. It later moved to USB drives and eventually to a VM on a network.

It eventually grew to support multiple product lines and at this moment I joined the other programmer to further extend this software after my internship.

Here I learnt working properly with Git and designing software architecture. I also learnt how to create automation by interfacing by GUI automation with AutoHotkey and combine multiple APIs to achieve results.

@@ -32,7 +32,7 @@ const ConfigAutomation = () => {
-

Deployment

+

Deployment

Creating the release of this software had to be done by running a batch script to create a bundled set of Python files. These files were then uploaded to the VM located in a European distribution center in the Netherlands. This VM is then used to run the software from on a local network on which all configuration laptops were connected to. A WinSCP script would then sync the contents of all VM's in distribution centres located in Singapore, United States and China in 24 hours.

A script (stub) on the configuration laptop would connect to the VM and run Python locally to receive instructions. The technician selects the product through a CLI menu and automated configuration starts.

Dedicated storage managing software had to be installed, so communicating with the Japanese supplier was always important. This software and other assets were separately deployed to create a stable configuration process.

@@ -40,14 +40,14 @@ const ConfigAutomation = () => {
-

Feedback

+

Feedback

The application generated log files with each configuration and then upload these back to the VM after configuration was complete or halted. These logs were sorted under product name and the order number. But quite often, I found it very productive to go to the configuration area and simply talk with the technician to figure out what went wrong. Depending on the severity of the problem, it would get documented in Gitlab issues. On a weekly basis, issues would get assigned among developers.

Communication is always import and essential for proper DevOps. The people who operate and configure these machines daily often know a lot more details that can be used to optimize the software. But be certain to make them realize that they also contribute to profit, rather than believing their job may become obsolete.

Hitachi banner
-

Lessons learnt

+

Lessons learnt

Being a programmer, I was mostly concerned with the software. But it requires hardware to run on. When the software does not work because of differences in the platform the software run on, what is there to do? I eventually started managing around 40 configuration laptops, using Clonezilla to create identical machines.

Docker would have been an ideal solution, but I did not know much of it at the time.

Also my many points of learning in git merges, creating release tags, deploying broken versions of the software and immediatly needing to patch with hotfixes, all contributed to my learning of software development.

diff --git a/src/Pages/Software/Projects/DXPDevelopment.js b/src/Pages/Software/Projects/DXPDevelopment.js index e48fdd9..4bc9233 100644 --- a/src/Pages/Software/Projects/DXPDevelopment.js +++ b/src/Pages/Software/Projects/DXPDevelopment.js @@ -5,16 +5,16 @@ const DXPDevelopment = () => {
-

DXP Development

-

OPPLE Catalog Generator

+

DXP Development

+

OPPLE Catalog Generator

What is DXP? It stands for Digital Experience Platform and is basically interactive software where data can be maintained. One such DXP I loved working on was for OPPLE. They are a brand of lighting products and have over 14000 different items.

My contributions were taking ownership of their catalog generator tool and maintaining the data of their products in Drupal on their website.

You can view the catalog here: https://www.opple.nl/en/product-catalogue-np

@@ -24,13 +24,13 @@ const DXPDevelopment = () => {
-

Legacy

+

Legacy

This project was handed to me as a monolithic source, with only 1 PHP file containing all the rendering logic and handling exceptions (as in, many products had their own unique, exceptional attributes). This was a project that had outgrown itself and was hard to scale further due to the current structure. I had to improve the code base, while retaining the legacy functions. But because everything was so tightly coupled I had to make sure a change did not break functionality elsewhere. The key is to write new code and provide "safety nets" for older code.

A common misconception is to think by creating quick code, is easy gain. Not much effort, just copy and paste the existing logic and adjust it a bit. Then put it in the same file, no need to document it. But by building up Technical Dept, you will either leave this code behind or you will forget how everything works. Making code scalable, is essential. Even for "small" or "temporary" projects. Do not take shortcuts, thinking it will save time or meet the deadline.

-

Improvement

+

Improvement

Restructuring code built as such requires mostly patience. You cannot instantly restart everything, as this tool is used in production. You cannot create a new architecture complete with diagrams, there is currently no time. It is not the only project I work on, there are 20 other projects that also require attention. Instead, I started by moving functions around every time I worked on a new feature for the tool. Dedicating existing functions to separate module files was the start. Creating object-oriented code for new features was the next step. Applying unit tests came next. As long as a new feature request did not exceed in time, it could be slowly prepared to grow by having prework done every time.

Eventually, it became a tool with composed logic, making future maintenance and feature requests a lot more simple.

Moving forward with a structured tool, I am proud to have collaborated on this project!

diff --git a/src/Pages/Software/Software.js b/src/Pages/Software/Software.js index 8961fe7..b7cce28 100644 --- a/src/Pages/Software/Software.js +++ b/src/Pages/Software/Software.js @@ -7,18 +7,18 @@ const Software = () => {
-

Skills

+

Skills


Programming languages & Tools

    @@ -33,7 +33,7 @@ const Software = () => {
-

Projects

+

Projects


Projects I have worked on:

    @@ -44,7 +44,7 @@ const Software = () => {
    -

    Education

    +

    Education


    Computer engineering of applied computer science

    Bachelor of computer science
    @@ -62,7 +62,7 @@ const Software = () => {
    -

    Certification

    +

    Certification


    LPIC-1

    @@ -79,7 +79,7 @@ const Software = () => {
    -

    Courses

    +

    Courses


    Docker Mastery: Kubernetes + Swarm from a Docker Captain
    diff --git a/src/UI/Navigation.js b/src/UI/Navigation.js index 890184d..a2ae4ad 100644 --- a/src/UI/Navigation.js +++ b/src/UI/Navigation.js @@ -14,7 +14,7 @@ import './Navigation.css'; const Navigation = (props) => { return ( -