• Зачем нужна "кроссплатформенность" в Java?

    roswell
    @roswell
    и швец, и жнец, и на дуде игрец
    1) только вот C/C++ софт придётся компилировать самому под все целевые платформы;
    2) платформо-зависимые части кода в большинстве случаев уже собраны в библиотеки;
    3) JavaFX или собственная реализация Swing UI. Даже голый Swing причесать так, чтобы он выглядел практически одинаково на всех платформах, особого труда не составит;
    4) то же с .net (то, что Microsoft пихает его рантайм в Windows — не заслуга дотнета как такового. А заодно поинтересуйтесь, как у дотнета обстоят дела со стабильностью API);
    5) с джарами и не бывает возни, достаточно установить JRE.

    В общем, вы просто не умеете готовить кошек^W кофе o)
    Ответ написан
    Комментировать
  • Как реализовать открытие ссылки в браузере по нажатию кнопки?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    import java.awt.Desktop;
    import java.net.URI;
    
    public class Main {
        public static void main(final String args[]) {
            URI uri = new URI("http://toster.ru");
            Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null;
            if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) {
                try {
                    desktop.browse(uri);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
    Ответ написан
    Комментировать
  • Знаки вопроса при выводе информации из БД MySQL?

    SagePtr
    @SagePtr
    Еда - это святое
    Выставить правильную кодировку при подключении к БД
    Ответ написан
    Комментировать
  • Как получить список всех параметров функции JS?

    lazalu68
    @lazalu68
    Salmon
    Use the force, Kirill!

    Notifier.showEvent.toString()
    function (ev, force) {
      curNotifier.q_shown.push(ev);
      var thumbEl = '';
      if (ev.type == 'video_process_ready') {
        thumbEl = '';
      } else {
        thumbEl = '<img src="'+Notifier.fixPhoto(ev.author_photo)+'" alt="'+Notifier.fixPhoto(ev.author_photo)+'">';
      }
      var typeClassName = 'notifier_type_' + ev.type;
      ev.baloonWrapEl = ce('div', {
        className: 'notifier_baloon_wrap',
        innerHTML: '' + ev.title + '' + (ev.author_photo && ('' + (ev.author_link && ('<a href="'%20+%20ev.author_link%20+%20'">')) + thumbEl + (ev.author_link && '</a>') + '')) + (ev.add_photo && ('<img src="'%20+%20ev.add_photo%20+%20'" alt="'%20+%20ev.add_photo%20+%20'">')) + '' + ev.text + ''
      });
      ev.baloonEl = ev.baloonWrapEl.firstChild;
      ev.closeEl = geByClass1('notifier_close_wrap', ev.baloonEl);
    
      addEvent(ev.baloonEl, 'mouseover mouseout', function (e) {
        ev.over = (e.type == 'mouseover');
        if (ev.over) {
          Notifier.freezeEvents();
        } else {
          Notifier.unfreezeEvents();
        }
      });
      addEvent(ev.baloonEl, 'mousedown click', function (e) {
        e = (e.originalEvent || e) || window.event;
        var btn = e.which, nohide = false;
        if (browser.msie) {
          btn = e.button == 1 ? 1 : (e.button == 2 ? 3 : 2)
        }
        if (btn == 1 && (e.ctrlKey || browser.mac && e.metaKey)) {
          btn = 2;
          if (browser.mac) nohide = true;
        }
        if ((e.target || e.srcElement).tagName == 'A') {
          switch (btn) {
            case 1: // left button
              // setTimeout(function () {Notifier.hideEvent(ev);}, 100);
              break;
    
            case 3: // right
              break;
          }
          return;
        }
        switch (btn) {
          case 1: //left button
            eval(ev.onclick);
            Notifier.hideEvent(ev);
            break;
          case 2: // middle
            var wnd = window.open(ev.link, '_blank');
            try {wnd.blur(); window.focus();} catch (e) {}
            if (!nohide) Notifier.hideEvent(ev); // else it will be  hidden by context menu
            break;
          case 3: // right
            if (browser.mozilla) {
              return;
            }
        }
        return cancelEvent(e);
      });
      addEvent(ev.baloonEl, 'contextmenu', function (e) {
        setTimeout(function () {
          Notifier.hideEvent(ev, false, false, true);
        }, 10);
        return cancelEvent(e);
      });
      addEvent(ev.closeEl, 'mousedown click', function (e) {
        Notifier.hideEvent(ev, false, false, true);
        return cancelEvent(e);
      });
      ev.startFading = function () {
        ev.fading = animate(ev.baloonEl, {opacity: 0}, 1000, Notifier.hideEvent.bind(Notifier).pbind(ev, false));
        if (ev.over) {
          ev.fading.stop();
        }
      }
      curNotifier.cont.insertBefore(ev.baloonWrapEl, curNotifier.cont.firstChild);
      var h = ev.baloonWrapEl.offsetHeight;
      re(ev.baloonWrapEl);
      curNotifier.cont.appendChild(ev.baloonWrapEl);
      setStyle(curNotifier.cont, {bottom: -h});
      setStyle(ev.baloonWrapEl, {visibility: 'visible'});
      animate(curNotifier.cont, {bottom: 0}, 200);
      if (!curNotifier.idle_manager.is_idle || force) {
        ev.fadeTO = setTimeout(ev.startFading, hasAccessibilityMode() ? 35000 : 7000);
      }
    }
    Ответ написан
    Комментировать
  • How to insert image to db via servlet without using html forms?

    @aol-nnov
    йесс, ит ыз посибл! юз хттп пост ту рисив зэ имэдж.
    ту ретрив ё имэдж фром дб юз гет сервлет энд донт фогет по сет апроприэйт контент тайп!

    гуд лак!

    //мгимо финишт? аааскинг!
    Ответ написан
    Комментировать
  • Непонятный вывод на экран результатов нескольких последовательных ин(де)крементаций?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Постинкрмент (i++) отличается от преинкремента тем, что возвращает значение, которое было до инкремента, изменяя значение самой переменной. Это хорошо видно в примере на С++. Семантика в языках одинакова.

    Для перевода в восьмиричный вид можно воспользоваться методом Integer.toOctalString(int);
    Ответ написан
    3 комментария
  • Пытаюсь перечислить в условии элементы, как?

    @aol-nnov
    Integer res = 0;
    try {
        res = Integer. parseInt(aString, 16);
    } catch(NumberFormatException ex) {
        System.out.println("кисо, куку!")
    }
    Ответ написан
    1 комментарий
  • Как остановить параллельное выполнение?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    У треда должна быть обертка, в которой будет булево свойство (interruptionRequested, например), которую треду необходимо проверять самостоятельно между атомарными операциями своей полезной нагрузки. ("Скопировал файл, проверил - false, скопировал следующий, проверил - false, скопировал еще один, проверил - true, завершился").

    То есть тред сам решает, когда ему остановится, но мы можем посигналить ему об этом. Иначе мы рискуем поломать данные, т.к. не будем наверняка знать, в каком состоянии они находятся.
    Ответ написан
    Комментировать
  • Retrofit 2 и RXJava как правильно обработать исключения?

    @YuryBorodkin
    Android dev
    неа, неправильно. Добавь onError() после вызова login. Почитать можно тут
    Ответ написан
  • Как правильно указывать переменные в Kotlin?

    @bendikv
    Ответ написан
    Комментировать
  • Что случится, если не закрыть поток чтения/записи?

    @hatiko
    Блокировка файлов.
    Рост расхода памяти.
    И т.п.
    Ответ написан
    Комментировать
  • Как вылечить java.util.zip.ZipException: duplicate entry: org/jetbrains/annotations/NotNull.class?

    @Tiberal
    ./gradlew dependencies
    в получившемся графе ищете повторяющиеся зависмости и эксклюдите их.
    Там даж написано что аннотации jetbrains дублируются. Осталось только найти в какой либе
    Ответ написан
    1 комментарий
  • Минимум знаний для web разработчика, чтобы фрилансить?

    vakorovin
    @vakorovin
    Разработчик
    Вы меня конечно извините, но десятки точно таких же вопросов, задающихся каждые несколько дней - они не для вас да? У вас вопрос особенный и за 2 дня с прошлого такого же вопроса ситуация на рынке изменилась?
    Ответ написан
    5 комментариев
  • На каком уровне системный архитектор должен знать технологии?

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

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

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

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

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

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

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

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

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

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

    Vestail
    @Vestail
    Software Engineer
    Ответ написан
    Комментировать
  • Аналог Alphaskins для других языков существует ли?

    Avernial
    @Avernial
    Разрабатываю научное ПО на языке Python.
    Для Python есть PyQt4(5), в ней можно делать все что угодно, включая использование css для настройки элементов GUI.
    По умолчанию PyQt выглядит нативно для операционной системы.

    Определение красивый UI, очень размыто. Луший вариант это когда приложение не выделяется от приложений установленых в систему.

    Вот простой пример как использовать CSS для кнопки:

    from PyQt5 import Qt
    
    
    class Widget(Qt.QWidget):
    
        def __init__(self):
            super().__init__()
            layout = Qt.QVBoxLayout(self)
    
            button1 = Qt.QPushButton("Button 1")
            button2 = Qt.QPushButton("Button 2")
    
            layout.addWidget(button1)
            layout.addWidget(button2)
    
            button1.setStyleSheet("""
            QPushButton {
                background-color: green;
                border-style: outset;
                border-width: 2px;
                border-radius: 10px;
                border-color: beige;
                font: bold 14px;
                min-width: 10em;
                padding: 6px;
                }
            QPushButton:pressed{
                background-color: #4CAF50;
                color: white;
                border-color: black;
                border-style: inset;
                }
            """)
    
    
    if __name__ == '__main__':
        app = Qt.QApplication([])
    
        w = Widget()
        w.show()
        app.exec()
    Ответ написан
    1 комментарий
  • Зачем нужна Обратная Польская Запись?

    Что бы избавиться от скобок. Выражение в ОПЗ можно вычислять слева на право, читая посимвольно. При группировке скобками такое невозможно.

    UPD:
    FPU, например, как раз программируется с помощью ОПЗ. Т.е. преобразовав выражение в ОПЗ можно очень легко записать его на ассемблере.
    Ответ написан
    Комментировать
  • Как заставить Linux увидеть новые ядра процессора?

    Frankenstine
    @Frankenstine
    Сисадмин
    Если система виртуализации типа xen, kvm - вам нужно просто перезагрузить систему; если система виртуализации контейнерного типа, как openvz, virtuozzo - вам ничего делать не надо.
    cat /proc/cpuinfo | grep "processor"
    Ответ написан
    2 комментария