Рубрика «разработка» - 20

После года разработки вышел эмулятор QEMU 6.0 - 1

Прошел ровно год с момента выхода эмулятора QEMU 5.0, и сейчас разработчики представили новую версию. Проект дает возможность запустить программное обеспечение, подготовленное для одной архитектуры, на аппаратной платформе с другой архитектурой.

Пример — выполнение приложения для ARM на ПК с процессором x86. Благодаря особенностям эмулятора приложение в изолированном окружении выполняется почти с той же эффективностью, что и в нативном окружении. Достигается это, в частности, за счет прямого выполнения инструкций на процессоре, а также за счет применения гипервизора Xen или модуля KVM. Сейчас эмулятор поддерживает 14 аппаратных архитектур и может эмулировать около 400 разных устройств. За год разработчики внесли свыше 3 тысяч изменений от 268 разработчиков.
Читать полностью »

Статья, перевод которой мы публикуем сегодня, посвящена next-persist — компактному и нетребовательному к ресурсам NPM-пакету. Цель его создания — упрощение обработки и реконсиляции данных, на постоянной основе хранящихся на клиенте и не имеющих критического значения. При этом данный пакет задуман так, чтобы его применение не ухудшило бы полезных возможностей Next.js по серверному рендерингу и генерированию статических сайтов.

Прежде чем мы поговорим о месте next-persist в экосистеме современной веб-разработки, нам нужно коснуться Next.js — передового фреймворка, созданного Vercel, позволяющего без особых сложностей создавать и развёртывать приложения, которые, при этом, отличаются высокой скоростью загрузки.

Библиотека next-persist: преодоление разрыва между серверным рендерингом и постоянным хранением данных на клиенте - 1

Next.js произвёл революцию в осмыслении того, как именно веб-содержимое доставляется пользователям. Произошло это за счёт объединения всего лучшего из сфер серверного и клиентского рендеринга с технологиями генерирования статических сайтов. Кроме того, применение Next.js до крайности упрощает доведение веб-проектов до рабочего состояния. Это происходит за счёт автоматизации конфигурирования вспомогательного ПО, вроде webpack и babel, и благодаря использованию CI/CD Vercel.

Правда, это не позволяет говорить о том, разработчику, пользующемуся удобствами экосистемы Next.js, не приходится сталкиваться с какими-то сложными задачами. Одной из таких задач является организация постоянного хранения данных на клиенте.
Читать полностью »

Автор статьи, перевод которой мы публикуем сегодня, хочет рассказать об использовании баз данных SQLite в Android-разработке. В частности — он коснётся тут двух вопросов. Во-первых — речь пойдёт о классе SQLiteOpenHelper, который применяется для работы с базами данных в коде приложений. Во-вторых — он уделит определённое внимание инструменту Database Inspector, инспектору баз данных, встроенному в Android Studio.

Применение SQLiteOpenHelper и Database Inspector в Android-разработке - 1
Читать полностью »

В прошлом месяце мы с женой поехали на выходные в Напу. Это — хорошее место. Там много чем можно занять себя на воздухе, да и ехать туда из Сан-Франциско недалеко.

Мы отлично провели время. А когда вернулись домой и я сбросил на компьютер фотографии, которые снял в путешествии, я обратил внимание на то, что они занимают страшно много места. Я — вовсе не фотограф, хотя мне и очень нравится делать снимки, главная цель которых — сохранить память о чём-то хорошем.

Один из снимков меня прямо-таки зацепил. Это была 12-мегапиксельная фотография козы размером почти в 10 Мб. Такая качественная, что невооружённым глазом этого толком и не оценить. Это навело меня на размышления. Мне хотелось бы сохранить этот снимок — как часть воспоминаний о том, чем мы занимались, но перспектива тратить на него столько дискового пространства меня вовсе не радовала. Снимки такого размера способны довольно быстро заполнить даже немаленький диск. Я понял, что мне нужна программа для пакетного изменения размеров подобных файлов.

12-мегапиксельное фото козы и пакетное изменение размеров файлов на Mac - 1


Фото козы (3024 × 4032, HEIC), которое было преобразовано в JPG с уменьшением разрешения

Я, кроме прочего, люблю, чтобы вокруг был бы порядок, чтобы у всего было бы своё место. Мне нужно было не только поменять размеры изображений в пакетном режиме. Мне хотелось ещё и сохранить метаданные снимков и EXIF-данные (дату, время, место съёмки и так далее).
Читать полностью »

Тому, кто хостит приложение у провайдера наподобие Fly.io (далее — просто Fly), вполне может понадобиться подключиться к серверу, на котором работает это приложение, по SSH.

Но Fly — это вроде как белая ворона среди других подобных платформ. Наше железо работает в дата-центрах, разбросанных по всему миру. Наши серверы подключены к интернету через Anycast-сеть, а друг с другом они связаны с помощью WireGuard-сети. Мы берём у пользователей Docker-контейнеры и превращаем их в микровиртуальные машины Firecracker. И, когда мы только начали работать, мы поступали именно так для того чтобы дать нашим клиентам возможность запускать «пограничные приложения». Такие приложения обычно представляют собой сравнительно небольшие, самодостаточные фрагменты кода, которые весьма чувствительны к качеству работы сетей. Эти фрагменты кода, в результате, нужно запускать на серверах, расположенных как можно ближе к пользователям. В такой среде возможность подключения к серверу по SSH не так уж и важна.

SSH, пользовательский режим, TCP-IP и WireGuard - 1

Но теперь не все наши клиенты пользуются Fly по такой схеме. В наши дни в среде Fly можно без труда выполнять весь код, имеющий отношение к некоему приложению. Мы упростили процедуру запуска ансамбля сервисов в кластерной среде. Такие сервисы могут, используя защищённые каналы связи, взаимодействовать друг с другом, могут хранить данные на постоянной основе, могут, по WireGuard-сети, связываться со своими операторами. Если я продолжу рассказ о нашей системе в том же духе, то мне придётся дать ссылки на все материалы, которые мы написали за последние пару месяцев.

Но, в любом случае, нормальной поддержки SSH у нас не было.
Читать полностью »

Вы, наверное, уже знаете о том, что для хранения сведений об отдельных компонентах цвета можно применять пользовательские CSS-переменные. Это позволяет избавиться от необходимости повторения одних и тех же цветовых координат в стилях, описывающих цветовую тему сайта. Возможно, вы даже знаете о том, что одну и ту же переменную можно использовать для настройки нескольких компонентов цвета.

Пользовательские CSS-переменные, инверсия светлоты цветов и создание тёмной темы за 5 минут - 1
Читать полностью »

Подготовка к техническому собеседованию по Python — нелёгкая задача. На таком собеседовании вам, вполне возможно, встретятся задачи на вывод символов по заданным шаблонам. Если вы хотите научиться решать такие задачи — вам может пригодиться подборка способов их решения, приведённая в этом материале.

Python: 18 задач на вывод символов по заданному шаблону - 1

Здесь продемонстрировано 18 примеров кода. Начинающие программисты вполне могут проработать всё по порядку, а опытные могут разобраться именно с тем, что им нужно. Главное — понять, как устроен тот или иной пример. Отсутствие чёткого понимания того, что происходит в программах, способно сыграть злую шутку с тем, кто, например, заучив фрагмент кода и воспроизведя его на собеседовании, попытается объяснить то, как именно этот код работает. А тех, кто проводит собеседование, часто интересуют именно такие вот разъяснения.
Читать полностью »

В этом материале я приведу практический пример реализации архитектуры API First с применением спецификации OpenAPI. А именно, сначала расскажу о том, как создал определение API, а затем — о том, как, на основе этого определения, создал серверную и клиентскую части приложения. В процессе работы у меня возникли некоторые сложности, которых я тоже коснусь в этом материале.

Читать полностью »

Когда разработчики вносят прямо в исходный код секретные данные, вроде паролей и ключей API, эти данные вполне могут добраться до общедоступных репозиториев.

Я — разработчик, и я признаю то, что раньше допускала попадание секретных данных в открытые GitHub-репозитории. Подобные данные, жёстко заданные в коде, всегда были проблемой в различных организациях. Я, выполняя испытания на проникновение с целью проверки систем защиты компаний, всегда в первую очередь исследую код этих компаний на наличие в нём секретных данных. Если разработчик вносит что-то вроде паролей в код, эти данные могут оказаться в общедоступных репозиториях или в пакетах приложений, а после этого могут попасть в руки злоумышленников.

Поиск секретных данных в исходном коде - 1

По мере того, как микросервисные архитектуры и приложения, построенные вокруг неких API, получают всё более и более широкое распространение, разработчики часто нуждаются в программных механизмах обмена идентификационными данными и другими секретными сведениями. А это значит, что программисты, работая с подобными данными, иногда могут совершать ошибки.
Читать полностью »

В наши дни чат-боты используются в самых разных сценариях взаимодействия с пользователями. Например, в службах поддержки клиентов различных компаний, о чём я уже писала. В этом материале я хочу рассказать о механизмах, которые используются в чат-ботах при поиске того, что нужно пользователю.

Чат-бот для электронной коммерции - 1

Например, посетитель сайта что-то ищет и пользуется для этого чат-ботом, работающим на сайте или в мобильном приложении. Бот разбирает сообщение и, основываясь на имеющихся в нём ключевых словах, отвечает пользователю, выдавая ссылку на страницу с результатами поиска, среди которых пользователь может найти то, что ему нужно.

Бот, о котором пойдёт речь в этом материале, создан с использованием Java и Apache OpenNLP. Здесь мы поговорим о том, как боты разбирают сообщения пользователей, удаляя из них всё ненужное.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js