Pull to refresh
2
0
Send message

Как устроена серверная UI-система Airbnb

Reading time13 min
Views4.3K

Прежде чем разбираться с реализацией серверного UI (SDUI) от Airbnb, важно понять, что это вообще такое и какие преимущества оно дает относительно традиционного клиентского UI.

Обычно данные обрабатываются серверной частью, а за работу интерфейса отвечает конкретный клиент (веб-браузер, приложения для iOS, Android). В качестве примера возьмем страницу Airbnb со списком предложений. Чтобы отобразить этот список пользователю, клиент может запросить данные у бэкенда, а затем преобразовать их в UI.

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

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

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

А что, если клиент даже не будет знать, что он отображает список предложений? Можно ли передавать клиенту напрямую UI, а не данные для построения интерфейса? Именно это и происходит в случае SDUI: мы передаем UI и данные вместе, а клиент отображает всё это независимо от того, что конкретно там внутри.

Читать далее

Памятка и туториал по HTTP-заголовкам, связанным с безопасностью веб-приложений

Reading time27 min
Views40K


Доброго времени суток, друзья!


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


Сначала мы с вами кратко разберем основные виды уязвимостей веб-приложений, а также основные виды атак, основанные на этих уязвимостях. Далее мы рассмотрим все современные заголовки, каждый — по отдельности. Это в теоретической части статьи.


В практической части мы реализуем простое Express-приложение, развернем его на Heroku и оценим безопасность с помощью WebPageTest и Security Headers. Также, учитывая большую популярность сервисов для генерации статических сайтов, мы настроим и развернем приложение с аналогичным функционалом на Netlify.


Исходный код приложений находится здесь.


Демо Heroku-приложения можно посмотреть здесь, а Netlify-приложения — здесь.


Основными источниками истины при подготовке настоящей статьи для меня послужили следующие ресурсы:


Читать дальше →

Неопределенное поведение, пронесенное сквозь года

Reading time8 min
Views6K

У вас бывают в разработке такие периоды, когда что-то в коде идет не так, ты ищешь баг, а потом оказывается, что за ним стоял еще один баг? Мне нравится искать баги. Это создает ощущение словно ты Шерлок Холмс и являешься главным героем в детективе, где кто-то из обширного списка на вид безобидных классов и функций вызывает неожиданное и даже неопределенное поведение программы, а ты своим зорким взглядом и экспериментами пытаешься вычислить этого мерзавца в кратчайшие сроки.

Можно выделить несколько стадий поиска бага:

• удивление (не знаю как вы, но я каждый раз как в первый раз удивляюсь когда что-то вдруг в моем коде работает не так, как ожидается);

• обвинение всех кругом в баге (коллег по проекту, github, сторонние либы, компилятор), но только не себя;

• смирение с тем, что возможно баг появился из-за меня и поиск бага: анализ выдаваемого результата, локализация ошибки, эксперименты с входными данными; в общем, все, что делает нормальный детектив, только в сфере программирования;

• если причина бага найдена быстро, то я хвалю себя за то, что нашел баг, при этом, я не напоминаю себе, что причиной бага стал тоже я, а не коллеги по проекту, не github, не сторонние либы и не компилятор;

• если причина бага все время ускользает, то приятное ощущение того, что ты суперпупердетектив сменяется глупой злостью, и чем дольше я не могу найти причину бага, тем больше я злюсь. И вот такие истории почему-то всегда запоминаются больше всех. Об одной такой истории я вам как раз хочу поведать.

Читать далее

Объектно ориентированное программирование на Си без плюсов. Часть 1. Введение

Reading time5 min
Views32K

Приветствую! 

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

Статья рассчитана на тех кто уже знаком с Си, а все примеры ориентированы на ОС Linux. Мои познания Windows закончились на «WinXP», после которой в Windows стало уже очень много политики ("безопасности") и коммерческой составляющей, но я сейчас не об этом и надеюсь, что здесь вы найдёте для себя полезные моменты, а если я в чём-то не прав или заблуждаюсь, то поправите.

Итак, я решил попробовать писать в стиле объектно ориентированного программирования (далее ООП) на Си без плюсов. Многие скажут, что писать в стиле объектно ориентированного программирования (далее ООП) не для Си, и разные приёмы написания это - «псевдо-ООП». Но лично я считаю ООП всего лишь абстрактной парадигмой, определяющей стиль написания ПО и не более чем. А Си очень мощный и самодостаточный язык программирования.

Так сложилось, что изучать традиции ООП я начал с Delphi и Java, являющихся, как считается, на 100% объектно ориентированными языками программирования, а потому аналогия решений у меня ассоциируется именно с ними. И далее в тексте я иногда буду на них ссылаться, что надеюсь не испортит суть полного понимания.

Читать далее

7 сетевых Linux-команд, о которых стоит знать системным администраторам

Reading time10 min
Views244K
Существуют Linux-команды, которые всегда должны быть под рукой у системного администратора. Эта статья посвящена 7 утилитам, предназначенным для работы с сетью.

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



В данной серии статей будут представлены все эти команды, разбитые по категориям. Первые 7 команд, которым и посвящена эта статья, направлены на работу с сетью.
Читать дальше →

Увидеть невидимое. Несколько способов сделать недорогой микроскоп своими руками

Reading time3 min
Views28K


Микроскоп — надежный и нужный инструмент не только для ученых, медиков, но и представителей других специальностей. Это еще и отличный способ познакомить ребенка с невидимыми тайнами и секретами окружающего мира. Да и кто сказал, что рассматривать микроскопические объекты в свое удовольствие — это не для взрослых.

Проблема только в том, что микроскопы довольно дорогие. Если даже деньги есть, не всегда хочется их тратить на вещь, которая, возможно, будет использоваться лишь пару раз. В этом случае приходят на помощь проекты по созданию микроскопов своими руками.
Читать дальше →

Теория графов. Термины и определения в картинках

Reading time5 min
Views240K

В этой статье мы познакомимся с основными терминами и определениями Теории графов. Каждый термин схематично показан на картинках.

Граф - это топологичекая модель, которая состоит из множества вершин и множества соединяющих их рёбер. При этом значение имеет только сам факт, какая вершина с какой соединена.

Теория графов

Как я использую Хабр для влияния на людей

Reading time4 min
Views7.9K

Стыдно признаться, но я беззастенчиво использую Хабр для влияния на людей из моего окружения. Примерно каждая вторая моя публикация написана для того, чтобы её прочитал конкретный человек. Действую я, разумеется, из лучших побуждений.

Наткнулся я на этот способ случайно. К одному из клиентов, на завод, устроился очень толковый парень, программист, выпускник очень уважаемого ВУЗа. Я, зная историю этого завода, понимал, что парень там пропадёт – превратится в 1Сника. Но как ему об этом сказать?

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

Приводить какие-то аргументы и доказательства смысла не было – не зная истории развития клиента, парень мне просто не поверит. Публикаций от программистов, гибнущих на заводах, тоже мало, да и толку от них – кто поверит чужому опыту? Хочется заиметь свой собственный.

Мне хотелось, чтобы парень увидел себя через несколько лет. И чтобы увиденное его зацепило и заставило задуматься. Как это сделать? Нужен материал, который взывает не к разуму, а к эмоциям. Нужна история. Так я написал свой первый худлит – Requiem for a Dream.

 И о чудо! – сработало. Парень ещё несколько месяцев посидел на заводе, увидел проблески воплощения этой истории, и свалил – туда, где шансы сгинуть намного ниже.

А я стал пользоваться этим методом постоянно.

Читать далее

Как написать пассивный доход: Пишем качественного трейд бота на JS (часть 2)

Reading time5 min
Views17K

Всем хочется получать пассивный доход. Поэтому и пришла идея написать правильного бота, способного зарабатывать на бирже. Как это сделать? К вашему вниманию подробный туториал (Часть 2)

Читать далее

Как написать пассивный доход: Пишем качественного трейд бота на JS (часть 1)

Reading time4 min
Views64K

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

Читать далее

Книга «Экстремальный Cи. Параллелизм, ООП и продвинутые возможности»

Reading time9 min
Views11K
image Привет, Хаброжители! Для того чтобы овладеть языком C, знания одного лишь синтаксиса недостаточно. Специалист в области разработки должен обладать четким, научным пониманием принципов и методик. Книга «Экстремальный Cи» научит вас пользоваться продвинутыми низкоуровневыми возможностями языка для создания эффективных систем, чтобы вы смогли стать экспертом в программировании на Cи.

Вы освоите директивы препроцессора, макрокоманды, условную компиляцию, указатели и многое другое. Вы по новому взглянете на алгоритмы, функции и структуры. Узнаете, как выжимать максимум производительности из приложений с ограниченными ресурсами.

В XXI веке Си остается ключевым языком в машиностроении, авиации, космонавтики и многих других отраслях. Вы узнаете как язык работает с Unix, как реализовывать принципы объектно-ориентированного программирования и разберетесь с многопроцессной обработкой.

Камран Амини научит вас думать, сомневаться и экспериментировать. Эта книга просто необходима для всех, кто хочет поднять знания Cи на новый уровень.
Читать дальше →

6 известных научных теорий, которые оказались ошибочными

Reading time6 min
Views46K

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

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

Читать далее

Blender, 1000 мелочей

Reading time9 min
Views39K

Собрал наиболее востребованные базовые приёмы работы с самым ламповым пакетом трёхмерной графики (в интерфейсе "классической" версии 2.79): немного общих моментов и часто используемые инструменты редактирования.

Продолжение (материалы и рендер)

Далее

Регулярные выражения. Всё проще, чем кажется

Reading time7 min
Views127K

Всем доброго времени суток. Сегодня хочу рассказать максимум о регулярных выражениях: что они из себя представляют, как их писать, для чего нужны и т.д.

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

Читать далее

Беспроводной тачпад из смартфона

Reading time6 min
Views18K
Когда ты уже не начинающий ардуинщик и погодных информеров у тебя уже несколько штук, хочется чего-то более «оригинального» и «полезного».

Предположим у нас имеется: Arduino Leonardo – 1 штука, Bluetooth модуль – 1 штука, Android смартфон – 1 штука. Ключевое отличие Leonardo от остальных ардуин заключается в том, что она поддерживает протоколы HID, а по-простому может притворятся мышкой или клавиатурой. Выглядит это примерно следующим образом:

#include "Mouse.h" // импортируем библиотеку работы с мышью
void setup(){}            // ничего не настраиваем
void loop()
{
 Mouse.move(10, -15, 3);  // сдвигаем курсор на 10 пикселей вправо, на 15 пикселей вверх и колесо на 3 оборота
}

Как видим все крайне просто. Метод Mouse.move(X, Y, WHEEL) принимает три относительных параметра: 

X – величина смещения в пикселях по оси X (отрицательные значения сдвигают влево)

Y – величина смещения в пикселях по оси Y (отрицательные значения сдвигают вверх)

WHEEL – величина смещения колеса прокрутки (отрицательные значения сдвигают в другую сторону)

Но сама по себе идея двигать курсор ничего не стоит, если не мы его контролируем, а значит нам нужно непосредственно HID (Human Interface Device), или по-простому устройство ввода. В нашем случае мы его сделаем из смартфона, «написав программу» в среде AppInventor, но, предварительно, разберемся с железной частью и напишем скетч для Arduino. Данные в Leonardo со смартфона мы будем отсылать по bluetooth. Модуль bluetooth можно использовать любой подходящий, наиболее популярным решением является HC-05(06). Подключаем по следующей схеме:

Спросите Итана: почему в зеркалах лево и право меняются местами, а низ и верх – нет?

Reading time7 min
Views103K

Когда вы смотрите в зеркало на свою правую руку, она кажется левой. Все надписи меняют направление, как и движение вращающегося объекта. Движение по часовой стрелке превращается в движение против часовой, и наоборот. Кажется, что право и лево поменялись местами, а верх и низ – нет. Однако истинная причина происходящего в другом.

Смотрясь в зеркало, вы замечаете, что там всё перевёрнуто. Когда вы поднимаете левую руку, ваше отражение поднимает правую. Если вы подмигиваете правым глазом, отражение подмигивает левым. Написав что-либо на листке бумаги и подняв его вверх, вы увидите, что ваше отражение держит такой же листок, только с надписью, написанной задом наперёд – включая и отдельные буквы. Кажется, что у всех изображений в зеркале меняются лево и право, но при этом почему-то верх и низ не меняются. Ваше отражение стоит ногами на земле, потолок находится наверху, а буквы на листочке не переворачиваются. Почему? Об этом спрашивает наш читатель:
Известно, что в зеркалах меняются право и лево. Но почему там не меняются верх и низ? Изменилось бы наше восприятие зеркал, если бы мы жили в нулевой гравитации? А если бы мы были морскими звёздами с пятью осями симметрии?

Читать дальше →

Задача Танежи или проблема числа 10958…

Reading time7 min
Views38K
В работе Индера Танежа (Inder J. Taneja) (бразильского математика-популяризатора математики) от 2014 года: Crazy Sequential Representation: Numbers from 0 to 11111 in terms of Increasing and Decreasing Orders of 1 to 9 (Сумасшедшее последовательное представление: числа от 0 до 11111 в порядке возрастания и убывания от 1 до 9).
Был один пробел, а именно число 10958, который немного всколыхнул научное сообщество, и самое главное до сих пор не заполнен. Вот про него мы и поговорим.


Information

Rating
6,188-th
Registered
Activity