Задать вопрос
  • Зачем для кеширования использовать Redis, если можно сделать файловое кеширование?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Разработка софта - это наука не теоретическая а практическая. Кеш или мемоизация вычислений - это просто один из множества паттернов оптимизации. Вполне возможно что найдется задача где Redis не нужен. Или при интенсивной записи может оказаться что затраты на актуализацию кешей перекрывают
    их полезный эффект при чтении. Кеши могут быть отравлены (poisoned) кривыми данными с бесконечным TTL
    и это может быть проблема. Кеши могут требовать реализации чуть более сложных веб-сценариев с
    If-None-Match или If-Modified-Since. Тоесть их использование не бесплатно для разработки. Ну это не
    чек-боксик включить. Это - архитектурный вопрос и над ним надо думать.

    Redis, как и микро-сервис может физически лежать на другом хосте или образовывать кластер поэтому одно преимущество у него уже есть - это раздельное использование ресурсов.

    Вообще для Redis и Nginx не существует оценочной формулы полезного эффекта. Вы просто берете
    за образец некую работающую систему. Смотрите как на best practices и применяете к своей задаче.

    И потом через A/B тестирование смотрите какие были полезные изменения. Что стало лучше работать.
    Что стало хуже (плата за биллинг использования новых серверов или нодов или больше памяти).
    Ответ написан
    Комментировать
  • Как с помощью TimescaleDB реализовать выгрузку последних данных с разбивкой по устройствам?

    mayton2019
    @mayton2019
    Bigdata Engineer
    А попробуй убери из индекса дату.

    CREATE INDEX ix_imei_time ON locations (imei);

    Я не работал с TimescaleDB но вообще работать со вторичными индексами в time-series - это плохая тема.
    Лучше выбрать лидирующий партишен как дата. И вторичный партишен как хеш от какого-то интересующего
    атрибута или группы атрибутов. И тогда оптимизатор пойдет просто в тот фасет который соотвествует нужному
    пересечению партишенов.
    Ответ написан
  • Можно ли TCP ускорить при помощи TCP via UDP tunnel?

    mayton2019
    @mayton2019
    Bigdata Engineer
    1) Оба протокола работают поверх IP. Тоесть если уровень IP работает медленно - то и нет никакого смысла что-то виртуализировать поверх медленного.

    2) Время пинга является одной но далеко не последней характеристикой сетевого канала. Для игр оно может быть важно а для цифрового телевидения - вобщем-то не очень. Можно создать искусственно ситуацию когда пропускная способность равна гигабиту а пинг плохой и наоборот когда сеть медленная по скорости но отклик - быстрый. Первый вариант будет хорош для телевидения 4К а второй для АСУТП с коротким временем реакции.
    Ответ написан
    Комментировать
  • Стоит ли мне знать как работает cmd для Python?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Командная строка нужна когда у тебя есть задачи интеграции твоего кода с чем-то другим.
    Также полезно знать ее для задач админства и девопс-освства.

    Обычно знания работы с шеллом - (не только cmd но и bash) это большой плюс к другим
    скилам и к более широкому пониманию того как работает операционная система. Файлы.
    Named Pipes. Коды ошибок и состояний. Логгирование. Анализ крашей.
    Ответ написан
    1 комментарий
  • Какие виды и специализации Java программистов бывают?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Самая правильная специализация выставляется работодателем. Вот туда и надо смотреть.
    Откройте местную газету вакансий для Java. И через 2-3 часа чтения у вас будет самая
    правильная классификация или номенклатура или бох еще какая категоризация
    джавистов.

    А что вы здесь еще хотели узнать? Про формы черепов? Или про партийную принадлежность джавистов?
    Ответ написан
  • Как создать sql песочницу?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Первое. Песочницы можно создавать с помощью Docker.

    Второе. Настройками нужно ограничить настолько чтоб пользователь мог только лишь решить задачу leetcode
    и получить корректный ответ. Должны быть квоты на память, процессор и диск. Должны быть квоты
    на время исполнения query
    . Любая попытка превысить квоту - должна моментально прерывать сессию
    пользователя и перегружать контейнер.

    Проблема всех песочниц в том что они предлагают в чистом виде SQL-инжекцию. И это принципиально нерешаемо. Вобщем не забываем про fork-bomb и прочие трюки которые могут даже в условно безопасной
    песочнице создавать проблемы.
    Ответ написан
    Комментировать
  • Как решить проблему 'utf-8' codec can't decode byte 0xf6 in position 3539: invalid start byte?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Возможно ты не так интерпретируешь смысл ошибки
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf6 in position 3539: invalid start byte

    Что это за позиция 3539? Внутри строки? Файла? Или блока utf-декодера?

    Поищи просто 0xf6 внутри файла и посмотри какие байты были до него и после.
    Префикс в четыре единичных бита предполагает следующий паттерн
    11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    и надо это проверить.
    Ответ написан
    2 комментария
  • Какую книгу взять новичку в разработке микросервисов на Spring Framework?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Я не понимаю зачем такое ограничение в названии топика?
    Микросервисы и Spring - это как езда на лошади только галопом.
    Или рыбалка только для пресноводных рыб.
    Ответ написан
    Комментировать
  • Какой бекэнд выбрать для компилятора?

    mayton2019
    @mayton2019
    Bigdata Engineer
    игрушечный скриптовый язык программирования.

    Какой бекэнд выбрать для компилятора?

    В самом вопросе обычно лежит половина ответа.
    Если вы дадите определение back-end - то правильно облегчите себе решение задачи.
    Вот выше вы писал про скриптовый язык. Тогда почему вдруг стали дальше писать про
    back-end и native-компилляторы?

    Есть целый пласт языков или виртуальных машин которые живут и работают не доходя
    всегда до LLVM. И нужен ли вам LLVM - большой вопрос. Что вы хотите от LLVM? HiLoad?
    Это не задача скриптинга.

    Вобщем поставте какое-то внятное целеполагание. Вы создаете скриптовый язык чтобы ЧТО?
    Ответ написан
    Комментировать
  • Как избежать коллизии по данным?

    mayton2019
    @mayton2019
    Bigdata Engineer
    При высокой нагрузке близкой к 100% пользователь может совершить транзакцию на создание объекта в базе. Сама транзакция может подвиснуть. Пользователь не дожидаясь ответа обновляет страницу и снова создает объект. Получается уже две транзакции в очереди. По итогу когда очередь доходит до выполнения имеем в базе два одинаковых объекта (созданных вплоть до ms) что ломает логику программы.


    Очень плохо что вы довели систему до нагрузки 100%. Обычно concurrency работает хорошо когда мы не доводим до такого состояния. Есть даже такой термин thread starvation (голодание потоков) когда потоки никак не могут получить квант времени.

    Без кода и лог-файлов тут нечего обсуждать. Я просто могу дать несколько направлений на подумать.

    1) CQRS (Command-Query-Separation) - это шаблон разработки при котором команды на изменение данных и запросы на их чтение идут независимо и существуют как-бы в разных временных эпохах. Это дает возможность масштабировать системы довольно сильно. И такие системы обычно лишены блокирок.

    2) Idempotency- это два свойства бизнес операций. Идемпотентность например предполагает что если платежная система дважды продублировала ваш платеж (MQ/сетевые replays) за покупку чашки Кофе например то это не означает что с вас банк снимет дважды деньги. На самом деле каждая ваша карточная операция имеет уникальный ID и с точки зрения биллинга будет применение платежа только 1 раз с одним уникальным ID. Второй платеж-дубль будет проигнорирован. Это свойство часто используется в Apache Kafka как один из способов поднять скорость и надежность.

    3) Когда ваша база или сервер приложений находтся в состоянии как-бы "агонии" то не стоит пытатся добивать ее повторами операций. А стоит на некоторое время прикрыть канал операций. Или разорвать цепь предохранителя. Как делают в электрике при повышенной нагрузке. Есть такой шаблон Cirquit Breaker. Аварийный размыкатель. Netflix его активно использует.

    Вот подумайте.
    Ответ написан
    2 комментария
  • Как измерить площадь фигуры?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Есть алгоритм Монте-Карло. Ты просто кидаешь рандомные точки на экран и считаешь попадает ли точка в фигуру или нет. Соотношение попаданий к общему число бросков даст тебе соотношение площади фигуры и площади области бросков (экрана).

    Данный метод универсален. Быстр и позволяет аппроксимипровать площать (выдавать приближенное значение) еще до того как будут посчитаны все точки).

    Решение о попадании можно принимать по цвету пиксела.

    Если на экране находится несколько фигур одного цвета - то соотв будет посчитана их общая площать.
    Ответ написан
  • Анонимный выход в сеть?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Чтоб жить анонимно в современном цифровизированном государстве надо просто отказаться от всех услуг государства. Выкинуть телефоны и банковские карточки. Порвать паспорт и уйти жить бомжом или к цыганам.
    Вот как-то так. Бомжа и человека без документов невозможно судить или к чему-то привлечь. И обычно полиции или военкому такие люди просто не интересны.

    Можно было-бы пообсуждать всякие tor, free-net и прочее. Я не пользовался. Но знающие говорят что работать невозможно. Трафик слабый. И есть проблема нулевого доверия которая существует почти всегда везде и во всех крипто-системах. Нет доказательства что самый первый peer к которому ты подключаешся не работает на спец-службы. И никто из крипто-сообщества насколько я знаю никогда не проводил полный анализ на безопасность например сети tor. И не доказывал сам факт безопасности. Нам просто предлагают поверить что tor безопасен примерно таке-же как и Мавроди убеждал в свое время что его денежные знаки надежны.

    А самый простой популярный протокол TCP/IP в принципе вообще исключает анонимность на уровне своей идеи. Сокетное соединение всегда знает source/dest IP и замылить или каким-то образом скрыть эту информацию просто невозможно. Прокси и наты и соксы и ВПН-ы не в счет так как они тоже ничего вам не обещают и не гарантируют.

    По поводу VPN на базе хостингов AWS/Azure. Почти все облачные провайдеры содержат на своем сайте документ
    который вы должны были читать. И он говорить о том что сервисы облачного провадера не могут быть использованы для незаконной деятельности (терроризм, наркотики, работорговля e.t.c.). Список видов деятельности может быть еще шире и поэтому надо читать. Поищите этот документ. Он должен быть. В разных формулировках но суть одинакова.
    Ответ написан
    2 комментария
  • Как сделать постоянный поиск по html элементу?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Появилась потребность в постоянном поиске по содержимому html элементов и тегов.

    Коробочное решение этого вопроса - это разработка парсера. Это кстати еще и решает другую задачу - перебор 150 страниц которая у вас все равно не автоматизируется.

    Ищите программиста и платите ему деньги.
    Ответ написан
    2 комментария
  • Чем не угодили 2G и 3G?

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

    Известно также что эволюция мобильных устройств в части экологии идет вперед. И новые устройства обычно более слабые. И требуют более частого покрытия радио-мачтами города. Ну вобщем - зеленая повестка. Насчет 3/4/5G я не уверен но старые устройства класса спутниковый телефон (кирпич с антеной) были не безопасны для здоровья.

    Мне вот еще интересно почему не развивают широковещательное цифровое бесплатное телевидение.
    Ответ написан
  • Как сделать мини консольную игру?

    mayton2019
    @mayton2019
    Bigdata Engineer
    с каждым выбором номера идёт другой совсем ход событий то есть с каждым ответом меняется вопрос и тому подобное

    Во времена DOS/RPG игрушек был создан такой себе DSL на котором можно было описывать диалоги
    персонажей к квестах. Вот интересно было-бы поднять хотя-б название этого языка или имя его авторов. Информацию я эту слышал в каком-то youtube канале где такие двое болтунов любят болтать про старое легаси.
    Ответ написан
    Комментировать
  • Как хранить данные о просмотре?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Недостаточно информации. Обычно БД и модель таблиц затачиваются под типичный запрос.
    Например. У нас есть публикации и и пользователи (те кто просматривают). Концептуально - это
    матрица где по горзионтали - пользователи а по вертикали публикации. Если рассматривать во времени
    то появляется третье измерение (куб) - ось времени. Где можно делать срез за последний день
    или неделю или год. Каждую ось можно агрерировать (брать все данные) как бы для аналитики.

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

    Работа - более экспериментальная. Делаешь симулятор запросов. И смотришь как оно работает.
    Насколько быстро.
    Ответ написан
  • Фреймворки, действительно ли важно?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я вот предложу пойти от происхождения слова. Что такое фреймворк если мы не знаем определения слова?
    Фрейм - это рамка. Work - работа. Тоесть работа в рамках. Рамочная работа.

    Безотносительно пользы или вреда от фреймворков уже можно предположить что это некое ужесточение
    порядка процесса разработки. Разработчик ЯП - свободен. Разработчик фреймворка - менее свободен.
    Фреймворк предполагает некоторую дисциплину в разработке user-stories. К примеру вы работаете
    с акторным фреймворком (Akka) и вы не можеет просто так запускать вычислительные Threads
    потому что это идеологически неверно. Вы должны декомпозировать задачу на набор функций-акторов
    которые делают простое действие и передают результат другим акторам. Если вы вдруг резко вильнули
    в сторону и затащили во фреймворк какую-то непонятную логику которая не ложиться на идеологию -
    то синьоры-лиды сурово сдвинут брови и попросят вас немедленно откатить из feature branch все
    что не соответсвтует. Такую ситуацию можно рассмотреть под разными углами. С одной стороны
    хорошо что вы не виляете туда-сюда. Код получается гомогенный и понятный. Акторы. Сервлеты.
    Bean-компоненты, SpringBeans, ApacheCamel компоненты e.t.c. С другой стороны если автор имеет
    амбиции к использованию только своего кода - тут надо обсудить приемлемость такого подхода
    в команде. Это - полюбому конфликт. А конфликты в корпоративной среде устраняются очень быстро.
    С автором будет проведен разговор. И далее у него будут варианты - работать
    в парадигме фреймворка или .. искать другие проекты. Здесь параллельно со фреймворком идут
    техники управления людьми на проекте.

    Еще одно лирическое отступление.

    Недавно я читал комьюнити программистов языка Forth. Эти ребята - большие философы написания
    кода. У них - практически нет не то что фреймворков но и даже библиотек. Просто такова специфика
    языка. Чего-то нет - напиши сам. Скорее всего сама целевая платформа (микро-устройства) определяет
    лимиты и фреймворки и либы просто не приживаются там.
    Ответ написан
    3 комментария
  • Как проверить, выключены ли компьютеры?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Поднята интересная проблема я считаю. Даже после успешного программного выключения надо проверить что какой-то зомби не был поднят своим хозяином в маске Гая Фокса волшебной командой Wake On Lan.

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

    P.S. Централизованное выключение с рубильника - вобщем-то правильное решение только надо проверить что нигде не пищат UPS-ники и нет ноутбуков на разрядке.
    Ответ написан
    1 комментарий
  • Как найти изображения в бинарном ELF-файле?

    mayton2019
    @mayton2019
    Bigdata Engineer
    BMP начинается с сигнатуры 'BM' и далее идет 4 байта размер файла.
    Любой программист-первокурсник сможет извлечь ресурсы владея этой информацией
    при условии что ресурсы не шифрованны.
    Ответ написан
  • Какую книгу по Java выбрать новичку с небольшим опытом на другом языке?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Алгоритмы брать не надо. Седжвик вообще писал не про Java а только про алгоритмы.
    У него - целое семейство книг такого вида. Сначала Алгоритмы на С. Потом на C++ И потом Java. Он по сути портировал исходники. Какой толк вам в таком портировании?

    А Хорстман, Эккель - вполне себе норм.
    Ответ написан
    Комментировать