Как стать автором
Обновить
0
0
Николай @NikSIMONoff

Full-Stack Software Engineer

Отправить сообщение

React медленный, React быстрый: оптимизация React-приложения на практике

Время на прочтение14 мин
Количество просмотров65K

Всем привет! Хочу поделиться своим переводом статьи React is Slow, React is Fast: Optimizing React Apps in Practice автора François Zaninotto. Надеюсь, это кому-то будет полезным.


Краткое содержание:


  1. Измерение производительности React
  2. Почему ты обновился?
  3. Оптимизация через разбиение на компоненты
  4. shouldComponentUpdate
  5. Recompose
  6. Redux
  7. Reselect
  8. Остерегайтесь объектных литералов в JSX
  9. Заключение

React может быть медленным. Я хочу сказать, что любое React приложение среднего размера может оказаться медленным. Но прежде, чем искать ему замену, вы должны знать, что и любое среднее приложение на Angular или Ember может также оказаться медленным.


Хорошая новость в том, что если вы действительно заботитесь о производительности, то сделать React приложение очень быстрым довольно легко. Об этом — далее в статье.

Читать дальше →
Всего голосов 36: ↑35 и ↓1+34
Комментарии59

Bash-скрипты, часть 8: язык обработки данных awk

Время на прочтение14 мин
Количество просмотров320K
Bash-скрипты: начало
Bash-скрипты, часть 2: циклы
Bash-скрипты, часть 3: параметры и ключи командной строки
Bash-скрипты, часть 4: ввод и вывод
Bash-скрипты, часть 5: сигналы, фоновые задачи, управление сценариями
Bash-скрипты, часть 6: функции и разработка библиотек
Bash-скрипты, часть 7: sed и обработка текстов
Bash-скрипты, часть 8: язык обработки данных awk
Bash-скрипты, часть 9: регулярные выражения
Bash-скрипты, часть 10: практические примеры
Bash-скрипты, часть 11: expect и автоматизация интерактивных утилит



В прошлый раз мы говорили о потоковом редакторе sed и рассмотрели немало примеров обработки текста с его помощью. Sed способен решать многие задачи, но есть у него и ограничения. Иногда нужен более совершенный инструмент для обработки данных, нечто вроде языка программирования. Собственно говоря, такой инструмент — awk.
Читать дальше →
Всего голосов 30: ↑27 и ↓3+24
Комментарии18

Атаки на сетевое оборудование с Kali Linux

Время на прочтение4 мин
Количество просмотров68K
image

 
В данной статье мы рассмотрим актуальные атаки на сетевое оборудование и инструменты, доступные в популярном дистрибутиве Kali Linux для их проведения.

Читать дальше →
Всего голосов 38: ↑38 и ↓0+38
Комментарии10

Дизайн кейс: Coral Order e-commerce сайт

Время на прочтение4 мин
Количество просмотров22K
image

Начало


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

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

image Сравнение старого магазина с новым

Читать дальше →
Всего голосов 23: ↑16 и ↓7+9
Комментарии39

Создание мультизагрузочного USB HDD или флешки

Время на прочтение5 мин
Количество просмотров737K


Загрузочный USB Flash или HDD накопитель удобен тем, что можно отказаться от использования CD/DVD для установки ОС и использования диагностических программ типа Memtest, MHDD, Acronis TI.

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

Существует множество решений для флешек (например, http://eee-pc.ru/wiki/софт:usb_multiboot), но, как правило, они не работают с USB HDD. На хабре я нашел только статью об установке Win7 с USB HDD, но год назад попытки воспроизвести это не увенчались успехом. Для установки Windows 7 с флешки существует MS Win7 DVD Tool, но он опять же не работает с HDD. Поэтому давайте создадим свой мультизагрузочный USB HDD с помощью GRUB4DOS.

Нам понадобится:
  • USB HDD (все описанное должно работать и для флешек).
  • ОС Windows (естественно можно аналогично сделать это и из ОС на базе Linux, но у меня сейчас нет возможности проверить работоспособность и наличие «подводных камней»).
  • Материнская плата (BIOS) с поддержкой загрузки с USB накопителей. Если загрузка с USB не поддерживается, можно использовать Plop, об этом ниже.


Читать дальше →
Всего голосов 93: ↑81 и ↓12+69
Комментарии61

Ubuntu LiveUSB + Черный экран

Время на прочтение3 мин
Количество просмотров76K
Приветствую Вас, Хабровчане! Хотел поделиться с вами совсем не тривиальным методом (каким хотелось бы) установки Ubuntu 11.04 (хотя версия, да и сам дистрибутив не имеют значения) на свежекупленного зверька, по имени Asus 1215N (зверек тоже значения не имеет). Речь пойдет скорее не о нем, а о проблеме с которой я столкнулся из-за спецификаций этого агрегата. Все началось с того, что в аппарате отсутствовал так называемый “резак”, поэтому выбор носителя дистрибутива автоматически пал на USB флешку. Соответствующий раздел сайта www.ubuntu.com рассказал подробно, в картинках, как мне это реализовать. Что собственно я и сделал. Скачал утилиту “Universal USB Installer” с сайта www.pendrivelinux.com (версия 1.8.6.2). Запустил её и выполнил все пункты инструкции. Перезагрузившись я был неприятно удивлен моргающим курсором на черном фоне экрана. Курсор моргал, загрузка не шла! Почему?!
Читать дальше →
Всего голосов 62: ↑46 и ↓16+30
Комментарии41

6 впечатляющих веб-технологий 2015 года

Время на прочтение5 мин
Количество просмотров55K
2015 год выдался богатым на нововведения, связанные с улучшениями веб-платформы. Аксель Рошмайер рассматривает 6 технологий, которые ему кажутся наиболее интересными:

1. Electron;
2. React Native;
3. Прогрессивные веб-приложения;
4. Visual Studio Code;
5. Rollup;
6. WebAssembly.



Читать дальше →
Всего голосов 29: ↑20 и ↓9+11
Комментарии37

Несколько неочевидных frontend-хитростей

Время на прочтение4 мин
Количество просмотров92K
Под катом вы узнаете о том, как быстро и легко оформить взаимодействие с SVG-иконками, добавить плавный скролл с помощью одного CSS-правила, анимировать появление новых элементов на странице, переносить текст на новую строку с помощью CSS и о новых способах оформления декоративной линии текста.

wg css html
Читать дальше →
Всего голосов 42: ↑32 и ↓10+22
Комментарии68

Глубокое обучение в гараже — Две сети

Время на прочтение10 мин
Количество просмотров19K
Пример работы системы
Это вторая статья из серии про определение смайла по выражению лица.

Глубокое обучение в гараже — Братство данных
Глубокое обучение в гараже — Две сети
Глубокое обучение в гараже — Возвращение смайлов

Калибрация


Итак, с классификатором, разобрались, но вы наверняка уже заметили, что заоблачные 99% как-то не очень впечатляюще выглядят во время боевого теста на детекцию. Вот и я заметил. Дополнительно видно, что в последних двух примерах очень мелкий шаг движения окон, так в жизни работать не будет. В настоящем, реальном запуске шаг ожидается больше похожим на картинку для первой сети, а там хорошо видно неприятный факт: как бы хорошо сеть не искала лица, окна будут плохо выровнены к лицам. И уменьшение шага — явно не подходящее решение этой проблемы для продакшена.
Как быть?
Всего голосов 34: ↑28 и ↓6+22
Комментарии16

Мои правила дизайна хорошего интерфейса

Время на прочтение4 мин
Количество просмотров100K
image

В этой статье я привожу примеры основных принципов или концепций, которыми руководствуюсь при проектировании десктопных интерфейсов. Не планирую выступать новатором или поучителем, но с радостью поделюсь набором установок, который помогает мне в работе.
Читать дальше →
Всего голосов 59: ↑55 и ↓4+51
Комментарии27

Проработанная идея алгоритма двусмысленного шифрования

Время на прочтение5 мин
Количество просмотров28K
Весьма красочно иллюстрирует размышления на тему шифрования изображение с xkcd.com.



Но если продолжить размышления и попытаться решить проблему методами ИТ, то может родиться нечто интересное. Читателям предлагается статья-описание алгоритма, который мог бы помочь «тому с зашифрованным ноутом» с картинки выдать изображенным злоумышленникам пароль без потери важной информации. Разумеется, для этого ему пришлось бы хорошенько подготовиться, помнить несколько паролей и постоянно испытывать недостаток свободного места на компьютере, т.к. изложенный алгоритм в этом плане может быть прожорлив (если владелец захочет снизить риски быть уличенным во лжи).

Итак, если кратко, то владелец «такого ноута» при использовании изложенного алгоритма будет помнить несколько паролей, каждый из которых является ключом к своему «сейфу» (контейнеру файлов). Владелец определяет то, как распределить информацию среди контейнеров. Соответственно, он может создать несколько подставных контейнеров с заведомо ложной информацией. Итогом проиллюстрированных угроз может стать выдача пароля от одного из таких «сейфов». В случае, если злоумышленники хорошо знакомы с излагаемым алгоритмом, можно, например, выдать еще 1 или 2, и/или сказать, что больше контейнеров в этом архиве нет, а все остальное — случайная информация.
Подробное описание предлагаемого алгоритма
Всего голосов 41: ↑35 и ↓6+29
Комментарии42

Наглядный жизненный урок

Время на прочтение6 мин
Количество просмотров103K

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

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

Далее, для тех, кто еще не снял розовые очки — гайд по реальному миру.
Добро пожаловать в реальный мир
Всего голосов 277: ↑242 и ↓35+207
Комментарии212

Искусственный интеллект для программистов

Время на прочтение5 мин
Количество просмотров89K
Как случилось, что искусственный интеллект успешно развивается, а «правильного» определения для него до сих пор нет? Почему не оправдались надежды, возлагавшиеся на нейрокомпьютеры, и в чем заключаются три главные задачи, стоящие перед создателем искусственного интеллекта?

На эти и другие вопросы вы найдете ответ в статье под катом, написанной на основе выступления Константина Анисимовича, директора департамента разработки технологий ABBYY, одного из ведущих экспертов страны в сфере искусственного интеллекта.
При его личном участии были созданы технологии распознавания документов, которые применяются в продуктах ABBYY FineReader и ABBYY FormReader. Константин рассказал об истории и основах разработки AI на одном из мастер-классов для студентов Технопарка Mail.Ru. Материал мастер-класса и стал базой для цикла статей.

Всего в цикле будет три поста:
Искусственный интеллект для программистов
Применение знаний: алгоритмы поиска в пространстве состояний
• Получение знаний: инженерия знаний и машинное обучение
Читать дальше →
Всего голосов 93: ↑72 и ↓21+51
Комментарии26

Бенчмарк HTTP-серверов (С/C++) в FreeBSD

Время на прочтение6 мин
Количество просмотров34K


Проведено сравнение производительности ядер HTTP-серверов, построенных с использованием семи C/C++ библиотек, а также (в познавательных целях) — других готовых решений в этой области (nginx и node.js).

HTTP-сервер — это сложный и интересный механизм. Есть мнение, что плох программист, не написавший свой компилятор, я бы заменил «компилятор» на «HTTP-сервер»: это и парсер, и работа с сетью, и асинхронность с многопоточностью и много чего еще....

Тесты по всем возможным параметрам (отдача статики, динамики, всевозможные модули шифрования, прокси и т.п.) — задача не одного месяца кропотливой работы, поэтому задача упрощена: будем сравнивать производительность ядер. Ядро HTTP-сервера (как и любого сетевого приложения) — это диспетчер событий сокетов и некий первичный механизм их обработки (реализованный в виде пула потоков, процессов и т.п.). Сюда же можно отнести парсер HTTP-пакетов и генератор ответов. На первый взгляд, все должно свестись к тестированию возможностей того или иного системного механизма обработки асинхронных событий (select, epoll и т.п.), их мета-обёрток (libev, boost.asio и др.) и ядра ОС, однако конкретная реализация в виде готового решения дает существенную разницу в производительности.

Был реализован свой вариант HTTP-сервера на libev. Конечно, реализована поддержка небольшого подмножества требований пресловутого rfc2616 (вряд ли ее полностью реализует хоть один HTTP-сервер), лишь необходимый минимум для соответствия требованиям, предъявляемым к участникам данного тестирования,
а именно...
Всего голосов 48: ↑41 и ↓7+34
Комментарии54

Как запустить программу без операционной системы: часть 5. Обращение к BIOS из ОС

Время на прочтение15 мин
Количество просмотров52K

В самой первой части нашей серии «Как запустить программу без операционной системы» мы остановились на том, что загрузили ядро с помощью GRUB’а и распечатали на экран классический “Hello World!”. Теперь мы покажем, как можно использовать прерывания BIOS’а в ядре ОС. А для начала — рассмотрим, что же такое прерывания BIOS’а, для чего они используются, и почему возникают проблемы с их вызовом.
Читать дальше →
Всего голосов 71: ↑68 и ↓3+65
Комментарии4

Пишу игрушечную ОС (о прерываниях)

Время на прочтение4 мин
Количество просмотров50K

Данная статья написана в форме поста для блога. Если она окажется вам интересной, то будет продолжение.

Последние четыре месяца посвящаю свободное от работы время написанию игрушечной ОС для x86_64. Исходный код лежит здесь.

Общая задумка (пока весьма далёкая от реализации) следующая: единое 64-битное адресное пространство с вечно живущими нитями (как у Phantom OS); виртуальная машина, обеспечивающая безопасность исполнения кода. На данный момент реализованы:

1. загрузка ядра при помощи multiboot-загрузчика (GRUB);
2. текстовый VGA-режим (16-цветов, kprintf);
3. простой интерфейс настройки отображения страниц;
4. возможность обработки прерываний на C;
5. идентификация топологии процессоров (сокеты, ядра, потоки) и их запуск;
6. работающий прототип вытесняющего SMP-планировщика с поддержкой приоритетов;

Пропустим описание multiboot-загрузки и работы с VGA-режимом (об этом не писал, разве что, ленивый). Про отображение страниц тоже не хочу писать, боюсь это будет скучно (может, в другой раз). Давайте лучше поговорим об обработке прерываний.
Читать дальше →
Всего голосов 116: ↑111 и ↓5+106
Комментарии17

MMU в картинках (часть 1)

Время на прочтение11 мин
Количество просмотров75K
Хочу поговорить об устройстве управления памятью (Memory Management Unit, MMU). Как вы, разумеется, знаете, основной функцией MMU является аппаратная поддержка виртуальной памяти. Словарь по кибернетике под редакцией академика Глушкова говорит нам, что виртуальная память — это воображаемая память, выделяемая операционной системой для размещения пользовательской программы, ее рабочих полей и информационных массивов.

У систем с виртуальной памятью четыре основных свойства:
  1. Пользовательские процессы изолированы друг от друга и, умирая, не тянут за собой всю систему
  2. Пользовательские процессы изолированы от физической памяти, то есть знать не знают, сколько у вас на самом деле оперативки и по каким адресам она находится.
  3. Операционная система гораздо сложнее, чем в системах без виртуальной памяти
  4. Никогда нельзя знать заранее, сколько времени займет выполнение следующей команды процессора

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

К сожалению, по какой-то причине все вышеперечисленные товарищи недостаточно почтительно относятся к MMU, а их знакомство с виртуальной памятью обычно начинается и заканчивается изучением страничной организации памяти и буфера ассоциативной трансляции (Translation Lookaside Buffer, TLB). Самое интересное при этом остается за кадром.
Читать дальше →
Всего голосов 66: ↑65 и ↓1+64
Комментарии17

Испытания boost::lockfree на скорость и задержку передачи сообщения

Время на прочтение11 мин
Количество просмотров23K
Не так давно в boost-1.53 появился целый новый раздел — lockfree реализующий неблокирующие очереди и стек.
Я последние несколько лет работал с так называемыми неблокируюшими алгоритмами (lock-free data structures), мы их сами писали, сами тестировали, сами использовали и втайне ими гордились. Естественно, у нас немедленно встал вопрос, переходить ли с самодельных библиотек на boost, и если переходить, то когда?
Вот тогда у меня и возникла в первый раз идея применить к boost::lockfree кое-какие из методик которыми мы испытывали собственный код. К счастью, сам алгоритм нам тестировать не придется и можно сосредоточиться на измерении производительности.
Я постараюсь сделать статью интересной для всех. Тем кто еще не сталкивался с подобными задачами будет полезно посмотреть на то что такие алгоритмы способны, а главное, где и как их стоит или не стоит использовать. Для тех кто имеет опыт разработки неблокирующих очередей возможно будет интересно сравнить данные количественных измерений. Я сам по крайней мере таких публикаций еще не видел.
Читать дальше →
Всего голосов 65: ↑64 и ↓1+63
Комментарии28

Forth и шейдеры

Время на прочтение6 мин
Количество просмотров27K
Речь у нас пойдёт о поэзии. Минимализм языка программирования Forth и красота образов демосцены подтолкнули программиста Брэда Нельсона к идее Forth Haiku. Подражая японским хайку, Брэд писал свои первые программы из трёх строк, состояли они из пяти, семи, и снова пяти слов. Но в отличии от традиционного японского жанра, поэзия на языке Forth порождала картины не в воображении читателя, а зримо, на экране компьютера. Эта затея могла бы остаться причудой одинокого фаната компьютерного ретро (Forth прочно ассоциируется со старыми добрыми семидесятыми), если бы Брэд не воплотил её на самой что ни на есть современной платформе (WebGL) и не сделал бы онлайн-редактор общедоступным.

Вот пример кода Forth Haiku и изображение, которое этот код создаёт: «Light Drop» by Brad Nelson.

: iii x y z*
Sin ; x 5 * x y
- iii exp y iii

Light Drop by BradN

Впереди нас ждут немало удивительных (в том числе и «живых») картин, но сперва — немного теории.
Читать дальше →
Всего голосов 88: ↑86 и ↓2+84
Комментарии44

Задачи на собеседованиях в Яндексе

Время на прочтение15 мин
Количество просмотров359K
Открытые вакансии на должность разработчика в Яндексе есть всегда. Компания развивается, и хороших программистов не хватает постоянно. И претендентов на эти должности тоже хоть отбавляй. Главная сложность – отобрать действительно подходящих кандидатов. И в этом плане Яндекс мало чем отличается от большинства крупных IT-компаний. Так что базовые принципы, описываемые в этой статье, могут быть применимы не только к Яндексу.

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

image
Читать дальше →
Всего голосов 221: ↑178 и ↓43+135
Комментарии329
1

Информация

В рейтинге
Не участвует
Откуда
Новосибирск, Новосибирская обл., Россия
Дата рождения
Зарегистрирован
Активность