• Validation DSL на Groovy

      Одна из часто встречающихся проблем императивных языков программирования это отсутствие выражений для декларативных структур, таких как, к примеру, древовидные разметки или набор правил для обработки данных. В Groovy эта проблема решена с помощью классов типа Builder и мета-программированием на уровне абстрактного синтаксического дерева.
      Читать дальше →
    • JS tips

        Алгоритм получение результата А && B

        Если операнд A истинный (true, «string», someObj), результатом является B, иначе — А.
        То бишь код:

        if (a) {
        return a.member;
        } else {
        return a;
        }


        Может быть заменен на более компактный:

        return a && a.member;

        Алгоритм получение результата А || B

        Если операнд A истинный, результатом является A, иначе — B.
        Эта особенность может быть использована для присвоения дефолтных значений переменным:
        last = input || default_value;

        Создание объекта на лету

        obj = {fieldName: "a"}; — объект с полем fieldName
      • Пример оптимизации в JVM

          Набрел на интересный пример оптимизации при динамической компиляции
          public class StupidMathTest {
            public interface Operator {
              public double operate(double d);
            }

            public static class SimpleAdder implements Operator {
              public double operate(double d) {
                return d + 1.0;
              }
            }
          Читать дальше →
        • Svn. Откат изменений на сервере

            Бывает накомитешь какашек — потом жалеешь. Вот пилюля для отката изменений на сервере:

            svn diff -r 73:68 http://my.repository.com/my/project/trunk

            73 — наша текущая ревизия
            68 — куда хотим откатиться

            Смотрим дейстивтельно ли только мы вносили изменения файл. Если нет, то придется откатыватся вручную — через редактирования проблемных участков с последующим комитом. Если все ок:

            svn merge --dry-run -r 73:68 http://my.repository.com/my/project/trunk/

            Смотрим что будет мержиться, если нет никаких конфликтов идем дальше:

            svn merge -r 73:68 http://my.repository.com/my/project/trunk/

            svn merge просматривает измениния между 73 и 68 ревизией и применяет их к вашей рабочей копии

            svn commit -m «Reverted to revision 68.»

            Пушистых Вам багов, господа!