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
Предусмотрены случаи:
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' }))
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 года, проектируем довольно сложные интерфейсы, при том очень быстро.
Надо лишь привыкнуть и разобраться в простом наборе возможностей.
Может быть это моё личное мнение, но когда, когда alert() лучше, чем приведённые мной способы (breakpoints, debugger, console.log/dir, ...)?
Ведь alert останавливает поток, блокирует взаимодействие с браузером и при этом всего навсего выводит строку… Без возможности заглянуть в иерархию объекта.
breakpoints тоже тормозят поток, но при этом дают возможность осмотреться в scope. И не модальный.
console.log/dir — не тормозит поток, но более информативен, т.к. даёт заглянуть внутрь объекта. И не модальный.
Firebug
Opera Dragonfly -> Network Tab = показывает AJAX
Safari/Chrome WebInspector -> Resources Tab = показывает AJAX
IE — я не нашёл. Но можно поставить себе на комп что-то типа Fiddler, тогда и с IE разберёмся :)
Чую, что не будет.
Вроде бы все переполнения обработаны :)
Если не прав — приведите пример
20 мин работы.
Предусмотрены случаи:
1) чётн/нечётн/нулевая размерность массива
2) искомое меньше первого или больше последнего элемента
3) на всякий случай вывожу позицию, на которой нашлось число или остановился алгоритм
Мне не очень нравится косяк с двумя проверками на равность, но это — мелочь, наверное.
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)
Если присмотреться, все сцены — статические рисунки с пост-эффектами.
Кажется, всех одиноких только что надули!
— Надо было верить рекламе! — взвыл Каскер. — Эта штука в самом деле опасна!
В Pencil есть такие чудесные вещи, как:
Вообщем, отличнейшая штуковина. Воплощаем на ней свои задумки интерфейсов — быстро и качественно. Всем нравится :)
А так же для прототипирования вообще чего-либо, а не только простых прототипов.
Использую «Карандаш» уже 1.5 года, проектируем довольно сложные интерфейсы, при том очень быстро.
Надо лишь привыкнуть и разобраться в простом наборе возможностей.
Понимать, как это работает — здорово. Но надо экономить своё время и уметь полагаться на 3d-party разработки ;)
поставить в IE7 script Debugger + Firebug Lite. Ну и + хорошее знание JS и проекта :)
Ведь alert останавливает поток, блокирует взаимодействие с браузером и при этом всего навсего выводит строку… Без возможности заглянуть в иерархию объекта.
breakpoints тоже тормозят поток, но при этом дают возможность осмотреться в scope. И не модальный.
console.log/dir — не тормозит поток, но более информативен, т.к. даёт заглянуть внутрь объекта. И не модальный.
Чем же alert() лучше?
Opera Dragonfly -> Network Tab = показывает AJAX
Safari/Chrome WebInspector -> Resources Tab = показывает AJAX
IE — я не нашёл. Но можно поставить себе на комп что-то типа Fiddler, тогда и с IE разберёмся :)
Но когда перед тобой огромный проект, с нескольколетней историей разработки и сотней тысяч строк — тут без дебага не обойтись
В обоих вариантах — вывод в какой-то ДОМ-элемент
И потом это прикрутить вот сюда — вот и получится универсальный логгер с флажком! :)