• JS. Централизованная обработка ошибок

    alienator
    @alienator
    Никто за вас не решит, что лучше.

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

    Это необходимый минимум.

    А дальше смотрите глубже. Что вам даст функция-обработчик внутри объекта исключения? Во многих случаях она уже бесполезна; она слишком далеко от точки возникновения ошибки, чтобы попробовать ее исправить (например, вызвать код повторно со значением по умолчанию, подождать освобождения ресурса и т.п., короче, какой-нибудь while/try).

    Перед каждым вызовом функции, которая может выбросить исключение, перед каждым входом в компонент у вас есть три пути:

    • обработать какие-то (или все) исключения здесь
    • обработать и передать выше (повторный throw)
    • ничего не делать (передать сразу наверх)


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

    И вот там, поглубже, внутри компонента, уже действует ряд разумных рекомендаций:

    1. Не ловить всё подряд. Обрабатывать только те исключения, с которыми известно, что делать. Если не совсем известно, делать re-throw.

    2. re-throw делать аккуратно. Не надо, опять же, хватать больше от жадности, а потом пропускать исключения ненужных классов. Для ява-скрипта это выражается вот в чем:

    Нехорошо:
    try {
         // ...
    } catch (e) {
         if (! e instanceof MyError) {
              throw e;
         }
        // ...
    }
    


    Хорошо:
    try {
         // ...
    } catch (e if e instanceof MyError) {
        // ...
    }
    


    3. То, что вы делаете в finally, важнее, чем то, что делаете в catch. Есть что подчистить — надо подчистить.

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

    Ну, что хотел сказать, то сказал. Удачи.
    Ответ написан
    3 комментария
  • Выбрать по координатам наименьшее расстояние

    @Zlobober
    Господи, баянистая же задачка по алгоритмическому программированию.
    Разбили точки на две половины с одинаковым количеством точек вертикальной прямой. Рекурсивно нашли ответ для двух половин — пусть такой минимальный периметр по двум половинам равен P.
    Осталось разобрать треугольники, у которых одна вершина в одной половине, а две других — во второй. Нам достаточно рассматривать только точки на расстоянии <= P / 2 от прямой деления.
    Теперь идём по точкам в этой полосе сверху вниз, поддерживая набор точек, которые находятся по вертикали от нашей на расстоянии не более P / 2. Т. е. идём эдаким плывущим окошком ширины P / 2 — получаются два вида событий — точка попала внутрь окна и точка вышла из окна.
    Если внутри окна не существует треугольника, который периметром меньше P, то в этом окне (навскидку) никак не может быть больше 7 точек (раз окно — прямоугольник P x P / 2). Эти 7 точек можно уже за кубическую сложность перебрать. Иначе там обязательно есть треугольник периметром меньше P, на который мы наткнёмся. Каждый раз, натыкаясь на такой треугольник будем попросту уменьшать P до нового значения.

    Тем самым, получился алгоритм со сложностью, удовлетворяющей оценке T(n) = 2T(n / 2) + O(nlogn), решением которой является O(n*log^2(n))
    Ответ написан
    2 комментария
  • Отловить ошибку js (обычная страница грузит процессор на 100%)?

    taliban
    @taliban
    php программист
    Запускаем фф, качаем плагин firebug , открываем панель фаербаг, заходим на страницу с ошибкой, смотрим на рисунок ниже, нажимаем обведенную кнопку, ждем пока грузится процессор, нажимаем кнопку еще раз, видим список выполняемых функций с небольшой статистикой по каждой.
    Piccy.info - Free Image Hosting
    Ответ написан
    1 комментарий
  • Что выбрать ФИВТ МФТИ или ФУПМ МФТИ?

    @Dolfer
    Однозначно ФУПМ:
    • Факультет, на котором сохранился объём физики, которую всё равно полезно знать для общего развития
    • Объём математики и экономики как у ФИВТ
    • Программирование действительно даётся в основной учебной программе только частично, для более глубокого изучения есть множество технических курсов и учебных центров (NetCracker, Parallels, НИКС), в которых можно получить очень ценный опыт работы над реальными проектами, и доступны эти возможности всем студентам. Поэтому не думаю, что наличие на ФИВТе экзамена по информатике можно ставить по главу угла.
    • В среднем более сильные преподаватели и более строгий приём заданий/экзаменов (это, кстати, очень важно)
    • Отсутствие псевдоинновационно-сколковских дисциплин, таких как «Инновационный практикум»
    • Выбор базовой кафедры делается студентом в конце второго курса (выбираешь и проходишь собеседования), а не комиссией при поступлении, как это делается на ФИВТе. В итоге может получиться так, что на ФИВТе тебя определят на кафедру, где ты учиться не хочешь, а перевестись на другую может быть проблематично
    • Не менее сильные базовые кафедры и соотв. им предприятия (ИСП РАН, Parallels, ИППИ РАН)


    (Сам с ФРТК, но живу со студентом ФУПМа)
    Ответ написан
    5 комментариев
  • Бережем зрение?

    @ALiEN_QWERTY
    20 20 20… каждые 20 минут, 20 секунд смотрю на расстоянии более 20 метров.
    Ответ написан
    2 комментария
  • Какими словами заменить "членомерки" и "кармодрочерство"?

    Dreddik
    @Dreddik
    Оценка уровня главной характеристики
    Усиленное внимание к главной характеристике

    или

    Длинномер
    Кармазависимость
    Ответ написан
    4 комментария
  • Как мотивировать школьников учиться?

    @Piradius
    Закончил в том году физ-мат (настоящий, а не от которого одно название).
    Больше всего запомнился физик наш. Веселый мужик — любил истории из жизни на уроках рассказывать, физика с ним на одном дыхании шла. У нас кстати учебника не было, учились только по его конспектам. И вот как он выходил из ситуации: он выбирал из класса пару учеников (которые сами по себе полнейшие нули, но поддающиеся дрессировке и которых мотивировать просто) и усиленно натаскивал их на олимпиады, конференции, прочее. За ними остальные сами собой подтягивались. Класс полностью сам собой регулировался (очень сильно уважение к нему играло роль), он даже домашнее по желанию всегда спрашивал (ни о каких отрицательных оценках никогда речь не шла). Но вот с гуманитарными классами он не дружил и был очень плохого мнения о них (в плане физики\математики там сплошные инвалиды).
    Главное — любите свой предмет и любите преподавать детям. Мотивация прежде всего должна от вас исходить.
    P.S. С 8мого класса на уроках решали задачи уровня С от ЕГЭшных до международных олимпиадных, куча его учеников занимает места на олимпиадах разного уровня (помню одного, занявшего третье место на международной) и во всяких конференциях. Так что есть еще шансы у Российского образования :-)
    Ответ написан
    2 комментария
  • Координатная сетка и расстояния в хексах?

    Если под расстоянием Вы понимаете минимальное число переходов между двумя смежными гексами, образующих непрерывный путь от одного гекса к другому, то всё очень просто. Ось абсцисс проводим обычным образом, горизонтально, ось ординат — под углом 60° к ней. Расстояние между гексами (x1, y1) и (x2, y2) вычисляем следующим образом:

    • обозначим для простоты δx = x2 − x1 и δy = y2 − y1;
    • при δy ≥ 0 расстояние ρ ((x1, y1), (x2, y2)) =

      • δx + δy, если δx > 0;
      • δy, если − δy ≤ δx ≤ 0;
      • − δx, если δx ≤ − δy.

    • При δy < 0 переставляем точки местами или, что то же самое, переобозначаем δx = − δx и δy = − δy, после чего применяем ту же формулу.
    Ответ написан
    1 комментарий
  • Циклы или рекурсия?

    @sergei-grigorev
    Все зависит от задачки. Порою достаточно простого цикла, с ним и работать проще и нет проблем со стеком. Еще, лучше все таки в цикле решать задачи, где результат следующего полностью зависит от результата предыдущего (например, факториал).

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

    Еще рекурсия будет эффективна, если рекурсивная функция кешируемая, например, она запоминает результат и при следующем запросе просто возвращается кешированный вариант.
    Ответ написан
    2 комментария
  • Насколько сейчас актуальна поддержка браузеров без поддержки Javascript

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Не включаю JS на твиттере. Мне неинтересно, чтобы браузер блокировал мне правую кнопку мыши, чтобы средняя работала как левая и чтобы я не мог открыть нужное мне в отдельной вкладке. Кто они такие, чтобы мешать мне пользоваться интернетом так, как я привык?

    Это так, лирика. Но всё равно — сайт по-хорошему должен работать и без JS. Уж по крайней мере если на сайте, например, опубликованы тексты некоторой тематики — их должен без труда читать любой. Вот какие-нибудь закладки-репосты-комментарии можно считать достаточно вторичными элементами функциональности, чтобы забить на их поддержку.
    Ответ написан
    Комментировать
  • Верстка генеалогического древа

    ntkt
    @ntkt
    Потомственный рыцарь клавиатуры и паяльника
    Я бы сделал тупо в лоб — человек рисуется любым элементом, хоть div, хоть button, но по рассчитываемым в жаваскрипте координатам.

    Наколбасить рекурсивную (причем скорее head-recursive) функцию, скажем, draw_ancestors(). В ней, когда отрисуется нижний, заведомо более населенный уровень, и только тогда уже по полученным снизу координатам уже рассчитывать координаты для текущего и вернуть их в верхний уровень в стеке.

    Как оптимизировать структуру БД и общение с ней в таком случае — отдельный вопрос. Я бы попробовал интереса ради вообще no-sql решение с получением сразу всего дерева в JSON.
    Ответ написан
    1 комментарий