Сообщество - Лига программистов
Добавить пост

Лига программистов

1 514 постов 11 411 подписчиков

Популярные теги в сообществе:

Реверс-медицининг

Полистал тут ради прикола рандомный учебник для студентов меда. Такая жесткая смесь реверс-инжиниринга и алхимии.
У них там с документацией еще хуже, чем у нас. В ИТ она либо хреновая, либо отсутствующая, но на медицинском она походу выглядит вообще вот так:

«Регистрация нового пользователя.
Юзеросплазии приложения — это состояние приложения, характеризующееся появлением в системе нового юзера.

Юзероплазии приложения могут быть первичными, т.е. самостоятельным явлением и вторичными — т.е. проявлением какого-либо другого заболевания, например болезней маркетинга (акциотикулы, рефералиты, грыжа рекламного банера).

Основными симптомами первичной юзерплазии приложения являются:

- номеразия – появление номера телефона в форме регистрации;
- спазм ограниченных участков логов;
- ощущение «запроса к серверу» - возникает при нажатии на кнопку «зарегистрироваться» и часто сопровождается выраженной номеразией….»

И так 18 томов. И про код ни слова. Исходников нет, вообще, никаких. И доступа к базе нет. Есть только обрывки левого кода на ассемблере и фортране, которые они называют химией и микробиологией.

Врачей зауважал еще больше, а болеть стало еще страшнее

Скорость работы программ

Всем привет, работаю java разработчиком 10 лет, хотел бы в этом посте рассказать о разных взглядах на скорость работы программ. Мой опыт относится в основном к бекенду.

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

Для онлайн сервисов довольно важной характеристикой является длительность времени ответа. Долгая загрузка сайта создает негативный пользовательский опыт.

В то же время хотелось бы поддерживать параллельно множество пользовательских сессий. Как сервис поступает, если получает запросов в секунду больше, чем он может обработать? Либо отказывает в обслуживании, либо добавляет запрос в конец очереди, которую разбирает по мере получения ресурсов. Последнее решение увеличивает длительность формирования ответа.

Получается, что нет единого понятия скорости, а есть конкурирующие: предел потока запросов и длительность формирования ответа. Это так называемые нефункциональные требования. Длительность ответа представлена распределением, поэтому к нему может применяться агрегирующая функция, например: длительность обработки не больше 1 сек для 90% запросов.

Для формирования отчетов и аналитики используются сервисы с отложенным расчетом. Их преимущество - использование пакетных (batch) операций. Например, когда в поликлинике вы ждете перед кабинетом, а раз в полчаса медсестра забирает у всех карты чтобы поставить печать - это пакетная операция. Выгоднее сделать один запрос к базе и получить данные 100 пользователей, чем сделать 100 запросов по каждому пользователю - но размер батча ограничен (памятью, буфером). Скорость таких сервисов можно измерять как количество обработанных значений в единицу времени.

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

Показать полностью

Преимущество и недостатки контейнера set в С++

Контейнер set - это ассоциативный контейнер, который содержит отсортированный набор уникальных объектов типа Key. Сортировка выполняется с помощью функции сравнения ключей Compare. Операции поиска, удаления и вставки имеют логарифмическую сложность.

Преимущество и недостатки контейнера set в С++ Программирование, IT юмор, Программист, C++

Преимущества контейнера set:

  • Он гарантирует, что все элементы в нем уникальны, и повторения запрещены.

  • Он позволяет быстро проверять, принадлежит ли элемент множеству или нет, так как элементы хранятся в дереве поиска.

  • Он поддерживает операции над множествами, такие как объединение, пересечение, разность и симметрическая разность.

Недостатки контейнера set:

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

  • Он не позволяет изменять значения элементов, так как это нарушит порядок сортировки. Для изменения значения нужно сначала удалить элемент, а потом вставить новый.

  • Он не поддерживает произвольный доступ к элементам по индексу, так как он не имеет последовательной структуры. Для доступа к элементам нужно использовать итераторы.

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

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью 1

Вопрос от чайника, про размещение приложений в APP store/ios

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

Как стать программистом по пунктам

Программирование - это интересная и перспективная профессия, которая требует от вас логического мышления, аналитических способностей, творчества и постоянного самообучения.

Как стать программистом по пунктам Программирование, Карьера, Программист, IT, Обучение, Саморазвитие, Разработка

Чтобы стать программистом, вам нужно:

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

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

  • Выбрать язык программирования, на котором вы хотите писать код. Язык программирования - это средство коммуникации между человеком и компьютером, которое состоит из набора правил и синтаксиса. Существует много языков программирования, которые отличаются по уровню абстракции, сложности, популярности и области применения. Некоторые из самых популярных языков программирования в 2023 году - это Python, Java, C#, C++, JavaScript, Swift и другие.

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

  • Практиковаться в написании кода. Теоретические знания недостаточны для того, чтобы стать хорошим программистом. Вы должны регулярно писать код и решать разные задачи по программированию. Это поможет вам закрепить знания, развить навыки и уверенность в себе. Вы можете использовать онлайн-сервисы для проверки кода, такие как Codecademy, HackerRank, LeetCode и другие.

  • Создавать свои проекты. Чтобы стать профессиональным программистом, вам нужно иметь портфолио своих работ, которые вы можете показать потенциальным работодателям или заказчикам. Вы можете придумывать свои идеи для проектов или вдохновляться чужими примерами. Главное - делать то, что вам интересно и что демонстрирует ваши умения и творчество.

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

Вот так вы можете стать программистом с нуля. Это не легкий путь, но он того стоит. Программирование - это увлекательная и полезная деятельность, которая открывает перед вами много возможностей. Желаю вам успехов в обучении и развитии!

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью

Проблемы React Context

Проблемы React Context Кросспостинг, Pikabu Publish Bot, React, Frontend, Текст, Программирование, IT

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

1️⃣ Дизайн по умолчанию, не совсем безопасен.

1. Логика хранения стейта и его изменения разбросана между контекстом и использующими его компонентами
2. Значение value контекста необходимо мемоизировать с помощью useMemo
3. Если компонент, не нашёл контекст в родительских узлах — он будет молча использовать значения по-умолчанию. Мы не увидим никаких предупреждений или ошибок

Эти проблемы и их решения рассматривается в статье React: How I learned to create optimized contexts

✅ Вместо использования контекста напрямую, нужно:

- Указать null в качестве значения по-умолчанию для контекста
- Реализовать useSafeContext — кастомный хук, который будет проверять, что значение не null
- Реализовать SafeContext — компонент, который содержит логику инициализации значения реакт контекста

2️⃣ Отсутствие атомарных обновлений — компоненты или хуки, которые используют контекст, перерендеривается каждый раз, когда контекст изменяет состояние. Даже если ваш компонент использует лишь одной свойство из контекста, которое никогда не изменяется — компонент будет перерендериваться при изменении любого другого свойства в контексте.

✅ Как решить проблему?

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

Проблемы и решения описаны в статье The Problem with React's Context API (тут перевод на русский).


https://t.me/cherkashindev/130

Показать полностью

Обработка исключений в контроллерах Spring

Часто на практике возникает необходимость централизованной обработки исключений в рамках контроллера или даже всего приложения. В данном видео разберём основные возможности, которые предоставляет Spring Framework для решения этой задачи и на простых примерах посмотрим как всё работает. Вы познакомитесь с такими аннотациями Spring как @ExceptionHandler, @ControllerAdvice и @ResponseStatus и научитесь их применять в своих проектах.

Пример из видео описан в статье: https://akutepov.ru/ru/blog/obrabotka-isklyuchenij-v-kontrol...

Исходники доступны на GitHub: https://github.com/AlexeyKutepov/exception-handler-example

Показать полностью

Как я создал telegram-бота для чеклистов

Всем привет!

Меня зовут Марк, и я разработчик. С определенного времени я активно начал интегрировать списки и чек-листы в свою жизнь. Дошло до того, что если не записываю что-то, то с большой долей вероятности забываю это сделать. И наилучшим приложением для этого оказался, как ни странно, telegram, так как он всегда под рукой на смартфоне и ноутбуке. А тут еще в прошлом году telegram добавил возможность использовать webapp технологию для ботов. Подробнее об этом можно почитать тут: https://core.telegram.org/bots/webapps . Если кратко, то технология позволяет открывать веб-страницы внутри telegram-бота и организовывать более тесное взаимодействие с ними. Я захотел опробовать технологию и сделать какой-то простой проект. Так зародилась идея сделать бота для чеклистов https://t.me/chchecker_bot.

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

Как я жил с telegram и списками раньше

Алгоритм довольно простой:

  • Добавить чат с сохраненными сообщениями в закрепленные, чтобы не нужно было искать его среди бесконечных переписок.

  • Записывать туда все подряд.

  • В течение дня заглядывать в чат, чтобы проверить что-то из задач на день.

  • Если требовалось что-то важное или ко времени, ставить отложенные сообщения самому себе.

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

  • В свободное время чистить мусор из сохраненок и актуализировать заметки.

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

Как я создал telegram-бота для чеклистов Чат-бот, IT, Программирование, Telegram, Telegram бот, Чеклист, Длиннопост

Закрепленные чаты в telegram

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

Коротко о боте для чек-листов

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

Как я создал telegram-бота для чеклистов Чат-бот, IT, Программирование, Telegram, Telegram бот, Чеклист, Длиннопост

как выглядит переписка с ботом

Для того, чтобы создать чеклист, не нужно вводить никаких странных команд, как это принято в других telegram-ботах. Просто пишешь сообщение с названием чеклиста боту, он его удаляет (чтобы чат оставался чистым) и присылает в ответ ссылку на чек-лист, который открывается в специальном окошке внутри телеграм. И там, внутри этого окошка, уже можно добавлять пункты чек-листа с удобными элементами управления. Можно отправить боту в чат сразу несколько строк, тогда он будет считать первую строку названием, а остальные непустые строки сразу внесет как пункты к этому чек-листу.

Итак, кратко, что на текущий момент умеет бот:

  • создавать пустые и предзаполненные чек-листы, удалять и переименовывать их

  • добавлять, редактировать и удалять пункты в них;

  • менять порядок пунктов в списке;

  • очищать чек-листы полностью или удалять только отмеченные пункты;

  • ставить напоминания на пункты чек-листа или на весь чек-лист целиком;

  • копировать содержимое чеклиста в буфер или присылать текстом в чат;

  • делиться чек-листом по ссылке и настраивать права доступа к чек-листу, которые будут доступны пользователям по ссылке;

  • работать в inline-режиме для быстрой отправки ссылки на чеклист через чаты и каналы.

Как я создал telegram-бота для чеклистов Чат-бот, IT, Программирование, Telegram, Telegram бот, Чеклист, Длиннопост

Как работает бот в inline-режиме

У пользователей большие запросы, и в одиночку я не очень быстро могу разрабатывать новые функции, но стараюсь постоянно улучшать бота. Например, только недавно добавил изменение порядка пунктов внутри чеклиста. Для программиста задача довольно типичная. Но свободного времени всегда мало. Тем не менее стараюсь регулярно работать над ботом небольшими итерациями.

Какие кейсы решаются через бота

Вернемся к базовому кейсу - список для похода за продуктами.

Как правило люди в магазинах покупают одни и те же продукты. Некоторые продукты чаще, некоторые реже.

Для начала можно составить один список перед походом в магазин и дополнять его по мере необходимости.

  • В магазине отмечаем купленные товары по мере того, как кладем их в корзину/тележку. Для этого больше не надо редактировать сообщение в сохраненках. Просто тыкаем на пункт списка.

  • Перед тем, как снова пойти в магазин, проходим по списку и делаем неотмеченными позиции, которые снова нужно будет купить.

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

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

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

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

Getting Things Done (GTD)

Об этом кейсе использования мне рассказал один из пользователей бота Рустам. Подробнее о методе https://habr.com/ru/articles/599391/.

GTD подразумевает использование таск-менеджеров, но Рустам подумал, что можно запилить это все в telegram. Не через канал, и не бот, а именно чат-группу, потому что в чатах появилась такая фича как темы (топики). И из темы в тему можно  переставлять задачи. Темы можно называть по разному - СЕГОДНЯ, ЗАВТРА, КОГДА-НИБУДЬ и т.д.

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

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

Ситуационные списки

А этот кейс про то, как я перестал забывать вещи. У меня есть несколько чек-листов со списком вещей для определенных мероприятий:

  • для похода на тренировку (форма, сменное белье, вода, пропуск и т.д.);

  • для командировки (одежда, документы, техника, средства гигиены и т.д.);

  • задачи для ремонта (купить обои, договориться с плиточником и т.д.);

  • для отдыха в конкретной стране (какие места и экскурсии посетить).

Когда я завел список для похода в тренажерный зал, то супруга надо мной подшучивала - неужели нельзя запомнить, что нужно взять с собой. Конечно можно! И обычно так и происходит. Но раз в 1-2 месяца все равно что-то забываешь. Я в разное время забывал чистое белье, воду, полотенце, форму, наушники. После того, как начал сверяться со списком перед выходом из дома - проблема исчезла.

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

Как я создал telegram-бота для чеклистов Чат-бот, IT, Программирование, Telegram, Telegram бот, Чеклист, Длиннопост

Мой список вещей для спортзала

Если же говорить о командировках или отпусках, то эти события происходят не регулярно. И тут вероятность что-то забыть сильно выше, чем при походе в спортзал. Поэтому в таких ситуациях списки очень полезны.

Однажды в статье на ТЖ я прочитал, что кому-то не хватает стандартных ситуационных списков. Например, что взять в аптечку при поездке в другую страну/на дачу и т.д. Функциональность бота уже позволяет делиться списками между пользователями прямо по ссылке. И я думаю о том, чтобы завести подобный раздел в будущем.

Долгоживущие списки

Если не вдаваться в подробности о том, чем чек-листы отличаются от списков дел, то можно выделить пару основных критериев:

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

  • Пункты чек-листа обязательны и выстроены в строгой последовательности выполнения. А пункты списка можно перенести, поменять очередность, либо совсем не выполнять.

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

Поэтому кроме списков продуктов или вещей к определенной ситуации у меня есть такие списки как:

  • фильмы, которые надо посмотреть;

  • книги, которые надо прочитать;

  • цели на год (в декабре они могут перерасти в список итогов года);

  • списки улучшений, которые нужно реализовать в боте и других проектах.

Как я создал telegram-бота для чеклистов Чат-бот, IT, Программирование, Telegram, Telegram бот, Чеклист, Длиннопост

У закрепленных сообщений сразу отображается кнопка открытия списка

Если говорить о “трушных” чек-листах, у меня есть несколько технических инструкций для развертывания и настройки программ. Но в основном я использую бота для работы именно со списками.

Регулярные задачи

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

Некоторые пользователи бота просили добавить оповещения о пунктах списка или о списке целиком. В простом виде я добавил эту возможность. Но самое главное, чего не хватает - это ставить повторяющиеся оповещения (раз в день/по выходным/в определенное число месяца). Напоминания о ежедневных делах реально востребованная функция. Многие также создают себе списки на каждый день, указывая в названии дату. Вероятно, таким образом замещая, календари и события. Логичный шаг - дать пользователям автосоздание списка по расписанию, автоматический перенос невыполненных пунктов в новый список, ну и, как минимум, возможность задавать периодичность оповещений. В моем боте эта функциональность пока что в планах. Но если у кого-то есть интересный опыт работы с регулярными задачами в telegram - делитесь, интересно было бы узнать о нем!

В заключении

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

Показать полностью 5
Отличная работа, все прочитано!