Коротко о веб-разработке
Источник: vk.com/wall-119334888_71967
Источник: vk.com/wall-119334888_71967
QML - это язык декларативного описания пользовательского интерфейса, основанный на JavaScript и Qt. Особенность QML заключается в том, что он позволяет создавать динамические, анимированные и интерактивные элементы интерфейса с минимальным кодом.
QML также поддерживает интеграцию с C++ и другими языками, что дает возможность использовать готовые библиотеки и фреймворки.
Некоторые преимущества QML:
Быстрая разработка и отладка. QML-код можно изменять во время выполнения, не перезапуская приложение. QML также имеет встроенные средства для отображения ошибок и предупреждений.
Кросс-платформенность. QML-приложения могут работать на разных платформах, таких как Windows, Linux, Mac OS, Android, iOS и других, без изменения кода.
Гибкость и расширяемость. QML позволяет создавать пользовательские элементы интерфейса, комбинируя стандартные элементы и добавляя свою логику. QML также поддерживает использование ресурсов, таких как изображения, звуки, шрифты и т.д..
Высокая производительность. QML использует аппаратное ускорение для отрисовки графики, а также оптимизирует выполнение JavaScript-кода.
Интересные факты и фичи языков программирования у нас в канале, заходи :)
12 новых проектов для работы с клиентами, программирования, учета финансов, озвучки текста, совместного создания документов и многого другого. Битва за «Продукт недели» началась!
Product Radar – здесь каждую неделю публикуются лучшие онлайн-сервисы и железки от русскоязычных команд.
Это площадка, где энтузиасты из мира технологий делятся своими идеями, обсуждают и создают вместе новые продукты, чтобы делать жизнь людей лучше.
Сервис аналитики целевой аудитории и генерации контента с использованием нейросетей.
🥈 BURNGRAM
Cоздавай нейро-креативы для брендов и зарабатывай!
Онлайн тренажер по работе с SQL, которым приятно пользоваться, и бесплатный интерактивный курс
4 декабря 2023 на сайте Product Radar были опубликованы свежие 12 проектов, которые поборются за ТОП-3 места по итогам недели. Победители получат значки «Продукт дня №1,2,3», а также отдельные посты в тг-канале Радара.
Следующий «набор» появится на сайте через неделю, вы еще можете поучаствовать в нем или выбрать другую дату для размещения. Заполняйте заявку сейчас.
4 декабря – 10 декабря 2023 года
Читайте описания, кликайте на название проекта, голосуйте и комментируйте его на Радаре. Ваша поддержка очень важна основателям
Программа учёта для сервисных центров. Заказы, склад, продажи, зарплата, продвижение отзывами 2ГИС
Решаемая проблема: Нет простой и гибкой программы для учёта в ремонтном бизнесе услуг для учёта заказов, склада, зарплаты. Программа 1С- это функциональный ад для небольшого бизнеса со штатом от 2 до 5 человек.
Быстрый, понятный, бесплатный сервис мониторинга сайтов на основе бота в Telegram
Решаемая проблема: Владельцам ресурсов важно знать, что с сайтом всё в порядке. Сервисы, предлагающие функцию мониторинга, перегружены фичами. В большинстве случаев нужно просто ответить на вопрос: работает сайт или нет
Мониторинг пулл реквестов, сбор статистики по код-ревью
Решаемая проблема:
1. Длительное код-ревью и тестирование, никто из разработчиков не спешит это делать, как итог – долгое время релиза новых улучшений
2. Разработчики не вовлечены в процесс оценки кода, нет стимулов
Озвучка текста онлайн реалистичными голосами на 150 языках и диалектах
Решаемая проблема: Есть текстовые контент, который нужно озвучить для видео, презентации или учебы. Услуги живого диктора стоит дорого, самому озвучивать сложно, т.к. нужно оборудование и навыки.
Онлайн-платформа для совместной работы и обучения. Онлайн-доски, вебинары и видеоконференции.
Решаемая проблема: На российском рынке мало хороших аналогов Miro — командам нужно пространство для онлайн-работы. Низкая вовлечённость студентов и сотрудников при обучении, перенасыщение классическими форматами.
Совместный лайвкодинг (livecoding) с подсветкой синтаксиса и запуском php, sql, sass в браузере
Решаемая проблема: Удобного и бесплатного онлайн-инструмента, совмещающего в себе лайвкодинг (совместное программирование) и запуск написанного кода – сложно найти. По отдельности – легко, вместе – нет.
Платформа создания и управления магазинами в Telegram, а скоро и на всех онлайн-площадках продаж РФ
Решаемая проблема:
Вход в новые каналы продаж требует вложений:
– Разработка сайта и приложений – это дорого и долго
– Соц. сети не дают нужных результатов или запрещены
– Публикация в др. маркетплейс – много рутины
Пакетное удаление фона, обработка фото с помощью ИИ
Решаемая проблема:
– Удаление и замена фона на карточках товаров
– Удаление фона и лишних объектов с фото, улучшение фото
– Массовые операции с фото с минимальными затратами
– Интеграция с системами пользователей
Сервис для учета вашего финансового капитала.
Решаемая проблема: Хочется иметь такой сервис всего под рукой, а в идеале еще и с понятной визуализацией результатов и возможных изменений своего NetWorth.
Помогу вести учёт Ваших финансов через Телеграм и Гугл таблицы. Просто. Удобно. Надёжно.
Решаемая проблема:
Никаких громоздких приложений
Никаких скачиваемых таблиц и баз данных
Никаких 100500 кнопок для заполнения и полей
Никакого разрозненного бюджета
Управляй задачами и проектами, а также финансами и клиентами в одном сервисе.
Решаемая проблема: Для ведения учета проектов и финансов по ним, как правило собственники используют разные программы.
Готовый шаблон сайта на 1-С Битрикс для городских и загородных отелей. Уникальные блоки и сборщик!
Решаемая проблема: На рынке мало готовых решений, а те, что есть имеют очень слабый интерфейс и дизайн, есть привязка только к одному модулю бронирования, слабая оптимизация под поисковые системы, маленькая конверсия.
Лайкните этот пост и поделитесь ссылкой на сайт Product Radar с друзьями и коллегами, чтобы как можно больше людей узнало о классных продуктах на русском языке!
Подписывайтесь на тг-канал площадки – Product Radar — лучшие стартапы России. До новых встреч, стартап-пока!
Приветствую всех. Подскажите пожалуйста. Натолкнуло меня на этот вопрос волна приложений "честная цена".
Допустим, новичок хочет быть программистом - делать небольшие игры. Но при этом понимает, что игродел - это скорее хобби, а хотелось бы в дальнейшем какую-никакую, а копейку за свою работу получать, а кому этого бы не хотелось?
Почему-то мне показалось, что будущее за вебом и мобильной разработкой. Логика в целом такая, что даже на пикабу если полистать посты, то и дело можно увидеть, как кто-то написал приложение за пару часов, кто-то игру какую-то онлайн делает, кто-то сайт запилил на коленке за день. Создается иллюзия, что это более возможно и доступно для обычного новичка, потому как постов о полновесных проектах серьезных не так уж и много.
Но, начиная изучать что-то из этого, понимаешь - что-то тут не то.
Из популярных языков - это либо, огромный локомотив типа С# и .NET, на котором можно сделать абсолютно ВСЁ, но в то же время и ничего, потому как реализация через фреймворки определенных задач будет похожа на забивание гвоздя отверткой.
Либо это легкий и непринужденный инструмент, вроде Python, на котором можно сделать тоже абсолютно ВСЁ, но это всё будет несерьезным и легковесным, скорее как дополнение к чему-то.
Либо это совсем какие-то узконаправленные языки, на которых кроме определенной задачи ничего и не сделаешь. Вот создан язык, чтобы на нем сайты делать - вот и делай на нём только сайты.
Казалось бы, всё просто, так оно и работает, в одиночку никто проекты не разрабатывает и в проектах как раз и есть условные 3 человека, которые знают все эти 3 разные технологии и объединяют в единое целое. НО!
НО! Тогда кто все эти люди, которые за вечер клепают свои альфа проекты? Они тебе и игры запилят, и сайты, и десктоп, и андроид приложения. И вообще оказывается это всё они пилят после просмотра пары роликов на ютуб. Но не могут же они знать абсолютно все технологии и языки, чтобы так легко переключаться с одного на другой?
И так с абсолютно каждым языком. У кого ни спроси - это всегда какие-то абстрактные ответы по типу, что для каждой задачи свой язык.
Неужели среди программистов, где чуть ли не правило - не изобретать велосипед, если его уже сделали до тебя, до сих пор нет понятного примерного плана пути для начинающего? Не того road map, где стрелочками отмечены абсолютно все существующие технологии по определенной сфере, а что-то понятное, то через что проходили все, прежде чем стать профессионалами, прежде чем начать делать что-то своё?
Не хочется же быть тем человеком, который потратит, скажем, пару месяцев на изучение языка, а оказывается его никто и не использует в реальной деятельности. Или узнать, что то, над чем ты мучался месяцы и кучей кода на другом языке делается за пару минут.
P. S. Я знаю, что сейчас в IT не войти, надо работать на заводе, а на 100 резюме джунов приходится всего 1 вакансия. У меня другая работа, которая устраивает. Это скорее попытка узнать, какую ошибку я совершил в молодые годы, когда выпустился из техникума со специальностью "информационные технологии", где максимум тебя научили писать "hello, world" на двух разных ЯП, а из-за обилия выбора направлений в дальнейшем я запутался, заблудился и не воспользовался шансом, когда он еще был.
Проще всего понять о чем говорим посмотреть на эту картинку. Более подробно в этом телеграмм-канале
В чем суть и различие?
JDK (Java Development Kit) - включает в себя Java Development Tools и среду выполнения Java - JRE (Java Runtime Environment).
JDT (Java development tools) - включают в себя около 40 различных инструментов: javac (компилятор), java (лаунчер для приложений), javap (java class file disassembler), jdb (java debugger) и др.
JRE - это пакет всего необходимого для запуска скомпилированной Java-программы. Включает в себя виртуальную машину JVM и библиотеку классов Java Class Library.
Резюмируем. Есть JDK для ведения разработки, которое содержит JRE и интсрументы разработки (тот же компилятор и дебаггер). Дальше сам JRE содержит какую-то JVM и библиотеку непонятных классов
Непосредственно JVM
JVM (Java Virtual Machine) - программа предназначенная для выполнения байт-кода. Благодрая которой, Java может работать на всех платформах. Раньше программы писали под определенную платформу, а теперь можно написать на Java и работать программа будет везде. Собственно JVM существует масса как комерческих, так и с открытым исходным кодом. А для чего пишется столько различных JVM? Нуу... Чтобы на какой-нибудь операционке работало быстрее, так же можно написать свою JVM для каких-либо своих целей
Что делает? Отвечает за загрузку классов, выполнение байт-кода, управление памятью и очисткой мусора (знаменитый сборщик мусора)
А что за байт-код? Когда мы компилирует программу мы получаем на выходе файлы с расширением .class. Это и есть файлы с байт-кодом
Есть вопрос гораздо интереснее, а как это файлы JVM находит? Что за сущность, которая говорит JVM: "О смотри что нашел, тебе нужно?". Сие носит название как Class loader
Class Loader
Загрузчики классов - это классы, часть JVM, они отдают классы в JVM, а дальше она делает с классами что захочет, но перед этим классы должны быть загружены. Загружаются классы не все разом, а по мере необходимости
Загрузчики:
1) Bootstrap classloader загружает основные библиотеки Java, расположенные в папке <JAVA_HOME>/jre/lib. Этот загрузчик является частью ядра JVM, написан на нативном коде (C, C++). Когда JVM загружает классы из rt.jar, она не выполняет все этапы проверки, которые выполняются при загрузке любого другого класс-файла т.к. JVM изначально известно, что все эти классы уже проверены. Поэтому, включать в этот архив какие-либо свои файлы не стоит, в отличие от наших классов, их JVM проверяет
2) Extension classloader загружает код в каталоги расширений (<JAVA_HOME>/jre/lib/ext, или любой другой каталог, указанный системным свойством java.ext.dirs). Если нужно, чтобы какой-то класс загружался каждый раз при старте Java машины, можешь скопировать исходный файл класса в эту папку, и он будет автоматически загружаться
3) System classloader загружает код, найденный в java.class.path, который сопоставляется с переменной среды CLASSPATH. Это реализуется классом sun.misc.Launcher$AppClassLoader.
Загрузчик классов выполняет в строгом порядке:
1) загрузка - находит и импортирует двоичные данные для типа.
2) связывание - выполняет проверку, подготовку и (необязательно) разрешение.
3) проверка - обеспечивает правильность импортируемого типа.
4) подготовка - выделяет память для переменных класса и инициализация памяти значениями по умолчанию.
5) разрешение - преобразует символические ссылки из типа в прямые ссылки.
6) инициализация - вызывает код Java, который инициализирует переменные класса их правильными начальными значениями.
Немного о проверке корректности .class
Файл скомпилированного класса (.class) содержит дополнительную информацию о классе: имя, модификаторы, супер-класс, супер-интерфейсы, поля, методы и атрибуты
Так при загрузке класса:
1) происходит чтение класс-файла, т.е проверка корректности формата
2) создается представление класса в Constant pool (Meta space, область памяти для такого рода делов)
3) грузятся супер-классы и супер-интерфейсы. Если они не будут загружены, то и сам класс не будет загружен
Загрузчик классов написан на Java. Поэтому возможно создать свой собственный загрузчик классов, не понимая тонких деталей JVM. У каждого загрузчика классов Java есть родительский загрузчик классов, определенный при создании экземпляра нового загрузчика классов или в качестве системного загрузчика классов по умолчанию для виртуальной машины
И это не все
Java нужно как-то интерпретировать байт-код, для этого есть угадайте что, интерпретатор, работает он быстро, но его недостатком является медленное выполнение. Если функция выполняется много раз он каждый раз заново компилирует байт-код в машинный код. Такую проблему решает JIT
JIT (just in time) - компилятор, который использует интерпретатор когда увидит функцию, использующую несколько раз. Т.е. интерпретатор видит повторяющийся код => отдает его на съедение JIT, а после использует сразу скомпилированный код от JIT (нативный код) и ему не нужно заново компилировать байт-код
Области тьмы (памяти)
JVM использует множество областей памяти для работы, одни области сооздаются при запуске программы и работают пока она не закончится, другие существуют поменьше
1) Heap (куча) - создается при запуске и работает пока программа не завершится. В ней хранятся объекты доступные для всех потоков из всех участков программы (не нужные объекты чистит сборщик мусора). Может быть фиксированного размера и определяться по мере выполнения программы
2) Run-Time Constant Pool - область хранения класса или интерфейса в рантайме. Хранит информацию о классе, константы (числовые литералы, ссылки на методы и поля)
3) Native Method Stacks - стеки для поддержки нативных методов, написанных не на Java
4) Java Virtual Machine Stacks - стек для потоков, т.е. каждый поток имеет свой стек. Стеки могут быть как фиксированного размера, так и динамически изменяться
5) Program Counter Register (PCR) - каждый поток имеет такую область памяти, в ней хранится адрес инструкции на которой поток завершился, чтобы потом начать с этой инструкции
Frame - новый frame создается каждый раз, когда вызывается метод. Frame уничтожается, когда завершается вызов метода. Соответсвенно раз фрэйм создается для создания метода, каждый фрейм имеет свои константы, локальные переменные. А фрейм, который выполняетсяв данный момент называется текущим, т.к. работать может только один фрейм во всей программе.
Каждый frame содержит ссылку на run-time constant pool для поддержки динамического связывания метода. Динамическое связывание загружает классы по мере необходимости. Позднее связывание методов и переменных вносит изменения в другие классы, которые метод использует с меньшей вероятностью нарушить этот код.
Почитать о том как я проходил собеседования, об IT и жизни можешь в этом телеграмм-канале
Замыкание (closure) в JavaScript - это функция, которая имеет доступ к своему собственному лексическому окружению, а также к окружениям внешних функций, в которых она была определена.
Это позволяет функции сохранять значения переменных и параметров из внешнего контекста, даже после того, как внешняя функция завершила свое выполнение.
Замыкание создается, когда внутренняя функция ссылается на переменные из внешней функции. Например:
function outerFunction() {
var outerVariable = 10;
function innerFunction() {
console.log(outerVariable);
}
return innerFunction;
}
var closure = outerFunction();
closure(); // Выведет 10
В данном примере функция innerFunction является замыканием, так как она ссылается на переменную outerVariable из внешней функции outerFunction. Даже после того, как outerFunction завершила свое выполнение и переменная outerVariable вышла из области видимости, замыкание все еще имеет доступ к этой переменной.
Замыкания часто используются в JavaScript для создания приватных переменных и методов. Они позволяют скрыть внутренние детали реализации и предоставить только необходимый интерфейс для работы с объектом.
Однако, использование замыканий может привести к утечкам памяти, если замыкание хранит ссылку на большой объем данных. Поэтому важно быть внимательным при работе с замыканиями и осознавать потенциальные проблемы производительности.
Интересные факты и фичи языков программирования у нас в канале, заходи :)
Справились? Тогда попробуйте пройти нашу новую игру на внимательность. Приз — награда в профиль на Пикабу: https://pikabu.ru/link/-oD8sjtmAi
IT-Комедия: Улётные Приколы. Получи порцию кодерского веселья!