Что такое realm sip?
Вообще, прохождение авторизации в Описание RFC протокола SIP протоколе зависит от «realm», различного для каждого защищаемого домена. Таким образом, в Хеш-сумма (digest — дайджест) авторизации, каждый защищаемый домен имеет свой набор имен пользователей и паролей.
Цитата из RFC 2617:
REALM: Это строка, отправляемая пользователю, который, собственно, знает какое имя пользователя и пароль следует использовать. Эта строка должна содержать, как минимум, имя хоста, производящего авторизацию, и может дополнительно содержать имя списка пользователей, которые могут иметь доступ. Например, эта строка может выглядеть так: «registered_users@gotham.news.com».
Реалистичный Realm. 1 год опыта
Realm давно известен в среде мобильных (и не только) разработчиков. К сожалению, в рунете почти нет статей об этой базе данных. Давайте исправим эту ситуацию.
Год назад в build.gradle нашего проекта появилась строчка:
classpath "io.realm:realm-gradle-plugin:0.87.5"
За этот год код Realm вырос до версии 3.3, обзавелся множеством фич и починил кучу багов, реализовал новый функционал и получил облачный бекенд. Давайте поподробнее поговорим о Realm в реалиях Andoroid разработки и обсудим тонкие моменты, возникающие при его использовании.
Содержание
- О нас
- Realm как стартап
- Realm как база данных
- Hello world
- Сравнение с другими базами данных
- Live Objects — Синхронное чтение
- Live Objects — Асинхронное чтение
- Основные особенности Realm объектов
- Транзакции
- Синхронные транзакции
- Асинхронные транзакции
- Open/close realm
- Notifications, RxJava
- Многопоточность и асинхронность
- Тестирование
- Один Realm хорошо, а три лучше
- Наследование и полиморфизм
- Kotlin
- Realm mobile platform
- Отладка
- Архитектура
- Полезные ссылки
- Заключение
О нас
Мы разрабатываем приложение для коммуникации внутри команды, что-то среднее между telegram и slack. Android приложение написано на Kotlin, с самого начала использовался подход offline-first, т.е. когда все данные, отображенные на экране, достаются из кэша. Попробовав несколько разных баз данных, мы остановились на Realm и в течении года активно использовали его. Данная статья выросла из внутреннего документа по использованию Realm. Статья не является переводом документации и не претендует на полноту описания, это скорее сборник рецептов и разбор тонких моментов. Для полного понимания строго рекомендуем прочитать официальную документацию. Мы же расскажем о своем опыте и какие шишки набили за этот год. Весь код для статьи написан на Kotlin, найти его вы можете на Github.
Realm как стартап
Если говорить о Realm как о компании, то это датский стартап основанный в 2011 году. Ранее проект назывался tight.db. За время существования привлечено 29M$ инвестиций. Зарабатывать компания планирует на основе Realm Mobile Platform, сама же база данных бесплатная и опенсорсная. Realm под Android появился в 2014 году и с тех пор постоянно развивается. Некоторые апдейты ломают обратную совместимость, однако фиксы можно сделать достаточно легко и быстро.
Realm как база данных
Realm — это база данных для нескольких платформ. О себе они пишут:
The Realm Mobile Platform is a next-generation data layer for applications. Realm is reactive, concurrent, and lightweight, allowing you to work with live, native objects.
Если кратко, то это нативная no-sql база данных для Android (Java, Kotlin), iOS (Objective-C, Swift), Xamarin (C#) и JavaScript (React Native, Node.js).
Так же есть backend, который позволяет синхронизировать данные из всех источников.
Из ключевых особенностей стоит отметить zero copy, MVCC и ACID. Встроенного механизма устаревания и очистки данных нет.
Hello world
Hello world под Android выглядит следующим образом:
Добавим в build.gradle
build.gradle (Project level) classpath "io.realm:realm-gradle-plugin:3.3.0" build.gradle (App level) apply plugin: 'realm-android'
В Application настроим Realm Configuration
Realm.init(this) val config = RealmConfiguration.Builder() .build() Realm.setDefaultConfiguration(config)
И можно начинать работать с базой данных:
val realm = Realm.getDefaultInstance() realm.executeTransaction < realm ->val dataObject = realm.createObject(DataObject::class.java) dataObject.name = "A" dataObject.id = 1 > val dataObject = realm.where(DataObject::class.java).equalTo("id", 1).findFirst() dataObject.name // => A realm.executeTransaction < realm ->val dataObjectTransaction = realm.where(DataObject::class.java).equalTo("id", 1).findFirst() dataObjectTransaction.name = "B" > dataObject.name // => B
Сравнение с другими базами данных
На хабре есть статья от 8 апреля 2016 года, где сравниваются 9 ORM под Android, в том числе Realm. Realm там в лидерах, вот графики:
Сравнение с другими ORM
На своем сайте Realm приводит следующую статистику:
Графики с сайта Realm
Можно выделить три главные особенности, которые необходимо учитывать:
Live Objects — Все объекты, полученные из Realm, являются, по сути, прокси к базе данных. За счет этого достигается zero copy (объекты не копируются из базы)
Transactions — Все изменения привязанных объектов данных нужно проводить внутри транзакции
Open\Close — Необходимость открытия\закрытия instance базы данных
Live Objects
Все объекты из Realm можно получить синхронно или асинхронно.
Синхронное чтение
fun getFirstObject(realm: Realm, id: Long): DataObject?
Вызываем метод Realm и блокируем поток, пока не получим объект или null. Использовать объекты, полученные в других потоках, нельзя, поэтому для использования в главном потоке, нужно блокировать ui или использовать асинхронные запросы. К счастью, Realm предоставляет нам прокси, а не сам объект, поэтому все происходит достаточно быстро. С объектом можно работать сразу после получения.
Асинхронное чтение
Весьма неочевидный кейс. Как вы думаете, что произойдет в этом коде:
val firstObject = realm.where(DataObject::class.java).findFirstAsync() log(firstObject.id)
Правильный ответ: получим ошибку java.lang.IllegalStateException
При асинхронном чтении мы хоть и получаем объект сразу, но работать с ним не можем, пока он не загрузится. Проверять это нужно с помощью функции isLoaded() или вызвать блокирующую функцию load(). Выглядит достаточно неудобно, поэтому тут лучше использовать rx. Преобразуем в observable и получаем загруженный объект в OnNext. Асинхронные операции доступны только в потоках с Looper.
fun getObjectObservable(realm: Realm, id: Long): Observable
Основные особенности Realm объектов
- Получение объектов из базы очень быстрое, десериализации как таковой нет, чтение с диска происходит только при обращении к конкретному полю
- Именно для этого существует требование делать все поля приватными и обращаться через геттеры
- Метод copyFromRealm() — позволяет получать отвязанные, полностью собранные объекты, прямо как обычная ORM. Правда и все фишки Realm становятся недоступны. На вход принимается глубина десериализации, по умолчанию MAX_INT
- В дебагере все поля будут null. Для получения какого-либо значения нам нужно обращаться через геттер
- Все объекты Live, т.е живые. Изменения распространяются моментально в рамках одного потока. Более сложные кейсы смотрите ниже (многопоточность).
- Фильтрация объектов осуществляется по полям, причем названия полей вы указываете руками в виде строки. Например так: .equalTo(«id», 1). Это усложняет рефакторинг и приводит к ошибкам в наименовании полей для фильтрации. К сожалению Realm не генерирует переменные с названиями полей, поэтому все выборки лучше прятать внутри функции:
fun findFirstDataObject(id: Long, realm: Realm) : DataObject = realm.where(DataObject::class.java).equalTo("id", id).findFirst()
RealmObjectChangeListener
Person p = realm.where(Person.class).findFirst(); p.addChangeListener(new RealmObjectChangeListener() < @Override public void onChange(Person person, ObjectChangeSet changeSet) < if (changeSet.isDeleted()) < hide(); // Object was deleted >else < // Use information about which fields changed to only update part of the UI if (changeSet.isFieldChanged("name")) < updateName(person.getName()); >> > >);
- Получение списков очень быстрое, по сути мы получаем только count. Все запросы lazy, получить большой список из сложных объектов мы можем очень быстро
- Списки доступны только для чтения, любые методы изменения приводят к исключению
- Т.к. мы можем быстро и дешево получать все элементы, можно забыть о проблеме пагинации. Мы всегда отдаем полный список элементов, при скролле обращаемся к объектам, и они быстро получаются из базы. Если нам нужно подгрузить данные, мы запускаем загрузку, получаем данные, сохраняем их в Realm, снова получаем полный список с загруженными элементами и отображаем его
- До недавнего времени (до версии 3.0) была проблема с перерисовкой всех элементов списка. Если мы используем список для адаптера, то при изменении одного элемента происходит полная перерисовка всего списка. Использовать DiffUtils и сравнивать какие объекты изменились, не получится, т.к. это live объекты. В Realm 3.0 появились OrderedCollectionChangeSet, который сообщает нам DeletionRanges, InsertionRange, ChangeRanges. Стало наконец возможно понять какие объекты и как изменились.
Пример CollectionChangeListener
private final OrderedRealmCollectionChangeListener> changeListener = new OrderedRealmCollectionChangeListener() < @Override public void onChange(RealmResultscollection, OrderedCollectionChangeSet changeSet) < // `null` means the async query returns the first time. if (changeSet == null) < notifyDataSetChanged(); return; >// For deletions, the adapter has to be notified in reverse order. OrderedCollectionChangeSet.Range[] deletions = changeSet.getDeletionRanges(); for (int i = deletions.length - 1; i >= 0; i--) < OrderedCollectionChangeSet.Range range = deletions[i]; notifyItemRangeRemoved(range.startIndex, range.length); >OrderedCollectionChangeSet.Range[] insertions = changeSet.getInsertionRanges(); for (OrderedCollectionChangeSet.Range range : insertions) < notifyItemRangeInserted(range.startIndex, range.length); >OrderedCollectionChangeSet.Range[] modifications = changeSet.getChangeRanges(); for (OrderedCollectionChangeSet.Range range : modifications) < notifyItemRangeChanged(range.startIndex, range.length); >> >;
Транзакции
Изменять привязанные к Realm объекты можно только внутри транзакции, при изменении вне транзакции получим ошибку. С одной стороны, не очень удобно, с другой стороны — дисциплинирует и не дает изменять объекты в любой части кода, только в определенном слое (database). Также нужно помнить, что транзакции внутри другой транзакции запрещены.
Как нельзя делать:
val user = database.getUser(1) button.setOnClickListener
val user = database.getUser(1) button.setOnClickListener
Транзакции можно производить синхронно и асинхронно. Давайте подробнее рассмотрим каждый из вариантов:
Синхронные транзакции:
fun syncTransaction() < Realm.getDefaultInstance().use < it.executeTransaction < val dataObject = DataObject() it.insertOrUpdate(dataObject) >> >
Также можно выполнять транзакции между beginTransaction и commitTransaction, однако рекомендуется использовать именно executeTransaction.
К сожалению, синхронные транзакции не поддерживают onError callback, так что обработка ошибок остается на вашей совести. Есть issue на добавление onError callback c июня 2016 года.
Асинхронные транзакции
Асинхронные транзакции запускаются методом asyncTransaction. На вход отдаем саму transaction и callback onSuccess и onError, на выходе получаем объект RealmAsyncTask, с помощью которого мы можем проверить статус или отменить транзакцию. Асинхронные транзакции запускаются только в тредах с Looper. Пример асинхронной транзакции:
Realm.getDefaultInstance().use < it.executeTransactionAsync(< it.insertOrUpdate(DataObject(0)) >, < log("OnSuccess") >, < log("onError") it.printStackTrace() >) >
Пара важных нюансов:
Вы не сможете присвоить через сеттер объект, не привязанный к Realm. Необходимо сначала положить объект в базу, а потом прикрепить привязанную копию. Пример:
val realm = Realm.getDefaultInstance() val parent = realm.where(Parent::class.java).findFirst() val children = Children() // parent.setChildren(children)
Много транзакций лучше объединять в одну. В Realm есть внутренняя очередь на транзакции (размером 100) и если вы превысите ее, упадет исключение.
Все асинхронные транзакции работают на одном executor’e
// Thread pool for all async operations (Query & transaction) static final RealmThreadPoolExecutor asyncTaskExecutor = RealmThreadPoolExecutor.newDefaultExecutor();
Если у вас будет много асинхронных операций за короткое время, получите ошибку RejectedExecutionException. Выходом из данной ситуации будет использование отдельного потока и запуск в нем синхронных транзакций или объединение нескольких транзакций в одну.
Open / close realm
Все объекты из базы данных мы получаем, используя конкретный instance Realm-a, и можем работать с ними пока открыт этот instance. Как только мы вызовем realm.close(), любая попытка чтения объекта обернется для нас исключением. Если мы не будем вовремя закрывать Realm, то это приведет к утечкам памяти, т.к. сборщик мусора не умеет корректно работать с ресурсами, используемыми Realm.
В официальной документации рекомендуется открывать / закрывать Realm:
- для Activity: onCreate / onDestroy
- для Fragment: onCreateView / onDestroyView
В случае если вам нужно как-то изменить данные или добавить новые, проще всего получить новый instance, записать данные и затем закрыть его. В Kotlin для этого можно использовать .use()
Realm.getDefaultInstance().use < // it = realm instance>
Для чтение объектов с помощью Rx можно использовать “изолированные” instance и закрывать их в doOnUnsubscribe (или использовать Observable.using)
// Use doOnUnsubscribe val realm = Realm.getDefaultInstance() realm.where(DataObject::class.java).findAllSorted("id").asObservable().doOnUnsubscribe < realm.close() >// Use Observable.using Observable.using(Realm.getDefaultInstance(), realm -> realm.where(DataObject::class.java).equalTo("id", id) .findFirstAsync() .asObservable() .filter(realmObject -> realmObject.isLoaded()) .cast(DataObject::class.java), Realm::close);
Также есть особенность, связанная с закрытием Realm в onDestroy\onDestroyView. Иногда после закрытия Realm происходит вызов FragmentManagerImpl.moveToState → ViewGroup.removeView →… → RecyclerViewAdapter.getItemCount() и вызывается метод list.size() от невалидной коллекции. Так что тут нужно проверять isValid() или отвязывать adapter от recyclerView
Если вы используете Kotlin Android Extensions, то работать с view (из kotlinx.android.synthetic.*) из Fragment можно только начиная с метода onViewCreated(), лучше настраивать все listeners в этом методе, чтобы не получить NPE.
После разбора трех самых важных особенностей, пробежимся по менее важным:
Notifications, RxJava
Realm поддерживает уведомления об изменении данных, причем как самого объекта, так и вложенных объектов (всех залинкованных объектов). Реализовано это с помощью RealmChangeListener (нам приходит сам объект), RealmObjectChangeListener ( приходит измененный объект и ObjectChangeSet для него, можно понять какие поля изменились) или с помощью RxJava (в onNext получаем объект, в случае асинхронного запроса необходимо проверять isLoaded(), работает только в потоках с Looper).
RxJava2 пока не завезли, issue висит с сентября 2016 года, когда реализуют — неизвестно, используйте Interop.
Аналогично можно слушать изменения коллекций или всего instance Realm. Слушать изменения внутри транзакций запрещено.
fun getObjectObservable(realm: Realm, id: Long): Observable < return realm.where(DataObject::class.java).equalTo("id", id).findFirstAsync() .asObservable().filter(< it?.isLoaded >).filter < it?.isValid >>
Многопоточность и асинхронность
Realm это MVCC база данных. Википедия говорит про MVCC:
“Управление параллельным доступом с помощью многоверсионности (англ. MVCC — MultiVersion Concurrency Control) — один из механизмов обеспечения параллельного доступа к БД, заключающийся в предоставлении каждому пользователю так называемого «снимка» БД, обладающего тем свойством, что вносимые пользователем изменения в БД невидимы другим пользователям до момента фиксации транзакции. Этот способ управления позволяет добиться того, что пишущие транзакции не блокируют читающих, и читающие транзакции не блокируют пишущих.”
На практике это выглядит следующим образом: мы можем слушать изменения объекта или с помощью RxJava получать измененные объекты в onNext. В случае, если изменения происходят в потоке А, а мы работаем с объектом в потоке B, то поток B узнает об изменениях после закрытия Realm instance в потоке A. Изменения передаются посредством Looper. Если в потоке B Looper-a нет, то изменения не дойдут (можно проверить методом isAutoRefresh()). Выход из данной ситуации — использовать метод waitForChange().
Что касается асинхронных вызовов и транзакций, то их лучше не использовать вовсе. Удобнее переводить действия на отдельный поток и там выполнять синхронные операции. Причин несколько:
- Нельзя смешивать асинхронные транзакции и синхронные, если смешать, все транзакции станут синхронными
- Нельзя использовать асинхронные вызовы в потоках без Looper
- Для длительных транзакций нужно открыть отдельный instance realm, иначе realm может быть закрыт во время транзакции и вы получите исключение
- Все действия в асинхронной транзакции происходят на отдельном внутреннем executor-е, как следствие вы не можете пользоваться внешними realm объектами, возможно переполнение executor-а, изменения realm object не распространяются между потоками и прочие неудобства
Тестирование
Раньше Realm.java — был final и для тестирования нужен был powerMock или другие подобные инструменты. В данный момент Realm.java перестал быть final и можно спокойно использовать обычный mockito. Примеры тестов в демо проекте или на официальном репозитории
Один Realm хорошо, а три лучше
Работая с Realm мы всегда имеем ввиду стандартный realm, однако существуют еще In-Memory Realm и Dynamic Realm.
Стандартный Realm — можно получить методами Realm.getDefaultInstance() или с помощью конкретной конфигурации Realm.getInstance(config), конфигураций может быть неограниченное количество, это по сути отдельные базы данных.
In-Memory Realm — это Realm, который все записанные данные хранит в памяти, не записывая их на диск. Как только мы закроем этот instance, все данные пропадут. Подходит для кратковременного хранения данных.
Dynamic Realm — используется в основном при миграции, позволяет работать с realm — объектами без использования сгенерированных классов RealmObject, доступ осуществляется по именам полей.
Наследование и полиморфизм
Realm не поддерживает наследование. Любой realm-объект должен или наследоваться от RealmObject или реализовывать интерфейс маркер RealmModel и быть помеченным аннотацией @RealmClass. Наследоваться от существующих Realm объектов нельзя. Рекомендуется использовать композицию вместо наследования. Весьма серьезная проблема, issue висит с января 2015 года, но воз и ныне там.
Kotlin
Realm из коробки работает c Kotlin.
Не работают data class-ы, нужно использовать обычные open class.
Также стоит отметить Kotlin-Realm-Extensions, удобные расширения для работы с RealmObject.
Realm mobile platform
- Realm Mobile Database – база для хранения данных
- Realm Object Server – сервер, отвечающий за автоматическую синхронизацию и обработку событий
- Realm Data Integration API – для подключения и синхронизации данных с существующими БД (Oracle, MongoDB, Hadoop, SAP HANA, Postgres и Redis)
Иллюстрация работы mobile platform
Отладка
Для отладки у нас есть несколько инструментов:
- RealmLog — выводит лог, есть разные уровни логирования
- Realm браузер — нужен просмотра базы данных с компьютера. Работает только под Mac. Для просмотра базы на Windows можно использовать Stetho Realm
Также существуют несколько Android библиотек для удобного просмотра данных на девайсе. - WriteCopyTo() — позволяет скопировать базу в файл и отправить ее на анализ.
- NDK Debugging — для анализа ошибок в нативном коде можно использовать Crashlytics NDK Crash Reporting
Архитектура
Realm отлично подходит для MV* архитектур, когда вся реализация прячется за интерфейсом базы данных. Все обращения и выборки происходят в модуле базы данных (repository), наверх отдаются Observable c автоматически закрываемым realm при unsubscribe. Или принимаем на вход instance realm и производим все действия с ним. При записи объектов мы открываем realm, записываем данные и закрываем его, на вход подается только объект для сохранения. Оба примера смотрите на github.
Увы, использование Realm (без copyFromRealm) накладывает серьезные ограничения на использование clean architecture. Использовать разные модели данных для разных слоев не получится, пропадает весь смысл live объектов и прокси списков. Также сложности возникнут при создании независимых слоев и открытии\закрытии Realm, тк эта операция привязана к жизненному циклу Activity\Fragment. Хорошим вариантом будет изолированный слой получения данных, преобразование объектов и сохранение их в базе данных.
Realm очень удобен при построении offline-first приложений, когда все данные для отображения мы получаем из базы данных.
Полезные ссылки
Для продолжения знакомства и разбора тонких моментов, рекомендуем следующие статьи:
Заключение
Realm сложнее, чем кажется на первый взгляд. Однако все недостатки с лихвой покрываются его мощностью и удобством. Live объекты, нотфикации и Rx, удобное API и множество других вещей упрощают создание приложений. Из конкурентов можно выделить requery, ObjectBox и GreenDao. Полностью же Realm раскрывает себя при построении offline-first приложений, когда все данные мы получаем из кэша и нам необходимы сложные выборки, а также постоянное обновление данных.
Весь приведенный код вы можете найти на Github
- android
- android development
- android database
- realm
- Разработка мобильных приложений
- Разработка под Android
Перевод "realm" на русский
А государства, не обладающие ядерным оружием, должны ограничиваться лишь работой в сфере нераспространения.
This is how the problem manifested itself from the realm of programming into the realm of real life.
Именно так проблема проявила себя из сферы программирования в сферу реальной жизни.
Many people believed that spirits and deities of the spirit realm regularly interacted with the realm of the living.
Многие люди считали, что духи и божества духовной сферы регулярно взаимодействуют с царством живых.
A new technology has developed that could largely replace the realm of necessity with the realm of freedom.
Как мы увидим, развились новые технологии, позволяющие во многом заменить царство необходимости царством свободы.
This realm is known as the fourth dimension, or the realm of mind and knowledge and imagination.
Эта сфера известна как четвертая плотность или царство ума, знания и воображения.
In other words, the astrological realm of moving celestial bodies is like the realm of logical propositions.
Иными словами, используемая астрологическая область движущихся небесных тел подобна области логических предложений.
A human rights-based approach moves development analysis and programming from the amorphous realm of charity to the more measurable and enforceable realm of obligation.
Правозащитный подход переносит анализ и составление программ в области развития из хаотичной сферы благотворительности в сферу обязательств, которая в большей мере поддается измерению и обеспечению соблюдения.
There is a heavenly realm but only the pope can communicate with that realm.
Существует небесное царство, но только Папа может общаться с этой сферой.
The Sangha was no longer purely occupied with the spiritual realm; it had crossed into the secular realm.
Сангха более не была занята чисто духовной сферой; она перешла в светскую сферу.
Human freedom, for Berdyaev, is rooted in the realm of spirit, a realm independent of scientific notions of causation.
Человеческая свобода, для Бердяева, внедрена в сфере духа, сфера, независимая от научных понятий причинной обусловленности.
Water flows downward because its natural realm is beneath the Earth realm.
Потоки воды идут вниз, потому что ее естественная сфера ниже Земной сферы.
That events that the government would rather delegate to the realm of the twilight zone or mythology often belong in the very real realm of fact.
Те события, которые правительство скорее делегировало бы в область сумеречной зоны или мифологию, часто относятся к очень реальной сфере фактов.
Flesh belongs to the realm below; Spirit to the realm above.
Плоть принадлежит к земной сфере, Дух же - к царству свыше.
The question and answer fall outside the realm of science.
Считается, что и сам вопрос и ответ на него выходят за рамки научных поисков».
Возможно неприемлемое содержание
Примеры предназначены только для помощи в переводе искомых слов и выражений в различных контекстах. Мы не выбираем и не утверждаем примеры, и они могут содержать неприемлемые слова или идеи. Пожалуйста, сообщайте нам о примерах, которые, на Ваш взгляд, необходимо исправить или удалить. Грубые или разговорные переводы обычно отмечены красным или оранжевым цветом.
Realm что это
В отношении сферы применения этого правового акта многообразный характер различных форм, которые может приобретать
культурное разнообразие, а также
[. ] трудности, связанные с их регламентацией, заставляют в нормативном [. ]
плане действовать с большой осторожностью.
unesdoc.unesco.org
It thus refers on the one hand to the realm of all works or objects of related rights, which can be exploited by everybody without any authorization, for instance because protection is not granted under national or international law, or because of the expiration of the term of protection.
unesdoc.unesco.org
Таким образом, это определение охватывает, с одной стороны, все произведения или объекты смежных прав, которые каждый может использовать без получения разрешения, например, когда на основании национального или международного права не предоставляется охрана или когда истекает срок действия охраны.
unesdoc.unesco.org
The greatest challenge that lies ahead in bringing the right to development into the realm of practice is for all States to embrace the indivisibility and interdependence of “all the aspects of the right to development” as set forth in article 9 of the Declaration on the Right to Development.
daccess-ods.un.org
Самой сложной проблемой, связанной с практической реализацией права на развитие, является для всех государств понимание неделимости и взаимозависимости "всех аспектов права на развитие", как об этом говорится в статье 9 Декларации о праве на развитие.
daccess-ods.un.org
Nonetheless, South Africa would like to say from the outset that we believe that the PBC remains a relevant and critical tool in the broad realm of conflict prevention and peace consolidation.
daccess-ods.un.org
Тем не менее, Южная Африка хотела бы с самого начала сказать о том, что, как мы считаем, КМС остается актуальным и важнейшим инструментом в широком спектре задач в области предотвращения конфликтов и укрепления мира.
daccess-ods.un.org
There was general agreement that the topic was
[. ] situated in the realm of the law of [. ]
treaties, the focal point of which was the 1969 Vienna Convention.
daccess-ods.un.org
По общему согласию, данная
[. ] тема находится в области права международных [. ]
договоров, центральным документом которой является
Венская конвенция 1969 года.
daccess-ods.un.org
Other legislation in the realm of disaster risk reduction includes the Law on Defence, the Law on Water, the Law on Protection Against Natural Disasters, the Law on Protection Against Ion Radiation, the Decision on Setting the Coordination Team for Major Chemical Accidents, and the Law on Protection at Work.
В числе других законодательных актов в области уменьшения опасности чрезвычайных ситуаций – Закон об обороне, Закон о воде, Закон о защите от стихийных бедствий, Закон о защите от ионизирующего излучения, Постановление о создании координационной группы по крупным авариям на химических предприятиях и Закон об охране труда.
One participant remarked on how little had
[. ] changed in the realm of space weaponization [. ]
and threats over several decades and
wanted to know what, in fact, had changed over time.
daccess-ods.un.org
Один участник заметил, что за
[. ] несколько десятилетий в сфере вепонизации [. ]
космоса и угроз в космосе мало что изменилось, и
ему хотелось бы знать, что же, в сущности, изменилось с течением времени.
daccess-ods.un.org
He found that an extraordinary invasion of the
[. ] executive into the realm of authority [. ]
of the judiciary, one which seemed to call into
question some of the fundamental issues of the rule of law.
daccess-ods.un.org
По его мнению, чрезвычайное вмешательство представителя
[. ] исполнительной власти в сферу компетенции [. ]
судебных органов, по всей видимости, ставит
под сомнение некоторые из основополагающих принципов верховенства права.
daccess-ods.un.org
Snorri frequently mentions Vladimir or Valdimar, the son of Svyatoslav, who in the last quarter of the 10th century consolidated his realm more firmly than any previous rulers had managed.
Снорри часто упоминает Владимира, или Валдимара, сына Святослава, который в последней четверти 10 в. сплотил свое государство прочнее, чем это удавалось предыдущим правителям.
In the realm of financial [. ]
incentives, as noted previously, provision was made under the JUNTOS programme for families to
receive 100 soles, subject to their sending their children of school age to school regularly, a condition with which there was 93.4 per cent compliance in 2007.
daccess-ods.un.org
В области финансовых стимулов, [. ]
как уже указывалось выше, применяется программа "Хунто с", в рамках которой семьи получают
100 солей, если выполняют требование об обеспечении регулярного посещения школ детьми школьного возраста; в 2007 году данное требование выполнено на 93,4%.
daccess-ods.un.org
By the amendment of Section 2 (84/2009), the scope of the Act was widened to also apply to discrimination on the ground of ethnic origin in connection with the allocation of housing, other movable or real property or
services on the general market for the public, with the
[. ] exception of transactions within the private realm or the family.
daccess-ods.un.org
С внесением поправок в статью 2 (84/2009) сфера применения Закона была расширена и распространена также на дискриминацию по признаку этнического происхождения в связи с предоставлением жилья, другого движимого
или недвижимого имущества
[. ] или услуг на общем рынке для населения, за исключением сделок в частной [. ]
сфере или внутри семьи.
daccess-ods.un.org
The Prize is intended to reward the efforts of innovative academics and scientists as well
[. ] as related organizations in the realm of water resources.
Премия призвана поощрить усилия прогрессивно мыслящих ученых
[. ] и практиков, а также соответствующие организации, в области [. ]
водных ресурсов.
We must act so that a more open space can enable other Members to enter and play the role envisaged for them today, given their economic and financial clout, surely, but above all given the role that they are already playing as troop contributors and financial providers in the budgetary realm — because there must be a budget and there must also be countries that, fortunately, contribute to financing the activities of the United Nations.
daccess-ods.un.org
Нам также следует добиваться того, чтобы и другие члены имели больше возможностей, предусмотренных для них сегодня, учитывая, разумеется, их экономический и финансовый потенциал, но прежде всего ту роль, которую они уже играют в качестве поставщиков воинских контингентов и финансовых средств для пополнения бюджета, — поскольку в Организации должен быть бюджет и должны также быть страны, которые, к счастью, вносят свой вклад в финансирование деятельности Организации Объединенных Наций.
daccess-ods.un.org
Not much experience had been acquired in the realm of emissions from enriched cages on non-aerated open manure storage under cages, which was the reference system for conventional cages.
daccess-ods.un.org
В отношении выбросов при использовании клеток улучшенной конструкции с неаэрируемым открытым хранением помета под клетками, являвшимся базовой системой в случае обычных клеток, опыта было накоплено немного.
daccess-ods.un.org
In the realm of health as [. ]
well, our human-security-oriented policies are evident in our efforts to stem the spread of HIV/AIDS,
in our dealing with various pandemics in our region and in our efforts to promote universal access to health care and medicine.
daccess-ods.un.org
В сфере здравоохранения свидетельством [. ]
того, что мы придерживаемся политики, ориентированной на обеспечение безопасности
человека, могут служить прилагаемые нами усилия по пресечению распространения ВИЧ/СПИДа, усилия по борьбе с различными пандемическими заболеваниями в нашем регионе и усилия по обеспечению всеобщего доступа к услугам здравоохранения и медицинским препаратам.
daccess-ods.un.org
Once this is established,
[. ] refer to the Realms of Will table to determine what efforts will awaken the next realm of will.
avatarepc.com
Как только это установлено,
[. ] обратитесь к Царствам Воли, чтобы определить, что можно сделать, чтобы пробудить следующее царство воли.
avatarepc.com
Current and future planned projects lie within the realm of initiatives arising from business requirements and serving to increase market share and increase the quality standard of banking service, as well as in the realm of infrastructure projects designed to ensure the [. ]
Bank’s ability to adapt quickly to changing
market conditions and rise to the challenges of international and the nationwide domestic financial and banking market.
Текущие и запланированные проекты лежат как в сфере инициатив, обусловленных требованиями бизнеса, направленных на увеличение доли рынка и повышение качества банковского обслуживания, так и в области инфраструктурных проектов, направленных на обеспечение способности Банка [. ]
активно адаптироваться к меняющимся условиям
рынка и отвечать на вызовы международной и национальной финансово-банковских площадок.
While the argument for the lasting force of ideology at an unconscious level carries some weight (No matter how much a Soviet person was convinced that the dogma propounded to him in school was false, he still had to deal with it, one way or another, all his
life [Vail, Genis 1996:
[. ] 121]), it was above all in the realm of daily life where school [. ]
life made its lasting contribution.
anthropologie.kunstkamera.ru
И хотя аргументы в пользу неиссякавшего воздействия идеологии на подсознательном уровне имеют под собой основания («Сколько бы советский человек ни убеждался в ложности школьных постулатов, он всю жизнь
считался с ними» [Вайль, Генис 1996: 121]),
[. ] воздействие школьной жизни оказывалось заметным, прежде всего [. ]
в сфере быта.
anthropologie.kunstkamera.ru
She also noted that specific groups of older persons, such as older migrants, older persons with disabilities, the “oldest” old and dependent older persons,
required close attention from policymakers,
[. ] particularly in the realm of long-term care [. ]
and special measures of protection.
daccess-ods.un.org
Она также подчеркнула, что некоторые группы пожилых людей, например пожилые мигранты,
престарелые и старики-иждивенцы, требуют к себе
[. ] дополнительного внимания со стороны представителей [. ]
директивных органов, в частности
в вопросах долгосрочного ухода и специальных мер защиты.
daccess-ods.un.org
(2) Measures under consideration by the Self-Government authorities which would be of substantial
importance for the foreign
[. ] relations of the Realm, including participation by the Realm in international [. ]
cooperation, shall be
negotiated with the Government before any decision is taken.
daccess-ods.un.org
2) До принятия какого-либо решения по этому вопросу правительство проводит переговоры по находящимся на рассмотрении органов самоуправления мерам, которые
будут иметь
[. ] существенное значение для отношений Королевства с иностранными государствами, включая [. ]
его участие в международном сотрудничестве.
daccess-ods.un.org
In the realm of economics, [. ]
many of the former Soviet republics have reoriented themselves away from the old imperial center,
toward China in the case of Central Asia, the EU in the case of Ukraine and Kaliningrad, and Turkey in the case of Georgia and Azerbaijan.
marshallcenter.org
В области экономики многие [. ]
бывшие советские республики переориентировались со старого имперского центра на Китай в случае
Центральной Азии, ЕС в случае Украины и Калининграда и Турцию в случае Грузии и Азербайджана.
marshallcenter.org
Other significant pieces of policy and legislation in the realm of disaster risk reduction include the Law on Civil Emergency Services, and the Policy on Civil Emergency Planning and Response.
К числу других важных элементов политики и законодательства в области уменьшения риска стихийных бедствий относятся Закон о гражданских экстренных службах и Политика планирования подготовки к гражданским чрезвычайным ситуациям и реагирования на них.
We will therefore abstain from responding to the comments to which I have referred, which are beyond the realm of political, diplomatic and courteous convention and violate the principle of non-interference in the internal affairs of Member States.
daccess-ods.un.org
Поэтому мы не будем отвечать на вышеупомянутые замечания, о которых я упомянул, и которые выходят за рамки политиче ских и дипломатических норм и правил вежливости и нарушают принцип невмешательства во внутренние дела государств-членов.
daccess-ods.un.org
UNRWA should focus its energies and financial resources on its humanitarian role and leave the realm of politics to others.
daccess-ods.un.org
БАПОР следует сосредоточить свои силы и финансовые средства на выполнении гуманитарных задач и дать заниматься политикой другим.
daccess-ods.un.org
We want to inspire human rights practitioners to think tactically to reflect on the tactics they have
chosen to implement their larger
[. ] strategy and to broaden the realm of tactics considered to [. ]
effectively advance human rights.
newtactics.org
Мы хотели бы вдохновить правозащитников на тактическое мышление, чтобы задуматься о той тактике,
которую они выбирают для
[. ] осуществления своих стратегий и расширить область применения тактик, [. ]
эффективных в реализации прав человека.
newtactics.org
The Committee must adhere to the traditional rules of interpretation of law, in particular to the 1969 Vienna Convention on the Law of Treaties; it
risked undermining the
[. ] international treaty system in the realm of human rights, where it [. ]
had actively promoted an interpretation
of international standards in a way that undermined the fundamental rationale of law: to protect life.
daccess-ods.un.org
Комитет обязан придерживаться традиционных норм толкования права, в частности Венской конвенции 1969 года о праве международных договоров. Своими
действиями Комитет рискует подорвать
[. ] систему международных договоров в сфере прав человека, [. ]
где он активно продвигает такое толкование
международных стандартов, которое подрывает основополагающий постулат права: защищать жизнь.
daccess-ods.un.org
As the space domain becomes increasingly congested and interdependent, the
principles laid out in this regime provide an essential foundation
[. ] for international cooperation in the realm of space security.
daccess-ods.un.org
Поскольку космическая сфера становится все более насыщенной и взаимозависимой, принципы, установленные в
рамках этого режима закладывают
[. ] существенный фундамент для международного сотрудничества в сфере космической [. ]
безопасности.
daccess-ods.un.org
Throughout human history, woodcarvings and handicrafts have played an important role in art and aesthetics that goes well beyond function and extends into the realm of happiness and fulfilment.
На протяжении всей истории человечества резьба по дереву и кустарные промыслы играли важную роль в искусстве и эстетике, которая выходит далеко за рамки своего назначения, вторгаясь в область самоудовлетворения и самореализации.