Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
Помогли мы вам |
Android engineering team QA — ежегодная сессия вопросов и ответов команды разработчиков Android на Reddit. Как обычно, вопросы банальные, а ответы обтекаемые. Но есть несколько интересных моментов.
Package visibility in Android 11 — статья разработчиков Android о новом запрете Android 11, благодаря которому сторонние приложения больше не смогут получать информацию или запускать любое установленное на смартфон приложение.
Напомню, что до версии 11 Android предоставлял вполне официальный API для получения информации обо всех установленных на смартфон приложениях (имя, версия, время установки и так далее) и не налагал никаких запретов на запуск любых приложений. Этим пользовались не только сторонние менеджеры приложений, панели быстрого запуска и другой полезный софт, но и разного рода малварь и недобросовестные разработчики, сливающие информацию на третью сторону.
Начиная с Andoroid 11 система будет ограничивать доступный приложению список установленных приложений и обяжет разработчиков перечислять приложения, с которыми приложение автора хочет контактировать, в манифесте:
<manifest package="com.example.game">
<queries>
<package android:name="com.example.store" />
<package android:name="com.example.service" />
</queries>
...
</manifest>
Кроме самих приложений, также можно перечислить типы интентов, которые собирается использовать приложение (в следующем примере приложение заявляет о своем намерении делиться изображениями с другими приложениями):
<manifest package="com.example.game">
<queries>
<intent>
<action android:name="android.intent.action.SEND" />
<data android:mimeType="image/jpeg" />
</intent>
</queries>
...
</manifest>
Эти требования будут распространяться на все приложения, собранные для API 30 и выше (targetSdkVersion=30), и не коснутся уже существующих приложений, до тех пор пока в Google Play не будет введен минимальный уровень API 30.
Для лаунчеров и других приложений, которым необходим доступ ко всем установленным приложениям, предусмотрено новое разрешение QUERY_ALL_PACKAGES. Но для его использования придется проходить ручную премодерацию.
Write fluent code in Kotlin — статья с советами о том, как сделать код на Kotlin более понятным для чтения.
require(arg.length < 10) {
"message"
}
val result = checkNotNull(bar(arg)) {
"message"
}
/// вместо ///
if (arg.length < 10) {
throw IllegalArgumentException("message")
}
val result = bar(arg)
?: throw IllegalStateException("message")
|
|