Обновить
128K+

JavaScript *

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

140,23
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности
Формат публикации

Особенности написания и возможные фичи LR-генераторов

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

Введение


Добрый день.
В заключительной части про написание собственного генератора LALR-парсеров я бы хотел описать возможные особенности и фичи. Кроме того я опишу чего мне не хватало в существующих решениях и ради чего я начал писать свой велосипед.

Дабы задать контекст, сообщу, что грамматика для анализа — это ECMAScript, так же известный как JavaScript. Конкретная спецификация — ECMA-262, редакция 5.1 от июня 2011 года.
Читать дальше →

Обработка неопределённых глобальных переменных располагается далёко от здравого смысла! Но её можно превозмочь…

Время на прочтение3 мин
Охват и читатели2.7K
Здравый смысл веборазработчика подсказывает, что во браузерном джаваскрипте глобальные переменные являются свойствами объекта window — так что window.чегоНибудь и просто чегоНибудь должны быть синонимами и вести себя одинаково (если, конечно, мы не находимся в какой-нибудь такой функции, где переменную чегоНибудь переопределили локально).

Здравый смысл веборазработчика также ещё подсказывает, что неопределённая переменная должна иметь значение undefined — так что чегоНибудь и undefined должны быть синонимами и вести себя одинаково, когда переменную чегоНибудь не определяли в джаваскрипте (и если, конечно, никакой чудила не дерзнул переопределить undefined).

Но если вы собираетесь программировать для Opera 11 (будь то начальная версия Opera 11.01 или новёхонькая Opera 11.61), то будьте готовы отречься от здравого смысла в обоих сих случаях! (Не только в Opera, но и в других браузерах и средах — но об этом чуть позже.)

Чтобы нагляднейше убедиться в этом, воспользуемся библиотекою Underscore.js, в которой как раз имеется удобная функция тестирования неопределённых переменных — это функция _.isUndefined(), в исходном коде определённая самоочевидным способом:

// Is a given variable undefined?
_.isUndefined = function(obj) {
   return obj === void 0;
};

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

cache-js. функция кэширования

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

PHP warning/notice сообщения в JS консоль + секретная кнопка

Время на прочтение2 мин
Охват и читатели2.6K
Когда требуется делать правку кода на рабочем сайте, возникает потребность в обработке возможных ошибок, и делать это незаметно для пользователя. Для начала, потребуется определить собственную функцию обработки php ошибок.
Читать дальше →

Автоматическая кросс-доменная установка высоты Iframe

Время на прочтение4 мин
Охват и читатели37K
Думаю, многие, кто сталкивался в своей работе с iframe, сталкивались и с задачей установки высоты этого самого айфрейма.

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

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

Есть одно неплохое кросс-доменное решение, но оно было написано в 2007 году, а с тех пор многое изменилось. Поэтому пришлось разрабатывать решение этой проблемы самостоятельно, основываясь на приведенном решении.

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

Fiddler — помощник в отладке JavaScript

Время на прочтение3 мин
Охват и читатели208K
На Хабре уже упоминалась данная тулза, но как-то в контексте других тем.

What is Fiddler?
Fiddler is a Web Debugging Proxy which logs all HTTP(S) traffic between your computer and the Internet. Fiddler allows you to inspect traffic, set breakpoints, and «fiddle» with incoming or outgoing data. Fiddler includes a powerful event-based scripting subsystem, and can be extended using any .NET language.

Fiddler is freeware and can debug traffic from virtually any application that supports a proxy, including Internet Explorer, Google Chrome, Apple Safari, Mozilla Firefox, Opera, and thousands more. You can also debug traffic from popular devices like Windows Phone, iPod/iPad, and others.

To debug applications you've written in Java, .NET, or using WinHTTP, see this page.


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

Подробности

Две маленьких функции, способных упростить жизнь

Время на прочтение4 мин
Охват и читатели1.3K
Я знаю про Backbone.js и про Knockout.js
Просто иногда хочется чего-то значительно меньшего.

1. Введение. О чем речь, какова предметная область. Какая существует проблема.

О чем речь: есть JavaScript, «сферический, в вакууме».
Предметная область: объекты и их свойства, то, что задается приведенными ниже способами.

var obj = new Object();
var obj = {};


где свойства, соответственно:

obj.prop = 111;
obj = {
   "prop1" : "value1"
   "prop2" : 2
}


Какая существует проблема:

1. Есть вот такие вот объекты, у них есть эти самые свойства.
2. Хочется узнать, когда свойство было изменено ( часть MVVM pattern )
3. И, соответственно, подписаться на это изменение.

UPD 1 — Пример в работе, спасибо alist, за очень, по моему мнению, важный комментарий ниже.

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

Авторизация через JS

Время на прочтение1 мин
Охват и читатели15K
Сегодня что-то дернуло прикрутить к своему сайту авторизацию через Вконтакте. Покрутился по интернету, посмотрел на типовое решение на сайте Вконтакта. Решил проверить. И не получилось.

Более того — отправился на сайт великого и могучего. Но и там не получилось.

Поискал информацию на хабре, потом на гугле, потом начал тестировать.
Читать дальше →

Индексация AJAX-сайтов

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


Вместе с разработкой Joosy, AJAX внезапно – но ожидаемо, – заполонил все проекты, за которые мы беремся. Парадигма оказалась крайне удачной во всех аспектах, кроме одного. Того самого классического: «AJAX? Индексация? Пфф...». Пока мы делаем интернет-банки, это нас вполне устраивает. Но как не отказывать себе в этом изысканном удовольствии для открытых Web-ресурсов?

А вот как: Google AJAX Crawling – это стандарт Google, который позволяет при формировании AJAX-адресов специальным образом (#!) заставить Google магически запрашивать вместо него другой магический адрес. С которого Google будет ждать HTML-дамп этой страницы, который он весело прожует. Добрые люди уже написали статью про то как это работает. Ну а нам остается научиться эффективно этот дамп формировать. Да так, чтоб без вмешательства в код самого приложения.

Hashbang сделает это весело и непринужденно.

Sync vs Async на примере Firebird

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

В этой публикации я поставил перед собой несколько целей:

  • Сравнить разные стили программирования работы с БД Firebird в NodeJS;
  • Найти наиболее производительный вариант;
  • Получить в результате руководство к действию тем, кто начинает использовать Firebird в NodeJS.


Дальше много кода…
Читать дальше →

habrAllHub — переключалка между «Все блоги» и «Мои избранные блоги»

Время на прочтение6 мин
Охват и читатели753
Реинкарнация кнопки «Читать все хабы» с возможностью вернуться к чтению избранных хабов (блогов); работает при авторизации; настройки выбора переносимы через JSON.

Эту кнопку «сломали» и пообещали, что «насовсем», разработчики сайта 14 марта 2012 года. Но свято место пусто не бывает, и появился её ослабленный клиентский «дух».

Скрипт сохраняет все ваши настройки блогов в одной большой JSON-строке, которая запоминается в хранилище браузера (не потеряется при сбое питания) и которая может быть вытащена для экспорта (кнопка «Импорт-экспорт») в другие браузеры и компьютеры (ею же можно воспользоваться, чтобы «посмотреть глазами других»). По кнопке-переключателю «Все/Свои» делается лёгкий выбор между всеми блогами или своими избранными. Фактически, это замена прежнему режиму «Читать все», убранному с сайта. Другие имеющиеся решения требуют чем-то пожертвовать: выбрать «всё» вручную (это означает — потерять свои избранные блоги), читать habrahabr.ru/posts/collective и habrahabr.ru/posts/collective/new (будут пропускаться блоги компаний) — обсуждение в QA.

Перейти на страницу скрипта. Сразу скачать скрипт habrAllHub.
Ограничение ответственности

SQL.js: движок SQLite переведён на JavaScript посредством Emscripten

Время на прочтение1 мин
Охват и читатели20K
Alon Zakai (создатель Emscripten) продолжает действовать: на сей раз он выпустил скрипт SQL.js — итог перевода библиотеки SQLite на JavaScript при помощи его собственного средства Emscripten. Демонстрационная страница показывает скрипт в деле, и если вы взглянете на исходники, то увидите, каким простым Закай устроил использование этого средства, им скомпилированного:

var db = SQL.open();
var data = db.exec(command);

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

Первый тренинг по KnockoutJS от Романа Гомолко в Днепропетровске

Время на прочтение1 мин
Охват и читатели3.1K
Дорогие Хабра-читатели,

Спешим похвастаться, что в субботу, 24 Марта, Днепропетровский офис Ciklum принимает в гостях однодневный тренинг Романа Гомолко (romanych) по KnockoutJS.

Выяснить больше деталей о программе мероприятия, целевой аудитории, организации, а также зарегистрироваться вы можете пройдя по ссылке: http://knockoutjs.in.ua/training/

Поскольку тренинг будет проходить на нашей территории, сотрудники Ciklum получат скидку на участие.

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

Пишем сайт на GWT: Часть 1

Время на прочтение4 мин
Охват и читатели46K
Добрый день дамы и господа,

На хабре есть не так много статей на тему GWT (Google Web Toolkit) и в большинстве своем написаны они в ключе «какая это бяка, ничего не умеет, ничего не понятно». Кроме того, как показывает мой опыт, большинство программистов о GWT вообще ничего не слышали, а те кто слышал, думают, что больше чем на „Hello World“он не способен. Я постараюсь показать вам, что с помощью этого замечательного Фреймворка можно делать такие вещи, которые большинству JavaScript программистам просто не по зубам.

Перед началом небольшое отступление, т.к. вопрос «а зачем?» обязательно прозвучит. Этот сайт я написал на GWT, т.к. у меня и выбора то не было. С HTML,CSS, PHP и JavaScriptом я знаком(был) весьма поверхностно( как собственно и большинство Java-программистов), а вот идея и желание были. А потому использовал я что имел и получилось вроде весьма не плохо.

Посмотрите на этот сайт. Да это не шедевр, но он показывает, что GWT может все, что может JavaScript и даже больше. Почему больше? Ответ на этот вопрос полностью совпадает с ответом на вопрос: «почему С++ может больше чем Assembler?». На эту тему я предлагаю подискутировать в комментариях. А мы возвращаемся к GWT. Нет ничего лучше( мое стойкое убеждение), чем объяснять что либо на примере, а посему я предлагаю вам препарировать этот сайт.


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

Распознаём retina-дисплеи джаваскриптом

Время на прочтение1 мин
Охват и читатели12K
Я отыскивал способ выяснить DPI устройства для употребления в мобильном дизайне. Я ещё не обнаружил его, зато нашёл приём для выяснения того, пользуется ли читатель сайта сетчаточным дисплеем. Вот как без хлопот достичь этого:
var retina = window.devicePixelRatio > 1 ? true : false;

Теперь переменная retina примет значение true, если у читателя сетчаточный дисплей. В дальнейшем можно использовать простой оператор if, чтобы выполнить тот или иной код в зависимости от типа дисплея.

if (retina) {
    // у читателя дисплей типа retina
}
else {
    // у читателя дисплей не типа retina
}

Зачем?

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

Kartograph — фреймворк для создания интерактивных карт

Время на прочтение1 мин
Охват и читатели20K
Kartograph — это новый фреймворк для создания интерактивных картографических веб приложений без использования Google Maps/Bing Maps или любого другого сервиса. Он создавался с учетом потребностей дизайнеров и журналистов.

Можно поглядеть на демки, чтобы узнать на что способен Kartograph.
или узнать как это все работает.

Оптимизатор загрузки JavaScript

Время на прочтение2 мин
Охват и читатели2K
Я закончил разработку бета-версии своего оптимизатора загрузки JavaScript — jWidget SDK.

github.com/enepomnyaschih/jwsdk/wiki

jWidget SDK — это небольшой скрипт, сборщик (прекомпилятор) вашего JavaScript. Это обертка вокруг YUICompressor, которая автоматизирует сборку проекта и дает очень гибкую конфигурацию. Инструмент совместим с любой архитектурой сервера, со всеми JavaScript-фреймворками. Инструмент бесплатный, с открытым исходным кодом и имеет лицензию LGPL.

Инструмент успешно протестирован на нескольких коммерческих проектах с разной серверной архитектурой. В том числе (не имею права дать ссылки):

— Чистый веб-сервис на Java + AJAX + JS. Особенность приложения: весь-весь-весь контент рендерится динамически через JavaScript, и приложение грузится почти мгновенно благодаря браузерному кэшированию
— Один шахматный клиент на jQuery, встроенный в сайт на Zend Framework
— Клиент одного приложения на Adobe Air

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

PIRO — ракета для вашего PivotalTracker акаунта

Время на прочтение2 мин
Охват и читатели1.1K
image
Привет всем. Сегодня я поведаю о своей разработке для Google Chrome и Pivotal Tracker — PIRO. Начнем по порядку.

PivotalTracker — сервис для управления софтверными проектами по «гибким» методологиям. Более подробно можно узнать из этой статьи на Хабре. Сам по себе трекер отличный, но при работе с ним у меня возникали определенные проблемы:

  • При работе с несколькими проектами неудобно переключатся между ними
  • Тяжело узнать в каких проектах созданы задачи на Вас или же какой статус задач, которые Вы создали на других людей
  • Если вдруг вы работаете с несколькими PivotalTracker акаунтами, то переключение происходит или перелогином или же каждый акаунт в отдельном браузере (кто как крутится)


Немного поразмыслил, я закатал рукава и начал писать свое решение для PivotalTracker. В ходе работы я показывал его людям, они подключались и помогали мне в его реализации. Поэтому в конце проекта его решили сделать Open Source :)

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

Аналог паттерна Step и вложенность асинхронных вызовов

Время на прочтение3 мин
Охват и читатели1.1K
При реализации модели для манипуляции с данными в MongoDB, я пришел к выводу, что нужно как то избежать проблем с вложенностью асинхронных вызовов. Я не знал о существовании Step для Node.js и решил создать свой велосипед. Чем и хотел бы с Вами поделиться, уважаемые Хабро пользователи.
Читать дальше →

Представление многострочных данных в javascript и юзерскриптах

Время на прочтение9 мин
Охват и читатели13K
Речь пойдёт о проблеме кроссбраузерного представления многострочных данных в javascript. Это могло не быть проблемой, если бы Firefox умел работать с функциями так же, как другие браузеры. Единый кроссбраузерный способ представления так и не найден, несмотря на 2-дневные усилия. Если бы он был, его, наверное, уже стали применять на сайте userscripts.org. Пока что имеется раздельный способ представления: один — для юзерскриптов Firefox, другой — для всех остальных. Также, для Scriptish существует возможность чтения формата метаданных (директив), что не охватывает произвольного формата, но решает задачу, чаще всего встречающуюся в юзерскриптах. Не рассматриваем решение с 2 запросами на сервер, с обращением к внешним HTML, XML и с дублированием данных, потому что хотим данные и скрипт получить в одном запросе, в одном файле, и файл этот — типа «text/javascript».
Читать дальше →