Просто компилирую почти пустые приложения в Delphi 7 (x86), 11.3, а также Lazarus 2.2.4 (x64). Уровень "Hello, World". Я не менял Uses, оно само туда надобавлялось. Не использовал KOL и прочие навороты.
У Lazarus просто отключал генерацию отладочной информации, у Delphi 11.3 переключал профили Debug/Release (Win32), Delphi 7 (x86) - компилил как есть, на свежеустановленной среде.
Оконное приложение:
vcl, TCaption для вывода "Hello, World". Код примерно такой (Delphi 11.3):
Навороченное консольное приложение Lazarus 2.2.4. Это стандартная заготовка, я добавил только строчку № 47.
По итогу накомпилировал столько приложений:
В виде таблички:
Для Delphi 7 (x86) -- вроде и Debug-версия, но там Debug-файлы генерируются отдельно, т.е. вроде и не Debug.
Решил отдельно замерять по трем компиляторам, даже Delphi 7 откопал, развитие моего комментария: #comment_306393162
Отдельно запустил C# (.NET Framework) с использованием Windows Form и получился такой код:
Все эти Form1 и label1.Text мне что-то смутно напоминают.
Андерс Хейлсберг приложил свою руку и к Delphi, и к C#. При этом C# вдохновлялась Java, а Java вдохновлялась виртуальными машинами:
в 1973 году с участием Вирта был разработан прототип виртуальной машины, исполняющей на любой платформе промежуточный «пи-код», в который предполагалось компилировать все программы
А Никлаус Вирт создал Паскаль, который лег в основу Delphi.
В альфа-релизе Python 3.13.0a6дебютировала экспериментальная реализация JIT-компилятора (Just-In-Time Compiler), призванная вывести производительность этого популярного интерпретируемого языка на принципиально новый уровень.
Ключевая цель JIT-компилятора - устранить традиционный разрыв в скорости выполнения между интерпретируемыми и скомпилированными языками. И, судя по всему, разработчикам Python удалось достичь этой амбициозной задачи.
В основе JIT-компилятора лежит инновационный подход "Copy-and-Patch".
С помощью LLVM генерируется объектный файл ELF, содержащий данные об инструкциях байткода и информацию о необходимых заменах. Затем JIT подменяет сгенерированные интерпретатором инструкции байткода их эквивалентами в машинном коде, вставляя необходимые значения аргументов и констант.
Одно из главных преимуществ нового JIT - беспрецедентная скорость компиляции. По сравнению с компиляцией в WebAssembly (Liftoff), он работает в 5 раз быстрее. А если сравнивать с традиционными JIT-решениями LLVM, то новый компилятор опережает их в 100 раз! Но главная ценность JIT - существенный прирост производительности скомпилированного кода. Программы, обработанные новым инстументом, демонстрируют прирост скорости на 50% по сравнению с WebAssembly и на 15% быстрее работают, чем после обработки стандартным JIT LLVM.
Также важная особенность JIT - его органичная интеграция в ядро CPython. Компилятор активируется через сборочную опцию "--enable-experimental-jit" и требует установки LLVM в качестве зависимости.
Кроме того, сочетание гибкости интерпретируемого языка с производительностью открывает новые горизонты для Python. Научные вычисления, обработка больших данных, машинное обучение - эти сферы высокопроизводительных приложений теперь становятся более доступными для Python-разработчиков.
Простота сопровождения и полная интеграция с интерпретатором делают JIT очень перспективным решением. В будущем его функциональность и оптимизация будут только расти, что позволит Python раздвинуть границы своего применения.
Хочешь быть в курсе самых актуальных новостей из мира IT-технологий?
Их есть у нас! Красивая карта, целых три уровня и много жителей, которых надо осчастливить быстрым интернетом. Для этого придется немножко подумать, но оно того стоит: ведь тем, кто дойдет до конца, выдадим красивую награду в профиль!
Звучит страшно. Мульти, модальное, так еще и программирование. Технически, такой подход в ML включает в себя разработку приложений с поддержкой нескольких модальностей ввода и вывода: аудио, видео, текст и даже голоса — все эти данные объединяются и прогоняются через алгоритмы машинного обучения.
Хорошим примером тут может послужить CLIP, которая соотносит изображение и подпись к ней, ее продвинутый аналог VQGAN, квантованная генеративная адвесариальная сеть, которая создает изображения.
Работая вместе, VQGAN генерирует изображение, а CLIP выступает как ранжировщик, оценивая насколько хорошо изображение подходит тексту. Тот же Siri от Apple, Google Assistant и Amazon Alexa — примеры мультимодальных ИИ, так как им приходится взаимодействовать и с голосом пользователя, и его текстовыми запросами. В E-commerce может стоять классификатор продуктов, учитывающий и их названия, и внешний вид.
Очевидно, что у мультимодальных нейросетей много применений — это могут быть все нейросети, где задействуется два и более типа данных. Мы также нашли датасет CMU-MOSEI с аудио и видео тысячи спикеров на ютубе.
Но Microsoft, Apple, OpenAI и другие компании все равно остаются на стороне одномодальных моделей, ведь зачастую невозможно выделить адекватное представление аудио через текст, а также провести адекватное совместное обучение из-за проблем перевода данных из одной модели в другую, например, как в случае перевода обработанной информации с компьютерной томографии и МРТ.
В обучении обычно применяются два типа по времени слияния данных: раннее и позднее. В первом случае данные объединяются задолго до этапа принятия решения нейронкой и обучаются вместе, во втором — слияние проходит только в самом конце, а дополнительные нейронки обучаются на датасетах независимо.
В посте постараюсь кратко рассказать про сабж, почему это не сложно, не дорого и экономически выгодно. И как из этой идеи родился новый opensource проект.
Первую статью публиковал на хабре, там есть технические детали и подробная предыстория.
Краткая предыстория
Построили дом, смонтировали радиаторную систему отопления с газовым котлом. Находясь в доме зимой, ощутил разницу температуры в доме в течение дня, потому что на котле стояла фиксированная температура, а на улице она была не фиксированная. В итоге в доме то +18, то +28, нехорошо.
Далее были поиски готовых решений управления котлом для поддержания внутри дома заданной температуры, и на тот момент был, вроде бы, только Zont, но мне он не подошел, т.к. в доме я использую Home Assistant, нормальной интеграции zont'а в Home Assistant нет до сих пор, а управлять отоплением из отдельного приложения не хотелось.
Путь диайвайщика
Собственно, за неимением других вариантов начал разрабатывать свой девайс и прошивку для котлов c OpenTherm, который занимается расчётом температуры отопления и управлением котлом в целом. Проект решил опубликовать на github и написать статью на хабре, увидел к этому интерес у людей и продолжаю развивать. В последних версиях прошивки была добавлена возможность управления контроллеров без Home Assistant, напрямую из браузера с компьютера/телефона:
Скриншот страницы управления отоплением и ГВС
Про экономическую целесообразность и комфорт
Когда на котле установлена фиксированная температура, температура в помещении может сильно меняться в течение дня. Например, на улице -30 и мы ставим на котле 60 градусов, за ночь температура поднялась до -10, а температура на котле все те же 60 градусов. И котёл может перегреть дом до 28-30 градусов.
Это мало того, что это не комфортно, но и лишний расход газа, который, по моим наблюдениям, мог составить на 3-5 тыс. рублей в месяц (в зависимости от размера дома).
Именно по этой причине целесообразно использовать погодозависимое регулирование температуры. На примере моего дома при установленной температуре 22.5 градуса это теперь выглядит так:
Пик до 24 град. связан с нагревом солнцем через окна
Кроме этого, экономия может быть достигнута за счёт установки более низкой температуры (12-15 градусов) на период длительного отсутствия, например, если это дом для эпизодического проживания.
Использование в квартирах. Я лично использую один девайс в квартире под сдачу с автономным отоплением. Потому что есть арендаторы, которые не умеют или боятся менять температуру на котле. И иногда греют квартиру до 30 градусов и потом удивляются счетам за газ. Установка девайса и беспроводного bluetooth датчика температуры полностью избавил меня от звонков по этому поводу :)
Почему это недорого
Для устройства используется плата ESP8266 или ESP32, цена которых на али/авито от 200 до 800 рублей.
Если умеете и любите паять, цена основной платы и компонентов для самостоятельный сборки выходит примерно в 1200 рублей без корпуса или 1500 рублей с корпусом. Платы можно заказать через pcbway/jlcpcb или вовсе собрать на макетке, а компоненты я брал в Чип и Дип. В собранном виде девайс может выглядеть вот так:
Если не умеете или не любите паять, то есть готовые устройства на ozon, цена от 2500 до 4000 рублей, искать по запросу esp opentherm (не реклама, это не мои девайсы, я их вообще не собираю на продажу). Или Zont за 12-15 тысяч рублей.
Итого: от 2000 до 4000 рублей за комфорт и экономию в долгосрочной перспективе.
В заключение хочу сказать, что весь этот путь от изучения протокола OpenTherm до создания своего DIY проекта и разработка прошивки полностью себя оправдал, в доме воцарилась стабильная температура, а я получил моральное удовлетворение от процесса :)
Прошивка с открытым исходным кодом и полностью бесплатная.
Наверное, это будет самый сложный пост в моей жизни, так как я никогда ранее не вел блог или что-то подобное. Я хочу начать серию постов, которая будет содержать реальные проекты по программированию на фрилансе. Зачем это? Просто хочется делиться любым опытом с сообществом. Возможно кому-то даже удастся помочь или просто обсудить проект.
Сразу скажу, я не профессиональный программист. Все, что я знаю - черпал в разное время из книг и Youtube. Да, когда-то начинал по книге изучать Delphi, а с помощью форумов и HTML писал для себя простенькие сайты. Прошло довольно много времени, изучение было успешно отложено. Около года назад снова заинтересовало написание кода, выбор пал на распиаренный Python. В общем сейчас владею небольшим багажом знаний по Python, HTML верстке с CSS, JavaScript и немного C# (На C# имеется опыт в написании плагинов для игры Rust).
В данный момент есть огромное желание практиковаться, сталкиваться с трудностями и искать решения. Именно поэтому подался на фриланс. Конечно, я не буду рекламировать площадки при публикации проектов.
Ну и чтобы завершить данный поток написанных слов, расскажу о своем первом опыте на фрилансе. Как и ожидалось мной, опыт был негативным в силу моего доверия к людям. Мне удалось взять задание по редактированию шаблона сайта на Joomla. Ранее я уже сталкивался с этой CMS и базовые принципы работы имелись. Как это обычно бывает, заказчику потребовалось больше, чем было указано в описании задания. Я согласился, так как хотелось получить опыт в реальном заказе. Сейчас я не буду описывать в чем конкретно заключалась задача и ее многочисленные подзадачи в виде "мелких" правок и какова была реализация. Скажу только итог - я выполнил всю работу и не получил за свою работу ни копейки. Да, таков был первый опыт.
Я очень надеюсь, что найдутся те, кому это будет интересно. Надеюсь, что найдутся и те, кто будет тоже делиться своими знаниями. В общем, Пикабу, не кидай камни)
Молодой парень устроился на работу программистом. Проходит месяц, второй, третий, а за зарплатой он так и не пришёл. Стало тимлиду интересно, что происходит. — Ты что это за зарплатой не приходишь? — Зарплата?! Ой… А я-то думал, дали macbook — и крутись как хочешь…
Моя первая неделя изучения программирования. Смог начать только на третий день, первые два дня был сильно занят.
После я наткнулся на сей пост Дорогу осилит идущий и вступил в телегу. С скачиванием JDK (open) не возникло никаких проблем. Далее идёт lesson 1.
Тут я столкнулся с небольшой проблемкой.
Вы видите, что тут где-то написано, что название public class'а должно совпадать с названием файла? Вот и я не вижу. И из-за этого столкнулся с ошибкой и не мог понять что за хуйня.
Далее идёт материал по переменным, типам данных. Его я прочитал/прослушал.
В конце две практические задачи.
Задача 1
public class Main {
public static void main(String[] args) {
int a = 5;
int b = 10;
// место для вашего кода
System.out.println("Значение а: " + a + ". Значение b: " + b);
}
}
На месте комментария написать код, который присвоит переменной a значение переменной b и наоборот.
Подсказка: можно использовать третью переменную.
Вариант на подумать: реализовать задачу, НЕ используя третью переменную.
Я или где-то не увидел или там нигде не было написано, что означают плюсики перед переменными. Я подумал, что если подставлю какую-либо переменную перед этими плюсиками, то оно как в калькуляторе подсчитается.
Вот первый вариант кода. Я подумал, что нужно их поменять местами, не меняя знаки сложения.
public class Main {
public static void main(String[] args) {
int a = 5;
int b = 10;
int x = -5;// место для вашего кода
System.out.println("Значение а: "x + a + b". Значение b: "x + b);
}
}
И столкнулся вот с такой ошибкой. Я снова обратился к chatgpt и он мне всё объяснил.
Оказывается переменные складываются вот таким образом a = a + c;
Вроде всё заработало. Значение a теперь 10, b теперь 5
Я посмотрел в разбор практики для урока.
/**
* На месте комментария написать код, который присвоит переменной a значение переменной b и наоборот.
* Подсказка: можно использовать третью переменную.
*/
public class Task1 {
public static void main(String[] args) {
int a = 5;
int b = 10;
// Вводим переменную temp, куда записыванием значение переменной a
int temp = a; //temp == 5
// Присваиваем переменной a значением переменной b
a = b; //a == 10
// Присваиваем переменной и значение temp, куда ранее записали изначальное значение a
b = temp; //b == 5
System.out.println("Значение а: " + a + ". Значение b: " + b);
}
}
Да блядь! Надо было написать код который менял бы a и b местами при любых значениях, а не только a = 5 и b = 10
На чтение/прослушивание материала, написание кода у меня ушло часа 2 может 2,5 и я устал, разболелась голова.
Я решил выпить чайку, взял литровую кружку, насыпал 500 гр. листового чая, ебнул сверху кипятка и выпил. После лёг на кровать и уставился в потолок. И до меня снизошло просветление. Я долбоеб не человек, а тюлень. А тюлени не пишут код. Как любое существо идентифицирующее себя тюленем, я лежал целыми сутками на кровати, залипал в ютубчик и жрал сырую рыбу.Так прошло ещё 3 дня.
Действие чая прошло, от сырой рыбы мне стало плохо и пришло осознание, что я всё таки не тюлень, а человек. А значит что? Нужно дальше изучать программирование. Надеюсь следующая неделя будет продуктивней.