Как стать автором
Обновить
831.19

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга

Написал web-сервис чтобы помочь возрастным родителям отправлять показатели счётчиков в коммунальные службы.

Дисклеймер: в данном посте рассмотрен мой личный опыт, опыт моих близких для которых данное решение работает в текущий период времени. Выбор стэка для реализации мои личные предпочтения, это pet-проект, делаю что хочу ;)

Мои родители в возрасте, они пользуются интернетом, но некоторые технологии даются очень тяжело. В тоже время, ряд (провинциальных) коммунальных компаний принимают показания счётчиков только по почте. Нет приложений, вэб-сайтов чтобы их отправить. Счётчики олдскульные и менять не планируют. И давно уже хотелось попробовать axum после многих лет с actix ;)

В итоге я написал крохотный web-сервис, который предоставляет собой web-интерфейс с минимумом телодвижений. Выбираешь адрес из списка, счётчик и указываешь значение. Автоматически подставляется предыдущий месяц как период оплаты, но можно выбрать другой. Жмёшь "Отправить" и письмо в нужном формате улетает по нужному адресу. Копия письма улетает моим родителям.

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

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

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

Коротко про стэк: rust, axum, config (конфигурация через yaml), terra (шаблонизатор), для фронта взят svelte (love.jpg)

Спасибо за внимание :)

Код и скриншоты проекта

Теги:
+7
Комментарии6

Всем привет!

Хочется сказать пару слов о практике T-Shape. Это когда помимо основной специальности - например, разработки, ты развиваешься в чем-то еще. Если рассмотреть состав типовой команды, то это аналитик или тестировщик. Может быть DevOps или НТ. Или даже сопровождение ПРОМ. Насколько я знаю, такая практика есть в Яндексе. Рассмотрим плюсы и минусы на примере разработчика-тестировщика.

Плюсы очевидны:

  1. взаимозаменяемость членов команды

  2. упрощение найма за счет унификации

Но есть и минусы.

  1. суть работы тестировщика - найти проблемы в коде, рассматривая его как черный ящик. Именно потому, что тестировщик не знает, что внутри, но знает, как должно работать, ему удается найти "новые" баги. Конечно, можно ввести практику: код пишет один разраб, а тестирует другой. Но это усложнение и человеческий фактор.

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

  3. пункт субъективный т.к. я разработчик. Сравнивая разработку и тестирование как две области деятельности я бы всегда выбирал разработку. IMHO, она сложнее и поэтому интереснее. Отсюда риск, что на тестирование будет выделяться меньше времени. Вопрос в уровне инженерной культуры и дисциплине, но это снова человеческий фактор.

    Итог - практика интересная, но требует высокой инженерной культуры и подвержена влиянию человеческого фактора

Теги:
+1
Комментарии4

Интересный пример, когда определение friend T (где T — шаблонный параметр) имеет смысл:

template <class T>
class Badge {
   friend T;
   Badge() { }
};

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

class VFS {
   ...
public:
   void register_device(Device&);
   void unregister_device(Device&);
};

Предполагается, что эти методы будут вызываться внутри конструкторов (и деструкторов) Device и нигде (и никем) больше. Но как закрепить наше ожидание на уровне API?

Распространенное решение — вынести (un)register_device в приватную часть, а Device объявить другом:

class VFS {
private:
   friend class Device;
   void register_device(Device&);
   void unregister_device(Device&);
};

И это действительно запрещает всем кроме Device обращаться к данным методам. Но это так же разрешает Device обращаться ко всем остальным членам VFS!

Выразить же желаемое наиболее четко и ясно нам помогает как раз таки класс Badge, приведенный в самом начале статьи: мы можем оставить методы (un)register_device публичными, но при этом сделать их первым аргументом значение Badge<Device>:

class VFS {
    ...
public:
    void reg_Device(Badge<Device>, Device&);
    void unregister_device(Badge<Device>, Device&);
};

Теперь чужак не может использовать эти методы, потому что он не может сконструировать Badge<Device>, а а сам Device может вызывать их где и как пожелает:

Device::Device()
{
    VFS::instance().register_device({}, *this);
}

Теги:
+5
Комментарии2

Концентрация полезных ссылок в июньском облачном дайджесте🔥

🔥 Предлагаем бесплатно попробовать облако Cloud.ru: подскажем, какой сервис лучше выбрать под вашу задачу, выделим грант или тестовый период и поможем мигрировать в облако. Подать заявку можно до 31 августа 2024 года.

✨ Обновили навигацию, дизайн и документацию на нашем сайте — провели большое UX-исследование, результаты которого легли в основу улучшений. Подробнее.

☁️ Выдаем Evolution free tier — бесплатный объем облачных ресурсов для тестирования и запуска pet-проектов. А за привязку карты при первой регистрации в личном кабинете — 4 000 бонусов (= 4 000 рублей), которые действуют 60 дней. С их помощью можно подключить к виртуальной машине любые сервисы, например, публичный IP и SNAT-шлюз. А в статье на Хабре разобрали мифы о бесплатных облачных ресурсах и частые вопросы про наш free tier.

💸 Предлагаем зарабатывать вместе с Cloud.ru: присоединяйтесь к реферальной программе, рекомендуйте наши облачные сервисы клиентам, коллегам или друзьям и получайте вознаграждение 15%. Теперь участвовать могут не только юридические лица и ИП, но и самозанятые.

🚀На конференции GigaConf 2024 анонсировали новую модульную облачную платформу Cloud․ru Evolution Stack для создания частного, гибридного или распределенного облака с учетом существующего IT-ландшафта компании. Подробнее в нашем Telegram-канале.

До встречи в августе!

Теги:
+3
Комментарии0

В открытом доступе появился литкод по машинному обучению с задачами по линейной алгебре и deep learning.

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

Теги:
+3
Комментарии1

Состоялся релиз отладчика GDB 15.1 (первый выпуск серии 15.x, ветка 15.0 использовалась для разработки).

Проект GDB поддерживает отладку на уровне исходных текстов для широкого спектра языков программирования (Ada, C, C++, D, Fortran, Go, Objective-C, Modula-2, Pascal, Rust) на различных аппаратных (i386, amd64, ARM, Power, Sparc, RISC-V) и программных платформах (GNU/Linux, *BSD, Unix, Windows, macOS).

Ключевые улучшения:

  • для сборки GDB и GDBserver теперь необходим компилятор, поддерживающий C++17 (как минимум GCC 9);

  • внесены улучшения в Python API;

  • продолжена реализация протокола DAP (Debugger Adapter Protocol). Добавлена команда set debug dap-log-level для управления ведением логов для DAP. Добавлена поддержка запроса cancel и возможность формирования события process;

  • в протокол удалённой отладки добавлена поддержка пакетов QThreadOptions и qIsAddressTagged, а также реализована команда set/show remote thread-options-packet;

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

  • объявлены устаревшими MPX-команды show/set mpx bound, поддержка которых прекращена Intel в 2019 году.

Источник: OpenNET.

Теги:
+3
Комментарии0

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

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

Исходный список:

numbers = [1, 2, 5, 11, 3, 111, 7, 27]

Результат работы кода:

[2, 5, 11, 111, 7, 27]

Ожидаемый результат:

[5, 11, 111, 7, 27]

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

Исходный код программы:

numbers = [1, 2, 5, 11, 3, 111, 7, 27]

for i in numbers:
    if i < 5:
        numbers.remove(i)
        
print(numbers)

Ну и на всякий случай: у кандидатов на собеседовании нет доступа к GPT-чатам и поисковикам, решите без подсказок?

Теги:
+7
Комментарии21

Как получить токен авторизации приложений telegram Mini Apps

Первый и самый простой способ, это открыть web версию telegram в браузере, открыть инструменты разработчика (F12 в Chrome) и во вкладке network посмотреть заголовки запросов, которые шлет клиент приложения. В поле Authorization будет искомый токен.

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

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

В первую очередь, понадобится включить в настройках телефона "Параметры разработчика". Например, на Samsung это делается так: Настройки -> Сведения о телефоне -> Сведения о ПО -> 7 раз быстро нажать на номер сборки -> в меню "Параметры разработчика" включить "Отладка по USB".

Далее открываем приложение telegram на этом же телефоне -> Настойки -> пару раз длительно нажимаем на строку с версией приложения -> в открывшемся секретном меню "включить отладку WebView".

Подключаем телефон к компьютеру по USB и переходим в DevTools браузера Chrome: chrome://inspect/#devices

На телефоне в telegram запускаем нужное приложение и ждем, пока инспектор его определит, после чего жмём "inspect". Всё, теперь все манипуляции с приложением будут отображаться в браузере.

Теги:
0
Комментарии0

Автоматическая игра в BLUM

Если у вас, как и у меня, накопилось много билетов для мини игры в приложении BLUM, но нет времени, чтобы их потратить, попробуйте воспользоваться моим небольшим проектом: репозиторий BLUM_autoclaimer.

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

Для работы программы потребуется токен авторизации.

Пулл реквесты приветствуются. Интересные обсуждения автоматизации подобных проектов в телеграм-канале.

Теги:
+2
Комментарии4

Чем занимаются Go-специалисты в Островке?

У нас 10 команд, использующих Go, как основной язык. Для примера возьмём команду интеграций с поставщиками отелей. Вот что делают разработчики в этой команде:

  • Адаптируют API различных поставщиков к внутреннему API сервиса. Внешние поставщики отелей используют разные технологии: GraphQL, XML, SOAP, WTF. В каждом API своё время ответа, свои коды ошибок и ещё много кастомного. 

  • Поддерживают и правят существующие интеграции. Протокол сменился, или (куда реже) коды ошибок стали другие — всё надо держать в актуальном состоянии и при необходимости править.

  • Уменьшают технический долг. Это задачи, связанные с библиотеками и рефакторингом. Есть правило — на одну итерацию должно приходиться 75% продуктовых задач и 25% техдолговых.

  • Дежурят в общем чате. В нём разработчики отвечают на вопросы менеджеров. Раньше дежурств не было, на вопрос отвечал тот, кто увидел его первым. Когда поток обращений вырос, решили назначать дежурного.

  • Обмениваются знаниями внутри компании. В Островке есть активности, напрямую не связанные с работой. Например, канал в слаке #dev-golang и еженедельный книжный клуб.

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

Теги:
+6
Комментарии2

Эта программа сериализует данные из слайса структур User в JSON-формат. Но есть одна проблема: программа не работает. Нужно найти ошибку и исправить её. Когда программа заработает, она выведет данные на экран в JSON-формате.

import (
  "encoding/json"
  "fmt"
)

type User struct {
  id       int    `json:"id"`
  name     string `json:"name,omitempty"`
  email    string `json:"email,omitempty"`
  password string `json:"-"`
}

func main() {
  users := []User{
    {
      id:       1,
      name:     "Gopher",
      email:    "gopher@example.com",
      password: "Im4G0pH3r",
    },
    {
      id:       2,
      name:     "Rustocaen",
      email:    "rustocean@example.com",
      password: "iT$Ru$t0C34n",
    },
  }

  out, err := json.MarshalIndent(users, "", "    ")
  if err != nil {
    fmt.Printf("serialization error: %s\n", err.Error())
    return
  }

  fmt.Println(string(out))
}

Решение задачи опубликуем в комментариях.

Теги:
+3
Комментарии4

Порешаем математические задачки? Практика пригодится начинающим и опытным аналитикам, разработчикам и тестировщикам.

Задача №1: делим стоимость такси справедливо

Трое друзей возвращаются домой из театра. Им по пути и они берут одно такси на троих. Поездка стоит 3000 руб. Вопрос: как делить стоимость? 

Пусть цена зависит только от расстояния. Если бы каждый ехал в отдельном такси, то: 

  • Первый заплатил бы 600 руб; 

  • Второй — 1200 руб; 

  • Третий живёт за городом, его поездка стоила бы 3000 руб — столько же, сколько сейчас стоит общая. 

Варианты решения:

  1. Разделить 3000 на троих поровну — каждый заплатит 1000 руб. Вроде бы логично, но почему первый человек должен платить так много? Ехать одному ему было бы выгоднее. 

  2. Можно, чтобы первый заплатил 600, а второй — свой остаток в 1200-600=600 руб. Третьему останется заплатить 1800 руб. Для первого друга такое тоже не очень выгодно, но он хотя бы не переплачивает.

  3. За всё платит третий — он ведь всё равно едет весь маршрут до конца.

Как бы вы посчитали? Пишите свой ответ в комментариях, а мы вернёмся с решением через несколько дней.

Теги:
0
Комментарии12

Вышел первый официальный релиз интегрированной среды разработки Theia IDE, развиваемой организацией Eclipse Foundation на базе редактора кода Theia и разработанных для него плагинов.

Код проекта написан на TypeScript и распространяется под лицензией EPLv2 (Eclipse Public License).

Проект Theia IDE поставляется как самодостаточное приложение для рабочего стола, рассчитанное на установку на локальных системах, а также в форме online-версии для работы из браузера (для развёртывания online-версии на своём сервере предоставляется готовый Docker-образ).

Проект развивается при участии IBM, Red Hat, Google, ARM, Broadcom, Huawei, Samsung, Ericsson, SAP и Arduino на нейтральной площадке, поддерживаемой Eclipse Foundation и не зависящей от конкретных производителей.

Платформа Theia построена на базе архитектуры фронтенд/бэкенд, подразумевающей запуск двух процессов (отрисовка интерфейса и внутренняя логика), которые взаимодействуют с использованием HTTP при помощи JSON-RPC через WebSockets или REST API. Это разделение позволяет работать через Web (бэкенд, использующий платформу Node.js, запускается на внешнем сервере, а фронтенд с интерфейсом загружается в браузере). В Theia IDE оба процесса запускаются локально, а для создания самодостаточного приложения применяется платформа Electron.

Theia IDE предоставляет средства разработки на Python, Java, JavaScript, C++ и любых других языках, поддержка которых реализована через сервера LSP (Language Server Protocol).

Источник: OpenNET.

Теги:
+4
Комментарии5

Ближайшие события

Автоклейм токенов в Hamster Kombat и HOT Wallet

Возможно я уже кому-то надоел своими попытками автоматизации всякого web3 скама (а может и нет), но в этот раз я написал небольшую, и очень легковесную программу, которая занимается автоматическим клеймом токенов в Hamster Kombat и HOT Wallet. И, как начинающий программист, я не могу не поделиться своим 'шедевром'.

Функционал прост, раз в несколько часов она шлет POST-запросы на API указанных проектов и таким образом собирает монеты, плюс раз в час протапывает хомяка. Всё работает на обычных реквестах, так что для работы программы хватит ресурсов калькулятора. Возможно, кому-то будет интересно, как это работает, да и функционал можно значительно расширить под все возможные ресурсы API.

Репозиторий - Hamster Kombat autoclaimer

Пулл реквесты приветствуются.

Теги:
+2
Комментарии1

Оказывается не так давно Jetbrains запретили пользователям из РФ (и видимо из РБ) скачивать и обновлять свою IntelliJ Ultimate. Подозреваю, что это же относится и к другим их продуктам.
Попытка скачать среду разработки с сайта приводит к ошибке ниже:

Так сейчас выглядит страница браузера при попытке скачивания последней IntelIiJ Ultimate
Так сейчас выглядит страница браузера при попытке скачивания последней IntelIiJ Ultimate

Обновление из самой среды видно, но при попытке вытащить его с сайта сообщается об ошибке.

Теги:
+7
Комментарии18

Как открыть Hamster Kombat в браузере Chrome без скриптов

1. Установить расширение Resource Override

2. Установить перенаправление с URL https://hamsterkombat.io/js/telegram-web-app.js на https://ktnff.tech/hamsterkombat/telegram-web-app.js (как на скриншоте).

3. Открыть в браузере web версию telegram и октрыть хомяка.

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

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

Теги:
+1
Комментарии1

Разработчики обновили плагин vscode-pets (VS Code Pets) для Visual Studio Code. Проект добавляет в редактор кода котиков, собак, уток, скрепыша и змейку (специально для программистов на Python). Миловидные зверьки бегают по окну приложения, ищут баги и создают хорошее настроение во время написания кода. Цифровые помощники могут взаимодействовать с пользователем с помощью мыши, а с помощью команды vscode-pets.throw-ball с ними можно поиграть.

Теги:
+4
Комментарии0

Всем привет!

Недавно посмотрел интересное видео про управление техдолгом https://youtu.be/pvZDcytPU3w

На самом деле видео не про управление техдолгом в целом. Там нет архитектурного техдолга, технологического. Оно про техдолг, возникающий при реализации конкретной фичи - когда появляется TODO в коде.

Речь идет о извечной проблеме разработчика - "сделать все идеально". Но идеально может потребовать дни или даже недели. А у нас Agile, спринты в 2 недели, бизнес ждет свою фичу.
Что предлагается:

  1. не надеяться, что декомпозиция задачи на планировании будет идеальной

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

  3. расставить по коду подробные TODO, рассказать команде что сделано, а что нет и почему, и влить доработку. Т.об. мы гарантировано получаем большую прозрачность. А если правильно удалось определить, что блокер для команды - еще и лучший Lead Time.

  4. далее некий робот сканирует код, находит TODO и делает из них таски в вашем трекере

  5. таски будут оценены на очередном планировании и взяты в работу, возможно другим разработчиком

    Самое интересное - для одной и той же задачи пункты 1-5 могут повторяться. Наверное, если это происходит в 5-й раз - стоит детальнее взглянуть на задачу. Похоже она сильно влияет на архитектуру.

    Итого - идея мне нравится!

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Разработчик утилиты Neofetch и системы KISS Linux оставил программирование и стал фермером. Репозитории всех своих проектов он перевёл в публичный архив, а в описании профиля указал «Have taken up farming».

Последняя версия Neofetch вышла в августе 2020 года. С тех пор утилиту не обновляли. Все репозитории организации KISS Linux также перевели в архив.

Теги:
Всего голосов 2: ↑2 и ↓0+6
Комментарии1

Где вы будете в следующий четверг? Мы — на GigaConf!

27 июня в креативном пространстве «Дизайн-завод» в Москве соберутся инженеры и разработчики из ведущих технологических компаний: Ozon Банк, Сбер, Huawei, Positive Technologies, МТС Digital, Альфа-банк и Cloud.ru в том числе😉.

На конференции наши эксперты расскажут про:

  • платформу для достижения технологического суверенитета, спикер — Михаил Сайнуков;

  • секреты разработки и развертывания cloud native-приложений и микросервисов на базе serverless-технологии, спикер — Михаил Бондаревский;

  • опыт создания платформы данных с нуля, спикер — Ася Грибанова;

  • обучение и инференс больших языковых моделей — как эффективно использовать дорогостоящие GPU-ресурсы, опыт успешного и неудачного применения LLM. Спикер — Дмитрий Юдин;

  • внедрение DevSecOps, которое не увеличит время релизов — как добились сканирования кодовой базы в 20 тысяч строк за 30 секунд, с какими проблемами столкнулись и как их решили. Спикеры — Алексей Подольский и Сергей Губарев.

А программу GigaConf откроют старший вице-президент Сбера Андрей Белевцев, лидер сообщества MindSpore Hu Xiaoman, управляющий директор SberDevices Сергей Марков, а также специальный гость — министр цифрового развития Максут Шадаев.

📅 Когда: 27 июня в 10:00 мск — офлайн и 11:00 — онлайн

👉Зарегистрироваться

Будем рады встрече на GigaConf!

Интересное в блоге:

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0
1
23 ...

Вклад авторов