• Как включить и выключить автозапуска программы при старте системы?

    tonyslark
    @tonyslark
    junior system administrator
    Для конкретного пользователя можно создавать параметр с полным путем к вашей программе в ветке HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
    Проблем с правами быть не должно.
    Ответ написан
    Комментировать
  • Как эмулировать функционал из emacs в vim?

    sharlatan
    @sharlatan
    IT engineer, warehouse operative
    Привет,

    1.0 NERDTree, :Explorer
    Прямого эквивалента не встречал. Много работал с Vim cейчас только на серверах удаленных использую. На домашней машине стоит Emacs уже пол года, назад дороги к Vim уже не вижу. То что ты описал это Dired-mode очень гибкий и мощный модуль. Схожие плагины для Vim думаю NERDTree и File Explorer

    2.0 Ссылки
    [2.1] https://www.gnu.org/software/emacs/manual/html_nod...
    [2.2] https://www.emacswiki.org/emacs/DiredMode
    [2.3] https://www.emacswiki.org/emacs/Evil
    [2.4] spacemacs.org
    [2.5] https://github.com/scrooloose/nerdtree
    [2.6] vim.wikia.com/wiki/File_explorer
    Ответ написан
    2 комментария
  • Как понять странный дженерик?

    zolt85
    @zolt85
    Программист
    используется для того, чтоб за декларировать, что метод является generic-методом, перечисленные типы будут использоваться в сигнатуре, либо в теле метода.
    Ответ написан
    Комментировать
  • Как понять странный дженерик?

    Acuna
    @Acuna
    Заполнил свой профиль
    Явление называется тип данных. В данном случае эта функция возвращает хэш-таблицу с парами "ключ-значение": ключи - это "I", значения "O". Странность здесь в том, что это просто хэш-таблица, поэтому Вы можете обратиться к ее элементу вызвав ее ключ типа I, а не просто по номеру элемента как в обычном массиве.
    Ответ написан
    2 комментария
  • Как организовать обновление части страницы в jsp?

    @sirs
    return "user/userTariffs"; Означает отправить user на эту страницу, Вы делаете ajax запрос и контроллер ни на какую страницу юзера не отправляет. Для того, чтобы информация обновилась на странице, как Вы хотите, Вам нужно эту информацию передать из контроллера на сервере в браузер клиента в респонсе, аннотация @ResponseBody и на клиенте использую js обновить html страницу.
    Передать в респонсе можно кусок html, xml, json, можно просто передать String, главное, чтобы js код, который будет обрабатывать респонс понимал чего ему ожидать от сервера.
    Самый просто вариант для вашего случая:
    @RequestMapping(value = "/userChangeTariff", method = RequestMethod.POST)
    @ResponseBody
        public Integer changeTariff(HttpServletRequest req,
                                   @RequestParam(value = "sum") Integer sum) {
            final Integer newSum = new Integer(sum+1);
            req.getSession().setAttribute("userPayment", );
            return newSum;
        }


    На клиенте сделать:
    <div class="popover-content">
                        <div class="list-group">
                            <a href="userTariffs" class="list-group-item">
                                <h4 class="list-group-item-heading text-overflow">
                                    <i class="fa fa-fw fa-envelope"></i> My scope
                                </h4>
                                <p class="list-group-item-text text-overflow">I spend <span id="user_payment_sum">${userPayment}</span> RUB per month</p>
                            </a>
                        </div>
                        <div style="padding:10px"><a class="btn btn-success btn-block" href="userTariffs">Show me
                            more...</a></div>
                    </div>


    function popBox() {
                 x = confirm('Are you sure? ');
                   if (x == true) {
                  var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState == XMLHttpRequest.DONE) {
            alert(xhr.responseText);  //TODO test alert
    document.getElementById('user_payment_sum').innerHTML =xhr.responseText;
        }
    }
                  xhr.open("POST", "userChangeTariff?sum=" + par1, false);
                 xhr.send();


    Обратите внимание, что я добавил <span id="user_payment_sum">, в которой лежат те данные, которые мы хотим динамически менять по ajax запросу на сервер и секцию if (xhr.readyState == XMLHttpRequest.DONE) {, которая ожидает ответ и выполняет некие действия, когда приходит респонс.

    P. S. Мой совет Вам учить основы: как работаю клиент-серверные приложения, как работет servlet, jsp, session, ajax и только потом браться за фреймворки. Просто делая по образцам из интернета - не научитесь, однажды будет такая задача, примера который в интернете не будет попросту.
    P. P. S. Код не запускал, написал просто по памяти, возможно какие-то ошибки.
    Ответ написан
    1 комментарий
  • Как в restful приложении получить объект?

    @sirs
    Попробуйте сделать на спринговом RestTemplate как тут описано. Пример как получить List<User> usersтут

    P. S.
    String output = null;
            String URLstring = "http://localhost:8080/getRestInfo?contract=base";
            URL url = new URL(URLstring);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Accept", "application/json");
            conn.setRequestProperty("Authorization", "Basic " +
                    new String(new Base64().encodeBase64("b@b.ru:12345".getBytes())));
            if (conn.getResponseCode() != 200) {
                System.out.println("Failed : HTTP error code : "
                        + conn.getResponseCode());
                System.exit(1);
            }
            BufferedReader br = new BufferedReader(new InputStreamReader(
                    (conn.getInputStream())));
    
            output = br.readLine();
    
            /**
             * Здесь в output переменной у Вас в output лежит json, чтобы преобразовать его в java бины нужен парсер (это называется десериализовать), наиболее популярные - Gson или Jackson
             */
            Gson gson = new Gson();
            Type userListType = new TypeToken<ArrayList<User>>() {}.getType();
            List<User> users = gson.fromJson(output, userListType);
    
            conn.disconnect();
            System.out.println(output);
    Ответ написан
    1 комментарий
  • Почему не работает защита от межсайтового скриптинга в spring security?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Всё правильно, вы в ajax-запросе не передаёте csrf-token, соответственно, он выглядит как злономеренный и не обрабатывается. Про это есть в документации.

    <html>
        <head>
            <meta name="_csrf" content="${_csrf.token}"/>
            <meta name="_csrf_header" content="${_csrf.headerName}"/>
            ...
        </head>
        ...
    </html>


    var csrfHeaderName = "X-CSRF-TOKEN";
    var csrfTokenValue;
    
    var metaTags = document.getElementsByTagName('meta'); 
    for(var i = 0; i < metaTags.length; i++) {
        var metaTagName = metaTags[i].getAttribute("name");
        if(metaTagName === "_csrf_header")
            csrfHeaderName = metaTags[i].getAttribute("content");
        if(metaTagName === "_csrf")
            csrfTokenValue = metaTags[i].getAttribute("content");
    }
    
    ...
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "userChangeTariff?tariffId=" + num1 + "&contractNumber=" + num2, false);
    xhr.setRequestHeader(csrfHeaderName, csrfTokenValue);
    xhr.send();
    Ответ написан
    1 комментарий
  • Почему контроллер не изменяет атрибутов?

    @void01
    он не должен ничего поменять на странице, он должен в ответе прислать тебе новое тело страницы с YES!
    посмотри респонс в нетворк таб дев тулза

    то, что ты видишь изначально - 1 страница
    то, что получаешь результатом аякс запроса - совсем другая, они никак не связаны.
    все что ты можешь сделать - это:
    1. отвечать например json-ом и по результатам аякса менять на странице содержимое определенных блоков...
    щас пример набросаю

    @RequestMapping(value = "/adminNewClient", method = RequestMethod.DELETE)
        public @ResponseBody Map adminNewClientPost(HttpServletResponse response, HttpServletRequest request,
                                         @RequestParam(value = "name") String name,
                                         @RequestParam(value = "surName") String secondName,
                                         @RequestParam(value = "birthday") String birthdayDate,
                                         @RequestParam(value = "passport") String passport,
                                         @RequestParam(value = "adress") String adress,
                                         @RequestParam(value = "email") String eMail,
                                         @RequestParam(value = "number") String number) {
         LinkedHashMap result = new LinkedHashMap();
         result.put("nameStat","YES!");
         return result;
      }

    в JSP
    <tr>
      <td><input id="surName" type="text" class="form-control" placeholder="Surname"></td>
       <td><span style="color:blue;" id="nameStat">${nameStat}</span></td>
     </tr>

    в JS
    function popBox() {
                                x = confirm('Are you sure? ');
                                if (x == true) {
                                    var xhr = new XMLHttpRequest();
    xhr.onload = function(){
    var jsonResponse = JSON.parse(this.responseText);
    for(var index in jsonResponse) { 
       if (jsonResponse.hasOwnProperty(index)) {
          document.getElementById(index).innerText = jsonResponse[index];
       }
    }
    };
                                    xhr.open("DELETE", "adminNewClient?name=" + name + "&surName=" + surName
                                            + "&birthday=" + birthday + "&passport=" + passport
                                            + "&adress=" + adress + "&email=" + email + "&number=" + number, false);
                                    xhr.send();
    
                                }
                            }


    соответственно на странице ты можешь иметь сколько угодно элементов которые тебя надо динамически поменять, просто добавь их в респонс result.put("тут айди хтмл элемента","тут новый текст");
    Ответ написан
  • Каким образом связать spring и ajax?

    @sirs
    В spring mvc вернуть статус можно несколькими путями, если статус нужно возвращать один и тот все время, то подходит аннотация @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR), просто повесить на метод в контроллере.
    В Вашем случае такой вариант не подходит (если я верно понимаю). Вам нужно сделать так:

    public ResponseEntity<?> userNumberOperationsDelete(HttpServletRequest req, HttpServletResponse resp, Locale locale, Model model,
                                                 @RequestParam(value = "number") String number,
                                                 @RequestParam(value = "status") String status) {
    ...
     } else {
                    return new ResponseEntity<>(errorMessage, HttpStatus.INTERNAL_SERVER_ERROR);
                }
            }
        return new ResponseEntity<>(HttpStatus.OK);
    }


    Не знаю, где Вы нашли статус 530, но spring его не знает и я Вам очень не советую использовать кастомные статусы, когда работаете с фреймворками. Возьмите INTERNAL_SERVER_ERROR статус.
    Ответ написан
    3 комментария
  • На каком уровне системный архитектор должен знать технологии?

    Дисклеймер: я не системный архитектор, и даже не знаю, кто конкретно должен так называться, наверное это что-то вроде технического директора.

    Или у меня чрезмерно идеалистические представления о роли архитекторов в разработке?

    Да, чрезмерно. Архитекторы (как вы их называете) не боги и даже не "вторые после бога".

    включая "подводные камни", которые, как правило, доступны только прилично поработавшим с технологией специалистам?

    Подводные камни архитектор знать может, но вовсе не обязательно он должен их сам находить. Обычно ему о них сообщают поработавшие с технологией специалисты. А если технология еще не обкатанная, то архитектору достаточно это понимать, и уметь прикидывать риски нахождения подводных камней - это умение не относится к конкретной технологии.

    Опять же, отрасль очень бурная - когда успевать работать и следить за всем, что в ней происходит?

    А надо уметь главное выделять. Ну к примеру, вот позавчера анонсировали докер на винде на нативных контейнерах. Что нужно знать хорошему техническому директору? Что в 2016-й винде есть контейнеры (причём двух видов, настоящие и поверх hyper-v), что докер теперь будет их использовать со всеми вытекающими. Само собой нужно представлять что такое контейнер и чем от отличается от ВМ. Вот и всё что нужно знать, ну и посматривать за отзывами первых, кто осмелится опробовать технологию в деле.

    Ну или вот возьмём TypeScript. Не обязательно писать на нём или знать его досконально. Достаточно понимать, что такое статическая типизация в языке, и уже можно будет представить разницу между использованием в большом проекте ES5/ES6 и TypeScript. Достаточно принять решение опробовать его у себя (как сейчас делаем мы) на небольшом куске проекта, и сделать вывод о дальнейшем использовании.

    Возьмём, наконец, базы данных. Не думаю, что хороший "архитектор" обязан знать, что в какой-нибудь Монге какие-нибудь запросы с агрегацией по двум свойствам работают в 5 раз медленнее, чем по одному свойству. Однако то, что в Монге нет атомарной записи сразу нескольких документов, знать очень полезно, я бы даже сказал, критично (иначе можно пытаться написать какой-нибудь биллинг на Монге вместо какой-нибудь реляционной базы, и сорвать пучок проблем).

    Техническому директору проекта ("архитектору") гораздо важнее уметь правильно обрабатывать информацию, уметь снимать маркетинговую шелуху (вроде той, что была и есть с NoSQL от всех проблем и несчастий), спокойно реагировать на модные баззворды, и собирать библиотеку доверенных людей и информационных ресурсов. И важно знать о вещах, которые с течением времени не меняются, или меняются медленно и неохотно:
    • для каких задач подходят функциональные языки, а для каких - ОО;
    • что графовая СУБД как правило быстрее обрабатывает запросы на поиск с большой длиной цепочки;
    • что утверждение из предыдущего пункта неплохо бы проверить на практике с конкретными СУБД;
    • что веб-фреймворки бывают толстые и тонкие;
    • какие сегодня есть вариации паттерна MVC;
    • что сборка мусора это всегда накладные расходы и иногда не вполне предсказуемое поведение;
    • что данные от пользователя нужно фильтровать, иначе в вашей системе найдут машину Тьюринга не там, где надо;
    • что в информационной системе есть компоненты с разным уровнем доверия, равно как и сотрудники;
    • что транзакции в СУБД придумали не для того, чтобы учебники стали толще.
    Ответ написан
    4 комментария
  • Как скрыть переменную в jstl?

    @sirs
    Тут есть разные варианты, например
    1) засунуть в
    <input type="hidden" name="tariffId" value="${tempId.add(tariff.tariffId)}">

    или
    2) засунуть это в
    <script>
    var tariffID = "${tempId.add(tariff.tariffId)}";
    </script>

    Если у Вас for-each - возмите array или какой-нибудь объект key-value в js, т.е.
    <script>
    var array = new Array();
    <c:forEach var="tariff" items="${allTariffs}" varStatus="loop">
                                        array.push('${tempId.add(tariff.tariffId)}');
                                       </c:forEach>
    </script>
    Ответ написан
    1 комментарий
  • С чем связано предупреждение компилятора?

    @akileev
    Java / Scala developer
    Данное предупреждение говорит о том, что обработчик аннотаций будет работать только с исходным кодом версии 1.6, тогда как у вас в pom.xml указана версия 1.8.

    Этот баг уже поправили https://bugs.eclipse.org/bugs/show_bug.cgi?id=433807
    Ответ написан
    Комментировать
  • Как исправить ошибку в спринге?

    Vestail
    @Vestail
    Software Engineer
    Добавте JDBC драйвера в зависимости. В статье написано об этом.
    NOTE: I noticed that some of the readers are getting database connection issues. Notice that in my pom.xml, there is no database driver. That works for me because I have MySQL driver in tomcat lib directory and some DataSource connections configured with it. For any database connection related issues, either put the database driver in container lib or include that in pom.xml dependencies.

    Если используете MySQL то это будет
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>6.0.4</version>
    </dependency>
    Ответ написан
    2 комментария
  • Как добавить ограничения на доступ к страницам в spring?

    miraage
    @miraage
    Старый прогер
    У меня, например, написано так. По /users/** - там signup, signin, signout, поэтому всем есть доступ.
    Остальное только для авторизованных. Можете другие правила написать.

    @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                .authorizeRequests()
                .antMatchers("/ping", "/users/**")
                    .permitAll()
                .anyRequest()
                    .hasRole("USER");
        }
    Ответ написан
    3 комментария
  • Как найти функцию от двух переменных?

    Тут всё просто. Нужно найти силу, с которой нужно бросить снаряд.
    Снаряд летит по параболе, что есть сумма движение по оси X и Y. По оси X движение равномерное прямолинейное, по оси Y равноускоренное прямолинейное. Соответственно коэффициент для каждой оси вычисляется через синус и косинус данного угла.

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

    Ну а дальше выразить силу через скорость. Задача уровня 8-9 класса.

    Но для последнего шага не хватает массы снаряда.
    А на чертеже указана скорость, но не указана в условии. Так что задача сформулирована не корректно.

    Если дана начальная скорость, то задача сводится к нахождению массы снаряда.
    Ответ написан
    1 комментарий
  • Как отправить определенный элемент массива?

    Amazing-Space-Invader
    @Amazing-Space-Invader
    веб-хипстер
    codepen.io/anon/pen/ALXmLa?editors=1012
    Цикл записывает в новый массив каждый четный элемент.
    Ответ написан
    5 комментариев
  • Организация процесса создания landing page с нуля?

    Jump
    @Jump Куратор тега Системное администрирование
    Системный администратор со стажем.
    Организация процесса удаления аппендицита с нуля.
    Взялся за удаление аппендицита (я не хирург). В принципе в общих чертах процесс организовать смогу, но хотелось послушать профессионалов в области хирургии.

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

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

    Ну и когда все готово, отвязываем пациента, даем выпить стакан водки, и выставляем счет.

    Собственно вопросы заключаются в том, рабочая ли схема, какие могут быть нюансы или трудности (я не хирург) или как удобней организовать тот или иной пункт?
    Ответ написан
    6 комментариев
  • Как правильно организовать архитектуру приложения?

    zolt85
    @zolt85
    Программист
    Просто опишите их в конфигурации, Hibernate все остальное сделает за вас. Только почитайте документацию, прежде чем городить огород.
    Ответ написан
    1 комментарий
  • В чем отличия redirect от requestDispatcher?

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


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


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

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Потому что так работает fork. В этом месте программа как бы разделяется на две части - продолжает работать родитель и начинает работать потомок. Определить, где вы находитесь, можно по результату fork. При успешном завершении родителю возвращается PID процесса-потомка, а потомку возвращается 0.
    Ответ написан
    Комментировать