Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
#Круги добра
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Погрузись в Свидания с отличиями — романтическую игру «поиск отличий», где ты встречаешь девушек, наслаждаешься захватывающими историями и планируешь новые свидания. Множество уровней и очаровательные спутницы ждут тебя!

Свидания с отличиями

Казуальные, Головоломки, Новеллы

Играть

Топ прошлой недели

  • SpongeGod SpongeGod 1 пост
  • Uncleyogurt007 Uncleyogurt007 9 постов
  • ZaTaS ZaTaS 3 поста
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

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

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
40
AnatoliyB
AnatoliyB
1 день назад
Arduino & Pi

Pixel Table: от идеи до реализации интерактивного пиксельного стола⁠⁠

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука

Первый рабочий прототип

Давайте знакомиться!

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

Этап 0: Как всё начиналось

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

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука

Стол из интернета

Этап 1: Исследование существующих проектов

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

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука

Схемотехника у всех подобных проектов весьма простая: один контроллер + несколько сотен адресных светодиодов. Но для добавления игровых функций нужно как-то считывать нажатия.

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

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука
  • Часть разработок не имеет обратной связи на нажатия, а выступают просто красивым светодиодным декором, а нам нужны интерактивные функции для игр и других эффектов. Это в разы усложняет разработку;

  • Все существующие проекты собраны на коленке и имеют огромные недочёты в плане трудозатрат на сборку: несколько сотен проводных соединений и точек пайки, десятки человекочасов работы. Такое нам не подходит, я слишком ленив, чтобы руками всё это паять, а значит нужны печатные платы без проводных соединений, разъём-в-разъём, плата-к-плате, side-by-side;

  • Конструкция корпуса зачастую тоже достаточно сложная, с вырезами/выпилами, с клеем или герметиком. Такое тоже не нравится, нужно что-то максимально простое из обычного мебельного ЛДСП, чтобы можно было заказать раскрой на ближайшем производстве;

Этап 2: Проектирование печатной платы

Изначально я решил сделать стол размера 25х15 пикселей, эдакий правильный прямоугольник со сторонами, кратными 5, т.е весь стол можно собрать из 15 плат размера 5х5, я называю их сегментами.

В качестве канала связи рассматривал RS485 и CAN:

  • RS485 подразумевает топологию master-slave, т.е нужно явно опрашивать все ведомые устройства, чтобы избежать коллизий, что будет сложно реализовать для такого количества пикселей;

  • А вот CAN позволяет организовать сеть равнозначных устройств и даже имеет аппаратный механизм арбитража коллизий. Идеальное решение для построения событийной модели обработки нажатий: есть клик – отправили, клика нет – молчим. Короче говоря, сообщения о нажатии отправляются в шину вне очереди, что позволит обрабатывать нажатия в кратчайшие сроки.

В качестве микроконтроллера был выбран самый популярный и дешёвый микроконтроллер с CAN шиной на борту – STM32F103, имеющий к тому же десятки китайских клонов на случай необходимости дальнейшей оптимизации по цене/наличию. Наверняка у каждого здесь есть завалявшаяся дома платка Blue Pill с подобным контроллером. Вот и у меня была.

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука

В качестве светодиодов были выбраны обычные RGB адресные WS2812B. Тут всё очевидно – работают независимо при последовательном подключении:

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука

В качестве датчика нажатия был выбран оптический сенсор VCNL36821S, комбинирующий в себе светодиод и фотодиод, работающие в ИК диапазоне длин волн 800..1000нм, а значит он не будет реагировать на RGB спектр светодиодов 400..700нм. С другой стороны, это не самое дешёвое решение, но точно одно из самых простых при автоматизированной сборке печатных плат. Один smd элемент и готово, никаких тебе емкостных сенсоров в виде улиток из проволоки (вспоминаем про желание избежать трудоемкости при сборке).

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука

VCNL36821S

Сколько датчиков и светодиодов можно подключить к одному контроллеру STM32F103 в корпусе LQFP-48 без использования всякого рода расширителей портов? Все звёзды сошлись на размере сегмента 5х5 = 25 пикселей. В прототипе задействованы абсолютно все ноги контроллера, даже пришлось позаимствовать одну ногу SWD из разъёма для программирования.

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука

Одна из сложностей при проектировании печатной платы заключалась в том, что у сенсора VCNL36821S отсутствует возможность задавать адрес I2C, а у микроконтроллера STM32F103 только две шины I2C. Как же быть? Ответ был найден на просторах Stackoverflow и заключался в коммутации линии SDA через диоды Шоттки. Гениально, как мне кажется:

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука

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

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука

Версия 1.0

Управлять столом будет обычная Raspberry Pi 4B+ вот с такой платой расширения для CAN шины:

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука

Сами платы были заказаны в Китае на PcbWay с автоматизированной сборкой, т.е сам я ничего не паял.

Ну и затратная часть на платы:

  • Текстолит * 15 плат = 11 800 ₽

  • Компоненты * 15 плат = 29 600 ₽

  • Авто монтаж * 15 плат = 30 600 ₽

  • Доставка с Китая = 13 560 ₽

  • Итого: 85 560 ₽

Этап 3: Проектирование корпуса

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

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука

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

  • Во-первых, такой отступ становится весьма неочевидным в играх, например пинг-понг, когда мячик отражается от невидимой стены;

  • Во-вторых, эстетически это смотрится весьма странно, когда поле светится не всё.

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

Оргстекло 3 мм нашел у местных рекламщиков и попросил вырезать прямоугольник нужного размера.

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука

В качестве материала корпуса была выбрана фанера, т.к она намного крепче и долговечнее обычной мебельной ЛДСП.

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука

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

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука

Сетку вырезал на лазерном ЧПУ из фанеры 3 мм, размер каждой ячейки 4х4х4 см.

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука

Затраты на корпусные детали:

  • Раскрой сетки из фанеры 3мм = 5 000 ₽

  • Фанера для корпуса стола + раскрой = 4 600 ₽

  • Акрил + резка = 4 200 ₽

  • Краска + валик = 1 750 ₽

  • Метизы, втулки, клей = 830 ₽

  • Покраска своими руками = Бесценно

  • Итого: 16 380 ₽

Этап 4: Написание прошивки и отладка

Для написания кода использовал программы STM32CubeMX и STM32CubeIDE, для прошивки и отладки китайские клоны программатора ST-LINK V2 и логического анализатора Saleae Logic. Вообще обожаю эту связку, никогда ещё программирование и отладка микроконтроллеров не были настолько простыми и доступными.

Из интересного, что можно было бы рассказать про написание прошивки:

Т.к контроллер весьма небольшой, и чтобы не тащить в проект тяжеловесную RTOS, я часто использую самописную систему событий, привязанную к 1 мс таймеру. Занимает буквально сотню строчек кода: установить событие через N мс, проверить готовность события к исполнению, очистить событие. Это покрывает практически все мои нужды по организации логики программы под микроконтроллер и занимает памяти чуть более, чем ничего.

Отдельно хочу рассказать про логику организации мной адресного пространства CAN. Я разбил адресное пространство 2048 адресов на 4 группы:

  • широковещательная команда;

  • целевые команды конкретным сегментам;

  • посылки от сегмента;

  • и в конце простые пакеты с цветами.

В CAN, чем ниже адрес пакета, тем у него выше приоритет. Это означает, что посылки от устройств (с кликом или ответом на запрос) имеют приоритет выше, чем пакеты с цветами. Таким образом, клик всегда будет получен почти мгновенно, даже когда идет активная “отрисовка” картинки и шина занята.

В коде я реализовал поддержку трех разных палитр:

  • RGB6 – 6 бит на цвет, где 3 бита цвет RGB, а 3 бита яркость 0-7;

  • RGB12 – 12 бит на цвет, RRRRGGGGBBBB;

  • RGB24 – 24 бита на цвет.

Т.к в стандартном CAN есть ограничение на 8 байт данных, то приходится делить адресные пространства ещё и на адреса конкретных пикселей внутри сегмента. А т.к на каждые 8 байт данных полезной нагрузки CAN имеет ещё оверхед 47 бит в виде адреса и других заголовков пакета, то с расширением палитры цветов, FPS падает непропорционально. Примерно вот таких значений мне удалось добиться при скорости CAN 500 kbit/s:

  • 75 FPS для RGB6;

  • 38 FPS для RGB12;

  • 13 FPS для RGB24;

Я остановился на палитре RGB12: достаточная цветопередача при сохранении адекватной частоты кадров. Стоит отметить, что это максимальная частота кадров изображения, а с наличием большого числа нажатий, частота кадров будет проседать, т.к вспоминаем про приоритет кликов над пакетами цветов.

Для любознательных, ссылки на исходники платы и прошивки будут в конце статьи.

Расходы: бесплатно по ночам.

Этап 5: Финальная сборка и ошибки

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука
  • Собрать всю сетку из таких коротких деревянных ламелей оказалось непросто. Я не предусмотрел достаточные допуски для пазов, детали то и дело не вставали на свои места, приходилось подпиливать и применять силу, в итоге плоскость с оргстеклом получилась неидеальной. В новой версии откажусь от пазов в платах, а ламели из фанеры сделаю длиннее, чтобы конструкция сетки получилась более ровной;

  • Как вы могли заметить, на платах я сделал разъёмы папа-мама на нижней стороне текстолита. Такая конструкция очень удобна при сборке и стоит три копейки, но делает стол абсолютно непригодным для ремонта, т.к нет возможности достать и заменить одну плату, приходится откручивать всех соседей;

  • Оргстекло, которое я нашел на местном производстве, как оказалось, плохо подходит для оптического сенсора, т.к имеет слабую светопропускаемость. Это приводит к очень маленькому полезному сигналу с датчиков и необходимости искать компромисс между ложными срабатываниями и “силой” (читай – площадью) нажатия;

  • Также я допустил небрежность и запитал всю матрицу плат двумя тонкими проводами… Как вы можете догадаться, долго такая сборка не проработала, больше 20А в пике как-никак. Решение простое – подкинуть питание ещё в несколько точек по периметру.

Сопутствующие расходы:

  • Блок питания 5V 150W = 4 560 ₽

  • Raspberry Pi 4B+ = 12 000 ₽

  • Плата расширения CAN = 2 940 ₽

  • USB Type C = 250 ₽

  • Плата аудиоусилителя = 296 ₽

  • Динамики + накладки = 407 ₽

  • Кабель AUX = 274 ₽

  • Разъём питания = 281 ₽

  • Кабель питания = Бесплатно от старого монитора

  • Сборка своими руками = Бесценно

  • Итого: 18 068 ₽

Этап 6: Управляющее ПО на Малинке

Моя любимая часть, моя гордость…

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука

Годом ранее, работая над своим основным проектом Pixel Quest, я к нашему бэкенду на Go подключил Lua интерпритатор. С тех пор все игры нашей сети локаций разрабатываются на Lua.

Для Pixel Quest мы сделали открытую систему разработки игр. Что это значит:

  • во-первых, у нас есть визуальный конструктор игр "Пол–это лава", где можно попрактиковаться в покадровой отрисовке игр;

  • а во-вторых, у нас есть собственная онлайн IDE для разработки игровых сценариев на простом скриптовом языке Lua, который может освоить любой толковый школьник за несколько вечеров, при этом исходный код наших игр публично открыт в репозитории на GitHub, что делает обучение ещё проще.

В свой онлайн редактор для удобного тестирования игр мы добавили вот такую 3D визуализацию:

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

Почему нас сравнивают с Roblox?

Роблокс даёт возможность игрокам самим разрабатывать игры и даже зарабатывать на них, и мы в перспективе хотим сделать что-то похожее. А ещё на ютубе нашу игру “Безопасный цвет” постоянно сравнивают с играми “Color blocks” или “Block party” из Roblox, хотя когда я её разрабатывал, я ещё ничего не знал о Роблоксе...

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

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука

Визуальный покадровый конструктор игр Пол – это лава

Этап 7: Версия 2.0

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

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

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

  • сделал плату размером 4х5 пикселей, чтобы избавиться от “рамки” по краям и получить поле нужного размера 24х15 для совместимости с игровыми комнатами, а также расширить диапазон возможных CAN адресов с 16 до 32, что даст возможность строить столы большего размера;

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука

Нашёл в Китае и протестировал новое более тонкое и более прозрачное оргстекло, которое даёт более чёткий рисунок граней пикселей и увеличивает полезный сигнал с датчиков в три раза, что делает игру более комфортной, а ложные срабатывания сводит к нулю.

Заключение

Pixel Table: от идеи до реализации интерактивного пиксельного стола Опрос, Электроника, Сборка, Raspberry pi, Видео, Длиннопост, Своими руками, Программирование, Игры, Разработка, Alexgyver, Вертикальное видео, Короткие видео, Без звука

Небольшое видео, суммирующее вышесказанное:

Сам прототип с видео сейчас стоит и радует детей на одной из наших локаций, а именно в городе Смоленске.

Ссылки на исходники печатных плат, прошивки под микроконтроллер и другие полезные материалы по проекту можно найти вот в этом телеграм посте (будет обновляться): t.me/pixel_quest/360. Там же в канале будет выкладываться и новая информация по проекту.

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

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

Какие сценарии развития продукта мы видим:

  • Установка в школы программирования или робототехники для обучения детей. Я сам разработчик и сам когда-то посещал подобный кружок программирования, думаю такой яркий стол сможет вызвать дополнительный интерес у ребят к разработке. А тем более возможность прийти поиграть в свою игру на большом пиксельном полу!

  • Установка в виде вендинговых игровых автоматов в ТЦ и для привлечения внимания к нашему основному бизнесу;

  • Размещение на локациях Pixel Quest в качестве дополнительного развлечения;

  • Использование в качестве отладочного стенда для тестирования ПО, игр и различных эффектов в миниатюре.

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

Как вы считаете, в каком направлении больше перспектив?
Всего голосов:
Показать полностью 21 4 1
[моё] Опрос Электроника Сборка Raspberry pi Видео Длиннопост Своими руками Программирование Игры Разработка Alexgyver Вертикальное видео Короткие видео Без звука
17
1
AlexKuprin1208
AlexKuprin1208
1 день назад

Ответ на пост «Мена? Мена»⁠⁠1

Актуалочка)))
Помню, как пытался объяснить своим бабушке с дедушкой, чем занимаюсь, в чем заключается работа в айти, что такое вообще айти... Когда только начинал строить карьеру, остановился на QA Engineer, решил с ними поделиться. Дед до сих пор не понимает, как инженер может ходить без строительных инструментов. Они полностью уверены, что я занимаюсь каким то непотребством...

IT IT юмор Программирование Frontend Видео Вертикальное видео Короткие видео Программист Ответ на пост Текст
4
132
Saitama
Saitama
1 день назад
IT-юмор

Опять env-ы запушили⁠⁠

Опять env-ы запушили IT, Программирование, IT юмор, Скриншот

Вышла ENIGMA AI v.1.1.3 — помощник для IT-собеседований. Подсказывает ответы в реалтайме, невидим при шаринге экрана → enigmai.ru. Подстрахуй себя на собеседовании.

IT Программирование IT юмор Скриншот
30
1
VelStyling
VelStyling
1 день назад
Серия SQL: знакомство

ORDER BY - это как уборка в шкафу. Вещи можно разложить по цвету, по размеру или просто свалить все в кучу⁠⁠

ORDER BY — штука вроде бы простая («отсортируй строки»), но там есть много нюансов, про которые мы просто не помним или не пользуемся.

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

В своем канале На связи: SQL рассказываю про некоторые забытые нюансы языка SQL, особенности и необходимую теорию, чтобы любой начинающий мог свободно познакомиться с этим языком и применить его в дальнейшем для своих задач. Канал создан недавно, с 0 подписчиков, но уже активно наполняется контентом. Подписывайся!

ORDER BY - это как уборка в шкафу. Вещи можно разложить по цвету, по размеру или просто свалить все в кучу Аналитика, Математика, Урок, Эмоциональное выгорание, SQL, Ms SQL, Аналитик, Анализ данных, База данных, Программирование, Длиннопост
  1. Блок с ORDER BY предназначен для сортировки результата выборки.
    По умолчанию сортировка ASC (по возрастанию). Можно явно писать:

ORDER BY age ASC -- от младших к старшим
ORDER BY age DESC -- от старших к младшим

2. Можно сортировать сразу по нескольким столбцам:

ORDER BY country, city

Сначала сортируются страны, внутри них — города.

3. Можно писать не имя, а номер колонки в SELECT:

SELECT name, age
FROM users
ORDER BY 2 DESC; -- сортируем по age

Но это считается «плохим тоном» — лучше явно указывать названия. Хотя мне очень нравится это использовать, особенно, когда в селекте не просто имя столбца, а вычисление.

4. NULL в ORDER BY требует особого внимание.
NULL в разных БД обрабатывается по-разному.

В PostgreSQL:

  • ASC → NULL идут в конце

  • DESC → NULL идут в начале

можно явно писать:

ORDER BY age ASC NULLS FIRST;
ORDER BY age DESC NULLS LAST;

В MySQL и SQL Server правила отличаются:

  • в MySQL NULL всегда считаются «меньше всего» (т.е. идут первыми в ASC).

  • в SQL Server можно управлять через ISNULL()/COALESCE().

В MySQL и SQL Server нельзя использовать NULLS FIRST или NULLS LAST при сортировке,

Для SQL Server используем:

ORDER BY ISNULL(age, 9999) ASC;
ORDER BY COALESCE(age, 9999) ASC;

Здесь NULL мы заменяем на большое число (9999), и оно уходит в конец сортировки по возрастанию.
А если хотим NULL в начало — ставим что-то маленькое, например -1.

Для MySQL есть поведение по умолчанию:

  • При ASC → NULL идут первые

  • При DESC → NULL идут последние

А если нужно наоборот, то делаем хитрость с IS NULL:

ORDER BY age IS NULL, age ASC;

Здесь age IS NULL вернёт 1 для NULL и 0 для обычных значений.
SQL сначала отсортирует по этому условию (0 → 1), а потом уже по age.

5. Можно сортировать не только по полям, но и по функциям.

ORDER BY LENGTH(name) DESC;
ORDER BY purchase_amount * discount;

6. Случайная сортировка - имеет место быть. Но очень "дорога" в использовании на больших объемах.

-- PostgreSQL / SQLite
ORDER BY RANDOM()

-- MySQL
ORDER BY RAND()

Часто случайная сортировка используется при тестировании на небольших объемах.
- хотим показать пользователю случайный товар в магазине
- хотим проверить, как работает приложение, не завися от конкретного порядка записей
- рекомендательные системы: в выдачу добавляем случайный товар, чтобы не зацикливать пользователя только на "популярных" товарах.
- игры или викторины: рандомная выдача вопросов.

7. Есть еще такое понятие как COLLATION (сравнение строк).

ORDER BY учитывает локаль (collation). Поэтому, например, русские буквы могут сортироваться по-разному в разных СУБД:

  • А может идти перед а, или наоборот.

  • Можно явно указать сортировку:

ORDER BY name COLLATE "C" -- по байтовому значению
ORDER BY name COLLATE "ru_RU" -- по русскому алфавиту

Представь, что у тебя есть список имён:
['Елена', 'елена', 'Жанна', 'Анна']

Когда ты пишешь в SQL:

SELECT * FROM users ORDER BY name;

база должна решить:

  • считать ли «Елена» и «елена» одинаковыми?

  • что идёт раньше: «Ж» или «А»?

  • как сравнивать буквы с диакритикой: «é» vs «e»?

Вот именно на эти вопросы отвечает collation.

То есть COLLATION — это как правило сортировки в библиотеке: от него зависит, где именно окажется твоя книга.

То есть, ORDER BY — это не просто «отсортировать», а ещё и про то:

  • куда денутся NULL

  • как сортируются строки (с учётом локали)

  • можно ли сортировать по выражениям или случайно

В моем ТГ канале На связи: SQL я знакомлю новичков с языком SQL и хочу, чтобы те, кто желает познакомиться с анализом данных с легкостью шли в это направление. Присоединяйся!

Показать полностью
[моё] Аналитика Математика Урок Эмоциональное выгорание SQL Ms SQL Аналитик Анализ данных База данных Программирование Длиннопост
0
779
Saitama
Saitama
1 день назад
IT-юмор

BoeingSort⁠⁠

BoeingSort IT, Программирование, IT юмор

Вышла ENIGMA AI v.1.1.3 — помощник для IT-собеседований. Подсказывает ответы в реалтайме, невидим при шаринге экрана → enigmai.ru. Подстрахуй себя на собеседовании.

IT Программирование IT юмор
67
6
APCEHKA
APCEHKA
1 день назад
Серия Сегодня отмечаем..

Поздравляю с Днем тестировщика!⁠⁠

Ежегодно 9 сентября тестировщики программного обеспечения отмечают свой профессиональный праздник — День тестировщика, дата для которого была выбрана не случайно.
9 сентября 1947 года ученые Гарвардского университета, тестировавшие вычислительную машину Mark II Aiken Relay Calculator, нашли мотылька, застрявшего между контактами электромеханического реле.

Поздравляю с Днем тестировщика! Тестирование, Компьютер, Программирование, Памятная дата, Тестировщики, Тестирование по, Праздники, Профессиональный праздник, Программное обеспечение

Mark I Aiken Relay

Проделанная работа требовала описания, и слово было найдено — debugging (дебаггинг, дословно: избавление от насекомого) — так и ныне называется процесс выявления и устранения багов (bugs) — причин сбоя работы компьютера. А само слово тестировщик произведено от английского слова test — проверка, испытание.
Тестировщик программного обеспечения (ПО) — специалист, который проводит тестирование ПО, с целью обеспечения и контроля качества программного продукта или информационной системы.

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

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

Источник

Показать полностью 1
Тестирование Компьютер Программирование Памятная дата Тестировщики Тестирование по Праздники Профессиональный праздник Программное обеспечение
0
20
empenoso
empenoso
1 день назад
Программирование на python

Сделал Excel умнее: теперь он сам получает котировки с сайтов⁠⁠

Многие частные инвесторы ведут свои портфели в Excel: это удобно, бесплатно и всё — на вашем компьютере. Но у Excel есть слабое место: он не умеет напрямую «разговаривать» с современными сайтами. Если нужно автоматически подтянуть котировку с конкретной страницы в интернете, встроенные веб‑функции часто не справляются: они не умеют обходить современные защиты.

Сделал Excel умнее: теперь он сам получает котировки с сайтов Python, Программирование, Автоматизация, IT, Длиннопост

В этой статье я покажу простой и надёжный способ заставить Excel получать котировки практически с любого сайта — на примере курса USD/RUB с investing.com. Идея не требует глубоких технических знаний: вместо того чтобы пытаться что-то делать со страницей в Excel, мы используем на своём компьютере небольшой скрипт‑посредник. Excel просто запрашивает у него одно число, а посредник уже «ходит» на сайт, берёт данные, при необходимости обрабатывает их и возвращает в понятном для Excel виде.

Короткая схема работы:

Сделал Excel умнее: теперь он сам получает котировки с сайтов Python, Программирование, Автоматизация, IT, Длиннопост
Сделал Excel умнее: теперь он сам получает котировки с сайтов Python, Программирование, Автоматизация, IT, Длиннопост

Приведённый далее Python‑скрипт (набор инструкций для этого «посредника») — это учебный пример: он предназначен исключительно для демонстрации принципа работы с API и веб‑технологиями. Я не призываю и не рекомендую использовать его для обхода правил каких‑либо сайтов.

Все исходные файлы проекта доступны в репозитории на GitHub.

Почему Excel «из коробки» больше не справляется?

Раньше сайты были простыми — статический HTML, и достаточно было послать GET‑запрос (когда вы вводите адрес сайта в браузере и нажимаете Enter, ваш браузер отправляет GET‑запрос) и прочитать нужный кусок страницы. Сегодня веб — это чаще не страницы, а полноценные приложения: данные подгружаются отдельно через JavaScript, содержимое формируется в браузере и может отсутствовать в исходном HTML. Простая формула Excel этого не видит — она получает «скелет» страницы, а не финальный контент.

Сделал Excel умнее: теперь он сам получает котировки с сайтов Python, Программирование, Автоматизация, IT, Длиннопост

Плюс появились надёжные системы защиты: Cloudflare и их аналоги анализируют трафик и блокируют подозрительные запросы. Запрос из Excel выглядит «механически» — без cookie, без поведенческих отпечатков, без выполнения JS — и его часто сразу отбрасывают или ставят на проверку CAPTCHA.

Нам нужен инструмент, который умеет вести себя как настоящий браузер: выполнять JS, держать сессию, ставить нужные заголовки. Именно таким инструментом станет локальный скрипт‑посредник — он «ходит» на сайт как человек/браузер, получает чистые числа и возвращает их Excel в простом виде.

Архитектура нашего решения: строим мост между Excel и вебом

Excel — наш «заказчик». Он делает простой запрос к локальному адресу http://localhost:8000/usd_rub/rate и получает готовое значение. Ему не нужно знать про JavaScript, сессии или CAPTCHA — только чистый текст или XML для ячейки.

Сделал Excel умнее: теперь он сам получает котировки с сайтов Python, Программирование, Автоматизация, IT, Длиннопост

Python + FastAPI — «умный посредник». Лёгкий локальный сервер принимает запрос от Excel, применяет стратегию получения данных, обрабатывает ответ и отдаёт результат в удобном формате. FastAPI даёт быстрый и документированный интерфейс.

requests и cloudscraper — наши «вездеходы». requests надёжен для простых запросов; cloudscraper помогает обходить защиту Cloudflare, имитируя поведение браузера. Сначала пробуем простой запрос, при ошибке переключаемся на cloudscraper и возвращаем то, что Excel «съест».

Итог: прозрачный локальный мост, скрывающий сложности веба и возвращающий котировки в Excel.

Готовим рабочее место и Excel получает данные

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

Сделал Excel умнее: теперь он сам получает котировки с сайтов Python, Программирование, Автоматизация, IT, Длиннопост

https://github.com/empenoso/excel-data-bridge

Шаг 1: Создание рабочего пространства

Для начала создайте на вашем компьютере отдельную папку, например, excel-data-bridge. В ней мы будем хранить все наши файлы. Это поможет избежать путаницы и обеспечит корректную работу скриптов.

Поместите в эту папку четыре файла, которые были предоставлены ранее:

  1. investing_proxy.py — наш основной скрипт‑посредник.

  2. requirements.txt — список необходимых Python‑библиотек.

  3. 1_install_requirements.bat — установщик зависимостей.

  4. 2_start_server.bat — запускатор нашего локального сервера.

Шаг 2: Установка необходимых компонентов

Сделал Excel умнее: теперь он сам получает котировки с сайтов Python, Программирование, Автоматизация, IT, Длиннопост

Прежде чем наш скрипт сможет работать, ему нужны «помощники» — специальные библиотеки Python. Файл 1_install_requirements.bat сделает всю работу за вас.

Просто дважды кликните по файлу 1_install_requirements.bat. Откроется командная строка, где вы увидите процесс установки. Скрипт сначала проверит, установлен ли у вас Python, а затем скачает и установит все библиотеки из файла requirements.txt. По завершении вы увидите сообщение «Установка завершена!». Это означает, что всё готово к следующему шагу.

Шаг 3: Запуск локального сервера

Сделал Excel умнее: теперь он сам получает котировки с сайтов Python, Программирование, Автоматизация, IT, Длиннопост

Теперь, когда все компоненты установлены, запустим наш сервер. Для этого дважды кликните по файлу 2_start_server.bat.

Снова откроется окно командной строки, но на этот раз оно не закроется. Вы увидите сообщения о запуске сервера, а также список доступных адресов (endpoints), по которым Excel сможет обращаться за данными. Пока это окно открыто, ваш сервер работает и готов принимать запросы от Excel. Если вы закроете это окно, сервер остановится.

Шаг 4: Получение данных в Excel

Сделал Excel умнее: теперь он сам получает котировки с сайтов Python, Программирование, Автоматизация, IT, Длиннопост

Откройте Microsoft Excel и выберите любую ячейку. Теперь мы используем встроенную функцию ВЕБСЛУЖБА (WEBSERVICE), которая умеет делать запросы по указанному адресу.

  1. Чтобы получить курс USD/RUB, введите в ячейку следующую формулу и нажмите Enter:
    =ВЕБСЛУЖБА("http://localhost:8000/usd_rub/rate")

  2. Чтобы получить дату и время котировки, введите в соседнюю ячейку:
    =ВЕБСЛУЖБА("http://localhost:8000/usd_rub/datetime")

Excel отправит запрос на ваш локальный сервер, тот, в свою очередь, сходит на investing.com, получит данные и вернёт их в ячейку.

Сделал Excel умнее: теперь он сам получает котировки с сайтов Python, Программирование, Автоматизация, IT, Длиннопост

Это просто пример - как можно модифицировать под себя?

Это лишь базовый пример, а не готовый универсальный инструмент. Скрипт показывает принцип: Excel делает простой запрос, а посредник достаёт данные с сайта и возвращает результат. Но у каждого инвестора свои задачи: кому‑то нужны котировки акций, кому‑то — нефть или золото, кто‑то захочет загружать таблицы. Именно поэтому код придётся адаптировать под конкретный сайт, формат ответа и даже частоту обновлений. Главное — вы держите в руках рабочий шаблон, который легко модифицировать под себя.

Заключение

Мы не просто решили локальную задачу получения котировок — мы освоили мощный подход к интеграции Excel с современным вебом. Создав локальный API‑посредник, мы научили старый добрый Excel говорить на языке современных веб‑приложений, обходя их защиты и получая актуальные данные.

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

Автор: Михаил Шардин
🔗 Моя онлайн‑визитка
📢 Telegram «Умный Дом Инвестора»

9 сентября 2025

Показать полностью 10
[моё] Python Программирование Автоматизация IT Длиннопост
5
1
Adamag
Adamag
1 день назад

Пакетный сжиматель изображений⁠⁠

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

Пакетный сжиматель изображений Фриланс, IT, Сервис, Автоматизация, Программирование

Источник: Пакетное уменьшение изображений

Можно просто пересохранить с множителем 1, добавив шакалов. А можно убавить размер по множителю. Мне понадобилось сразу всё и ещё пачкой. И что б в архив упаковывало, всё работает, всё прекрасно. Моя цель выполнена. Подумал что может кому ещё понадобится, решил "чего добру зря пропадать". По доброй традиции что б всё не бесплатно было, добавил рекламы, и отправил себе на хостинг.

Кому понадобиться, милости прошу пользуйтесь.

P.S. да, сервис сделал что бы голые фотки ваши коллекционировать Нет, ничего нигде не хранится, никуда не передаётся, больно дорого будет хранить чьи-то картинки в больших количествах.

Показать полностью 1
[моё] Фриланс IT Сервис Автоматизация Программирование
21
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии