• Что изучить первым и выгоднее Angular, Angular 2 или React?

    feligz
    @feligz
    JS/TS developer
    Лихо вы TypeScript в минусы записали ) Статическая типизация сильно повысит надежность вашего кода, сделает его более структурированным и понятным. Многие ошибки будут вываливаться уже на стадии компиляции. Так что TS это большой плюсище.
    Ответ написан
    Комментировать
  • Как составить регулярное выражение исходя из следующих условий?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    В ситуациях, когда нужно изолировать фрагменты текста от обработки, проще всего перед обработкой их маскировать. Заменить на что-нибудь, что точно не попадет под обработку. А после обработки вернуть назад.

    this.replaceStandardHtmlEntities = (text) => {
      // маскируем ссылки
      text = text.replace(/\<a([^\>]*)\>/g, String.fromCharCode(1) + 'a$1' + String.fromCharCode(1));
      text = text.replace(/\<\/a\>/g, String.fromCharCode(1) + '/a' + String.fromCharCode(1));
    
      // остальной код без изменений
      let regular = /( {2}|&|'|<|>|\\n)/g, translate = {
        '  ': '&nbsp',
        '&': '&amp',
        '\'': '&quot',
        '<': '&lt',
        '>': '&gt',
        '\\n': '<br>'
      };
    
      // результат замены передаем в переменную
      let result = (text.replace(regular, (match, entity) => {
        return translate[entity];
      }));
      
      // возвращаем ссылки обратно
      result = result.replace(/\x01a([^\x01]*)\x01/g, '<a$1>');
      result = result.replace(/\x01\/a\x01/g, '</a>');
      
      return result;
    };

    Смотреть в JSFiddle
    Ответ написан
    5 комментариев
  • Angular2: JavaScript или TypeScript?

    @sanex3339
    TypeScript, тут даже думать нечего.
    Ответ написан
    Комментировать
  • Оптимален ли код ниже для данной задачи?

    @vayho
    Category parentCategory = entityManager.find(Category.class, 1);

    Здесь вероятно вместо 1 нужно поставить parentId.

    И ответ на ваш вопрос: вместо ручного инкремента largestIndex вам нужно использовать id последней добавленной записи.

    Кстати раз уж вы используете hibernate то посмотрите в сторону Closure Table, этот паттерн как мне кажется более органично смотрится с hibernate.

    Вот пример кода с id(обязательно обернуть в транзакцию):
    public ResponseMessage addCategory(List<Category> newCategoryList, int parentId) {
        Category parentCategory = parentId == 0 ? null : entityManager.find(Category.class, parentId);
    
        for (Category category : newCategoryList) {
            entityManager.persist(category);
            entityManager.flush();
            if (parentCategory != null) {
                category.setPath(parentCategory.getPath() + "." + category.getId());
                category.setParent(parentCategory);
            } else {
                category.setPath(String.valueOf(category.getId()));
            }
        }
        return new ResponseMessage(true, " ");
    }
    Ответ написан
    8 комментариев
  • Какой язык необходимо учить чтобы создать сервис по сложности сравнимый с Google.Календарь (или какого специалиста нанять)?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Каламбур!
    Ок. Скажу как есть: только реальное положение дел.

    Меня интересует какой язык мне нужен для этого?
    любой.

    Искал ответ на этот вопрос и как понимаю это Java, правильно?
    Хотите Java - пишите на ней.

    Что еще необходимо для реализации?
    Знания интернет-технологий

    Если делать руками сторонних специалистов, хочется знать реальную сложность данного проекта и сроки реализации ее профессионалом?
    Нет. Не хочется - я и так знаю)

    Хочется знать поподробнее так как сам не технический специалист.
    Эта опция для Вас - в ближайшие 3 года недоступна.

    Итог: Вам нужно или познавать, или брать доверенное IT-лицо в штат или заключать с ним договор и реализовывать проект.
    Ответ написан
    Комментировать
  • Почему всегда возвращает TRUE?

    @medin84
    software developer
    Не знаю ангуляр.
    Но если вы ожидаете выполнение .error, сервер должен вернуть код http ошибки.
    просто false тоже значение и не означает что это ошибка
    Ответ написан
    Комментировать
  • Как решить проблему с данной архитектурой Базы данных?

    zolt85
    @zolt85
    Программист
    Есть такая модель, называется EAV модель. Если кратко, то в ней разделяется сущность - атрибут - значение, т.е. список сущностей и список атрибутов независимы. Это позволяет делать "переиспользуемые" атрибуты, если хотите. Это что касается плюсов данной модели. Из минусов могу отметить сложность запросов к бд для выборки конкретных данных, ну и скорость выполнения этих запросов немного ниже. А так вполне жизнеспособная модель. Magento, например, использует ее в своих e-commerce продуктах.
    Ответ написан
    Комментировать
  • Как решить проблему с данной архитектурой Базы данных?

    @nirvimel
    1. Если characteristic_value привязано к subject_model, characteristic_name (почему бы не назваьть эту таблицу просто characteristics, ведь там может храниться еще что-то кроме имени) можно не привязывать к subject. Этим достигается независимость характеристик от субъекта и отсутствие дублей среди характеристик.
    2. Что-бы при назначении значения характеристики модели можно было производить проверку на то, возможна ли вообще такая характеристика для субъекта, нужно ввести кросс-таблицу subject_characteristics (характеристики субъектов), которая бы имела внешние ключи к subject и characteristic_name, то есть many-to-many зависимость между ними, через отдельную кросс-таблицу.
    3. У вас всего два фиксированных уровня иерархии. Что, если на практике потребуется больше? Вы, кажется, стремитесь создать гибкую/универсальную систему. Тогда вам нужна динамическая иерархия категорий.
    4. Если view служит для представления, то внешний ключ к нему в characrteristic_name не нужен, так как логически характеристика, как единица учета, не подчинена представлению данных. Опять же лучше ввести many-to-many зависимость между характеристиками и представлениями, реализованную через кросс-таблицу. Подсистема представлений при этом остается полностью независимой ото основной структуры данных (ее можно убрать не нарушая структуру).


    P.S.: Интересно, в каком это смысле дрель (инструмент) может быть субъектом.
    Ответ написан
    3 комментария
  • Что за шаблон Декоратор, и зачем он нужен?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    То что вы реализовали - не декоратор. Декоратор это интерфейсы а не абстрактные классы.

    суть шаблона Декоратор


    Декоратор, это такой шаблон, при котором мы "расширяем" поведение объекта без изменения оного. При этом важная состовляющая - интерфейс объекта не меняется.

    У декорации есть значительное преимущество перед наследованием, а именно возможность делать бесконечные цепочки декораторов с возможностью произвольно менять их местами без внесения изменений непосредственно в код.

    К примеру при использовании контейнера зависимостей, мы можем обернуть какой-то сервис в декоратор временно, и в декораторе логировать аргументы и результат выполнения методов. Скажем это нужно только для быстрого дебага. Делаем быстренько декоратор, подсовываем его вместо настоящей реализации (обычно это одна строчка в di-конфиге) и вуаля. Мы не вносили изменений в код а стало быть не могли ничего сломать случайно. История изменений будет выглядеть красиво. Да и тестировать такие вещи намного проще.
    Ответ написан
    Комментировать
  • Почему некорректно работает роутинг в Angular 2?

    Делайте по-правильному, через /admin/... . Если есть трудности, то почитайте этот ответ с SO.
    В самой документации ангуляра есть пример
    Ответ написан
    1 комментарий
  • Как разделить запросы к API сервера и к его статическим ресурсам?

    @Braidner
    Делал так.
    Возвращаю статику:
    @RequestMapping(path = {"film/*", "serial/*"}, method = RequestMethod.GET)
        public String index() {
            return "forward:/index.html";
        }

    Обращаюсь к rest:
    @RestController
    @RequestMapping("/rest/content")
    public class ContentController {
    
        @RequestMapping(method = RequestMethod.GET)
        public HttpStatus searchContent(@Param("name") String name) {
            System.out.println("search for content with param: " + name);
            return HttpStatus.ACCEPTED;
        }
    
        @RequestMapping(method = RequestMethod.POST)
        public HttpStatus uploadContent(@RequestBody Content content) {
            System.out.println("upload content");
            return upload != null ? HttpStatus.CREATED : HttpStatus.BAD_REQUEST;
        }
    }
    Ответ написан
    1 комментарий
  • Как настроить асинхронный роутинг Angular2+Webpack?

    require('es6-promise!./about/about')('About')

    что же это за чудо такое?

    Попробуем разобраться. Заходим на документацию к вебпаку тык.

    Т.е. эта конструкция require('es6-promise!./about/about') является вызовом загрузки модуля с помощью переопределенного лоадера, а не просто лоадера, который прописан в webpack.config.js этой сборки
    loaders: [
      // See: https://github.com/s-panferov/awesome-typescript-loader
      {test: /\.ts$/, loader: 'awesome-typescript-loader', exclude: [/\.(spec|e2e)\.ts$/]},


    Идем в исходники es6-promise-loader, который как раз у нас является одной из devDependencies сборки. Там можно маленько посмеяться над комментариями).
    Смотрим, что тут, ага - это pitch лоадер, который делает обертку es6-promise. А внутри метод из вебпака ensure, который позволяет отделять chunk и загружать его динамически. В итоге получается примерно такой модуль (пути я порезал маленько)

    974ad11097cf4346b2934995b84f22e8.jpg

    Т.е. require('es6-promise!./about/about') грубо говоря превращается в функцию с параметром namespace. И вобщем когда придет время сдерживать своё обещание и возвращать модуль, то сработает следующее выражение
    require("......app\\about\\about.ts")[namespace]
    Require вернет нам как раз наш exports объект, который мы возвращаем в about.ts
    export class About {
    Смотрим на практике
    967e7cf5f014470a9c5e7cb028e6093e.jpg
    А к свойству объекта мы уж по namespace сможем легко обратиться. Именно поэтому там 'About'.

    Если напишете about, то не видать вам
    ngOnInit() {
      console.log('hello `About` component');
    }
    из компонента
    Ответ написан
    7 комментариев
  • Как настроить роутинг родитель+потомок в Angular 2?

    @bromzh
    Drugs-driven development
    1) Чтобы AsyncRouter не грузил файлы, в параметре loader нужно не компонент резолвить, а использовать какой-нибудь загрузчик модулей ведь если ты в коде импортируешь компонент Tables, то он уже будет включён в итоговую сборку, так что нужно импортировать не напрямую из ts, а через загрузчики, которые умеют работать в браузерной среде. Например, System.import из SystemJS. Или Вебпаковский. Пример SystemJS тут, а пример для вебпака тут.

    2) Сжимается всё например через UglifyJS, плагины для многих сборщиков есть. Но лучше сразу перейди на вебпак. Там есть классные оптимизаторы в комплекте. Например, dedupe-плагин удаляет дубликаты кода, если они встретятся, а uglify вебпаковский ещё и удаляет неиспользуемый код (он анализирует подключённые модули и вырезает неиспользуемые). У меня после всех оптимизаций чистый helloworld на ангуляре занимает 500кб и ещё 100кб полифиллы.
    Ответ написан
    2 комментария
  • Почему не работает @Autowired?

    @aol-nnov
    @Autowired
    private UserService service;


    ведь вся прелесть DI в том, что ты не указываешь, с какой конкретной имплементацией связывать..

    И там же явно сказано в конце этой нескончаемой портянки:
    Can not set com.springapp.mvc.DAO.UserDaoImpl field com.springapp.mvc.Service.UserServiceImpl.userDaoImpl to com.sun.proxy.$Proxy37
    Ответ написан
    6 комментариев
  • Почему не проходит транзакция Spring+Hibernate(JPA)?

    zolt85
    @zolt85
    Программист
    В случае insert я бы посоветовал использовать метод persist вместо merge
    Ответ написан
    6 комментариев
  • Разъяснение в конфигурации Spring+Hibernate(JPA). Помощь в настройке транзакций. Почему они не проходят?

    zolt85
    @zolt85
    Программист
    Я вам не скажу за всю Одессу, но у нас в Сибири считается, что
    1) @GeneratedValue(strategy = GenerationType.TABLE) - говорит, что нужно использовать таблицу для генерации PK. Не таблицу, на которую маппится сущность, а просто таблицу. Отсюда и возникает таблица hibernate_sequences. И возникает она из-за hibernate.hbm2ddl.auto=update.
    2) Про длину колонки, это опять из-за hibernate.hbm2ddl.auto=update.
    3) @Transaction говорит, что метод будет транзакционным. Что это значит. Это значит, что вызов метода будет обернут в proxy объект, у которого будет сессия, и при вызове всех вложенных методов эта сессия будет одна и та же, и при завершении метода транзакция закроется.
    4) propagation = Propagation.REQUIRED - это означает, что наличие сессии при вызове метода обязательно, если ее нету, то hibernate попытается ее создать.
    5) Откат транзакции (rollbak грубо говоря) происходит, по-умолчанию, только в случае возникновения RuntimeException, как этим управлять написано в документации к hibernate.
    6) значение в аннотации @Repository("personDao") задает имя бина.

    Теперь по классике надо что-то по советовать. Советую Вам не использовать hibernate.hbm2ddl.auto=update. Лучше посмотрите в сторону liquibase для управления состоянием БД.
    И почитайте вводные туториалы по Spring, разберитесь как работает IoC в Spring, как работает AOP в Spring, как Spring управляет бинами. И тогда Вам станет все понятно.

    Дерзайте, удачи Вам!
    Ответ написан
    1 комментарий
  • Что означает listener-class в web.xml и какую роль играет contextConfigLocation?

    angry_cellophane
    @angry_cellophane
    И лисенер, и диспетчер поднимают ApplicationContext. Сначала поднимает лисенер, далее диспатчер поднимает дочерний контекст. Таким образом в бинах, подгружаемых диспатчером, можно делать референсы на бины, загружаемые лисенером.
    Главный вопрос - зачем?
    Для секьюрити. В лисенере прописывается спринг секьюрити конфигурация, а в диспатчере бины из spring mvc. Т.о. бины из приложения могут использовать бины для секьюрити, но не наоборот.
    Подробнее можно почитать в какой-нибудь книге по спринг секьюрити, например Spring Security 3.1.
    Ответ написан
    1 комментарий