Pull to refresh
0
0
Александр @Kurochen

User

Send message

Чистый код: инверсия зависимостей (DIP)

Level of difficultyMedium
Reading time8 min
Views4.7K

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

Вот такое сложное определение. Где, «Проще говоря», только больше запутывает чем поясняет, хотя все передает верно. Этот принцип пожалуй самый сложный для объяснений, хотя его суть очевидна.

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

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

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

Читать далее
Total votes 12: ↑6 and ↓6+4
Comments5

Ассемблер для программистов на языках высокого уровня: Hello World

Level of difficultyMedium
Reading time6 min
Views22K

Если вы начинали изучение программирования с JavaScript, Rust, C или любого другого высокоуровневого языка, то ассемблерный код может показаться вам непонятным или даже пугающим.

Рассмотрим следующий код:

section .data
  msg db "Hello, World!"

section .text
  global _start

_start:
  mov rax, 1
  mov rdi, 1
  mov rsi, msg
  mov rdx, 13
  syscall

  mov rax, 60
  mov rdi, 0
  syscall

К счастью, по второй строке мы можем понять, что он делает.

Здесь нет ничего привычного нам: мы не видим ни условных операторов, ни циклов, нет никакого способа создавать функции… Да даже у переменных нет имён!

С чего же вообще начать?

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

Завершив прочтение этого руководства, вы сможете ориентироваться в ассемблерном коде, будете знать, где искать информацию, и даже сможете самостоятельно писать простые программы.
Читать дальше →
Total votes 61: ↑57 and ↓4+69
Comments41

Чат-боты на все случаи жизни. 7 инструкций по созданию мини-приложений в Telegram

Level of difficultyMedium
Reading time5 min
Views37K

Telegram-боты — хорошая возможность вписать какую-то важную функциональность в понятную и простую платформу мессенджера. Не нужно думать об отдельном сайте и интерфейсе. Также боты — хорошая возможность для новичков в разработке реализовать свой мини-проект. Идея может быть как совершенно фановая — например, создавать стикеры из мемных сообщений друзей, так и быть частью функциональности сервиса — например, платежной системы.

В подборке под катом — семь инструкций по созданию Telegram-ботов с разной функциональностью. Сохраняйте статью в закладки: пригодится как начинающим, так и опытным разработчикам.

Выберите интересующего вас бота:

Паттерны взаимодействия с ботами
Веб-приложение на Node.js и React
Платежная система с Payments
Карманный ChatGPT, которому можно отправлять голосовые сообщения
Бот для генерации сложных паролей
Бот для создания стикеров из сообщений
Бот для мониторинга погоды на Python
Читать дальше →
Total votes 35: ↑32 and ↓3+40
Comments13

Деплой .NET приложений для самых маленьких. Часть 2. Github Actions

Level of difficultyEasy
Reading time8 min
Views3.3K

В прошлой статье мы рассмотрели чрезвычайно популярный инструмент для выкатки приложений Jenkins. Мы подружили его через плагины с SSH, с GitHub, построили простой пайплайн с помощью Groovy. И вроде все здорово, все работает как должно, но все равно есть ощущение, что можно сделать лучше. И действительно, наш процесс можно улучшить, перестав проводить сборку на VPS.

Ранее для сборки мы использовали агент Jenkins, который был установлен на нашем хостинге, где и происходила сборка приложения и его выкатка. Конечно, в реальных проектах существует больше одного боевого сервера, существуют промежуточные серверы – тестовые, демо, стейдж. Не всегда и везде, конечно, но когда у вас несколько серверов, то и сборку приложений можно проводить на каких-то промежуточных, а после всех тестов и проверок, рабочее собранное приложение доставлять до прода. Но у нас все по простому, сразу в прод и агент был там же.

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

Читать далее
Total votes 19: ↑16 and ↓3+24
Comments2

Новая схема по угону имен Телеграм-ботов и юзернеймов

Level of difficultyEasy
Reading time3 min
Views23K

Несколько дней назад ко мне в личку постучался товарищ c аккаунта @GreatChinas с ID: 6778690281 и именем 人民之神

Он предложил купить домен одного из моих ботов @krymbot за 300 TON (сейчас около 150000₽, на момент обращения около 200000₽).

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

Мошенник предложил провести сделку через Fragment, хотя я знаю, что там продаются только имена каналов и пользователей, но не ботов. Проверил — действительно, боты там не продаются. Решил продолжить разговор, чтобы понять его следующую тактику. Когда я сказал, что не могу выставить бот на продажу, он сказал «можно, другие делают», но инструкции не присылает. Удивил на этом моменте.

Затем он сказал: «Кто-то сказал мне, что робот должен заменить ваше имя пользователя, а затем оно появится перед вами, и вы сможете установить цену», ага, уже интересней, надо имена менять местами, это уязвимость, по такой схеме в ВК уводили домены групп.Еще раз уточнил и получил ответ, что нужно перекинуть имя бота на имя пользователя. Т.к. имена владельцев ботов не видны, я предположил, что целью является не домен бота, а мое имя пользователя которое потом булут использовать для вымогательства и фишинга. Кстати, я не знал, что имя пользователя может оканчиваться на «Bot», но попробовав изменить юзернейм на одном из аккаунтов убедился, что это реально. Решил подстраховаться и идти дальше. Не хотелось быть обманутым, поэтому я решил делать все на третьем аккаунте, про который мошенник не знает, да и если знает, я им не пользуюсь и имя не представляет для меня ценности. По правилам Телеграм, отказавшись от имени пользователя, его владелец в течении 15-30 минут (по разным данным), имеет первостепенное право на его восстановление (другие пользователи не видят имя как свободное в течении этого времени). Оказалось, что к ботам это не относится, сразу после удаления бота доменное имя бота стало занято и его невозможно стало применить ни как имя пользователя, ни зарегистрировать бота на аккаунте владельца.

Читать далее
Total votes 38: ↑36 and ↓2+44
Comments19

CMS за 0 рублей: как мы начали использовать Strapi

Reading time16 min
Views11K

Всем привет! Меня зовут Александр, я фронтенд-разработчик в KTS. Сегодня я расскажу о системе Strapi, разберу сценарии ее использования на конкретных примерах и поделюсь способами упрощения работы в ней.

Читать далее
Total votes 41: ↑41 and ↓0+44
Comments8

Советы по программированию, которые бы я дал себе 15 лет назад

Level of difficultyMedium
Reading time8 min
Views31K


У меня наконец-то появилось ощущение, что я хороший программист, поэтому было бы неплохо записать советы вида «как бы я смог добиться этого быстрее?». Не буду утверждать, что все эти советы отлично подойдут всем, но для меня они были бы хорошими.

▍ Если ты (или твоя команда) постоянно стреляешь себе в ногу, то почини ружьё


Не могу перечесть случаи, когда при работе в команде у нас была какая-то часть системы, которая легко могла поломаться, но никто не думал о том, как усложнить появление таких ошибок.

Когда я занимался разработкой для iOS, то использовал CoreData и подписывался на изменения нескольких view. Обратный вызов подписки поступал в тот же поток, из которого было запущено изменение. Иногда это был основной поток, а иногда — фоновый. В разработке для iOS важно то, что вносить изменения в UI можно только в основном потоке, иначе приложение вылетит. Поэтому подписка могла работать нормально, но потом ломалась, когда кто-то запускал изменение из фонового потока или вы позже добавляли обновление UI.

Все без раздумий воспринимали это как что-то само собой разумеющееся, и об этом часто говорили в ревью для новичков в команде. Время от времени кто-нибудь ошибался, и мы добавляли DispatchQueue.main.async, когда видели отчёт о сбое.

Я решил это исправить. У меня ушло десять минут на внесение изменений в слое подписки, теперь подписчики вызывались в основном потоке, что позволило избавиться от целого класса сбоев и сняло с нас часть умственной нагрузки.
Читать дальше →
Total votes 45: ↑43 and ↓2+59
Comments16

От Web к Native с React

Level of difficultyMedium
Reading time15 min
Views4.7K



React Native — отличный выбор для веб-разработчиков, имеющих опыт работы с React, которые хотят создать первое мобильное приложение.


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

Читать дальше →
Total votes 11: ↑10 and ↓1+14
Comments9

Я проанализировал 250 комментариев под статьёй о том, как не смог «войти в IT в 35 лет». Вот ваши самые полезные советы

Level of difficultyMedium
Reading time4 min
Views95K

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

Итак, самый сок
Total votes 61: ↑44 and ↓17+37
Comments265

Как крипто-Кошелёк @wallet кинул меня на деньги

Reading time3 min
Views24K

История о том, как официальный телеграм крипто-кошелек @wallet кинул меня на деньги.

Использование кошелька была не для серых и черных схем, просто решил вложиться в крипту. Выводил средства и покупал TON. Аккаунт верифицирован.

Читать далее
Total votes 126: ↑119 and ↓7+138
Comments73

Замедление YouTube с технической стороны: ограничение и обход

Reading time5 min
Views437K

Привет, Хабр!

В последнее время замечаю огромное количество информации по поводу замедления Великого, но очень мало где видел конкретику о том, как именно это работает. Одно лишь отчаяние "мы все умрём".

Сразу скажу, что буду говорить обо всём, что известно на данный момент. Понятно, что с этим разбирался далеко не один я: огромное спасибо обывателям ntc party форума за проделанный ресёрч.

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

UPD 10.08.2024 Многие жалуются на недоступность ютуба в целом: не грузит домашнюю страницу. Переживать не стоит, оно обрабатывается всё тем же ТСПУ по всё той же стратегии, обходы должны работать.

Читать далее
Total votes 540: ↑540 and ↓0+631
Comments433

Как алкоголь влияет на мозг. Углубляясь в нейробиологию

Reading time6 min
Views55K

Ром для старого пирата — это приговор. А как насчет нормального и здорового человека? Цель материала изучить не столько влияние ударной дозы во время пьянки, сколько эффект от регулярного и умеренного пития. Хотя про то, как литрами выпитый алкоголь влияет на мозг, и прав ли был доктор Ливси, мы тоже поговорим.

Читать далее
Total votes 103: ↑95 and ↓8+111
Comments260

Внедри это полностью. DI-in-JS

Reading time9 min
Views24K

Всем привет! Сегодня я попробую поэкспериментировать с Dependency Injection на чистом JavaScript. Тех кто не в курсе, что это за дичь и как ее готовить, приглашаю ознакомиться. Ну а у тех кто в курсе будет повод написать важный и полезный комментарий. Итак, погнали…

Читать дальше →
Total votes 9: ↑7 and ↓2+10
Comments22

Декораторы в JavaScript с нуля

Reading time10 min
Views37K

Декоратор — это средство, которое позволяет обернуть одну функцию другой и расширить ее возможности. Вы «декорируете» существующий код, обернув его другим кодом. Этот прием известен всем, кто знаком с композицией функций или функциями высшего порядка.

Декораторы — явление не новое. Они используются и в других языках, например в Python, и даже в функциональном программировании на JavaScript. Но об этом мы поговорим позже.

Читать далее
Total votes 5: ↑4 and ↓1+3
Comments1

Что такое Spring Framework? От внедрения зависимостей до Web MVC

Reading time41 min
Views512K


Вы можете использовать это руководство для различных целей:


  • Чтобы понять, что такое Spring Framework
  • Как работают ее основные фичи: такие как внедрение зависимостей или Web MVC
  • Это также исчерпывающий FAQ (Перечень часто задаваемых вопросов)

Примечание: Статья ~ 9000 слов, вероятно, не стоит читать ее на мобильном устройстве. Добавьте ее в закладки и вернитесь позже. И даже на компьютере ешь читай этого слона по одному кусочку за раз :-)


Содержание


  • Введение
  • Основы внедрения зависимостей
  • Контейнер Spring IOC / Dependency Injection
  • Spring AOP (Аспектно-ориентированное программирование) и прокси
  • Управление ресурсами Spring
  • Spring Web MVC
  • Дополнительные модули Spring Framework
  • Spring Framework: часто задаваемые вопросы
  • Заключение
Читать дальше →
Total votes 17: ↑14 and ↓3+17
Comments14

Почему я больше не делаю важные дела: и еще 3 правила как не потерять себя к 40 годам

Level of difficultyEasy
Reading time8 min
Views146K

До 30 лет кажется, что ты еще успеваешь завоевать мир. Кое-кто и вправду успевает. Но вскоре у многих появляются дети, а поясница с желудком потихоньку выходят из игры. Тогда-то и начинаешь понимать – жизнь чертовски быстро заканчивается. В этой статье поговорим о том, как не просрать ее окончательно.

Читать далее
Total votes 156: ↑121 and ↓35+112
Comments243

Встречайте Collabry — сервис от победителей Битвы пет-проектов

Level of difficultyEasy
Reading time4 min
Views3.3K

В 2023 году на Хабр Карьере проходила битва пет-проектов, в которой две команды начинающих IT-специалистов создавали место в интернете, где можно объединяться с единомышленниками и работать над IT-продуктами. Тогда победителем стала команда Sapphire. Казалось бы — цель  достигнута, но ребята пошли дальше ииии… 1 июня Sapphire запустили Collabry в публичный доступ.

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

Читать далее
Total votes 9: ↑8 and ↓1+11
Comments1

λ-исчисление. Часть первая: история и теория

Reading time6 min
Views158K
Идею, короткий план и ссылки на основные источники для этой статьи мне подал хабраюзер z6Dabrata, за что ему огромнейшее спасибо.

UPD: в текст внесены некоторые изменения с целью сделать его более понятным. Смысловая составляющая осталась прежней.

Вступление


Возможно, у этой системы найдутся приложения не только
в роли логического исчисления. (Алонзо Чёрч, 1932)


Вообще говоря, лямбда-исчисление не относится к предметам, которые «должен знать каждый уважающий себя программист». Это такая теоретическая штука, изучение которой необходимо, когда вы собираетесь заняться исследованием систем типов или хотите создать свой функциональный язык программирования. Тем не менее, если у вас есть желание разобраться в том, что лежит в основе Haskell, ML и им подобных, «сдвинуть точку сборки» на написание кода или просто расширить свой кругозор, то прошу под кат.
Читать дальше →
Total votes 64: ↑54 and ↓10+44
Comments34

Метод конечных элементов своими руками

Level of difficultyMedium
Reading time9 min
Views20K

Метод конечных элементов (МКЭ) применяют в задачах упругости, теплопередачи, гидродинамики — всюду, где нужно как-то дискретизировать и решить уравнения сплошной среды или поля. На Хабре было множество статей с красивыми картинками о том, в каких отраслях и с помощью каких программ этот метод приносит пользу. Однако мало кто пытался объяснить МКЭ от самых основ, с простенькой учебной реализацией, желательно без упоминания частных производных через каждое слово.

Мы напишем МКЭ для расчёта упругой двумерной пластины на прочность и жёсткость. Код займёт 1200 строк. Туда войдёт всё: интерактивный редактор, разбиение модели на треугольные элементы, вычисление напряжений и деформаций, визуализация результата. Ни одна часть алгоритма не спрячется от нас в недрах MATLAB или NumPy. Код будет ужасно неоптимальным, но максимально ясным.

Размышление над задачей и написание кода заняли у меня неделю. Будь у меня перед глазами такая статья, как эта, — справился бы быстрее. У меня её не было. Зато теперь она есть у вас.

Читать далее
Total votes 69: ↑69 and ↓0+69
Comments57
1
23 ...

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity