Compare commits
2 Commits
b653d69e77
...
hw3
| Author | SHA1 | Date | |
|---|---|---|---|
| 5f692a4708 | |||
| b98abb94cc |
4
.gitignore
vendored
@@ -1,2 +1,2 @@
|
|||||||
node_modules
|
**node_modules
|
||||||
to_reform
|
**to_reform
|
||||||
37
convert_to_html.py
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
import csv
|
||||||
|
|
||||||
|
def create_html_table_from_csv(csv_path, html_path):
|
||||||
|
try:
|
||||||
|
with open(csv_path, 'r', newline='', encoding='utf-8') as csv_file:
|
||||||
|
reader = csv.reader(csv_file)
|
||||||
|
header = next(reader)
|
||||||
|
|
||||||
|
with open(html_path, 'w', encoding='utf-8') as html_file:
|
||||||
|
html_file.write('<table class="data-table">\n')
|
||||||
|
|
||||||
|
html_file.write('<thead>\n')
|
||||||
|
html_file.write('<tr>\n')
|
||||||
|
for column_header in header:
|
||||||
|
html_file.write(f'<th>{column_header}</th>\n')
|
||||||
|
html_file.write('</tr>\n')
|
||||||
|
html_file.write('</thead>\n')
|
||||||
|
|
||||||
|
html_file.write('<tbody>\n')
|
||||||
|
for row in reader:
|
||||||
|
html_file.write('<tr>\n')
|
||||||
|
for cell in row:
|
||||||
|
html_file.write(f'<td>{cell}</td>\n')
|
||||||
|
html_file.write('</tr>\n')
|
||||||
|
html_file.write('</tbody>\n')
|
||||||
|
|
||||||
|
html_file.write('</table>\n')
|
||||||
|
|
||||||
|
print(f"Successfully created {html_path} from {csv_path}")
|
||||||
|
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
csv_file_name = 'temp_sensor_data.csv'
|
||||||
|
html_file_name = 'test.html'
|
||||||
|
create_html_table_from_csv(csv_file_name, html_file_name)
|
||||||
104
embeded_details.html
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>
|
||||||
|
Embedded Details
|
||||||
|
</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body bgcolor="#F0F8FF">
|
||||||
|
<details>
|
||||||
|
<summary>Menu</summary>
|
||||||
|
<ul>
|
||||||
|
<li><a href="./index.html">Home</a></li>
|
||||||
|
<li><a href="./embeded_details.html"><h4>Embeded Details</h4></a></li>
|
||||||
|
<li><a href="./opencv_details.html">OpenCV Details</a></li>
|
||||||
|
<li><a href="./photography_details.html">Photography Details</a></li>
|
||||||
|
<li><a href="./table.html">Table with filters (not working yet)</a></li>
|
||||||
|
<li><a href="./images/institute.png">Institute</a></li>
|
||||||
|
</ul>
|
||||||
|
</details>
|
||||||
|
<h2 align="center">Embedded Details</h2>
|
||||||
|
<hr width="800" align="center">
|
||||||
|
<p align="center">
|
||||||
|
<img src="./images/esp32.png" alt="ESP32" height="150">
|
||||||
|
<img src="./images/arduino.png" alt="Arduino" height="150">
|
||||||
|
<img src="./images/stm32.png" alt="STM32" height="150">
|
||||||
|
</p>
|
||||||
|
<p align="justify">My programming path started with embeded systems,
|
||||||
|
i love all the low level things that Mcu could do with just a little bit of code,
|
||||||
|
sometimes build or flashing progress could take some time to get a hand of , but after that everething usualy
|
||||||
|
goes smooth</p>
|
||||||
|
|
||||||
|
<p align="justify">The first MCU i tried was a ATmega328P,
|
||||||
|
after some time i was surprised with the debug capabilities on the Stm32
|
||||||
|
and now i'm working with esp32-s3 , that's a good chip, has internal JTAG and all the shiny wireless interfaces
|
||||||
|
but feels faulty
|
||||||
|
for some reason <i> regular segfaults with CDC</i></p>
|
||||||
|
|
||||||
|
|
||||||
|
<h3 align="center">Microcontroller Comparison Table</h3>
|
||||||
|
<table border="1" align="center" cellpadding="6" cellspacing="0">
|
||||||
|
<tr>
|
||||||
|
<th>Board/MCU</th>
|
||||||
|
<th>UART Count</th>
|
||||||
|
<th>Dynamic UART Assignment</th>
|
||||||
|
<th>ADC Channels</th>
|
||||||
|
<th>Debug Support</th>
|
||||||
|
<th>Flash Size</th>
|
||||||
|
<th>Wireless Connectivity</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>ESP32</td>
|
||||||
|
<td>3</td>
|
||||||
|
<td>Yes (via IO MUX)</td>
|
||||||
|
<td>18</td>
|
||||||
|
<td>JTAG, Serial</td>
|
||||||
|
<td>4MB (typical)</td>
|
||||||
|
<td>Wi-Fi, Bluetooth</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>ESP32-S3</td>
|
||||||
|
<td>3</td>
|
||||||
|
<td>Yes (via IO MUX)</td>
|
||||||
|
<td>20</td>
|
||||||
|
<td>JTAG, Serial</td>
|
||||||
|
<td>8MB (typical)</td>
|
||||||
|
<td>Wi-Fi, Bluetooth LE</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>ESP-01</td>
|
||||||
|
<td>1</td>
|
||||||
|
<td>No</td>
|
||||||
|
<td>1</td>
|
||||||
|
<td>Serial only</td>
|
||||||
|
<td>512KB/1MB</td>
|
||||||
|
<td>Wi-Fi</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Arduino Uno (ATmega328P)</td>
|
||||||
|
<td>1</td>
|
||||||
|
<td>No</td>
|
||||||
|
<td>6</td>
|
||||||
|
<td>Serial, DebugWire</td>
|
||||||
|
<td>32KB</td>
|
||||||
|
<td>None</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Blue Pill (STM32F103C8T6)</td>
|
||||||
|
<td>3</td>
|
||||||
|
<td>Yes (remappable)</td>
|
||||||
|
<td>10</td>
|
||||||
|
<td>SWD, Serial</td>
|
||||||
|
<td>64KB/128KB</td>
|
||||||
|
<td>None</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<p align="right"> no rpi pico here , the build system has won over my temper</p>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
Before Width: | Height: | Size: 198 KiB After Width: | Height: | Size: 198 KiB |
|
Before Width: | Height: | Size: 159 KiB After Width: | Height: | Size: 159 KiB |
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 229 KiB After Width: | Height: | Size: 229 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 347 KiB After Width: | Height: | Size: 347 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 2.3 MiB After Width: | Height: | Size: 2.3 MiB |
|
Before Width: | Height: | Size: 5.2 MiB After Width: | Height: | Size: 5.2 MiB |
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 3.9 MiB After Width: | Height: | Size: 3.9 MiB |
|
Before Width: | Height: | Size: 4.4 MiB After Width: | Height: | Size: 4.4 MiB |
|
Before Width: | Height: | Size: 1.9 MiB After Width: | Height: | Size: 1.9 MiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 99 KiB |
197
index.css
Normal file
@@ -0,0 +1,197 @@
|
|||||||
|
/* menu part */
|
||||||
|
.menu {
|
||||||
|
border-top: double thick silver;
|
||||||
|
border-bottom: double thick silver;
|
||||||
|
font-size: 0;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(7, min-content);
|
||||||
|
grid-template-rows: 1fr;
|
||||||
|
justify-items: start;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.menu-item {
|
||||||
|
display: inline-block;
|
||||||
|
width: max-content;
|
||||||
|
height: 3em;
|
||||||
|
line-height: 3em;
|
||||||
|
/* to align to center */
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: middle;
|
||||||
|
padding: 0 10px;
|
||||||
|
margin: 0 10px;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
font-size: medium;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu .selected {
|
||||||
|
color: green;
|
||||||
|
font-weight: bold;
|
||||||
|
border-left: double thin silver;
|
||||||
|
border-right: double thin silver;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu .menu-header {
|
||||||
|
color: green;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu a {
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@media screen and (max-width: 800px) {
|
||||||
|
.menu {
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
grid-template-rows: 1fr 1fr 1fr;
|
||||||
|
justify-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu .selected {
|
||||||
|
border-bottom: double thick silver;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 3 images part */
|
||||||
|
.images-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
width: 90%;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.images-container>img {
|
||||||
|
margin: auto;
|
||||||
|
width:100%;
|
||||||
|
border: thin solid black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.images-container>img:nth-child(2n+1) {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 800px) {
|
||||||
|
.images-container {
|
||||||
|
display: inline-flex;
|
||||||
|
flex-direction: column;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.images-container>img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.images-container>img:nth-child(2n+1) {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* text block part */
|
||||||
|
.info-block-header {
|
||||||
|
display: block;
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block-border {
|
||||||
|
border: solid thin black;
|
||||||
|
padding: 2vw;
|
||||||
|
margin: 1vw 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block-a-container {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 3fr 3fr 2fr;
|
||||||
|
grid-template-rows: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 800px) {
|
||||||
|
.block-a-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.block-b-container {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 4fr 7fr 4fr;
|
||||||
|
grid-template-rows: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 800px) {
|
||||||
|
.block-b-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.h-block>* {
|
||||||
|
margin: 2vw;
|
||||||
|
}
|
||||||
|
|
||||||
|
.h-block>span,
|
||||||
|
.h-block>div {
|
||||||
|
text-align: justify;
|
||||||
|
}
|
||||||
|
|
||||||
|
.h-block>img {
|
||||||
|
margin: auto;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
/*small articles part*/
|
||||||
|
.main-right{
|
||||||
|
border-left: thin solid black;
|
||||||
|
margin: 30px 0 0 50px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.small-info-block{
|
||||||
|
margin: 20px 10px 0 ;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
grid-template-rows: auto;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 1000px) {
|
||||||
|
.small-info-block {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.small-info-block-header{
|
||||||
|
display: block;
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.small-info-block-image >img{
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.small-info-block-text {
|
||||||
|
text-align: justify;
|
||||||
|
}
|
||||||
|
.small-info-block-text >a{
|
||||||
|
display: block;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
/*main part*/
|
||||||
|
.main{
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 3fr 1fr;
|
||||||
|
grid-template-rows: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 800px) {
|
||||||
|
.main {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
}
|
||||||
145
index.html
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>
|
||||||
|
"Portfolio"
|
||||||
|
</title>
|
||||||
|
<link rel="stylesheet" href="./index.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="menu">
|
||||||
|
<a href="./index.html">
|
||||||
|
<div class="menu-item selected">Home</div>
|
||||||
|
</a>
|
||||||
|
<a href="./embeded_details.html">
|
||||||
|
<div class="menu-item">Embedded</div>
|
||||||
|
</a>
|
||||||
|
<a href="./opencv_details.html">
|
||||||
|
<div class="menu-item">OpenCV</div>
|
||||||
|
</a>
|
||||||
|
<a href="./photography_details.html">
|
||||||
|
<div class="menu-item">Photography</div>
|
||||||
|
</a>
|
||||||
|
<a href="./table.html">
|
||||||
|
<div class="menu-item">Table</div>
|
||||||
|
</a>
|
||||||
|
<a href="./images/institute.png">
|
||||||
|
<div class="menu-item">Institute</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="images-container">
|
||||||
|
<img src="./images/sqarucos.png" alt="Arduino">
|
||||||
|
<img src="./images/sqstm32.png" alt="Institute">
|
||||||
|
<img src="./images/sqesp32.png" alt="ESP32">
|
||||||
|
</div>
|
||||||
|
<div class="main">
|
||||||
|
<div class="main-center">
|
||||||
|
<div class="block-border">
|
||||||
|
<span class="info-block-header">Embedded Systems</span>
|
||||||
|
<div class="block-a-container h-block">
|
||||||
|
<span>Had a serval projects with different MCUs and wrote firmware for them.
|
||||||
|
My main stack consists of Platformio+EspIdf or Arduino, also tried STM32
|
||||||
|
</span>
|
||||||
|
<div>
|
||||||
|
<div>I love embeded development beceuse of autonomity of produced devices, the redices are not
|
||||||
|
dependant on
|
||||||
|
any other hardware and can work autunomously
|
||||||
|
</div>
|
||||||
|
<a href="#"> More info</a>
|
||||||
|
</div>
|
||||||
|
<img src="./images/AQ_monitor.png" alt="ESP32">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="block-border">
|
||||||
|
<span class="info-block-header">Embedded Systems</span>
|
||||||
|
<div class="block-b-container h-block">
|
||||||
|
<span>Had a serval projects with different MCUs and wrote firmware for them.
|
||||||
|
My main stack consists of Platformio+EspIdf or Arduino, also tried STM32
|
||||||
|
</span>
|
||||||
|
<img src="./images/remote.jpeg" alt="ESP32">
|
||||||
|
<div>
|
||||||
|
<div>I love embeded development device because of autonomity of produced devices, the devices
|
||||||
|
are
|
||||||
|
not dependant on
|
||||||
|
any other hardware and can work autunomously or off the grid</div>
|
||||||
|
<a href="#"> More info</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="main-right">
|
||||||
|
<div class="small-info-block">
|
||||||
|
<div class="small-info-block-text">
|
||||||
|
<div class="small-info-block-header">Заголовок</div>
|
||||||
|
<span>
|
||||||
|
3D printers are versatile tools
|
||||||
|
used for creating prototypes,
|
||||||
|
custom parts, and artistic designs.
|
||||||
|
They work by layering materials.
|
||||||
|
</span>
|
||||||
|
<a href="#">Подробнее»</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="small-info-block-image">
|
||||||
|
<img src="images/16x10/3d-printer.jpeg" alt="3D Printer">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="small-info-block">
|
||||||
|
<div class="small-info-block-text">
|
||||||
|
<div class="small-info-block-header">BLHeli ESCs</div>
|
||||||
|
<span>
|
||||||
|
BLHeli ESCs are electronic
|
||||||
|
speed controllers designed
|
||||||
|
for drones, offering smooth
|
||||||
|
and precise motor control.
|
||||||
|
</span>
|
||||||
|
<a href="#">Подробнее»</a>
|
||||||
|
</div>
|
||||||
|
<div class="small-info-block-image">
|
||||||
|
<img src="images/16x10/blheli-esc.jpeg" alt="BLHeli ESC">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="small-info-block">
|
||||||
|
<div class="small-info-block-text">
|
||||||
|
<div class="small-info-block-header">Raspberry Pi Nano</div>
|
||||||
|
<span>
|
||||||
|
Raspberry Pi Nano is a compact
|
||||||
|
computer ideal for learning,
|
||||||
|
prototyping, and IoT projects.
|
||||||
|
It is highly energy-efficient.
|
||||||
|
</span>
|
||||||
|
<a href="#">Подробнее»</a>
|
||||||
|
</div>
|
||||||
|
<div class="small-info-block-image">
|
||||||
|
<img src="images/16x10/rpi-nano.jpeg" alt="Raspberry Pi Nano">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="small-info-block">
|
||||||
|
<div class="small-info-block-text">
|
||||||
|
<div class="small-info-block-header">Smart Thermostats</div>
|
||||||
|
<span>
|
||||||
|
Smart thermostats help regulate
|
||||||
|
home temperatures efficiently,
|
||||||
|
saving energy and enhancing
|
||||||
|
comfort with automation.
|
||||||
|
</span>
|
||||||
|
<a href="#">Подробнее»</a>
|
||||||
|
</div>
|
||||||
|
<div class="small-info-block-image">
|
||||||
|
<img src="images/16x10/thermostat.jpeg" alt="Smart Thermostat">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
CN Tower, Торонто, Канада
|
|
||||||
|
|
||||||
553,3-метровая телевизионная башня. Была самым высоким свободно стоящим сооружением в мире с 1976 по 2007 год,
|
|
||||||
а также до сих пор остаётся таковым в Западном полушарии. Является символом Торонто.
|
|
||||||
|
|
||||||
Земляные работы для сооружения железобетонной конструкции с последующим
|
|
||||||
натяжением арматуры весом 130 000 т начались 12 февраля 1973 г., а уже 2 апреля 1975 г. возведение башни было завершено.
|
|
||||||
|
|
||||||
Башня используется для телекоммуникационных нужд. Кроме того, башня используется как обзорная площадка.
|
|
||||||
Также на башне имеется вращающийся ресторан.
|
|
||||||
|
|
||||||
На высоте 447 м находится астрономическая обсерватория.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Бурдж-Халифа, Дубай, ОАЭ
|
|
||||||
|
|
||||||
Небоскрёб высотой 828 метров, самое высокое сооружение в мире. Форма здания напоминает сталагмит.
|
|
||||||
|
|
||||||
Строительство небоскрёба началось в 2004 году и шло со скоростью 1—2 этажа в неделю. Ежедневно на строительстве
|
|
||||||
работало до 12 000 рабочих. На его создание ушло около 320 тыс. м³ бетона и более 60 тыс. тонн стальной арматуры.
|
|
||||||
Бетонные работы были завершены после возведения 160 этажа, далее шла сборка 180-метрового шпиля из металлических
|
|
||||||
конструкций.
|
|
||||||
|
|
||||||
Специально для «Бурдж-Халифа» была разработана особая марка бетона, который выдерживает температуру до +50 °C.
|
|
||||||
Бетонную смесь укладывали только ночью, а в раствор добавляли лёд.
|
|
||||||
|
|
||||||
|
|
||||||
Небесное дерево, Токио, Япония
|
|
||||||
|
|
||||||
Телевизионная башня в районе Сумида самая высокая среди телебашен мира. Высота телебашни вместе с антенной составляет 634 метра.
|
|
||||||
Высота башни была выбрана так, чтобы цифры: 6 (на старом японском «му»), 3 («са»), 4 («си») были созвучны «Мусаси» —
|
|
||||||
названию исторической области, где находится современный Токио.
|
|
||||||
|
|
||||||
Здание напоминает пятиярусную пагоду, что хорошо сочетается с историческим районом Асакуса на другом берегу реки.
|
|
||||||
Основание башни напоминает штатив; с высоты примерно 350 м она имеет цилиндрическую форму, позволяющую наслаждаться
|
|
||||||
панорамными видами реки и города.
|
|
||||||
|
|
||||||
Имеются две наблюдательные площадки: одна на высоте 350 м (вместимостью 2000 человек), другая на высоте 450 м
|
|
||||||
(вместимостью 900 человек).
|
|
||||||
6
labs/fake-lab4/css/bootstrap.min.css
vendored
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 27 KiB |
@@ -1,208 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="ru">
|
|
||||||
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<title>Лабораторная работа Bootstrap</title>
|
|
||||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
|
||||||
<script src="js/bootstrap.bundle.min.js"></script>
|
|
||||||
<style>
|
|
||||||
.lead{
|
|
||||||
text-align: justify;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 576px) {
|
|
||||||
.lead{
|
|
||||||
font-size: 1rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<header>
|
|
||||||
<nav class="navbar navbar-expand-md bg-light navbar-light">
|
|
||||||
|
|
||||||
<!-- Заголовок -->
|
|
||||||
<a class="navbar-brand" href="#">Топ высотных зданий</a>
|
|
||||||
<!-- Кнопка для свернутого меню -->
|
|
||||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#menu">
|
|
||||||
<span class="navbar-toggler-icon"></span>
|
|
||||||
</button>
|
|
||||||
<!-- меню -->
|
|
||||||
<div class="collapse navbar-collapse" id="menu">
|
|
||||||
<ul class="navbar-nav">
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link active" href="#">Главная</a>
|
|
||||||
</li>
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link" href="#">Список зданий</a>
|
|
||||||
</li>
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link disabled" href="#">Контакты</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<!-- форма для поиска -->
|
|
||||||
<form class="d-flex">
|
|
||||||
<input class="form-control" type="text" placeholder="Найти">
|
|
||||||
<button class="btn btn-outline-success" type="submit">Найти</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
</header>
|
|
||||||
<div class="row gy-3 text-center d-none d-md-flex">
|
|
||||||
<div class="col-lg-2 col-md-4 col-6 img-fluid img-thumbnail">
|
|
||||||
<img src="images/image1.jpg" alt="">
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-2 col-md-4 col-6 img-fluid img-thumbnail">
|
|
||||||
<img src="images/image2.jpg" alt="">
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-2 col-md-4 col-6 img-fluid img-thumbnail">
|
|
||||||
<img src="images/image12.jpg" alt="">
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-2 col-md-4 col-6 img-fluid img-thumbnail">
|
|
||||||
<img src="images/image4.jpg" alt="">
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-2 col-md-4 col-6 img-fluid img-thumbnail">
|
|
||||||
<img src="images/image5.jpg" alt="">
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-2 col-md-4 col-6 img-fluid img-thumbnail">
|
|
||||||
<img src="images/image6.jpg" alt="">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div id="gallery" class="carousel slide carousel-dark d-block d-md-none " data-bs-ride="carousel">
|
|
||||||
|
|
||||||
<!-- Содержимое галереи -->
|
|
||||||
<div class="carousel-inner">
|
|
||||||
<div class="carousel-item active">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="carousel-item ">
|
|
||||||
<img src="images/image1.jpg" class="d-block mx-auto" alt="">
|
|
||||||
</div>
|
|
||||||
<div class="carousel-item">
|
|
||||||
<img src="images/image2.jpg" class="d-block mx-auto" alt="">
|
|
||||||
</div>
|
|
||||||
<div class="carousel-item">
|
|
||||||
<img src="images/image12.jpg" class="d-block mx-auto" alt="">
|
|
||||||
</div>
|
|
||||||
<div class="carousel-item">
|
|
||||||
<img src="images/image4.jpg" class="d-block mx-auto" alt="">
|
|
||||||
</div>
|
|
||||||
<div class="carousel-item">
|
|
||||||
<img src="images/image5.jpg" class="d-block mx-auto" alt="">
|
|
||||||
</div>
|
|
||||||
<div class="carousel-item">
|
|
||||||
<img src="images/image6.jpg" class="d-block mx-auto" alt="">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Кнопки управления -->
|
|
||||||
<button class="carousel-control-prev" type="button" data-bs-target="#gallery" data-bs-slide="prev">
|
|
||||||
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
|
||||||
<span class="visually-hidden">Предыдущий</span>
|
|
||||||
</button>
|
|
||||||
<button class="carousel-control-next" type="button" data-bs-target="#gallery" data-bs-slide="next">
|
|
||||||
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
|
||||||
<span class="visually-hidden">Следующий</span>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<main class="container">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-9">
|
|
||||||
<h2>
|
|
||||||
CN Tower, <span class="text-muted">Торонто, Канада</span>
|
|
||||||
</h2>
|
|
||||||
<p class="lead">
|
|
||||||
553,3-метровая телевизионная башня. Была самым высоким свободно стоящим сооружением в мире с 1976 по
|
|
||||||
2007 год,
|
|
||||||
а также до сих пор остаётся таковым в Западном полушарии. Является символом Торонто.
|
|
||||||
|
|
||||||
</p>
|
|
||||||
<p class="lead">
|
|
||||||
Земляные работы для сооружения железобетонной конструкции с последующим
|
|
||||||
натяжением арматуры весом 130 000 т начались 12 февраля 1973 г., а уже 2 апреля 1975 г. возведение
|
|
||||||
башни было завершено.
|
|
||||||
</p>
|
|
||||||
<p class="lead">
|
|
||||||
Башня используется для телекоммуникационных нужд. Кроме того, башня используется как обзорная
|
|
||||||
площадка.
|
|
||||||
Также на башне имеется вращающийся ресторан.
|
|
||||||
</p>
|
|
||||||
<p class="lead">
|
|
||||||
На высоте 447 м находится астрономическая обсерватория.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-3">
|
|
||||||
<img src="images/image9.jpg">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row order flex-row-reverse">
|
|
||||||
<div class="col-md-9">
|
|
||||||
<h2>
|
|
||||||
Бурдж-Халифа, <span class="text-muted">Дубай, ОАЭ</span>
|
|
||||||
</h2>
|
|
||||||
<p class="lead">
|
|
||||||
Небоскрёб высотой 828 метров, самое высокое сооружение в мире. Форма здания напоминает сталагмит.
|
|
||||||
</p>
|
|
||||||
<p class="lead">
|
|
||||||
Строительство небоскрёба началось в 2004 году и шло со скоростью 1—2 этажа в неделю. Ежедневно на строительстве
|
|
||||||
работало до 12 000 рабочих. На его создание ушло около 320 тыс. м³ бетона и более 60 тыс. тонн стальной арматуры.
|
|
||||||
Бетонные работы были завершены после возведения 160 этажа, далее шла сборка 180-метрового шпиля из металлических
|
|
||||||
конструкций.
|
|
||||||
</p>
|
|
||||||
<p class="lead">
|
|
||||||
Специально для «Бурдж-Халифа» была разработана особая марка бетона, который выдерживает температуру до +50 °C.
|
|
||||||
Бетонную смесь укладывали только ночью, а в раствор добавляли лёд.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-3">
|
|
||||||
<img src="images/image13.jpg">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-9">
|
|
||||||
<h2>
|
|
||||||
Небесное дерево, <span class="text-muted">Токио, Япония</span>
|
|
||||||
</h2>
|
|
||||||
<p class="lead">
|
|
||||||
Телевизионная башня в районе Сумида самая высокая среди телебашен мира. Высота телебашни вместе с антенной составляет 634 метра.
|
|
||||||
Высота башни была выбрана так, чтобы цифры: 6 (на старом японском «му»), 3 («са»), 4 («си») были созвучны «Мусаси» —
|
|
||||||
названию исторической области, где находится современный Токио.
|
|
||||||
</p>
|
|
||||||
<p class="lead">
|
|
||||||
Здание напоминает пятиярусную пагоду, что хорошо сочетается с историческим районом Асакуса на другом берегу реки.
|
|
||||||
Основание башни напоминает штатив; с высоты примерно 350 м она имеет цилиндрическую форму, позволяющую наслаждаться
|
|
||||||
панорамными видами реки и города.
|
|
||||||
</p>
|
|
||||||
<p class="lead">
|
|
||||||
Имеются две наблюдательные площадки: одна на высоте 350 м (вместимостью 2000 человек), другая на высоте 450 м
|
|
||||||
(вместимостью 900 человек).
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-3">
|
|
||||||
<img src="images/image11.jpg">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
</body>
|
|
||||||
|
|
||||||
</html>
|
|
||||||
7
labs/fake-lab4/js/bootstrap.bundle.min.js
vendored
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 37 KiB |
@@ -3,9 +3,17 @@ h3{
|
|||||||
margin: 1vh;
|
margin: 1vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a{
|
||||||
|
/* display: inline-flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
background-color: gray;
|
||||||
|
width: 10%; это grid!!!*/
|
||||||
|
}
|
||||||
|
|
||||||
.content{
|
.content{
|
||||||
background-color: lightgreen;
|
background-color: lightgreen;
|
||||||
display: flex;
|
display: inline-flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
flex-wrap: nowrap;
|
flex-wrap: nowrap;
|
||||||
padding:10px;
|
padding:10px;
|
||||||
@@ -30,8 +38,13 @@ h3{
|
|||||||
}
|
}
|
||||||
@media (max-width:800px) {
|
@media (max-width:800px) {
|
||||||
.content{
|
.content{
|
||||||
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
.topic{
|
||||||
|
width: calc(100%-20px);
|
||||||
|
/* width:50%; */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* grid part */
|
/* grid part */
|
||||||
|
|||||||
6
labs/lab4/css/bootstrap.min.css
vendored
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 37 KiB |
@@ -1,99 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="ru">
|
|
||||||
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<title>Лабораторная работа Bootstrap</title>
|
|
||||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
|
||||||
<script src="js/bootstrap.bundle.min.js"></script>
|
|
||||||
<style>
|
|
||||||
.lead {
|
|
||||||
text-align: justify;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<body class="container">
|
|
||||||
|
|
||||||
<div class="row bg-lg-light justify-content-center">
|
|
||||||
<div class="col-sm-12 col-md-6 col-xl-4 p-4 text-center">
|
|
||||||
<h3 class="bg-light d-sm-block d-lg-inline my-0 p-2">
|
|
||||||
JavaScript
|
|
||||||
</h3>
|
|
||||||
<div class="bg-light d-lg-flex align-self-center">
|
|
||||||
<p class="lead px-2 m-0">
|
|
||||||
разработан в 1996 году, автор - американский программист Брендан Айк.
|
|
||||||
</p>
|
|
||||||
<img src="images/javascript.jpg" class="d-block m-auto w-50">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row bg-lg-light justify-content-center">
|
|
||||||
<div class="col-sm-12 col-md-6 col-xl-4 p-4 text-center">
|
|
||||||
<h3 class="bg-light d-sm-block d-lg-inline my-0 p-2">
|
|
||||||
Java
|
|
||||||
</h3>
|
|
||||||
<div class="bg-light d-lg-flex align-self-center">
|
|
||||||
<p class="lead px-2 m-0"></p>
|
|
||||||
разработан в 1990–1996 годах канадским программистом Джеймсом Гослингом.
|
|
||||||
</p>
|
|
||||||
<img src="images/java.jpg" class="d-block m-auto w-50">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-sm-12 col-md-6 col-xl-4 p-4 text-center">
|
|
||||||
<h3 class="bg-light d-sm-block d-lg-inline my-0 p-2">
|
|
||||||
C
|
|
||||||
</h3>
|
|
||||||
<div class="bg-light d-lg-flex align-self-center">
|
|
||||||
<p class="lead px-2 m-0">
|
|
||||||
разработан в 1969–1973 годах сотрудником Bell Labs Деннисом Ритчи.
|
|
||||||
</p>
|
|
||||||
<img src="images/c.jpg" class="d-block m-auto w-50">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row bg-lg-light justify-content-center">
|
|
||||||
<div class="col-sm-12 col-md-6 col-xl-4 p-4 text-center">
|
|
||||||
<h3 class="bg-light d-sm-block d-lg-inline my-0 p-2">
|
|
||||||
Prolog
|
|
||||||
</h3>
|
|
||||||
<div class="bg-light d-lg-flex align-self-center">
|
|
||||||
<p class="lead px-2 m-0">
|
|
||||||
разработан в 1972 году, автор - французский программист Ален Колмероэ.
|
|
||||||
</p>
|
|
||||||
<img src="images/prolog.jpg" class="d-block m-auto w-50">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-sm-12 col-md-6 col-xl-4 p-4 text-center">
|
|
||||||
<h3 class="bg-light d-sm-block d-lg-inline my-0 p-2">
|
|
||||||
Python
|
|
||||||
</h3>
|
|
||||||
<div class="bg-light d-lg-flex align-self-center">
|
|
||||||
<p class="lead px-2 m-0">
|
|
||||||
создан в 1989–1991 годах голландским программистом Гвидо ван Россумом.
|
|
||||||
</p>
|
|
||||||
<img src="images/python.jpg" class="d-block m-auto w-50">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-sm-12 col-md-6 col-xl-4 p-4 text-center">
|
|
||||||
<h3 class="bg-light d-sm-block d-lg-inline my-0 p-2">
|
|
||||||
Ruby
|
|
||||||
</h3>
|
|
||||||
<div class="bg-light d-lg-flex align-self-center">
|
|
||||||
<p class="lead px-2 m-0">
|
|
||||||
разработан в 1993-1995 годах, автор - японский программист Юкихиро Мацумото.
|
|
||||||
</p>
|
|
||||||
<img src="images/ruby.jpg" class="d-block m-auto w-50">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
|
|
||||||
</html>
|
|
||||||
7
labs/lab4/js/bootstrap.bundle.min.js
vendored
1
labs/lab5/.gitignore
vendored
@@ -1 +0,0 @@
|
|||||||
node_modules
|
|
||||||
6695
labs/lab5/package-lock.json
generated
@@ -1,30 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "template_pug",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"description": "",
|
|
||||||
"main": "index.js",
|
|
||||||
"scripts": {
|
|
||||||
"build": "webpack --mode production",
|
|
||||||
"serve": "webpack serve --open --mode development",
|
|
||||||
"dev": "webpack --mode development",
|
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
|
||||||
},
|
|
||||||
"keywords": [],
|
|
||||||
"author": "",
|
|
||||||
"license": "ISC",
|
|
||||||
"devDependencies": {
|
|
||||||
"chokidar": "^4.0.3",
|
|
||||||
"css-loader": "^6.8.1",
|
|
||||||
"filemanager-webpack-plugin": "^8.0.0",
|
|
||||||
"glob": "^11.0.3",
|
|
||||||
"html-webpack-plugin": "^5.5.3",
|
|
||||||
"pug": "^2.0.4",
|
|
||||||
"pug-loader": "^2.4.0",
|
|
||||||
"style-loader": "^3.3.3",
|
|
||||||
"stylus": "^0.61.0",
|
|
||||||
"stylus-loader": "^7.1.3",
|
|
||||||
"webpack": "^5.89.0",
|
|
||||||
"webpack-cli": "^5.1.4",
|
|
||||||
"webpack-dev-server": "^4.15.1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
block variables
|
|
||||||
- var title = 'Самые высокие здания и сооружения'
|
|
||||||
-
|
|
||||||
var dictMenu = {'Главная': 'index.html',
|
|
||||||
'Небоскребы' : "#",
|
|
||||||
'Башни': "#",
|
|
||||||
'Список': "#"
|
|
||||||
}
|
|
||||||
|
|
||||||
- var listImages = ['image1.jpg', 'image2.jpg', 'image3.jpg', 'image4.jpg', 'image5.jpg']
|
|
||||||
|
|
||||||
-
|
|
||||||
var listSections = [
|
|
||||||
{'header' : 'Бурдж-Халифа в Дубае, ОАЭ',
|
|
||||||
'image' : 'image7.jpg',
|
|
||||||
'text' : 'Небоскрёб высотой 828 метров, самое высокое сооружение в мире. Форма здания напоминает сталагмит.'
|
|
||||||
},
|
|
||||||
{'header' : 'Токийское небесное дерево, Япония',
|
|
||||||
'image' : 'image6.jpg',
|
|
||||||
'text' : 'Телевизионная башня в районе Сумида самая высокая среди телебашен мира. Высота телебашни вместе с антенной составляет 634 метра.'
|
|
||||||
},
|
|
||||||
{'header' : 'CN Tower, Канада',
|
|
||||||
'image' : 'image8.jpg',
|
|
||||||
'text' : 'Си-Эн Тауэр — самое высокое свободно стоящее сооружение в мире с 1976 по 2007 год. Его высота составляет 553,33 метра.'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
-
|
|
||||||
var structures = [
|
|
||||||
{
|
|
||||||
menuItem: "Ворота Запада, США",
|
|
||||||
pict: "image1_big.jpg",
|
|
||||||
firstP: `Арка в Сент-Луисе, также известная под именем «Врата на запад» — мемориал, являющийся частью Джефферсоновского национального экспансиального мемориала, а также визитной карточкой Сент-Луиса, штат Миссури, США.`,
|
|
||||||
secondP: `Арка была спроектирована финско-американским архитектором Ээро Саариненом в 1947 году. Её высота 192 метра в самой высокой точке, ширина её основания также 192 метра.
|
|
||||||
Таким образом арка является самым высоким памятником на территории США. Её строительство началось 12 февраля 1963 года и было закончено 28 октября 1965 года. Памятник открылся для посетителей 24 июля 1967 года.`
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
h2= 'Hello World!'
|
|
||||||
img(src= require("../images/img1.jpg"))
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
include ../components/data.pug
|
|
||||||
|
|
||||||
mixin createMenu(menu, active)
|
|
||||||
each value, key in menu
|
|
||||||
if active == key
|
|
||||||
a.active(href= value)= key
|
|
||||||
else
|
|
||||||
a(href= value)= key
|
|
||||||
|
|
||||||
mixin createMenuBuild(menu, active)
|
|
||||||
each value, key in menu
|
|
||||||
a(href= value)= key
|
|
||||||
a.active(href= "")= active
|
|
||||||
mixin createSection()
|
|
||||||
each item in listSections
|
|
||||||
section
|
|
||||||
h3= item.header
|
|
||||||
img(src= require("../images/" + item.image))
|
|
||||||
p= item.text
|
|
||||||
a(href="#") …
|
|
||||||
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 162 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 28 KiB |
@@ -1 +0,0 @@
|
|||||||
import './styles/main.styl'
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
extends template
|
|
||||||
|
|
||||||
block nav
|
|
||||||
title #{structures[0].menuItem}
|
|
||||||
nav
|
|
||||||
+createMenuBuild(dictMenu, structures[0].menuItem)
|
|
||||||
|
|
||||||
block header
|
|
||||||
h2= structures[0].menuItem
|
|
||||||
|
|
||||||
block content
|
|
||||||
|
|
||||||
img.big(src= require("../images/" + structures[0].pict))
|
|
||||||
|
|
||||||
section
|
|
||||||
p= structures[0].firstP
|
|
||||||
p= structures[0].secondP
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
extends template
|
|
||||||
|
|
||||||
block nav
|
|
||||||
nav
|
|
||||||
+createMenu(dictMenu, 'Главная')
|
|
||||||
|
|
||||||
block content
|
|
||||||
div.images
|
|
||||||
each pict in listImages
|
|
||||||
a(href= "building.html")
|
|
||||||
img(src= require("../images/" + pict))
|
|
||||||
|
|
||||||
article
|
|
||||||
each item in listSections
|
|
||||||
section
|
|
||||||
h3= item.header
|
|
||||||
img(src= require("../images/" + item.image))
|
|
||||||
p= item.text
|
|
||||||
a(href="#") …
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
include ../components/mixin.pug
|
|
||||||
include ../components/data.pug
|
|
||||||
|
|
||||||
doctype html
|
|
||||||
html(lang="ru")
|
|
||||||
head
|
|
||||||
title #{title}
|
|
||||||
body
|
|
||||||
block header
|
|
||||||
h2= title
|
|
||||||
|
|
||||||
block nav
|
|
||||||
|
|
||||||
block content
|
|
||||||
|
|
||||||
block footer
|
|
||||||
footer
|
|
||||||
h4 © Пример html-страницы
|
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
colorText = #6f6d6d
|
|
||||||
|
|
||||||
back(size)
|
|
||||||
background-color #f1f1f1
|
|
||||||
box-shadow 4px 5px 10px rgba(0, 0, 0, 0.4)
|
|
||||||
padding: size + "%"
|
|
||||||
margin 0 0 1% 0
|
|
||||||
|
|
||||||
html
|
|
||||||
color colorText
|
|
||||||
|
|
||||||
nav
|
|
||||||
back(0)
|
|
||||||
text-align right
|
|
||||||
|
|
||||||
& a
|
|
||||||
display inline-block
|
|
||||||
padding 1%
|
|
||||||
color colorText
|
|
||||||
text-decoration: none
|
|
||||||
|
|
||||||
&:hover
|
|
||||||
&.active
|
|
||||||
background-color #f87777
|
|
||||||
color #f8f8f8
|
|
||||||
|
|
||||||
div.images
|
|
||||||
display grid
|
|
||||||
grid-template-columns repeat(5, 1fr)
|
|
||||||
grid-gap 0.5%
|
|
||||||
back(1)
|
|
||||||
|
|
||||||
& img
|
|
||||||
width: 100%
|
|
||||||
@media (max-width: 600px)
|
|
||||||
grid-template-rows repeat(5, 1fr)
|
|
||||||
grid-template-columns 1fr
|
|
||||||
& img
|
|
||||||
width 80%
|
|
||||||
margin auto
|
|
||||||
article
|
|
||||||
width 80%
|
|
||||||
margin auto
|
|
||||||
display grid
|
|
||||||
grid-template-columns repeat(3, 1fr)
|
|
||||||
grid-gap 4%
|
|
||||||
@media (max-width: 600px)
|
|
||||||
grid-template-rows repeat(3, 1fr)
|
|
||||||
grid-template-columns 1fr
|
|
||||||
& section
|
|
||||||
display grid
|
|
||||||
grid-template-columns 1fr 2fr
|
|
||||||
grid-gap 2%
|
|
||||||
align-items center
|
|
||||||
back(2)
|
|
||||||
|
|
||||||
& h3
|
|
||||||
grid-column 1/3
|
|
||||||
margin 0
|
|
||||||
text-align center
|
|
||||||
|
|
||||||
& img
|
|
||||||
width: 100%
|
|
||||||
|
|
||||||
|
|
||||||
footer
|
|
||||||
background-color colorText
|
|
||||||
color white
|
|
||||||
@media (max-width: 600px)
|
|
||||||
margin 3vh 0
|
|
||||||
& h4
|
|
||||||
padding:10px
|
|
||||||
|
|
||||||
.big
|
|
||||||
width 50vw
|
|
||||||
@media (max-width: 600px)
|
|
||||||
width 100vw
|
|
||||||
|
|
||||||
section
|
|
||||||
display grid
|
|
||||||
grid-template-columns 1fr 1fr
|
|
||||||
|
|
||||||
@media (max-width: 600px)
|
|
||||||
grid-template-columns 1fr
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
const HtmlWebpackPlugin = require("html-webpack-plugin");
|
|
||||||
const FileManagerPlugin = require("filemanager-webpack-plugin");
|
|
||||||
const path = require("path");
|
|
||||||
const fs = require("fs");
|
|
||||||
|
|
||||||
const pagesDir = path.join(__dirname, "src", "pages");
|
|
||||||
const pages = fs.readdirSync(pagesDir).filter(file => file.endsWith(".pug"));
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
output: {
|
|
||||||
path: path.join(__dirname, "dist"),
|
|
||||||
filename: "index.[contenthash].js",
|
|
||||||
assetModuleFilename: path.join("images", "[name].[contenthash][ext]"),
|
|
||||||
},
|
|
||||||
entry: path.join(__dirname, "src", "index.js"),
|
|
||||||
module: {
|
|
||||||
rules: [
|
|
||||||
{
|
|
||||||
test: /\.pug$/,
|
|
||||||
loader: "pug-loader",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /\.(png|jpg|jpeg|gif)$/i,
|
|
||||||
type: "asset/resource",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /\.svg$/,
|
|
||||||
type: "asset/resource",
|
|
||||||
generator: {
|
|
||||||
filename: path.join("icons", "[name].[contenthash][ext]"),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /\.styl$/,
|
|
||||||
use: [
|
|
||||||
{
|
|
||||||
loader: "style-loader",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
loader: "css-loader",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
loader: "stylus-loader",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
...pages.map(
|
|
||||||
(page) =>
|
|
||||||
new HtmlWebpackPlugin({
|
|
||||||
template: path.join(pagesDir, page),
|
|
||||||
filename: page.replace(".pug", ".html"),
|
|
||||||
})
|
|
||||||
),
|
|
||||||
new FileManagerPlugin({
|
|
||||||
events: {
|
|
||||||
onStart: {
|
|
||||||
delete: ["dist"],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
devServer: {
|
|
||||||
watchFiles: path.join(__dirname, "src"),
|
|
||||||
port: 9000,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
48
opencv_details.html
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>
|
||||||
|
OpenCV Details
|
||||||
|
</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body bgcolor="#F0F8FF">
|
||||||
|
<details>
|
||||||
|
<summary>Menu</summary>
|
||||||
|
<ul>
|
||||||
|
<li><a href="./index.html">Home</a></li>
|
||||||
|
<li><a href="./embeded_details.html"><h4>Embeded Details</h4></a></li>
|
||||||
|
<li><a href="./opencv_details.html">OpenCV Details</a></li>
|
||||||
|
<li><a href="./photography_details.html">Photography Details</a></li>
|
||||||
|
<li><a href="./table.html">Table with filters (not working yet)</a></li>
|
||||||
|
<li><a href="./images/institute.png">Institute</a></li>
|
||||||
|
</ul>
|
||||||
|
</details>
|
||||||
|
<h2 align="center">OpenCV Details</h2>
|
||||||
|
<hr width="800" align="center">
|
||||||
|
<p align="center">
|
||||||
|
<img src="./images/opencv.png" alt="OpenCV" height="150" align="top">
|
||||||
|
as mentioned before i love when programs are able to <i>see</i> things <br>
|
||||||
|
my experience with opencv started with simple hight level functions like detectCircle or findContours and
|
||||||
|
etc...<br>
|
||||||
|
Right now i'm crawling deeper into the library , and the idea of standartisation of parameters between different
|
||||||
|
cameras is appealig to me <br>
|
||||||
|
so i'm trying to understand how all that works from the math side<br>
|
||||||
|
Additionally, I'm exploring Re-Identification (ReId) techniques,
|
||||||
|
they are used for recognizing and tracking objects across different camera views or consecutive frames.
|
||||||
|
</p>
|
||||||
|
<hr width="500" align="center">
|
||||||
|
<p>
|
||||||
|
One of many projects I've worked on is <a href="https://github.com/OkunElya/ArucoNGP-MapCreator"
|
||||||
|
target="_blank">ArucoNGP-MapCreator</a>.<br>
|
||||||
|
The idea was to create a relative map of Aruco markers just from photos of pairs (or more) of them.<br>
|
||||||
|
It can also estimate the camera's position in the world relative to a specific marker, using only images
|
||||||
|
containing any marker.<br>
|
||||||
|
It was also my first deep dive into linear algebra.<br>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
6695
package-lock.json
generated
30
package.json
@@ -1,30 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "template_pug",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"description": "",
|
|
||||||
"main": "index.js",
|
|
||||||
"scripts": {
|
|
||||||
"build": "webpack --mode production",
|
|
||||||
"serve": "webpack serve --open --mode development",
|
|
||||||
"dev": "webpack --mode development",
|
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
|
||||||
},
|
|
||||||
"keywords": [],
|
|
||||||
"author": "",
|
|
||||||
"license": "ISC",
|
|
||||||
"devDependencies": {
|
|
||||||
"chokidar": "^4.0.3",
|
|
||||||
"css-loader": "^6.8.1",
|
|
||||||
"filemanager-webpack-plugin": "^8.0.0",
|
|
||||||
"glob": "^11.0.3",
|
|
||||||
"html-webpack-plugin": "^5.5.3",
|
|
||||||
"pug": "^2.0.4",
|
|
||||||
"pug-loader": "^2.4.0",
|
|
||||||
"style-loader": "^3.3.3",
|
|
||||||
"stylus": "^0.61.0",
|
|
||||||
"stylus-loader": "^7.1.3",
|
|
||||||
"webpack": "^5.89.0",
|
|
||||||
"webpack-cli": "^5.1.4",
|
|
||||||
"webpack-dev-server": "^4.15.1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
42
photography_details.html
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>
|
||||||
|
Photography Details
|
||||||
|
</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body bgcolor="#F0F8FF">
|
||||||
|
<details>
|
||||||
|
<summary>Menu</summary>
|
||||||
|
<ul>
|
||||||
|
<li><a href="./index.html">Home</a></li>
|
||||||
|
<li><a href="./embeded_details.html">Embeded Details</a></li>
|
||||||
|
<li><a href="./opencv_details.html">OpenCV Details</a></li>
|
||||||
|
<li><a href="./photography_details.html"><h4>Photography Details</h4></a></li>
|
||||||
|
<li><a href="./table.html">Table with filters (not working yet)</a></li>
|
||||||
|
<li><a href="./images/institute.png">Institute))</a></li>
|
||||||
|
</ul>
|
||||||
|
</details>
|
||||||
|
<h2 align="center">Photography Details</h2>
|
||||||
|
<hr width="800" align="center">
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
Usually i capture landcape scenes with SLR camera, the main workhorse is Nikon D3100 with kit and 70-210mm
|
||||||
|
</p>
|
||||||
|
<p align="center">
|
||||||
|
<img src="images/photos/image0.png" alt="Photo 0" width="200">
|
||||||
|
<img src="images/photos/image1.png" alt="Photo 1" width="200">
|
||||||
|
<img src="images/photos/image2.png" alt="Photo 2" width="200">
|
||||||
|
</p>
|
||||||
|
<p align="center">
|
||||||
|
<img src="images/photos/image3.png" alt="Photo 3" width="200">
|
||||||
|
<img src="images/photos/image4.png" alt="Photo 4" width="200">
|
||||||
|
<img src="images/photos/image5.png" alt="Photo 5" width="200">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
-
|
|
||||||
const pages = {
|
|
||||||
embedded: {
|
|
||||||
title: 'Embedded Details',
|
|
||||||
slug: 'embedded',
|
|
||||||
menuTitle: 'Embeded Details',
|
|
||||||
images: [
|
|
||||||
{ src: './images/esp32.png', alt: 'ESP32', height: 150 },
|
|
||||||
{ src: './images/arduino.png', alt: 'Arduino', height: 150 },
|
|
||||||
{ src: './images/stm32.png', alt: 'STM32', height: 150 }
|
|
||||||
],
|
|
||||||
paragraphs: [
|
|
||||||
"My programming path started with embeded systems, i love all the low level things that Mcu could do with just a little bit of code, sometimes build or flashing progress could take some time to get a hand of , but after that everething usualy goes smooth",
|
|
||||||
"The first MCU i tried was a ATmega328P, after some time i was surprised with the debug capabilities on the Stm32 and now i'm working with esp32-s3 , that's a good chip, has internal JTAG and all the shiny wireless interfaces but feels faulty for some reason <i>regular segfaults with CDC</i>"
|
|
||||||
],
|
|
||||||
table: {
|
|
||||||
title: 'Microcontroller Comparison Table',
|
|
||||||
headers: ['Board/MCU', 'UART Count', 'Dynamic UART Assignment', 'ADC Channels', 'Debug Support', 'Flash Size', 'Wireless Connectivity'],
|
|
||||||
rows: [
|
|
||||||
['ESP32', '3', 'Yes (via IO MUX)', '18', 'JTAG, Serial', '4MB (typical)', 'Wi-Fi, Bluetooth'],
|
|
||||||
['ESP32-S3', '3', 'Yes (via IO MUX)', '20', 'JTAG, Serial', '8MB (typical)', 'Wi-Fi, Bluetooth LE'],
|
|
||||||
['ESP-01', '1', 'No', '1', 'Serial only', '512KB/1MB', 'Wi-Fi'],
|
|
||||||
['Arduino Uno (ATmega328P)', '1', 'No', '6', 'Serial, DebugWire', '32KB', 'None'],
|
|
||||||
['Blue Pill (STM32F103C8T6)', '3', 'Yes (remappable)', '10', 'SWD, Serial', '64KB/128KB', 'None']
|
|
||||||
]
|
|
||||||
},
|
|
||||||
footer: "no rpi pico here , the build system has won over my temper"
|
|
||||||
},
|
|
||||||
|
|
||||||
opencv: {
|
|
||||||
title: 'OpenCV Details',
|
|
||||||
slug: 'opencv',
|
|
||||||
menuTitle: 'OpenCV Details',
|
|
||||||
images: [
|
|
||||||
{ src: './images/opencv.png', alt: 'OpenCV', height: 150 }
|
|
||||||
],
|
|
||||||
paragraphs: [
|
|
||||||
"as mentioned before i love when programs are able to <i>see</i> things",
|
|
||||||
"my experience with opencv started with simple hight level functions like detectCircle or findContours and etc...",
|
|
||||||
"Right now i'm crawling deeper into the library , and the idea of standartisation of parameters between different cameras is appealig to me",
|
|
||||||
"so i'm trying to understand how all that works from the math side",
|
|
||||||
"Additionally, I'm exploring Re-Identification (ReId) techniques, they are used for recognizing and tracking objects across different camera views or consecutive frames."
|
|
||||||
],
|
|
||||||
content: {
|
|
||||||
type: 'text',
|
|
||||||
text: "One of many projects I've worked on is <a href=\"https://github.com/OkunElya/ArucoNGP-MapCreator\" target=\"_blank\">ArucoNGP-MapCreator</a>.<br>The idea was to create a relative map of Aruco markers just from photos of pairs (or more) of them.<br>It can also estimate the camera's position in the world relative to a specific marker, using only images containing any marker.<br>It was also my first deep dive into linear algebra."
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
photography: {
|
|
||||||
title: 'Photography Details',
|
|
||||||
slug: 'photography',
|
|
||||||
menuTitle: 'Photography Details',
|
|
||||||
images: [],
|
|
||||||
paragraphs: [
|
|
||||||
"Usually i capture landcape scenes with SLR camera, the main workhorse is Nikon D3100 with kit and 70-210mm"
|
|
||||||
],
|
|
||||||
gallery: [
|
|
||||||
[
|
|
||||||
{ src: 'images/photos/image0.png', alt: 'Photo 0', width: 200 },
|
|
||||||
{ src: 'images/photos/image1.png', alt: 'Photo 1', width: 200 },
|
|
||||||
{ src: 'images/photos/image2.png', alt: 'Photo 2', width: 200 }
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{ src: 'images/photos/image3.png', alt: 'Photo 3', width: 200 },
|
|
||||||
{ src: 'images/photos/image4.png', alt: 'Photo 4', width: 200 },
|
|
||||||
{ src: 'images/photos/image5.png', alt: 'Photo 5', width: 200 }
|
|
||||||
]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
-
|
|
||||||
const menu = [
|
|
||||||
{ href: './index.html', title: 'Home' },
|
|
||||||
{ href: './embeded_details.html', title: 'Embeded Details' },
|
|
||||||
{ href: './opencv_details.html', title: 'OpenCV Details' },
|
|
||||||
{ href: './photography_details.html', title: 'Photography Details' },
|
|
||||||
{ href: './table.html', title: 'Table with filters (not working yet)' },
|
|
||||||
{ href: './images/institute.png', title: 'Institute' }
|
|
||||||
];
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
include data.pug
|
|
||||||
|
|
||||||
mixin detailsPage(pageData)
|
|
||||||
doctype html
|
|
||||||
html(lang="en")
|
|
||||||
head
|
|
||||||
meta(charset="UTF-8")
|
|
||||||
title= pageData.title
|
|
||||||
|
|
||||||
body(bgcolor="#F0F8FF")
|
|
||||||
//- Menu
|
|
||||||
details
|
|
||||||
summary Menu
|
|
||||||
ul
|
|
||||||
each item in menu
|
|
||||||
li
|
|
||||||
if item.title === pageData.menuTitle
|
|
||||||
a(href=item.href)
|
|
||||||
h4= item.title
|
|
||||||
else
|
|
||||||
a(href=item.href)= item.title
|
|
||||||
|
|
||||||
//- Page Title
|
|
||||||
h2(align="center")= pageData.title
|
|
||||||
hr(width="800" align="center")
|
|
||||||
|
|
||||||
//- Header Images
|
|
||||||
if pageData.images && pageData.images.length > 0
|
|
||||||
p(align="center")
|
|
||||||
each img in pageData.images
|
|
||||||
if img.height
|
|
||||||
img(src=img.src alt=img.alt height=img.height)
|
|
||||||
else if img.width
|
|
||||||
img(src=img.src alt=img.alt width=img.width)
|
|
||||||
else
|
|
||||||
img(src=img.src alt=img.alt)
|
|
||||||
|
|
||||||
//- Paragraphs
|
|
||||||
if pageData.paragraphs
|
|
||||||
each para in pageData.paragraphs
|
|
||||||
p(align="justify")!= para
|
|
||||||
|
|
||||||
//- Table (for embedded page)
|
|
||||||
if pageData.table
|
|
||||||
h3(align="center")= pageData.table.title
|
|
||||||
table(border="1" align="center" cellpadding="6" cellspacing="0")
|
|
||||||
tr
|
|
||||||
each header in pageData.table.headers
|
|
||||||
th= header
|
|
||||||
each row in pageData.table.rows
|
|
||||||
tr
|
|
||||||
each cell in row
|
|
||||||
td= cell
|
|
||||||
|
|
||||||
//- Content (for opencv page)
|
|
||||||
if pageData.content
|
|
||||||
hr(width="500" align="center")
|
|
||||||
p!= pageData.content.text
|
|
||||||
|
|
||||||
//- Gallery (for photography page)
|
|
||||||
if pageData.gallery
|
|
||||||
each row in pageData.gallery
|
|
||||||
p(align="center")
|
|
||||||
each img in row
|
|
||||||
img(src=img.src alt=img.alt width=img.width)
|
|
||||||
|
|
||||||
//- Footer
|
|
||||||
if pageData.footer
|
|
||||||
p(align="right")= pageData.footer
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import './styles/main.styl'
|
|
||||||
@@ -1,140 +0,0 @@
|
|||||||
-
|
|
||||||
const menuItems = [
|
|
||||||
{ href: './index.html', title: 'Home', isActive: true },
|
|
||||||
{ href: './embeded_details.html', title: 'Embedded' },
|
|
||||||
{ href: './opencv_details.html', title: 'OpenCV' },
|
|
||||||
{ href: './photography_details.html', title: 'Photography' },
|
|
||||||
{ href: './table.html', title: 'Table' },
|
|
||||||
{ href: './images/institute.png', title: 'Institute' }
|
|
||||||
];
|
|
||||||
|
|
||||||
const galleryImages = [
|
|
||||||
{ src: './images/sqarucos.png', alt: 'Arduino' },
|
|
||||||
{ src: './images/sqstm32.png', alt: 'STM32' },
|
|
||||||
{ src: './images/sqesp32.png', alt: 'ESP32' }
|
|
||||||
];
|
|
||||||
|
|
||||||
const contentBlocks = [
|
|
||||||
{
|
|
||||||
title: 'Embedded Systems',
|
|
||||||
image: './images/AQ_monitor.png',
|
|
||||||
imageAlt: 'ESP32',
|
|
||||||
columns: [
|
|
||||||
{ text: 'Had several projects with different MCUs and wrote firmware for them. My main stack consists of Platformio+EspIdf or Arduino, also tried STM32' },
|
|
||||||
{ text: 'I love embedded development because of autonomy of produced devices, the devices are not dependent on any other hardware and can work autonomously', hasLink: true }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Embedded Systems',
|
|
||||||
image: './images/remote.jpeg',
|
|
||||||
imageAlt: 'Remote',
|
|
||||||
imageCenter: true,
|
|
||||||
columns: [
|
|
||||||
{ text: 'Had several projects with different MCUs and wrote firmware for them. My main stack consists of Platformio+EspIdf or Arduino, also tried STM32' },
|
|
||||||
{ text: 'I love embedded development because of autonomy of produced devices, the devices are not dependent on any other hardware and can work autonomously or off the grid', hasLink: true }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
const sidebarBlocks = [
|
|
||||||
{
|
|
||||||
title: '3D Printer',
|
|
||||||
text: '3D printers are versatile tools used for creating prototypes, custom parts, and artistic designs. They work by layering materials.',
|
|
||||||
image: 'images/16x10/3d-printer.jpeg',
|
|
||||||
alt: '3D Printer'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'BLHeli ESCs',
|
|
||||||
text: 'BLHeli ESCs are electronic speed controllers designed for drones, offering smooth and precise motor control.',
|
|
||||||
image: 'images/16x10/blheli-esc.jpeg',
|
|
||||||
alt: 'BLHeli ESC'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Raspberry Pi Nano',
|
|
||||||
text: 'Raspberry Pi Nano is a compact computer ideal for learning, prototyping, and IoT projects. It is highly energy-efficient.',
|
|
||||||
image: 'images/16x10/rpi-nano.jpeg',
|
|
||||||
alt: 'Raspberry Pi Nano'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Smart Thermostats',
|
|
||||||
text: 'Smart thermostats help regulate home temperatures efficiently, saving energy and enhancing comfort with automation.',
|
|
||||||
image: 'images/16x10/thermostat.jpeg',
|
|
||||||
alt: 'Smart Thermostat'
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
mixin nav-menu(items)
|
|
||||||
nav.nav
|
|
||||||
ul.nav__list
|
|
||||||
each item in items
|
|
||||||
li.nav__item
|
|
||||||
a.nav__link(href=item.href class=item.isActive ? 'nav__link--active' : '')= item.title
|
|
||||||
|
|
||||||
mixin gallery(images)
|
|
||||||
.gallery
|
|
||||||
each img in images
|
|
||||||
.gallery__item
|
|
||||||
img.gallery__image(src=img.src alt=img.alt)
|
|
||||||
|
|
||||||
mixin content-block(block, index)
|
|
||||||
.content-block
|
|
||||||
.content-block__header
|
|
||||||
h5.content-block__title= block.title
|
|
||||||
.content-block__body(class=`content-block__body--layout-${index % 2 === 0 ? 'a' : 'b'}`)
|
|
||||||
if index % 2 === 0
|
|
||||||
each col in block.columns
|
|
||||||
.content-block__column
|
|
||||||
p.content-block__text= col.text
|
|
||||||
if col.hasLink
|
|
||||||
a.content-block__link(href="#") More info»
|
|
||||||
.content-block__column.content-block__column--image
|
|
||||||
img.content-block__image(src=block.image alt=block.imageAlt)
|
|
||||||
else
|
|
||||||
.content-block__column
|
|
||||||
p.content-block__text= block.columns[0].text
|
|
||||||
.content-block__column.content-block__column--image-center
|
|
||||||
img.content-block__image(src=block.image alt=block.imageAlt)
|
|
||||||
.content-block__column
|
|
||||||
p.content-block__text= block.columns[1].text
|
|
||||||
if block.columns[1].hasLink
|
|
||||||
a.content-block__link(href="#") More info»
|
|
||||||
|
|
||||||
mixin sidebar-card(card)
|
|
||||||
.sidebar-card
|
|
||||||
.sidebar-card__content
|
|
||||||
h6.sidebar-card__title= card.title
|
|
||||||
p.sidebar-card__text= card.text
|
|
||||||
a.sidebar-card__link(href="#") More Info»
|
|
||||||
.sidebar-card__image-wrapper
|
|
||||||
img.sidebar-card__image(src=card.image alt=card.alt)
|
|
||||||
|
|
||||||
doctype html
|
|
||||||
html(lang="en")
|
|
||||||
head
|
|
||||||
meta(charset="UTF-8")
|
|
||||||
meta(name="viewport" content="width=device-width, initial-scale=1")
|
|
||||||
link(rel="stylesheet" href="styles/index.css")
|
|
||||||
title Portfolio
|
|
||||||
|
|
||||||
body.page
|
|
||||||
//- Navigation
|
|
||||||
+nav-menu(menuItems)
|
|
||||||
|
|
||||||
//- Image Gallery
|
|
||||||
+gallery(galleryImages)
|
|
||||||
|
|
||||||
//- Main Content
|
|
||||||
.main
|
|
||||||
.main__content
|
|
||||||
each block, index in contentBlocks
|
|
||||||
+content-block(block, index)
|
|
||||||
|
|
||||||
//- Sidebar
|
|
||||||
.main__sidebar
|
|
||||||
each card in sidebarBlocks
|
|
||||||
+sidebar-card(card)
|
|
||||||
|
|
||||||
//- Footer
|
|
||||||
footer.footer
|
|
||||||
span.footer__text Kulesh A.
|
|
||||||
span.footer__text Б9123-09.03.04
|
|
||||||
@@ -1,259 +0,0 @@
|
|||||||
// Variables
|
|
||||||
$color-bg = #F0F8FF
|
|
||||||
$color-text = black
|
|
||||||
$color-primary = green
|
|
||||||
$color-border = silver
|
|
||||||
$color-footer-bg = #f8f9fa
|
|
||||||
|
|
||||||
$border-thin = 1px solid black
|
|
||||||
$border-double = double 4px silver
|
|
||||||
$border-double-thick = double thick silver
|
|
||||||
|
|
||||||
$spacing-sm = 10px
|
|
||||||
$spacing-md = 20px
|
|
||||||
$spacing-lg = 30px
|
|
||||||
$spacing-xl = 50px
|
|
||||||
|
|
||||||
$breakpoint-mobile = 800px
|
|
||||||
$breakpoint-tablet = 1000px
|
|
||||||
|
|
||||||
// Mixins
|
|
||||||
flex-center()
|
|
||||||
display flex
|
|
||||||
align-items center
|
|
||||||
justify-content center
|
|
||||||
|
|
||||||
text-justify()
|
|
||||||
text-align justify
|
|
||||||
|
|
||||||
border-block()
|
|
||||||
border $border-thin
|
|
||||||
padding 2vw
|
|
||||||
margin 1vw 0
|
|
||||||
|
|
||||||
// Base
|
|
||||||
*
|
|
||||||
box-sizing border-box
|
|
||||||
margin 0
|
|
||||||
padding 0
|
|
||||||
|
|
||||||
.page
|
|
||||||
font-family Arial, sans-serif
|
|
||||||
background-color $color-bg
|
|
||||||
color $color-text
|
|
||||||
|
|
||||||
// Navigation (БЭМ)
|
|
||||||
.nav
|
|
||||||
border-top $border-double-thick
|
|
||||||
border-bottom $border-double-thick
|
|
||||||
|
|
||||||
&__list
|
|
||||||
display grid
|
|
||||||
grid-template-columns repeat(7, min-content)
|
|
||||||
grid-template-rows 1fr
|
|
||||||
justify-items start
|
|
||||||
list-style none
|
|
||||||
font-size 0
|
|
||||||
|
|
||||||
@media screen and (max-width: $breakpoint-mobile)
|
|
||||||
grid-template-columns 1fr 1fr
|
|
||||||
grid-template-rows 1fr 1fr 1fr
|
|
||||||
justify-items center
|
|
||||||
|
|
||||||
&__item
|
|
||||||
display inline-block
|
|
||||||
|
|
||||||
&__link
|
|
||||||
display block
|
|
||||||
width max-content
|
|
||||||
height 3em
|
|
||||||
line-height 3em
|
|
||||||
text-align center
|
|
||||||
padding 0 $spacing-sm
|
|
||||||
margin 0 $spacing-sm
|
|
||||||
color $color-text
|
|
||||||
text-decoration none
|
|
||||||
font-size medium
|
|
||||||
overflow hidden
|
|
||||||
text-overflow ellipsis
|
|
||||||
|
|
||||||
&--active
|
|
||||||
color $color-primary
|
|
||||||
font-weight bold
|
|
||||||
border-left $border-double
|
|
||||||
border-right $border-double
|
|
||||||
|
|
||||||
@media screen and (max-width: $breakpoint-mobile)
|
|
||||||
border-left none
|
|
||||||
border-right none
|
|
||||||
border-bottom $border-double-thick
|
|
||||||
|
|
||||||
// Gallery (БЭМ)
|
|
||||||
.gallery
|
|
||||||
display flex
|
|
||||||
flex-direction row
|
|
||||||
width 90%
|
|
||||||
margin auto
|
|
||||||
gap 0
|
|
||||||
|
|
||||||
@media screen and (max-width: $breakpoint-mobile)
|
|
||||||
flex-direction column
|
|
||||||
width 100%
|
|
||||||
|
|
||||||
&__item
|
|
||||||
flex 1
|
|
||||||
margin auto
|
|
||||||
|
|
||||||
&__image
|
|
||||||
width 100%
|
|
||||||
height auto
|
|
||||||
border $border-thin
|
|
||||||
|
|
||||||
&:nth-child(odd)
|
|
||||||
margin-top $spacing-sm
|
|
||||||
|
|
||||||
@media screen and (max-width: $breakpoint-mobile)
|
|
||||||
margin-top 0
|
|
||||||
|
|
||||||
// Main Layout (БЭМ)
|
|
||||||
.main
|
|
||||||
display grid
|
|
||||||
grid-template-columns 3fr 1fr
|
|
||||||
grid-template-rows 1fr
|
|
||||||
gap 0
|
|
||||||
|
|
||||||
@media screen and (max-width: $breakpoint-mobile)
|
|
||||||
display flex
|
|
||||||
flex-direction column
|
|
||||||
|
|
||||||
&__content
|
|
||||||
padding-right 0
|
|
||||||
|
|
||||||
&__sidebar
|
|
||||||
border-left $border-thin
|
|
||||||
margin $spacing-lg 0 0 $spacing-xl
|
|
||||||
padding-left $spacing-md
|
|
||||||
|
|
||||||
@media screen and (max-width: $breakpoint-mobile)
|
|
||||||
border-left none
|
|
||||||
margin $spacing-lg 0 0 0
|
|
||||||
padding-left 0
|
|
||||||
|
|
||||||
// Content Block (БЭМ)
|
|
||||||
.content-block
|
|
||||||
border-block()
|
|
||||||
|
|
||||||
&__header
|
|
||||||
text-align center
|
|
||||||
margin-bottom 1vw
|
|
||||||
|
|
||||||
&__title
|
|
||||||
font-weight bold
|
|
||||||
font-size 1.2em
|
|
||||||
|
|
||||||
&__body
|
|
||||||
&--layout-a
|
|
||||||
display grid
|
|
||||||
grid-template-columns 3fr 3fr 2fr
|
|
||||||
grid-template-rows 1fr
|
|
||||||
|
|
||||||
@media screen and (max-width: $breakpoint-mobile)
|
|
||||||
display flex
|
|
||||||
flex-direction column
|
|
||||||
|
|
||||||
&--layout-b
|
|
||||||
display grid
|
|
||||||
grid-template-columns 4fr 7fr 4fr
|
|
||||||
grid-template-rows 1fr
|
|
||||||
|
|
||||||
@media screen and (max-width: $breakpoint-mobile)
|
|
||||||
display flex
|
|
||||||
flex-direction column
|
|
||||||
|
|
||||||
&__column
|
|
||||||
margin 2vw
|
|
||||||
|
|
||||||
&--image
|
|
||||||
flex-center()
|
|
||||||
|
|
||||||
&--image-center
|
|
||||||
flex-center()
|
|
||||||
grid-column 2
|
|
||||||
|
|
||||||
&__text
|
|
||||||
text-justify()
|
|
||||||
|
|
||||||
&__image
|
|
||||||
width 100%
|
|
||||||
height auto
|
|
||||||
|
|
||||||
&__link
|
|
||||||
display block
|
|
||||||
text-align right
|
|
||||||
margin-top $spacing-sm
|
|
||||||
color $color-text
|
|
||||||
text-decoration none
|
|
||||||
font-size 0.9em
|
|
||||||
|
|
||||||
&:hover
|
|
||||||
text-decoration underline
|
|
||||||
|
|
||||||
// Sidebar Card (БЭМ)
|
|
||||||
.sidebar-card
|
|
||||||
display grid
|
|
||||||
grid-template-columns 1fr 1fr
|
|
||||||
grid-template-rows auto
|
|
||||||
margin $spacing-md $spacing-sm 0
|
|
||||||
gap $spacing-sm
|
|
||||||
|
|
||||||
@media screen and (max-width: $breakpoint-tablet)
|
|
||||||
display flex
|
|
||||||
flex-direction column
|
|
||||||
|
|
||||||
&__content
|
|
||||||
display flex
|
|
||||||
flex-direction column
|
|
||||||
justify-content space-between
|
|
||||||
|
|
||||||
&__title
|
|
||||||
font-weight bold
|
|
||||||
text-align right
|
|
||||||
margin-bottom $spacing-sm
|
|
||||||
|
|
||||||
&__text
|
|
||||||
text-justify()
|
|
||||||
font-size 0.9em
|
|
||||||
margin-bottom $spacing-sm
|
|
||||||
|
|
||||||
&__link
|
|
||||||
display block
|
|
||||||
text-align right
|
|
||||||
color $color-text
|
|
||||||
text-decoration none
|
|
||||||
font-size 0.85em
|
|
||||||
|
|
||||||
&:hover
|
|
||||||
text-decoration underline
|
|
||||||
|
|
||||||
&__image-wrapper
|
|
||||||
overflow hidden
|
|
||||||
|
|
||||||
&__image
|
|
||||||
width 100%
|
|
||||||
height auto
|
|
||||||
display block
|
|
||||||
transition transform 0.3s ease
|
|
||||||
|
|
||||||
&:hover
|
|
||||||
transform scale(1.05)
|
|
||||||
|
|
||||||
// Footer (БЭМ)
|
|
||||||
.footer
|
|
||||||
background-color $color-footer-bg
|
|
||||||
padding 1em 2em
|
|
||||||
margin-top $spacing-lg
|
|
||||||
display flex
|
|
||||||
gap 2em
|
|
||||||
|
|
||||||
&__text
|
|
||||||
font-size 1.1em
|
|
||||||
2360
table.html
Normal file
@@ -1,69 +0,0 @@
|
|||||||
const HtmlWebpackPlugin = require("html-webpack-plugin");
|
|
||||||
const FileManagerPlugin = require("filemanager-webpack-plugin");
|
|
||||||
const path = require("path");
|
|
||||||
const fs = require("fs");
|
|
||||||
|
|
||||||
const pagesDir = path.join(__dirname, "src", "pages");
|
|
||||||
const pages = fs.readdirSync(pagesDir).filter(file => file.endsWith(".pug"));
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
output: {
|
|
||||||
path: path.join(__dirname, "dist"),
|
|
||||||
filename: "index.[contenthash].js",
|
|
||||||
assetModuleFilename: path.join("images", "[name].[contenthash][ext]"),
|
|
||||||
},
|
|
||||||
entry: path.join(__dirname, "src", "index.js"),
|
|
||||||
module: {
|
|
||||||
rules: [
|
|
||||||
{
|
|
||||||
test: /\.pug$/,
|
|
||||||
loader: "pug-loader",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /\.(png|jpg|jpeg|gif)$/i,
|
|
||||||
type: "asset/resource",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /\.svg$/,
|
|
||||||
type: "asset/resource",
|
|
||||||
generator: {
|
|
||||||
filename: path.join("icons", "[name].[contenthash][ext]"),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
test: /\.styl$/,
|
|
||||||
use: [
|
|
||||||
{
|
|
||||||
loader: "style-loader",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
loader: "css-loader",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
loader: "stylus-loader",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
...pages.map(
|
|
||||||
(page) =>
|
|
||||||
new HtmlWebpackPlugin({
|
|
||||||
template: path.join(pagesDir, page),
|
|
||||||
filename: page.replace(".pug", ".html"),
|
|
||||||
})
|
|
||||||
),
|
|
||||||
new FileManagerPlugin({
|
|
||||||
events: {
|
|
||||||
onStart: {
|
|
||||||
delete: ["dist"],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
devServer: {
|
|
||||||
watchFiles: path.join(__dirname, "src"),
|
|
||||||
port: 9000,
|
|
||||||
},
|
|
||||||
};
|
|
||||||