Задать вопрос
  • Почему новичкам часто советуют парсинг?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Парсинг - это очень простое ТЗ которое можно привязать к опыту работы с сетью и с реальными а не учебными данными. Я думаю что такие ТЗ создают очень ленивые преподаватели и инструкторы. Которые обязательно воспользуются результатом вашего труда. Коллекция парсеров магазинов пром-товаров может быть собрана в пакет и перепродана кому-то еще.

    Парсинг для самого разработчика - это дно-днищенское. Очень быстро прокачаете опыт в BeautifulSoup но кроме этого дальше расти некуда. Парсинг с точки зрения договорённостей о сетевом контракте (endpoint, Swagger, SOAP, gRPG) это тоже сплошное кидалово. Что-бы вы не дизайнили - владелец сайта в любой момент может сломать просто изменив спецификацию или дизайн. Это ставит вас в заведомо рабское положение. Вроде как работу проделали но за 1 день до релиза сайт сделал редизайн и всё зря. А никто не заплатит.

    Я парсил исключительно из любопытсва. Только не на Python а на других языках. Создавал базу прокей (штук 100) и пытался работать через них в параллелизме. Типа аккуратненько. Чтоб не было очевидно. Прокси ломаются. Отъезжают. Вобщем забавно. Можно потратить кучу времени но ненадежно. Все что бесплано - ненадежно.

    Мой друг парсил валютные биржи. Но не ради парсинга а ради самих данных. Это было полезно. Он гонял на них нейросетевые алгоритмы. Торговые роботы типа.

    По поводу опыта работы с Selenium. Я не использовал никогда. Но я думаю что это очень полезный опыт если вы докажете что делаете любые штуки - можете пойти тестером автоматизатором в большую корпорацию. Это уже на несколько левелов выше чем парсинг сайтов. И оплата стабильная.

    Вобщем как цель жизни парсинг - втопку. Но как некий опыт. Попробовать. Поймать тыщи HTTP-ошибок. Парсить разные виды респонсов - это я считаю полезно.
    Ответ написан
    1 комментарий
  • Компилятор выдаёт ошибку 1 при Выставление счета через QIWI. Что делать?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Автор попробуй поменяй версию com.qiwi.billpayments.sdk на более новую или более старую.
    Ответ написан
    Комментировать
  • Где ошибка? Почему массив выводится в линию?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Кажется вот этот вывод перевода строки стоит не там.
    }cout << "\n";

    Вообще... олимпиадный код где сплошняком идет стена вычислений вперемешку с выводом читать трудно.
    Разбей хотя-бы на 3 функции. Ввод. Расчеты. И вывод результата.
    Ответ написан
    Комментировать
  • Будет ли приложение для arm64-v8a работать быстрее чем для armeabi-v7a?

    mayton2019
    @mayton2019
    Bigdata Engineer
    До 2005 года производительность зависела практически только от тактовой частоты. Покупаешь 2 процессора. Смотришь. Если в 2 раза больше - то можно предполагать что в приложениях типа рендеринга 3Д графики будет ощутима разница.

    Для современного железа все стало запутано. Стали наращивать число ядер. А это значит что программист обязан писать приложения так чтобы они бились на независимые части и работали на ядрах. Мультизадачка по сути. В твоём кейсе скорее всего не будет разницы. Или будет сильно зависеть от класса приложения. Или будет разница зависеть от совокупности - процессор-кеш-объем-памяти-тип-сетевого-соединения (3G/4G/Wifi).
    Ответ написан
    Комментировать
  • Что быстрее: select и update или просто update?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Делай просто update. Проверка не нужна.
    Ответ написан
    Комментировать
  • Стоит ли изучать sql, или же сразу заняться изучением ORM?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Стоит ли изучать sql, или же сразу заняться изучением ORM?

    Все люди которые ратуют за использование ORM с годами все равно приходят к очень сильной
    и мотивированной необходимости знать SQL. Этот язык сегодня является латынью баз данных.
    Вы сможете говорить с бизнесом на одном языке если будете в переписке активно использовать
    например язык DDL таблиц. Ваши аргументы будут выглядеть убедительно если в переписке будут
    фрагменты например любой консоли MySQL, psql, SQL*Plus e.t.c. Короче знание SQL - это признак
    джентльмена. Путь в приличное общество.

    И наоборот, вы будете вообще НЕПОНЯТЫ если попробуете показать ORM объект на Node или не дай
    бох на Java/JPA техниках аннотации. Бизнесу эти аннотации неинтересны и неинформативны.

    Да и вам самомму смоделировать любой сложности выборку или отчет будет бытрее в SQL чем в фрейморках
    ООП-отображения.

    Что касаемо перформанса. К сожалению все современные ORM реализуют только самые базовые возможности
    оптимизации запросов. Насколько я знаю Hibernate (по состоянию на 2015 год) так и не умел обращаться
    с Oracle Hints. А любой сложный ентерпрайз начинается там где вы выжимаете из запроса не 100 а 1000%
    возможностей. И здесь вам нужно управлять проприетарными функциями воздействия на оптимизатор.

    Вообще для меня например цикл оптимизации ORM запросов начинается с того что я выбрасываю из
    стека ORM. Заменяю на native. И долго наблюдаю его и оптимизирую. И когда достиг критерия готовности
    то пытаюсь затащить обратно в ORM. Иногда не заходит. Это те случаи когда ORM оказался плох.
    Эти случаи сложны, синьорны. и по каждому из них можно здесь в хабре открывать статью как минимум.

    Но не все так плохо. Существует взгляд на ORM с обратной стороны. Это фреймворки наподобие MyBatis.
    Они в первую очередь решают проблемы БД а уж потом дают опции объектных возможностей. Короче
    Батис - это ОРМ наоборот. Где эволюция системы идет не от кода к БД (как любят хипстеры) а от
    имеющихся вызовов процедур
    и запросов к объектам респонса.
    Ответ написан
    5 комментариев
  • С чего лучше всего начинать рефакторинг?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вот плохо написанная функция изменения цены товара, учитывающая множество разных условий. Нужно рефакторить, так как сама функция жутко нечитабельна. С чего начать рефакторинг или какие методы использовать для начала рефакторинга?

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

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

    .replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ')

    встречается 4 раза. Ее можно обработать через extract function. После этого кода станет визуально меньше.

    Далее - повторяющийся code-block с обновлением update_price. Его брат-близнец отличается только
    аргументом option_price. На этом можно сыграть и тоже сделать некоторое упрощение.

    if (prefix == '+') {
          update_price = current + Number(option_price);
        } else {
          update_price = current - Number(option_price);
        }


    Некоторые фрагменты кода напрашиваются на introduce temporary variable.
    Например следующий сниппет
    option_sizes.find('input[type="hidden"]')
    был использован дважды. И первый раз он нашел какое-то значение и был использован.
    И в следующей строке этот поиск был вызван снова. Хотя операция find как-бы подсказывает
    нам что она имеет complexity близкое к линейному. Тоесть нужно ценить процессорное
    время и не грузить его повторными поисками. Тут - как-бы смысл двойной. И перформанс
    и нормализация кода. Тоесть явное указание что этот результат нам еще понадобиться.

    Очень сильно в рефакторинге помогает типизация. Тоесть если переписать код с JavaScript на TypeScript
    то будут более очевидны некоторые инварианты.

    Вот на этом пожалуй хватит. Надо сделать эти рефакторинги и возможно дальше откроется видение других.
    Ответ написан
    3 комментария
  • Какая БД позволяет использовать структуру множественной связи (дерево связано с деревьями)?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Посмотри графовые бд: Neo4j (например).
    Покрывает все твои потребности.
    Ответ написан
    2 комментария
  • Как поменять порядок битов в байте C?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут все биты - перевернуты.
    На псевдокоде как-то так.
    int a = 0b0010_1101;
    for(i in (1..8)) {
     b |= a & 0b0000_0001
     b <<= 1;
    }
    Ответ написан
  • Какой дистрибутив java выбрать для обучения?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Можно брать последнюю с суффиксом LongTermSupport (LTS) но с условием что фреймворк тоже
    поддерживает эту версию. Например я тоже люблю топчик (JDK17) но вынужден кататься на
    более старой модели жигулей JDK11 только потому что нужные Spark/Hadoop иногда хотят
    именно старую версию.

    Для разработок в банковской среде очень многие enterprise приложения до сих пор (!)
    сидят на JDK-8 и очень мало вероятно что они когда-то переведут language на что-то более
    старшее. Поэтому весьма анекдотична ситуация когда вас собеседуют и спрашивают про
    модное-молодежное а когда приходите на рабочее место - с ужасом узнаете какой
    огромный парк легаси сред и языков вас будет сопровождать. Печаль-печаль.

    Вообще проблемы установки конкретного дистрибутива ощущают с болью в основном Windows-пользователи.
    Для Linux эта проблема не так заметна. Можешь поставить 3/11/17 LTS в разные фолдеры и переключать их просто меняя PATH/CLASSPATH для текущего сеанса консоли.

    Для приложений на базе контейнеризации (docker/kuber) - вообще такой проблемы не существует.
    Каждое приложение выбирает себе конкетную сборку JRE/JDK в конфигурации образа.
    Ответ написан
    Комментировать
  • Как можно практически закрепить знания JAVA SE?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Мне кажется ты слега перегрел себя. Что там оттачивать в Enum? Какой вопрос тебя могут спросить на собеседновании на джуна и на который ты не знаешь ответ.

    В твоей ситуации я был. Это похоже на усталость. Ничего не надо делать. Надо просто отдохнуть.
    Для систематизации-же заведи себе в гитхабе проектик типа FAQ. И складывай туда code-samples
    по каждому вопросу.
    Ответ написан
    Комментировать
  • Как сделать функцию полнотекстового поиска?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можно попробовать начать с поиска по LIKE выражению. Обычно этого хватает для небольших таблиц.

    А сама постановка полно-текстового поиска - очень сложна в условиях. Например в том какие возможности поискового языка должны использоваться. Нужно ли учитывать национальные особенности языка. Стоп-слова. Стемминг. Лемматизацию. Как часто будут обновляться индексируемые данные. Это все - список экспертных вопросов которые надо проговорить. Если вы не знаете зачем вам это все - то наверное полнотекстовый поиск не нужен и like будет достаточно.
    Ответ написан
  • Как обращаться к элементам json через точку?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Существует только один язык в котором объекты мапятся однозначно в JSON. Это javaScript.
    Собсно слово JSOn от этого и происходит. А во всех других - будут какие-то LinkedHashMap
    шаблонизирующиеся строкой как ключ и object как value.
    Ответ написан
    Комментировать
  • Какую область программирования выбрать PHP или Java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Если автор знает Python - это очень хорошо. Мне кажется что под него щас проще искать работу. В том смысле что он - широкоформатный. Есть и девопс и электронная коммерция и дата-саенс и автоматизация тестирования и нейросети с роботами и железяки.
    Ответ написан
    Комментировать
  • В чем практический смысл тестирования?

    mayton2019
    @mayton2019
    Bigdata Engineer
    У багов есть разный impact. Или степень влияния на качество продукта. Вот какое влияние сдвинутых иконок?
    Я думаю их увидели только жители стран которые используют перевод с английского и этот перевод оказался на несколько символов длинее оригинала из-за чего произошел развал дизайна. Можно сказать что аудитория некоторых стран ощутила легкое неудобство.

    Тоесть impact - так себе.

    А что будет если программист 3Д графики допустил ошибку, которая приводит к крашу игры? Тут влияние посильнее. Я-бы сказал что это провал релиза. Как такое пропустили тестировщики (автоматизаторы или ручники) неважно) - ХЗ. Но тут важно срочно бежать в студию и выкладывать на steam экстренное обновление игры. И счет идет не на недели а на считанные дни. Кое-кому из отдела разработки и тестирования придется провести несколько безсонных ночей перед багфиксом.

    Вот в этом и есть практический смыл тестирования. Тестировать важные части логики.
    Ответ написан
    Комментировать
  • Какой монитор выбрать, если материнка DVI-D и HDMI?

    mayton2019
    @mayton2019
    Bigdata Engineer
    DVI-D - это морально устаревший стандарт. И его стоит брать только для железа которое уже не будет модернизироваться. Кроме того у DVI-D есть ограничения по разрешению видео. Посмотрие в технических описаниях стандарта.
    Ответ написан
    Комментировать
  • Какой формат (с изменениями) эффективнее хранится в Git?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вам надо в git складывать не бэкапы Sqlite а текстовое представление wiki по состоянию на сегодняшний день. Насколько я помню там есть
    свой язык форматирования типа markup. Так что все будет норм.
    Ответ написан
    2 комментария
  • Какую выбрать бд для телеграм бота на пайтоне?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нашел информацию, что sqlite не поддерживает многопоточность.

    Это не проблема для твоего приложения. Обеспечивай синхронизацию на уровне python и работай короткими
    операциями (OLTP). insert/update по одной строчке.

    А мультипоточность можно заказывать для долгоиграющих процессов. В боте таковых нету. Не должно быть вообще. Никогда не должно быть.
    Ответ написан
    Комментировать
  • Зачем паттерн одиночка?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Этот паттерн нужен для тех языков где нет специальных возможностей для сингл-тонизации. Например в Java это всегда реализуется через статичное поле или метод в любом классе.

    В Scala есть object - это уже готовый синглтон из коробки поэтому необходимости в следовании паттерну уже вроде как нет.
    Ответ написан