Pull to refresh
3
0
Alex X @Sanchiz

User

Send message

Как я завел дружбу с асинхронностью в JavaScript

Reading time12 min
Views43K
JavaScript встречает разработчиков асинхронностью можно сказать чуть ли не с порога. Начинается все с DOM-событий, ajax, таймерами и библиотечными методами, связанными с анимацией (например jQuery-методы fadeIn/fadeOut, slideUp/slideDown). В целом, это все не очень сложно и разобраться с асинхронностью на этом этапе не представляет проблем. Однако, как только мы переходим к написанию более или менее сложных приложений, в которых комбинируется все вышеуказанное, асинхронный поток может сильно затруднить понимание происходящего в коде. Цепочки асинхронных действий, например, анимация > ajax-запрос > инициализация -> анимация, создают достаточно сложную архитектуру, которая не подчиняется строгому направлению «снизу верх». В этой статье я намерен рассказать про свой опыт преодоления трудностей связанных с асинхронным JS.
Читать дальше →
Total votes 58: ↑32 and ↓26+6
Comments15

5 популярных JavaScript-хаков

Reading time4 min
Views66K
Существует несколько JavaScript-хаков, которыми постоянно пользуются опытные программисты. Они не совсем очевидны, особенно для новичков. Эти хаки используют возможности языка, имеющие некоторые побочные эффекты. В этой статье я объясню, как работают 5 таких распространённых хаков.
Читать дальше →
Total votes 89: ↑56 and ↓33+23
Comments112

Объекты в JavaScript и создание JS-компонента. Часть 1

Reading time8 min
Views23K
Эта статья — первая часть туториала об ООП в JavaScript и о создании простого JS-компонента.

Об объектах и JavaScript


Думайте об объекте, как о совокупности каких-то вещей. Например, представьте, что у вас есть велосипед. Этот велосипед является объектом, и он имеет совокупность каких-то признаков / частей / etc, называющихся свойствами объекта. Примером такого свойства может служить модель велосипеда, год его производства, его детали. Детали также могут иметь собственный набор свойств.
Читать дальше →
Total votes 15: ↑8 and ↓7+1
Comments3

Замыкания в Javascript [Часть 1]

Reading time15 min
Views59K
Перевод статьи Ричарда Корнфорда Javascript Closures.

  • Введение
  • Разрешение имен свойств объектов
    • Присваивание значений
    • Чтение значений

  • Разрешение имен идентификаторов, контексты исполнения и цепь областей видимости
    • Контекст исполнения
    • Цепь областей видимости и свойство [[scope]]
    • Разрешение имен идентификаторов

  • ...

Введение


Замыкание
Замыкание — это выражение (обычно функция), которое может иметь свободные переменные, вместе со средой, которая привязывает эти переменные (т.е. “замыкает” это выражение).

Замыкания относятся к наиболее мощным особенностям ECMAScript (javascript), но они не могут быть применены должным образом без понимания. Несмотря на то, что их легко создать, даже случайно, их создание может иметь пагубные последствия, в частности, в некоторых относительно распространенных окружениях браузеров. Чтобы избежать случайных столкновений с недостатками и использовать преимущества замыканий, необходимо понимать их механизм. Это сильно зависит от роли цепи областей видимости в разрешении имен идентификаторов (identifier resolution) и от разрешения имен свойств в объектах.

Самое простое объяснение замыкания в том, что ECMAScript допускает вложенные функции, определения функций и функции-выражения (function expressions) внутри тел других функций. И эти вложенные функции имеют доступ ко всем локальным переменным, параметрам и функциям, находящихся внутри их внешней функции (внешних функций). Замыкание образуется, когда одна из этих вложенных функций становится доступной вне той функции, в которую она была включена, таким образом, она может быть выполнена после завершения внешней функции. В этот момент она все еще имеет доступ к локальным переменным, параметрам и внутренним декларациям функций (function declarations) своей внешней функции. Эти локальные переменные, параметры и декларации функций (изначально) имеют те же значения, которые были во время завершения внешней функции и могут взаимодействовать с внутренней функцией.

К сожалению, правильное понимание замыканий требует понимания механизмов, которые стоят за ними, и немало технических подробностей. Хотя некоторые из алгоритмов, определенных в ECMA 262, затронуты в начале последующего объяснения, большинство не могут быть опущены или просто приведены к упрощенному виду. Если вы знакомы с разрешением имен свойств объектов, то можете пропустить этот раздел, но только люди, уже знакомые с замыканиями, могут позволить себе пропустить последующие разделы и прямо сейчас перестать читать и вернуться к их использованию.
Читать дальше →
Total votes 38: ↑26 and ↓12+14
Comments13

10 главных советов Mac OS X

Reading time5 min
Views454K
Я давно и весьма успешно пользуюсь техникой и ОС от Apple. При этом, я постоянно вижу, как окружающие меня люди: начинающие пользователи, да и весьма оптыные зачастую, не очень хорошо ориентируются в богатых возможостях этого ПО и железа. Поэтому я решил помочь и перевести несколько западных статей с советами и секретами. Считаю, что «родная» для Apple пресса наилучшим образом справляется с раскрытием потенциала OS X.

Первый материал с Lifehack.org

Вы когда-нибудь видели того, кто действительно умеет пользоваться компьютером Mac и операционной системой OS X? Иногда выглядит просто волшебством, как они заставляют двигаться окна, появляться изображения, запускаться приложения и делать множество других классных вещей – при этом их пальцы, кажется, вообще не покидают клавиатуру.Я не могу похвастаться знанием многих советов и рекомендаий Mac, тем не менее, у меня есть в запасе несколько советов, которые могут показаться вам полезными. Некоторые из них достаточно распространены, некоторые – не столь известны, но все они сделают нечто важное, на шаг приближая вас к рангу Мастера Джедаев вашего Mac.

Читать дальше →
Total votes 136: ↑90 and ↓46+44
Comments223

Два способа разработки программного обеспечения, или Одна ночь из жизни программиста Миши

Reading time9 min
Views53K


«Две тропинки идут рядом: путь жизни и путь смерти… Люди не идут никаким путём, ни путём жизни, ни путем смерти. Вихрь носит их, как солому.»
Густав Майринк, «Голем»

В офисе было тихо и темно, лишь стук клавиш и редкие щелчки мыши нарушали едва различимое жужжание кулера, да широкоформатный монитор освещал измождённое лицо regular developer'а Миши. Сторонний наблюдатель мог бы подумать, что идёт обычная рабочая ночь с пятницы на субботу. Так оно и было для тысяч других разработчиков по всему миру, но только не для Миши. Поставив очередную пустую бутылку под стол, он внезапно почувствовал, что граница, отделяющая его от гордого титула «senior developer», не так уж и далека.

«Я встаю не раньше полудня, работаю до двух часов ночи и выпиваю за раз до трёх литров пива. Наверное, я становлюсь профессионалом», — подумал Миша, и в этот самый момент почувствовал на себе чей-то тяжёлый взгляд. То, что он увидел, подняв глаза от монитора, заставило его замереть от ужаса. Две фигуры в серых балахонах стояли по обоим сторонам его стола. Лица, скрытые низко надвинутыми капюшонами, смотрели сурово, и в то же время безразлично. Страшно было пошевелить хотя бы пальцем или вздохнуть, а сознание отчаянно отказывалось верить в реальность происходящего — ведь Миша узнал этих двоих. Старшие коллеги рассказывали ему, что всякий раз, когда кто-нибудь подбирается к мистической грани между простым разработчиком и старшим, к нему приходят эти двое, чтобы посвятить в свои мрачные тайны.

Миша сглотнул и тихо спросил дрожащим голосом:

— Тим-лид Коля? Проджект-менеджер Изя? Рабочий день уже давно закончился, что вы здесь делаете? И к чему весь этот маскарад?
Читать дальше →
Total votes 258: ↑228 and ↓30+198
Comments87

Павел Дуров выступил на конференции DLD 2012

Reading time1 min
Views6.1K


Сегодня идёт 3-й день конференции DLD 2012 (Digital, Life, Design) в Мюнхене (Германия). На ней выступил Павел Дуров от лица социальной сети VK.com. VK.com представили как «российский Facebook». Выступление было посвящено Wikipedia. Это первое публичное выступление Павла Дурова (как он сам сказал во время выступления). Присутствие представителя российской IT-индустрии на такого уровня конференциях, несомненно, радует.

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

P.S. В ходе выступления Павел Дуров пообещал пожертвовать Википедии 1 миллион долларов. Спасибо за подсказку nadenok и parilov.

UPD. видео на Youtube.
UPD2. если у вас не очень с английским — есть перевод.
Total votes 143: ↑119 and ↓24+95
Comments132

Жизнь разработчика (в картинках)

Reading time1 min
Views65K
Взято отсюда специально для хабра. Возможно, в некоторых из ситуаций вы узнаете себя.

Когда я показываю босу, что окончательно пофиксил баг



Когда проджект-менеджер входит в офис



Читать дальше →
Total votes 884: ↑700 and ↓184+516
Comments132

Как накормить мозг программиста… или feed your brain

Reading time12 min
Views370K

Введение


Из всех наслаждений, отпущенных человеку в жизни,
самое изысканное — шевелить мозгами.
(Борис Акунин)


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

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

В данной публикации мы рассмотрим, как правильно питаться для жизнеобеспечения мозга и как его разогнать ноотропами (в случае аврала необходимости).
Читать дальше →
Total votes 213: ↑163 and ↓50+113
Comments145

Преждевременная оптимизация — зло!

Reading time1 min
Views26K
image

Предлагаю вашему вниманию первую часть перевода книги «Mature optimization» Карлоса Буэно о принципах оптимизации высоконагруженных проектов.

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

Книгу стоит прочесть, если вы:

1. Хотите повысить производительность своего проекта, но не знаете с чего начать.
2. Хотите повысить производительность своего проекта, но боитесь все сломать.
3. Не знаете о подводных камнях оптимизации производительности.
4. Давно хотели настроить мониторинг проекта, но не уверены что именно стоит мониторить.
5. У вас есть система мониторинга, но она не сообщает о проблемах заранее.

Читать дальше →
Total votes 58: ↑43 and ↓15+28
Comments21

Асинхронность: почему это никак не сделают правильно?

Reading time7 min
Views6.8K
Асинхронные программы чертовски неудобно писать. Настолько неудобно, что даже в node.js, заявленном как «у нас все правильное-асинхронное», понадобавляли таки синхронных аналогов асинхронных функций. Что уж говорить про питоновский синтаксис, не дающий объявить лямбду со сколь-либо сложным кодом внутри…

Забавно, что красивое решение проблемы не требует ничего экстраординарного, но почему-то до сих пор не реализовано.
Читать дальше →
Total votes 86: ↑81 and ↓5+76
Comments78

node-sync — псевдо-синхронное программирование на nodejs с использованием fibers

Reading time6 min
Views21K
Надавно была опубликована библиотека node-fibers, вносящая в nodejs и v8 поддержку замечательного fiber/coroutine — тоесть, возможность использовать yield.
Параллельно, на nodejs groups прошел целый ряд обсуждений на тему всевозможных вариантов упрощения асинхронного синтаксиса.

Вдохновившись возможностями, которые дают «волокна», я написал библиотеку node-sync, которая делает разработку в асинхронном окружении nodejs значительно удобнее, а код — нагляднее.

Синопсис

// Обычная асинхронная функция, вызывает callback с результатом через 1 сек
function someAsyncFunction(a, b, callback) {
    setTimeout(function(){
        callback(null, a + b);
    }, 1000)
}
// Вызываем эту функцию синхронно, используя Function.prototype.sync(),
// работающий по тому же принципу, что и call()
// на этом моменте текуший поток "зависнет" на секунду, пока функция не вернет значение
var result = someAsyncFunction.sync(null, 2, 3);
console.log(result); // "5" через 1 секунду

Читать дальше →
Total votes 35: ↑32 and ↓3+29
Comments50

Ожидание нескольких событий в nodejs

Reading time6 min
Views14K
Наверное, каждый, кто начинает изучать nodejs, испытывает трудности с переходом на событийно-ориентированное программирование. Все просто, пока мы можем выполнять действия последовательно: начинать следующее, дождавшись завершающего события от предыдущего. Но что делать, если таких действий много и они продолжительны во времени? А если мы не можем продолжать, пока не дождемся завершения каждого из них?

Почитать рассуждения новичка
Total votes 29: ↑23 and ↓6+17
Comments7

Юнит тесты Vs функциональные тесты — взгляд руководителя и разработчика

Reading time3 min
Views78K
Современную разработку программного обеспечения тяжело представить без автоматического тестирования — по сути это единственный способ защитить продукт от разрушительных изменений (то есть изменений, повреждающих существующий функционал).

image

Обычно используют два вида автоматических тестов:
Модульное тестирование (тестирование отдельных частей продукта, обычно отдельных функций/методов)
Функциональное тестирование — тестирование некого функционала продукта, при этом продукт воспринимается как единый «чёрный ящик».

Но давайте зададим интересный вопрос — действительно ли нужны оба вида тестирования сразу, и если нет — то какое из них важнее?
Читать дальше →
Total votes 44: ↑30 and ↓14+16
Comments96

Юнит-тестирование для чайников

Reading time15 min
Views1.1M
Даже если вы никогда в жизни не думали, что занимаетесь тестированием, вы это делаете. Вы собираете свое приложение, нажимаете кнопку и проверяете, соответствует ли полученный результат вашим ожиданиям. Достаточно часто в приложении можно встретить формочки с кнопкой “Test it” или классы с названием TestController или MyServiceTestClient.



То что вы делаете, называется интеграционным тестированием. Современные приложения достаточно сложны и содержат множество зависимостей. Интеграционное тестирование проверяет, что несколько компонентов системы работают вместе правильно.

Оно выполняет свою задачу, но сложно для автоматизации. Как правило, тесты требуют, чтобы вся или почти вся система была развернута и сконфигурирована на машине, на которой они выполняются. Предположим, что вы разрабатываете web-приложение с UI и веб-сервисами. Минимальная комплектация, которая вам потребуется: браузер, веб-сервер, правильно настроенные веб-сервисы и база данных. На практике все еще сложнее. Разворачивать всё это на билд-сервере и всех машинах разработчиков?

We need to go deeper
Total votes 70: ↑63 and ↓7+56
Comments65

Запись и сведение в условиях отсутствия денег

Reading time5 min
Views53K
В этом посте я постараюсь рассказать о том как можно быстро, почтибесплатно и сравнительно качественно записать и свести хоть целый альбом. В моем случае мы использовали записанный материал в качестве «демок», чтобы явить себя миру, хотя если бы скилл сведения у меня был «прокачан» сильнее, можно было бы сделать полноценную запись.

В процессе были задействованы следующие устройства и ПО:
— ноутбук Macbook Pro 13", на котором все и происходило.
— звуковая карта Lexicon Omega.
— микрофон Audio-Technica AT2020 для записи вокала.
— наушники AKG K240 MKII для мониторинга.
— Logic 9 + пакет плагинов.

Записывались: электрогитара, бас-гитара и вокал. Так что ответов про запись барабанов я не дам.

Читать дальше →
Total votes 51: ↑36 and ↓15+21
Comments144

Собеседование на должность JavaScript разработчика

Reading time4 min
Views287K


Недавно прочитал неплохой пост на тему поиска работы QA и подумал, что похожий пост был бы полезен для JavaScript разработчиков. В конечном счёте, веб движется вперед семимильными шагами, и соискателей на позицию JavaScript программиста хоть отбавляй (разумеется, хороших всегда меньше).
Читать дальше →
Total votes 126: ↑115 and ↓11+104
Comments313

Приводим в порядок css-код. Опыт Яндекса

Reading time6 min
Views89K
Всем привет!

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

Когда много людей, используя разные инструменты, пишут и редактируют css, со временем этот css может получиться очень запутанным, неконсистентым и в целом начинает выглядеть плохо. Например, кому-то удобнее писать вендорные префиксы в одном порядке, кому-то — в другом, кто-то ставит кавычки вокруг url, кто-то — нет, а кто-нибудь фикся срочную багу к релизу мог бы, к примеру, написать position: relative в начале блока свойств, незаметив что где-нибудь внизу между color и box-shadow, уже есть position: absolute, и долго гадать, почему у него ничего не работает.



Но несмотря на то, что все пишут код по-разному, у нас в репозитории идеальный порядок: css-код полностью консистентен, и прекрасно выглядит. Весь.

Как мы этого добились, можно прочитать под катом.
Читать дальше →
Total votes 174: ↑169 and ↓5+164
Comments70

Пост вдохновения: лучшее время для старта своего дела

Reading time1 min
Views23K
Начиная новое дело, мы часто ловим себя на малодушной мысли: «что, если подождать, если не сейчас, а потом, когда закончится кризис, будет больше денег и свободного времени?».

Мы сами задавались этим вопросом не раз. Сначала — основывая Alconost. И позже, запуская независимые подразделения с отдельными бизнес-процессами: локализация, разработка видеороликов, создание справочной документации, сервис живого онлайн-перевода, мультиязычные контекстные рекламные кампании, разработка собственных продуктов. По себе знаем, что старт бизнеса — этап, когда вдохновение и поддержка, помогающие побороть свои страхи — на вес золота. Для этого мы и сделали мотивационный ролик «Лучшее время для старта бизнеса». Смотри, потенциальный бизнесмен, и вдохновляйся:



А для состоявшихся бизнесменов вопрос: как вы пришли к собственному делу?
Total votes 43: ↑37 and ↓6+31
Comments5
1
23 ...

Information

Rating
Does not participate
Registered
Activity