JavaScript → Спагетти в последовательном вызове асинхронных функций. Теория и практика
В продолжение статьи Последовательный вызов асинхронных функций.
Большинство традиционных, не-веб языков программирования являются синхронными (блокирующими).
Как можно определить, синхронный или же асинхронный данный язык? Например, по наличию/отсутствию функции sleep (может называться также delay, pause и т.д.), когда программа полностью останавливается на определённое количество времени.
В JavaScript, как вы знаете, такой функции нет. Есть, например
Часть 1. Теория
Большинство традиционных, не-веб языков программирования являются синхронными (блокирующими).
Как можно определить, синхронный или же асинхронный данный язык? Например, по наличию/отсутствию функции sleep (может называться также delay, pause и т.д.), когда программа полностью останавливается на определённое количество времени.
В JavaScript, как вы знаете, такой функции нет. Есть, например
Персональные блоги → We're Bringing the Platform. You Bring the Idea!
Именно под таким слоганом позавчера начался первый раунд Windows Metro Style App Challenge, одного из конкурсов, проходящих в рамках всемирно известного студенческого чемпионата от Microsoft – Imagine Cup 2012.О самом чемпионате написано уже достаточно, поэтому этой статьей я хотел бы начать цикл, посвященный участию в новой номинации Windows Metro Style App Challenge с точки зрения самого участника.
Сама номинация появилась в связи с ожидаемым выходом Windows 8 (ну и уже состоявшегося выхода Windows Developer Preview).
На главной странице номинации гласится:
"Windows 8" is coming and, with the Windows Metro Style App Challenge, we are asking students to be at the forefront of those creating applications for this new platform. Apps are the center of the Windows 8 experience and great apps start with you. This Challenge will test your Team’s ability to design and build a Metro style app that takes advantage of Windows 8 features and design principles to deliver an experience that solves one of the world’s toughest problems and wows not only us but those across the globe.
JavaScript → Эмуляция события вызова функции
Около полугода назад мне задали примерно такой вопрос: “Я использую крупный фреймворк, запускающий некую функцию по действию пользователя. Хочу, не меняя кода этой функции, выполнить по событию вызова этой функции свой код.”. Практика далеко не лучшая, события вызова функции не существует, я просто покрутил пальцем у виска и сказал, что это жуткий говнокод, так делать не стоит, да и это, просто-напросто, — невозможно.
Пару дней назад, направляясь домой относительно тёплым зимним вечером, не типичным для Одессы, у меня возникла нетипичная мысль: “А что если попробовать сделать то, что спрашивал Богдан полгода назад?”. Придя домой, я включил компьютер, и, в течении пары минут, сделал то, что задумал. В первую очередь, меня интересовало то, как будут себя вести встроенные методы, если их переопределить, и можно ли после этого как-нибудь вызвать прежнее их состояние, бывшее до переопределения. Я знал, что, если объект переопределяют, то ссылки на него не уничтожатся, сохраняя прежний вид. Что касается встроенных функций, имелись сомнения. Оказывается, можно.
Скорее всего, мне даже никогда не придется воспользоваться таким инструментом, но, чисто гипотетически, возможно, у кого-то возникнет задача проследить вызов той или иной функции, получив отчет о каждом вызове, состоящий из:
(Этот список полностью соответствует аргументам, передающимся в обработчик)
Пару дней назад, направляясь домой относительно тёплым зимним вечером, не типичным для Одессы, у меня возникла нетипичная мысль: “А что если попробовать сделать то, что спрашивал Богдан полгода назад?”. Придя домой, я включил компьютер, и, в течении пары минут, сделал то, что задумал. В первую очередь, меня интересовало то, как будут себя вести встроенные методы, если их переопределить, и можно ли после этого как-нибудь вызвать прежнее их состояние, бывшее до переопределения. Я знал, что, если объект переопределяют, то ссылки на него не уничтожатся, сохраняя прежний вид. Что касается встроенных функций, имелись сомнения. Оказывается, можно.
Скорее всего, мне даже никогда не придется воспользоваться таким инструментом, но, чисто гипотетически, возможно, у кого-то возникнет задача проследить вызов той или иной функции, получив отчет о каждом вызове, состоящий из:
- Результата выполнения
- Переданных аргументов
- Контекста вызова (что есть this при вызове)
- Количества вызовов функции после создания обработчика
(Этот список полностью соответствует аргументам, передающимся в обработчик)
JavaScript → Последовательный вызов асинхронных функций
Как известно, язык JavaScript преследует парадигму событийно-ориентированного программирования. Это, безусловно, хорошо, но что делать, если за одной асинхронной функцией должна вызываться другая асинхронная функция, а затем еще одна, и еще… Иногда такой код очень запутывает, и не только человека привыкшего к синхронному и поочередному вызову функций. Это касается сложных анимаций, таймаутов, аякса, когда за одним должно следовать другое, и так дальше.
Поэтому, я разработал свой костыль, который позволяет более наглядно вызывать асинхронные функции, запускающие callback после выполнения. Вполне вероятно, что решение уже давно существует, но я, к сожалению, такого решения не нашел.
UPD

Ниже моё решение, являющееся аналогом этой функции модуля async и кучи других подобных решений, представленных в комментариях. Спасибо всем комментирующим и sedictor в частности.
/UPD
Рассмотрим пример (который взят из головы и в нем возможны ошибки) гипотетического парсера сайта, который после парсинга заносит данные в БД, и, после занесения, вызывает некоторый код.
Много вложенных колбеков — не есть гуд, пробуем по-другому.
Поэтому, я разработал свой костыль, который позволяет более наглядно вызывать асинхронные функции, запускающие callback после выполнения. Вполне вероятно, что решение уже давно существует, но я, к сожалению, такого решения не нашел.
UPD

Ниже моё решение, являющееся аналогом этой функции модуля async и кучи других подобных решений, представленных в комментариях. Спасибо всем комментирующим и sedictor в частности.
/UPD
Рассмотрим пример (который взят из головы и в нем возможны ошибки) гипотетического парсера сайта, который после парсинга заносит данные в БД, и, после занесения, вызывает некоторый код.
var html = '';
request.on('response', function (response) {
response.on('data', function (chunk) {
html = html + chunk;
});
response.on('end', function() {
//какой-то парсер
parse(html, function(data){
//какая-нибудь функция, добавляющая данные в базу
addToDatabase(data, function() {
doSomething();
})
});
});
});Много вложенных колбеков — не есть гуд, пробуем по-другому.
JAVA → JavaOne 2011
Сегодня в Сан-Франциско стартовала JavaOne 2011. Он-лайн трансляция доступна на странице http://www.oracle.com/javaone/live/index.html, есть субтитры на английском.

Всего запланировано более 400 выступлений разделённых на 7 треков:

Всего запланировано более 400 выступлений разделённых на 7 треков:
Game Development → Погружение в скрипты игрового движка Unity3d, ч.2
Доброго времени суток всем читателям! Не так давно мною была опубликована статья, охватывающая некоторые часто используемые скриптовые возможности движка Unity3d. В этой части я хотел бы написать о скриптовых событиях, вызываемых при различных условиях. Все, указанные в данной части справочника, функции доступны в любом скрипте, который «повешен» на игровой объект.
Идеи для стартапов → Глобальная система управления событиями. Постановка проблемы
Я по образованию системный аналитик. За 5 лет учебы на данной специальности я понял, что системный анализ — это искусство решения проблем практически в любой деятельности человека. Не важно, что вы делаете — создаете стартап, открываете ресторан или организуете конференцию, если вы на первоначальном этапе хорошо изучите проблематику той области, в которой вы собираетесь произвести изменения, то эффективность вашей деятельности увеличиться. Не даром говорят, выявленная проблема — это 50% решения.
В этой статье я хочу поделиться одной идеей для стартапа, которая появилась из жизни. Дело в том, что я люблю посещать всевозможные события: концерты, фестивали, опен эиры и т.д. И в том месте, где я сейчас обитаю, вокруг меня происходят десятки разных событий (подобная ситуация свойствена всем большим городам). И передо мной периодически возникает следующая проблема: каким образом быть в курсе всех актуальных и интересных событий, проходящих вокруг меня. Я начал изучать эту тему и понял, что на данный момент в интернете отсутствует эффективное решение по поиску событий. Более того я исследовал ситуацию еще и со стороны организации событий, что тоже показало свои проблемные области. Под катом вы можете ознакомиться с результатами моего небольшого исследования.
В этой статье я хочу поделиться одной идеей для стартапа, которая появилась из жизни. Дело в том, что я люблю посещать всевозможные события: концерты, фестивали, опен эиры и т.д. И в том месте, где я сейчас обитаю, вокруг меня происходят десятки разных событий (подобная ситуация свойствена всем большим городам). И передо мной периодически возникает следующая проблема: каким образом быть в курсе всех актуальных и интересных событий, проходящих вокруг меня. Я начал изучать эту тему и понял, что на данный момент в интернете отсутствует эффективное решение по поиску событий. Более того я исследовал ситуацию еще и со стороны организации событий, что тоже показало свои проблемные области. Под катом вы можете ознакомиться с результатами моего небольшого исследования.
Я пиарюсь → Стартап Афиша обновилась
На днях заметил, что портал Стартап Афиша выкатил вторую версию.Напомню, что первую версию этого стартапа для стартапов выпустили на коленке и за неделю. В течении полугода сервис тестировал спрос, основным его функционалом была еженедельная рассылка со всеми стартап мероприятиями России. И это сработало, я не знаю сколько сейчас подписчиков у рассылки, но календарь Ст. Афиши самый полный и актуальный на данный момент. Он даже стал своеобразным «отраслевым стандартом».
И вот после проверки временем афиша запускает новые сервисы.
JavaScript → Cвязывание данных в JavaScript-приложениях: автороутинг событий из песочницы
Привет Хабр! В этой статье я рассмотрю один из вариантов построения архитектуры клиент-серверного веб-приложения с точки зрения связывания данных. Этот вариант не претендует на оригинальность, но лично мне позволил значительно сократить время на разработку, а также оптимизировать время загрузки.
Я пиарюсь → Опубликована предварительная Программа конференции «Разработка ПО/CEE-SECR 2011»
В предварительную Программу конференции вошли:
Новые языки программирования, Agile методологии, Разработка приложений для мобильных устройств, Бизнес: Стартапы, Тенденции развития в веб-разработке, Инструменты и среды разработки, Разработка приложений для социальных сетей, Облачные вычисления и другие. Посмотреть Программу на сайте.
Среди ключевых докладчиков: Сергей Белоусов, основатель венчурного фонда Runa Capital и компании Parallels (cм. подкаст «Рунет сегодня») и Джеф Сазерленд, создатель методологии Scrum, один из авторов Agile Manifesto.
Новые языки программирования, Agile методологии, Разработка приложений для мобильных устройств, Бизнес: Стартапы, Тенденции развития в веб-разработке, Инструменты и среды разработки, Разработка приложений для социальных сетей, Облачные вычисления и другие. Посмотреть Программу на сайте.
Среди ключевых докладчиков: Сергей Белоусов, основатель венчурного фонда Runa Capital и компании Parallels (cм. подкаст «Рунет сегодня») и Джеф Сазерленд, создатель методологии Scrum, один из авторов Agile Manifesto.