Обновить
213
0
Rostyslav@Kottenator

Front-End Engineer

Отправить сообщение
Кто-нибудь интересовался, будет ли реализация Pivot на Flash?
Чую, что не будет.
Язык — Javascript.
Вроде бы все переполнения обработаны :)
Если не прав — приведите пример
Видимо сейчас нет работы поважнее :)
вы про проверку аргументов перед началом алгоритма? это я опустил. Примем за правду, что передан массив (возможно пустой)
function bins(a,n) {
    var res=null, l=0, r=a.length, s;
    do {
        s=Math.floor((l+r)/2);
        if (n<a[s]) {r=s;} else {l=s;}
        if (a[l]==n) {res=n;s=r=l;}
        if (a[r]==n) {res=n;s=l=r;}
        if (r-l==1) l=r;
    } while (l<r);
    return [res,s];
}

var ar=[1,2,3,6,8,10,13,14,17,18,19,25];

bins(ar,1) // ok
bins(ar,6) // ok
bins(ar,4) // null


* This source code was highlighted with Source Code Highlighter.


20 мин работы.

Предусмотрены случаи:
1) чётн/нечётн/нулевая размерность массива
2) искомое меньше первого или больше последнего элемента
3) на всякий случай вывожу позицию, на которой нашлось число или остановился алгоритм

Мне не очень нравится косяк с двумя проверками на равность, но это — мелочь, наверное.
Я пришёл к выводу, что тут лучше велосипед, чем что-то стороннее. Быстрее, проще, намного проще и быстрее.

var Template = T = function(source) { this.source = source; }

Template.prototype = {
    source: '',
    apply: function(config) {
        config = config || {};
        return this.source.replace(/{{\s*(.*?)\s*}}/g,
            function (a, b) {
                var r = config[b];
                if (typeof r == "undefined")
                    r = "";
                return r;
            }
        );
    }
}

// Применение
var t = new T('<li class="mylist"><a href="{{ url }}"><span>{{ url }} - {{ title }}</a></li>');
for (var i=10; i; i--)
    $('ul').append(t.apply({ url: 'http://ya.ru', title: 'Ya.ru' }))


* This source code was highlighted with Source Code Highlighter.

WebInspector сиьлно уступает FireBug'у:

1) Неудобно добавлять новые свойства в CSS (да и редактировать существующие)
2) Попробуйте найти в Chrome'овском JS-отладчике «Останавливать JS на каждой ошибке» (оно есть, но я нашёл не сразу)
3) JS-консоль: где многострочный ввод? Ан нет…
4) Когда же они сделают нормальную кнопку «Inspect element»!
5) Редактировать HTML-фрагмент? Что вы, мы не такие…
6) Удалить node прямо из дерева — не умеем (хотя это вообще никто, кроме FireBug'а, не умеет)

Зато в WebInspector есть:
1) Гламурные цветные закругляшки
2) Крутые эффекты разворачивания панельки
3)…
4) PROFIT!

Ладно, я слишком критичен. В WebInspector'е из последней dev-версии Chrome есть одна очень крутая штука — Audit (это круто, они проверяют сайт на Yahoo Best Practices. В FireFox есть аналог — плагин для FireBug — YSLow)
Мне кажется, что в этом «видео», собственно, нет ни капли видео…
Если присмотреться, все сцены — статические рисунки с пост-эффектами.

Кажется, всех одиноких только что надули!
Слишком поздно они заметили, что Шпаклевка заполнила почти четверть комнаты и не собиралась останавливаться.
— Надо было верить рекламе! — взвыл Каскер. — Эта штука в самом деле опасна!
Mithgol, почему так мало раскрыли тему возможностей?

В Pencil есть такие чудесные вещи, как:
  • * Хранение проекта (почти) в SVG формате
  • * Написание собственных плагинов с помощью SVG + Javascript
  • * Вставка SVG-фрагментов из буфера обмена (т.е. сделал Ctrl+C в Inkspace — и тут же Ctrl+V в Pencil)
  • * Лёгкое импортирование растровых изоображений во внутреннюю коллекцию фигур
  • * Отличный набор Default HTML elements (не помню точное название) — одна из новых фишек: тут и быстрое редактирование таблиц ("[*] первая ячейка с checkbox | вторая ячейка | () < — radio"), и генерирование lorem-ipsum различной длины...

Вообщем, отличнейшая штуковина. Воплощаем на ней свои задумки интерфейсов — быстро и качественно. Всем нравится :)
«на передний план», «на задний» — есть ещё в верхней панели инструментов
Pencil отлично подходит для прототипирования ExtJS.

А так же для прототипирования вообще чего-либо, а не только простых прототипов.
Использую «Карандаш» уже 1.5 года, проектируем довольно сложные интерфейсы, при том очень быстро.

Надо лишь привыкнуть и разобраться в простом наборе возможностей.
Продолжу мысль:

  • -> переопределить toString
  • -> вынести toString и применять к любому объекту
  • ->сделать рекурсивный пробег по иерархии объекта (попутно избежав бесконечной рекурсии)
  • -> сделать красивый вывод иерархии объекта (с "±" и т.д.) в какой-нибудь DIV коммандой console.log(obj)
  • -> чёрт, это всё уже сделано в Firebug Lite! :) Скачать, пользоваться на здоровье :)


Понимать, как это работает — здорово. Но надо экономить своё время и уметь полагаться на 3d-party разработки ;)
Как вариант:
поставить в IE7 script Debugger + Firebug Lite. Ну и + хорошее знание JS и проекта :)
Может быть это моё личное мнение, но когда, когда alert() лучше, чем приведённые мной способы (breakpoints, debugger, console.log/dir, ...)?

Ведь alert останавливает поток, блокирует взаимодействие с браузером и при этом всего навсего выводит строку… Без возможности заглянуть в иерархию объекта.

breakpoints тоже тормозят поток, но при этом дают возможность осмотреться в scope. И не модальный.
console.log/dir — не тормозит поток, но более информативен, т.к. даёт заглянуть внутрь объекта. И не модальный.

Чем же alert() лучше?
Firebug
Opera Dragonfly -> Network Tab = показывает AJAX
Safari/Chrome WebInspector -> Resources Tab = показывает AJAX
IE — я не нашёл. Но можно поставить себе на комп что-то типа Fiddler, тогда и с IE разберёмся :)
Да, тут без понимания и шага не сделаешь.

Но когда перед тобой огромный проект, с нескольколетней историей разработки и сотней тысяч строк — тут без дебага не обойтись
Да, я упомянал в статье Firebug Lite или Blackbird

В обоих вариантах — вывод в какой-то ДОМ-элемент

И потом это прикрутить вот сюда — вот и получится универсальный логгер с флажком! :)

Информация

В рейтинге
Не участвует
Дата рождения
Зарегистрирован
Активность