Обновить
256K+

JavaScript *

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

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

YAMD: еще один велосипед для описания модулей в JS

Время на прочтение7 мин
Охват и читатели4.1K
В последнее время я стал много писать на JS, сейчас работаю над сложным приложением и довольно крупной библиотекой (~5K SLoC). Конечно же, я столкнулся с проблемой модульности.

Для приложения идеально подошел AMD — указываешь в зависимостях библиотеки, добавляешь связующий код, логику… и приложение готово. Но при разработке библиотеки я столкнулся с проблемой управления внутренними зависимостями при помощи AMD или CommonJS — получается слишком много обвязок (boilerplate), особенно когда части библиотеки взаимозависимы. Поэтому я выделил еще один подход к определению модулей в JS — YAMD.

Внимание! Это не замена AMD или CommonJS, для сборки приложения я по прежнему использую AMD, просто одна из библиотек, которую я подключаю, собрана с помощью YAMD. Таким образом, YAMD является подходом к декомпозиции сложной библиотеки без внешних зависимостей на части и отдельные файлы, и инструментом для сборки этих файлов воедино.

В статье я опишу подход. От вас хочется узнать в комментариях, что вы используете для тех же задач.
Читать дальше →

Mail.Ru для бизнеса, часть 2: как это работает

Время на прочтение8 мин
Охват и читатели20K
Недавно мы запустили «Mail.Ru для бизнеса». В прошлом посте мы уже рассказывали о том, как организовать корпоративную почту на Mail.Ru, а сегодня подробнее остановимся на технологиях, которые мы задействовали при реализации. При работе над проектом мы реализовали ряд технических решений на серверной и клиентской стороне, которые в итоге позволили сделать сервис удобнее. В этом посте мы подробнее расскажем, как технологически устроена наша клиентская часть.

Под катом — про single-page, сбор ошибок, шаблонизацию и переход от одного URL-а к другому без перезагрузки страницы.

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

Наследование в Backbone.js

Время на прочтение4 мин
Охват и читатели15K
Коллеги, использующие Backbone.js! Вы задумывались, как работает наследование в этой библиотеке?
Знаете, как себя ведет Backbone.Model.extend({})?
И наверняка знаете и помните, что у extend два опциональных параметра: proto props и static props.
Если хотя бы на один выше заданный вопрос вы ответили отрицательно — прошу под кат.
Постараюсь порадовать пошаговым исследованием, схемками, табличками и примерами.
Читать дальше →

Улучшенное наследование в CoffeeScript

Время на прочтение3 мин
Охват и читатели5.5K
CoffeeScript принёс в JS неплохую абстракцию классов, основанную на прототипах.
Реализовав известную модель наследования и дополнив её наследованием методов касса,
он позволяет легко строить иерархии классов, даже не зная о цепочках прототипов.
Но и эта модель может быть улучшена.
Читать дальше →

Реализация выборки, кэширования и отрисовки фотографий на карте

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

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



Так как в нашем сервисе было очень много фотографий и посылать запросы к БД при каждом изменении окна просмотра слишком ресурсозатратно, логично было разбить карту на участки, в которых хранилась бы информация об уже извлеченных данных. Эти участки по вполне понятным причинам имеют прямоугольную форму (хотя вариант с гексагональной сеткой тоже рассматривался). Так как при больших масштабах участки становятся более сферообразными, то элементы сферической геометрии и инструменты для работы с ней также были рассмотрены.


В данной статье были затронуты следующие проблемы:


  • Хранение и выборка фотографий из БД и помещение их в серверный кэш (SQL, C#, ASP.NET).
  • Загрузка необходимых фотографий на стороне клиента и помещение их в клиентский кэш (JavaScript).
  • Перерасчет фотографий, которые нужно скрыть или отобразить при каждом изменении окна просмотра.
  • Элементы сферической геометрии.
Всем интересующимся добро пожаловать под кат

Набор методов для работы со списками в AngularJS

Время на прочтение3 мин
Охват и читатели10K
Часто приходится работать с примитивными списками, поэтому, чтобы не писать одни и те же методы, собрал их в одном сервисе. Немного расскажу о нем, как о примере вынесения функциональности из контроллеров.

Демка, песочница (с демкой играются многие, так что данные могут скакать)

Как видно из примера, у нас проблема: куча списков со схожей функциональностью (добавление, удаление, сортировка элементов — что еще может быть у списков :-).
Читать дальше →

Понимание типов сервисов в AngularJS (constant, value, factory, service, provider)

Время на прочтение6 мин
Охват и читатели192K
Ангуляр поставляется с различными видами служб или сервисов, каждый из которых применяется в своей ситуации.
Имейте в виду, что сервисы, не зависимо от типа, это всегда синглтоны (одиночки).

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

Перейдем к типам сервисов
Читать дальше →

Двухколёсная автоматизация загрузки файлов на сервер из Notepad++

Время на прочтение5 мин
Охват и читатели6.7K
Так уж вышло, что по работе, мне приходится редактировать файлы, к которым я имею доступ только через файловый менеджер CMS Bitrix, что влечёт за собой открытие множества вкладок в браузере и огромное количество ненужных телодвижений необходимых лишь для того, чтобы отредактировать несколько файлов.
Ниже я расскажу как решил эту проблему с помощью Node.js и свободного времени.
Читать дальше →

Вышел test.it v1.1.0 — что дальше?

Время на прочтение3 мин
Охват и читатели5K
Добрый день хабр.
Вчера вышла версия 1.1.0 test.it — фреймворка для тестирования js кода.
Он, наконец, обзавёлся функционалом, отсутствие которого делало его неполноценным:
  • Асинхронные тесты/группы
  • Запуск отдельных тестов/групп
А так же прочими мелочами.

картинка для привлечения внимания
Кто не любит много слов — Сайт на котором можно увидеть код в действии, GitHub, Wiki
ченджлог c подробностями и небольшой опрос

Promise-ы в AngularJS

Время на прочтение5 мин
Охват и читатели123K
Одной из ключевых составляющих практически любого веб-приложения является взаимодействие с сервером. В больших приложениях это далеко не один запрос. При этом запросы часто необходимо объединять для последовательного или параллельного выполнения, а часто сочетать и то и другое. Кроме того, большие приложения обычно имеют многослойную архитектуру — обертка над RESTFul API => бизнес-сущности => более комплексная бизнес-логика (разбиение условно для примера). И на каждом слое необходимо принять данные в одном формате и передать на следующий слой уже в другом.

Вот со всеми этими задачами могут помочь справиться Promise-ы.

За подробностями добро пожаловать под кат.
Читать дальше →

Оформление кода, оптимизация процесса проверки качества кода

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

JavaScript, the winning style



Код написанный в одном стиле, имеет много преимуществ: меньше мелких ошибок, многие ошибки легко обнаружить почти сразу, другие же можно легко отладить еще на стадии разработки. Новым же программистам не придется тратить лишнее время на изучение вашего кода (это не значит что им не придется разбираться в самом коде, а значит лишь что его легче будет читать) и им будет проще влиться в проект.

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

В отличие от Питона у которого есть единый свод правил «Style Guide for Python Code», у языка JavaScript такого нет. Однако на выбор есть целых 6 популярных гайдов:



Помимо гайдов, не стоит так же забывать об автоматических анализаторах кода, таких, например, как JSLint и JSHint. И в них уже заложены свои настройки. Вопрос в том, какой же все-таки максимально правильный способ писать код на JavaScript, который был бы актуален и максимально соответствовал бы большинству рекомендаций? Давайте попробуем объединить большинство рекомендаций в этой статье и подумаем как можно оптимизировать процесс проверки качества кода.
Читать дальше →

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

Время на прочтение4 мин
Охват и читатели62K
Всем доброго времени суток. Как-то так получилось, за последнее время я увидел много интересных и полезных инструментов/библиотек/событий, которыми я хотел поделиться на Хабре. Все эти темы по отдельности, на мой взгляд, не заслуживали целой статьи. Но каждая из них достойна внимания и может кому нибудь пригодиться. В итоге получился небольшой дайджест:

Prepros



Великолепное приложение препроцессор для CSS, JS. Компилирует файлы следующих типов: LESS, Sass, SCSS, Stylus, Jade, Slim, Coffeescript, LiveScript, Haml. Минифицирует JS на лету, при каждом изменении файла. Оптимизирует изображения. Доступен для Windows и Mac, а также как расширение для Chrome. Плюс ко всему создает HTTP сервер, для тестирования сайта на разный устройствах. Бесплатная замена CodeKit'у и Ghostlab'у вместе взятых, что в сумме позволит Вам сэкономить $75.

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

Вышел Meteor 0.6.5

Время на прочтение2 мин
Охват и читатели5.5K
На хабре неоднократно упоминался Meteor (тут, тут и тут) — высокоуровневый JavaScript-фреймворк для быстрого создания одностраничных web-приложений.

Сегодня вышла версия 0.6.5., основные изменения:
Читать дальше →

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

Tessel – микроконтроллер, программируемый на JavaScript

Время на прочтение1 мин
Охват и читатели20K
JavaScript уверенно продолжает своё шествие и теперь настал черёд железа.

Tessel — это микроконтроллер программируемый на JavaScript, судя по всему, ориентируемый на работу с интернетом — WiFi модуль в нём идёт по умолчанию.

Пока, к сожалению, в продаже его нет, но официальный твиттер обещает открытие предзаказов уже в сентябре, цена так же не известна (во всяком случае я не нашёл)
Читать дальше →

Titanium Cloud Service: отправка писем без вызова email dialog

Время на прочтение3 мин
Охват и читатели2.8K
Titanium Cloud Service

Titanium Cloud Service — является простым и удобным способом избежать создания сервера для работы с мобильным приложением, воспользовавшись уже готовыми решениями от Appcelerator.



Cloud Service поддерживает использование Push Notifications, отправки почтовых сообщений, хранение большого объема фотографий и многое другое.

Следует отметить, что существует несколько тарифных планов для Cloud, но для начала работы бесплатной версии более чем достаточно. Данная версия предоставляет такие возможности как: 5 миллионов Push Notifications, 5 миллионов API вызовов, 20 гигабайт свободного места на сервере, 100 тысяч почтовых писем в месяц, что, на мой взгляд, очень неплохо.

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

Nested routing в AngularJS

Время на прочтение2 мин
Охват и читатели27K
image
В AngularJS, как известно, нет возможности штатными средствами сделать многоуровневую маршрутизацию, в которой перезагрузка нижних уровней маршрутов бы не приводила к пересозданию элементов верхнего уровня. Стандартный сервис $route инициализирует вид, контроллер и его scope целиком каждый раз, когда изменяется URL страницы.

Для решения этой проблемы написано несколько сторонних решений, включая известный ui-router. По ряду причин ни одно из решений для некоторых моих проектов не подошло, и я написал собственную библиотеку, которую здесь и представляю: angular-route-segment.

Что она позволяет делать?
Читать дальше →

JSXGraph — введение

Время на прочтение9 мин
Охват и читатели11K
Эта статья — о JSXGraph, написанной на JavaScript библиотеке для отображения геометрических чертежей в веб-браузере
Дальше

Esboza — векторный редактор online & фреймворк (Часть вторая)

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


Это продолжение предыдущей статьи. Когда я писал первую статью об «Esboza» в голове вертелось — «Почти всё готово, осталось немножко всякой фигни по мелочам». Прошло три года. Сейчас в голове — «Вот теперь точно почти всё готово!».

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

Build 2013 для HTML/JS-разработчиков под Windows 8.1 и обзор полезных докладов

Время на прочтение5 мин
Охват и читатели6K
Продолжаем нашу серию обзоров новинок в мире Windows-разработки и материалов конференции Build. Ранее в серии:




Сегодня мы расскажем о том, что нового появилось в Windows 8.1 для разработчиков приложений на HTML/JS. И сразу отмечу, что обновленные примеры кода можно скачать в соответствующем разделе MSDN.
Читать дальше →

Использование Drag&Drop в HTML 5

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


Долгое время для создания Drag&Drop функционала использовались JavaScript-функции, однако браузеры не всегда корректно могли отображать результат. В HTML 5 есть способ грамотной поддержки Drag&Drop, с небольшим применением JavaScript. В этой статье подробно разобран наглядный пример применения Drag&Drop в HTML 5.

Поддержка браузерами


На сегодняшний день функция Drag&Drop в HTML 5 корректно обрабатывается всеми современными настольными браузерами, (частично даже IE 5.5!), однако мобильные такую возможность не поддерживают. Подробнее данные в таблице caniuse.com.
Читать дальше →