initial commit
28
.gitignore
vendored
Executable file
@@ -0,0 +1,28 @@
|
|||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
|
||||||
|
node_modules
|
||||||
|
.DS_Store
|
||||||
|
dist
|
||||||
|
dist-ssr
|
||||||
|
coverage
|
||||||
|
*.local
|
||||||
|
|
||||||
|
/cypress/videos/
|
||||||
|
/cypress/screenshots/
|
||||||
|
|
||||||
|
# Editor directories and files
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/extensions.json
|
||||||
|
.idea
|
||||||
|
*.suo
|
||||||
|
*.ntvs*
|
||||||
|
*.njsproj
|
||||||
|
*.sln
|
||||||
|
*.sw?
|
||||||
13
index.html
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" href="/favicon/favicon.ico" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>chatlanin.su</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="app"></div>
|
||||||
|
<script type="module" src="/src/main.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
5668
package-lock.json
generated
Executable file
18
package.json
Executable file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"name": "chatlanin.com.ru",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "vite",
|
||||||
|
"build": "vite build",
|
||||||
|
"preview": "vite preview --port 4173"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"vue": "^3.2.37",
|
||||||
|
"vue-router": "^4.1.2",
|
||||||
|
"vue3-perfect-scrollbar": "^1.6.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@vitejs/plugin-vue": "^3.0.1",
|
||||||
|
"vite": "^3.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
public/favicon/android-chrome-192x192.png
Executable file
|
After Width: | Height: | Size: 18 KiB |
BIN
public/favicon/android-chrome-512x512.png
Executable file
|
After Width: | Height: | Size: 50 KiB |
BIN
public/favicon/apple-touch-icon.png
Executable file
|
After Width: | Height: | Size: 3.1 KiB |
9
public/favicon/browserconfig.xml
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<browserconfig>
|
||||||
|
<msapplication>
|
||||||
|
<tile>
|
||||||
|
<square150x150logo src="./mstile-150x150.png"/>
|
||||||
|
<TileColor>#2BA7AF</TileColor>
|
||||||
|
</tile>
|
||||||
|
</msapplication>
|
||||||
|
</browserconfig>
|
||||||
BIN
public/favicon/favicon-16x16.png
Executable file
|
After Width: | Height: | Size: 587 B |
BIN
public/favicon/favicon-32x32.png
Executable file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
public/favicon/favicon.ico
Executable file
|
After Width: | Height: | Size: 15 KiB |
5
public/favicon/favicon.svg
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.967 19.0723V28.9999H22.9552V19.0723C22.2926 19.0402 21.6273 19.0186 20.9593 19.0079V26.9992H18.9633V19.0079C18.2952 19.0186 17.6297 19.0402 16.967 19.0723Z" fill="#2BA7AF"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M31.3085 14.9758L31.836 13.0376C27.9801 12.3557 24.0119 12.0001 19.9607 12.0001C15.9096 12.0001 11.9414 12.3557 8.08545 13.0376L8.613 14.9758L8.61335 14.9758L9.27279 17.3986L9.27329 17.3985L9.66941 18.8538C12.6984 18.3457 15.802 18.0581 18.9632 18.008V16.0077C16.2842 16.0489 13.6454 16.2553 11.0562 16.6172L10.5267 14.6719C13.2873 14.2752 16.1031 14.05 18.9632 14.0075V14.0001H19.9607H20.9592V14.0075C23.819 14.0501 26.6347 14.2753 29.3951 14.672L28.8657 16.617C26.2766 16.2551 23.6379 16.0488 20.9592 16.0077V18.008C24.1206 18.058 27.2245 18.3457 30.2538 18.8538L30.7816 16.9145L30.7808 16.9144L31.3085 14.9758Z" fill="#2BA7AF"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.9604 2C10.039 2 1.99604 10.0589 1.99604 20C1.99604 29.9411 10.039 38 19.9604 38C29.8819 38 37.9248 29.9411 37.9248 20C37.9248 10.0589 29.8819 2 19.9604 2ZM0 20C0 8.9543 8.93657 0 19.9604 0C30.9842 0 39.9208 8.9543 39.9208 20C39.9208 31.0457 30.9842 40 19.9604 40C8.93657 40 0 31.0457 0 20Z" fill="#2BA7AF"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
BIN
public/favicon/mstile-150x150.png
Executable file
|
After Width: | Height: | Size: 3.2 KiB |
5
public/favicon/safari-pinned-tab.svg
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.78662 7.62893V11.6H9.18187V7.62893C8.91685 7.61607 8.65072 7.60745 8.38353 7.60315V10.7997H7.58512V7.60315C7.31789 7.60745 7.0517 7.61607 6.78662 7.62893Z"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.5233 5.99035L12.7344 5.21507C11.192 4.94231 9.60471 4.80005 7.98425 4.80005C6.3638 4.80005 4.77651 4.94231 3.23413 5.21507L3.44515 5.99035L3.44529 5.99033L3.70907 6.95945L3.70927 6.95941L3.86771 7.54155C5.07931 7.33831 6.32075 7.22325 7.58522 7.20321V6.40311C6.51364 6.41957 5.4581 6.50213 4.42241 6.64689L4.21063 5.86879C5.31486 5.71011 6.44121 5.62003 7.58522 5.60301V5.60005H7.98425H8.38363V5.60303C9.52756 5.62005 10.6538 5.71013 11.758 5.86881L11.5462 6.64681C10.5106 6.50207 9.45513 6.41955 8.38363 6.40311V7.20321C9.6482 7.22323 10.8897 7.33829 12.1015 7.54155L12.3126 6.76583L12.3123 6.76579L12.5233 5.99035Z"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.98416 0.8C4.01559 0.8 0.798416 4.02356 0.798416 8C0.798416 11.9765 4.01559 15.2 7.98416 15.2C11.9527 15.2 15.1699 11.9765 15.1699 8C15.1699 4.02356 11.9527 0.8 7.98416 0.8ZM0 8C0 3.58172 3.57463 0 7.98416 0C12.3937 0 15.9683 3.58172 15.9683 8C15.9683 12.4183 12.3937 16 7.98416 16C3.57463 16 0 12.4183 0 8Z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
19
public/favicon/site.webmanifest
Executable file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"name": "Trycaster",
|
||||||
|
"short_name": "Trycaster",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "./android-chrome-192x192.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "./android-chrome-512x512.png",
|
||||||
|
"sizes": "512x512",
|
||||||
|
"type": "image/png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"theme_color": "#2BA7AF",
|
||||||
|
"background_color": "#ffffff",
|
||||||
|
"display": "standalone"
|
||||||
|
}
|
||||||
100
src/App.vue
Executable file
@@ -0,0 +1,100 @@
|
|||||||
|
<template>
|
||||||
|
<header>
|
||||||
|
<img alt="logo" class="logo" src="@/assets/logo.svg" width="110" height="110" />
|
||||||
|
<div class="wrapper">
|
||||||
|
<slogan msg="You did it!" />
|
||||||
|
<nav>
|
||||||
|
<RouterLink to="/">сейчас</RouterLink>
|
||||||
|
<RouterLink to="/projects">проекты</RouterLink>
|
||||||
|
<RouterLink to="/links">сети</RouterLink>
|
||||||
|
<RouterLink to="/read">чтиво</RouterLink>
|
||||||
|
<RouterLink to="/about">интересы</RouterLink>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<Transition name="slide-fade">
|
||||||
|
<RouterView/>
|
||||||
|
</Transition>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { RouterLink, RouterView } from "vue-router"
|
||||||
|
import slogan from "./components/slogan.vue"
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
header {
|
||||||
|
line-height: 1.5;
|
||||||
|
max-height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
display: block;
|
||||||
|
margin: 0 auto 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav {
|
||||||
|
width: 100%;
|
||||||
|
font-size: 12px;
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav a.router-link-exact-active {
|
||||||
|
color: var(--color-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
nav a.router-link-exact-active:hover {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav a {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav a:first-of-type {
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1024px) {
|
||||||
|
header {
|
||||||
|
display: flex;
|
||||||
|
place-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
margin: 0 2rem 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
header .wrapper {
|
||||||
|
display: flex;
|
||||||
|
place-items: flex-start;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav {
|
||||||
|
text-align: left;
|
||||||
|
margin-left: -1rem;
|
||||||
|
font-size: 1rem;
|
||||||
|
|
||||||
|
padding: 1rem 0;
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.slide-fade-enter-active {
|
||||||
|
transition: all 0.7s ease-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slide-fade-leave-active {
|
||||||
|
transition: all 0.8s cubic-bezier(1, 0.5, 0.8, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.slide-fade-enter-from,
|
||||||
|
.slide-fade-leave-to {
|
||||||
|
transform: translateX(20px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
75
src/assets/base.css
Executable file
@@ -0,0 +1,75 @@
|
|||||||
|
/* color palette from <https://github.com/vuejs/theme> */
|
||||||
|
:root {
|
||||||
|
--vt-c-white: #ffffff;
|
||||||
|
--vt-c-white-soft: #f8f8f8;
|
||||||
|
--vt-c-white-mute: #f2f2f2;
|
||||||
|
|
||||||
|
--vt-c-black: #181818;
|
||||||
|
--vt-c-black-soft: #222222;
|
||||||
|
--vt-c-black-mute: #282828;
|
||||||
|
|
||||||
|
--vt-c-indigo: #697e93;
|
||||||
|
|
||||||
|
--vt-c-divider-light-1: rgba(60, 60, 60, 0.29);
|
||||||
|
--vt-c-divider-light-2: rgba(60, 60, 60, 0.12);
|
||||||
|
--vt-c-divider-dark-1: rgba(84, 84, 84, 0.65);
|
||||||
|
--vt-c-divider-dark-2: rgba(84, 84, 84, 0.48);
|
||||||
|
|
||||||
|
--vt-c-text-light-1: var(--vt-c-indigo);
|
||||||
|
--vt-c-text-light-2: rgba(60, 60, 60, 0.66);
|
||||||
|
--vt-c-text-light-3: #697e81;
|
||||||
|
--vt-c-text-dark-1: var(--vt-c-white);
|
||||||
|
--vt-c-text-dark-2: rgba(235, 235, 235, 0.64);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* semantic color variables for this project */
|
||||||
|
:root {
|
||||||
|
--color-background: var(--vt-c-white);
|
||||||
|
--color-background-soft: var(--vt-c-white-soft);
|
||||||
|
--color-background-mute: var(--vt-c-white-mute);
|
||||||
|
|
||||||
|
--color-border: var(--vt-c-divider-light-2);
|
||||||
|
--color-border-hover: var(--vt-c-divider-light-1);
|
||||||
|
|
||||||
|
--color-heading: var(--vt-c-text-light-3);
|
||||||
|
--color-text: var(--vt-c-text-light-1);
|
||||||
|
|
||||||
|
--section-gap: 160px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
:root {
|
||||||
|
--color-background: var(--vt-c-black);
|
||||||
|
--color-background-soft: var(--vt-c-black-soft);
|
||||||
|
--color-background-mute: var(--vt-c-black-mute);
|
||||||
|
|
||||||
|
--color-border: var(--vt-c-divider-dark-2);
|
||||||
|
--color-border-hover: var(--vt-c-divider-dark-1);
|
||||||
|
|
||||||
|
--color-heading: var(--vt-c-text-dark-1);
|
||||||
|
--color-text: var(--vt-c-text-dark-2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*,
|
||||||
|
*::before,
|
||||||
|
*::after {
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0;
|
||||||
|
position: relative;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
min-height: 100vh;
|
||||||
|
color: var(--color-text);
|
||||||
|
background: var(--color-background);
|
||||||
|
transition: color 0.5s, background-color 0.5s;
|
||||||
|
line-height: 1.6;
|
||||||
|
font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu,
|
||||||
|
Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
|
||||||
|
font-size: 15px;
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
}
|
||||||
7
src/assets/logo.svg
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 80" width="0" height="0" display="none">
|
||||||
|
<g fill="#202326">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M34 38.1445V57.9996H46V38.1445C44.6723 38.0802 43.3389 38.0371 42.0004 38.0156V53.9983H38.0004V38.0156C36.6616 38.0371 35.328 38.0802 34 38.1445Z"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M62.7413 29.9515L63.7985 26.0751C56.0714 24.7113 48.1192 24 40.0008 24C31.8825 24 23.9303 24.7113 16.2031 26.0751L17.2603 29.9515L17.261 29.9514L18.5825 34.797L18.5835 34.7968L19.3773 37.7075C25.4473 36.6913 31.6668 36.116 38.0017 36.0158V32.0153C32.6332 32.0976 27.345 32.5104 22.1563 33.2342L21.0953 29.3437C26.6274 28.5503 32.2703 28.0999 38.0017 28.0148V28H40.0008H42.0017V28.0149C47.7327 28.1 53.3752 28.5504 58.907 29.3438L57.8461 33.2338C52.6577 32.5101 47.3698 32.0975 42.0017 32.0153V36.0158C48.3371 36.1159 54.5571 36.6912 60.6277 37.7075L61.6855 33.8289L61.6838 33.8287L62.7413 29.9515Z"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M40 4C20.1178 4 4 20.1178 4 40C4 59.8823 20.1178 76 40 76C59.8823 76 76 59.8823 76 40C76 20.1178 59.8823 4 40 4ZM0 40C0 17.9086 17.9086 0 40 0C62.0914 0 80 17.9086 80 40C80 62.0914 62.0914 80 40 80C17.9086 80 0 62.0914 0 40Z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
38
src/assets/main.css
Executable file
@@ -0,0 +1,38 @@
|
|||||||
|
@import "./base.css";
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: #131414 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#app {
|
||||||
|
max-width: 1280px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 2rem;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
a,
|
||||||
|
.green {
|
||||||
|
text-decoration: none;
|
||||||
|
color: hsla(160, 100%, 37%, 1);
|
||||||
|
transition: 0.4s;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (hover: hover) {
|
||||||
|
a:hover {
|
||||||
|
background-color: hsla(160, 100%, 37%, 0.2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1024px) {
|
||||||
|
body {
|
||||||
|
display: flex;
|
||||||
|
place-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#app {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
padding: 0 2rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
46
src/components/about.vue
Executable file
@@ -0,0 +1,46 @@
|
|||||||
|
<template>
|
||||||
|
<project_item>
|
||||||
|
<template #heading>Про интересы...</template>
|
||||||
|
<br>
|
||||||
|
<p>Любимый редактор: nvim</p>
|
||||||
|
<p>Интересные книги: </p>
|
||||||
|
<ul>
|
||||||
|
<li>A.Х. Шахмейстер - все вплоть до Мат.Анализа</li>
|
||||||
|
<li>В.А. Зорич - Оба тома </li>
|
||||||
|
<li>Г. Стренг - Линейная алгебра </li>
|
||||||
|
<li>Р. Лайонс - Цифровая обработка сигналов</li>
|
||||||
|
<li>Г.Е. Шилов - Математический анализ</li>
|
||||||
|
<li>C. Смит - Цифровая обработка сигналов</li>
|
||||||
|
<li>Э. Айфичер - Цифровая обработка сигналов</li>
|
||||||
|
<li>Г.М. Фихтенгольц - Диф. и интергальные исчесления</li>
|
||||||
|
<li>... ну, дальнейшее направление вы поняли...</li>
|
||||||
|
</ul>
|
||||||
|
<p>Под чем: ArchLinux</p>
|
||||||
|
<p>Язык: С++, Go, Lua... да в принципе не важно</p>
|
||||||
|
<br>
|
||||||
|
</project_item>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import project_item from './project_item.vue'
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
li {
|
||||||
|
padding: 0 0 0 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
list-style-position: inside;
|
||||||
|
max-width: 100%;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0 -10px;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul li:before {
|
||||||
|
content: '✓';
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
18
src/components/current_project.vue
Executable file
@@ -0,0 +1,18 @@
|
|||||||
|
<template>
|
||||||
|
<project_item>
|
||||||
|
<template #heading>{{ data.current.name }}</template>
|
||||||
|
<br>
|
||||||
|
<p>
|
||||||
|
<a target="_blank" :href="data.current.location.link">{{ data.current.location.name }}</a>{{ data.current.location.short_description }}
|
||||||
|
</p>
|
||||||
|
<div v-for="(desc, index) in data.current.description" :key="index" v-html="desc"></div>
|
||||||
|
<br>
|
||||||
|
<p class="tech">{{ data.current.skills }}</p>
|
||||||
|
</project_item>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import project_item from "./project_item.vue";
|
||||||
|
import data from "../data/projects.json";
|
||||||
|
</script>
|
||||||
|
|
||||||
16
src/components/links.vue
Executable file
@@ -0,0 +1,16 @@
|
|||||||
|
<template>
|
||||||
|
<project_item>
|
||||||
|
<template #heading>Разнообразные ссылки моих похождений</template>
|
||||||
|
<p><a target="_blank" href="https://github.com/azchatlanin">github</a> - иногда там что-то пушу/реквесчу/смотрю.</p>
|
||||||
|
<p><a target="_blank" href="https://gitcast.ru">gitcast</a> - мой основной репозиторий.</p>
|
||||||
|
<p><a target="_blank" href="https://vk.com/azchatlanin">vk</a> - для мало ли.</p>
|
||||||
|
<p><a target="_blank" href="https://t.me/azchatlanin">telegram</a> - для того же.</p>
|
||||||
|
<p><a target="_blank" href="https://leetcode.com/u/chatlanin/">leetcode</a> - когда-то было интересно.</p>
|
||||||
|
<br>
|
||||||
|
</project_item>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import project_item from './project_item.vue'
|
||||||
|
</script>
|
||||||
|
|
||||||
81
src/components/project_item.vue
Executable file
@@ -0,0 +1,81 @@
|
|||||||
|
<template>
|
||||||
|
<div class="item">
|
||||||
|
<div class="details">
|
||||||
|
<h3>
|
||||||
|
<slot name="heading"></slot>
|
||||||
|
</h3>
|
||||||
|
<slot></slot>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.item {
|
||||||
|
margin-top: 2rem;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.details {
|
||||||
|
flex: 1;
|
||||||
|
margin-left: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
i {
|
||||||
|
display: flex;
|
||||||
|
place-items: center;
|
||||||
|
place-content: center;
|
||||||
|
width: 32px;
|
||||||
|
height: 32px;
|
||||||
|
|
||||||
|
color: var(--color-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
color: var(--color-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1024px) {
|
||||||
|
.item {
|
||||||
|
margin-top: 0;
|
||||||
|
padding: 0.4rem 0 1rem calc(var(--section-gap) / 22);
|
||||||
|
}
|
||||||
|
|
||||||
|
i {
|
||||||
|
top: calc(50% - 25px);
|
||||||
|
left: -26px;
|
||||||
|
position: absolute;
|
||||||
|
border: 1px solid var(--color-border);
|
||||||
|
background: var(--color-background);
|
||||||
|
border-radius: 8px;
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item:before {
|
||||||
|
content: ' ';
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
bottom: calc(50% + 25px);
|
||||||
|
height: calc(50% - 25px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.item:after {
|
||||||
|
content: ' ';
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: calc(50% + 25px);
|
||||||
|
height: calc(50% - 25px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.item:first-of-type:before {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item:last-of-type:after {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
56
src/components/projects.vue
Executable file
@@ -0,0 +1,56 @@
|
|||||||
|
<template>
|
||||||
|
<perfect-scrollbar>
|
||||||
|
<project_item v-for="(item, index) in projects" :key="index">
|
||||||
|
<h3>{{ item.name }}</h3>
|
||||||
|
<p>
|
||||||
|
<a target="_blank" :href="item.location.link">{{ item.location.name }}</a>{{ item.location.short_description }}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div v-for="(desc, index) in item.description" :key="index" v-html="desc"></div> <br>
|
||||||
|
|
||||||
|
<p class="tech">{{ item.skills }}</p> <br> <hr/> <br>
|
||||||
|
|
||||||
|
</project_item>
|
||||||
|
</perfect-scrollbar>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import project_item from "./project_item.vue";
|
||||||
|
import d from "../data/projects.json";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
projects : [],
|
||||||
|
show: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.projects = d.total;
|
||||||
|
console.log(this.projects)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.ps {
|
||||||
|
height: 888px;
|
||||||
|
padding: .7rem 0 1rem calc(var(--section-gap) / 7);
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
border: 0;
|
||||||
|
border-top: 1px solid #282828;
|
||||||
|
padding-bottom: 21px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tech {
|
||||||
|
color: #3b4250;
|
||||||
|
}
|
||||||
|
h3 {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
color: var(--color-heading);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
11
src/components/read.vue
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
<template>
|
||||||
|
<project_item>
|
||||||
|
<p><a target="_blank" href="https://teletype.in/@azchatlanin">teletype</a> - разнообразные рассуждения...</p>
|
||||||
|
<br>
|
||||||
|
</project_item>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import project_item from './project_item.vue'
|
||||||
|
</script>
|
||||||
|
|
||||||
31
src/components/slogan.vue
Executable file
@@ -0,0 +1,31 @@
|
|||||||
|
<template>
|
||||||
|
<div class="greetings">
|
||||||
|
<h3>
|
||||||
|
<q>... когда у общества нет цветовой дифференциации штанов, то нет цели!</q>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
h1 {
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 2.6rem;
|
||||||
|
top: -10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 1.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.greetings h1,
|
||||||
|
.greetings h3 {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1024px) {
|
||||||
|
.greetings h1,
|
||||||
|
.greetings h3 {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
149
src/data/projects.json
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
{
|
||||||
|
"current": {
|
||||||
|
"name": "Написание алгоритмов вычисления психоэмоциональной составляющей в речи человека.",
|
||||||
|
"location": {
|
||||||
|
"link": "https://emtome.ru",
|
||||||
|
"name": "emtome",
|
||||||
|
"short_description": " - изучение звуковых данных и получение результирующей эмоции."
|
||||||
|
},
|
||||||
|
"description": [
|
||||||
|
"<br><p>Исследования и написание разнообразных алгоритмов по нахождению взаимосвязей между частотами человеческой речи и его психоэмоционального состояния в текущем моменте.</p>",
|
||||||
|
"<br><p>Написание сервисов логирования данных и транслирования видео между пользователями чата.</p>"
|
||||||
|
],
|
||||||
|
"skills": "C++, ImGui, OpenGL, Meson, VueJS, WebRTC, ClickHouse, Docker, PostgreSQL ..."
|
||||||
|
},
|
||||||
|
"total": [
|
||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"name": "Написание алгоритмов выявления закономерностей между различными данными",
|
||||||
|
"location": {
|
||||||
|
"link": "https://fonmix.ru",
|
||||||
|
"name": "fonmix",
|
||||||
|
"short_description": " - R&D направление алгоритмизации звуковых и нейроданных."
|
||||||
|
},
|
||||||
|
"description": [
|
||||||
|
"<br><p>Исследования и написание разнообразных алгоритмов по нахождению взаимосвязей между аудио, видео и нейро данными, их отношениe друг к другу и возможного влияния на деятельность и психоэмоциональное состояние человека.</p>"
|
||||||
|
],
|
||||||
|
"skills": "C++, ImGui, OpenGL, Meson, VueJS, Docker, PostgreSQL ..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"name": "Распознaвание эмоций в звуковых данных",
|
||||||
|
"location": {
|
||||||
|
"link": "https://emuse.su",
|
||||||
|
"name": "emuse",
|
||||||
|
"short_description": " - методика выявления скрытых и неявных закономерностей в музыкальных произведениях."
|
||||||
|
},
|
||||||
|
"description": [
|
||||||
|
"<br><p>Сервис анализирует звуковой ряд по критериям эмоционального влияния на слушателя и позволяет с большой степенью достоверности прогнозировать воздействие осмысленной звуковой волны на психоэмоциональный фон мозга.</p>",
|
||||||
|
"<br><p>Рассказывали про это <a target=\"_blank\" href=\"https://www.forbes.ru/brandvoice/ipquorum/387223-novaya-klassika-kakoe-budushchee-zhdet-muzykalnuyu-industriyu\">тут</a></p>"
|
||||||
|
],
|
||||||
|
"skills": "C++, ImGui, OpenGL, Meson, VueJS, Docker, PostgreSQL ..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"name": "Рекомендательная система музыкальных треков",
|
||||||
|
"location": {
|
||||||
|
"link": "https://melodyflow.ru",
|
||||||
|
"name": "melodyflow",
|
||||||
|
"short_description": " - реализация рекомендательного алгоритма по подбору музыки."
|
||||||
|
},
|
||||||
|
"description": [
|
||||||
|
"<br><p>Сервис рекомендует к прослушиванию музыкальные произведения на основе предпочтений пользователя.</p>"
|
||||||
|
],
|
||||||
|
"skills": "C++, ImGui, OpenGL, Meson, VueJS, Docker, PostgreSQL ..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"name": "Поиск музыки",
|
||||||
|
"location": {
|
||||||
|
"link": "https://trackid.ru",
|
||||||
|
"name": "trackid",
|
||||||
|
"short_description": " - реализация поиска музыкального произведения по его начальному фрагменту."
|
||||||
|
},
|
||||||
|
"description": [
|
||||||
|
"<br><p>Сервис анализирует переданный звуковой файл, находит в нем необходимые зависимости и используя разнообразные алгоритмы находит подобный трек в БД.</p>"
|
||||||
|
],
|
||||||
|
"skills": "C++, ImGui, OpenGL, Meson, VueJS, Docker, PostgreSQL ..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"name": "Анализ видеоряда",
|
||||||
|
"location": {
|
||||||
|
"link": "https://emframe.ru",
|
||||||
|
"name": "emframe",
|
||||||
|
"short_description": " - реализация анализа видеоряда и расклада его на эмоциональные составляющие."
|
||||||
|
},
|
||||||
|
"description": [
|
||||||
|
"<br><p>Сервис анализирует переданный видеофайл, находит в нем необходимые зависимости и используя разнообразные алгоритмы находит комплексную эмоциональную характеристику данного видео.</p>"
|
||||||
|
],
|
||||||
|
"skills": "C++, ImGui, OpenGL, Meson, VueJS, Docker, PostgreSQL ..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 5,
|
||||||
|
"name": "Технология вычисления смысла из набора данных",
|
||||||
|
"location": {
|
||||||
|
"link": "https://trycaster.com",
|
||||||
|
"name": "trycaster",
|
||||||
|
"short_description": " - совокупность методов, ведущих к визуализации человеческой мысли."
|
||||||
|
},
|
||||||
|
"description": [
|
||||||
|
"<br><p>В состав проекта входит минимум три основных направления исследований: Получение осмысленной ДНК звука; Выявление цифровой составляющей смысла написанного текста; Метод визуализации c последующим редактированиeм человеческой мысли.</p>",
|
||||||
|
"<br><p>... проект в разработке.</p>"
|
||||||
|
],
|
||||||
|
"skills": "C++, ImGui, OpenGL, Meson, VueJS, Docker, PostgreSQL ..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 6,
|
||||||
|
"name": "Движок для написания OpenGL - ориентированных приложений",
|
||||||
|
"location": {
|
||||||
|
"link": "https://gitcast.ru/chatlanin/vertex_engine",
|
||||||
|
"name": "vertex engine",
|
||||||
|
"short_description": " - реализация движка для создания 3D приложения с OpenGL и ImGui."
|
||||||
|
},
|
||||||
|
"description": [
|
||||||
|
"<br><p>Основная идея в разбиении по слоям важных частей приложения и взаимодействие между ними путем реализации встроенной event system.</p>"
|
||||||
|
],
|
||||||
|
"skills": "C++, ImGui, OpenGL, Meson, VueJS, Docker, PostgreSQL ..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 7,
|
||||||
|
"name": "Реализация необходимых в работе методов С++",
|
||||||
|
"location": {
|
||||||
|
"link": "https://gitcast.ru/chatlanin/hack",
|
||||||
|
"name": "hack",
|
||||||
|
"short_description": " - наборы кода, для разнообразных случаев в жизни."
|
||||||
|
},
|
||||||
|
"description": [
|
||||||
|
"<br><p>Представлены разнообразные решения для работы со строками, концептами, логированием данных, математических вариаций на тему матриц и векторов, а так же различные приемы по работе с кодом на С++.</p>"
|
||||||
|
],
|
||||||
|
"skills": "C++, Meson ..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 8,
|
||||||
|
"name": "CRM для спортивных клубов",
|
||||||
|
"location": {
|
||||||
|
"link": "https://www.fitness365.ru",
|
||||||
|
"name": "fitness365",
|
||||||
|
"short_description": " - система управления спортивными клубами."
|
||||||
|
},
|
||||||
|
"description": [
|
||||||
|
"<br><p>Возможности данной системы: Работа с потенциальными клиентами - лидами. Работа с существующими клиентами и сделками. Подробная информация о клиентах и истории работы с ними. Визуальный контроль: подсказки по статусам клиентов, долгам, дням рождениям, остаткам на счетах клиентов.</p>"
|
||||||
|
],
|
||||||
|
"skills": "VueJS, C#, C++, JS ..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 9,
|
||||||
|
"name": "Футбольный менеджер",
|
||||||
|
"location": {
|
||||||
|
"link": "https://vk.com/projectfootballonline",
|
||||||
|
"name": "ProjectFootballOnline",
|
||||||
|
"short_description": " - онлайн игра на тему футбольного менеджера."
|
||||||
|
},
|
||||||
|
"description": [
|
||||||
|
"<br><p>3D онлайн симулятор управления футбольным клубом. Проведение матчей, тренировок, строительства стадиона и т.п. Написна была дэсктопная и серверная часть игры.</p>"
|
||||||
|
],
|
||||||
|
"skills": "C++, Unreal Engine, NodeJS, VueJS, Unity3D, C#, PostgreSQL ..."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
16
src/main.js
Executable file
@@ -0,0 +1,16 @@
|
|||||||
|
import { createApp } from 'vue'
|
||||||
|
import App from './App.vue'
|
||||||
|
import router from './router'
|
||||||
|
|
||||||
|
import './assets/main.css'
|
||||||
|
|
||||||
|
import PerfectScrollbar from 'vue3-perfect-scrollbar'
|
||||||
|
import 'vue3-perfect-scrollbar/dist/vue3-perfect-scrollbar.css'
|
||||||
|
|
||||||
|
const app = createApp(App)
|
||||||
|
|
||||||
|
app.use(PerfectScrollbar)
|
||||||
|
app.use(router)
|
||||||
|
app.mount('#app')
|
||||||
|
|
||||||
|
app.config.compilerOptions.isCustomElement = (tag) => ['project_item'].includes(tag);
|
||||||
40
src/router/index.js
Executable file
@@ -0,0 +1,40 @@
|
|||||||
|
import { createRouter, createWebHistory } from 'vue-router'
|
||||||
|
|
||||||
|
import current_view from '../views/current_view.vue'
|
||||||
|
import all_view from '../views/all_view.vue'
|
||||||
|
import links_view from '../views/links_view.vue'
|
||||||
|
import read_view from '../views/read_view.vue'
|
||||||
|
import about_view from '../views/about_view.vue'
|
||||||
|
|
||||||
|
const router = createRouter({
|
||||||
|
history: createWebHistory(import.meta.env.BASE_URL),
|
||||||
|
routes: [
|
||||||
|
{
|
||||||
|
path: '/',
|
||||||
|
name: 'current',
|
||||||
|
component: current_view
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/projects',
|
||||||
|
name: 'projects',
|
||||||
|
component: all_view
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/links',
|
||||||
|
name: 'links',
|
||||||
|
component: links_view
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/read',
|
||||||
|
name: 'read',
|
||||||
|
component: read_view
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/about',
|
||||||
|
name: 'about',
|
||||||
|
component: about_view
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
export default router
|
||||||
7
src/views/about_view.vue
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
<script setup>
|
||||||
|
import about from '@/components/about.vue'
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<about/>
|
||||||
|
</template>
|
||||||
7
src/views/all_view.vue
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
<script setup>
|
||||||
|
import projects from '@/components/projects.vue'
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<projects/>
|
||||||
|
</template>
|
||||||
7
src/views/current_view.vue
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
<script setup>
|
||||||
|
import projects from '@/components/current_project.vue'
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<projects/>
|
||||||
|
</template>
|
||||||
7
src/views/links_view.vue
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
<script setup>
|
||||||
|
import links from '@/components/links.vue'
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<links/>
|
||||||
|
</template>
|
||||||
7
src/views/read_view.vue
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
<script setup>
|
||||||
|
import read from '@/components/read.vue'
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<read/>
|
||||||
|
</template>
|
||||||
14
vite.config.js
Executable file
@@ -0,0 +1,14 @@
|
|||||||
|
import { fileURLToPath, URL } from 'node:url'
|
||||||
|
|
||||||
|
import { defineConfig } from 'vite'
|
||||||
|
import vue from '@vitejs/plugin-vue'
|
||||||
|
|
||||||
|
// https://vitejs.dev/config/
|
||||||
|
export default defineConfig({
|
||||||
|
plugins: [vue()],
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
'@': fileURLToPath(new URL('./src', import.meta.url))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||