Обновить
256K+

JavaScript *

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

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

Принцип работы SIP клиента в браузере

Время на прочтение2 мин
Охват и читатели16K
Пообщавшись в комментариях к посту, я понял, что не все до конца понимают принцип работы SIP в браузере. Поэтому, решил экспромтом написать небольшую статью, где в общих чертах раскрыть эту тему.


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

JSZip спустя полгода: распаковка архивов, работа на Node.js

Время на прочтение1 мин
Охват и читатели6.3K
22 ноября 2011 года JiLiZART всем нам сообщил, что есть на свете полезная библиотека JSZip с открытым исходным кодом, написанная на джаваскрипте и умеющая создавать zip-архивы (и даже, если это необходимо — с подкаталогами) из скормленных ей текстовых и двоичных данных.

Первым же комментарием к его сообщению стали мои слова:

 — Прекрасно.

 — Теперь ему бы ещё распаковывать уметь.

Прошло полгода с тех пор, и можно видеть, что это естественное пожелание сбылось: очевидно, оно пришло на ум не одному мне, так что программисты принялись за дело — и в открытый на Гитхабе исходный код JSZip добавили методы, способные служить ещё и распаковке zip-архивов, а не только составлению их. (Подробности употребления новинок API смотрите в документации.)

В открытом коде всегда приятно видеть, как другие люди действуют в направлении твоих мыслей.

Поклонникам же джаваскриптового движка Node.js будет наверняка не менее приятно узнать о появлении модуля node-zip, содержащего весь код JSZip, оформленный в качестве модуля Node. Стало быть, теперь JSZip можно запускать не только во браузере, но и на сервере, а равно и у себя на компьютере.

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

Node.js на узле Фидонета: читаем джаваскриптом заголовки эхопочты, хранимой в формате JAM

Время на прочтение7 мин
Охват и читатели2.5K
Сегодня у меня две причины пробежаться по клавишам.

Во-первых, после того, как на прошлой неделе я перевёл документацию по jParser (после ознакомления с RReverserовским примером применения jParser при анализе BMP-файлов), мне представляется уместным перейти к напрашивающемуся последующему шагу: развить тему, поделиться с читателями моим собственным примером применения jParser для анализа несколько более сложной структуры данных. (Отчасти это станет ответом на вопрос, который alekciy задал, интересуясь дальнейшими примерами практического использования jParser.)

Во-вторых, ≈полгода назад (26 ноября 2011 года) ertaquo поинтересовался, зачем мне хочется использовать Node.js в Фидонете. Тогда я сообщил, что мне просто нравится название (помню те времена, когда термин «node» или «нóда», если употреблялся без уточнения, в российском околокомпьютерном мире по умолчанию означал узел Фидонета), но не мог привести никакого наглядного примера работающего кода, а сейчас приведу.

Итак, пример будет двойным. Предлагаю вашему вниманию анализ заголовков писем фидонетовской эхопочты, хранимой в формате JAM. Этот формат популярен в Фидонете со времён далёких и незапамятных (в Википедии говорится, что появление JAM относится к 1993 году). Сразу скажу, что давно предпочитаю JAM другому популярному формату (Squish), потому что этот последний хранит в заголовке у письма идентификаторы не более чем девяти откликов на него, тогда как JAM вместо массива ограниченной длины использует более гибкую структуру данных (связный список), так что позволяет выстроить полное дерево ответов даже в самых оживлённых и разветвлённых обсуждениях.

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

Пишем и оптимизируем Жизнь Конуэя на JS

Время на прочтение5 мин
Охват и читатели6.8K
Обновляя недавно дизайн своего хомяка, подумал – а не сделать ли мне какую-нибудь необычную страницу с 404-й ошибкой? Поскольку в детстве я был впечатлен Жизнью Конуэя (как возможно и многие из читателей), решил её на JS и реализовать.

Казалось бы, что сложного в Жизни: если у занятой клетки 2 или 3 соседа – она остается, если у пустой ровно 3 – рождается? В этой статье я расскажу о своей оптимизации алгоритма и отрисовки на canvas-е, некоторых не очевидных моментах целочисленной/бинарной арифметики в JavaScript.

Забегая вперед, конечный результат можно увидеть тут, исходники видны там же (да еще и по лицензии CC BY).
Читать дальше →

Видео SIP клиент в браузере

Время на прочтение1 мин
Охват и читатели15K
Сейчас почти не осталось препятствий для создания полноценного SIP клиента в браузере. Необходимый для видео конференций WebRTC уже можно протестировать, например, в Chrome Canary. Существует draft-ibc-sipcore-sip-websocket, который добавляет WebSocket в качестве еще одного транспорта для SIP. И уже появляются первые реализации SIP клиентов:



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

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

Greensock — теперь и для JavaScript

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


Удивительно, но факт: на хабре практически нет статей о Greensock — великолепной библиотеке для скриптовой анимации на Flash. Возможно, это связано с тем, что Flash-разработчиков тут меньше, чем веб-разработчиков?

Впрочем, теперь уже не важно: Greensock v12 (он же Greensock Animation Platform или GSAP) умеет анимировать на JavaScript. Любое свойство любого объекта можно проанимировать десятками способов, соединить анимации в таймлайн, поставить этот таймлайн на паузу или развернуть задом наперёд. Всего парой строчек.

Более того, Greensock работает значительно быстрее jQuery, YUI, MooTools или Dojo. Разработчики говорят о тысячах процентов, но зачем верить на слово, когда есть animation speed test.

Подробности на английском: www.greensock.com/v12/, а под катом — краткое изложение на русском языке.
Читать дальше →

Средний размер сценария JavaScript увеличился на 48% за год

Время на прочтение1 мин
Охват и читатели1.2K
Статистика HTTP Archive демонстрирует взрывной рост JavaScript в вебе. Год назад средний объём скриптов на странице составлял 128 КБ, а сейчас уже 189 КБ.



С одной стороны, приятно, что этот язык программирования переживает нечто вроде возрождения и всеобщей популярности. С другой стороны, увеличение объёма скриптов нагружает браузер и негативно отражается на времени загрузки страниц. Грустно, что для загрузки одного твита (140 символов) требуется 1,65 мегабайта скриптов.

Пример воздействия масс-эффекта на количество скачиваний

Время на прочтение3 мин
Охват и читатели1.2K
По следам предыдущей статьи, которая была чуть более месяца назад, о количестве скачиваний юзерскрипта для сайта habr.ru, появилось ещё одно интересное явление, которое заслуживает рассмотрения. Если предполагать, что никакой накрутки нет, то его можно объяснить только масс-эффектом — влиянием большого числа — показателя скачиваний на ещё более быстрый рост этого числа.
Читать дальше →

HTML5 History API уже сегодня и без ограничений

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

Библиотека для работы HTML5 History API


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

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

jParser: анализ двоичных файлов работает просто

Время на прочтение4 мин
Охват и читатели8.8K
jParser делает простым чтение структур данных из двоичных файлов джаваскриптом.

  • Вы один раз описываете структуру, анализ её происходит автоматически.
     
  • Процесс анализа данных может быть расширен самописными функциями. Чем упрощается разбор нетривиальных файлов.
     
  • jParser действует и во браузере, и в NodeJS, потому что работает на основе jDataView.

API

Элементарные структуры:

  • Целые числа без знака: uint8, uint16, uint32
     
  • Со знаком: int8, int16, int32
     
  • Дробные с плавающей точкой: float32, float64
     
  • Строковые: char, string(len)
     
  • Массив: array(type, len)
     
  • Положение: tell, skip(len), seek(pos), seek(pos, func)

Методы jParser:

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

Средняя длина идентификатора в популярных библиотеках JavaScript составляет 8.27 символа

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

Идентификаторы длиной больше 15 встречаются реже односимвольных. Чаще всего встречаются 6-cимвольные имена. Такие результаты получил автор Esprima — парсера для JavaScript, написанного на JavaScript, проанализировав исходный код таких библиотек, как jQuery, Prototype, MooTools, Underscore и некоторых других.

Пятёрка самых длинных идентификаторов выглядит так:
prototype-1.7.0.0.js SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING
prototype-1.7.0.0.js MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED
jquery-1.7.1.js subtractsBorderForOverflowNotVisible
jquery.mobile-1.0.js getClosestElementWithVirtualBinding
prototype-1.7.0.0.js HAS_EXTENDED_CREATE_ELEMENT_SYNTAX

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

CanvGauge — измерительный прибор с помощью canvas для HTML5

Время на прочтение1 мин
Охват и читатели8.9K
HTML5 Canvas GaugeДобрый день, хабровчане!

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

Имитируем пересечение, исключение и вычитание, с помощью опережающих проверок, в регулярных выражениях в ECMAScript

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

От переводчика


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

Информация в статье касается ECMAScript, но может использоваться и в других RegExp Движках (хотя и есть вероятность, что там есть более подходящее решение).

Если примеры кажутся вам сложными, рекомендую играть с ними в консоли, по мере прочтения. И Заранее прощу прочтение за пугающее название.

Статья


Если вы какое-то время используете регулярные выражения, то наверняка вы сталкивались с разными вариантами следующих задач:

  • Пересечение:«Что-то, что совпадает с шаблоном А и шаблоном Б»
    Например: Пароль, минимум 6 символов, в котором хотя бы одна цифра, хотя бы одна буква, и хотя бы один специальный символ

  • Исключение: «Я хочу что-то, что совпадает с шаблоном А, но не совпадает с шаблоном Б»
    Например: Любое целое число, которое не делится на 50

  • Отрицание: Все. Что не совпадает с шаблоном А
    Например: Строка, которая не содержит в себе слово «Foo»


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

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

Простой универсальный переключатель на JavaScript

Время на прочтение8 мин
Охват и читатели55K
При разработке сайтов нередко возникает необходимость в каком-либо переключении их состояния, обычно для этого используются псевдоссылки: скрыть или показать подсказку, поле ввода, другую часть страницы.

Можно каждый раз писать JavaScript-код и стили к нему, но со временем это приводит к разрастанию кода, с чем в определенный момент мы и столкнулись.

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

Импровизированный шаблонизатор на JavaScript

Время на прочтение3 мин
Охват и читатели2.9K
Предположим, вам не нужен полноценный шаблонизатор для веб-проекта, но с другой стороны периодически встречаются места в коде, где хорошо бы отделить HTML от JavaScript-а. В таком случае, одним из решением может быть использование варианта самой простой шаблонизации на основе JavaScript.
Исходный код.
Демо
Видео (выбираем HD для наиболее удобного просмотра):


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

Mobiscroll — кастомный select для мобильных сайтов и не только

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

К каждому, кто сталкивался с разработкой сайтов под iOS/Android/etc (или native-приложений через phonegap и иже с ним), рано или поздно наверняка приходило осознание того факта, что стандартные управляющие элементы форм не очень удобны для работы с touch-экранов.

И если input'ы и textarea вполне можно отрисовать с помощью css, то с селекторами ситуация гораздо более грустная — и не улучшить особо, и выбирать, например, дату, последовательным выбором трех выпадающих списков — занятие не из приятных.
Помогает в решении этой проблемы мультиплатформенный (обещают как минимум работу на iOS/Android, но с некоторыми помарками работает и на MeeGo — это из проверенного собственноручно) select-заменитель Mobiscroll, с некоторым трудом нагугленный мной пару недель назад.

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

Портируем C/C++ библиотеку на JavaScript (xml.js)

Время на прочтение7 мин
Охват и читатели21K
Статья является дополненным переводом статьи «HOWTO: Port a C/C++ Library to JavaScript (xml.js)» (автор: azakai). Автор оригинальной статьи имеет приличный опыт портирования C/C++ библиотек в JavaScript. В частности, он успешно портировал lzma.js и sql.js. В своей статье он описывает общую схему портирования C/C++ кода на примере libxml – открытой библиотеки для валидации XML.
Читать дальше →

Работа с локальным хранилищем, как с объектом? Легко!

Время на прочтение3 мин
Охват и читатели15K
Когда появился localStorage я был рад, как слон, но, немногим позже, после подробного изучения вопроса, я несколько разочаровался: там могут храниться только строки, а об объектах можно было забыть. Приходилось превращать их в строки для хранения, приходилось обратно конвертировать строку в объект для работы с ним, затем опять конвертировать в строку, чтоб сохранить. Не спорю, есть замечательные библиотеки, позволяющие манипулировать хранилищем максимально просто, но вызывать функции как-то не очень хотелось.

localStorage = { a: { b: 1 }, c: { d: 2 } }
localStorage.a.b = 3;

Круто было бы, не так ли?

Относительно давно, где-то около полугода назад я задался вопросом: как же, блин, сделать так, чтоб можно было работать с localStorage вообще без функций, чисто как с объектом. Challenge accepted!

Как говорит небезызвестный Геша: “Всё, я здзелал”.

Дальше читать не обязательно. Более разумное решение находится здесь: habrahabr.ru/post/144998

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

eachDeferred — отложенная обработка коллекции, one by one

Время на прочтение2 мин
Охват и читатели2.1K
В ходе разработки текущего энтерпрайз-проекта, понадобилось реализовать отложенную обработку коллекции элементов jQuery — имелся набор виджетов, содержимое которых нужно было загрузить по очереди, причем загрузка происходила асинхронно. Пришлось написать небольшое расширение к $.fneachDeferred.
Читать дальше →

Улучшаем «бесконечный скроллинг»

Время на прочтение2 мин
Охват и читатели34K
В 2011 году очень модно было (по-моему, эта мода пошла от Фейсбука) делать у себя на сайтах «бесконечный скроллинг»: это когда пользователь крутит-крутит колесом мыши, и всё новые результаты поиска подгружаются Аяксом внизу страницы, превращая обычный скроллинг в бесконечный и вызывая у столкнувшегося с этим в первый раз пользователя «когнитивный диссонанс».

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