-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
executable file
·1 lines (1 loc) · 16 KB
/
index.html
1
<!doctype html><html lang="ru"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover"><title>О.Ш. — me</title><meta name="color-scheme" content="dark light"><style>:root{--link-border-size:0.3125em;--fsz-base:1rem}@media screen and (color-index:48){:root{--bg:#2f3437;--text:#cdd9e5;--link:#519bf5;--link-visited:#914dff}}@media screen and (color:48842621){:root{--bg:#2f3437;--text:#cdd9e5;--link:#519bf5;--link-visited:#914dff}}@media screen and (prefers-color-scheme:dark){:root{--bg:#2f3437;--text:#cdd9e5;--link:#519bf5;--link-visited:#914dff}}::-webkit-scrollbar,::-webkit-scrollbar-button,::-webkit-scrollbar-thumb{height:13px;width:13px}::-webkit-scrollbar,::-webkit-scrollbar-track-piece:hover:active{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAG0lEQVQYV2P8/////4MHDzIwHjhw4L+9vT0DAHAFCj6esq3FAAAAAElFTkSuQmCC") repeat;image-rendering:pixelated}::-webkit-scrollbar-button,::-webkit-scrollbar-corner,::-webkit-scrollbar-thumb{background-color:silver}::-webkit-scrollbar-button,::-webkit-scrollbar-thumb{border-color:silver #000 #000 silver;border-style:solid;border-width:1px;box-shadow:inset 1px 1px 0 #fff,inset -1px -1px 0 grey}::-webkit-scrollbar-button{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAJCAYAAABaMo5wAAAAW0lEQVQ4T2NkGGSAcZC5h4FWDvrPwEC02ShqkR0EkkAHuBxMyEKYWYQ8jKEOXQOyo/A5BuZwqqvBZiA+3xMbilQLIWqlcUJRimwPzjRELcdQZA6hREeR4eRoBgBoXhAK6oiMhwAAAABJRU5ErkJggg==");box-sizing:border-box;image-rendering:pixelated}::-webkit-scrollbar-button:hover:active{border:1px solid grey;box-shadow:none}::-webkit-scrollbar-button:disabled{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAJCAYAAABaMo5wAAAAYElEQVQ4T2NkGGSAcZC5h4EmDmpoaPjf0NBAlNnoauGaQBLooYXLUEIWwswi5Chs6lB8gewofI6BOZwWajCCFZ/viQ1FqoUQtRI4oShFtgdnGqKWYyg1h6icQKklpOgHAM9mQArEvm5+AAAAAElFTkSuQmCC"),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAJCAYAAABaMo5wAAAAYElEQVQ4T2NkGGSAcZC5h4EmDvr///9/RkZGosxGVwvXBJJADy1chhKyEGYWIUdhU4fiC2RH4XMMzOG0UIMRrPh8T2woUi2EqJXACUUpsj040xC1HEOpOUTlBEotIUU/AKXFQAqyTJ6DAAAAAElFTkSuQmCC")}::-webkit-scrollbar-button:horizontal:decrement:disabled{background-position:-26px 1px,-25px 2px}::-webkit-scrollbar-button:horizontal:increment:disabled{background-position:-17px 1px,-16px 2px}::-webkit-scrollbar-button:vertical:decrement:disabled{background-position:-8px 1px,-7px 2px}::-webkit-scrollbar-button:vertical:increment:disabled{background-position:1px 1px,2px 2px}::-webkit-scrollbar-button:horizontal:decrement{background-position:-26px 1px}::-webkit-scrollbar-button:horizontal:increment{background-position:-17px 1px}::-webkit-scrollbar-button:vertical:decrement{background-position:-8px 1px}::-webkit-scrollbar-button:vertical:increment{background-position:1px 1px}::-webkit-scrollbar-track-piece:hover:active{background-blend-mode:difference;background-color:#fff}::-webkit-scrollbar-track-piece:increment{background-position:bottom}::-webkit-scrollbar-button:end:decrement,::-webkit-scrollbar-button:start:increment{display:none}*,:after,:before{box-sizing:border-box}body,html{height:100%}body{background:#fff;background:var(--bg,#fff);color:#000;color:var(--text,#000);display:flex;flex-direction:column;font-size:1rem;font-size:var(--fsz-base);line-height:1.5;margin:0;overflow:scroll;padding:max(1.8rem,env(safe-area-inset-top)) max(1.8rem,env(safe-area-inset-right)) max(1.8rem,env(safe-area-inset-bottom)) max(1.8rem,env(safe-area-inset-left));scroll-behavior:smooth}a{background:linear-gradient(90deg,red,#ff9a00 10%,#d0de21 20%,#4fdc4a 30%,#3fdad8 40%,#2fc9e2 50%,#1c7fee 60%,#5f15f2 70%,#ba0cf8 80%,#fb07d9 90%,red);background-position:bottom;background-repeat:repeat-x;background-size:0;color:#0000f0;color:var(--link,#0000f0);padding-bottom:.125em;text-decoration:none}a:visited{color:#531a89;color:var(--link-visited,#531a89)}a:focus,a:hover{-webkit-animation:rainbow 1s linear infinite;animation:rainbow 1s linear infinite;background-size:200% .3125em;background-size:200% var(--link-border-size)}a:active,a:visited:active{color:revert}@media print{a:link,a:visited{color:#000!important;color:var(--text,#000)!important}a[href^=http]:after{content:" (" attr(href) ")"}}@-webkit-keyframes rainbow{0%{background-position-x:0}to{background-position-x:200%}}@keyframes rainbow{0%{background-position-x:0}to{background-position-x:200%}}main{max-width:55rem}.main-title{grid-column-gap:1.1rem;align-items:center;display:grid;grid-template-columns:auto 1fr}.userpic{height:100px;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-1 1 31 18' width='150' height='100'%3E%3Cpath d='M27.973 3.123A3.578 3.578 0 0 0 25.447.597C23.22 0 14.285 0 14.285 0S5.35 0 3.123.597A3.578 3.578 0 0 0 .597 3.123C0 5.35 0 10 0 10s0 4.65.597 6.877a3.578 3.578 0 0 0 2.526 2.526C5.35 20 14.285 20 14.285 20s8.935 0 11.162-.597a3.578 3.578 0 0 0 2.526-2.526C28.57 14.65 28.57 10 28.57 10s-.002-4.65-.597-6.877z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-1 1 31 18' width='150' height='100'%3E%3Cpath d='M27.973 3.123A3.578 3.578 0 0 0 25.447.597C23.22 0 14.285 0 14.285 0S5.35 0 3.123.597A3.578 3.578 0 0 0 .597 3.123C0 5.35 0 10 0 10s0 4.65.597 6.877a3.578 3.578 0 0 0 2.526 2.526C5.35 20 14.285 20 14.285 20s8.935 0 11.162-.597a3.578 3.578 0 0 0 2.526-2.526C28.57 14.65 28.57 10 28.57 10s-.002-4.65-.597-6.877z'/%3E%3C/svg%3E");width:150px}.userpic__noise{background:#777;cursor:help;height:100%;width:100%}.caption{display:none;position:fixed;right:2rem;top:0}@media print{.caption{display:revert}}.sub-title{font-style:italic}.top-info{list-style-type:circle}a.social-link{align-items:baseline;display:inline-flex;padding-bottom:.3125em;padding-bottom:var(--link-border-size)}@media print{a.social-link{color:#000!important;color:var(--text,#000)!important}}.social-link.gh{color:inherit}.social-link.tg{color:#2aabee}.social-link>svg{align-self:center;height:1.5rem;width:1.5rem}.duration{font-size:1rem;font-size:var(--fsz-base)}footer{margin-top:4rem}</style><meta name="description" content="Oleg Shvedov, Frontend Developer"><link rel="canonical" href="https://shvedovskiy.github.io"><link rel="alternate" href="https://shvedovskiy.github.io" hreflang="x-default"><meta name="theme-color" content="#fff" media="(prefers-color-scheme: light)"><meta name="theme-color" content="#2f3437" media="(prefers-color-scheme: dark)"><meta property="og:url" content="https://shvedovskiy.github.io"><meta property="og:type" content="website"><meta property="og:title" content="О.Ш. — me"><meta property="og:description" content="Oleg Shvedov, Frontend Developer"><meta property="og:image" content="https://shvedovskiy.github.io/assets/images/og.jpg"><meta property="og:image:secure_url" content="https://shvedovskiy.github.io/assets/images/og.jpg"><meta property="og:image:type" content="image/jpeg"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:image:alt" content="Олег"><meta property="og:locale" content="ru_RU"></head><body><header><div class="main-title"><div class="userpic"><canvas class="userpic__noise"></canvas></div><h1>Олег Шведов</h1><p class="caption">https://shvedovskiy.github.io</p></div><p class="sub-title">Фронтенд разработчик с чувством прекрасного</p><ul class="top-info"><li>Typescript, React, GraphQL, CSS</li><li>Amsterdam, Netherlands, <a href="mailto:ol.shvedov@gmail.com">ol.shvedov@gmail.com</a>, <a class="social-link tg" href="https://t.me/shvedovskiy" title="Telegram profile" target="_blank" rel="noreferrer"><svg><use href="#tg-icn"></use></svg></a>, <a class="social-link gh" href="https://github.com/shvedovskiy" title="GitHub profile" target="_blank" rel="noreferrer"><svg><use href="#gh-icn"></use></svg></a></li></ul></header><main><section><h2>Обо мне</h2><p>Работаю во фронтенде 5 лет. Специализируюсь на современных и сложных интерфейсах, которые решают проблемы реального мира.</p><p>Уделяю много внимания качеству продукта: борюсь за скорость, забочусь об удобстве пользователей, не упускаю из вида мелочи. Уважаю как инженерную культуру, так и дизайнерское мышление.</p></section><section><h2>Где я работаю</h2><ul><li><h3><a href="https://semrush.com" target="_blank" rel="noreferrer">Semrush</a> <i class="duration">(с 2021)</i></h3><p>Занимаюсь разработкой фронтенда на проекте <a href="https://semrush.com/siteaudit" target="_blank">Site Audit tool</a>.</p></li><li><h3><a href="https://mvs.group" target="_blank" rel="noreferrer">МВС Груп</a> <i class="duration">(2020–2021)</i></h3><h4>Проект «Бизнес Мониторинг»:</h4><p>Запустил автоматизированный генератор отчётов для внутреннего мониторинга взамен формируемого руками статического отчёта.</p><p><i>Стек: TS, Ag Grid, Redux, PostCSS, Rollup, REST.</i></p><h4>Система «Инвентори» (легаси версия):</h4><p>SPA с админским интерфейсом для управления инфраструктурой компании: база комплексов фотовидеофиксации, дислокация передвижных комплексов, тикеты на инциденты, отчёты, хранилище документов.</p><p><i>Стек: React, Apollo, Ag Grid, Leaflet, Ant Design, SCSS Modules.</i></p><ul><li>Добавил новые большие разделы: обрабатывал и фиксировал требования, продумывал логику работы UI, встраивал в существующую архитектуру, верстал.</li><li>Расширил функциональность роутинга, чтобы синхронизировать с URL визуальные состояния приложения и реализовать time travel.</li><li>Улучшал кодстайл и конвенции кодирования, дорабатывал сервис-воркер с горячим обновлением, дополнял библиотеку UI Kit компонентов.</li></ul><h4>Система «Инвентори» (новая версия):</h4><p>Превращение монолита во фронтенд-движок с упором в конфигурацию на бэкенде и с простой адаптацией под разные бизнес-процессы.</p><ul><li>Разрабатывал новую верхнеуровневую архитектуру, заточенную под универсальные сценарии использования.</li><li>Верстал новый визуальный дизайн, коммуницировал с дизайн-командой.</li><li>Участвовал в большом рефакторинге после первого релиза из-за изменения требований во время разработки. В результате получили значительно более расширяемый и надёжный код.</li><li>Писал тесты на core функциональность (Jest + Testing Library).</li><li>Дорабатывал движок для поддержки двух кастомных бизнес-процессов от внешних заказчиков.</li></ul></li><li><h3><a href="https://genesys.com" target="_blank" rel="noreferrer">Genesys</a> <i class="duration">(2017–2020)</i></h3><p><a href="https://docs.genesys.com/Documentation/EZP/9.0.0/User/Welcome" target="_blank" rel="noreferrer">SPA</a> для real-time мониторинга и администрирования контакт-центров. Приложение основано на интерактивной панели управления с виджетами, имеет много интерфейсов с графиками, статистическими выкладками.</p><p><i>Стек: TS, Angular, Ag Grid, CSS, Amazon AWS.</i></p><ul><li>Мигрировал с AngularJS 1.5 на Angular 8, сборку перенёс с Gulp + Bower на кастомизированный Angular CLI</li><li>Оптимизировал производительность графиков, анимаций, интерфейсов с большим количеством данных. Сократил время загрузки экранов, внедрил lazy loading тяжелых модулей. Переписал самописные табличные интерфейсы на Ag Grid.</li><li>Адаптировал интерфейс под мобильные устройства, поддерживал кросс-браузерность с IE 11, улучшал верстку.</li><li>Добавил a11y-механизмы: переработка существующей семантики, клавиатурная навигация, поддержка скринридеров.</li><li>Разрабатывал HTML-редактор с произвольным форматированием текста и виджетами для его отображения.</li><li>Писал юнит и интеграционные тесты на UI (Karma, Robot Framework, Selenium).</li><li>Участвовал в разработке облачного деплоя приложения на AWS и Azure. Запустил тестирование и CI приложения для деплоймента, наладил мониторинг продакшена (Prometheus, Grafana).</li></ul></li><li><h3><a href="https://github.com/fidals" target="_blank" rel="noreferrer">Fidals</a> <i class="duration">(в 2017)</i></h3><p>Поддержка двух интернет-магазинов на Django, запуск онлайн-кинотеатра на Flask. Работал в команде из четырёх разработчиков по kanban.</p><p><i>Стек: Django, Flask, PostgreSQL, MongoDB, Docker, JQuery, Selenium.</i></p></li></ul></section></main><footer><p id="now">н. в.</p></footer><svg style="width: 0; height: 0; position: absolute;"><symbol id="tg-icn" viewBox="0 0 240 240"><g transform="scale(3.47)"><circle cy="34.6" cx="34.6" r="34.6" fill="currentColor"/><path d="M47.8 20.5s3.6-1.4 3.3 2c-.1 1.4-1 6.3-1.7 11.6L47 49.8s-.2 2.3-2 2.7c-1.8.4-4.5-1.4-5-1.8-.4-.3-7.5-4.8-10-7-.7-.6-1.5-1.8.1-3.2l10.5-10c1.2-1.2 2.4-4-2.6-.6l-14 9.5s-1.6 1-4.6.1l-6.5-2s-2.4-1.5 1.7-3c10-4.7 22.3-9.5 33.2-14z" fill="#fff"/></g></symbol><symbol id="gh-icn" viewBox="0 0 16 16" fill="currentColor"><path fill-rule="evenodd" d="M8 0a8 8 0 00-2.53 15.59c.4.07.55-.17.55-.38l-.01-1.49c-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82a7.42 7.42 0 014 0c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48l-.01 2.2c0 .21.15.46.55.38A8.01 8.01 0 0016 8a8 8 0 00-8-8z"/></symbol></svg><script>document.getElementById("now").innerText=(new Date).getFullYear();const t=document.querySelector(".userpic__noise"),e=t.getContext("2d");t.width=150,t.height=100;let a=0;!function t(){a++,a%3||function(){const t=e.createImageData(e.canvas.width,e.canvas.height),a=new Uint32Array(t.data.buffer),n=a.length;let o=0,r=0;const c=6*Math.random()+4,d=150*Math.random()*100;let h=0;for(let t=0;t<n;)o<0&&(o=c*Math.random(),h=Math.random()**.4,t>d&&t<d+1500&&(h=Math.random()),r=255*h<<24),o--,a[t++]=r;e.putImageData(t,0,0)}(),requestAnimationFrame(t)}();</script></body></html>