Заметки о программировании, путешествиях, плёнке и разных интересностях
Обо мне  •  Список заметок

Позднее Ctrl + ↑

Kentmere 400

Это первая пленка, которую я проявил вручную. Как по мне имеет большое, но в тоже время, приятное зерно. Позже расскажу о том как я проявлял.

Ведение дневника в Telegram

Как-то услышал идею о том чтобы вести свой дневник в телеграмме. Эта идея оказалась очень даже рабочей. Сам формат сообщений более удобный и нативный для ведения дневника чем отдельные приложения. Также телеграмм подкупает своим большим функционалом и бесплатностью.

Он покрывает все то что умеют другие приложения:

  1. Аудио и видео заметки
  2. Фотографии
  3. Файлы
  4. Геолокация.

Проекты

Склад

Середина 2019 года
Склад — приложение, которое позволяет сохранять закладки и организовывать с помощью тегов. Делал в первую очередь для себя. Также данный проект служит для меня площадкой для тестирования новых технологических решений. Планирую в ближайшем будущем открыть исходный код на Github.

Технологии: ASP.NET Core MVC, Entity Framework Core, PostgreSQL, JavaScript, bash.
Ссылка на проект https://mybookmark.space

Сайт для школы Educational hub «ABC»

Середина 2018 года
Занимался полным циклом разработки (дизайн, верстка, серверная часть, организация CI/CD).

Технологии: ASP.NET Core, SQLite, Entity Framework Core, HTML/CSS, bash.
Ссылка на сайт: https://educationalhub-abc.com.ua

Windows server manager

Начало 2018 года
Веб приложение для управления серверами на базе Windows с помощью веб интерфейса. Часть функциональности была заточена специально для нашей команды на работе. На текущий момент проект не активен, так как потерял актуальность. В планах есть идея восстановить его и сделать более универсальным.

Технологии: ASP.NET MVC 5

WebCars

Начало 2017 года
Интернет аукцион для покупки и продажи проверенных автомобилей. Из интересных особенностей: каждый автомобильно должен был пройти проверку в выбранном СТО, отчет доступен каждому пользователю. Также этот проект был для меня первым, именно с него начался отсчет моего коммерческого опыта разработки. На текущий момент сайт отключен.
Что делал:

  • Написал большую часть серверной логики.
  • Интеграция с IP телефонией.
  • Корпоративный блог
  • Личные кабинеты для СТО и администраторов

Технологии: ASP.NET MVC 5, Entity Framework, JavaScript, JQuery, HTML/CSS

Мои профессиональные скиллы

Основной стек технологий — .NET

  • ASP.NET: Core, MVC, WebAPI.
  • Тестирование: NUnit, MSTest.
  • ORM: Entity Framework, Linq to SQL, Dapper.
  • T-SQL
  • PowerShell
  • Планировщики задач: Quartz, FluentScheduller.
  • И многие другие фреймворки (Ninject, Autofac, AutoMapper, Polly)

Web технологии

  • HTML/CSS
  • JavaScript
  • Angular 6

Дополнительные навыки

  • Много работал с настройкой и отладкой CI/CD в частности Teamcity.
  • Умею оптимизировать запросы для MS SQL Server
  • SVN/Git

Подходы к разработке ПО

  • Design Patterns
  • Domain-Driven Design
  • SOLID
  • TDD

Опыт работы

Terrasoft
Сентябрь 2017 — Сейчас
Основные задачи связанны с разработкой CRM системы bpmonline. Кроме этого занимаюсь автоматизацией разных процессов внутри команды.

Участвую во внутренних проектах:

  1. bpmcli — cli для нашей системы, которая предлагает новые возможности для разработчиков.
  2. bpmonline bot — бот для разных мессенджеров для упрощения взаимодействия с системой.

Провел ряд обучений на темы:

  1. Что такое TeamCity и с чем его едят?
  2. Серия докладов об архитектуре высоконагруженных систем.
  3. XP практики.

White & Red Production
Декабрь 2016 — Сентябрь 2017
Занимался разработкой интернет аукциона по продаже автомобилей. Реализовал оплату, большую часть серверной логики, взаимодействие с IP телефонией, корпоративный блог, админ панель.

Резюме (CV)

— Русская версия PDF | Google Documents.
— English version PDF | Google Documents

 Нет комментариев    59   1 мес  

Полезные SQL скрипты: поиск foreign key по БД

SELECT 
    f.name AS ForeignKey, 
    OBJECT_NAME(f.parent_object_id) AS TableName, 
    COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName, 
    OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName, 
    COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName 
FROM 
    sys.foreign_keys AS f 
INNER JOIN 
    sys.foreign_key_columns AS fc 
ON 
    f.OBJECT_ID = fc.constraint_object_id 
WHERE 
    f.name = 'FKnokgcq1rxh5Y7DLhgCqIZJ4KY'
 Нет комментариев    55   1 мес   mssql   sql

Полезные SQL скрипты: текущая ситуация на сервере

С помощью этих скрипов можно посмотреть какие запросы в данных момент выполняются на сервере.

select *
from sys.sysprocesses 
where 
	spid > 50 and 
	spid <> @@spid and 
	status <> 'sleeping'
order by spid, ecid
select 
	session_id, 
	status, 
	wait_type, 
	command, 
	last_wait_type, 
	percent_complete, 
	qt.text, 
	total_elapsed_time/1000 as [total_elapsed_time, сек],
	wait_time/1000 as [wait_time, сек],
	(total_elapsed_time - wait_time)/1000 as [work_time, сек]
from sys.dm_exec_requests as qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt
where session_id >= 50 and session_id <> @@spid
 Нет комментариев    69   1 мес   sql

Курс по основам работы с командной строкой

Сегодня хочу посоветовать отличный бесплатный курс по основам работы с командной строкой. С помощью этого курса можно перестать бояться черного окна с мигающим курсором, а использовать его для повышения продуктивности.

Ссылка на курс от Хекслет
Также ссылка на мой конспект по курсу

 Нет комментариев    89   1 мес  

Старые проекты: моя домашняя страница

На выходных просматривал файлы на старых жестких дисках и нашел мини проект моей домашней страницы. В те времена (2016-2017 год) я хотел сделать страничку стилизованную под Windows 98. Но дальше парочки статичных блоков дело не дошло. И я решил в один из вечеров доделать идею до конца.

Составил список того что надо добавить:

  • Возможность перемещать окна
  • При выборе окна — делать его активным и отображать поверх остальных
  • Часы
  • Меню «Пуск»
  • Рабочую панель задач
  • Возможность открывать и закрывать окна

Так как делал на коленке и за час, то код соответствующий. В дальнейшим перепишу и выложу на Github.

Видео с демо моей старой страницы:

А вот что получилось. Если хотите сами пощелкать — ссылка на демо.

 1 комментарий    102   1 мес   проект

Небольшая заметка об индексах в ms sql

Индексы это важная часть большинства серверов баз данных. Они позволяют ускорить доступ к данным. Суть индексов хорошо описывает следующий пример: оглавление книги, оно позволяет найти нужную нам страницу вместо перебора всех страниц. Но у индексов есть недостатки: они заполняют дополнительное место (бывают случаи что индексы занимают в 3 раза больше места чем сами данные), также замедляются операции изменения данных, так как теперь нам надо менять еще и индексы.

Что из себя представляет индекс?

Внутри сервера они представлены в виде B-tree, где B означает сбалансированное, а не бинарное дерево.

Например мы хотим найти запись с Id = 2581.
Начиная с корня, выполняется поиск наименьшего значения ключа, большего или равного требуемому. Так мы найдем узел 18316, потом спустимся в узел 9031 и там мы увидим что есть прямая ссылка на лежащие данные по ключу 2581, после чего осуществляем вычитку данных.

Кластерный индекс

Кластерный индекс позволяет определить порядок данных в таблице. Таким образом индекс содержит не только указатели на строки но и сами данных. Из этого выходит что у таблицы может быть только один кластерный индекс, так как нельзя физически упорядочить элементы более чем одним способом. Индекс создается автоматически для каждой таблицы, в которой определен первичный ключ.

Не кластерный индекс

Структура такая же как и кластерного индекса, но с двумя отличиями:

  1. Не изменяет физическое упорядочивание данных.
  2. Страницы индекса состоят из ключа индекса и ссылки на строку.

SQL Server использует индекс для нахождения записей, совпадающих с условиями запроса.

Составной ключ в индексе

SQL Server позволяет создавать индексы по нескольким колонкам. Но в таком случае у нас появляется ограничение. Длинна составного ключа не должна быть больше 900 байт. Но бывают исключения, например у нас есть две колонки, каждая из которых длинной в 500 байт. Сервер создаст индекс, в случае если нет данных, которые будут превышать длину в 900 байт.

Также стоит помнить что индексы типа (Col1, Col2) и (Col2, Col1) разные.

Уникальные индексы

Такие индексы создаются для реализации целостности данных. Таким образом сервер гарантирует уникальные значение для указанной колонки или составного ключа.

Статьи, которые советую почитать чтобы глубже разобраться в теме

  1. Очень хорошая статья о всех типах индексов, когда их стоит создавать и как использовать
  2. Индексы. Теоретические основы.
Ранее Ctrl + ↓