• Выбор по железу для веб программиста?

    lamer350
    @lamer350
    กำลังสูงสุด
    За i7 точно не стоит переплачивать, для таких задач i5 с головой хватит. И кто бы что не говорил, тяжелее обновить и тд - вы никогда не нагрузите его на 100% при такой работе, ИМХО!
    Больше стоит обратить внимание на SSD, лучше взять M2 (что важно учитывать при выборе матери). Оперативки лучше ставить 32 (винда, виртуалка и java - 16 уже тесновато, а еще ж наверняка будет хром который тонами пожерает оперативку хD).
    Ответ написан
    Комментировать
  • Выбор по железу для веб программиста?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    За i7 - есть. Проц в сборке практически никогда не меняется, если только не горит. А добавить памяти проще, нежели сменить проц. Поэтому берем i7 и 16 гиг (но планки планировать так, чтобы иметь в виду расширение до 32!).
    Ответ написан
    Комментировать
  • Выбор по железу для веб программиста?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    32 гб лишними не будут, особенно учитывая VirtualBox. С другой стороны, добавить оперативки проще, чем заменить процессор, поэтому для экономии можно взять 16гб и добавить оперативки чуть позже.

    А процессор - решайте сами. Работать все будет, а "достаточное быстродействие" - оценка субъективная. Но вообще для виртуалок и эмуляторов быстрый процессор может быть значителен.
    Ответ написан
    Комментировать
  • Временные интервалы в POSTGRESQL?

    @Legushka
    generate_series(начальная дата интервала, конечная дата интервала, интервал '15 минут')t
    вам в помощь)

    можно джоинить к вашей таблице и так
    select t.tt, r.*
    from reservation r
    left join lateral generate_series(lower(r.during), upper(r.during), interval '15 min')t(tt) on true
    Ответ написан
    3 комментария
  • Tsrange вывод временных интервалов?

    Kwisatz
    @Kwisatz
    Больше web-приложений, хороших и разных
    Оно?
    with
      all_ranges as (
        SELECT tsrange(generate_series, 
                       generate_series + interval '30' minute, 
                       '()') as range 
        FROM generate_series(current_date::timestamp + interval '9' hour,
                             current_date::timestamp + interval '18' hour, 
                             '30 minutes'))      
    select rooms.id as room_id,
           concat(to_char(lower(ar.range), 'HH24:MI'), 
                  ' - ', 
                  to_char(upper(ar.range), 'HH24:MI')) as timerange
    from all_ranges as ar
    cross join rooms 
    where not exists (select 1 
                      from reservations as rt
                      where rooms.id=rt.room_id and 
                            ar.range && rt.occurrence)
    order by 1;

    SQL Fiddle
    Ответ написан
    3 комментария
  • Tsrange вывод временных интервалов?

    @ponaehal
    В принципе можно решить и "в лоб" но лень...

    В порядке бреда:
    Заполнить таблицу временными минимальными доступными временными интервалами в промежутке с 9 до 18 (создать расписание).
    В вашем случае это будет 18 тридцатиминутных интервалов (всего 18 строк).
    Далее, например, в случае резервирования на час, резервировал бы сразу 2 интервала.

    А потом все сводится к банальному UNION ALL
    SELECT <выводим интервал времени если при переводе часов в минуты остаток от деления на 30 равен 0>
    UNION ALL
    SELECT <выводим интервал времени если при переводе часов в минуты остаток от деления на 45 равен 0>
    UNION ALL
    SELECT <выводим интервал времени если при переводе часов в минуты остаток от деления на 60 равен 0>
    UNION ALL
    SELECT <выводим интервал времени если при переводе часов в минуты остаток от деления на 90 равен 0>
    Ответ написан
    1 комментарий
  • SQL вычисляемый столбец?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Если в результате запроса есть столбец, то из ResultSet его можно получить и использовать как заблагорассудится.
    Ответ написан
    2 комментария
  • В чем отличия redirect от requestDispatcher?

    zolt85
    @zolt85
    Программист
    И так, отличия.
    Forward:
    • выполняется непосредственно сервлетом
    • браузер абсолютно не в курсе, что происходит, и его исходный URL не меняется
    • перезагрузка страницы в браузере инициирует запрос на оригинальный URL


    Redirect:
    • состоит из двух шагов, в которых Ваше приложение говорит браузеру получить контент с другого URL, отличного от оригинального URL
    • перезагрузка страницы не инициирует запрос по оригинальному URL, а пойдет по URL из redirect
    • немного медленнее, т.к. приходится делать 2 запроса вместо одного
    • данные оригинального запроса (первого), будут недоступны второму запросу


    Проще говоря, через forward вы можете вернуть контент с другого ресурса, другую jsp. При этом исходный URL не изменится.
    Ответ написан
    4 комментария
  • Как оформить ответ на Объект XMLHttpRequest?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    private ResultSet fetchRows() {
        ...
    }
    
    private JSONObject toJson(ResultSet rows) {
        ...
    }
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        try (PrintWriter out = response.getWriter()) {
            out.append(toJson(fetchRows()));
        }
    }

    <div id="output"></div>
    <button id="button">Нажми меня</button>

    var output = document.getElementById('output');
    var button = document.getElementById('button');
    
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState != 4) return;
    
        if (xhr.status == 200) {
            data = JSON.parse(xhr.responseText);
            response = ['<table>', '<tr><th>Имя</th><th>Фамилия</th></tr>'];
            for (var x = 0; x < data.persons.length; x++) {
                response.push('<tr>');
                response.push('<td>' + data.persons[x].firstName + '</td>');
                response.push('<td>' + data.persons[x].lastName + '</td>');
                response.push('</tr>');
            }
            response.push('</table>');
            output.innerHTML = response.join('');
        }
        else {
            alert('Ошибка! ' + xhr.statusText);
        }
        
        button.innerHTML = 'Нажми меня';
        button.disabled = false;
    };
    
    button.addEventListener('click', function(event) {
        this.innerHTML = 'Загружаю...';
        this.disabled = true;
        
        xhr.open('POST', '/some/servlet/url', true);
        xhr.send();
    });
    Ответ написан
    3 комментария
  • Хранение времени в БД?

    @res2001
    Developer, ex-admin
    Храните в типе datetime начало и конец события, а уж интервалы обеспечите логикой. И не надо хранить не назначенные интервалы - только созданные события.
    Ответ написан
    2 комментария
  • Хранение времени в БД?

    rpsv
    @rpsv
    делай либо хорошо, либо никак
    Немного странный формат хранения информации.
    Если это ежедневник, то он должен хранить "начало" и "окончание" события.
    Или что подразумевается под интервалами?
    ---
    Делить на 2 таблицы - не стоит, запаритесь с синхронизацией.
    Лучше/правильней выделить 1 поле-флаг, которое будет хранить статус "занято/не занято"
    Ответ написан
    2 комментария
  • Запрос периода времени в течение дня?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    SELECT CONCAT(`h`.`hour`, ':', `m`.`minute`, ':00')
    FROM (
      SELECT '09' AS `hour`
      UNION SELECT '10'
      UNION SELECT '11'
      UNION SELECT '12'
      UNION SELECT '13'
      UNION SELECT '14'
      UNION SELECT '15'
      UNION SELECT '16'
      UNION SELECT '17'
    ) AS `h`
    JOIN (
      SELECT '00' AS `minute`
      UNION SELECT '15'
      UNION SELECT '30'
      UNION SELECT '45'
    ) AS `m`
    Ответ написан
    4 комментария
  • Запрос периода времени в течение дня?

    @alexalexes
    Если вам нужно дать номер интервала для каждой записи, то вот запрос.
    Потом используйте любую группировку и аналитику для расширения запроса, как вам удобно.
    SELECT t.event_date,             -- атрибут таблицы типа datetime, для которого определяем интервал, выведен для того, чтобы наблюдать за процессом отладки
    case                                                                         -- SQL-конструкция вида "case  when ... then ... else ... end", с помощью которой можно выводить не только конкретное значение атрибута, но и задавать условие, при котором конечное значение  результата будет вычисляться по-разному в пределах одной выбранной записи.
      when TIME_TO_SEC(t.event_date) >= inter.begin AND TIME_TO_SEC(t.event_date) <= inter.end                           -- если t.event_date, выраженное в суточных секундах, находится в отрезке [inter.begin,  inter.end], также выраженных в суточных секундах,...
      then floor((TIME_TO_SEC(t.event_date) - inter.begin) / inter.width)           -- ... то вычисляем количество полных  интервалов
      else null         -- иначе, если время не попадает в период отслеживания, то выводим "пусто", чтобы явно указать, что значение не находится в интересуемом периоде
    end as full_interval_number      -- кол-во прошедших полных интервалов, начинается с 0
    FROM table t,                     -- ваша таблица
        (select TIME_TO_SEC('09:00:00') as begin,            -- начало дневного периода
                TIME_TO_SEC('18:00:00') as end,                 -- конец дневного периода
                TIME_TO_SEC('00:15:00') as width                -- ширина интервала
         ) inter                    -- параметрический подзапрос, все настраиваемые константы в одном месте - удобно при отладке
    Ответ написан
  • HTTP Status 500 cannot be cast to?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    user = (User) dao.getAllUsersM(userId);
    Очевидно, что getAllUsersM возвращает список юзеров.
    Ответ написан
    5 комментариев
  • Карта Goggle map?

    А не проще ли в jsp передать уже готовый массив?
    Ответ написан
    Комментировать
  • IDEA и Tomcat Address localhost:8080 is already in us?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    XAMP пишет же, что 8080 порт занят.
    Вообще-то idea умеет сама запускать сервер tomcat и деплоить туда приложение. Нужно только указать папку с tomcat.
    Ответ написан
    5 комментариев
  • Mysql таблица с датой и часами?

    OKyJIucT
    @OKyJIucT
    Sunshine reggae
    Возможно, как то так
    DECLARE loop_date DATETIME; // изменяемая дата в цикле
    DECLARE end_date DATETIME; // конечная дата
    
    SET loop_date = DATE_ADD(end_date, INTERVAL -90 DAY);
    
    WHILE DATE(loop_date) <= DATE(end_date) DO
    
    INSERT INTO `times` (`id`, `date`, `time`) VALUES (NULL, loop_date, '08:00');
    ...
    INSERT INTO `times` (`id`, `date`, `time`) VALUES (NULL, loop_date, '17:00');
    
    SET loop_date = DATE_ADD(loop_date, INTERVAL 1 DAY);
    
    END WHILE
    Ответ написан
    2 комментария
  • Какой выбрать Java Web UI framework?

    timych
    @timych
    Поддерживаю насчет GWT . Возможности огромные . Задизайнить тоже не проблема. Также можно использовать что - то типа gwt - bootstrap с кастомными темами.
    Ответ написан
    Комментировать
  • Какой выбрать Java Web UI framework?

    @bobzer
    Java EE Developer
    GWT - один из лучших вариантов для такой задачи. Если у вас постоянные пользователи, то сгенерированный GWT-скрипт будет грузиться в браузер единожды, и в дальнейшем весь интерфейс будет рисоваться в браузере, без обращений к серверу. Обращения к серверу понадобятся только для получения/передачи чистых данных, без html/xml оберток, и делаться это будет только тогда, когда это действительно требуется вашей логике, т.е., далеко не каждое действие пользователя будет вызывать обращение к серверу. К тому же, можно кешировать часто используемые данные на клиенте, снижая трафик и нагрузку на сервер. Еще один плюс - очень много логики (например, сложный форматно-логический контроль) можно выполнять на клиенте, без обращений к серверу.

    Насчет дизайна: в GWT есть минимальный набор компонентов, с помощью которого можно "нарисовать" динамический интерфейс любой сложности. Если ваша цель - не завлечь на сайт пользователей красивыми/необычными рюшечками, а создать функциональное рабочее место, то базовых компонентов должно хватить.

    Кстати, тот же Vaadin работает на GWT. Он дополняет его своими компонентами, но убивает на корню один из главных плюсов GWT - высокую степень независимости от сервера во время действий пользователя.

    Насчет нагрузки: 1000 человек, постоянно работающих в приложении, это много. Готовьте мощные сервера под СУБД и под сервер приложений, плюс держите в уме возможность развертывания кластера для распределения нагрузки.

    Если Вы - Java-программист, то разрабатывать под GWT будет приятно, а точнее - как обычно. Например, процесс разработки под JSF - то ещё "удовольствие", GWT в этом плане гораздо лучше.
    Ответ написан
    Комментировать
  • Алгоритм ограничение количества записей в БД каждым пользователем в течение одного дня?

    @azShoo
    Я бы сказал, что такое ограничение - часть бизнес логики, и должно реализовываться на уровне приложения.
    Т.е. на уровне интерфейса с дополнительной валидацией на server-side.
    На уровне базы это ограничивать - попахивает безумием.
    Ответ написан
    Комментировать