Результаты поиска по запросу: mvc4 5
Безболезненный Fallback cache на Scala
Автор: HighLoad
В крупных (или микросервисных) архитектурах у Backend'а есть свои Backend'ы. И, если какой-то сервис очень важный, он не всегда очень производительный. Как сделать так, чтобы ваша система продолжала отвечать, даже если важные источники информации перестали отвечать?
Рассказываю о нашем опыте в Tinkoff:
1. Как мы выбирали СУБД и на чём остановились.
2. Как поддерживать версионность форматов данных.
3. Как понять, что ваш сервис умер или ожил.
4. Как встроить cache, не переписывая приложения на Scala.
5. Итоги и замеры."
Мicrosoft Аrchitecture Guide
В видео рассмотрены такие вопросы: 1. Принципы архитектуры и шаблоны проектирования при разработке решений на платформе Microsoft .NET; 2. Чем руководствоваться при выборе стратегии и шаблонов проектирования, оптимальных для проектирования слоев, компонентов и сервисов решения; 3. Определение ключевых характеристик дизайна, основные атрибуты качества (безопасность, производительность, масштабируемость); 4. Сквозная функциональность; 5. Общие рекомендации по архитектуре и дизайну веб-приложений, клиентских приложений, RIA-, мобильных приложений, сервисов.
IT - Новости | Будущее от Microsoft 2020.
Компания Microsoft опубликовала видео, в котором показала собственное видение того, что нас ждёт в ближайшие 5-10 лет. По мнению известного производителя программного обеспечения, уже совсем скоро нас ежедневно будут окружать голограммы, огромные дисплеи, невероятно тонкие планшеты, фантастические носимые устройства, различные дроны и гнущиеся экраны. В ролике любая информация с легкостью передаётся между разными устройствами, а люди управляют большинством устройств жестами или голосовыми командами.
Еще больше интересных видео для пользователей ITVDN.
Создание секундомера с помощью CSS3
Автор: Редакция ITVDN
Введение
В этой статье Вы научитесь создавать секундомер, используя HTML5 и CSS3. Мы рассмотрим CSS3 анимацию с тремя кнопками: старт, остановка и сброс. Запуск начинает работу секундомера, стоп – останавливает секундомер, и кнопка сброса сбрасывает секундомер.
Основная логика создания секундомера очень простая, Вы будете использовать простой контейнер div, содержащий цифры, они будут увеличиваться с помощью ключевого кадра анимации.
Сначала создайте div (содержащий числа) с помощью кода HTML:
<!doctype html>
<html>
<head>
<title>Stopwatchtitle>
<link rel="stylesheet" href="Style.css" />
head>
<body>
<div class="number">0 1 2 3 4 5 6 7 8 9div>
body>
html>
Вот результат предыдущего кода:
Теперь Вам нужно выровнять числа по вертикали за счет уменьшения ширины контейнера. Итак, создайте файл CSS (styles.css) и введите следующий код в этот CSS-файл.
* {
margin: 0;
padding: 0;
}
.numbers {
width: 10px;
}
Согласно предыдущему коду, Ваши цифры будут выровнены вертикально:
Теперь используем цифровые шрифты, Вы можете скачать их с сайта ds-digi.font. Используйте следующий код CSS, чтобы изменить шрифт:
.number {
width: 10px;
font-family: digital, arial, verdana;
font-size: 50px;
}
@font-face {
font-family: 'digital';
src: url('DS-DIGI.TTF');
}
Результат такого кода:
Давайте поместим числа в поле для отображения только одной цифры. Таким образом, в HTML-файле поместите div с цифрами в другой div. Код будет таким:
<div class="box">
<div class="number">0 1 2 3 4 5 6 7 8 9div>
div>
Теперь примените такие настройки CSS, чтобы отображать только одну цифру.
.box {
width: 40px;
height: 40px;
border: 1px solid #000;
font-size: 50px;
overflow: hidden;
}
.number {
width: 40px;
line-height: 40px;
font-family: digital, arial, verdana;
text-align: center;
}
Таким будет результат:
Давайте создадим анимацию цифр, так как это главная задача статьи. Логика анимации – изменить значение top position absolute от 0 до -400 px, потому что высота поля 40 px, а у нас есть цифры от 0 до 9, то есть в общей сложности 10 цифр, так что 40 * 10 = 400, Вы будете менять верхнюю от 0 до -400 px. Вот так выглядит код файла style.css:
.box {
width: 40px;
height: 40px;
border: 1px solid #000;
font-size: 50px;
overflow: hidden;
position: relative;
}
.number {
width: 40px;
line-height: 40px;
font-family: digital, arial, verdana;
text-align: center;
position: absolute;
top: 0;
left: 0;
-webkit-animation: moveup 1s steps(10, end) infinite; /* Chrome, Safari, Opera */
animation: moveup 1s steps(10, end) infinite;
}
@-webkit-keyframes moveup {
0% {
top: 0px;
}
100% {
top: -400px;
}
}
@keyframes moveup {
0% {
top: 0px;
}
100% {
top: -400px;
}
}
Вот каким будет результат:
Вы можете увидеть, что цифры заменяются, а не перемещаются вверх пиксель за пикселем. Теперь создайте еще несколько div: два для часов, два для минут, два для секунд и три для мили-секунд.
<!doctype html>
<html>
<head>
<title>Stopwatchtitle>
<link rel="stylesheet" href="Style.css" />
head>
<body>
<div class="stopwatch">
<div class="box">
<div class="number tensPlaceHours">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box">
<div class="number onesPlaceHours">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box divider">
<div class="number">:div>
div>
<div class="box">
<div class="number tensPlaceMinutes">0 1 2 3 4 5 6div>
div>
<div class="box">
<div class="number onesPlaceMinutes">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box divider">
<div class="number">:div>
div>
<div class="box">
<div class="number tensPlaceSeconds">0 1 2 3 4 5 6div>
div>
<div class="box">
<div class="number onesPlaceSeconds">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box divider">
<div class="number">:div>
div>
<div class="box">
<div class="number onesPlaceMiliSeconds">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box">
<div class="number tensPlaceMiliSeconds">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box">
<div class="number hundredsPlaceMiliSeconds">0 1 2 3 4 5 6 7 8 9div>
div>
div>
body>
html>
Результат предыдущего кода:
Теперь установите float left для всех div, как указано ниже.
.box {
width: 40px;
height: 40px;
border: 1px solid #000;
font-size: 50px;
overflow: hidden;
position: relative;
}
После применения float left мы получим такой результат:
Таким образом, максимальное значение минут и секунд будет 60. Вы должны создать две анимации, одна из которых будет 10-шаговой и 10-цифровой, и одна 6-шаговой, и только 6-цифровой. Используйте следующий код CSS для этого:
* {
margin: 0;
padding: 0;
}
.box {
width: 40px;
height: 40px;
border: 1px solid #000;
font-size: 50px;
overflow: hidden;
position: relative;
float: left;
}
.number {
width: 40px;
line-height: 40px;
font-family: digital, arial, verdana;
text-align: center;
position: absolute;
top: 0;
left: 0;
-webkit-animation: moveup 1s steps(10, end) infinite; /* Chrome, Safari, Opera */
animation: moveup 1s steps(10, end) infinite;
}
.moveuptens {
-webkit-animation: moveuptens 1s steps(10, end) infinite; /* Chrome, Safari, Opera */
animation: moveuptens 1s steps(10, end) infinite;
}
.moveupsix {
-webkit-animation: moveupsix 1s steps(6, end) infinite; /* Chrome, Safari, Opera */
animation: moveupsix 1s steps(6, end) infinite;
}
@-webkit-keyframes moveup {
0% {
top: 0px;
}
100% {
top: -400px;
}
}
@keyframes moveup {
0% {
top: 0px;
}
100% {
top: -400px;
}
}
@-webkit-keyframes moveuptens {
0% {
top: 0px;
}
100% {
top: -400px;
}
}
@keyframes moveuptens {
0% {
top: 0px;
}
100% {
top: -400px;
}
}
@-webkit-keyframes moveupsix {
0% {
top: 0px;
}
100% {
top: -240px;
}
}
@keyframes moveupsix {
0% {
top: 0px;
}
100% {
top: -240px;
}
}
@font-face {
font-family: 'digital';
src: url('DS-DIGI.TTF');
}
Теперь, после создания предыдущих анимаций, примените класс CSS к HTML следующим образом:
<div class="stopwatch">
<div class="box">
<div class="number tensPlaceHours moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box">
<div class="number onesPlaceHours moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box divider">
<div class="number">:div>
div>
<div class="box">
<div class="number tensPlaceMinutes moveupsix">0 1 2 3 4 5 6div>
div>
<div class="box">
<div class="number onesPlaceMinutes moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box divider">
<div class="number">:div>
div>
<div class="box">
<div class="number tensPlaceSeconds moveupsix">0 1 2 3 4 5 6div>
div>
<div class="box">
<div class="number onesPlaceSeconds moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box divider">
<div class="number">:div>
div>
<div class="box">
<div class="number onesPlaceMiliSeconds moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box">
<div class="number tensPlaceMiliSeconds moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box">
<div class="number hundredsPlaceMiliSeconds moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
div>
Таким будет результат:
Теперь Вам нужно синхронизировать скорость анимации со скоростью времени. Примените следующие свойства:
.onesPlaceSeconds {
animation-duration: 10s;
-webkit-animation-duration: 10s;
}
.tensPlaceSeconds {
animation-duration: 60s;
-webkit-animation-duration: 60s;
}
.hundredsPlaceMiliSeconds {
animation-duration: 1s;
-webkit-animation-duration: 1s;
}
/*1/10th of .second*/
.tensPlaceMiliSeconds {
animation-duration: 0.1s;
-webkit-animation-duration: 0.1s;
}
.hundredsPlaceMiliSeconds {
animation-duration: 0.01s;
-webkit-animation-duration: 0.01s;
}
.onesPlaceMinutes {
animation-duration: 600s;
-webkit-animation-duration: 600s;
}
/*60 times .second*/
.tensPlaceMinutes {
animation-duration: 3600s;
-webkit-animation-duration: 3600s;
}
/*60 times .minute*/
.onesPlaceHours {
animation-duration: 36000s;
-webkit-animation-duration: 36000s;
}
/*60 times .minute*/
.tensPlaceHours {
animation-duration: 360000s;
-webkit-animation-duration: 360000s;
}
/*10 times .hour*/
Вот таким будет результат:
Вы можете увидеть, что сейчас с секундомером все в порядке. Теперь добавьте стили к секундомеру. Модифицируйте HTML и CSS.
HTML-файл:
<!doctype html>
<html>
<head>
<title>Stopwatchtitle>
<link rel="stylesheet" href="Style.css" />
head>
<body>
<!doctype html>
<html>
<head>
<title>Stopwatchtitle>
<link rel="stylesheet" href="Style.css" />
head>
<body>
<div class="MainContainer">
<div class="stopwatch">
<div class="box">
<div class="number tensPlaceHours moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box">
<div class="number onesPlaceHours moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box divider">
<div class="number">:div>
div>
<div class="box">
<div class="number tensPlaceMinutes moveupsix">0 1 2 3 4 5 6div>
div>
<div class="box">
<div class="number onesPlaceMinutes moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box divider">
<div class="number">:div>
div>
<div class="box">
<div class="number tensPlaceSeconds moveupsix">0 1 2 3 4 5 6div>
div>
<div class="box">
<div class="number onesPlaceSeconds moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box divider">
<div class="number">:div>
div>
<div class="box">
<div class="number onesPlaceMiliSeconds moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box">
<div class="number tensPlaceMiliSeconds moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box">
<div class="number hundredsPlaceMiliSeconds moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
div>
div>
body>
html>
CSS-файл:
* {
margin: 0;
padding: 0;
}
body {
background: url(images.jpg);
}
.MainContainer {
padding: 200px;
text-align: center;
}
.stopwatch {
padding: 10px;
background: linear-gradient(top, #222, #444);
overflow: hidden;
display: inline-block;
border: 7px solid #eeeeee;
border-radius: 20px;
box;
}
.box {
width: 40px;
height: 40px;
font-size: 50px;
overflow: hidden;
position: relative;
float: left;
}
.number {
width: 40px;
line-height: 40px;
font-family: digital, arial, verdana;
text-align: center;
color: #fff;
position: absolute;
top: 0;
left: 0;
-webkit-animation: moveup 1s steps(10, end) infinite; /* Chrome, Safari, Opera */
animation: moveup 1s steps(10, end) infinite;
}
.moveuptens {
-webkit-animation: moveuptens 1s steps(10, end) infinite; /* Chrome, Safari, Opera */
animation: moveuptens 1s steps(10, end) infinite;
}
.moveupsix {
-webkit-animation: moveupsix 1s steps(6, end) infinite; /* Chrome, Safari, Opera */
animation: moveupsix 1s steps(6, end) infinite;
}
.onesPlaceSeconds {
animation-duration: 10s;
-webkit-animation-duration: 10s;
}
.tensPlaceSeconds {
animation-duration: 60s;
-webkit-animation-duration: 60s;
}
.onesPlaceMiliSeconds {
animation-duration: 1s;
-webkit-animation-duration: 1s;
}
/*1/10th of .second*/
.tensPlaceMiliSeconds {
animation-duration: 0.1s;
-webkit-animation-duration: 0.1s;
}
.hundredsPlaceMiliSeconds {
animation-duration: 0.01s;
-webkit-animation-duration: 0.01s;
}
.onesPlaceMinutes {
animation-duration: 600s;
-webkit-animation-duration: 600s;
}
/*60 times .second*/
.tensPlaceMinutes {
animation-duration: 3600s;
-webkit-animation-duration: 3600s;
}
/*60 times .minute*/
.onesPlaceHours {
animation-duration: 36000s;
-webkit-animation-duration: 36000s;
}
/*60 times .minute*/
.tensPlaceHours {
animation-duration: 360000s;
-webkit-animation-duration: 360000s;
}
/*10 times .hour*/
@-webkit-keyframes moveup {
0% {
top: 0px;
}
100% {
top: -400px;
}
}
@keyframes moveup {
0% {
top: 0px;
}
100% {
top: -400px;
}
}
@-webkit-keyframes moveuptens {
0% {
top: 0px;
}
100% {
top: -400px;
}
}
@keyframes moveuptens {
0% {
top: 0px;
}
100% {
top: -400px;
}
}
@-webkit-keyframes moveupsix {
0% {
top: 0px;
}
100% {
top: -240px;
}
}
@keyframes moveupsix {
0% {
top: 0px;
}
100% {
top: -240px;
}
}
@font-face {
font-family: 'digital';
src: url('DS-DIGI.TTF');
}
После применения некоторых стилей результат будет следующим:
Теперь добавьте 3 кнопки типа radio для запуска, остановки и сброса секундомера. Эти кнопки будут управлять секундомером.
HTML-код:
<!doctype html>
<html>
<head>
<title>Stopwatchtitle>
<link rel="stylesheet" href="Style.css" />
head>
<body>
<div class="MainContainer">
<input id="start" name="controls" type="radio" />
<input id="stop" name="controls" type="radio" />
<input id="reset" name="controls" type="radio" />
<div class="stopwatch">
<div class="box">
<div class="number tensPlaceHours moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box">
<div class="number onesPlaceHours moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box divider">
<div class="number">:div>
div>
<div class="box">
<div class="number tensPlaceMinutes moveupsix">0 1 2 3 4 5 6div>
div>
<div class="box">
<div class="number onesPlaceMinutes moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box divider">
<div class="number">:div>
div>
<div class="box">
<div class="number tensPlaceSeconds moveupsix">0 1 2 3 4 5 6div>
div>
<div class="box">
<div class="number onesPlaceSeconds moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box divider">
<div class="number">:div>
div>
<div class="box">
<div class="number onesPlaceMiliSeconds moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box">
<div class="number tensPlaceMiliSeconds moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
<div class="box">
<div class="number hundredsPlaceMiliSeconds moveuptens">0 1 2 3 4 5 6 7 8 9div>
div>
div>
<div id="stopwatch_controls">
<label for="start">Startlabel>
<label for="stop">Stoplabel>
<label for="reset">Resetlabel>
div>
div>
body>
html>
Теперь измените код CSS для стилизации элементов управления секундомером:
* {
margin: 0;
padding: 0;
}
body {
background: url(images.jpg);
}
.MainContainer {
padding: 200px;
text-align: center;
}
.stopwatch {
padding: 10px;
background: linear-gradient(top, #222, #444);
overflow: hidden;
display: inline-block;
border: 7px solid #eeeeee;
border-radius: 20px;
box;
}
.box {
width: 40px;
height: 40px;
font-size: 50px;
overflow: hidden;
position: relative;
float: left;
}
.number {
width: 40px;
line-height: 40px;
font-family: digital, arial, verdana;
text-align: center;
color: #fff;
position: absolute;
top: 0;
left: 0;
-webkit-animation: moveup 1s steps(10, end) infinite; /* Chrome, Safari, Opera */
animation: moveup 1s steps(10, end) infinite;
}
#stopwatch_controls label {
cursor: pointer;
padding: 5px 10px;
background: #eeeeee;
font-family: arial, verdana, tahoma;
font-size: 20px;
border-radius: 0 0 3px 3px;
}
input[name="controls"] {
display: none;
}
#stop:checked ~ .stopwatch .number {
animation-play-state: paused;
-webkit-animation-play-state: paused;
}
#start:checked ~ .stopwatch .number {
animation-play-state: running;
-webkit-animation-play-state: running;
}
#reset:checked ~ .stopwatch .number {
animation: none;
-webkit-animation: none;
}
.moveuptens {
-webkit-animation: moveuptens 1s steps(10, end) infinite; /* Chrome, Safari, Opera */
animation: moveuptens 1s steps(10, end) infinite;
/*By default animation will be paused*/
animation-play-state: paused;
-webkit-animation-play-state: paused;
}
.moveupsix {
-webkit-animation: moveupsix 1s steps(6, end) infinite; /* Chrome, Safari, Opera */
animation: moveupsix 1s steps(6, end) infinite;
/*By default animation will be paused*/
animation-play-state: paused;
-webkit-animation-play-state: paused;
}
.onesPlaceSeconds {
animation-duration: 10s;
-webkit-animation-duration: 10s;
}
.tensPlaceSeconds {
animation-duration: 60s;
-webkit-animation-duration: 60s;
}
.onesPlaceMiliSeconds {
animation-duration: 1s;
-webkit-animation-duration: 1s;
}
/*1/10th of .second*/
.tensPlaceMiliSeconds {
animation-duration: 0.1s;
-webkit-animation-duration: 0.1s;
}
.hundredsPlaceMiliSeconds {
animation-duration: 0.01s;
-webkit-animation-duration: 0.01s;
}
.onesPlaceMinutes {
animation-duration: 600s;
-webkit-animation-duration: 600s;
}
/*60 times .second*/
.tensPlaceMinutes {
animation-duration: 3600s;
-webkit-animation-duration: 3600s;
}
/*60 times .minute*/
.onesPlaceHours {
animation-duration: 36000s;
-webkit-animation-duration: 36000s;
}
/*60 times .minute*/
.tensPlaceHours {
animation-duration: 360000s;
-webkit-animation-duration: 360000s;
}
/*10 times .hour*/
@-webkit-keyframes moveup {
0% {
top: 0px;
}
100% {
top: -400px;
}
}
@keyframes moveup {
0% {
top: 0px;
}
100% {
top: -400px;
}
}
@-webkit-keyframes moveuptens {
0% {
top: 0px;
}
100% {
top: -400px;
}
}
@keyframes moveuptens {
0% {
top: 0px;
}
100% {
top: -400px;
}
}
@-webkit-keyframes moveupsix {
0% {
top: 0px;
}
100% {
top: -240px;
}
}
@keyframes moveupsix {
0% {
top: 0px;
}
100% {
top: -240px;
}
}
@font-face {
font-family: 'digital';
src: url('DS-DIGI.TTF');
}
Финальный результат
Источник: http://www.c-sharpcorner.com/UploadFile/75a48f/stopwatch-using-css3/
ТОП 10 AI сервисов для разработчиков. Эффективное использование нейросетей
Автор: Влад Сверчков
Важность нейросетей в современной разработке
Краткий обзор нейросетевых технологий
ТОП 10 сервисов с использованием нейросетей для разработчиков
Советы и рекомендации по выбору AI
Выводы
Высокая динамика IT-индустрии заставляет разработчиков постоянно искать новые пути улучшения собственной производительности. Недавно человечество скользнуло по еще одной спирали прогресса, и теперь девелоперов окружает плеяда искусственных ассистентов, причем часто в их основе именно нейросети.
Возможности ИИ позволяют значительно ускорить рутинные процессы, начиная от созвонов с командой и заканчивая написанием кода и его рефакторингом. И хотя уровень искусственного интеллекта ещё далёк от идеала, это уже большой шаг вперед.
Какие искусственные инструменты позволяют справиться с девелоперскими задачами наиболее успешно? Чтобы помочь вам с ответом, в этой статье мы собрали 10 интересных ИИ сервисов для разработчиков с учетом функционала, стоимости, наличия free-версии и т. д. Читайте дальше, чтобы узнать больше!
Важность нейросетей в современной разработке
Сегодня нейросети позволяют значительно упростить жизнь обычному разработчику. Вот несколько примеров:
Декомпозиция задач. ИИ способен разбивать комплексные задачи на мелкие, объяснять их, давать подсказки по их выполнению, предлагать оптимальное решение.
Генерирование кода. Умной модели можно дать на вход определенную программистскую задачу, а на выходе получить готовый кусок кода. Также AI способен анализировать чужой код, объяснять его, расставлять комментарии, исследовать технологии программирования и т. д.
Code-ревью & рефакторинг. Вы можете сэкономить время, доверив AI внесение необходимых изменений: сканирование и оптимизация кода, удаление избыточных фрагментов, улучшение лаконичности, алгоритмов и т. д.
Написание тестов. Разработчики не очень любят заниматься unit-тестированием, хотя это важная составляющая обеспечения качества ПО. К счастью, искусственный интеллект способен генерировать необходимые тестовые кейсы, охватывающие различные сценарии, а также автоматизировать выполнение этих тестов.
Проактивная обработка ошибок. ИИ прогнозирует потенциальные ошибки и рекомендует исправления до того, как они случатся, что сокращает время отладки кода.
Мощный анализ данных. Искусственные помощники способны относительно быстро анализировать большие массивы данных, чтобы выяснить причинно-следственные связи, выявить закономерности / потенциальные проблемы, ошибки и тому подобное. Достаточно актуально для IT-специалистов, связанных с Data Science, ML, big data и т. д.
Создание документации. ИИ может анализировать код и автоматически создавать исчерпывающую документацию, которая объясняет функциональные возможности, инструкции по использованию и ссылки на API, а также многое другое.
Прогнозирование. Прогнозирование и моделирование поведения пользователей и производительности ПО, возложенное на плечи AI, позволяет разработчикам планировать масштабируемость, выявлять потенциальные узкие места на ранних стадиях разработки и проактивно решать их, чтобы обеспечить бесперебойную работу в будущем.
Список можно расширить многими другими пунктами – в зависимости от специфики направления разработки.
Используя нейросети, девелоперы могут значительно повысить свою эффективность и производительность. Однако важно помнить, что ИИ сегодня – это помощник, и человеческий опыт остается решающим для принятия важных решений, творческого развязывания проблем и обеспечения общего качества и видения ПО.
Короткий обзор нейросетевых технологий: от глубокого обучения до искусственного интеллекта
Искусственный интеллект – это широкое понятие, обозначающее системы, способные имитировать когнитивные функции человека: запоминание, креативность, коммуникация с использованием языка, решение задач, принятие решений и т. д.
Одной из ключевых составляющих ИИ являются нейронные сети, которые имитируют работу человеческого мозга и позволяют компьютерам обучаться и принимать решения на основе больших объемов данных. Но между AI и нейросетями стоят ещё 2 важные технологии – машинное обучение (МО, Machine Learning) и глубокое обучение (ГО, deep learning).
Ниже мы быстро пробежимся по ИИ, МО и ГО, а больше о нейронках вы можете почитать в нашей статье "Заменит ли искусственный интеллект разработчиков?".
ИИ
Искусственный интеллект включает в себя технологию ML, но только ею не ограничивается. Дополнительно он способен использовать:
обработчик языков – чтобы понимать нашу человеческую речь и формировать понятные нам ответы;
компьютерное зрение – чтобы анализировать, классифицировать, сегментировать, распознавать лица и предметы;
робототехнику – для выполнения задач по навигации и взаимодействию с окружающей средой и многое другое.
Известные AI-платформы: виртуальные ассистенты Alexa, Siri, чат-боты ChatGPT, Gemini, Midjourney и др.
Что такое машинное обучение?
Это подмножество ИИ, которое фокусируется на разработке алгоритмов и моделей, позволяющих компьютерным системам "обучаться" на основе данных и опыта, без явного программирования. В отличие от традиционных программ, где разработчик задает явные инструкции, в МО компьютерная система сама "извлекает" закономерности и образцы из данных, чтобы сделать прогнозы или принять решение.
Машинное обучение использует различные алгоритмы классификации, регрессии, кластеризации, обучение с подкреплением. Эти алгоритмы позволяют системе обрабатывать и анализировать данные, находить скрытые закономерности и строить модели, которые могут делать предсказания на основе новых данных.
Примеры МО: спам-фильтры в электронной почте, рекомендации фильмов на Netflix или товаров на посещённом вами сайте.
Глубокое обучение vs машинное обучение
Глубокое обучение – это подмножество МО, которое использует искусственные нейросети для анализа данных и обучения. В глубоком обучении нейронные сети имитируют работу человеческого мозга, состоящего из многочисленных слоев нейронов. Эти нейронные сети могут распознавать сложные образы, обрабатывать естественную речь и принимать решения на основе больших объемов данных.
Отличие машинного обучения от deep learning заключается в способности второго автоматически извлекать признаки и представления из данных. Вместо ручного определения признаков, как в традиционных методах МО, глубокое обучение использует многослойные нейросети, которые автоматически извлекают иерархические признаки из данных.
Примеры архитектур ГН включают сверточные нейронные сети (CNN) для обработки изображений, рекуррентные нейронные сети (RNN) для последовательных данных и трансформаторы для обработки естественного языка.
Таким образом, deep learning сосредоточено на использовании многослойных нейронных сетей для изучения представлений непосредственно из данных.
Примеры ГО: распознавание лиц для разблокировки смартфонов, системы для перевода текста с одного языка на другой.
Так какой можно сделать обобщающий вывод из этой главы? Искусственный интеллект отражает компьютерные системы, способные имитировать и моделировать человеческое мышление и поведение. Машинное обучение позволяет компьютерным системам обучаться на основе данных и опыта, исключая явное программирование. А глубокое обучение использует искусственные нейронные сети для анализа данных и обучения.
ТОП 10 сервисов с использованием нейросетей для разработчиков
Название AI-платформы
Краткое описание
GitHub Copilot
Инструмент дополнения и прогнозирования кода
CodiumAI
Инструмент тестирования и повышения качества кодирования
Fathom
Умный помощник для видеосвязи
Scribe
Инструмент автоматизированного документирования
Snyk
Инструмент поиска и исправления уязвимостей
Codeium
Инструмент автодополнения кода
Mintlify
Инструмент генерирования документаций
Tabnine
Инструмент автозавершения кода
ChatGPT
Умный мультизадачный ассистент
Stepsize AI
Инструмент отслеживания командных процессов
GitHub Copilot
GitHub Copilot – это инновационный инструмент, который входит в ТОП сервисы на основе ИИ во многих рейтингах. Разработан совместными усилиями GitHub, OpenAI и Microsoft, чтобы в корне изменить опыт кодинга для разработчиков. Используя мощную языковую модель OpenAI Codex, GitHub Copilot дает предложения и дополнения кода в режиме реального времени непосредственно в вашей среде разработки.
Интеллектуальные инструменты разработки от Copilot позволяют осуществлять анализ данных, создавать фрагменты кода, генерировать целые функции, комментарии, отлаживать и выявлять проблемы безопасности.
Стоимость:
Individual: 10 USD/месяц или 100 USD/год
Business: 19 USD/месяц
Enterprise: 39 USD/месяц
Бесплатная версия для проверенных студентов, преподавателей и тех, кто ведет популярные open-source репозитории на GitHub.
Оценки:
Capterra: 4.7 из 5 звёзд (19 отзывов)
G2: 4.5 из 5 звёзд (132 отзыва)
Capterra и G2 – популярные американские онлайн-платформы, специализирующиеся на обзорах и рейтингах различного ПО и услуг.
CodiumAI
Codium AI - это инструмент, который отодвигает программирование на второй план и больше сосредотачивается на тестировании и обеспечении качества кода. Его возможности включают:
несколько фреймворков для тестирования: Jest, Mocha, Jasmine, Karma и др.;
генерирование тестового плана, test cases;
детальный анализ вашего кода;
оптимизация кода с аргументацией.
Стоимость:
Developer: бесплатно.
Teams: 19 USD/месяц.
Enterprise: индивидуально.
Оценки:
G2: 4.9 из 5 звёзд (29 отзывов).
Capterra: отсутствуют оценки.
Product Hunt: 4.7 из 5 звёзд (7 отзывов).
Product Hunt – платформа и онлайн-сообщество для энтузиастов, где они делятся существующими программными и аппаратными решениями, узнают про инновации в IT и дают им свою оценку.
Fathom
Fathom является отличным решением для тех, кто хочет, чтобы автоматизация увеличила производительность их Zoom / Google Meet / Microsoft Teams встреч в разы. Данный AI записывает вашу видеосвязь, транскрибирует беседу в реальном времени (с таймлайн привязкой к видео), а как вишенка на торте – ИИ-чат для контекстных вопросов. Настоящий digital transformation долговременных митингов в эссенцию ключевых тезисов! И это лишь часть его возможностей.
Украинский язык, к сожалению, не поддерживается, зато разработчики и другие участники онлайн встречи хорошо подтянут английский!
Стоимость: free forever. Почему? Создатели используют Fathom для привлечения внимания к другим своим продуктам, которые расширяют возможности этого AI ассистента. Их подключение как раз и требует оплаты (подключение опционально).
Оценки:
Product Hunt: 4.8 из 5 звёзд (199 отзывов).
G2: 5 из 5 звёзд (2370 отзывов).
Capterra: 5 из 5 звёзд (289 отзывов).
Scribe
Scribe AI – это инструмент для разработчиков на базе ИИ для создания, управления и упрощения процессов, связанных с документированием. Среди его возможностей: автоматизация разработки стандартных операционных процедур (SOP), мануалов, документации, захват ваших действий в реальном времени (вроде захвата экрана) с последующим созданием пошаговых инструкций и т. д. Искусственный интеллект Scribe значительно облегчает помощь в онбординге новых работников, поиск ответов на вопросы, поддержку клиентов и тому подобное.
Стоимость:
Basic: бесплатно.
Pro Personal: 23 USD/мес. (годовая подписка), 29 USD/мес. (месячная).
Pro Team: 12 USD/мес. (годовая подписка), 15 USD/мес. (месячная) – для команд из 5+ человек.
Enterprise: индивидуально.
Оценки:
Product Hunt: 4.9 из 5 звёзд (155 отзывов).
G2: 4.8 из 5 звёзд (67 отзывов).
Capterra: 4.9 из 5 звёзд (10 отзывов).
Snyk
Инструмент, который позволяет обнаруживать уязвимости вашего кода и исправлять их. Snyk может также сканировать зависимости и пакеты, Docker-файлы, инфраструктуру кода (IDE), GitHub-репозитории и т. д. Подойдет для разработчиков, которые серьезно относятся к современным digital transformation трендам, кибербезопасности и защищенности программных продуктов. Согласно данным вебсайта Snyk.io, их решение успешно используют ТОП сервисы AWS, Google, Atlassian, Salesforce и др.
Стоимость:
Free: бесплатно.
Team: стартует от 25 USD за продукт/месяц, минимум 5 разработчиков / 1,375 USD в год.
Enterprise: индивидуально.
Оценки:
G2: 4.5 из 5 звёзд (118 отзывов).
Capterra: 4.7 из 5 звёзд (17 отзывов).
Codeium
Создатели Codeium позиционируют свой продукт как бесплатный и мощный AI инструментарий, который разработчики обязательно оценят. Он предоставляет расширенные возможности: оптимизация кода и его дополнение, поиск информации, чат для вопросов. Что интересно, сами авторы сравнивают своё решение с GitHub Copilot и уверяют в ряде преимуществ кодиума:
оценка 5 из 5 звёзд в маркетплейсах VS Code и JetBrains;
бесплатная версия для единоличной разработки;
более дешевая подписка для командной разработки;
программирование с Codeium доступно в бóльшем количестве сред (40+) и на бóльшем кол-ве языков (70+);
лучшие возможности для стадии развертывания ПО (deployment);
соответствие нормам безопасности SOC 2 Type 2.
Стоимость:
Individuals: бесплатно.
Team: 12 USD/мес. в годовой подписке и 15 USD/мес. – в месячной.
Enterprise: индивидуально.
Оценки:
G2: 4.7 из 5 звёзд (менее 5 отзывов).
Product Hunt: 4.8 из 5 звёзд (28 отзывов).
Mintlify
На очереди инструмент, облегчающий документирование процессов на базе программирования – Mintlify. Он выполняет анализ данных и позволяет генерировать гайды, руководства API, SDK-документации на основе вашего кода, а также использовать AI-чат на базе GPT-4 для анализа и ответов на вопросы по вашим текстам.
Mintlify быстро сканирует код и генерирует пояснительные инструкции, что делает его идеальным решением для разработчиков, продуктовых менеджеров и support-команд, которые стремятся использовать нейросети для упрощенного написания документации и повышения понятности кода. В дополнение обеспечивает легкую интеграцию с GitHub, Slack и Dropbox.
Стоимость:
Free: бесплатно.
Startup: 120 USD/месяц/проект – годовая подписка, 150 USD – месячная.
Growth: 400 USD/месяц/проект – годовая подписка, 450 USD – месячная.
Enterprise: индивидуально.
Оценки:
G2: 5 из 5 звёзд (менее 5 отзывов).
Product Hunt: 5 из 5 звёзд (6 отзывов).
Capterra: отсутствуют оценки.
Tabnine
Tabnine AI Assistant - это ИИ-инструмент, который интегрируется в среду разработки и служит как Copilot: дополняет код на лету, создает собственный на основе ваших комментариев, а также предоставляет ИИ-чат, где вы можете ставить дополнительные задачи на вашем родном языке.
Под капотом – машинное обучение для оказания помощи при написании кода, предлагающее персонализированные и контекстно-зависимые подсказки на основе языка программирования и предпочтений пользователя. Tabnine доступен для интеграции в большое количество сред: Visual Studio, VS Code, IntelliJ IDEA, WebStorm, PhpStorm, Sublime, Eclipse, PyCharm, Android Studio и др.
Алгоритмы машинного обучения Tabnine дают массу преимуществ: относительная точность, подсказки по генерации кода и поддержка многих языков.
Стоимость:
Basic: бесплатно.
Pro: бесплатно первые 90 дней, затем – 12 USD/месяц.
Enterprise: 39 USD/месяц при условии годовой подписки.
Оценки:
Capterra: 4.5 из 5 звёзд (менее 5 отзывов).
G2: 4.2 из 5 звёзд (37 отзывов).
ChatGPT
ChatGPT – самый известный интеллектуальный ассистент, разработанный компанией OpenAI, который использует искусственный интеллект для целого спектра задач. "Чат" является одним из лучших бесплатных помощников в кодинге: кроме генерирования кода он достаточно хорошо объясняет его, предоставляет дополнительный контекст, хотя и может иногда оперировать некорректной информацией без цитирования источников. Достаточно хороший free вариант для изучения программирования, языка запросов данных, big data и тому подобного.
Также ChatGPT в виде мобильного приложения доступен на iOS и Android.
Стоимость:
Free – бесплатно (используется большая языковая модель GPT 3.5).
Plus – 20 USD/мес. (более совершенная GPT 4).
Team – 25 USD/мес. при оплате за год, 30 USD/мес. при оплате ежемесячно.
Enterprise – индивидуальный счет.
Оценки:
Capterra: 4.6 из 5 звёзд (42 отзыва).
G2: 4.7 из 5 звёзд (479 отзывов).
Product Hunt: 4.7 из 5 звёзд (538 отзывов).
Stepsize AI
Если в фокусе предыдущих продуктов автоматизация кода, то искусственный интеллект Stepsize AI нацелен на задачи масштаба команды. Это система, которая обеспечивает инженерные и продуктовые команды умным отслеживанием обновлений.
Она трэкает активности и обновления в вашем отделе разработки и вовремя предоставляет важнейшую информацию каждому члену группы. Содержит метрику с графиками, диаграммами и автоматическим комментированием, позволяет увидеть прогресс команды, легко интегрируется с GitHub, Slack, Jira и т. д. Данный инструмент создан для команд, которые хотят иметь отчетность обо всех процессах с минимумом нервов и ненужных митингов.
Также Stepsize имеет еще один продукт – Stepsize Technical Debt, который способен отслеживать и исправлять технический долг. Это позволяет сэкономить деньги и время, которые разработчики потратили бы на bug fixes, простои, обработку клиентских запросов в отдел поддержки и т. п.
Стоимость Stepsize AI:
Team – 29 USD/мес. за Jira-доску или команду Linear.
Tailored Setup (установка под ваши личные запросы) – 29 USD/мес. за Jira-доску или команду Linear.
2 бесплатные недели для каждого плана.
Стоимость Stepsize Technical Debt:
Free – бесплатно.
Team – 19 USD/мес (годовая подписка).
Business – 49 USD/мес (годовая подписка).
Enterprise – индивидуально.
Оценки:
Product Hunt: 5 из 5 звёзд (18 отзывов).
Как выбрать подходящий сервис: советы и рекомендации
Выбирая инструменты разработки на базе ИИ вы должны ориентироваться на собственные запросы. Например, вы должны решить:
какова цель использования AI-платформы;
какие задачи AI должен покрывать;
каков функционал бесплатной версии (если таковая имеется) и насколько он покрывает ваши потребности;
насколько функционал платной версии вас удовлетворяет и сколько вы готовы заплатить;
интегрированность с важными для вас инструментами;
сколько внимания уделяется защите вашего кода, личных данных, какие политики безопасности используются и прочее;
насколько AI масштабируемый и гибкий: сможет ли он эффективно выполнять задачи при разрастании вашего продукта, интегрировать облачные вычисления и т. д.;
поддержка поставщика AI-сервиса и исчерпывающая документация для работы с AI.
Выбрать ТОП сервисы вам также помогут следующие источники информации:
YouTube-обзоры. Это самый быстрый способ знакомства с главным функционалом ИИ. Он поверхностный, но достаточный, чтобы составить первое впечатление, узнать основные плюсы-минусы и понять, есть ли смысл погружаться в понравившийся инструмент в дальнейшем.
LinkedIn и другие профессиональные социальные сети. Подпишитесь на авторитетных деятелей / специализированные группы по направлению вашей деятельности в линкедине и/или другой профессиональной сети и следите за их постами. Такие люди/сообщества всегда обозревают инновации в IT и могут делать тематические исследования по AI, предоставить полезные инсайты о лучших сервисах, рассказать о собственных историях успеха и т. д.
Советы и опыт знакомых разработчиков. Обратитесь за рекомендациями и мнениями к коллегам или сообществу разработчиков, которые имеют опыт работы с различными сервисами ИИ. Таким образом вы получите полезную информацию из первых уст, которая прошла горнило практики, и сохраните своё время, нервы и другие ресурсы.
Форумы с отзывами. Проверьте рейтинги AI и отзывы пользователей, которые уже попробовали ТОП сервисы и исследовали алгоритмы машинного обучения: какие преимущества/недостатки они отмечают, чего им не хватает, какие рекомендации по улучшению пользовательского опыта они предлагают и т. д. К примеру, в данной статье мы использовали рейтинги Product Hunt, G2, Capterra.
Пробный период / демо-версия. Возможность бесплатно поиграть с ИИ-сервисом может быть ключевой в принятии решения. Если после предыдущих 4 пунктов вы до сих пор сомневаетесь в инструменте - попробуйте trial-версию и расставьте все точки над "і".
Заключение: будущее нейросетей в разработке
Наш мир претерпевает разительные изменения под влиянием ИИ – и это факт. Указанные в статье сервисы выводят производительность разработчиков на новый уровень, но и эти инструменты уже имеют десятки – если не сотни – эффективных аналогов, – выбирайте на ваш вкус. Нейронки, глубокое и машинное обучение будут только усиливать свою роль, поэтому вопрос о будущем профессии "разработчик" начинает беспокоить все большее количество девелоперов.
Так что же делать?
Изучайте AI-платформы, используйте их магию для автоматизации рутины и буста вашей эффективности. Развивайте ту экспертизу, которая искусственному интеллекту пока недосягаема. Обычно это комплексные, креативные, системные знания и навыки, находящиеся на сплетении нескольких сфер – уникальный опыт, который роботам не по зубам.
Следите за новостями из мира ИИ, за нашими обновлениями в блоге и развивайте навыки быстрой адаптации. Мир меняется с невероятной скоростью и лучшие места достанутся тем разработчикам, которые умеют ловить волны и быстро приспосабливаться к изменениям в IT.
Акция «Выиграй подписку ITVDN на 3 месяца!»
Автор: Редакция ITVDN
Дорогие друзья, мы знаем, что многие из вас хотят учиться на ITVDN, но не у всех есть такая возможность. Для тех, кто знает и любит наш образовательный ресурс, мы проводим розыгрыш пяти подарочных сертификатов на три месяца.
В акции будет 5 победителей!
Чтобы стать участником акции, нужно ответить на несколько вопросов, связанных с развитием ITVDN – какая специальность вас интересует, какие из наших сервисов вам нравятся, какие курсы нужно добавить, кого вы считаете лучшим автором курсов.
Все, кто заполнит анкету, станут участниками розыгрыша 5 подарочных сертификатов.
В подарочном пакете подписки будут доступны:
более 170 видео курсов ITVDN (и новые, которые появятся в течение 3 месяцев)
учебные материалы всех курсов (презентации, практические задания, опорный конспект, рекомендованная литература, домашние задания)
онлайн-тестирование и сертификация по изучаемым курсам
полный доступ к интерактивному тренажеру навыков
Сроки акции: с 4 по 10 июля 2019 года (до 18:00). Победители будут определены с помощью сервиса random.org. в прямом эфире на нашем YouTube канале 11 июля 2019 года в 15:00. После розыгрыша результаты будут опубликованы на нашем сайте.
Заполнить анкету
Ты силен в SQL? Докажи это!
Автор: Редакция ITVDN
Выполни все задания тренажера ITVDN по SQL и выиграй подписку с доступом к 140 видео курсам!
Условия акции:
С 7 по 13 июня успешно (на 100%) и с наилучшими результатами пройди все задания тренажера по SQL.
Зарегистрируй свой результат до 18:00 13 июня.
Принять участие в акции может любой желающий, кто верит в свои силы.
Тебе необходимо будет выполнить 40 заданий по 5 темам:
Выборка записей из базы
Группировка данных. Объединения
Вставка, обновление и удаление записей.
Подзапросы.
Элементы языка DDL.
Для лучшего результата рекомендуем пройти курс SQL Essential.
Определение победителей
Победителем станет тот, кто пройдет тренажер с наибольшим количеством баллов при минимальном количестве попыток. Баллы снимаются при использовании дополнительных попыток и подсказок.
При равном количестве баллов и попыток для определения победителей будет также учитываться время, затраченное на прохождение тренажера.
5 победителей получат в подарок подписку ITVDN на 1 месяц. Также на нашем сайте будет опубликован ТОП-20 участников с наилучшими результатами.
Регистрационная форма будет открыта до 18:00 13 июня. Итоги акции будут объявлены на сайте ITVDN 14 июня 2018 года.
Пусть победят сильнейшие!
Technical skills марафон
Автор: Редакция ITVDN
Подтверди свои навыки и выиграй подписку ITVDN на 3 месяца!
C 10 до 20 ноября 2017 года на ITVDN проходит большой марафон среди начинающих программистов.
Задача участников марафона - успешно (на 100%) и с максимальными баллами выполнить все задания практикума по одной или нескольким технологиям - JavaScript, SQL, C# или HTML. Победителей и призов будет много!
Условия акции:
В период с 10 по 20 ноября 2017 года проверь свои знания, выполнив все задания на Тренажере ITVDN по одной или нескольким технологиям. Чем больше технологий ты знаешь, тем больше призов можешь выиграть.
Соревнование проводится в 5 номинациях:
JavaScript
SQL
HTML, CSS
C# Starter
С# Essential
Призы победителям
В каждой номинации будет разыграна 1 подписка ITVDN на 3 месяца и 5 подписок на месяц.
В пакете подписки полный доступ ко всем видео курсам, представленным в Каталоге ITVDN.
В розыгрыше примут участие те, кто выполнит все задания соответствующего практикума на 100%.
Супер-приз - фирменная футболка и брендированная дженга ITVDN – достанется тому, кто за время акции пройдет все практикумы с максимальными баллами.
Определение и награждение победителей
Победители будут определены с помощью сервиса random.org. Трансляцию розыгрыша смотрите в прямом эфире на нашем YouTube канале 21 ноября в 17:00.
Итоги акции будут опубликованы на нашем сайте 21 ноября 2017 года после 18:00.
Акция «100 тысяч на ITVDN»
Автор: Редакция ITVDN
Дорогие друзья!
У нас отличная новость! Буквально на днях наш YouTube канал достиг внушительной цифры в 100 тысяч подписчиков! Для нас это знаменательное событие и большая радость. Мы благодарны всем, кто выбирает ITVDN.
В связи с таким ростом нашего сообщества, мы подготовили для вас специальную акцию с ценными подарками! У каждого из вас есть возможность выиграть одну из 5 подписок ITVDN на 3 месяца!
Условия акции просты:
В период с 20 по 27 сентября 2017 года поделитесь в социальных сетях любым видео с нашего канала.
Заполните анкету участника акции (обязательно укажите ссылку на ваш пост).
Сохраните пост с видео на своей странице до момента объявления победителей.
*Ваша страница должна быть открыта в настройках приватности для всех.
Среди всех, кто выполнит условия акции, 28 сентября будет проведен розыгрыш с помощью сервиса random.org и 5 счастливчиков получат в подарок подписку ITVDN сроком на 3 месяца.
В подписке ITVDN для вас в течение 90 дней будут доступны:
· 117 видеокурсов по программированию, которые есть сейчас, а также новые, которые будут появляться;
· возможность скачивать все учебные материалы любого курса;
· онлайн-тестирование и сертификация по пройденным курсам;
· индивидуальные консультации с тренером (30 минут).
Также с помощью Тренажера вы сможете формировать практические навыки написания кода, задавать важные вопросы на форуме ITVDN и читать интересные публикации в IT-блоге.
Используйте свой шанс, и удача улыбнется именно вам! Оставайтесь с ITVDN!
Финал Шахматной IT Арены для программистов
Автор: Евгений Волосатов
<p>7 июля состоится финал <a href="https://itvdn.com/ru/news/article/chess-arena" target="_blank">Шахматной IT Арены для программистов</a>. Мы подведем итоги четвертого тура, а также объявим победителей соревнований, набравших максимальное количество баллов за решение всех задач I, II, III и IV туров.</p>
<p>Напомним, что участники четвертого тура (3-5 человек), которые наберут наибольшее количество баллов за решение задач четвертого тура, получат в подарок подписку на три месяца. Все остальные участники, выполнившие все задания тура, получат в подарок 1 видео курс на выбор.</p>
<p>Финалисты –5 победителей по итогам 4 туров получат возможность выбрать себе в подарок книгу по программированию на свой вкус.</p>
<p>Если вы программируете на одном из пяти языков - Python, C#, Java, C++ или Pascal - и любите шахматы, решайте задачи и выигрывайте призы! Включиться в соревнование можно даже сейчас. Решения принимаются до 12:00 7 июля.</p>
<p>Решив все задачи четырех туров, Вы можете стать победителем в финале!</p>
<p>До встречи 7 июля!</p>