Search
Write a publication
Pull to refresh
4
0

Пользователь

Send message

Паттерны React

Reading time10 min
Views137K
Привет Хабр! Предлагаю вашему вниманию свободный перевод статьи «React Patterns» Майкла Чана, с некоторыми моими примечаниями и дополнениями.

Прежде всего хотел бы поблагодарить автора оригинального текста. В переводе я использовал понятие «Простой компонент» как обозначение Stateless Component aka Dump Component aka Component vs Container
Конструктивная критика, а так же альтернативные паттерны и фичи React приветствуются в комментах.

Оглавление
  • Простые компоненты — Stateless function
  • JSX распределение атрибутов — JSX Spread Attributes
  • Деструктуризация аргументов — Destructuring Arguments
  • Условный рендеринг — Conditional Rendering
  • Типы потомков — Children Types
  • Массив как потомок — Array as children
  • Функция как потомок — Function as children
  • Функция в render — Render callback
  • Проход по потомкам — Children pass-through
  • Перенаправление компонента — Proxy component
  • Стилизация компонентов — Style component
  • Переключатель событий — Event switch
  • Компонент-макет — Layout component
  • Компонент-контейнер — Container component
  • Компоненты высшего порядка — Higher-order component

Поехали!
Читать дальше →

30 легковесных JavaScript плагинов и библиотек

Reading time5 min
Views112K
В это обзоре мы познакомимся с 30 бесплатными JavaScript плагинами и библиотеками, которые сфокусированы на определенных задачах. Это простые, полезные и легкие решения, которые помогут сделать процесс веб-дизайна и разработки гораздо проще и быстрее.

Как и следовало ожидать ниже вы найдете много плагинов для создания ползунков, галерей с изображениями, адаптивных меню, а также много других полезных плагинов и библиотек. Также в списке представлены плагины, которые предлагают действительно уникальные функциональные возможности. Давайте взглянем на список!
Читать дальше →

4 вида утечек памяти в JavaScript и как с ними бороться

Reading time16 min
Views135K

В этой статье мы рассмотрим распространённые виды утечек памяти в клиентском JavaScript. Также мы узнаем, как их обнаружить с помощью Chrome Development Tools.


timeline в Chrome Dev Tools

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

NGINX: Перехват ошибок 5хх с помощью отладочного сервера

Reading time6 min
Views26K

Является ли ошибкой ответ 5хх, если его никто не видит? [1]


image

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

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

Для облегчения процесса поиска и отладки могут быть использованы некоторые полезные приёмы в случае, когда NGINX используется для проксирования или балансировки приложения. В этой статье будет рассмотрено особое использование директивы error_page в применении к типичной инфраструктуре приложения с проксированием через NGINX.
Читать дальше →

Ускоряем npm-скрипты

Reading time6 min
Views17K

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


Все пользуются таск раннерами в той или иной мере: кто-то старинным грантом, кто-то постепенно уходящим с арены галпом и многими другими, а кто-то уже во всю использует npm-скрипты.


Последние мы сегодня разберем во всех деталях, а так же способы их ускорения и расширения возможностей

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

Оптимизация на примере. Имитационный отжиг против муравьиного алгоритма. Часть 1

Reading time11 min
Views28K
Всем доброго времени суток. Недавно прочитал статью про имитационный отжиг на примере задачи коммивояжера. Картинка до и после оптимизации вызвала интерес. Чем-то подобные вещи заманивают.Также в комментариях заметил, что людям было бы интересно посмотреть на сравнение с другими видами оптимизации.


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

Проверяем скорость работы промисов

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

image

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

DiffHTML.js — утилита для патчинга DOM

Reading time2 min
Views11K


Что такое DiffHTML.js?


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

Интеграция PostgreSQL с другими СУБД: делаем запросы в MySQL

Reading time6 min
Views27K

Нередко бывает так, что в большом проекте в силу тех или иных причин — зачастую исторических, хотя бывает по-всякому — его части могут использовать различные СУБД для хранения и поиска критически важных данных. В числе прочего, этому разнообразию способствует конкуренция и развитие технологий, но, так или иначе, взаимодействие между СУБД описывает стандарт SQL/MED 2003 (Management of External Data), который вводит определение Foreign Data Wrappers (FDW) и Datalink.


Первая часть стандарта предлагает средства для чтения данных как набора реляционных таблиц под управлением одного или нескольких внешних источников; FDW также может представлять возможность использовать SQL-интерфейс для доступа к не SQL данным, таким, как файлы или, например, список писем в почтовом ящике. Вторая часть, Datalink, позволяет управлять удаленным SQL-сервером.


Эти две части были реализованы еще в PostgreSQL 9.1 и называются FDW и dblink соответственно. FDW в PostgreSQL сделан максимально гибко, что позволяет разрабатывать wrapper'ы для большого количества внешних источников. В настоящее время мне известны такие FDW, как PostgreSQL, Oracle, SQL Server, MySQL, Cassandra, Redis, RethinkDB, Ldap, а также FDW к файлам типа CSV, JSON, XML и т.п.


В нашей статье мы поговорим о том, как настроить подключение PostgreSQL к MySQL и эффективно выполнять получающиеся запросы.


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

Паровой двигатель Тауэра

Reading time2 min
Views48K
Вместо привычного нам цилиндра в этой паровой машине была сфера. Полая сфера, внутри которой все и происходило.



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



чуть помедленнее, гифка

Красные стрелки — подача свежего пара, синие — выпуск отработанного.
Читать дальше →

Становимся контрибьютером в PostgreSQL

Reading time9 min
Views17K
PostgreSQL Logo В этой статье я хотел бы рассказать о том, как выглядит процесс разработки PostgreSQL глазами одного из контрибьютеров в этот самый PostgreSQL. Заниматься разработкой этой СУБД я начал в декабре 2015 года, когда устроился работать в компанию Postgres Professional. То есть, не так уж давно. А значит, еще свежи воспоминания о моментах, которые поначалу казались мне не вполне очевидными. Хотелось бы их законспектировать, чтобы новым людям, приходящим в нашу команду, а также всем тем, кто желает попробовать себя в роли разработчика открытой реляционной СУБД, было легче. Я расскажу о том, как выглядит процесс разработки PostgreSQL, какие инструменты я использую в своей повседневной работе, как следует оформлять патчи, и так далее. Заинтересовавшихся прошу проследовать под кат.
Читать дальше →

Статическая и динамическая типизация

Reading time13 min
Views177K

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



Тип — это коллекция возможных значений. Целое число может обладать значениями 0, 1, 2, 3 и так далее. Булево может быть истиной или ложью. Можно придумать свой тип, например, тип "ДайПять", в котором возможны значения "дай" и "5", и больше ничего. Это не строка и не число, это новый, отдельный тип.


Статически типизированные языки ограничивают типы переменных: язык программирования может знать, например, что x — это Integer. В этом случае программисту запрещается делать x = true, это будет некорректный код. Компилятор откажется компилировать его, так что мы не сможем даже запустить такой код. Другой статически типизированный язык может обладать другими выразительными возможностями, и никакая из популярных систем типов не способна выразить наш тип ДайПять (но многие могут выразить другие, более изощренные идеи).


Динамически типизированные языки помечают значения типами: язык знает, что 1 это integer, 2 это integer, но он не может знать, что переменная x всегда содержит integer.


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

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

Ломаем сбор мусора и десериализацию в PHP

Reading time19 min
Views24K


Эй, PHP, эти переменные выглядят как мусор, согласен?
Нет? Ну, посмотри-ка снова…


tl;dr:
Мы обнаружили две use-after-free уязвимости в алгоритме сбора мусора в PHP:

  • Одна присутствует во всех версиях PHP 5 ≥ 5.3 (исправлена в PHP 5.6.23).
  • Вторая — во всех версиях PHP ≥ 5.3, включая версии PHP 7 (исправлена в PHP 5.6.23 и PHP 7.0.8).

Уязвимости могут удалённо применяться через PHP-функцию десериализации. Используя их, мы отыскали RCE на pornhub.com, за что получили премию в 20 000 долларов плюс по 1000 долларов за каждую из двух уязвимостей от комитета Internet Bug Bounty на Hackerone.
Читать дальше →

PostgreSQL. Как правильно хранить котов или история одной миграции

Reading time7 min
Views26K
История взята из реального проекта. Но поскольку реальный проект слишком скучный (и под NDA), в этой статье используется упрощенный пример.

Жил-был один проект. И была у него база данных. И была в базе таблица для хранения, ну, скажем, котов. Вот такая:
CREATE TABLE cats (
    id serial,
    cname varchar(20),
    ctype varchar(20),
    primary key(id)
);

Все довольно просто: у каждого кота есть id, имя и некий тип.

Конечно, у нас были бизнес-требования к котам и их типам. Например, мы точно знали, что у нас есть типы big furry, neko и sudden danger. Предполагали, что могут появиться типы long tail и sleeper-eater. Но мы ожидали, что требования будут меняться. И пока не известно, какие в итоге понадобятся типы. Поэтому использовали тип данных varchar(20).
Читать дальше →

Робот SAW ползает, карабкается и плавает всего с одним двигателем

Reading time3 min
Views14K
Если нужно движение, то аппарат может прибегать к колёсам и гусеницам, шагать или уходить в экзотику уровня ползания и плавания. Способов заставить робота двигаться описано много. Иногда даже может показаться, что ничего нового уже не придумать. Но это далеко не так. В недавно опубликованной работе Давид Заррук из Университета имени Бен-Гуриона в Негеве описывает волноподобного робота-червя, который приводится в действие всего одним исполнительным устройством.

Робот так и называется: single actuator wave-like robot или SAW. Его волноподобная структура толкает его вперёд или назад. Для поворотов нужны колёса руления. Подобная конструкция не только хорошо двигается по суше, но и может забираться в узких щелях и плавать в воде.
Читать дальше →

Эффективное использование Github

Reading time13 min
Views127K

Github — важная часть жизни современного разработчика: он стал стандартом для размещения opensource-проектов. В «2ГИС» мы используем гитхаб для разработки проектов web-отдела и хостинга проектов с открытым кодом.

Хотя большинство из нас пользуются сервисом практически каждый день, не все знают, что у него есть много фишек, помогающих облегчить работу или рутинные операции. Например, получение публичного ключа из URL; отслеживание того, с каких сайтов пользователи приходят в репозиторий; правильный шаринг ссылок на файлы, которые живут в репозиториях гитхаба; горячие клавиши и тому подобное. Цель этой статьи — рассказать о неочевидных вещах и вообще о том, что сделает вашу работу с гитхабом продуктивнее и веселее (я не буду рассматривать здесь работу с API гитхаба, так как эта тема заслуживает отдельной статьи).


Содержание



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

Порталы в React.js

Reading time3 min
Views32K

image


Наверное, каждому фронтенд-разработчику доводилось делать разного рода выпадайки или всплывающие подсказки. И почти всегда настает момент, когда такую штуку надо отобразить внутри элемента с overflow: hidden. Настал такой момент и в SmartProgress.


Мы на SmartProgress используем React для разработки интерфейсов и нам очень хотелось найти react-way решение. На помощь нам спешат порталы.


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

PostgreSQL 9.6: Параллелизация последовательного чтения

Reading time5 min
Views29K
В течении долгого времени, одним из самых известных несовершенств PostgreSQL была возможность распараллеливания запросов. С выходом версии 9.6 это перестанет быть проблемой. Большая работа была проделана по этому вопросу, и уже начиная с коммита 80558c1, появляется параллелизация последовательного чтения, с которым мы и познакомимся по ходу этой статьи.

image

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

Почему прерванный сон – это отличное время для творческой работы

Reading time9 min
Views32K

Когда-то люди просыпались в середине ночи, чтобы подумать, сделать записи или заняться любовью. Что мы потеряли, засыпая на всю ночь?




4:18 утра. В очаге сгорели дрова, и остались только оранжевые кусочки, которые скоро превратятся в пепел. Орион-охотник взошёл над холмом. Мерцающее «V» Тельца стоит прямо над головой, и указывает на Семерых сестёр. Сириус, одна из собак Ориона, мерцает красным, голубым, фиолетовым – как галактический диско-шар. Ночь продолжается, и старый пёс вскоре сядет за холмом.

4:18 утра, и я не сплю. Такое раннее пробуждения обычно считается нарушением, сбоем в естественном ритме тела – признаком депрессии, или возбуждения. Действительно, после пробуждения в 4 утра в голове моей жужжало. И хотя я человек позитивный, но когда я лежу в темноте, в мыслях появляется волнение. Мне кажется, что лучше встать, чем лежать в постели, балансируя на грани лунатизма.

Если я пишу в эти часы, чёрные мысли становятся чёткими и красочными. Они формируются в слова и предложения, одно цепляется за другое – будто вереница слонов, держащихся хоботами за хвосты. В это время ночи мой мозг работает по-другому: я могу писать, но не редактировать. Могу добавлять, но не отнимать. Для чёткости необходимо дневное сознание. Я работаю несколько часов, а затем снова засыпаю.

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

Римляне, греки, инки просыпались без айфоновских будильников или цифровых радиочасов. Их временем заведовала природа: восход солнца, вечерний хор, нужды полевых культур или домашнего скота. До 14 века ход времени отмечался солнечными и песочными часами, а затем на монастырях и церквях появились первые механические часы. К 1800-му году механические часы уже вовсю носили на шее, запястьях и лацканах. Можно было назначать встречи, время для принятия пищи и отхода ко сну.

Общества, построенные на индустриализации и точном времени, породили понятие срочности и такие концепции, как «вовремя» или «потеря времени». Часы начали всё сильнее расходиться с естественным временем, но свет и тьма всё ещё управляли рабочими часами и социальными структурами. Но всё поменялось в 19 веке.
Читать дальше →

Information

Rating
Does not participate
Registered
Activity