• Что делать, если с именем нашего стартапа зарегистрировали торговую марку в США?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Согласиться с максимальной задержкой по времени передачи сайта и получить деньги.

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

    Все время, пока вы не передадите домен, активно продвигать ваш продукт под новым именем, предупреждая пользователей что текущее имя уходит другому продукту.
    Ответ написан
  • Почему зависает RabbitMQ при отправке файла в несколько мегабайт?

    2ord
    @2ord
    продвинутый чайник
    Веб-админка работает? Что там показывают графики?
    Нужно определить где затык: в ЦПУ, памяти или диске.
    Попробуйте вести мониторинг ОС при помощи atop или iostat и других утилит.
    Ответ написан
  • Как расшарить мощности стационарного ПК на другие машины?

    BojackHorseman
    @BojackHorseman
    ...в творческом отпуске...
    отдайте жене один ноут и 30к рублей на туфли, а себе на рабочее место стационарный мощный и телик к нему монитором.
    Ответ написан
  • Неизвестный светодиод в macbook?

    Mike_Ro
    @Mike_Ro
    $ run войтивайти
    Нет там никакого светодиода, это просто блестящая частичка (например металлическая или пластиковая). Она не светиться, а отражает свет. Не смотрите на нее, она стесняется...

    upd: ладно-ладно, это мини-камера рептилойдов, которые наблюдают за Вами прямо из своей штаб-квартиры...
    Ответ написан
  • Какой уровень Python должен быть у начинающего Junior DevOps инженера?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Хочу понять что именно нужно знать и уметь писать на Python чтоб я смог считаться Junior DevOps инженером.

    Можно вообще не знать питон.
    Devops не разработчик на питоне. Это сисадмин в области настройки ci/cd, для чего надо уметь работать с инструментами, которые позволяют в CI/CD, разбираться в том, как разрабатываются сейчас продукты и как они запускаются, разбираться в мониторинге.

    И вообще Junior Devops - это моветон. В девопсы приходят или после опыта системного администрирования или опыта разработки. Ну еще изредка могут из L3 перейти.
    Но никак не с нуля и сразу в девопсы. Исключения крайне редки и чем-то всегда обоснованы.

    Но если хочешь написать что-нить на питоне девопсное - поставь какой-нить прометеус и к нему на питоне напиши скриптик для снятия каких-либо показателей. Добавь в прометеус визуализацию и будешь мониторить какой-нить свой показатель.
    Ответ написан
  • Как правильно захардкодить запрос с https на http?

    @ky0 Куратор тега Nginx
    Миллиардер, филантроп, патологический лгун
    На текущем этапе нет желания переводить scope сервер на https

    Я бы подождал, пока появится желание. Вы зачем-то хотите развернуть вспять процесс эволюции :)
    Ответ написан
  • Почему много людей в IT недовольны своей работы?

    У каждого своя причина. Кто-то выгорел, кто-то просто устал. Со временем понимаешь что зп это не главное, да и зарплата в IT не такая уж и большая. И что ты каждый день сидишь по 14, 16 а иногда по 18 часов в день перед монитором. Никакой физической активности. Решаешь какие-то странные хочухи клиентов. Результат твоей деятельности мало кто увидит, большая часть твоего кода уйдет на помойку. Что каждый день выходят новые языки, фреймворки. Что количество данных, которые нужно пропускать через мозг, растет с каждым днем. А мозги только стареют. Помнишь Ваас рассказывал про безумие? Так вот, это оно. Каждый день ты залипаешь перед монитором, пытаясь решать кем то придуманную проблему. У тебя уже искривление позвоночника, зрение -5, туннельный синдром где-то не за горами. А ничего, кроме как пялиться в монитор, ты не умеешь.
    Ответ написан
  • Как можно сделать такой живой дым на сайте css и js?

    profesor08
    @profesor08 Куратор тега CSS
    Можно попробовать сделать такой дымок AfterEffects, наверняка есть куча туториалов. Потом экспортировать с помощью bodymovin в json формат для lottieweb

    Еще можешь попробовать использовать партиклы и заставить двигаться как надо
    stemkoski.github.io/Three.js/Particle-Engine.html
    squarefeet.github.io/ShaderParticleEngine

    Собственно вот похожее: https://mrdoob.com/#/144/magic_dust
    Ответ написан
  • Можно ли MongoDB использовать вместо MySql для обычных задач?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Так что MongoDB перекрывает основные функции MySql?


    Основная функция mysql и всех других реляционных баз данных - реляции.
    То есть работа с множественными таблицами и связями между этими таблицами. Все эти join

    Если вам это не нужно, вы можете придумать свою логику хранения данных и хранить хоть в монго, хоть в csv файле
    Ответ написан
  • Можно ли настроить передачу SQL запросов через RabbitMQ?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Надо писать самостоятельно. И стоит добавить что RabbitMQ не предназначен для данных задач. Задумана какая-то дичь
    Ответ написан
  • Как правильно делпоить на AWS?

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

    Самый простой пример возможной работы двух версий одновременно - это возможность обеспечить непрерывную работу во время обновления.

    База данных, бакэнд и фронтэнд могут касаться в один момент времени разные версии. Притом что физически база и бакэнд могут во время обновления использовать сразу несколько разных машин, вы не можете атомарно одновременно сменить версии везде

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

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

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

    Очень сложно описывать в общем виде косяки которые могут вылезти, и дай бог если для обновления у вас есть возможность остановить работу, но что делать если у вас миллиарды записей и вам нужно править структуру, на которую может уйти сутки или даже недели? Мало кто может позволить себе остановку бизнеса на такой срок.
    Ответ написан
  • Типизация функции, возвращающей разные объекты?

    bingo347
    @bingo347
    Бородатый программер
    const elementSettings = {
      welcome: {
        placeholder: 'Type welcome message...',
        question: '',
        isDescription: false,
        description: '',
        startButtonText: 'Start',
      },
      checkbox: {
        placeholder: 'Type question or statement...',
        question: '',
        isDescription: false,
        description: '',
        options: [] as string[],
        multiple: false,
      }, 
      dropdown: {
        placeholder: 'Type question here...',
        question: '',
        isDescription: false,
        description: '',
        options: [] as string[],
      },
      rating: {
        placeholder: 'Type question...',
        question: '',
        isDescription: false,
        description: '',
        steps: 10,
        defaultRate: 0,
        shape: 'stars',
      },
      text: {
        placeholder: 'Type question...',
        question: '',
        isDescription: false,
        description: '',
        maxLength: 99999,
      }, 
      slider: {
        placeholder: 'Type question...',
        question: '',
        isDescription: false,
        description: '',
        steps: 10,
      }, 
      thanks: {
        placeholder: 'Type message...',
        question: '',
        isDescription: false,
        description: '',
      }
    } as const;
    
    type Editable<T> = { -readonly [P in keyof T]: T[P]; };
    type ElementSettings = typeof elementSettings;
    
    export function getElementSettings<T extends keyof ElementSettings>(type: T): Editable<ElementSettings[T]> {
      if(type in elementSettings) {
        const settings = {...elementSettings[type]};
        if('options' in settings) {
          (settings as {options: string[]}).options = (settings as {options: string[]}).options.slice();
        }
        return settings;
      }
      throw new Error("element type doesn't match!");
    }
    Ответ написан
  • Типизация функции, возвращающей разные объекты?

    Aetae
    @Aetae
    Тлен
    Проще всего сделать так, ts сам подберёт типы:
    const elementDefaults = {
      'welcome': {
        placeholder: 'Type welcome message...',
        question: '',
        isDescription: false,
        description: '',
        startButtonText: 'Start',
      },
      'checkbox': {
        placeholder: 'Type question or statement...',
        question: '',
        isDescription: false,
        description: '',
        options: [] as string[],
        multiple: false,
      }, 
      'dropdown': {
        placeholder: 'Type question here...',
        question: '',
        isDescription: false,
        description: '',
        options: [] as string[],
      },
      'rating': {
        placeholder: 'Type question...',
        question: '',
        isDescription: false,
        description: '',
        steps: 10,
        defaultRate: 0,
        shape: 'stars',
      },
      'text': {
        placeholder: 'Type question...',
        question: '',
        isDescription: false,
        description: '',
        maxLength: 99999,
      }, 
      'slider': {
        placeholder: 'Type question...',
        question: '',
        isDescription: false,
        description: '',
        steps: 10,
      }, 
      'thanks': {
        placeholder: 'Type message...',
        question: '',
        isDescription: false,
        description: '',
      }
    }
    
    
    export function getElementSettings<E extends keyof typeof elementTypes>(type: E) {
      if(!(type in elementDefaults)) throw new Error("element type doesn't match!");
      return elementDefaults[type];
    }

    Но если хочется по правилам, то как-то так:
    type ElementSetting = {
      placeholder: string;
      question: string;
      isDescription: boolean;
      description: string;
    }
    
    type ElementSettings = {
      welcome: ElementSetting & {
        startButtonText: string;
      },
      checkbox: ElementSetting & {
        options: string[];
        multiple: boolean;
      },
      dropdown: ElementSetting & {
        options: string[];
      },
      rating: ElementSetting & {
        steps: number;
        defaultRate: number;
        shape: string;
      },
      text: ElementSetting & {
        maxLength: number;
      },
      slider: ElementSetting & {
        steps: number;
      },
      thanks: ElementSetting
    }
    
    const elementDefaults: ElementSettings = {
      'welcome': {
        placeholder: 'Type welcome message...',
        question: '',
        isDescription: false,
        description: '',
        startButtonText: 'Start',
      },
      'checkbox': {
        placeholder: 'Type question or statement...',
        question: '',
        isDescription: false,
        description: '',
        options: [],
        multiple: false,
      },
      'dropdown': {
        placeholder: 'Type question here...',
        question: '',
        isDescription: false,
        description: '',
        options: [],
      },
      'rating': {
        placeholder: 'Type question...',
        question: '',
        isDescription: false,
        description: '',
        steps: 10,
        defaultRate: 0,
        shape: 'stars',
      },
      'text': {
        placeholder: 'Type question...',
        question: '',
        isDescription: false,
        description: '',
        maxLength: 99999,
      },
      'slider': {
        placeholder: 'Type question...',
        question: '',
        isDescription: false,
        description: '',
        steps: 10,
      },
      'thanks': {
        placeholder: 'Type message...',
        question: '',
        isDescription: false,
        description: '',
      }
    }
    
    
    export function getElementSettings<E extends keyof ElementSettings>(type: E): ElementSettings[E] {
      if(!(type in elementDefaults)) throw new Error("element type doesn't match!");
      return elementDefaults[type];
    }
    Ответ написан
  • Openmeetings - видео/аудио за локальной сетью, как быть?

    jamakasi666
    @jamakasi666 Куратор тега Linux
    Просто IT'шник.
    неужели отсутствие ssl является помехой для передачи потока?

    да является, браузеры не дают доступа к камере\микрофону без нормального ssl. Хотя возможно, но маловероятно, что то изменилось.
    Кроме того могут еще и антивирусы мозги парить, писали что стандартный виндовый антивирь блочит и нужно добавлять исключения.
    Ну и еще малоприятное это вездесущие NATы, много настроек с разных сторон, turn\stun\ice и прочие прелести rtp трафика.
    Ответ написан
  • Возможен ли парсинг на GPU?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Начните отсюда.

    Просадка идет на 80% по процессору
    считывайте данные крупными блоками и обрабатывайте в асинхронном мультипоточном режиме.
    Ответ написан
  • Объясните, плиз зачем нужен react и vue?

    Ответ на вопрос "почему" заключается в одной емкой фразе: потому что сложно синхронизировать интерфейс и состояние.

    Представьте, что у вас есть простой UI какого-нибудь ToDoApp. Вам всего-то нужно сделать так, чтобы при вводе новой задачи она появлялась в списке, а при нажатии на крестик напротив удалялась бы. Проще простого!

    Но когда начнете решать проблему на нативном JS или на б-гомерзком jQuery, вы столкнетесь с необходимостью писать очень много шаблонного кода. Прежде всего на обслуживание DOM. Найти элемент, вставить элемент, добавить элементу класс, атрибут... в итоге у вас получится портянка на десятки строк для такой элементарной задачи, а ведь мы еще не добавили много кульных штук, без которых ToDoApp совсем не ToDoApp, как-то: возможность создавать разные списки, расписания, галочка, чтобы зачеркивать задачу и т.п. С реализацией всего этого ваша простыня будет расти, вы будете в ней путаться.

    На этом этапе вы можете начать велосипедить. Писать какие-то утилиты для работы с DOM. Разделите index.js на несколько файлов, сообразно DDD или хотя бы единой ответственности. Допустим даже, что вашим приложением внезапно стали пользоваться, у вас куча бизнес-идей. Вы начинаете наваливать фичи, структура становится все запутаннее, кода становится все больше, а еще приложение начинает тормозить. Вы проводите небольшой анализ и понимаете, что проблема в излишне частом обращении к DOM - вы дергаете его на каждый чих, ведь с jquery это так просто! И что делать? Писать еще один велосипед, чтобы обновлять DOM пакетно? А как отслеживать изменения в данных с сервера? Это ж сколько работы!

    К счастью, все вышеописанное, и даже гораздо больше, уже решено в Google, Facebook, а также некоторыми талантливыми энтузиастами. И у нас есть Angular, Vue, React, Svelte, которые предлагают вам возможность создавать быстрые, поддерживаемые приложения с минимумом шаблонного кода и продуманной архитектурой.
    Ответ написан