Qtproject в реестре что это такое
kak.torange.ru
В файлах SYSTEM.DAT и USER.DAT в каталоге Windows 95/98 или в папке C:\W\System32\Config\ в Windows NT хранится так называемый системный реестр, содержащий большое количество информации. Кроме записей, необходимых Windows, большинство программ при установке записывают туда и свою собственную информацию. Чтобы внести изменения в реестр, необходимо открыть его с помощью программы, предназначенной для этого. Примером может служить программа REGEDIT, поставляемая в стандартном комплекте Windows. Для ее запуска откройте диалоговое окно Пуск/Выполнить, введите Regedit и нажмите OK.
Вы увидите окно, разделенное на две части. В левой находится навигатор, похожий на навигатор Проводника, а справа собственно информация. Реестр состоит из шести разделов: HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG и HKEY_DYN_DATA. В каждом разделе содержатся папки. Если в папке или разделе есть подпапки, то слева от этой папки находится значок «плюс«. При нажатии на него эта папка «разворачивается», а значок превращается в «минус«, нажав на который ее можно снова «свернуть«. Если же нажать на значок папки или ее название, то в правом окне появится список тех параметров, которые содержатся в этой папке (но не в подпапках!). Каждый параметр состоит из его имени и значения. Для каждого параметра существует свой путь, по которому его можно найти. Путь состоит из последовательности папок, в которых находится этот параметр, начиная с родительской папки (это один из шести вышеперечисленных основных разделов). Примером такого пути может быть HKEY_CURRENT_CONFIG\ Display\ Settings, а названием параметра Resolution. В объединении эти два значения — параметр и путь к нему (его часто называют адресом) указывают на уникальный параметр. Например, к двум различным параметрам может быть один и тот же путь, два параметра могут иметь одинаковые названия, но лежать в различных папках и подпапках, но не может существовать двух параметров с одинаковым адресом и именем. По реестру можно осуществлять поиск (используя меню, или сочетанием клавиш CTRL + F).
Выделив нужный раздел (нажав на значок раздела или его имя), в нем можно создать параметр, или подраздел. Для этого необходимо воспользоваться меню Правка/Создать. В системном реестре Windows существует 3 вида параметров: строковой, двоичный, и DWORD. В строковом хранится одна строка (string), в двоичном — двоичное значение, в DWORD — десятичное или шестнадцатеричное значение. При создании параметра необходимо указать его имя. Затем, дважды нажав на нем в правом окне, можно ввести значение параметра (или изменить существующее).
Если в совете сказано установить значение параметра, это значит, что необходимо изменить существующее значение параметра на нужное, или, если параметр с таким именем отсутствует, создать его, а затем изменить содержимое.
В конце работы для большинства изменений необходимо закрыть REGEDIT и перезагрузить компьютер.Ну, во-первых разберемся, что это такое: реестр Windows. Когда мы устанавливаем или удаляем программы, изменяем параметры Windows ставим новое оборудование, все это фиксируется и записывается в реестр. Можно сказать так, реестр — это сердце Windows. Чтобы посмотреть или отредактировать реестр надо запустить программу Regedit (Пуск — Выполнить — Regedit). Физически, реестор хранится в каталоге Windows (95/98) под именами User.dat и System.dat. Сразу говорю, если не знаете то, что хотите изменить на 100% не изменяйте, а иначе грош цена. Ну, а для тех кто все таки изменил даю подсказку. При удачной загрузке, Windows делает резервные копии реестра под именами User.da0 и System.da0. Этим и воспользуемся. Конечно можно создать свои резервные копии на всякий «пожарный». Если Windows не грузится, то при загрузке зажимаем Ctrl. Как появиться меню выбираем «Command prompt only«, переходим в папку Windows («CD C:\Windows») и наберите команду scanreg / restore (в Windowse NT — rdisk). Теперь перезагрузитесь и Windows должен запуститься. Если такой программы нет, то придется набирать в командной строке из папки Windows:
Ну, а теперь перейдем непосредственно к реестру.
1.)Откройте regedit, найдите ключ
Здесь Вы найдете полный список установленных программ. Если каких то программ уже нет, удалите ненужные папки с их названиями (неполный список отображается в «Панель управления — Установка и удаление программ»).
находится список всех запускающихся программ при загрузке Windows. Вы можете удалить ненужную программу, а можете и добавить. Для этого надо создать Строковый параметр, для имени надо ввести название программы, а в качестве значения параметра ввести путь к программе. Если на Вашем компьютере несколько пользователей, то списки программ могут быть здесь:
HKEY_USERS\.DEAFAULT\Software\Microsoft\Windows\CurrentVersion и
HKEY_USERS\(Имя пользователя)\Software\Microsoft\Windows\CurrentVersion
3.)Вот и все, разминка закончена, и мы переходим к Главному меню.
Чтобы избавиться от пункта Избранное (Windows 98), зайдите в раздел
и создайте здесь Двоичный параметр NoFavoritesMenu со значением 01 00 00 00. Все! Теперь пункт Избранное больше появляться не будет. Удалите созданный параметр или измените его значение на 00 00 00 00, чтобы вернуть пункт на место. Избавляться от других пунктов можно аналогично:
Документы — параметр NoRecentDocsMenu
Настройки — NoSetFolders
Найти — NoFind
Завершение работы — NoClose
Завершение сеанса… — NoLogOff.
Также можно отменить работу правой кнопкой мыши в главном меню, для этого создайте тамже DWORD-параметр под именем NoChangeStartMenu с значением 1. Готово! Ну и последние штрихи. Нравится сообщение о том, с какой кнопки следует начать работу? Нет? Тогда создаем DWORD-параметр с именем NoStartBanner и значением 1.
и создайте Строковый параметр LegalNoticeCaption. В качестве значения введите «Обнаружен вирус «Чернобыль»», создайте еще один строковый параметр LegalNoticeText с значением «Нажмите «Ок» и все данные на жестком диске будут уничтожены». Перезапустите Windows и наслаждайтесь результатом. В первом параметре вписываем заголовок, а во втором — сам текст.
5.)Теперь можно изменить часики в нижнем правом углу. Зайдите на
и создайте строковый параметр sTimeFormat
Его значение «HH:mm«, где HH — часы, : — разделительный знак, а mm — минуты. Для вступления в силу изменений необходима перезагрузка. Весело посмотреть как друг будет мучится настраивать часы если поменять местами HH и mm! Ну, а если хотите нагадить очень силно, тогда надо сделать так: Hm:mH’mH;Hm и тд.
6.)Чтобы не было в значках ярлыков стрелочек, найдите ключ HKEY_CLASSES_ROOT\Piffile и удалите параметр IsShortcut, тоже самое следует проделать в папке Lnkfile. Перезагрузите компьютер и наслаждайтесь результатом.
7.)Путь к инсталляционным файлам Windows 95/98 лежит в
Измените его и Windows будет искать установочные файлы при добавлении компонентов или изменении параметров системы.
8.)Чтобы убрать «ладошку» с зашареных ресурсов, достаточно удалить значении По умолчанию из ключа
9.)Еще Вы можете вообще убрать с рабочего стола все значки. Для этого создайте в ключе
DWORD-параметр с именем «NoDesktop«. Перезагрузитесь и увидете самый чистый в мире Рабочий стол.
10.)Для того, чтобы скрыть диски в проводнике, заходим в
и создаем здесь Двоичный параметр с именем «NoDrives».
Значение будет зависить от того, какие диски хотите скрыть:
Диск A — значение 01 00 00 00
B — 02 00 00 00
C — 04 00 00 00
D — 08 00 00 00
E — 10 00 00 00
F — 20 00 00 00
Если хотите скрыть несколько дисков, то нужно просуммировать их значения. Но учтите, что эти числа шестнадцатеричные. Чтобы верно рассчитать, воспользуйтесь калькулятором (Программы — стандартные — Калькулятор). Выберите в меню Калькулятора «Вид — Инженерный«, затем выберите «Hex» и просчитайте. Например, чтобы скрыть диски C и D надо плюсовать 04 00 00 00 и 08 00 00 00. Вводим в значение параметра 0C 00 00 00. Чтобы скрыть диски A и E надо просуммировать 01 00 00 00 и 10 00 00 00, получаем результат 11 00 00 00.
11.)Откройте Свойства: Экран, здесь и поскрываем некоторые вкладки. В редакторе реестра найдите раздел
создайте здесь DWORD-параметр с именем NoDispBackgroundPage и значением 1. Теперь вкладка Фон отображаться не будет. Остальные вкладки скрываются следующими параметрами:
NoDispAppearancePage — Оформление
NoDispScrSavPage — Заставка
NoDispSettingPage — Настройка.
12.)Теперь сделаем так, чтобы пункт Открыть с помощью… всегда появлялся в контекстном меню. Для этого найдем ключ HKEY_CLASSES_ROOT\*\ и создадим в нем раздел shell (если его нет). Здесь создадим еще раздел «openas«, а в нем еще «command«. Измените значение «По умолчанию» на «C:\WINDOWS\rundll32.exe shell32.dll,OpenAs_RunDLL %1«. Готово, можете проверять.
13.)Для изменения скорости выпадания Главного меню зайдите в ключ
и создайте Строковый параметр Menu Show Delay. В значение введите время задержки (в миллисекундах) и перезагрузитесь.
14.)Сейчас попробуем пункт Открыть в Блокноте поместить в контекстное меню. Зайдем в раздел HKEY_CLASSES_ROOT\*\shell (Если нет — создайте). Создайте раздел «Open» и измените По умолчанию на «Открыть в Блокноте«. Теперь создайте раздел «command» а в нем измените По умолчанию на «notepad.exe %1«. Готово.
15.)А сейчас поиграемся с Internet Explorer’ом. Хотите изменить обои браузера? Пожалуйста. Зайдите в ключ
и создайте Строковый параметр «BackBitmap«. А в качестве параметра введите путь к рисунку в формате Bmp и перезапустите браузер. Но это еще не все.
создайте новый Строковый параметр Window Title. В значении введите то, что вы желаете увидеть в заголовке после названия страницы, перезапустите браузер и наслаждайтесь. Точно также будет выглядить и проводник.
16.)Если Вы хотите любоваться именем или просто словом после часов в Systray (нижняя панель) то зайдите на
и создайте два строковых параметра: s1159 и s2359. В их значение следует ввести нужное имя. Ограничение — 8 букв.
17.)Когда надо перезапустить реестр, а перезагружать машину не охота, то в некоторых случаях поможет следующее: нажмите Ctrl+Alt+Del, затем выберите Explorer и кнопку «Завершить задачу». На предложение выключить машину отвечайте отказом, затем жмите «Снять задачу» в следующем окне, после чего увидите, как исчезла и появилась «Панель задач«.
Не все работает в Windows 95
Восстановление реестра
При работе с реестром надо соблюдать осторожность. Удаление каких-либо важных данных случайно или по незнанию может привести к краху операционной системы. Тогда спасти положение может только восстановление последней работоспособной копии.
Если Вы собрались поэкспериментировать с реестром, предварительно сохраните на диске файлы SYSTEM.DAT и USER.DAT. Они находятся в каталоге, куда была установлена операционная система и имеют атрибуты «только для чтения» и «скрытый». В случае если реестр будет серьезно испорчен, Вы сможете переписать эти файлы в каталог Windows, установить нужные атрибуты и реестр будет как новенький. Только не вздумайте восстанавливать эти файлы, когда загружен Windows, иначе система накроется окончательно и спасет ее только полная переустановка! Для восстановления этих файлов надо предварительно перезагрузиться в DOS и уже там заменять испорченные файлы хорошими.
Но это не единственный вариант восстановления данных. Дело в том, что операционная система, при каждом удачном запуске сохраняет копию реестра в CAB-файле, который записывается в скрытый каталог SYSBCKUP каталога Windows. По умолчанию, хранятся последние пять копий. Это число может варьироваться от 0 до 99 и устанавливается значением ключа MaxBackupCopies в файле scanreg.ini в каталоге Windows. Правда не стоит устанавливать слишком большое значение, т.к. файлы занимают немало места (один файл имеет размер больше мегабайта).
Чтобы восстановить реестр с одной из этих резервных копий надо перезагрузиться в DOS и выполнить команду
Появится список доступных резервных копий реестра отсортированных по времени их создания. После выбора нужной копии данные будут благополучно восстановлены, и Вы получите реестр, отвечающий состоянию дел на момент его создания.
Но если Вы устанавливали какие-то программы или меняли настройки операционной системы в промежуток между последней резервной копией и сбоем в реестре, то все эти данные безвозвратно пропадут. Надо ли нам это? Однозначно нет! Чтобы в любое время создать резервную копию реестра воспользуйтесь командой
которая в случае нормально прошедшей проверки создаст резервную копию.
Еще один вариант резервирования и восстановления реестра состоит в экспортировании раздела или целой ветви, которую Вы планируете изменять. Это можно осуществить в Regedite для Windows в меню «Реестр». Выделите нужный раздел и щелкните по пункту «Экспорт файла реестра». После задания имени файла данные этого раздела будут в него экспортированы. Файл имеет расширение REG. Для его импортирования в реестр достаточно дважды щелкнуть на нем и данные будут перенесены. Правда этот способ восстановления информации имеет один существенный недостаток: все удаленные или измененные записи будут восстановлены, но вот добавленные записи удалены не будут. Поэтому данный способ больше подходит, если Вы проводите какие-то несущественные изменения, и чтобы откатить их не вводя старые данные заново, можно воспользоваться экспортом/импортом.
Вообще, работать с реестром надо крайне осторожно, но если Вы будете периодически резервировать его, то никаких проблем возникнуть не должно
QSettings: Просматриваем, создаем и удаляем записи в реестре Windows
В первую очередь обеспечим возможность просмотра содержимого реестра:
Далее обеспечим возможность добавления новых значений в открытую ветку (с помощью кнопки Создать ):
Наше приложение действительно сможет влиять на систему (поэтому будьте осторожны при тестировании примера):
Также мы сможем удалять записи, которые нам не нужны (по нажатию кнопки Удалить ):
Реализация
Заголовочный файл mainwidget.h :
Файл реализации mainwidget.cpp :
Просмотр реестра мы основываем на классе QSettings с его функциями-членами для доступа к группам ( childGroups() ) и к ключам для заданной группы ( childKeys() ). При этом QSettings инициализируется следующим образом:
При этом нам приходится обрабатывать сигнал разворачивания элемента дерева:
Поиск пути в реестре для некоторого элемента дерева происходит с помощью вспомогательной функции:
Обратите внимание, что вложенные элементы в пути реестра разделяются символами «\\» (например, HKEY_CURRENT_USER\\Environment ).
Чтение значений происходит при щелчке на элементе в дереве:
Обратите внимание, что для упрощения мы считываем все значения без учета их типа, как текст. Это может привести к появлению загадочных надписей в интерфейсе программы на неизвестных человечеству языках. Именно по этой причине я не добавил функцию редактирования значений в нашу программу.
Создание новой записи сводится к добавлению значения в текущую ветку реестра:
Запрос данных у пользователя осуществляем с помощью модального диалогового окна, описание которого здесь мы опускаем.
Удаление значения из реестра сводится реализуется не сложнее, чем добавление:
Qt Build System: спасательный круг для сборки
История
Сейчас мы вместе постараемся повторить путь Йорга Борнемана (Jörg Bornemann), разработчика QBS.
Критика make (и производных)
В короткой заметке Ian Lance Taylor, 2007 г. рассмотрен основной недостаток Cmake как замены Make — Он. Слишком. Сложен. Это адская смесь нескольких языков, поддерживать её (для действительно сложных систем) могут только гуру разработки и отладки (отлаживать её тоже проблематично). Ещё одним недостатком является то, что за гибкость (даже ГИБКОСТЬ), приходится расплачиваться потерей производительность в сгенерированных скриптах.
Что не так с QMake?
В инфраструктуре Qt на сегодняшний день широко используется система сборки Qmake, которая поддерживается официально и все ещё дорабатывается. Зачем же возникла надобность «just another one» системы сборки?
Попробуйте посмотреть на QTDIR/mkspecs/features/exclusive_builds.prf:
Представляем «спасательный круг» — Qt Build System
Начнём пробовать!
Автор советует собрать qbs из исходников, но можно иметь ввиду, для пользователей win и linux есть бинарные сборки
win — собрано под MSVC2010. Я бы тоже посоветовал собрать версию из git ( у меня проблемы были с плагинами и MOC).
В бинарном виде qbs зависит от библиотек QtCore и QtScript (+Concurrent для Qt5)
Создадим Hello World проект на С++:
main.cpp
Создадим также минимальный проект на qbs:
hello.qbp
LINUX:
1. Открываем в текущей папке шелл.
2. Добавляем путь, куда вы распаковали/собрали qbs, в PATH (вернее, bin папку)
PATH=
/qbs/bin/:$PATH
3. запускам qbs:
qbs
После этого программа сборки запустит разбор проекта и соберет в папке build/debug исполняемый файл (ну мы же не указали пока папку назначения?)
WINDOWS:
4. Поскольку под Windows, как правило компилятор и qt не находятся в PATH, qbs может попросить вас запустить «qbs platform probe», что необходимо сделать.
5. затем возможно, понадобится запустить qbs config update или подобное (если он попросит, возможно это исправили уже).
6. после этого при запуске qbs [build] — вы получите собранный бинарник «HelloWorld.exe»
Продолжаем изучать
Теперь попробуем освоить сборку чего-то более сложного, и заодно, разобраться с языком.
Для начала, создадим новую папку и скопируем туда папки «2dpainting» и «collidingmice» из папки examples с Qt.
Почему сразу два? Мы создадим конфигурацию для сборки сразу двух продуктов.
Продукт — это целевой «выход» системы сборки, подобие «.pro» файла при сборке Qmake. В одном проекте qbs может быть несколько продуктов.
Для начала создадим проект «examples.qbp»
Откроем консоль и попробуем собрать, выведется ошибка «ERROR: Error while setting up build environment: qt.core.incPath not set. Set qt.core.incPath or qt.core.path in your profile. »
Закроем пока глаза на не слишком юзер-френдли способ конфигурации, и создадим файл «qbs.config» с таким содержимым (WINDOWS):
либо под LINUX (ubuntu):
Т.е. мы разбиваем код на независимые продукты, которые могут собираться параллельно. Внесём изменения в examples.qbp:
Можете снова запустить «qbs». Обратите внимание, для «.qrc» файла будет автоматически вызван «rcc» и все это слинковано вместе. Все файлы при этом указываются одним списком, без разделения на HEADERS, SOURCES и т. д., как было в qmake.
Как это все работает?
Для начала рекомендую бегло ознакомиться со справкой
Основные концепции языка: Проект (Project), Продукт (Product), Артефакт (Artifact), Модуль (Module), Правило (Rule), Группа(Group), Зависимость (Depends), Тег (Tag).
Продукт — это аналог pro или vcproj, т. е. одна цель для сборки.
Проект — это набор ваших продуктов вместе с зависимостями, воспринимаемый системой сборки как одно целое. Один проект — один граф сборки.
Тег — система классификации файлов. Например «*.cpp» => «cpp»
Правило — Преобразование файлов проекта, отмеченных определенными тегами. Генерирует другие файлы, называемые Артефактами. Как правило, это компиляторы или другие системы сборки.
Артефакт — файл, над который является выходным для правила (и возможно, входным для други правил). Это обычно «obj», «exe» файлы.
У многих QML-объектов есть свойство condition, которое отвечает за то, будет собираться он или нет. А если нам необходимо разделить так файлы? Для этого их можно объединить в группу (Group)
примерно таким образом.
Что же дальше?
Заключение
Ссылка на архив со всеми примерами к статье:
narod.ru/disk/49759080001.18d6748f8ef86e26c6dea2e2c5ed7d13/examples.zip.html
В архиве БОНУС! не упомянутый в статье пример модуля для сборки DELPHI 2007 проекта (планируется сделать разбор в следующей статье).
Ссылки
Примечание: Qt Build Salvation (Спасение для сборки Qt) — внутреннее имя QBS, в README дерева исходников.
«Полезняшки» или «Реестр Windows как платформа»
Приоритеты
Давным-давно, когда я переходил с ХР на Семерку, одним из важных преимуществ новой системы я считал введение приоритетов на ввод-вывод и на пейджинг, а не только на процессор. Однако сейчас у нас Десятка на дворе, а удобных штатных средств управления этими приоритетами так и не появилось.
Как я с удивлением обнаруживаю, большинство пользователей вообще не в курсе о такой замечательной возможности. Их удовлетворяет опция в Task Manager по смене текущего приоритета CPU для уже запущенного процесса (и то только если им это будет позволено). А ситуацию, когда даже выставленный в LOW фоновый процесс своим дисковым обменом или свопингом мешает работать более приоритетным задачам, считают неизбежным злом.
Некоторые, устав от обращения к Task Manager при каждом запуске, вставляют в ярлыки запуска критичных программ перед самим объектом что-то вроде
Это позволяет запустить что-то с приоритетом HIGH (а не realtime, как они думают), но никак не затрагивает проблему с приоритетом ввода-вывода. Кроме того, ряд приложений используют файл-запускальщик, который, в свою очередь, запускает основную программу. А она в таком варианте будет запущена с приоритетом по умолчанию, и лишь уже не нужный запускальщик будет красоваться в Task Manager с приоритетом HIGH.
Решением проблемы является создание веток в « Image File Execution Options » в реестре, но руками это делать достаточно утомительно.
Конечно, есть ряд сторонних приложений, которые позволят вам прописать правильные ветки в реестре для нужной программы, но я специально упомянул в первом абзаце слово «штатных»: зачастую это нужно делать на машине, на которой запрещена установка сторонних экзешников, отключены сменные носители, и затруднено получение (как из интернета, так и по почте) любых исполняемых файлов, пакетов, архивов, BAT, CMD и даже REG-файлов. В особо серьезных случаях контролируется реальное содержимое файла на предмет смены типа или внедрение в документ-контейнер вложения недозволенного типа.
Итак, намаявшись с реестром, я поставил себе задачу написать утилитку, которая позволяет менять базовый приоритет запуска программы как для CPU, так и для IO и Paging, и при этом:
Изложенные требования определили выбор, что это должен быть скриптовый язык, последующие исследования показали, что даже к PowerShell прибегать не нужно, достаточно будет обычного синтаксиса CMD и VBS, затем попробовал уместить одно действие в одну строку, а не в bat-файл, а далее, так как в любом случае требовалась запись в реестр, родилась мысль уместить все в самом реестре, тем самым выполнив условие по отсутствию файлов.
В итоге получилась утилитка, которая выглядит, как выпадающее подменю в свойствах исполняемых файлов:
Соответственно, процесс инсталляции выглядит так: получаем вышеизложенный исходник, сохраняем его, как reg-файл, и запускаем. После чего его можно смело удалять. А мы получаем новое подменю по правому клику мышки на исполняемом файле.
При этом, правда, стоит учитывать две вещи:
1. То, что делает утилитка, разрешено только админам, поэтому, если вы не член группы админов, одним только запросом UAC не обойдется.
2. Windоws почему-то показывает подменю не только на самих.ЕХЕ, но и на их ярлыках, но при этом не вызывает на последних пункты подменю.
Также вы, должно быть, заметили, что:
— во-первых, нет приоритета Realtime,
— во вторых, все приоритеты, кроме CPU, идут только в сторону уменьшения
— в третьих, приоритет Paging ставится чуть выше, чем приоритет IO.
Это соответствует рекомендациям Microsoft по работе с приоритезацией:
— уменьшать у ненужного, а не увеличивать у нужного;
— свопинг важнее работы с файлами;
— не работать с Realtime («честный» риалтайм действительно может быть опасен для стабильности всей системы, поэтому через реестр ни его, ни высокий приоритет IO не выставить).
Брандмауэр
Между первой и второй промежуток небольшой – решил таким же образом упростить работу со штатным брандмауэром. Многим он хорош, но не удобством обращения с ним. В данном случае решил ускорить создание разрешений или запрещений на программу. (Считаю возможность привязывать правила к программам главным преимуществом внутреннего брандмауэра перед внешним.) Я использую брандмауэр в режиме блокировки исходящих соединений по умолчанию, поэтому добавлять новую программу, как правило, приходится часто.
Замечу, что, в отличие от первой утилитки, здесь клик на одном пункте не отменяет другие, т.е. создание запрещающего правила не стирает разрешающее, и наоборот. Сделано это на случай, когда создается несколько правил на одну программу и в дальнейшем каждое уточняется (по портам, адресам, режимам, и т.д.). Таким образом, если кликнуть и на «allow», и на «block», будет создано 2 правила, а сетевой доступ программе будет закрыт (запрещающие правила имеют приоритет перед разрешающими).
Деинсталляция для обеих утилит штатная – заходим в «Программы и компоненты» и удаляем: