• Kubernetes, десятки configmap и как это готовить?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут читается не техническая а организационная проблема.

    Не очень понятно но попробую дать совет.

    Вот ты говоришь что требуется в 10 конфигах сделать изменения.
    Какие? Они - взаимосвязаны? - Это должен быть 1 коммит в git.
    Эти все изменения должны быть просмотрены глазами хотя-бы несколькими людьми.
    Если цена изменения дорого стоит (инфраструктура) то по любому должна
    быть бригада девопсов. Они - страхуют друг друга от случайной ошибки.
    Если ты будешь брать на себя падения датацентров - то очень скоро
    станешь пациентом кардиолога. Бери коллег для подстраховки.

    Константы и зависимости - надо объявлять отдельно. Чтоб если меняется hostname
    или имя свойства - то это должно быть ровно одно изменение. Как поддержать
    константы в конфигах - я щас не помню но была куча всяких штук... толи Puppet
    толи Ansible вобщем поищи сам. Я думаю таких много конфигураторов.

    Когда несколько environments то на проекте создается просто несколько фолдеров типа
    /dev
    /qa
    /uat

    и в каждом фолдере лежит полностью сконфигурированная и оттестированная
    копия всех конфигов. Переключение между env тоже должны происходит
    изменением ровно 1 свойства.

    Если внутри конфигов есть некая базовая конфигурация которая очень похожа
    (прототип) то сделайте аналог COC (Convention Over Configuration). Пускай
    прототип будет всегда. А наследники dev, qa, uat будут просто изменять
    дельту. Пароль поменялся - в конфиге-наследнике - лежит ровно 1 строчка с паролем.
    Других строк - не надо. Потому что они наследуются от прототипа.

    Как технически реализовать COC - я не скажу. Это надо обсуждать. Я это делал
    на Java проектах но это как-бы идея "на подумать". На проектах у меня были
    *.properis файлы и эту конвенцию было реализовать несложно. С ЯМЛ ами я не делал.
    Ну думаю что это возможно. Почему нет?
    Ответ написан
    2 комментария
  • Как работают драйвера на Android?

    @rPman
    Бинарные блобы.

    Подавляющее большинство производителей смартфонов, планшетников, SmartTV и вообще всего многообразия IoT из мира arm, в нарушение GNU лицензий и здравого смысла не предоставляют никаких драйверов, инструкций и не оказывают содействия сообществу (некоторые только на него и надеются, т.е. вот вам говно, пилите, работайте бесплатно, а мы с продаж железа будем получать бабло, не потратив ни копейки на софт, потом всех кинем). Чаще всего производитель однократно под конкретную версию ядра, пилит рабочую конфигурацию (не только модули но и фактически весь образ android), затем выкидывает все исходники в мусорку и забывает про то что это существует.

    Все существующие кастомные прошивки берут существующие образы android, иногда с соседних совместимых устройств, и тусуют содержимое, в некоторых комбинациях это работает.

    Нормальный linux в подавляющем большинстве случаев установить не получится. В лучшем случае, если заработает, не будет доступа ни к радиомодулю (включая wifi и модем) ни к тачскрину ни даже к видеоускорителю (максимум в режиме framebufer)

    p.s. В некоторых случаях, если у какого-то любопытного хакера, оказывается интересное ему устройство, он может отреверсить работу оборудования и запилить свой драйвер, если повезет, этот код попадает в мейнстрим linux и тогда его поддержкой займется уже не только сообщество (энтузиасты) но и финансово заинтересованные компании.
    Ответ написан
    2 комментария
  • "прикладной код Java" - это что?

    @Dementor
    программист, архитектор, аналитик
    заменить на “прикладной код движка Java” будет корректно?

    Нет. "Движок Java" - это JVM, а "прикладной код" тут это просто код (логика), который решает прикладную задачу.
    Ответ написан
    Комментировать
  • Почему выражение (-1ll) в ассемблерном коде MSVC равно ff ff ff ff?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Уловка в системе процессорных комманд: 48 c7 45 08 - позволяет загрузить в 64-битную ячейку памяти 32 битное число, автоматически расширяя его до 64 бит.

    Смотрите список кодов x64:
    0x48 - означает, что следующая комманда работает с 64-битами.
    0xC7 - mov immediate (данные в команде)
    Дальше идут флаги, указывающие как интерпретировать аргументы, что куда адресовывать и т.д.

    Но важно, что команда C7 работает с r/m16/32/64 данными, а аргумент у нее может быть только imm16/32 (третий столбец). Т.е. она принимает или 2 или 4 байта, в зависимости от обвеса, а записывать может до 64 бит. Сравните это с коммандой 0xB8 в той же таблице, она уже может принимать 64 бита.

    Если аргумент меньше ячейки памяти, то он расширяется (sign extended) до нужного размера (бит знака копируется влево до упора). Это позволяет записать числено равное значение в более битную ячейку. ведь 32-битное число 0xFFFFFFFF - это -1 в дополнительном бинарном коде, а 0xFFFFFFFFFFFFFFFF - это тоже -1 в дополнительном 64-битном коде.

    Компилятор использует вот эту команду, а не 0xB8, потому что сама команда короче, а исполняется так же быстро. Меньше кода, больше всего помещается в кеш и все работает быстрее, да и exe-шник меньше получается.
    Ответ написан
    2 комментария
  • Как заменить мышь, и установить чувствительность как было раньше?

    Griboks
    @Griboks
    Никак. Любой способ потребует от вас подбора.

    Попробуйте провести мышкой вдоль коврика от начала до конца. Заметьте пройденное курсором расстояние. Настройте чувствительность так, чтобы эти расстояния совпадали.

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

    Но в любом случае вам потребуется тем или иным способом подбирать параметры, потому что кроме dpi и чувствительности влияют ещё размеры, обхват, трение. А ещё есть отдельная чувствительность при малых движениях (когда вы целитесь по пткселям).
    Ответ написан
    Комментировать
  • Как использовать другой "ситаксис" при написании Телеграмм-бота?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Как минимум - выносите логику бота в отдельные функции/классы, которые будут вызываться в функции-обработчике команды. Примерно как-то так (пример очень условный, чисто для описания концепции):

    from utils import some_func
    
    ... 
    
    @bot.message_handler(func=lambda message: True)
    def echo_all(message):
        some_func()
    Ответ написан
  • Почему утверждается, что int32_t имеет ширину точно 32 бита, если он является всего лишь псевдонимом int, который может быть больше 32 бит??

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    В рассуждениях есть ошибка.

    Да, стандарт утверждает что тип int может иметь размер не меньше 16 бит.
    Таблица имеет название "Minimum width", т.е. минимальный размер. Минимальный - это значит что int может иметь размер в 16 бит. А может иметь и 64 бита.

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

    Ошибка в рассуждениях заключается в том, что ты проводишь нить только от int32_t к int и дальше к стандарту. В то время как стандарт определяет и требования к типу int32_t тоже.
    Тип int32_t всегда и для любой модели памяти выбирается таким образом чтобы гарантировать размер в 32 бита.

    То что где-то int32_t является псевдонимом int - это не более чем временное совпадение.
    Ответ написан
    1 комментарий
  • Почему утверждается, что int32_t имеет ширину точно 32 бита, если он является всего лишь псевдонимом int, который может быть больше 32 бит??

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Смотрите документацию. Там действительно утверждается, что int32_t должен иметь размер ровно 32 бита ("exactly").

    Где вы взяли, что int32_t - это псевдоним int?
    Подозреваю, что там, где вы это видели, куча #ifdef и проверок архитектуры.
    Возмножно, на вашей системе, где int итак имеет 32 бита так оно и есть. При компиляции на другую архитектуру внезапно может оказаться, что int32_t - нифига не псевдоним к int.
    Ответ написан
    3 комментария
  • В чём отличие многопоточности и асинхронности в контексте .NET C#?

    Nipheris
    @Nipheris Куратор тега C#
    Асинхронность - это способ организации вычислений, когда код, вызывающий какую-либо операцию/подпрограмму /функцию, не дожидается завершения работы этой операции, а если ему интересен результат вычислений, то он получает вместо готового результата некий способ запросить результат позже, когда он будет готов (то, что называется промисом или фьючером или ещё как-то в зависимости от языка). Это по сути противоположность "обычному" синхронному вызову, когда вызывающий код останавливается и ждёт завершения функции, чтобы получить результат. Как это будет достигнуто - это уже другой вопрос, это зависит от сути операции, запускаемой асинхронно.

    Но ведь при классической многопоточности никакой поток так же не блокируется

    Что такое "классическая многопоточность"? Что это за термин? Что такое неклассическая многопоточность?
    Если брать потоки ОС, то операционка просто передаёт управление созданному потоку в желаемую точку входа и дальше уже поток решает что и как делать. Поток может молотить вычисления 10 минут, потом записать их куда-нибудь в файл и завершиться. Никаких кормлений задачами не будет (хотя я не совсем понимаю что такое кормить задачами в вашем контексте).

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

    С чего бы? Асинхронный код полезен при большом количестве операций ввода-вывода - диск, сеть и т.д. Не обязательно это должно быть что-то, вычисляющееся в отдельном потоке. Вот, почитайте хорошую статью: There is no thread.

    Вам будет полезно ознакомиться с асинхронностью в какой-нибудь изначально однопоточной среде, например JS в браузере не считая вебворкеров. Тогда вы поймёте разницу.
    Ответ написан
    5 комментариев
  • Как firebase шифрует пароли?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    https://firebaseopensource.com/projects/firebase/s...

    Просто вводите ваш вопрос на английском
    Ответ написан
    Комментировать
  • Имеет ли вес хеш сумма в юридической практике?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я-бы попросил переделать текст договора. На момент подписания мне должны быть ясны все реквизиты. Фамилии, условия, сумма и вдруг вы подкладываете какой-то непонятный хеш. Мы же не про хеши договаривались.

    Далее. Ты говоришь - в "случае чего" - доказать. Доказательство скорее всего будет происходить в суде. Суд призовет эксперта. А он будет рассматривать не какие-то хеши а как раз именно ваши чертежи и модели и прочее. Так как именно это будет звучать в главном вопросе.
    Ответ написан
    1 комментарий
  • Нужно ли при разработке библиотеки следовать принципу одной ответственности?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Это скорее проблема версионирования, чем SRP
    Я бы дал такой ответ: тяните что хотите.
    Почему:
    - Пользователи могут начать использовать вашу версию зависимости - просто откатиться от своей
    - Вы можете выложить новую версию своей библиотеки с обновленными зависимостями
    - Увеличение продуктивности разработки: скорость, удобство

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

    P.S. Как я понял, вы думаете, что увеличение уровня абстракции метода влечет за собой обязательное использование внешних зависимостей, то это не обязательно так - все пишут велосипеды. Например, я однажды написал минималистичный парсер JS, вместо использования сторонних библиотек. Сложность по факту одна и та же, но зависимостей нет.
    Ответ написан
    Комментировать
  • Нужно ли при разработке библиотеки следовать принципу одной ответственности?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Да можно. Это называется фасадом. Ограничение в single responsibility обычно относится к ООП и к классам.

    Вообще если ты фрилансер и делаешь просто заказ чтоб отдать его с концами - то тебе безразлично что будет внутри. Главное чтоб ты понимал. А соглашения по декомпозиции кода на части появляются только как результат
    коллективной работы над кодом. Тоесть ты должен спрашивать не qna, а свою команду как вам удобнее
    разрабатывать код.
    Ответ написан
    Комментировать
  • Стоит ли менять термоинтерфейс?

    hint000
    @hint000
    у админа три руки
    В интернете пишут что нужно менять раз в 6-12 месяцев.
    Это миф. Развод со стороны тех, кто на этом зарабатывает. И наивность со стороны тех кто поверил и распространяет миф.
    После 5 лет вполне можно поменять, но и то не строго обязательно. Менять нужно, если заметно, что ухудшилось охлаждение. Менять нужно, если по какой-то причине снимали систему охлаждения (например, для ремонта материнской платы или для того, чтобы лучше почистить от пыли). Если температура в норме, то лучше не лезть. Потому что всегда есть шанс накосячить. Даже в сервисном центре могут накосячить (хоть и гораздо реже, чем косячат любители).
    Ответ написан
    Комментировать
  • Что значит: "Разрешение печати До 4800 x 1200 точек на дюйм"?

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

    Если вы хотите знать, почему не удалось увеличить сверх 1200 разрешение механизма подачи бумаги, то вам нужно задавать этот вопрос непосредственно инженерам, конструировавшим этот узел. Они знают, в какое техническое ограничение упирается это разрешение.
    Если вы хотите знать, зачем тогда делали в 4 раза большее разрешение у механизма перемещения головки (и не устраивает ответ "потому что могли так сделать"), то вам нужно задавать этот вопрос маркетологам. Потому что отпечаток в 4800 x 1200, конечно, выглядит несколько лучше, чем в 1200 x 1200, но, очевидно, хуже, чем в 2400 x 2400. Но вот 4800 x 1200 инженеры смогли сделать, а 2400 x 2400 не смогли.
    Ответ написан
    3 комментария
  • Замыкания не существует?

    Stalker_RED
    @Stalker_RED
    Я немного добавил наглядности
    function one() {
      const oneVar = 'Hello!'
      let counter = 0;
      console.log('функция one работает прямо сейчас, в счетчике', counter)
    
      function two() {
        console.log(oneVar, ++counter)
      }
      
      console.log('функция one почти завершилась, в счетчике все еще ', counter);
      return two
    }
    
    const three = one();
    console.log('функция one точно завершилась, даже return сработал');
    console.log('в переменной three сейчас функция two()');
    console.log(three);
    
    
    three();
    three();
    three();
    console.log('обожемой, мы видим как менялась переменная в уже завершенной функции. чераная магия? нет - это называется замыкание!');

    выхлоп:
    "функция one работает прямо сейчас, в счетчике", 0
    "функция one почти завершилась, в счетчике все еще ", 0
    "функция one точно завершилась, даже return сработал"
    "в переменной three сейчас функция two()"
    function two() {
      console.log(oneVar, ++counter)
    }
    "Hello!", 1
    "Hello!", 2
    "Hello!", 3
    "обожемой, мы видим как менялась переменная в уже завершенной функции. чераная магия? нет - это называется замыкание!"
    Ответ написан
    Комментировать
  • Замыкания не существует?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Функция one() определяет переменную oneVar. Затем в ней определяется функция two(), в лексическое окружение которой попадает oneVar. В конце своей работы функция one() возвращает в качестве результата функцию two().
    В переменную three записывается результат работы one(), то есть функция two(). Несмотря на то, что one() уже закончила работу, переменная oneVar сохраняется в лексическом окружении функции two().
    При вызове three() фактически вызывается two(), в которой переменная oneVar доступна для использования.
    Ответ написан
  • Имеет ли вес хеш сумма в юридической практике?

    BasiC2k
    @BasiC2k
    .NET developer (open to job offers)
    Почему бы и нет? Главное - укажите это в договоре, как подтверждение того, что обе стороны принмают этот способ контроля целостности передаваемых файлов.
    В договоре необходимо указать :
    - что именно передаётся, с материальной точки зрения. В Вашем случае - указывается перечень файлов, и их основные описательные характеристики;
    - как именно передаются файлы (например - на носителе), согласно акта приёма-передачи. Стороны договорились о том, что целостность файлов подтверждается контрольной (хеш) суммой, которая рассчитыватся согласно алгоритма (MD5, SHA и т.д.) применительно к каждому бинарному файлу. Соответственно, в акте приёма-передачи указываете эти контрольные суммы, фразу что принимающая сторона проверила файлы и подтверждает что хеш суммы соответствуют указанным.
    Ответ написан
    Комментировать
  • Kак выключить редирект с http на https в FireFox?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Отключить режим «Только HTTPS»
    https://support.mozilla.org/ru/kb/rezhim-tolko-htt...
    Либо какое-то расширение типа HTTPS Everywhere.
    Если не помогает - использовать Private Mode для входа на http сайты
    Ответ написан
    Комментировать
  • Как решить задачу на c?

    GavriKos
    @GavriKos
    Ну если выше ваша попытка перенести на си, то:
    if i+1<=x:

    это так не работает, условие должно быть в круглых скобках (if это оператор), двоеточие не нужно:
    if (i+1<=x)

    int a[0]*x;


    Вот это я вообще не понял и 99% что это не будет работать. Просто почитайте в гугле как в си инициализировать массив переменной длины.

    И да - в тегах c++, в вопросе c - вы определитесь

    P.S. Логику не проверял вообще, чисто синтаксис. Кстати в цикле тоже ошибка - и тоже просто советую загуглить цикл for
    Ответ написан
    Комментировать