Обновить
256K+

JavaScript *

Прототипно-ориентированный язык программирования

264,71
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Простой односторонний универсальный коннектор для Chrome

Время на прочтение3 мин
Охват и читатели7.7K
Мне нравится Netbeans Connector. Удобная штука, знаете ли. Редактируешь css в браузере, а IDE сохраняет и выгружает ее на сервер.
Но вот руки дошли до asp — и вот неожиданность, из вещей подобного плана для студии нашел только LiveStyle. Но чукча не читатель, чукча — писатель, так что возникла идея написать свой велосипед.
В принципе, идея простая: отлавливаем изменения в редактируемом файле, читаем содержимое файла, отсылаем в обработчик, который запишет это содержимое в нужный файл. Вот только облом — на уровне страницы это сделать проблематично(по крайней мере, так и не нашел ни 1 адекватного способа).
Хорошо, лезем курить мануалы по плагинам chrome(именно chrome потому, что мне нравится его консолька. Подозреваю, что любой нормальный браузер, поддерживающий плагины, может делать то же самое). Пара часов, что бы разобраться с нуля — и простенький плагин готов(нужен будет посложнее — база уже есть). Отсылка реализована через post, но способ — на ваше усмотрение(к примеру, NetBeans Connector использует веб-сокеты).

Итак, собственно код.
Читать дальше →

WinJS + универсальные приложения. Изучаем ListView

Время на прочтение9 мин
Охват и читатели9.6K


В предыдущей статье я рассказала о том, как создавать галерею изображений при помощи элемента управления FlipView. Сегодня мы рассмотрим элемент управления ListView, который позволяет не только отображать различные данные в виде списка, но и работать с ними – группировать, перетаскивать и переупорядочивать.
Читать дальше →

Meteor. Разрабатываем TODO List

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

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

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

И еще одно предупреждение: в данном уроке будут использоваться следующие технологии для непосредственного написания примера:

  • jade — html препроцессор;
  • less — css препроцессор;
  • coffeescript — язык программирования, компилируемый в javascript.

Видео, демонстрирующее приложение, полученное в ходе урока



И кому все еще интересно, добро пожаловать под кат.
Читать дальше →

GamepadAPI или джойстик в браузере

Время на прочтение8 мин
Охват и читатели26K

Здравствуй, Хабр!





Смотря, как всё более новые и новые технологии внедряются в веб, смотря, как в него переносят игры, я задумался: «А было бы круто, если бы геймпад тоже можно было подключить...». И в поиске первым же результатом было GamepadAPI.
Немного ниже ссылка на W3C GamepadAPI. Посмотрев, попробовав, я обнаружил ряд проблем, подводных камней, которые поставили бы крест на внедрении джойстиков в браузер. И я решил это исправить, создав интерфейс. Что есть «из коробки», и что именно было доработано, изменено и на мой взгляд улучшено, описано под катом.

Чтобы ходить по воде, надо знать, где подводные камни...

ECMAScript 6 Promises

Время на прочтение5 мин
Охват и читатели52K
На Хабре уже встречались статьи о замечательной технологии Promises, которая в будущем станет частью стандарта ECMAScript 6, однако, в этих статьях не было подробного описания, почему же они так полезны и в чем таки их преимущества. Дабы заполнить этот пробел, я решил написать эту статью.
Читать дальше →

Nexus 5 + JavaScript + 48 часов = сенсорная поверхность?

Время на прочтение6 мин
Охват и читатели68K
Несколько недель назад в Минске проходил хакатон WTH.BY, в котором я решил принять участие. Его основной идеей было то, что это хакатон для разработчиков. Мы могли делать все, что угодно, лишь бы нам это было весело и интересно. Никаких монетизаций, инвестиций и менторов. Всё весело и круто!

Идей для реализации у меня было много, но все они не дотягивали до какого-то «Вау!». Именно поэтому накануне мероприятия я пролистывал старые статьи хабра из раздела DIY и наткнулся на статью "Опыт создания multitouch стола". Это было то, что вызвало тот самый отсутствующий «Вау!» и я решил сделать отдаленный аналог из того, чтобы под рукой.

Под рукой у меня оказалось стекло формата примерно А3, обычная бумага, маркер, мобильный телефон и ноутбук. Я быстро нашел себе сообщника Егора и началась активная работа.

Картинки нет. И счастья нет. И денег тоже нет. И дальше будет только хуже.
Что было дальше?

Особенности загрузки объектов из карты формата KML на карту Яндекса

Время на прочтение2 мин
Охват и читатели18K
В API Яндекс.Карт есть средства для загрузки географических данных в формате XML. API поддерживает карты в двух форматах: YMapsML и KML. В документации по технологиям Яндекса есть пример, илюстрирующий работу с этим форматами.

Глядя на этот пример, можно предположить, что с точки зрения API оба формата эквивалентны, и работа с ними ничем не отличается. Тем более Яндекс предоставляет конструктор карт, в котором каждой карте автоматически назначаются ссылки на оба формата. Эти ссылки отличаются только суффиксом. Карта в формате YMapsML оканчивается на символ /, а адрес той же карты в формате KML на конце содержит символы ".kml".

Независимо от формата XML загрузка геообъектов будет выглядеть так:
var map = new ymaps.Map("map", {
    center: [-25.89, 135.32],
    zoom: 4,
    controls: ["zoomControl"]
});

var url = "http://maps.yandex.ru/export/usermaps/4c4r9MAwI8DLmJKv1H--R0_bvQmHNLDz/";

ymaps.geoXml.load(url).then(function (res) {
    map.geoObjects.add(res.geoObjects);
});


Но если нам понадобится что-то сделать с объектами при загрузке, то мы обнаружим, что формат имеет значение. Предположим, что мы хотим поменять цвет контура у объекта с определенным именем.

Пример загрузки YMapsML
var url = "http://maps.yandex.ru/export/usermaps/4c4r9MAwI8DLmJKv1H--R0_bvQmHNLDz/";

ymaps.geoXml.load(url).then(function (res) {
    res.geoObjects.each(function (obj) {
        if (obj.properties.get("name") == "Бассов пролив") {
            obj.options.set("strokeColor", "0066ffff");
        }
    });
    map.geoObjects.add(res.geoObjects);
});



Оказывается, что если мы заменим адрес на формат KML, то данный код работать не будет, потому что коллекция объектов, загруженная из формата KML отличается от той, что получается при загрузке YMapsML. При загрузке KML получается коллекция объектов, состоящая из одного геобъекта, который сам является коллекцией. И вот этот вложенный объект уже содержит геообъекты, нарисованные на карте.

Поэтому для обработки коллекции, загруженной из KML надо написать вот такой код:

Пример загрузки KML
var url = "http://maps.yandex.ru/export/usermaps/4c4r9MAwI8DLmJKv1H--R0_bvQmHNLDz.kml";

ymaps.geoXml.load(url).then(function (res) {
    res.geoObjects.each(function (obj) {
        obj.each(function (nested) {
            if (nested.properties.get("name") == "Бассов пролив") {
                nested.options.set("strokeColor", "0066ffff");
            }
        });
    });
    map.geoObjects.add(res.geoObjects);
});


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

Ecmascript 6 — что можно использовать уже сейчас

Время на прочтение4 мин
Охват и читатели60K


Примечание: статья расчитана в основном на не-Javascript программистов — иногда я буду вдаваться в объяснения достаточно основных вещей, но надеюсь будет полезна и тем, кто просто не успел ознакомиться с большинством нововведений ES6.

Как известно, стандарт Ecmascript 6 собираются опубликовать в июне 2015. Но так как многое уже имплементировано в современный браузерах, почему-бы не начать использовать это прямо сейчас?
Поскольку jsFiddle и аналоги ES6 не поддерживают, буду использовать es6fiddle для примеров. К сожалению, не все в нем можно показать из-за багов. При отсутствии ссылок на es6fiddle рекомендую копировать сниппеты кода в консоль современного браузера и выполнять их — для наглядности. Рекомендую крайний стабильный Firefox (версия 33 на момент написания статьи) — там все работает «из коробки».

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

Выразительный JavaScript: Регулярные выражения

Время на прочтение22 мин
Охват и читатели242K

Содержание




Некоторые люди, столкнувшись с проблемой, думают: «О, а использую-ка я регулярные выражения». Теперь у них есть две проблемы.
Джейми Завински

Юан-Ма сказал: «Требуется большая сила, чтобы резать дерево поперёк структуры древесины. Требуется много кода, чтобы программировать поперёк структуры проблемы».
Мастер Юан-Ма, «Книга программирования»


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

В этой главе мы обсудим такой инструмент – регулярные выражения. Это способ описывать шаблоны в строковых данных. Они создают небольшой отдельный язык, который входит в JavaScript и во множество других языков и инструментов.

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

Создаем портфолио на основе фотографий из Instagram

Время на прочтение11 мин
Охват и читатели55K


Здравствуй, дорогой хабрадруг! В этом уроке мы создадим простой сайт-портфолио, который будет базироваться на фотографиях из вашего аккаунта в Instagram. Дизайн сайта сделал Tomas Laurinavicius, и он получился у него простым, функциональным и просторным. Итак, начнем.

Скачать исходники | Демо
Читать дальше →

Brackets для сомневающихся и новичков

Время на прочтение6 мин
Охват и читатели335K

СД: НЧ


Без плагинов Brackets не лучше других редакторов, но с ними его стоит хотя бы попробовать.

Введение


Не так давно на Хабре было опубликовано множество статей, касающихся тем или иным образом редактора Brackets. У многих людей сразу же появились вполне справедливые вопросы:
  1. Чем он лучше используемого мной %EDITOR_NAME%?
  2. Много ли под него плагинов?
  3. Стоит ли связываться или лучше использовать какую-нибудь известную IDE или текстовый редактор?

Надеюсь, после чтения этой статьи каждый сможет найти для себя ответы на эти вопросы.
Читать дальше →

Выразительный JavaScript: Поиск и обработка ошибок

Время на прочтение15 мин
Охват и читатели57K

Содержание




Отладка изначально вдвое сложнее написания кода. Поэтому, если вы пишете код настолько заумный, насколько можете, то по определению вы не способны отлаживать его.
Брайан Керниган и П.Ж.Плауэр, «Основы программного стиля»


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

Мастер Юан-Ма, «Книга программирования».


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

Недостатки в программах обычно называют ошибками. Это могут быть ошибки программиста или проблемы в системах, с которыми программа взаимодействует. Некоторые ошибки очевидны, другие – трудноуловимы, и могут скрываться в системах годами.

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

Установка библиотеки WinJS 3.0

Время на прочтение3 мин
Охват и читатели9.7K
Всем добрый день!



Не так давно мы рассказывали вам об анонсе новой версии библиотеки WinJS – WinJS 3.0.

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

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

Внимание! Инструкция для начинающих.
Читать дальше →

Ближайшие события

Новый WebStorm 9: просто лучше. Поддержка Meteor, React и JSX, интеграция с Gulp, PhoneGap и многое другое

Время на прочтение5 мин
Охват и читатели42K
2 недели назад мы полностью обновили WebStorm — нашу IDE для front-end-разработки и Node.js. Мы уже анонсировали некоторые улучшения в WebStorm 9, в том числе поддержку новых фреймворков и инструментов. С тех пор было проделано еще немало работы, результаты которой можно увидеть в WebStorm 9. В этом посте мы подробно расскажем об этом новом функционале и кратко напомним обо всем остальном.

image

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

Как инкрементальные обновления влияют на скорость загрузки. Опыт Яндекс.Почты

Время на прочтение5 мин
Охват и читатели36K
Яндекс.Почта — большое и сложное веб-приложение. Для первоначальной загрузки ей необходимо более 1 МБ статических ресурсов (JS/CSS/Шаблонов). При этом Яндекс.Почта обновляется два раза в неделю, а иногда и чаще.

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


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

Мы подумали: «А что если хранить где-то старую версию файлов (например, в localStorage), а при выходе новой передавать только diff между ней и той, которая сохранена у пользователя?» В браузере же останется просто наложить патч на клиенте. О том, что из этого получилось и каким выводам мы с Panya пришли, читайте под катом.
Читать дальше →

Эволюция Yahoo Mail

Время на прочтение2 мин
Охват и читатели14K
Это перевод публикации «Evolving Yahoo Mail» из блога разработчиков Yahoo.

image

Почтовый сервис Yahoo Mail изначально был запущен в 1999 году. На протяжении 15 лет код эволюционировал из серверного Web 1.0 приложения в один из крупнейших YUI одностраничных приложений в интернете.

В прошлом месяце Yahoo провел React JS митап в главном оффисе в Sunnyvale, CA. Митап (слайды с митапа) посетило более 120 человек, где мы делились знаниями и идеями о разработке приложений, используя Javascript, React, Flux и т.д. Также мы рассказали об эволюции Yahoo Mail и причинах, по которым мы выбрали ReactJS + Flux как основу для нашего нового Mail продукта.
Читать дальше →

Graphics2D.js — объекты, интерактивность, анимация на canvas… И ничего лишнего

Время на прочтение4 мин
Охват и читатели26K

Доброго new Date().getTimeOfDay();




HTML5 Canvas незаменим, когда нужно что-то динамически нарисовать. Но если мы захотим что-то динамически изменять — нам придётся хранить состояние элементов и перерисовывать при необходимости.
Если мы захотим реагировать на события — нам придётся ловить координаты мыши и определять, находятся ли они внутри нужной фигуры.
И т.д.

Частые повторяющиеся задачи. Так и появляются фреймворки и библиотеки.

Впрочем, случай с Graphics2D.js немного другой: мне просто захотелось порисовать. С объектной моделью, анимацией и событиями. И — ничего лишнего.
Но максимально расширяемо: идей много, и всё можно вынести в плагины.
Читать дальше →

Продвинутый Gulp и Browserify: интересные трюки

Время на прочтение9 мин
Охват и читатели43K
Пару недель назад я начал цикл о том, как делал некоммерческий музыкальный проект (первый пост есть в «я пиарюсь», не буду ставить ссылок), но, к сожалению, в первой же статье увлекся, и вместо того, чтобы рассказывать о том, как делал конкретно его, начал вспоминать эффективные трюки из других проектов. Видимо, именно это вкупе с прописанным акцентом на сам проект привело к тому, что за мной и постом прилетело НЛО.

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

Поэтому я постарался убрать все упоминания проекта и повторно публикую (с доработками и правками) статью, которую по сути никто еще не видел. Если вы фанат grunt — почитайте хотя бы вторую часть: то, что вы не любите gulp, не значит, что вы не любите browserify.

Краткое содержание:
  1. Простой способ обработки ошибок;
  2. Универсальная структура для хранения исходных файлов;
  3. Объединение нескольких потоков (например, скомпилированный coffee и js) в один;
  4. Создание потока из текста;
  5. создание собственных плагинов для Browserify;
  6. создание плагинов из плагинов Gulp для Browserify.

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

Несколько интересностей и полезностей для веб-разработчика #32

Время на прочтение5 мин
Охват и читатели51K
Доброго времени суток, уважаемые хабравчане. За последнее время я увидел несколько интересных и полезных инструментов/библиотек/событий, которыми хочу поделиться с Хабром.

ICEcoder



Это не просто песочница, а полноценный open source редактор в вашем браузере. Вообще существуют десктопные версии, но по-моему, наибольшие внимание разработчики уделают веб-версии. ICEcoder поддерживает HTML, CSS, LESS, SASS, JS, Coffee, PHP, RonR, Python, C/C++/C#, Java, Lua, Rust, SQL, Markdown, всего более 60 языков! Фичи: возможность совместной работы с кодом, Emmet, LiveReload, работа с БД, колопикер, diff tool, линтеры и еще целое множество удачных интерфейсных решений. Повторюсь — это все в вашем браузере!

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

Работа веб-проекта в условиях нестабильного подключения

Время на прочтение5 мин
Охват и читатели26K
Здравствуйте, меня зовут Александр Зеленин, я веб разработчик. Сегодня хочу рассказать, как могут работать сайты в условиях нестабильного подключения как и обещал. Проще говоря, что делать если отключили интернет, а деньги зарабатывать надо.

Рассмотрим 3 примера: интернет-магазин, кинотеатр и онлайн-плеер. Для магазина и кинотеатра так же идет разделение на 2 части — что делать на стороне пользователя и на стороне оператора/продавца.
Так что делать при потере коннекта?