1. týden: Úvod a dokumentace Week 1: Introduction and documentation
Během prvního týdne bylo úkolem vytvořit si osobní stránky a představit prvotní ideu závěrečného projektu. During the first week, the task was to create a personal website and introduce the initial idea for the final project.
Tvorba webových stránek Website creation
Poznámka: Právě si prohlížíte novější, upravenou verzi tohoto webu. Pokud by vás zajímalo, jak stránka vypadala ve své originální podobě z dob předmětu JVC, můžete navštívit původní verzi zde. Note: You are currently viewing a newer, updated version of this website. If you are interested in seeing how the site looked in its original form from the time of the JVC course, you can visit the original version here.
Vzhledem k tomu, že s tvorbou webů nemám žádné předchozí zkušenosti, nebylo mým cílem vytvořit nic přehnaně komplexního. Zvolil jsem radši minimalistický a přehledný design. Since I have no prior experience with web development, it was not my goal to create anything overly complex. Instead, I opted for a minimalist and clean design.
Začal jsem se základním návodem pro GitLab Pages a následně jsem zhlédl několik úvodních videí na YouTube, abych pochopil základy HTML a CSS. Při psaní kódu jsem využíval umělou inteligenci (Gemini). Snažil jsem se však kód slepě nekopírovat, ale pochopit ho, a používat AI spíše jako nástroj pro efektivnější práci. I started with a basic tutorial for GitLab Pages and then watched a few introductory YouTube videos to understand the basics of HTML and CSS. When writing the code, I used artificial intelligence (Gemini). However, I tried not to blindly copy the code, but rather to understand it, and use AI more as a tool for more efficient work.
Pro lepší udržitelnost jsem se snažil projekt logicky strukturovat. Zatímco HTML soubory tvoří samotný obsah stránek, jejich vzhled je dán souborem style.css. Všechny obrázky jsem přesunul do samostatné složky media. For better maintainability, I tried to structure the project logically. While the HTML files make up the actual content of the pages, their appearance is defined by the style.css file. I moved all images into a separate media folder.
Jelikož by celková velikost webu neměla přesáhnout 100 MB a plánuji nahrávat velké množství obrázků a videí, bude nutné všechna média komprimovat. Fotografie z iPhonu, které mívají několik megabajtů, budu zmenšovat pomocí aplikace Výstřižky ve Windows - ta je dokáže zmenšit na 100 až 300 kB bez viditelné ztráty kvality. Videa pak budu upravovat v bezplatném programu Shotcut. Since the total size of the website should not exceed 100 MB and I plan to upload a large amount of images and videos, it will be necessary to compress all media. iPhone photos, which tend to be several megabytes in size, will be downsized using the Snipping Tool in Windows - it can reduce them to 100 to 300 kB without visible loss of quality. I will then edit the videos in the free program Shotcut.
Ke každému projektu budu přikládat jeho zdrojový kód. Pro lepší čitelnost a přehlednost využívám knihovnu Prism.js, která zvýrazňuje syntax. Kód tak vypadá podobně jako např. ve VS Code. I will attach the source code to each project. For better readability and clarity, I am using the Prism.js library, which highlights syntax. The code thus looks similar to, for example, VS Code.
<!DOCTYPE html>
<html lang="cs">
<head>
<!-- ... -->
<link rel="stylesheet" href="style.css">
<link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css" rel="stylesheet" />
</head>
<body>
<!-- ... -->
<div class="code-container">
<div class="code-header">
<div class="code-info">
<button class="toggle-btn" title="Rozbalit/Sbalit kód">▼</button>
<span class="lang-badge">HTML</span>
<span class="language-label">vkladani_kodu.html</span>
</div>
<button class="copy-btn">Kopírovat</button>
</div>
<div class="code-content">
<pre><code class="language-html">
<!-- Zdrojový kód -->
</code></pre>
</div>
</div>
<!-- ... -->
<script>
document.addEventListener('DOMContentLoaded', () => {
const codeContainers = document.querySelectorAll('.code-container');
codeContainers.forEach(container => {
const toggleBtn = container.querySelector('.toggle-btn');
const copyBtn = container.querySelector('.copy-btn');
const codeContent = container.querySelector('.code-content');
const codeBlock = container.querySelector('code');
codeContent.classList.add('collapsed');
toggleBtn.textContent = '▶\uFE0E';
toggleBtn.addEventListener('click', () => {
codeContent.classList.toggle('collapsed');
if (codeContent.classList.contains('collapsed')) {
toggleBtn.textContent = '▶\uFE0E';
} else {
toggleBtn.textContent = '▼\uFE0E';
}
});
copyBtn.addEventListener('click', () => {
const textToCopy = codeBlock.innerText;
navigator.clipboard.writeText(textToCopy).then(() => {
const originalText = copyBtn.textContent;
copyBtn.textContent = 'Zkopírováno';
copyBtn.style.color = '#28a745';
setTimeout(() => {
copyBtn.textContent = originalText;
copyBtn.style.color = '';
}, 2000);
}).catch(err => {
console.error('chyba ', err);
copyBtn.textContent = 'Chyba!';
});
});
});
});
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-c.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-cpp.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-python.min.js"></script>
</body>
</html>
Prvotní idea závěrečného projektu Initial idea for the final project
Jako závěrečný projekt se pokusím postavit hexapoda, tedy šestinohého robota. Tento projekt plánuji již delší dobu, jsem tedy rád, že mám konečně záminku ho zrealizovat. For the final project, I will attempt to build a hexapod, a six-legged robot. I have been planning this project for quite some time, so I am glad to finally have an excuse to realize it.
Mým hlavním cílem je vytvořit hexapoda postaveného na Raspberry Pi 5, který bude splňovat následující: My main goal is to create a hexapod built on a Raspberry Pi 5, which will meet the following criteria:
- Chůze v libovolném směru bez nutnosti otáčet tělo, tedy "krabí" chůze. Walking in any direction without the need to rotate the body, i.e., "crab" walking.
- Možnost přepnout mód chůze na pohyb dopředu a dozadu s běžným zatáčením. The ability to switch the walking mode to forward and backward movement with standard turning.
- Možnost přepínání mezi různými vzory chůze (gaity). The ability to switch between different walking patterns (gaits).
- Náklon těla ve třech osách (roll, pitch, yaw) a jeho posun ve třech osách (x, y, z). Body tilt in three axes (roll, pitch, yaw) and its translation in three axes (x, y, z).
- Schopnost provádět všechny výše zmíněné náklony a posuny současně, a to i během chůze. The ability to perform all the mentioned tilts and translations simultaneously, even while walking.
- Možnost konstrukci vytisknout na 3D tiskárně Bambu Lab A1 mini (tisková plocha 180 × 180 mm). The ability to print the structure on a Bambu Lab A1 mini 3D printer (build volume 180 × 180 mm).
- K robotovi chci navíc sestrojit dálkový ovladač, který bude postavený na Arduinu a bude komunikovat přes Bluetooth. Additionally, I want to build a remote control for the robot, which will be based on Arduino and will communicate via Bluetooth.