All streams
Search
Write a publication
Pull to refresh
11
0
Дмитрий Пищалка @dmitryprogrammer

Front-End Developer

Send message

Иммутабельность в JavaScript

Reading time10 min
Views177K

habracut


Что такое иммутабельность


Неизменяемым (англ. immutable) называется объект, состояние которого не может быть изменено после создания. Результатом любой модификации такого объекта всегда будет новый объект, при этом старый объект не изменится.

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

Вступление в Реактивное Программирование, которое вы пропустили

Reading time5 min
Views91K
Ну что ж, вы решили выучить новую вещь, которая называется Реактивное программирование (Reactive Programming), а в частности — его имплементацию в виде Rx, Bacon.js, RAC или чего-то другого.
Читать дальше →

Как я перестал любить Angular

Reading time21 min
Views115K

Вступление


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


На дворе 2017ый год и для каждого нового продукта/проекта встает вопрос выбора фреймворка для разработки. Долгое время я был уверен, что новый Angular 2/4 (далее просто Angular) станет главным трендом enterprise разработки еще на несколько лет вперед и даже не сомневался что буду работать только с ним.


Сегодня я сам отказываюсь использовать его в своем следующем проекте.


Дисклеймер: данная статья строго субъективна, но таков мой личный взгляд на происходящее и касается разработки enterprise-level приложений.

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

Настройка среды разработки Webpack 3 + Angular 4: от сложного к простому

Reading time13 min
Views24K
Всем привет!

Современное front-end-приложение на Angular должно включать в себя следующие характеристики:

  • Возможность использования типизированного JS — Typescript
  • Обеспечение удобства и производительности разработки с помощью HMR (hot module replacement);
  • Модульность приложений и возможность отложенной загрузки модулей (Lazy Loading);
  • AoT — режим (ahead-of-time), повышающий производительность приложения.

Существует много вариантов сборки, решающих эти задачи (angular cli, A2 seed и т. д.). Обычно они имеют сложную структуру, плохо настраиваются/расширяются и представляют собой монолит, который невозможно изменить.

В статье я расскажу, как совместить Angular 2+ с webpack и разобраться со всеми этапами сборки/разработки.

Вы удивитесь, как это просто.
Читать дальше →

Цвет в дизайне интерфейсов: инструкция по применению

Reading time7 min
Views57K


Как создать чистый интерфейс, используя всего лишь один цвет? Вы узнаете из этой статьи. Перевод «Я люблю ИП».


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


У меня есть другое мнение на этот счёт: теория цвета бесполезна.


Но если теория цвета не является прочной основой для выбора цвета в дизайне интерфейсов, то что тогда является?


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


Другими словами: основным навыком в придании цвета дизайну интерфейсов является умение модифицировать один основной цвет во множество различных вариаций.


Я знаю, что это звучит немного странно. Но послушайте меня, я дам вам практическую инструкцию для адаптации цвета в вашем дизайне.


Вы готовы? Тогда поехали.

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

«Кем вы видите себя через 5 лет»: советы топ-менеджера с Уолл-стрит об ответах на коварные вопросы рекрутеров

Reading time3 min
Views22K


Что же на самом деле хотят узнать работодатели, спрашивая соискателя о его сильных и слабых сторонах? Карла Гаррис, заместитель председателя крупнейшего американского банка Morgan Stanley, рассказала о том, что стоит за большинством вопросов и выделила среди них те, которые чаще всего задаются на интервью, часто кажутся бессмысленными кандидатам, но на самом деле довольно коварны.
Читать дальше →

Структуры данных. Неформальный гайд

Reading time6 min
Views171K


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

Node.js, Express и MongoDB: API за полчаса

Reading time11 min
Views246K
Начинающему программисту разработка для Node.js может показаться сущим кошмаром. Виной всему – гибкость этой платформы и отсутствие чётких руководств. Но, на самом деле, всё не так уж и страшно.


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

Использование фронтенда профилировщика Chrome в собственных проектах

Reading time3 min
Views9.2K
Возможно, вы знаете, что у браузере Google Chrome есть встроенный профилировщик. Но даже из тех людей, кто его видел, большинство считает, что использовать его можно только для отладки Javascript или отрисовки кадров в браузере. Но на самом деле его весьма просто можно прикрутить в качестве средства визуализации данных профилирования в вашем проекте.

Я не открою здесь каких-то уникальных секретов, например, Colt McAnlis писал о подобном применении профилировщика Chrome в игровых проектах ещё в 2012 году. Всё, написанное там, всё ещё является правдой, а я напишу ещё один материал — просто для лучшего распространения знаний о столь полезном инструменте.

Предыстория


Для некоторой части нашей системы сборки кода мы когда-то написали простенький профилировщик (называется TinyProfiler). Он достаточно тривиален — замеряет время выполнения определенных блоков кода и создаёт набор HTML+SVG файлов, которые визуализируют эти данные в стиле flame-графов:

image

Это, в принципе, неплохо работало, но полученный HTML был не очень интерактивным. Можно было подвести мышку к определенному блоку и увидеть его название во всплывающей подсказке, но на этом все удобства и заканчивались. Не было ни зума, ни фильтрации, ни скрола, ни поиска — в общем ничего, чего хотелось бы получить от более-менее профессионального инструмента. Всё это можно было, конечно, сесть и написать, но… зачем же это делать, если можно этого не делать? Ведь уже есть кто-то (разработчики Chrome), кто всё это уже сделал.
Читать дальше →

Эволюция DevOps

Reading time14 min
Views19K

Эта статья посвящена эволюции разработки и администрирования, и определению собственной позиции во всеобщей картине всего. Статья вдохновлена слайдами Marc Hornbeek, но имеет к ним опосредованное отношение. Для широкого круга хаброжителей (опсов, девов и девопсов).

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

Создание языка программирования с использованием LLVM. Часть 6: Расширение языка: Операторы, определяемые пользователем

Reading time33 min
Views12K
Оглавление:
Часть 1: Введение и лексический анализ
Часть 2: Реализация парсера и AST
Часть 3: Генерация кода LLVM IR
Часть 4: Добавление JIT и поддержки оптимизатора
Часть 5: Расширение языка: Поток управления
Часть 6: Расширение языка: Операторы, определяемые пользователем
Часть 7: Расширение языка: Изменяемые переменные
Часть 8: Компиляция в объектный код
Часть 9: Добавляем отладочную информацию
Часть 10: Заключение и другие вкусности LLVM



6.1. Введение


Добро пожаловать в главу 6 руководства “Создание языка программирования с использованием LLVM”. К данному моменту у нас есть полнофункциональный язык, хотя и минимальный, но, тем не менее, полезный. Но по-прежнему осталась одна проблема. В нашем языке мало полезных операторов (нет, например, деления, логического отрицания, и даже сравнений, за исключением оператора сравнения «меньше»).
Читать дальше →

Что можно узнать о квартире из открытых справочников

Reading time6 min
Views59K


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

Базы с индексами и районами городов тоже открыты. Бонусом я расскажу, как найти эти части адреса, если их не хватает.

Все справочники из этой статьи бесплатны и открыто лежат в интернете. Ни один не украли из ФСБ таинственные хакеры.
Шагнуть в мир открытых справочников

Events bubbling и events capturing

Reading time5 min
Views65K
intro
Представьте, что на странице есть два блока, и один вложен в другой, как это показано на рисунке. В разметке страницы это выглядит так:
   <div id="block_outer">
      <div id="block_inner"></div>
   </div>

А теперь представьте, что к блоку #block_outer привязано событие onClickOuter, а к блоку #block_inner, соответственно, событие onClickInner. И ответьте на вопрос, как сделать так, чтобы при клике на блок #block_inner, событие onClickOuter не вызывалось? И будет ли оно вообще вызвано? И если будет, то в каком порядке события будут вызываться? И знаете ли вы, как работает метод jQuery.live или подобные в других библиотеках (events delegation в ExtJS, например)?
Если я хоть немного заинтересовал, добро пожаловать под кат.

10 приёмов работы в терминале Linux, о которых мало кто знает

Reading time3 min
Views170K
Близкое знакомство с возможностями терминала — один из признаков человека, который хорошо разбирается в Linux. Хотя некоторые вещи запомнить сложно, есть довольно-таки простые, но эффективные приёмы, которые способны повысить качество и скорость работы в терминале. Пожалуй, каждый пользователь Linux рано или поздно обзаводится собственным списком ценных мелочей. Надеемся, некоторых из тех десяти приёмов работы в командной строке Linux, которыми мы хотим с вами поделиться, попадут в ваш личный список полезных команд.

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

Юнит тесты. Первый шаг к качеству

Reading time7 min
Views42K
Однажды меня попросили рассказать о юнит тестировании в javascript, но прежде чем рассказывать о тестировании в мире front-end, надо было сделать небольшой обзор юнит тестирования как такового. В результате чего на свет и появилась эта статья, в которой я попытался рассказать о самых важных моментах в юнит тестировании.


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

О том, как довести первый проект до конца

Reading time6 min
Views23K
image

Приветствую всех читателей данной статьи! Около двух лет назад я впервые открыл Unity и осмотрел просторы этого движка. И показался мне он чем-то невероятно сложным и запутанным. И вот я, обладая лишь начальными знаниями по программированию на C, решил сделать полноценную игру своей мечты, поскольку был наслышан о низком пороге вхождения.

Но теперь я могу сказать: я один из немногих, кто довёл свой первый проект до релиза! Сделал это, причём, не вложив в него ни копейки.
Читать дальше →

Реализация и альтернатива основных JQuery функций на чистом JavaScript

Reading time8 min
Views26K
Когда я начинал учить веб-программирование, встретил лучший из всех, по моему мнению, фреймворков — JQuery. В то далёкое время нельзя было представить нормальное программирование без него, так как он мог делать одной строкой то, что делал JavaScript за 95.

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

Так вот, в этой статье я хочу рассказать о реализациях некоторых функций из JQuery на чистом JavaScript.
Читать дальше →

Путешествие за бугор и обратно: как не надо устраиваться работать за рубежом

Reading time11 min
Views222K

Тема трудовой эмиграции в IT-сообществе — одна из любимых. Кто не задумывался о том чтобы уехать туда где трава зеленее? Интернет кишит различными success story. Я же хочу показать, как вашу success story может испортить неудачный выбор места работы.


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


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

Пять инструментов отладки JavaScript, о которых полезно знать

Reading time5 min
Views27K
Вы смотрите на код и не можете понять — почему! Почему он делает нечто неожиданное, и в общем-то, если не близится дедлайн, интересное. Однако от всех этих неожиданностей, в любом случае, надо избавляться.



Прежде чем вы, бросив всё остальное, кинетесь складывать в кучу найденные где-то строчки программ, которые, вроде бы, способны решить вашу задачу, ответьте пожалуйста на три вопроса:

  1. Выполнение каких действий вы ожидаете от своей программы?
  2. Почему вы ожидаете этого от программы?
  3. Делает ли программа то, что вы от неё ожидаете?

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

Oh, My Code — новая передача про управление в IT на канале Технострим

Reading time1 min
Views9.7K

Сегодня мы запускаем на канале Технострим серию интервью с техническими руководителями IT-компаний, ведущий программы — технический директор медиапроектов Павел Щербинин. Первым у нас в гостях побывал Иван Ремень — руководитель группы разработки в Почте Mail.Ru.


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

Information

Rating
11,643-rd
Location
Самара, Самарская обл., Россия
Date of birth
Registered
Activity