Как стать автором
Обновить
0
0
Владислав @RuVl

Бэкэнд разработчик, боты тг, автоматизация

Отправить сообщение

Как приручить автотестового монстра, или Dependency Injection в автотестах

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров7.6K
Вы пишете автотесты? Ваш проект с автотестами огромен и монструозен, и добавление каждого нового сервиса в него приносит нестерпимое желание все удалить и написать заново? У вас есть базовый класс на 3000+ строк с методами на все случаи жизни? Или, возможно, вам приходилось исправлять множество тестов, чтобы добавить одну и ту же строчку в каждом из них?



Если хотя бы на часть вопросов вы ответили положительно, если в целом они знакомы вам не понаслышке или же вы просто давно хотите оптимизировать свой тестовый проект, но не знаете, с чего начать — эта статья для вас! Сегодня я хочу поговорить про паттерны и прочие сложные вещи, о которых тестировщики часто совсем не задумываются.
Читать дальше →
Всего голосов 14: ↑13 и ↓1+14
Комментарии7

Запускаем IDEA и CLion на Android

Уровень сложностиСредний
Время на прочтение18 мин
Количество просмотров9.9K

На современных Android телефонах и планшетах стоит отличное железо - многоядерные CPU с несколькими гигабайтами памяти. Этого всего вполне хватит для запуска даже таких тяжеловесных программ как IDEA и CLion. И сейчас я вам расскажу как это сделать.

Читать далее
Всего голосов 23: ↑23 и ↓0+23
Комментарии16

Задачи третьего этапа олимпиады «IT-Планеты» по PostgreSQL

Время на прочтение13 мин
Количество просмотров9.2K

В шахматы меня когда-то легко обыгрывал восьмибитный компьютер, а действующего чемпиона мира IBM-овский Deep Blue одолел уже в 1997 году. Но игра Го держалась значительно дольше: победить обладателя девятого дана Ли Седоля удалось только в 2016 году компании Гугл с машиной AlphaGo. В Го простые правила, которые, однако, приводят к очень сложным стратегическим построениям. Ровно то, что нужно: простое условие, не дающее намека на то, как справиться с задачей одним SQL-запросом. Тема Го и легла в основу задач финала олимпиады, про которую я уже начал рассказывать в прошлый раз.

Финал проходил в Сочинском государственном университете. Пользуясь случаем, хочу сказать спасибо гостеприимным сотрудникам университета и организаторам, оперативно устранявшим все трудности.

Поговорим про задачи
Всего голосов 12: ↑12 и ↓0+12
Комментарии10

cv3 — делаем OpenCV питоничным

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров12K

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

Читать далее
Всего голосов 34: ↑34 и ↓0+34
Комментарии24

Я — айтишник, я не хочу много знать

Время на прочтение6 мин
Количество просмотров110K

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

Читать далее
Всего голосов 125: ↑117 и ↓8+142
Комментарии943

От алгебры школьной — к университетской

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров13K

В статье даётся краткий обзор курса алгебры, призванный помочь тем, кто собирается изучать её самостоятельно, с репетитором или на курсах.
Университетский курс алгебры условно можно разбить на три части:
• элементарная алгебра (комплексные числа, многочлены, делимость, вычеты, ...);
• линейная алгебра (системы линейных уравнений, теория размерности, матрицы, линейные отображения, билинейные и квадратичные формы, тензоры, ...);
• высшая алгебра (алгебраические структуры: группы, кольца, поля, ...).

Для большинства наук и приложений, в машинном обучении, computer science прежде всего нужна, конечно, линейная алгебра. Для её успешного освоения нужно уверенно владеть элементарной алгеброй. На школьном уровне она (не)проста и скучна. Но при переходе в университет алгебра резко становится абстрактной и потому для многих сложной и непонятной: больно много аксиоматических определений — примеры еле поспевают. Как исторически произошёл этот скачок? Что нужно/полезно всем, изучающим математику, из высшей алгебры? Как лучше освоить азы линейной алгебры с прицелом на приложения, machine learning, не упустив что-то важное, но и не перетрудившись зря? Эти вопросы мы обсудим в статье.

Читать далее
Всего голосов 13: ↑11 и ↓2+10
Комментарии9

Основы BASH. Часть 1

Время на прочтение5 мин
Количество просмотров1.4M
Безусловно, все те кто общается с ОС Linux хоть раз да имели дело(во всяком случае слышали точно) с командной оболочкой BASH. Но BASH не только командная оболочка, это еще и превосходный скриптовый язык программирования.
Цель этой статьи — познакомить поближе юзеров с bash, рассказать про синтаксис, основные приемы и фишки языка, для того чтобы даже обычный пользователь смог быстренько написать простой скрипт для выполнения ежедневной(-недельной, -месячной) рутинной работы или, скажем, «на коленке» наваять скриптик для бэкапа директории.
Читать дальше →
Всего голосов 146: ↑135 и ↓11+124
Комментарии114

Как я перестал беспокоиться и полюбил абсолютную активацию

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров25K

Началось все на лекциях. Для иллюстрации работы нейронной сети нужны простые примеры. Достаточно хорошо известно, что одиночный нейрон формирует разделяющую гиперплоскость, и поэтому задачки типа "а найди мне, какой прямой разделяются два цвета на флаге Монако (который состоит из двух горизонтальных полос)" один нейрон решает на раз. Проблемы начинаются позже, например с флагом Японии (который состоит из красного круга на белом фоне) - один нейрон эту задачу хорошо не решает. Обычно, стандартным методом решения является 'в лоб': а давайте увеличим число нейронов, поставим решаюший слой, и задача решится. И тут возникает проблема номер 1: сколько нейронов в скрытом слое ставить. Традиционный ответ из всей обучающей литературы - подбирайте опытным путем. С одной стороны, их не должно быть сильно много, потому-что будет много неизвестных параметров, а с другой стороны - и сильно мало тоже не очень хорошо, ведь с одним нейроном мы уже обожглись. Итак, стандартный вопрос: сколько-же нейронов все-таки надо?

Оказывается, ответ на этот вопрос давно уже есть: в этой задаче - ровно пять. Есть такая теорема Колмогорова-Арнольда, где доказано, что если взять пять нейронов, то для них существуют какие-то гладкие функции активации, при которых двухслойная нейронка будет решать почти любую простую задачу для двумерных входных данных. И это было доказано аж в конце 50х годов 20 века и решало одну из важнейших математических задач 20го века - 13ю проблему Гильберта. Ключевая проблема здесь - "какие-то гладкие функции активации". Ведь, какие они конкретно - никто не сказал, и поэтому нужно их искать.

Читать далее
Всего голосов 27: ↑27 и ↓0+27
Комментарии17

Docker Compose

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров38K

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

Docker Compose это средство, предоставляющее способ организации управления несколькими контейнерами для совместной работы. Если вы используете модель микросервисов для разработки своего приложения, вы можете использовать Docker Compose для разделения кода приложения на несколько независимо работающих служб, которые взаимодействуют с помощью веб-запросов.

По сути, Docker Compose это тот же Docker, но позволяющий автоматизировать работу с более сложными приложениями. Кроме того, для сценариев с одним контейнером использование Docker Compose обеспечивает независимую от инструмента конфигурацию таким образом, чего не делает отдельный файл Dockerfile. Параметры конфигурации, такие как подключение тома для контейнера, сопоставления портов и переменные среды, могут быть объявлены в файлах docker-compose YML.

Читать далее
Всего голосов 14: ↑9 и ↓5+7
Комментарии6

7 и 1/2 подходов к проверке атрибутов классов в Python

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров13K

Проверка типов и проверка значений обрабатываются в Python гибким и неявным образом. В Python начиная с Python 3 появился модуль typing, который обеспечивает поддержку подсказок типов. Но для проверки значений не существует единого способа проверки.

Один из сценариев, в котором нам нужна проверка значений — это инициализация экземпляра класса. На первом этапе мы хотим убедиться в правильности вводимых атрибутов, например, адрес электронной почты должен иметь правильный формат xxx@xx.com, возраст не должен быть отрицательным, фамилия не должна превышать 20 символов и т.д.

В этой статье я хочу продемонстрировать 7(с половиной - прим.пер.) вариантов проверки атрибутов класса с помощью встроенных модулей Python или сторонних библиотек. Интересно, какой вариант вы предпочитаете? Если вы знаете другие варианты, пишите в комментариях. Поехали.

Читать далее
Всего голосов 15: ↑15 и ↓0+15
Комментарии8

Termux шаг за шагом (Часть 1)

Время на прочтение6 мин
Количество просмотров778K


При первом знакомстве Termux, а я далеко не линуксоид, вызвал в моей голове две мысли: «Круть несусветная!» и «Как им пользоваться?». Порывшись в инетах, я не нашел ни одной статьи в полной мере позволяющей начать пользоваться Termux'ом так чтобы это приносило больше удовольствия чем гемора. Будем это исправлять.
Читать дальше →
Всего голосов 32: ↑23 и ↓9+14
Комментарии27

Как выигрывать соревнования по программированию

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров19K

Я регулярно участвую в различных хакатонах и конкурсах по программированию, и довольно часто удаётся выигрывать.Рассказываю о внутренней кухне, вспоминаю поучительные истории с хакатонов и делюсь секретами успеха.

Читать далее
Всего голосов 36: ↑17 и ↓19+1
Комментарии29

Руководство по установке и настройке OpenVPN

Время на прочтение34 мин
Количество просмотров1.5M



Когда у нас появились сотрудники, работающие удаленно, пришлось думать над тем, как обеспечить им защищенный доступ к нашим хостинговым серверам, виртуальным выделенным серверам разработчиков Virtual Dedicated Server (VDS), сайтам обеспечения и сопровождения разработки и к другим ресурсам.



По соображениям безопасности доступ к этим ресурсам ограничен при помощи межсетевого экрана (файервола) по портам и адресам IP. Ежедневную перенастройку доступа при изменении динамических IP сотрудников едва ли можно назвать разумным решением.



Выход нашелся довольно быстро — это использование технологии виртуальных частных сетей Virtual Private Network (VPN) и ее свободной реализации OpenVPN. Эта реализация доступна практически для всех распространенных платформ, в том числе для планшетов и смартфонов. История развития OpenVPN насчитывает уже 12 лет (компания OpenVPN Technologies, Inc. была создана Francis Dinha и James Yona в 2002 году), так что это надежное и проверенное временем решение.



В нашей компании сеть VPN позволила предоставить защищенный доступ сотрудников к VDS, играющей роль сервера OpenVPN. И уже для фиксированного IP этого сервера был разрешен доступ к другим ресурсам компании. Попутно на сервере OpenVPN был установлен прокси Squid, что решило все проблемы доступа сотрудников с динамическими IP к защищенным ресурсам компании.



Теме OpenVPN посвящены многочисленные статьи и сообщения на форумах. Тем не менее, нужную информацию мне пришлось собирать по частям из разных мест. Попутно приходилось разбираться с многочисленными терминами и технологиями. В качестве серверов OpenVPN были использованы VDS на базе FreeBSD и Debian Linux, в качестве клиентов — рабочие станции FreeBSD, Debian Linux, Ubuntu и Microsoft Windows.



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


Читать дальше →
Всего голосов 128: ↑115 и ↓13+102
Комментарии97

Obsidian + Tasks — Периодические задачи, запросы, кастомные статусы и прочие удобности

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров32K

Очень мощный плагин для работы с задачами в Обсидиане.
Возможности плагина:

Читать далее
Всего голосов 20: ↑20 и ↓0+20
Комментарии10

Как на самом деле работает Async/Await в C# (Часть 1)

Уровень сложностиСложный
Время на прочтение12 мин
Количество просмотров59K

Несколько недель назад в блоге «.NET Blog» появилась статья «Что такое .NET, и почему вы должны выбрать его?». В нем был представлен высокоуровневый обзор платформы, кратко описаны различные компоненты и архитектурные решения, а также обещаны более подробные посты по затронутым темам. Этот пост является первым таким продолжением, в котором подробно рассматривается история создания, архитектурные решения и детали реализации async/await в C# и .NET.

Читать далее
Всего голосов 17: ↑16 и ↓1+16
Комментарии8

Царица наук: математика, беспощадная ты мука

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров36K

Дайджест про то, как и зачем учить математику, 
если ты взрослый

С самых юных лет было очевидно, что я — естественнонаучник: ребёнок, выросший в семье инженеров и с неподдельным интересом обожающий всё живое, зелёное и биологическое. Дальше началось смешное: во дворе была филологическая гимназия, а чего далеко ходить... В свою очередь, гимназии нужны были олимпиадники и вот она, математика и мама с грозными задачниками, ибо в школе нас просто не учили (была вообще импортная адаптивная программа с усеченной геометрией). Для школы и вуза стараний родителей хватило, для олимпиад нет: физика шла на ура, а математика с приличным скрипом. Как я сейчас говорю, «не щёлкало». Сейчас мне 37 лет и я нет‑нет, да возвращаюсь к математике, хотя она мне точно не нужна ни в работе, ни в увлечении.

Читать далее
Всего голосов 49: ↑45 и ↓4+63
Комментарии163

Синтаксис запросов LINQ — недооцененный инструмент для разработчиков C#

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров17K

Как вы наверняка знаете, LINQ (Language Integrated Query) - это очень мощный и гибкий язык, встроенный в C# и существует он начиная аж с .NET Framework 3.5. Однако, несмотря на свои возможности, синтаксис запросов часто игнорируется в пользу более популярного аналога - синтаксиса методов. Хотя синтаксис методов действительно мощный, в этой статье я на практических примерах покажу преимущества query-синтаксиса и его полезность для опытных разработчиков на C#.

Читать далее
Всего голосов 20: ↑13 и ↓7+9
Комментарии27

Google Search: учимся искать

Время на прочтение2 мин
Количество просмотров32K
Итак, рассмотрим основы синтаксиса поисковых запросов и некоторые хитрости поиска на google.com. Возможно, вы уже знаете многие из них, но тем не менее, что-то может оказаться очень полезным при ежедневном поиске.

  • Для поиска цитат можно использовать как фразы, заключенные в ковычки, так и словосочетания соединенные знаком дефис:
    [«пример поиска цитат»] или [пример-поиска-цитат]
  • Раньше Google мог неверно воспринимать некоторые специальные символы, наподобие [#], но теперь проблема с этим решена. Но это все равно не означает, что вы можете использовать любые символы, и при поиске по строкам [t.], [t-] или [t^] результат будет одинаковым.
  • Google разрешает использовать до 32 слов в поисковом запросе.
  • По умолчанию при поиске с несколькими ключевыми словами используется оператор «и». Если же вы не хотите чтобы в результатах присутствовали документы с тем или иным словом, поставьте перед ним знак "-": [аренда офиса -склад].
  • Используя поиск можно находить синонимы слов:
    [~тест], хотя, как я понял, для русского языка пока не актуально.
  • Если вам необходимо найти числовые значения из указанного промежутка, используйте оператор "..": [2003..2006]
  • Для нахождения определений различных слов можно использовать специальный оператор define: [define:yandex].
  • Найти страницы, ссылающиеся на определенный сайт можно используюя оператор link: [link:habrahabr.ru]
  • При формировании поискового запроса можно пользоваться оператором «или», он используется в виде символа вертикальной черты: [блог (habr | habrahabr)] – в результате будут найдены документы, содержащие слово «блог» и «habr» или «habrahabr»
  • При выдаче результатов поиска Google учитывает региональные настройки вашей системы, а также определяет ваше местонахождение по ip-адресу, и результаты могут значительно различаться при поиске из разных стран, или на разных языках.
  • При поиске фраз можно использовать символ подстановки "*": [«а нам все равно, а нам *»]. Например, таким образом удобно искать текст песни, или цитаты, если известны всего несколько слов из них.
  • Для сужения результатов поиска по определенным доменам используйте оператор «site»: [site:.promodj.ru]


А вот список наиболее интересных специальных операторов, которые разрешены для поиска в Google (и часть из них используется в Расширенном поиске):
  • Cache: – Возвращает кэшированную копию страницы с указанным адресом или URL
  • Inanchor: – Поиск ключевых слов в тексте ссылок
  • Related: – Находит сайты, тематически связанные или подобные указанному
  • Info: – Показывает информацию о сайте по указанному адресу
  • Allinurl: – Находит страницы, в URL которых встречаются все указанные ключевые слова
  • Inurl: – Находит указанные ключевые слова в URL на страницах
  • Stocks: – Поиск биржевых котировок по нескольким источникам
  • Allintitle: – Находит страницы со всеми указанными ключевыми словами, находящимися в области
    Filetype: – Находит документы определенного типа (с заданным расширением файла)
    Daterange: – Находит страницы, проиндексированные в заданный промежуток времени


  • И наконец о кнопке «Мне повезет» :)
    Она расположена на главной странице Гугла. По этой кнопке Гугл выдает наиболее релевантный, с его точки зрения, результат. Обычно это помогает при быстром поиске какой-то фактической информации, когда не требуется подробного изучения вопроса. После нажатия кнопки «Мне повезет» вы попадаете непосредственно на сайт, который Гугл предлагает в качестве искомого.
Рейтинг0
Комментарии0

Порядок разрешения методов в Python

Время на прочтение15 мин
Количество просмотров182K
В этой заметке рассматривается алгоритм MRO С3 и некоторые специфические проблемы множественного наследования. Хотя и алгоритм и проблемы не ограничиваются рамками одного языка, я акцентировал своё внимание на Питоне. В конце приведён список полезных ссылок по данной теме.
Читать дальше →
Всего голосов 63: ↑62 и ↓1+61
Комментарии12

Асинхронный телеграм-бот с вебхуками на Heroku

Время на прочтение7 мин
Количество просмотров27K

Разрабатывая телеграм-бота для проведения викторины, я даже не задумывался каким количеством человек он будет использоваться и как оказалось очень зря …

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

Читать далее
Всего голосов 5: ↑3 и ↓2+1
Комментарии11

Информация

В рейтинге
Не участвует
Откуда
Петродворец, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Специалист
Middle
Python
C#
Git
PostgreSQL
Nginx
Django
Bash