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

Бильярд 3D: Русский бильярд

Симуляторы, Спорт, Настольные

Играть

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

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

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

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

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

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

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

Программист + Разработка

С этим тегом используют

Программирование IT IT юмор Юмор Картинка с текстом Работа Gamedev Инди игра Инди Игры Unity Все
801 пост сначала свежее
4
thecodemedia
thecodemedia
1 день назад

Пояснительная бригада: сколько нужно тестеров⁠⁠

Пояснительная бригада: сколько нужно тестеров Разработка, Программист, Юмор, IT юмор, Мы Миллеры, Мемы

Один разработчик говорит, мол, у нас только 5 тестеров для проверки продукта. Другой говорит: «Ого, пять? У нас их только два». Третий говорит: «У нас и тестеров нет, сами разработчики тестируют». А в команде четвёртого программу не тестируют вообще, а сразу выкладывают код на боевой сервер и смотрят, что поломается. Ирония в том, что, сколько бы человеческих ресурсов ни было, их всегда будет мало.

Показать полностью 1
Разработка Программист Юмор IT юмор Мы Миллеры Мемы
3
37
sdelanounas
sdelanounas
Топовый автор
Лига программистов
Серия СВО
12 дней назад

Такая работа⁠⁠

Между постами о развитии России, иногда хочется поделиться личными достижениями, ведь все же мое главное дело сейчас не "Сделано у нас", и 90% своего времени я трачу на задачи связанные со службой. И порой иногда удается сделать что-то, о чем хочется рассказать, и что скоро будет наводить ужас на врага.

Вообще, началось всё с довольно тривиальной задачи. Я давно хочу начать делать FPV дроны для сбросов. Но не для этих пукалок ВОГов, а для нормальных таких сбросов, по взрослому. И тут нам волонтеры подогнали 4 крупных FPV дрона. И делов-то - приладить туда камеру поворотную, чтобы вниз могла смотреть, и сброс на сервоприводе. Пустяки.

Такая работа FPV, Arduino, Программирование, Программист, Разработка, Длиннопост

Кратко расскажу как это вообще делается в принципе. Обычно у полетного контроллера (FC) есть 8 выводов для моторов, из них 4 занято, но целых 4 свободно, и на них можно повесить сервоприводы, переназначив туда пины контроллера. Тогда они начинают работать как ШИМ (Широтно-импульсная модуляция - регулирование основанное на подаче на электродвигатель импульсов напряжения с фиксированной амплитудой, но различной длительностью). Первым делом я так и сделал. Но оказалось не всё так просто.

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

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

Во-вторых, нельзя поменять направление серво. В моем случае получилось так, на верхнее положение мой сброс открыт, на нижнее он закрыт. А мне надо наоборот. И выход - физически переделать сброс, перевернув сервопривод. Там, кстати, на Гитхабе целое обсуждение этого поведения Betaflight, и в новой версии 4.6 они даже что-то исправили, но она пока не вышла. Да и делать это надо через smix reverce, а для этого... короче это не подходит, и все равно не решает проблему 1.

В-третьих, после долгих манипуляций FC просто сгорел нахрен. Вместе с ESC.

Я достал из своих запасов контроллер Mamba F405 MK2 - довольно популярный и качественный FC. Все припаял, захожу в CLI, ввожу resource и вижу... что у него только 4 пина под моторы, а не 8 как обычно. Свободных нет.

Такая работа FPV, Arduino, Программирование, Программист, Разработка, Длиннопост

Да где наша не пропадала, там есть 2 LED, подцепимся к ним... но это не работает, так как эти пины не связаны с таймером, и на них ШИМ не заводится.

Короче, оказалось что у Mamba вообще нет ни одного ШИМ выхода, серво там цеплять вообще не к чему. Точнее там есть CAM_CONTROL, но физически площадку на плате я так и не нашел, в распиновке она не указана. Да и один ШИМ не спасет отца русской демократии.

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

Короче, тут я вспомнил про Arduino. Это решало вообще все вопросы. Во-первых, ШИМ там 6 штук (ну то есть можно подключить 6 сервоприводов). Во-вторых, программно можно их заставить делать что угодно, работать как угодно и в любую сторону. И легко повесить их на один AUX.

Такая работа FPV, Arduino, Программирование, Программист, Разработка, Длиннопост

Вопрос в том, как из FC прочитать значение AUX из Arduino, чтобы узнать положение переключателя. И это оказалось довольно несложно. Я давно задумывался, что означает переключатель в первом столбце на вкладе "Порты" в Betafliht. Что за "Конфигурация и MSP" такая.

Такая работа FPV, Arduino, Программирование, Программист, Разработка, Длиннопост

Оказалось, что он нужен для того, чтобы на этом UART включить протокол MSP (MultiWii Serial Protocol). Он позволяет общаться с FC извне, многое о нем узнавать, и даже им управлять через стандартный порт UART.

У MSP есть команда MSP_RC (105) которая возвращает значения AUX. Его надо распарсить, и вытащить из него в моём случае значение AUX5. И дальше простая логика:

AUX5 = 1000...1400 - камера прямо - сброс закрыт

AUX5 = 1400...1800 - камера вниз - сброс закрыт

AUX5 = 1800...2000 - камера вниз - сброс отрыт

Такая работа FPV, Arduino, Программирование, Программист, Разработка, Длиннопост

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

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

Применение Arduino открывает очень широкие возможности! Можно организовать любую логику работы нескольких серво, и даже можно реализовать управление дроном - через MSP можно управлять стиками, а значит наводить птичку. Понятно, что Arduino не потянет компьютерное зрение и распознавание целей, но для этого можно использовать уже что-то более мощное, Raspberry Pi, например, главное принцип, который мне теперь понятен.

А еще я на дроне реализовал переключение каналов видео-передатчика 1.2ГГц c пульта по нажатию кнопки, при том, что программное управление у этого видеопередатчика (через протоколы Trump или SmartAudio) не предусмотрено. Но это уже другая история.

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

Показать полностью 5
[моё] FPV Arduino Программирование Программист Разработка Длиннопост
12
10
thecodemedia
thecodemedia
13 дней назад

Пояснительная бригада: разница между TCP и UDP⁠⁠

Пояснительная бригада: разница между TCP и UDP IT, Программирование, Программист, Разработка, IT юмор, Python

Если вы читаете эти строки, значит, вы точно использовали какой-то из протоколов сетевого взаимодействия. Протокол сетевого взаимодействия — это такая договорённость, как будут выглядеть сообщения между компьютерами, как указания «Откуда», «От кого», «Куда», «Кому». Вот ровно так же и в компьютерных сообщениях: на каждом запросе и пакете данных есть эта информация.

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

TCP-протокол по аналогии с почтой можно представить так: нам нужно отправлять три тома «Войны и мира», для этого нужно не менее 200 конвертов. Но тут свои коррективы вносит «Почта России»: какие-то из писем уедут на сортировочный пункт в Хабаровск, а какие-то из писем и вовсе могут потеряться в кипах посылок.

Мы нумеруем наши конверты, чтобы точно знать, какие мы уже получили, а какие надо подождать или попросить отправить заново. Конверты уходят, получатель получает какую-то их часть. Потом он звонит нам: «Отправь заново конверты 12, 48 и 110, они не дошли». Мы отправляем. Получатель снова звонит: «Вот, теперь всё получил».

А вот протокол UDP — это протокол без гарантии: конверты просто улетели. Что дошло,  то дошло. Можно представить так: мы попросили рассказать «Войну и мир» здесь и сейчас. Рассказывающий будет забывать большие куски повествования, где-то будет сокращать, но в целом суть истории мы узнаем и требовать дословного пересказа не будем.

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

Напоследок анекдот про эти протоколы:

  • Я знаю неплохой анекдот про UDP, но не факт, что он до вас дойдёт.

  • Я знаю неплохой анекдот про TCP, но если он до вас не дойдёт, то я повторю

Показать полностью 1
IT Программирование Программист Разработка IT юмор Python
3
thecodemedia
thecodemedia
14 дней назад

Пояснительная бригада: мем про защитные конструкции⁠⁠

Пояснительная бригада: мем про защитные конструкции IT, Программирование, Программист, Разработка, IT юмор, Backend, Python

Комментирует Паша Вавилин, наставник на курсе по Python:

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

Теперь время работы самого начинающего джуниора стоит в разы дороже времени работы обычного компьютера. Компьютеры подешевели, время работы программиста подорожало. Как быстро запустить проект? Ведь не оплачивать же месяцы работы программисту за то, что будет работать пару часов! Давайте научим компьютер обнаруживать и обрабатывать ошибки, назовём это эксепшенами, тогда можно будет выполнять код, окружая его защитными конструкциями, типа «попробуй сделать это действие, если оно возбудит ошибку доступа к файлу или ошибку подключения к сети, то будем обрабатывать такую ситуацию». Класс! Что, это долго? Ну не знаю, давайте тогда просто обернём всё конструкцией «выполни всю программу, если что-то случится, то ок». Не будет детализации, какая конкретно ошибка и где произошла? Главное всё работает! Вообще всё работает, чего вам ещё надо!»

Показать полностью 1
IT Программирование Программист Разработка IT юмор Backend Python
4
thecodemedia
thecodemedia
15 дней назад

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

Пояснительная бригада: экран программистов разных уровней Программирование, Программист, Разработка, Python, IT, IT юмор

Поясняет Максим Чеченев, наставник на курсе по веб-разработке:

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

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

— Джуниор уже понимает, что нужен редактор кода и тратит свой день, в основном, работая с кодом. Но еще мало что знает про то,  как настроить редактор кода.

— Мидл занят всем тем же — пишет код. Но уже понимает, как настройки редактора кода влияют на него. Например, использует темную тему интерфейса.

— Сеньор же уже меньше пишет код, а больше принимает участие в длинных рабочих звонках. На экране открыт созвон. А за ним, скорее всего, есть еще один.»

Показать полностью 1
Программирование Программист Разработка Python IT IT юмор
0
3
user10424664
user10424664
15 дней назад

Как переносить «висячие» слова на новую строку с помощью JavaScript⁠⁠

Как переносить «висячие» слова на новую строку с помощью JavaScript Разработка, Программирование, Javascript, Типографика, Uxui, Ui, Ux, Frontend, Верстка, IT, Программист, Telegram (ссылка), Длиннопост

изображение сгенерировано в ChatGPT

В типографике существует понятие “висячих слов” — это короткие слова (предлоги, союзы, местоимения), которые остаются в конце строки при переносе текста. Такие переносы нарушают удобочитаемость и эстетику текста. В русской типографике принято избегать переносов после коротких слов длиной 1-2 символа.

Решение проблемы с помощью JavaScript

Для автоматического предотвращения переносов после коротких слов можно использовать JavaScript, который заменяет обычные пробелы на неразрывные пробелы ( ) после определённых слов.

// Перенос висячих слов

document.addEventListener('DOMContentLoaded', function () {

// 1. Находим все текстовые элементы, которые нужно обработать

const textElements = document.querySelectorAll('p, span, h1, h2, h3, h4, h5, h6, li, dt, dd');

// 2. Список предлогов и союзов, которые нельзя переносить

const prepositions = ['в', 'без', 'до', 'из', 'к', 'на', 'по', 'о', 'от', 'перед', 'при', 'через', 'для', 'с', 'у', 'и', 'а', 'но', 'да', 'или', 'либо', 'что', 'чтобы', 'как', 'когда', 'если', 'вы'];

// 3. Функция для обработки каждого элемента

textElements.forEach(element => {

// Получаем все текстовые узлы внутри элемента

const walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT);

const textNodes = [];

while (walker.nextNode()) {

textNodes.push(walker.currentNode);

}

// Обрабатываем каждый текстовый узел

textNodes.forEach(textNode => {

let text = textNode.nodeValue;

// Заменяем пробелы после коротких слов на неразрывные пробелы

text = text.replace(/(^|\s)([а-яё]{1,2})\s/gi, (match, prefix, word) => {

// Проверяем, есть ли слово в списке предлогов

if (prepositions.includes(word.toLowerCase())) {

return prefix + word + '\u00A0'; // \u00A0 - это неразрывный пробел

}

return match;

});

// Обновляем содержимое текстового узла

textNode.nodeValue = text;

});

});

});


Разбор кода по частям


1. Инициализация скрипта

document.addEventListener('DOMContentLoaded', function () {

Код выполняется после полной загрузки DOM-дерева страницы. Это гарантирует, что все элементы будут доступны для обработки.


2. Поиск текстовых элементов

const textElements = document.querySelectorAll('p, span, h1, h2, h3, h4, h5, h6, li, dt, dd');

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


3. Список коротких слов

const prepositions = ['в', 'без', 'до', 'из', 'к', 'на', 'по', 'о', 'от', 'перед', 'при', 'через', 'для', 'с', 'у', 'и', 'а', 'но', 'да', 'или', 'либо', 'что', 'чтобы', 'как', 'когда', 'если', 'вы'];

Массив содержит наиболее распространённые предлоги, союзы и другие служебные слова русского языка, после которых нежелательны переносы.


4. Обход текстовых узлов

const walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT);

TreeWalker позволяет пройти по всем текстовым узлам внутри элемента, включая вложенные теги. Это важно, так как текст может содержать форматирование (, и т.д.).


5. Регулярное выражение для замены

text = text.replace(/(^|\s)([а-яё]{1,2})\s/gi, (match, prefix, word) => {

Регулярное выражение ищет:
· (^|\s) — начало строки или пробел (группа 1);
· ([а-яё]{1,2}) — слово из 1-2 русских букв (группа 2);
· \s — пробел после слова;
· Флаги gi означают глобальный поиск без учёта регистра.


6. Условная замена

if (prepositions.includes(word.toLowerCase())) {

return prefix + word + '\u00A0'; // \u00A0 - это неразрывный пробел

}

Если найденное короткое слово есть в списке предлогов, обычный пробел заменяется на неразрывный пробел (\u00A0). Это предотвращает разрыв строки между предлогом и следующим словом.


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

После выполнения скрипта текст “Я иду в магазин” не будет разорван на строки как “Я иду в” и “магазин”. Предлог “в” всегда останется на одной строке со следующим словом благодаря неразрывному пробелу.

Настройка скрипта

Вы можете легко адаптировать скрипт под свои нужды:
· Добавить новые селекторы в querySelectorAll() для обработки других элементов;
· Расширить список слов в массиве prepositions;
· Изменить длину слов в регулярном выражении с {1,2} на другое значение;
· Добавить обработку других языков, изменив диапазон символов в регулярном выражении.

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

P.S.: это JS решение иногда не во всех случаях срабатывает + бывают сложности с адаптивностью: на смартфонах может переносить совсем не так, как хотелось бы, текст может «уехать» за пределы контейнера, нужно будет «фиксить» эти моменты в CSS.


Разработчики, а как вы решаете вопрос переноса «висячих» слов?

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

Показать полностью 1
Разработка Программирование Javascript Типографика Uxui Ui Ux Frontend Верстка IT Программист Telegram (ссылка) Длиннопост
13
11
thecodemedia
thecodemedia
16 дней назад

Пояснительная бригада: мем про SQL⁠⁠

Пояснительная бригада: мем про SQL Программирование, IT, Программист, IT юмор, Разработка, Python, SQL

Объясняет Паша Вавилин, наставник на курсе по Python:

«Язык запросов SQL довольно лаконичный и простой, при этом очень мощный. Единственная проблема с этим языком запросов — он верит, что автор запроса умён и в целом знает синтаксис SQL. Собственно, поэтому лучшее, что вы увидите при ошибке, — это сообщение вида „у вас ошибка в SQL“. И ваш запрос. И… всё. Ну ты ведь умный и знаешь SQL, разбирайся сам, что ты!»

Показать полностью 1
Программирование IT Программист IT юмор Разработка Python SQL
7
18
zinger111
16 дней назад

Ответ l.smirnov в «Пояснительная бригада: получаем банан»⁠⁠2

Поздравляю, вы написали хуевый код на Джаве )
Никогда такого не было пиздеж, каждый первый спициалист с скиллбокса не даст соврать и вот опять!
Ну все, Джава мертва, старый унылый кусок говна, пора выкидывать, ведь тупой рандом написал на ней говно...


Но давайте, раз уж мы тут ниибать специалисты, подумаем еще 2 минуточки, над этим ниибически ахуительным тезисом "ахахха язык_название_1 полнае гавно".
Попробуем так сказать в анализ, логику, экстраполяцию даже, не побоюсь этого сложного слова.

Можно ли написать говно на ЛЮБОМ языке?
Отвечает эксперт(я): ага, ващще изи. Ну тоесть гдето сложновато, так как некоторые языки и их инструментарий будут упорно препятствовать, но бля - была бы цель!

Хммммм, а можно ли написать красиво на ЛЮБОМ языке?
Опять отвечает иксперт(я): ну, это конечто блять уметь надо, но вообще - да!
Все языки существуют для решения определённых проблем.
Некоторые узкоспециализированны, и красивые решения там требуют таки навыков, понимания области применения, и опыта.
Но - сделать красиво, и местами элегантно - можно на любом языке. Даже (прости госпади) на Руби.

Я уже устал расписывать что тот же JavaScript (над которым ржут тупорылые неумехи более десятка лет, и который конечно нонче более ускоспециализирован чем его, хммм, скажем для простоты терминов "старший брат" TypeScript) можно и "типизировать", и писать надежно, модульно, и даже красиво. БЫЛО БЫ УМЕНИЕ, ДА ЖЕЛАНИЕ. Да и php, второй по цитируемости в шуточкаж долбаебами язык - уже давно умеет и в типизацию, и вообще во все на свете. И позволяет создавать реально красивый код.
Но - поток идиотиков, сравнивающих вот эти пальцы (рдни языки) с жопами (другие языки), не разбирающихся ни в отм ни в другом - он блять неисчерпаем...

А по поводу конкретного примера из поста, на который я отвечаю - мне уже даже лень расписывать НАСКОЛЬКО чувак нихуя не понял ни в Джаве, ни в конкретно этой, простой в принципе иерархии классов, ни блять даже в самом ООП...

К чему я все это (ДА НЕ ПЕЧЕТ У МЕНЯ!11!!)?

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

Вам не стыдно?

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