Сообщество - TECHNO BROTHER

TECHNO BROTHER

2 018 постов 13 454 подписчика

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

98
TECHNO BROTHER

Ретропонедельник №210. 0,25ГД-III

У нас нова радиоточка в виртуальном музее советской бытовой техники. Она не имеет своего имени, и обозначается просто 0,25ГД-III.

Ретропонедельник №210. 0,25ГД-III Электроника, Техника, Сделано в СССР, Бытовая техника, Раритет, Виртуальный музей, Радиоточка, Длиннопост

Эту радиоточку мне прислал товарищ, у него связано с ней много воспоминаний. Я ее отмыл, заклеил трещину и показываю вам.

Ретропонедельник №210. 0,25ГД-III Электроника, Техника, Сделано в СССР, Бытовая техника, Раритет, Виртуальный музей, Радиоточка, Длиннопост

Абонентский громкоговоритель «0,25-ГД–III» выпускался Ленинградским государственным заводом радиоизделий с 1957 по 1963 годы включительно. Громкоговоритель не имел какого-то другого наименования, как впрочем о предыдущие изделия завода, кроме указанного в маркировке типа, был стандартным абонентским громкоговорителем 3-го класса и предназначался для сети проводного вещания с напряжением 30 вольт. Основная часть громкоговорителей производилась в стандартном тёмно-коричневом цвете и почти всегда комплектовалась задней стенкой тёмно-серого или чёрного цвета, на которую наклеивалась цветная бумажная этикетка с данными. Аппараты комплектовались разными по рисунку и по цвету радио-тканями. На ручке регулировки громкости имелся логотип завода-изготовителя в виде стилизованной буквы «Р». Размеры громкоговорителя 190х160х90 мм.

Ретропонедельник №210. 0,25ГД-III Электроника, Техника, Сделано в СССР, Бытовая техника, Раритет, Виртуальный музей, Радиоточка, Длиннопост
Ретропонедельник №210. 0,25ГД-III Электроника, Техника, Сделано в СССР, Бытовая техника, Раритет, Виртуальный музей, Радиоточка, Длиннопост

В интернете можно найти неповрежденную этикетку.

Ретропонедельник №210. 0,25ГД-III Электроника, Техника, Сделано в СССР, Бытовая техника, Раритет, Виртуальный музей, Радиоточка, Длиннопост
Ретропонедельник №210. 0,25ГД-III Электроника, Техника, Сделано в СССР, Бытовая техника, Раритет, Виртуальный музей, Радиоточка, Длиннопост
Ретропонедельник №210. 0,25ГД-III Электроника, Техника, Сделано в СССР, Бытовая техника, Раритет, Виртуальный музей, Радиоточка, Длиннопост
Ретропонедельник №210. 0,25ГД-III Электроника, Техника, Сделано в СССР, Бытовая техника, Раритет, Виртуальный музей, Радиоточка, Длиннопост
Ретропонедельник №210. 0,25ГД-III Электроника, Техника, Сделано в СССР, Бытовая техника, Раритет, Виртуальный музей, Радиоточка, Длиннопост
Ретропонедельник №210. 0,25ГД-III Электроника, Техника, Сделано в СССР, Бытовая техника, Раритет, Виртуальный музей, Радиоточка, Длиннопост

Меня снова спас @AthosLaFere обработав фото.

Ретропонедельник №210. 0,25ГД-III Электроника, Техника, Сделано в СССР, Бытовая техника, Раритет, Виртуальный музей, Радиоточка, Длиннопост
Ретропонедельник №210. 0,25ГД-III Электроника, Техника, Сделано в СССР, Бытовая техника, Раритет, Виртуальный музей, Радиоточка, Длиннопост
Показать полностью 11
250
TECHNO BROTHER

Про обогреватели. Часть 3

Продолжаем серию постов про бытовые обогреватели. (Часть 1 часть 2) Начнем разговор с пожарной безопасности.

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

  1. Не включаем обогреватели в удлинители, переноски, тройники и прочие потенциально опасные электроизделия. Идеально — включать обогреватель в отдельную розетку, до которой идёт честный медный кабель сечением 2,5 мм², защищённый автоматом B16. С удлинителями в магазинах беда полная, что даже пришлось писать отдельный пост, мне попадались даже изготовленные из алюминия, крашенного под медь.

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

  3. Из второго пункта очевидным следует, откуда моя любовь к приборам в МЕТАЛЛИЧЕСКИХ корпусах. Да, они некрасивые и неказистые, но при аварийной ситуации они способны локализовать внутри себя раскалённые докрасна куски, бывшие контактами или элементами конструкции. Приборы с пластиковыми корпусами полностью полагаются на надёжность встроенных термопредохранителей.

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

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

  6. Нежелательно использовать приборы, не способные длительное время рассеивать свою полную мощность (этим грешат масляные радиаторы). Если по какой-то причине контакты термостата слипнутся, а такое редко, но встречается, то прибор будет работать на всю мощность все время, пока его не выключат. И если обогреватель неудачной конструкции, а тем более немного запылён, то он может начать перегреваться: пластиковый корпус начнёт плавиться, масло вскипать, раздувая корпус, и так далее.

Про термостаты


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

Про обогреватели. Часть 3 Бытовая техника, Техника, Обогреватель, Ликбез, Научпоп, Длиннопост

Такие термостаты широко используются в технике — их можно увидеть, например, в утюгах: именно они время от времени громко щёлкают. Именно из-за их широкого применения они массовые и дешёвые.

Основные минусы:

  1. Контакты искрят и могут иногда отгорать, или наоборот свариваться намертво.

  2. Термостат совмещён с чувствительным элементом, поэтому регулирует температуру себя, находясь внутри обогревателя. То есть в помещении может быть, к примеру, от +16 до +25, зато внутри обогревателя будут стабильные +30.

  3. Реализуется примитивный закон управления — температура упала ниже заданного значения — включаем обогреватель. Температура стала выше заданного значения (+гистерезис) — отключаем. В итоге температура циклически колеблется около заданного значения. Если тепловая инерция велика, то даже после отключения термостата температура продолжит расти некоторое время, превысив целевую.


Как же побороть эти недостатки? Хороший электронный термостат должен иметь:

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

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

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


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

В рекламных обзорах часто манипулятивно указывается, что преимущество электронного термостата — точность, ведь он позволяет на табло указать целевую температуру до десятых долей градуса. Стоит помнить, что точность и разрешающая способность — вещи разные, а об алгоритме работы, непосредственно влияющей на точность удержания температуры, реклама не говорит. В итоге большинство встроенных в приборы дорогих электронных термостатов с экранчиком, Wi-Fi и т.п. — по факту барахло с реле, которые поддерживают температуру с большой погрешностью, что приводит к повышенным энергопотерям в моменты перерегулирования. Более того, задача обогревателя — создать комфортную температуру. Точно так же, как и у смесителя в ванной: мы убавляем температуру, если горячо, и добавляем — если холодно, пока не найдём комфортное значение. Нам не важно, это 21,15 °C или 22,5 °C, — важно, чтобы выбранная температура поддерживалась стабильно, а не то, какую цифру показывает экран термостата или риска на крутилке.

Про обогреватели. Часть 3 Бытовая техника, Техника, Обогреватель, Ликбез, Научпоп, Длиннопост

Поэтому скептически относитесь к «инновационному энергосберегающему цифровому термостату с выходом в интернет за +100500 денег», вы всегда можете включить ЛЮБОЙ электрический обогреватель через внешний термостат и настроить его как заблагорассудится.

▍ «Инверторные» обогреватели


Не могу умолчать об очередном шедевре маркетологов — «Инверторные конвекторы».

Есть «инверторы» — приборы, преобразующие переменный ток в постоянный, с изменением напряжения. Инверторами также называют приборы для получения переменного тока из постоянного, тоже частенько с изменением напряжения. (Сам термин «инвертор» — это калька с англоязычного термина, и я как инженер каждый раз вздрагиваю от его применения, поскольку он строго не определён и может означать в голове говорящего что угодно). Инверторные сварочные аппараты все видели — маленькие и мощные, по сравнению с классическими большими и тяжелыми трансформаторными.

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

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

Ирония в том, что начинка инверторных и неинверторных моделей конвекторов идентична. Мощность нагревателя регулируется путем широтно-импульсной модуляции с большим периодом. Если каждые 10 сек включать обогреватель только на 2 сек, это эквивалентно тому, как если бы он все время работал на 20%. Это не какая-то сверхсложная технология, любой промышленный ПИД терморегулятор это умеет.

Более того, любой обогреватель можно сделать «инверторным», просто использовав внешний промышленный терморегулятор, например мегапопулярный REX-C100.

Общие заметки по энергосбережению


Всем хочется экономить, и отопление не исключение. Обогреватели имеют 100% КПД преобразования электричества в тепло — оно всё останется внутри помещения. Поэтому нет разницы, каким обогревателем вы пользуетесь, если им пользуетесь как основным источником тепла в зимний период. Счета за электроэнергию зависят только от величины тепловых потерь помещения через стены, пол, потолок, окна и вентиляцию. Поэтому когда я слышу про «энергосберегающий обогреватель» у меня дёргается глаз — это такой же оксюморон как «сухая вода» или «безалкогольная водка». Как же мы можем повлиять на расход электроэнергии при постоянном отоплении?

  1. Мы можем экономить, уменьшив температуру в помещении, так как тепловой поток через стены зависит от разницы температур внутри и снаружи. Подкрутив термостат в помещении с +25 °C до +21 °C при наружной температуре –20 °C, можно сэкономить порядка 9 %. Или, например, мастерскую можно прогревать только до +15 °C, если работа в ней предполагает энергичное движение. Также влияет неравномерность распределения теплого воздуха. Если потолок высокий, то для комфорта человек выкрутит на термостате +23С, а под потолком скопится горячий воздух на все +40 усиленно теряя тепло через потолок.

  2. Использовать умный термостат с таймером: снижать температуру в помещении, например, до +16 °C, пока все на работе, а затем прогревать его обратно за час до возвращения домой. Или, например, понижать температуру в других комнатах, пока все спят в спальне. В те моменты, когда температура снижена, теплопотери через стены тоже уменьшаются.

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

Про обогреватели. Часть 3 Бытовая техника, Техника, Обогреватель, Ликбез, Научпоп, Длиннопост

Сам картинку рисовал, интересно где украденной всплывет.

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

  2. Можно уменьшить теплопотери через вентиляцию. Помните, как заклеивали щели в деревянных рамах, чтобы стало теплее?) С современными пластиковыми стеклопакетами — другая крайность: герметичное помещение, в котором надышали, напукали — повысилась влажность, увеличилось содержание углекислого газа, заболела голова и выпал конденсат по углам. От потребности в 30 куб.м. воздуха с улицы на человека в час нам никуда не деться. Если на улице –20 °C, а в помещении +21 °C, то только на нагрев этих 30 кубометров воздуха нужно тратить порядка 450 ватт. И это на одного человека!

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

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

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

Про тепловые насосы.

Этот раздел я не хотел писать, но пикабушники в комментариях часто спрашивали, и упоминания в видео похоже недостаточно. Тепловой насос, это прибор, который использует электроэнергию, для перекачки тепла, часто против воли богов, от холодного тела к горячему. Тепловой насос есть у вас на кухне, холодильник перекачивает тепло из своего внутреннего объема на радиатор у задней стенки. Если разместить теплообменники внутри и снаружи здания, то можно охладить улицу еще сильнее, перекачав тепло в помещение. Тогда КПД станет более 100%, и это единственное исключение! К 1 киловатту тепла, полученного из электричества, может добавиться 2 и более киловатта тепла "перекачанного" с улицы.

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

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

Про обогреватели. Часть 3 Бытовая техника, Техника, Обогреватель, Ликбез, Научпоп, Длиннопост

2. У теплового насоса есть свой срок службы, у электроэнергии есть цена, у дома есть теплопотери, и есть статистические данные о погоде в вашей местности. А значит НУЖНО АККУРАТНО СЧИТАТЬ! Не во всех регионах нашей страны отопление тепловыми насосами окупится.

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

4. Тепло можно забирать не только от наружного воздуха, но и из грунта. Для этого на заднем дворе закапывают в грунте много-много труб, которые будут работать теплообменником. Даже в сильные морозы температура грунта стабильная и оптимальная для работы теплового насоса, поэтому для геотермальных тепловых насосов не актуально снижение эффективности в холодную погоду. Но стоимость всех работ по установке весьма солидна, поэтому см п.2

Впрочем на пикабу тепма тепловых насосов поднималась многократно:

Тепловой насос. Личный опыт. Часть 2

Тепловой Насос: купил, поставил, запустил

О тепловом насосе замолвите слово...

Про тепловой насос

Поэтому резюмирую, штука классная, интересная, но без рассчетов не сказать, окупится ли.

Как выбирать обогреватель


Хочется перефразировать меткое высказывание Виталия с канала «Будни сантехника»: Нет правильного или неправильного отопительного прибора, есть подходящие. Прибор стоит выбирать под задачу с учётом всех ограничений, в том числе и экономических.

Мои личные рекомендации таковы:

  1. Лучше угловатый металлический корпус, чем красивый пластиковый. При нештатной ситуации стальной корпус выступит барьером, а пластиковый стечёт.

  2. ТЭН всегда лучше голой нихромовой спирали. А массивное нагретое тело лучше голого ТЭНа. Вообще если нет ограничений по цене и весу — я бы избегал приборов с открытой нихромовой спиралью.

  3. Чаще лучше большой и теплый обогреватель, чем маленький и горячий.

  4. Универсальное правило выбора техники им. Бориса Бритвы актуально — при прочих равных, чем тяжелее — тем лучше. Просто так массу прибора не уменьшить, а снижение материалоемкости всегда приводит к компромиссам.

  5. Не гонитесь за электронными термостатами. И вообще чем меньше «мозгов» в приборе, тем лучше. Электронные термостаты стоит выбирать только когда без него никак, например, работа по таймеру. И не стоит забывать, что термостат можно всегда купить отдельно и включить прибор через него.

  6. Если выбираете обогреватель с инфракрасной лампой — посмотрите, есть ли она в виде запчасти, и сколько она стоит.

  7. НЕ ВЕРЬТЕ производителям, торговцам, когда они говорят, что именно их обогреватель экономит электроэнергию.


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

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

Новая концепция автомобиля. Экономия горючего около 50%. Конструкция Worker Universal. Двигатель с Гидро - Вариатором

Новая концепция автомобиля. Экономия горючего около 50%. Конструкция Worker Universal. Двигатель с Гидро - Вариатором Картинки, Техника, Наука и техника, Авто, Длиннопост

Worker Universal

двигатель с Гидро-Вариатором со смещаемой опорной точкой

(со смещаемым опорным узлом) силового цилиндра Гидро-Вариатора.

Это простая и надёжная конструкция.

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

Опорный узел силового цилиндра Гидро-Вариатора перемещается вдоль рычага маятника под воздействием давления поршня расположенного внутри рычага через ось и паз в рычаге.

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

Гидро-Вариатор работает от 0 (от нуля) оборотов Гидро-Мотора (Колеса).

Для этого опорный узел силового цилиндра Гидро-Вариатора может быть смещён до осевой линии опоры рычага,

(Ось рычага имеет проём).

Силовой цилиндр Гидро-Вариатора на качающейся подвеске.

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

Наполовину кольцевой паз сделан на обеих полу-осях!

Или корпус гидро - цилиндра вставлен не в крышки в корпусе, а в проушину с проёмом под шток цилиндра.

Общая площадь проекции паза равна площади поршня.

По такому принципу осуществлен и паз в оси рычага.

Силовой цилиндр Гидро-Вариатора расположен вверху, со стороны противоположной от Коленчатого Вала.

В этой конструкции давление от поршня двигателя на силовой поршень Гидро-Вариатора передаётся через Коленчатый Вал.

Это позволяет применять обыкновенные шатуны Коленчатого Вала.

Шатун Коленчатого Вала работает только на сжатие.

Ещё почитать:

https://sergiy-f1.livejournal.com Блог sergiy_f1

Двигатель с двух - этажным поршнем: http://advaitaworld.com/blog/science/79075.html

Смотрел в правилах, если моё, можно адреса личных страниц.

20.45_11.07.2025 Сергий Чернышов

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

Звоним через полстраны по dial-up модему в 2025 году

Автор текста: MaFrance351

Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний

Приветствую всех!

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

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

❯ Суть такова

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

Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний

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

Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний

Но вот прошли годы и эпоха тёплых ламповых медных проводов стала уверенно подходить к концу. Мало где осталась «настоящая» телефонная линия, вместо неё поголовно втыкаются GPON или VoIP-шлюзы. И даже если дома всё ещё остались телефонные розетки, запросто может быть, что лапша от них идёт не до АТС, а до коробочки на чердаке. Большинство пользователей даже не заметили изменений — на голос преобразование сигнала практически не влияет. А вот модемам не повезло — поток, прошедший через алгоритмы фильтрации и сжатия, для них уже не подходит, отчего связь либо устанавливается, но на очень малой даже по модемным меркам скорости, либо не может установиться совсем. Вот тут-то мне и стало интересно: будут ли два модема соединяться друг с другом в новых реалиях? По идее, связь должна быть очень медленной и нестабильной. Ну что же, погнали проверять!

❯ Что же мы будем делать?

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

Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний

Хотя почти все модемные провайдеры в нашей стране умерли, ещё были надежды кое-куда попробовать позвонить, а по номерам +74232300100 и +74232499100 ещё год назад отвечал модем, к которому можно было подключиться с логином и паролем rol. Увы, ещё тогда, когда он работал, я пробовал на него позвонить, но успехом это не увенчалось — модемы соединялись, но связь тут же рвалась. На этом о данных экспериментах я забыл.

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

❯ Обзор оборудования

Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний
Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний

С моей стороны подключаться будем при помощи вот этих двух модемов — Acorp основной и Zyxel запасной.

Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний

А вот модем на другой стороне — Zyxel более новой модели.

❯ Звоним

Как обстоят дела с интернетом, я уже знал по результатам своих опытов с АТС: всё очень печально. Поэтому теперь было интересно просто попробовать позвонить и проверить, будет ли соединение держаться, а также узнать, какую максимальную скорость удастся установить.

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

Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний

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

И, несмотря на опасения, связь установилась! Ну а набранное в терминале успешно отображалось на компьютере в шести тысячах километров от меня. Все пару минут соединение нормально держалось, после чего я его грохнул. Разумеется, скорость составляла не 115200 бод, а всего лишь 14400, как можно было убедиться AT-командой ATW2.

❯ Кидаем файлы

Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний

Дальше попробовали передать файл. На той стороне был HyperTerminal, я же открыл NC с его терминальным софтом.

Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний

Перед звонком надо зайти в настройки модема и поменять тоновый набор на импульсный (ATDT заменить на ATDP): иначе, как оказалось, моя АТС наотрез отказалась звонить, а только выдавала короткие гудки.

Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний

Ну что, пробуем?

Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний

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

Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний

Открываем меню и выбираем приём файла по какому-нибудь протоколу.

Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний

И файл даже успешно передаётся, хоть и с изредка возникающими сообщениями типа «CRC Error».

Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний

Дальше захотелось передать что-то потяжелее. И…

Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний

Не было ни-е-ди-но-го разрыва, ещё раз я вам говорю!

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

❯ Звоним мне

Следующей идеей было позвонить уже на мой номер.

Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний

Открываем терминал, ждём звонка. Берём трубку, и модемы начинают соединение.

Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний

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

Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний

В следующую попытку нас ожидало то же самое. Как, впрочем, и во все остальные. У меня есть предположение, что дело в том, что модем не может воспринять попорченный GPONом сигнал, так как при звонке с моей стороны (где есть аналоговая линия) связь хоть и не была особо стабильной, но всё же могла состояться, тогда как при вызове моего номера не удалось подключиться вообще ни разу.

После кучи неудачных попыток был вытащен модем Zyxel Omni 56K (с гордой надписью «Российская версия» на днище).

Звоним через полстраны по dial-up модему в 2025 году IT, Познавательно, Электроника, Техника, Связь, Timeweb, Тестирование, Видео, YouTube, Короткие видео, Telegram (ссылка), YouTube (ссылка), Длиннопост, Блоги компаний

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

❯ А возможно ли это вообще?

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

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

❯ Что же в итоге?

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

Такие дела.


Что ж. Заставить два «динозавра» работать вместе в 2025-ом – задача не из легких! Этот эксперимент требует тщательной подготовки и надежной инфраструктуры. А вот с сервисами Timeweb Cloud все просто. Потому вэлкам.


Больше интересных статей и новостей в нашем блоге на Хабре и телеграм-канале.

Реклама ООО «ТАЙМВЭБ.КЛАУД», ИНН: 7810945525

Показать полностью 20 3
119
TECHNO BROTHER

Ретропонедельник №209 Балтика

Сегодня в виртуальном музее советской бытовой техники снова радиоточка. Это абонентский громкоговоритель "балтика".

Ретропонедельник №209 Балтика Бытовая техника, Сделано в СССР, Виртуальный музей, Радиоточка, Радио, Раритет, Длиннопост

Абонентский громкоговоритель "Балтика" с 1954 года выпускал Ленинградский завод им. Кулакова и Порховской релейный завод в Псковской области. В 1956 дизайн сменили и выпускалась модель вплоть до 1963.

Ретропонедельник №209 Балтика Бытовая техника, Сделано в СССР, Виртуальный музей, Радиоточка, Радио, Раритет, Длиннопост

Корпус из дерева. Отказ от дерева в пользу пластика понятен - если из пластика корпус изготавливается в одно прессование, то просто посмотрите на трудоемкость изготовления корпуса из дерева - склейка, шпонирование, окраска....

Ретропонедельник №209 Балтика Бытовая техника, Сделано в СССР, Виртуальный музей, Радиоточка, Радио, Раритет, Длиннопост
Ретропонедельник №209 Балтика Бытовая техника, Сделано в СССР, Виртуальный музей, Радиоточка, Радио, Раритет, Длиннопост

Задняя стенка типовая - картон.

Ретропонедельник №209 Балтика Бытовая техника, Сделано в СССР, Виртуальный музей, Радиоточка, Радио, Раритет, Длиннопост

Ручка регулировки громкости утрачена

Ретропонедельник №209 Балтика Бытовая техника, Сделано в СССР, Виртуальный музей, Радиоточка, Радио, Раритет, Длиннопост

Декоративная пластиковая накладка. Радиоткань установлена криво - в него лазили.

Ретропонедельник №209 Балтика Бытовая техника, Сделано в СССР, Виртуальный музей, Радиоточка, Радио, Раритет, Длиннопост

Просто посмотрите сколько возни с корпусом при производстве:

Ретропонедельник №209 Балтика Бытовая техника, Сделано в СССР, Виртуальный музей, Радиоточка, Радио, Раритет, Длиннопост

Уникальная особенность - регулировка громкости ступенчатая - переключением обмоток трансформатора. Состояние "лежало в неотапливаемом гараже 40 лет"

Ретропонедельник №209 Балтика Бытовая техника, Сделано в СССР, Виртуальный музей, Радиоточка, Радио, Раритет, Длиннопост

Динамик

Ретропонедельник №209 Балтика Бытовая техника, Сделано в СССР, Виртуальный музей, Радиоточка, Радио, Раритет, Длиннопост

Видны разрывы диффузора, это придется клеить.

Ретропонедельник №209 Балтика Бытовая техника, Сделано в СССР, Виртуальный музей, Радиоточка, Радио, Раритет, Длиннопост
Ретропонедельник №209 Балтика Бытовая техника, Сделано в СССР, Виртуальный музей, Радиоточка, Радио, Раритет, Длиннопост
Ретропонедельник №209 Балтика Бытовая техника, Сделано в СССР, Виртуальный музей, Радиоточка, Радио, Раритет, Длиннопост
Ретропонедельник №209 Балтика Бытовая техника, Сделано в СССР, Виртуальный музей, Радиоточка, Радио, Раритет, Длиннопост

Для сгиба по радиусу на фанере сделали засечки

Ретропонедельник №209 Балтика Бытовая техника, Сделано в СССР, Виртуальный музей, Радиоточка, Радио, Раритет, Длиннопост
Ретропонедельник №209 Балтика Бытовая техника, Сделано в СССР, Виртуальный музей, Радиоточка, Радио, Раритет, Длиннопост

Радиоточка засветилась в фильме "полосатый рейс", висит на стене:

Ретропонедельник №209 Балтика Бытовая техника, Сделано в СССР, Виртуальный музей, Радиоточка, Радио, Раритет, Длиннопост

Пикабушник @jonotans скупил наверное все авито:

Ретропонедельник №209 Балтика Бытовая техника, Сделано в СССР, Виртуальный музей, Радиоточка, Радио, Раритет, Длиннопост

Благодарю пикабушника @AthosLaFere за помощь в обработке фото.

Показать полностью 17
508
TECHNO BROTHER

Пишем 3D-игру для ретро-устройств весом в 600Кб…

...которая работает на первых Android-смартфонах в мире, компьютерах из 90-х и даже Mac'ах! Часть 2.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Иногда у меня лежит душа просто взять и написать какую-нибудь небольшую игрушку с нуля, без использования готовых движков. В процессе разработки я ставлю перед собой интересные задачки: игра должна весить как можно меньше, работать на как можно большем числе платформ и использовать нетипичный для меня архитектурный паттерн. Недавно я начал писать ремейк классических «танчиков» и в рамках серии статей готов рассказать о всех деталях разработки трёхмерной игры с нуля в 2025 году. Если вам интересно узнать, как работают небольшие 3D-демки «под капотом» от написания фреймворка до разработки геймплея — жду вас под катом!

❯ Предисловие

Ещё в начале этого года, мне взбрело в голову проверить насколько концепция «Write once, run anywhere» правдива. Все мы знаем, что Java достаточно обширно используется в Enterprise-секторе по типу банков, Android-гаджетах в качестве языка, на котором написано около 80% системы и даже в смарт-карточках, куда входят привычные нам SIM и банковские карты.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Изначально я хотел написать игру, которая работала бы не только на самых первых Android-смартфонах в мире, но ещё и на ретро-кнопочных телефонах, и при всём этом была 3D. В течении недели, я успел написать некоторые наработки для трёхмерной гоночки с примитивной физикой на основе «линий»:

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

В игре был мультиреднер для M3G и MascotCapsule... не хуже игр Fishlabs :))

Но затем я понял, что лишаюсь очень многих фич языка. Дело в том, что игры для Java-телефонов писались не столько на самой «джаве», сколько на её своеобразном диалекте. В мире C/C++ такой подход принято называть «C с классами», но в случае Java - подход заключался в написании большей части логики в одном-двух классах для улучшения производительности игры. Наследование, полиморфизм и абстракции на кнопочных телефонах использовать не рекомендуется. Кроме того, версия JDK в кнопочных телефонах была на уровне 1.3 — а значит, никаких дженериков и иных полезных фишек Java.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Про разработку игр для кнопочных телефонов я писал отдельную статью. Дабы не отвлекать вас от прочтения этой, ссылку оставлю в закрепленном комментарии :)

По итогу я решил сфокусироваться на относительно свежем HTC Dream — первом серийном Android-смартфоне в мире, который вышел в далёком 2008 году с Android 1.0 на борту. В нём используется уже не JVM, а своя виртуальная машина Dalvik с собственным байткодом и версией JDK — 1.5, да и процессор здесь значительно помощнее, а следовательно и куда больше возможностей для разработки!

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Поскольку игру я разрабатываю и отлаживаю на ПК, у меня также есть отдельный билд и для ретро-компьютеров с GPU из 90-х и нулевых. И в рамках статьи, мы, конечно же, сделаем с вами практические тесты!

❯ Рендер

В первой части мы с вами закончили на том, что написали основу для игры — фреймворк, который включает в себя рендерер, менеджер ресурсов на слабых ссылках, некое подобие графа сцены с компонентной системой и загрузчик уровней. Но этого всё ещё мало для 3D-игры и, что самое важное, все эти модули ещё не оптимизированы.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Например, если грузить уровень «в лоб» и на каждый кубик выделять по отдельному игровому объекту, который «рисует сам себя отдельно» — мы быстро столкнемся с тем, что количество вызовов отрисовки (DIP'ов) превысит все разумные нормы. Для уровня в 16x16 блоков это уже целых 256 DIP'ов - а вкупе с другими танчиками и UI - не менее 260-270.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Самая базовая оптимизация в таком случае — это отсечение по пирамиде видимости (Frustum culling). Концепция простая: для отрисовки всего, что мы видим с вами на экране используется три матрицы размерности 4x4: мировая (позиция и поворот объекта в мире), вида (камера, позиция из «глаз») и проекции. При перемножении, они образуют так называемую WorldViewProjection-матрицу и если каждую вершину модели умножить на эту матрицу — то мы получаем её позицию в Clip-Space (или NDC) пространстве. Далее растеризатор берёт каждые три трансформированные вершины в качестве углов треугольника и отрисовывает их в рендертаргет - в нашем случае, это экран. Именно за счёт перспективной матрицы проекции и Z-буфера, мы с вами и получаем тот самый эффект трёхмерного пространства.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

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

public void calculate(Matrix viewProj) {
float[] items = viewProj.Matrix;
planes[0].set(items[3] - items[0], items[7] - items[4], items[11] - items[8], items[15] - items[12]).normalize();
planes[1].set(items[3] + items[0], items[7] + items[4], items[11] + items[8], items[15] + items[12]).normalize();
planes[2].set(items[3] + items[1], items[7] + items[5], items[11] + items[9], items[15] + items[13]).normalize();
planes[3].set(items[3] - items[1], items[7] - items[5], items[11] - items[9], items[15] - items[13]).normalize();
planes[4].set(items[3] - items[2], items[7] - items[6], items[11] - items[10], items[15] - items[14]).normalize();
planes[5].set(items[3] + items[2], items[7] + items[6], items[11] + items[10], items[15] + items[14]).normalize();
}

// Allocation-less
public boolean isPointInFrustum(float x, float y, float z)
{
for(int i = 0; i < planes.length; i++)
{
Plane plane = planes[i];

if ((plane.A * x) + (plane.B * y) + (plane.C * z) + plane.D <= 0)
return false;
}

return true;
}

Далее проверить попадает ли наш кубик или танчик в кадр — дело техники. Есть два подхода: подсчитать Bounding-sphere для модели (радиус относительно самой нижней и самой верхней вершины), или Bounding-box. В самом простом случае, можно обойтись проверкой самой нижней и самой верхней точки Bounding-box'а, однако в некоторых случаях такой алгоритм может давать сбой — например если уткнутся в «стенку» носом в игре:

public boolean isMeshRendererInFrustum(MeshRenderer renderer) {
float x = renderer.Parent.Position.X;
float y = renderer.Parent.Position.Y;
float z = renderer.Parent.Position.Z;
Vector min = renderer.Mesh.BoundingMin;
Vector max = renderer.Mesh.BoundingMax;

return isPointInFrustum(x + min.X, -(y + min.Y), z + min.Z) || isPointInFrustum(x + max.X, -(y + max.Y), z + max.Z);
}

Конкретно в нашем случае, такая оптимизация помогает сэкономить около 100 DIP'ов и даёт неплохой прирост FPS. На Galaxy S3 с Mali 400MP4 мы получаем стабильные 60FPS, в то время как на Xperia Play — около 30... Что-ж, этого всё равно мало, тем более для смартфона, в котором GPU — кровный брат Xenos в Xbox 360...

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Нарисовать 256 кубиков для GPU, даже мобильного — не проблема, особенно если они не бьют по филлрейту. Однако на классических мобильных GPU был строгий бюджет на число DIP'ов — в идеале не более 100, иначе FPS заметно просаживается даже на примитивной геометрии. Поэтому для оптимизации можно использовать технику батчинга: объединяем все кубики с одним материалом в сцене в одну большую модель и рисуем за один вызов DIPUP:

public void bake() {
int uniqueMaterials = 0;

batchList.clear();
batchRenderers.clear();
world.findComponentsOfType(BatchedMeshRenderer.class, batchRenderers);

for(int i = 0; i < batchRenderers.size(); i++) {
BatchedMeshRenderer renderer = batchRenderers.get(i);
renderer.IsTakenByBatcher = false;

if(renderer.Mesh != null && renderer.Material != null) {
if(renderer.Mesh.Buffers.length != 1)
continue; // Only simple meshes is supported now

Batch batch = meshes.get(renderer.Material);

if(batch == null)
meshes.put(renderer.Material, batch = new Batch(renderer.Material));

batch.addMesh(renderer);
}
}

for(Map.Entry<Material, Batch> materialBatch : meshes.entrySet()) {
batchList.add(new BatchHolder(materialBatch.getKey(), materialBatch.getValue()));
materialBatch.getValue().finish(); // Upload mesh to GPU
}
}

После этого, FPS поднимается до очень приятных значений - целых 45! Однако есть и обратная сторона: эта техника очень сильно бьёт не только по памяти, но и в случае динамического батчинга (танки ведь уничтожают кубики) - по процессору. Однако можно и далее оптимизировать этот алгоритм путём разбиения батчей на сетку, чтобы отсекать невидимые группы "кубиков" :)

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Следующая тема — это материалы для поверхностей, описывающие внешний вид модели на экране. В первой статье я написал базовую систему материалов, которая оборачивала в себе набор рендерстейтов и парочку текстур: Diffuse и Detail. Но мало кто помнит, что ещё до шейдеров, в FFP был довольно мощный инструмент, именуемый комбайнерами. По сути, комбайнеры — это возможность задействования сразу нескольких текстурных юнитов для смешивания двух и более текстур за один вызов отрисовки.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Пример использования комбайнеров — плавное смешивание двух текстур на ландшафте с использованием маски. Эдакая вариация техники Splat mapping

Поэтому я решил написать загрузчик для материалов, описанных в простом текстовом формате по типу ini-файлов. В секции Texture описываются используемые текстуры, которые затем подгружаются из пула ресурсов, в RenderStates — напрямую указаны поля в классе Material, а в Combiners — очень-очень примитивная вариация на тему шейдеров!

[Texture]
Primary = textures/t72_diffuse.tex
Secondary = textures/brick.tex

[RenderStates]
AlphaTest = 0
AlphaTestValue = 1

DepthWrite = 1
DepthTest = 1
AlphaBlend = 0
Fog = 1
Unlit = 1

[Combiners]
Sample Primary
Interpolate Secondary 0.3
MultiplyColor Primary

Изначально я хотел сделать чтобы материалы описывали эдакий набор инструкций как «шейдеры» в Quake 3. Однако учитывая отсутствие лямбд в Java 1.5, реализация на интерфейсах (и тем более на рефлексии) не впечатлила своей производительностью и я решил сделать «программируемыми» только сами комбайнеры. Суть простая: отдельные псевдо-шейдеры реализуют интерфейс FixedFunctionShader и в теле метода onApply применяют необходимые операции над комбайнерами. При этом строго запрещается менять стейт самого графического API кроме биндинга текстур:

static class Sample implements BaseGraphics.FixedFunctionShader {

@override
public void onApply(Material material, int combiner, float[] params) {
if(params.length != 1)
throw new ShaderException(this, material, params, "Expected 1 argument");

int texId = (int)params[0];
Texture2D tex = material.Textures[texId];

if(tex == null)
throw new ShaderException(this, material, params, "Texture " + texId + " was null");

tex.bind();

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE0 + combiner);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE0 + combiner);

glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
}
}

Затем при вызове отрисовки модели, рендерер выполняет «инструкции» для таких комбайнеров по одному и если нужно — откатывается до простой «однотекстурной» версии (драйвер GLES на Mali-400 и VideoCore IV не поддерживает комбайнеры, несмотря на то, что спецификация требует их поддержки). Получается довольно шустро:

if(GPUClass.QualityLevel >= com.monobogdan.engine.GPUClass.QUALITY_LEVEL_NORMAL) {
for (int i = 0; i < Material.COMBINER_STAGE_COUNT; i++) {
// Reset combiner state
glActiveTexture(GL_TEXTURE0 + i);
glDisable(GL_TEXTURE_2D);
}

for (int i = 0; i < material.Shaders.length; i++) {
Material.ShaderInstance instance = material.Shaders[i];

glActiveTexture(GL_TEXTURE0 + i);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glEnable(GL_TEXTURE_2D);
instance.Shader.onApply(material, i, instance.Params);
}
} else {
// Single texture fallback for very slow GPU's
glActiveTexture(GL_TEXTURE0);
setState(GL_TEXTURE_2D, material.Textures[0] != null);
material.Textures[0].bind();
}

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Наполовину кирпичный танк — видели ли вы когда-нибудь такой камуфляж? :)

Следующая тема — рендеринг текста. В более ранних статьях я обычно не парился над демками и просто рисовал текст нативными средствами системы в текстуру, а затем рисовал полноэкранный квад. Такая методика работает шустро на смартфонах, но очень тормозная на ПК и более того, такая текстура занимает слишком много VRAM! Однако чаще всего я использую так называемые битмапные шрифты, которые состоят из атласа — текстуры с «запеченными» буквами и информации о том, где какой символ в ней находится. Для генерации таких шрифтов я использую утилиту BMFont, а сам код рендеринга получается очень простым:

public void drawString(BitmapFont font, Vector color, float x, float y, String str) {
if(font == null)
throw new NullPointerException("font was null");

if(str == null)
return;

int sz = font.Size / 2;

for(int i = 0; i < str.length(); i++) {
char chr = str.charAt(i);

if(chr == ' ')
x += sz;
else {
BitmapFont.CharacterInfo chrInfo = font.getCharacter(chr);
drawImage(font.Pages[chrInfo.Page], x, y + chrInfo.YOffset, chrInfo.X, chrInfo.Y, chrInfo.Width, chrInfo.Height, chrInfo.Width, chrInfo.Height, color);
x += chrInfo.Width;
}
}
}

И результат - весьма симпатичным:

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

В целом, далее особо оптимизировать и нечего для рендерера. Инстансинга в FFP нет, шейдеров — тоже, а рендер идентичный и на Android, и на ПК. Поэтому имеем что имеем!

❯ Аллокации

Однако когда я начал отлаживать игру на смартфонах, я заметил резкие просадки кадров и абсолютно нестабильный FPS. При этом характер лагов был константный: раз в 2-3 секунды просадка в 20 кадров. Заглянув в logcat, я обнаружил что Dalvik постоянно вызывает GC (сборщик мусора) и блокирует все потоки на невероятные 16мс — даже для простейших объектов в «куче»! В зависимости от устройства, Dalvik выделяет от 8 до 32Мб памяти для каждого приложения - что очень немного!

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

В первой статье я рассказывал о том, что большинство объектов у меня мутабельные и предполагают аллокацию не в update/draw, а в конструкторе компонента. Это касается векторов, матриц и иных примитивных классов для различных расчетов — ведь в отличии от .NET, в Java нет Value-типов, которые можно выделить на стеке, кроме примитивов. Например, если в C# написать такой код для сложения двух векторов:

struct Vector3 {
public float X, Y, Z;

public Vector3(float x, float y, float z)
{
X = x;
Y = y;
Z = z;
}

public static Vector3 operator +(Vector3 a, Vector3 b)
{
return new Vector3(a.X + b.X, a.Y + b.y, a.Z + b.z);
}
}

...

Transform.Position += Velocity;

То из-за того, что Vector3 — простая структура без ссылок на управляемые объекты, которая не требует контроля от GC, рантайм .NET выделит её на стеке, а не в куче и автоматически удалит при выходе из скоупа метода, где она использовалась. Если попытаться сделать такое в Java:

public static Vector3 add(Vector3 a, Vector3 b)
{
return new Vector3(a.X + b.X, a.Y + b.y, a.Z + b.z);
}

...

transform.position = Vector3.add(transform.position, velocity);

То мы получим аллокацию для каждого объекта, вызывающий этот участок кода на каждый кадр. И когда придёт время вызывать GC — он обязательно тормознет игру и вызовет огромные фризы, прямо как в Minecraft на ПК. Главный нюанс здесь в том, что Dalvik оптимизирован под минимальное потребление памяти и поэтому начинает слишком часто вызывать GC, тормозя работу игры. В смартфонах с большим объёмом ОЗУ (хотя-бы 1Гб) таких проблем уже нет.

Но как я уже и сказал выше — мои игровые объекты и компоненты написаны так, чтобы не нагружать ни GC, ни кучу, но сборщик мусора всё равно продолжает тормозить игру, а значит нужно максимально экономить аллокации. Начав профайлить код, я обнаружил что огромное число аллокаций приходится на... итераторы! Да-да, та же самая проблема, что и в примере с векторами: даже несмотря на крошечный вес в памяти, итерации в каждом кадре засоряют хип и по итогу вызывают GC. Решение: перевести все индексированные списки на классический for:

for(int i = 0; i < GameObjects.size(); i++) {
GameObjects.get(i).onUpdate();
}

// Second pass for late updates
for(int i = 0; i < GameObjects.size(); i++)
GameObjects.get(i).onLateUpdate();

И после этого, частота вызова GC наконец-то стабилизировалась!

❯ Ввод

Отдельный вопрос — это грамотная обработка ввода. Хочется чтобы наша игра поддерживала не только клавиатуру, но и геймпады, а на смартфонах — ещё и виртуальные джойстики. Чтобы не размазывать подсистему ввода в игре на 150 источников как в Unity, есть смысл её абстрагировать на некий виртуальный геймпад с необходимыми для игры кнопками: в нашем случае это стрелки и кнопка стрельбы.

Затем необходимо замаппить физические кнопки на наш виртуальный геймпад. Для этого, на смартфонах я сделал таблицу с маппингом, которая подходит для большинства игровых гаджетов: Xperia Play, игровых консолей на Android'е из 2012-го и даже смартфонов с аппаратными QWERTY-клавиатурами. И если захочется добавить возможность переназначения кнопок — это тоже не станет проблемой!

private static int[] xperiaPlayMapping = {
KeyEvent.KEYCODE_DPAD_UP, KeyEvent.KEYCODE_DPAD_DOWN, KeyEvent.KEYCODE_DPAD_LEFT, KeyEvent.KEYCODE_DPAD_RIGHT, KeyEvent.KEYCODE_DPAD_CENTER,
KeyEvent.KEYCODE_BACK, KeyEvent.KEYCODE_BUTTON_X, KeyEvent.KEYCODE_BUTTON_Y, KeyEvent.KEYCODE_BUTTON_R1, KeyEvent.KEYCODE_BUTTON_L1
};

private static int[] genericQWERTYMapping = {
KeyEvent.KEYCODE_A, KeyEvent.KEYCODE_D, KeyEvent.KEYCODE_W, KeyEvent.KEYCODE_S, KeyEvent.KEYCODE_ENTER, KeyEvent.KEYCODE_SPACE, KeyEvent.KEYCODE_J, KeyEvent.KEYCODE_K,
KeyEvent.KEYCODE_Q, KeyEvent.KEYCODE_E
};

public static int[][] ConversionTable = {
xperiaPlayMapping,
genericQWERTYMapping
};

...

private int resolveGamePadTranslationTable(int keyCode) {
for(int i = 0; i < GamePadKeyTable.ConversionTable.length; i++) {
int[] keys = GamePadKeyTable.ConversionTable[i];

for(int j = 0; j < keys.length; j++) {
if(keyCode == keys[j])
return j;
}
}

return -1; // Not resolved
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
int gamePadKey = resolveGamePadTranslationTable(keyCode);
handleKeyEvent(event.getScanCode(), Input.STATE_RELEASED);

if(gamePadKey != -1)
handleGamePadEvent(gamePadKey, Input.STATE_RELEASED);

return true;
}

По итогу, у нас есть унифицированное управление на ПК и смартфонах, покататься в нашей демке можно даже на легендарной Xperia Play!

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Для смартфонов без аппаратной клавиатуры, виртуальный геймпад пишется буквально за 5 минут. Главное — использовать относительные нормализованные координаты для адаптивности и учитывать Aspect Ratio устройства, который может быть разным:

public void drawUI() {
VerticalInput = 0;
HorizontalInput = 0;

float scaled = UI_BASE_SIZE * Scale;
float baseY = 1.0f - (scaled * 3); // 0.7f is base coefficient for 1.0f scaling

if(game.Runtime.UI.imageButton(arrowUp, scaled, baseY, scaled, scaled, true))
VerticalInput = 1;

if(game.Runtime.UI.imageButton(arrowDown, scaled, baseY + (scaled * 2), scaled, scaled, true))
VerticalInput = -1;

if(game.Runtime.UI.imageButton(arrowLeft, 0.0f, baseY + scaled, scaled, scaled, true))
HorizontalInput = -1;

if(game.Runtime.UI.imageButton(arrowRight, scaled * 2, baseY + scaled, scaled, scaled, true))
HorizontalInput = 1;
}

❯ Тестируем игру

Пришло время протестировать то, что мы успели с вами сделать за неделю. И сегодня в тестах участвует сразу несколько машинок: Asus eeePC 4G в роли «компьютера из 90-х», Sony Ericsson Xperia Play, iPhone 4S с нюансом и Samsung Galaxy Y Pro. Все гаджеты по своему хороши, имеют разные GPU и всех их объединяет статус легендарных.

Начинаем с SE Xperia Play 2011 года выпуска, который изначально позиционировался как игровой смартфон. По сути, Xperia Play - чуточку переделанный Xperia Pro, где QWERTY-клавиатуру заменили на геймпад, при этом аппаратная платформа почти всех "сонериков" 2011 года идентичная: чипсет Qualcomm MSM8250 с ARMv7-совместимым ядром Scorpio на частоте 1ГГц и GPU Adreno 205 (ребрендинг ATI Imageon Z430, на архитектуре Xenos), 512Мб ОЗУ типа DDR1 и 512Мб флэш-памяти. С смартфонами в те годы была такая же ситуация, как и с компьютерами в начале нулевых: прогресс был слишком быстрым и уже в 2012 году, Xperia Play не тянул многие свежие игры из-за слабенького процессора и GPU!
Но в нашем случае, он показывает себя неплохо и стабильно тянет рендеринг уровня и танчика в 40-45 FPS... В играх на Unity3D, Adreno 205 таким результатом похвастаться не мог.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Переходим к iPhone 4S, который, как я уже сказал, с некоторым нюансом: это китайская реплика на Android. При этом довольно интересен тот факт, что у копии очень крутая IPS-матрица почти такого же разрешения (800x480 против 960x640), как и на оригинальном айфоне. Работает "клон" на базе чипсета MediaTek MT6515 2012 года выпуска с одним ядром Cortex-A9, работающим на частоте 1ГГц и GPU PowerVR SGX531 Ultra. Также в смартфоне установлено 256Мб оперативной памяти и 256Мб постоянной - в общем, типичный бюджетник тех лет. GPU от PowerVR - главное достоинство этого смартфона в плане гейминга, наша демка спокойно выдаёт 50-60 стабильных FPS. Я считаю что это прекрасный результат.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

ERTY-клавиатурой, но и очень диковинным (и родственным Raspberry Pi) процессором Broadcom BCM21553 с одним ARMv6-совместимым ядром на частоте 832МГц и крайне необычным GPU собственной разработки VideoCore IV. Дело в том, что GPU в чипсетах Broadcom выполняет роль системного монитора и по архитектуре заметно отличается от классических видеоускорителей. По сути, это DSP с очень крутым векторным сопроцессором из-за чего его отчасти можно назвать софтрендером. Однако ранние драйвера для этого GPU были очень сырыми из-за чего большинство игр выдавали артефакты или работали очень медленно. Наша игрушка - не исключение, всего лишь 20 FPS при 240x320...

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Переходим к довольно необычной машинке: Asus eeePC 4G. Первые модели легендарной линейки нетбуков отличались очень низкой ценой, довольно слабым и прожорливым процессором Celeron M 353 на архитектуре Dothan (прямой поток Pentium III Tualatin) и частоте 900МГц, встроенной графикой Intel GMA900 с поддержкой пиксельных шейдеров 2.0 и довольно небольшим объёмом ОЗУ в 512Мб типа DDR2. Здесь я проводил тесты на JRE 1.7 - и получил почти 60 FPS... за вычетом того, что раз в 3-4 секунды я получаю микрофризы и нагрузку на процессор в 80%. Однако сама JRE здесь не причём: такая высокая нагрузка связана с тем, что у GPU нет аппаратного вершинного конвейера и поэтому вся трансформация геометрии происходит на процессоре. Такой вот нюанс:

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

❯ Заключение

Вот такая статья о разработке 3D-игры с нуля у нас с вами получилась. Прошлые статьи в этой рубрике я писал в стиле туториала, но в этой я решил рассмотреть конкретные кейсы и архитектурные решения. И может она не настолько простая и понятная, как статья про разработку «самолетиков» или Top-Down стрелялки по зомби, думаю своего читателя она точно нашла! Если вам интересно, с кодом можно ознакомиться на моём Github.

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты и щитпостю. А ролики (не всегда дублирующие статьи) можно найти на моём YouTube канале.

Что думаете о таком формате статей?
Всего голосов:

Очень важно! Разыскиваются девайсы для будущих статей!

Друзья! Для подготовки статей с разработкой самопальных игрушек под необычные устройства, объявляется розыск телефонов и консолей! В 2000-х годах, китайцы часто делали дешевые телефоны с игровым уклоном — обычно у них было подобие геймпада (джойстика) или хотя бы две кнопки с верхней части устройства, выполняющие функцию A/B, а также предустановлены эмуляторы NES/Sega. Фишка в том, что на таких телефонах можно выполнять нативный код и портировать на них новые эмуляторы, чем я и хочу заняться и написать об этом подробную статью и записать видео! Если у вас есть телефон подобного формата и вы готовы его задонатить или продать, пожалуйста напишите мне в Telegram (@monobogdan) или в комментарии. Также интересуют смартфоны-консоли на Android (на рынке РФ точно была Func Much-01), там будет контент чуточку другого формата :)

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

А также я ищу старые (2010-2014) подделки на брендовые смартфоны Samsung, Apple и т. п. Они зачастую работают на весьма интересных чипсетах и поддаются хорошему моддингу, парочку статей уже вышло, но у меня ещё есть идеи по их моддингу! Также может у кого-то остались самые первые смартфоны Xiaomi (серии Mi), Meizu (ещё на Exynos) или телефоны Motorola на Linux (например, EM30, RAZR V8, ROKR Z6, ROKR E2, ROKR E5, ZINE ZN5 и т. п., о них я хотел бы подготовить специальную статью и видео т. к. на самом деле они работали на очень мощных для своих лет процессорах, поддавались серьезному моддингу и были способны запустить даже Quake!). Всем большое спасибо за донаты!

Пишем 3D-игру для ретро-устройств весом в 600Кб… Опрос, Гаджеты, Смартфон, Программирование, Java, 3D, Gamedev, Opengl, Android, Android разработка, Гифка, Длиннопост

Статья написана при поддержке Таймвеб КЛАУД.

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

Аккумуляторный мультитул, многофункциональный инструмент

Если кому надо, вот на АлиЭкспресс
на Яндекс Маркете

235
TECHNO BROTHER

Я сделал его! Крепеж квантовой суперпозиции

Я сделал его! Крепеж квантовой суперпозиции Опрос, Техника, Рассуждения, Крепёж
На фото
Всего голосов:

Для тех кто считает, что винт крутят отверткой, а болт ключом - головку можно крутить и отверткой и ключом. Для тех кто руководствуется ГОСТом и считает что винт вкручивается в резьбу в детали, а болт применяется с гайкой - в теле детали я нарезал резьбу и накрутил гайку. Что скажет @AlexeySergeevich?

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