• Каким образом можно получить куки после прогрузки js на сайте без видимого браузера?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    P.s. браузер желательно имитировать невидимым.

    Это называется headless режим
    Вы можете например, взять selenium + любой браузер по вашему вкусу (firefx, chrome и др.) и запустить их в headless режиме.
    А насчет получения кукис с использованием Seleinum - https://www.guru99.com/handling-cookies-selenium-w...
    Ответ написан
    Комментировать
  • InfluxDB, Prometheus, OpenTSDB. Что выбрать для хранения и анализа метрик?

    Не очень понял задачу, попробую объяснить разницу, как я это понимаю из своего опыта:

    OpenTSDB:
    * работает поверх HBase/Hadoop, для тестов можно запустить в standalone режиме, но будет работать _крайне_ медленно
    * timeseries вида timestamp, metricname=val, (tag=val)+ , может хранить только числа (есть batch mode, если нужно несколько пачкой писать)
    * объем данных хорошо масштабируется за счет HBase
    * сообщество сообщает о тормозах при очень большом количестве (десятки тысяч+) идентификаторов серий -- это имя серии + сочетание тегов
    * скорость записи и выборки хорошая: в HBase данные партицируются почасово и читаются только те серии за те периоды, которые нужны
    * для масштабирования ставим доп.ноды OpenTSDB за прокси (если упираемся в агрегации), либо ноды HBase (если упираемся в IO)
    * процессинг метрик только самый базовый -- downsample, вычисление rate из счетчиков (т.е. производная), аггрегация по тегам (например, среднее "os.cpu" для всех метрик, у которых тег "role=webserver")
    * сам язык запросов немного вырвиглазный
    * недавно появился https://bosun.org/, который садится перед OpenTSDB и позволяет еще какие-то операции делать
    * апстрим разработку ведет довольно неторопливо

    InfluxDB:
    * ставится в тестовом режиме очень легко (один бинарник)
    * пока нестабилен -- за последний год сменилось 2 HTTP API и штук пять вариантов бинарного формата на диске -- это моя самая большая претензия к нему
    * timeseries вида db, timestamp, metricname=val, (tag=val)+, т.е. можно логически группировать разные данные. Кажется, можно было хранить текстовые значения.
    * язык запросов SQL-подобный
    * ребята из Coub говорили, что на запись он качает хорошо, а на чтение тормозит (не знаю, впрочем про какую из версий)
    * у них много коннекторов к разным входным форматам (графит, opentsdb, collectd и т.п.)
    * довольно динамично развивается

    Из известных TSDB есть еще Graphite:
    * старый хорошо известный вариант
    * питон с модулями, поэтому сложнее в установке, чем influxdb, но проще чем хадуп
    * база RRD, т.е. может хранить только данные "за последний год, за последний месяц и за последний час" со своей точностью для каждого периода
    * за счет этого данные занимают хорошо предсказуемое и постоянное место на диске
    * гигантское количество документации и всяких обвязок в интернете
    * серии вида timestamp, metric=val -- тегов и т.п. нет. поэтому группировать, например, одинаковые серии для разных хостов придется под разными именами
    * довольно большое (по сравнению с OpenTSDB) количество функций при выборке -- насколько помню, были всякие перцентили, forecastы и т.д.
    * с дефолтным хранилищем при большом количестве серий начинает упираться в диск
    * масштабируется неважно (подробностей не знаю)
    * периодически из сообщества появляются разнообразные хранилища, которые улучшают ситуацию со скоростью и масштабированием

    Prometheus не видел.
    Еще что-то слышал про druid.io, но тоже ничего о нем не знаю.
    Ответ написан
    1 комментарий
  • Почему нельзя использовать ArrayList вне функции?

    @frozen_coder
    Java-developer
    LI.add(1231);

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

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Ну, давайте по-порядку разберём!
    1. Одностраничник - делается под конкретный продукт или услугу.
    2. Шаблон - создаётся также уникальным, исходя направления продукта/услуги и ЦА.
    3. Форма сбора контактных данных на одностраничнике - прошлый век! Никто не будет оставлять данные. Для этого есть форма: "Отправить запрос" и в ней поле, НЕОБЯЗАТЕЛЬНОЕ К ЗАПОЛНЕНИЮ: "Прошу ответить мне на e-mail:".
    4. Цель одностраничника - должна быть явно задана: реклама товара, продажа, выявление интереса к продукту, приоритетная первичная регистрация на сервис в альфа/бета-тесте и т.д. Если, что-то из перечисленного будет идти вместе, - ТОЛКУ НЕ БУДЕТ!
    5. Конверсия - самая интересная тема, а уж тем более, на лендинге. Здесь многое зависит от того, кто создаёт Вам шаблон и корректно ли он располагает визуальные смысловые блоки и элементы пользовательского интерфейса страницы. Т.е., нужно, чтобы это делал именно UX-дизайнер, а не простой дизайнер! Т.к. он учитывает время просмотра страницы до десятых долей секунды, направление взгляда, движение мышки, скорость понимания информации, простоту изложения информации для понимания (пункты списка, схемы, таблицы, анимацию, видео-ролики и прочее).
    6. Удобство управления лендингом и структурой страницы, скорость загрузки: однозначно SPA + AJAX. Вёрстка - делается так: общий дизайн и блоки наполнения В ОТДЕЛЬНЫХ HTML-файлах, затем берём includeHTML и ставим все нужные блоки друг за другом в едином HTML, которые нам понадобятся. Затем, комментируя/переставляя строки в головном HTML-файле мы легко можем менять расположение блоков (секций лендинга).
    7. Все popup-формы, разметки секций и прочее (т.е., доп. разметку для доп.блоков) - грузим через тот же includeHTML из рядом лежащих файлов, например, "vote-form.html" или "feedback-form.html", где будет нужный функционал. Т.е. Вы сможете легко менять эти файлы, чтобы получать нужную (модифицированную/новую) форму.
    8. Основной список секций по лендингу можно получить здесь (Создать сайт с "нуля" -> выбрав в списке типов сайта: лендинг).
    9. SEO и индексация - JSON-LD, META-тэги (включая данные для соц. сетей, fb:* и т.д.), разметка всей вёрстки - строго HTML5!
    Ответ написан
    4 комментария
  • JavaFx ─ на сколько актуально для детскопного софта?

    @sanluck
    программирую на java
    Стоит задача разработать кросплатфомренный софт, целевая аудитория android разработчики, то есть у большинства установлена java 6/ java 7 (в последние время ситуация выравнивается из за retrolymda но не сильно)

    Рекомендую вам использовать последнюю версию JavaFx.
    Можно делать программу с уже упакованной в неё средой исполнения, т.е. JRE идёт внутри JAR-ника с приложением.

    На сколько актуально в таком случае использовать JavaFx ? Какие могут ожидать трудности ?

    Трудности в любом случае будут (наверное).
    Ответ написан
    7 комментариев
  • Нужна подсказка опытных программистов и не только (Android, Java) в каком направлении двигаться?

    @IceJOKER
    Web/Android developer
    А вы думали, что за полгода будете себя уверенно чувствовать?
    Лично на своем примере скажу, что даже через год программирования на Java(Android) есть много вещей, которых недопонимаю, очень много моментов бывает, когда пытаюсь написать более менее крупное приложение и чувствую, что я нихрена не знаю. но с помощью Гугл и stackoverflow потихоньку двигаюсь вперед, пытаюсь что-то новое внедрять, не получается - пытаюсь заново и так далее.
    В данный момент работаю над более крупным проектом(относительно), где много экранов и они взаимодействуют друг с другом, раньше не получалось такое, теперь уже фундамент заложил и уже более уверенно чувствовал себя, хотя опять же возникают трудности когда сталкиваюсь с тем, с чем раньше не работал.

    Все дело в опыте, нужно делать, повторять и вы потихоньку будете чувствовать себя в своей тарелке.

    p.s. вспомнил когда впервые столкнулся с ООП, никак не мог догнать что это такое и с чем его едят, хотя и пытался понять, читать, но теперь уже знаю что да как(естественно не на 100% уровне).
    Неуверенность пройдет, делайте, пытайтесь, ищите(Гугл - твой лучший помощник), потихоньку пытайтесь делать что-то новое, не забывайте повторять, чтоб закрепить.

    У меня все (:
    Ответ написан
    1 комментарий
  • Как скрыть api от посторонних?

    @IvanOne
    Автор сделай генерацию ключей и привязывай к хосту клиента, при запросе проверяй их
    Ответ написан
    Комментировать
  • Как скрыть api от посторонних?

    sbh
    @sbh
    Вы сторонними API пользовались когда-нибудь?
    Клиентам выдаются API-ключи которые используются для авторизации.
    Ответ написан
    6 комментариев
  • Как переопределить $(document).ready после загрузки страницы?

    b0nn1e
    @b0nn1e
    Alcohol & Ruby on Rails
    $(document).ready(function() {
            switch (window.location.href){
                case 'page1':
                    alert('p1 ready');
                    ...
                    break;
                case 'page2':
                    alert('p2 ready');
                    ....
                    break;
            }        
        });
    Ответ написан
    Комментировать
  • Как передать значение из var в div?

    @President42
    JQuery
    $('.previElement').attr('previ_id', id)

    Vanilla
    document.querySelector('.previElement').setAttribute('previ_id', id)


    А вообще, для таких вещей лучше айди, если не собираетесь менять значение в нескольких местах. Если же используете классы для взаимодействия JS с DOM элементами, используйте в классах префикс js-

    Например:

    <input type="button" value="Click me!" class="btn btn--primary js-open-popup" />

    var popup = {
      open: function() { /* open popup */ },
      close: function() { /* close popup */ }
    }
    
    $('.js-open-popup').on('click', function() { window.popup.open(); })
    Ответ написан
    6 комментариев
  • Строка не принадлежит объекту String в Javascript, почему?

    AngReload
    @AngReload
    Кратко о себе
    var strB = new String('abc');
    strB instanceof String;

    Найдете ошибку?
    Ответ написан
    5 комментариев
  • Как организовать git версионирование?

    benbor
    @benbor
    Помог ответ - не забудь лайкнуть
    это называется ТЕГИ. инфы в гугле море
    UPD. Добавлю, что в гите есть еще ОЧЕНЬ много полезностей, так что не поленитесь потратить 5 часов на прочтение офф документации - оч легко читается
    Ответ написан
    Комментировать
  • Как сравнить форму кривых Безье?

    @Sumor
    Искривление зависит от знаков второй производной. Если у вас несколько соединённых кривых Безье, то на границе вторая производная может не существовать.
    Если используются кубические кривые Безье, то вторая производная это линейная функция. Поэтому для одного отрезка могут быть варианты:
    1. Вторая производная положительна.
    2. Вторая производная отрицательна.
    3. Вторая производная меняет знак с плюса на минус.
    4. Вторая производная меняет знак с минуса на плюс.
    Поэтому, чтобы сравнить две кривые, состоящие из нескольких кривых Безье, можно каждый отрезок каждой кривой классифицировать по виду второй производной и сравнить классификацию.
    Ответ написан
    2 комментария
  • Деплоить в production из VCS (система управления версий) это нормальная практика?

    mututunus
    @mututunus
    Backend developer (Python, Golang)
    Самый лучший вариант деплоить из Continuous Integration сервера. Но, за неимением такового, чаще всего деплоят из VCS, основная проблема безопасности это хранение конфигов и ключей в VCS.
    Ответ написан
    9 комментариев
  • Как выложить Python проект на github?

    • Нужно сформулировать setup.py скрипт: https://docs.python.org/3/distutils/setupscript.html
    • Выбрать лицензию, в кратце узнать суть разных лицензий можно на сайте https://tldrlegal.com/
    • Написать информативный README файл, примеров навалом. Желательно в Markdown-разметке.
    • Обязательно нужно написать gitignore файл, чтобы этот самый .exe файл небыл добавлен в репозиторий.

    Когда всё готово, можно залить на GitHub. Об этом ещё можно узнать тут: https://help.github.com/
    Ну и конечно, лучше знать как работать с Git в принципе: www.git-scm.com/documentation
    Ответ написан
    Комментировать
  • Для чего в Python статические методы?

    @GiperScriper
    class C(object):
        atrib = 0
    
    c1 = C()
    c2 = C()
    print c1.atrib, c2.atrib # 0 0
    C.atrib = 5
    print c1.atrib, c2.atrib # 5 5
    Ответ написан
    2 комментария
  • Для чего в Python статические методы?

    Lerg
    @Lerg
    Defold, Corona, Lua, GameDev
    class Foo:
        some = 0
        @classmethod
        def setSome(cls, val):
            cls.some = val
            
        @classmethod
        def getSome(cls):
            return cls.some
            
            
    f1 = Foo()
    f2 = Foo()
    
    print(f1.getSome(), f2.getSome())
    f1.setSome(5)
    print(f1.getSome(), f2.getSome())
    Ответ написан
    2 комментария
  • Способ при асинхронности JS?

    mlnkv
    @mlnkv
    JavaScript Developer
    "Но очередности в JS нет" - что значит нет очередности?! Как такое может быть? Может в цикле, для инициализации переменной, вы выполняете асинхронные запросы? Тогда вам надо использовать колбек.
    У вас явно нет понимания того, что вы делаете))
    Ответ написан
    Комментировать
  • Как вернуть значение из метода java?

    @Copperfield
    Android dude
    Вот так должно выглядеть то, что вы хотите сделать.
    public String[] delSpace(String[] mas) {
        	String[] s = new String[mas.length];
            for(int i = 0; i < mas.length; i++){
                s[i] = getDelSpase(mas[i]);
            }
            return s;
        }

    Вне цикла инициализируете массив стрингов размером с аргумент mas. Циклом идите по массиву и делайте что вам надо. Возвращайте.
    Ответ написан
    1 комментарий
  • В массиве вещественных чисел найти минимальный элемент среди отрицательный элементов?

    @IgorBond
    public class minFinder {
        public static void main(String[] args) {
            float[] array = {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,10,9,8,7,6,5,4,3,2,1};
            float minVal = array[0];
            for (int i = 1; i < array.length; i++) {
                if(array[i] < minVal & array[i] < 0) minVal = array[i];
            }
            System.out.println(minVal < 0?"Min in array is " + minVal:"Min in array has not found");
        }
    }
    Ответ написан
    Комментировать